3.7-beta
- refactoring - different requirements based on prestige
This commit is contained in:
+1
-2
@@ -1,7 +1,6 @@
|
|||||||
|
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
Copyright (c) 2018
|
Copyright (c) 2018-2020 Okx
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
+2
-2
@@ -4,7 +4,7 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
group 'sh.okx'
|
group 'sh.okx'
|
||||||
version '3.6.2'
|
version '3.7-beta'
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
@@ -30,7 +30,7 @@ repositories {
|
|||||||
dependencies {
|
dependencies {
|
||||||
testImplementation group: 'junit', name: 'junit', version: '4.12'
|
testImplementation group: 'junit', name: 'junit', version: '4.12'
|
||||||
compileOnly 'org.jetbrains:annotations:16.0.2'
|
compileOnly 'org.jetbrains:annotations:16.0.2'
|
||||||
implementation 'org.spigotmc:spigot:1.12.2-R0.1-SNAPSHOT'
|
implementation 'org.spigotmc:spigot:1.15.2-R0.1-SNAPSHOT'
|
||||||
implementation('com.github.Realizedd:TokenManager:3.2.4') {
|
implementation('com.github.Realizedd:TokenManager:3.2.4') {
|
||||||
transitive = false
|
transitive = false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,5 @@
|
|||||||
package sh.okx.rankup;
|
package sh.okx.rankup;
|
||||||
|
|
||||||
import lombok.Getter;
|
|
||||||
import net.milkbowl.vault.permission.Permission;
|
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import sh.okx.rankup.ranks.Rank;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@@ -14,6 +7,12 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import sh.okx.rankup.hook.PermissionProvider;
|
||||||
|
import sh.okx.rankup.ranks.Rank;
|
||||||
|
|
||||||
public class RankList<T extends Rank> {
|
public class RankList<T extends Rank> {
|
||||||
@Getter
|
@Getter
|
||||||
@@ -38,18 +37,18 @@ public class RankList<T extends Rank> {
|
|||||||
|
|
||||||
protected void validateSection(ConfigurationSection section) {
|
protected void validateSection(ConfigurationSection section) {
|
||||||
String name = "'" + section.getName() + "'";
|
String name = "'" + section.getName() + "'";
|
||||||
if (section.getConfigurationSection("requirements") != null) {
|
/*if (section.getConfigurationSection("requirements") != null) {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"Rankup/prestige section " + name + " is using the old requirements system.\n" +
|
"Rankup/prestige section " + name + " is using the old requirements system.\n" +
|
||||||
"Instead of a configuration section, it is now a list of strings.\n" +
|
"Instead of a configuration section, it is now a list of strings.\n" +
|
||||||
"For example, instead of \"requirements: money: 1000\" you should use \"requirements: - 'money 1000'\".");
|
"For example, instead of \"requirements: money: 1000\" you should use \"requirements: - 'money 1000'\".");
|
||||||
}
|
}*/
|
||||||
Set<String> keys = section.getKeys(false);
|
Set<String> keys = section.getKeys(false);
|
||||||
if (keys.size() == 1 && keys.iterator().next().equalsIgnoreCase("rank")) {
|
if (keys.size() == 1 && keys.iterator().next().equalsIgnoreCase("rank")) {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"Having a final rank (for example: \"Z: rank: 'Z'\") from 3.4.2 or earlier should no longer be used.\n" +
|
"Having a final rank (for example: \"Z: rank: 'Z'\") from 3.4.2 or earlier should no longer be used.\n" +
|
||||||
"It is safe to just delete the final rank " + name + "");
|
"It is safe to just delete the final rank " + name + "");
|
||||||
} else if (section.getStringList("requirements").isEmpty()) {
|
} else if (!section.contains("requirements")) {
|
||||||
throw new IllegalArgumentException("Rank " + name + " does not have any requirements.");
|
throw new IllegalArgumentException("Rank " + name + " does not have any requirements.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -113,15 +112,9 @@ public class RankList<T extends Rank> {
|
|||||||
return list.get(list.size() - 1).getNext();
|
return list.get(list.size() - 1).getNext();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isLast(Permission perms, Player player) {
|
public boolean isLast(PermissionProvider perms, Player player) {
|
||||||
String last = getLast();
|
String last = getLast();
|
||||||
String[] groups = perms.getPlayerGroups(null, player);
|
return perms.inGroup(player.getUniqueId(), last);
|
||||||
for (String group : groups) {
|
|
||||||
if (group.equalsIgnoreCase(last)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public T next(T rank) {
|
public T next(T rank) {
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
package sh.okx.rankup;
|
package sh.okx.rankup;
|
||||||
|
|
||||||
import net.milkbowl.vault.permission.Permission;
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import sh.okx.rankup.hook.PermissionProvider;
|
||||||
import sh.okx.rankup.messages.Message;
|
import sh.okx.rankup.messages.Message;
|
||||||
import sh.okx.rankup.messages.Variable;
|
import sh.okx.rankup.messages.Variable;
|
||||||
import sh.okx.rankup.prestige.Prestige;
|
import sh.okx.rankup.prestige.Prestige;
|
||||||
@@ -10,9 +12,6 @@ import sh.okx.rankup.prestige.Prestiges;
|
|||||||
import sh.okx.rankup.ranks.Rank;
|
import sh.okx.rankup.ranks.Rank;
|
||||||
import sh.okx.rankup.ranks.Rankups;
|
import sh.okx.rankup.ranks.Rankups;
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Actually performs the ranking up and prestiging for the plugin and also manages the cooldowns
|
* Actually performs the ranking up and prestiging for the plugin and also manages the cooldowns
|
||||||
* between ranking up.
|
* between ranking up.
|
||||||
@@ -21,7 +20,7 @@ public class RankupHelper {
|
|||||||
|
|
||||||
private final RankupPlugin plugin;
|
private final RankupPlugin plugin;
|
||||||
private final ConfigurationSection config;
|
private final ConfigurationSection config;
|
||||||
private final Permission permissions;
|
private final PermissionProvider permissions;
|
||||||
/**
|
/**
|
||||||
* Players who cannot rankup/prestige for a certain amount of time.
|
* Players who cannot rankup/prestige for a certain amount of time.
|
||||||
*/
|
*/
|
||||||
@@ -37,9 +36,9 @@ public class RankupHelper {
|
|||||||
rank.runCommands(player);
|
rank.runCommands(player);
|
||||||
|
|
||||||
if (rank.getRank() != null) {
|
if (rank.getRank() != null) {
|
||||||
permissions.playerRemoveGroup(null, player, rank.getRank());
|
permissions.removeGroup(player.getUniqueId(), rank.getRank());
|
||||||
}
|
}
|
||||||
permissions.playerAddGroup(null, player, rank.getNext());
|
permissions.addGroup(player.getUniqueId(), rank.getNext());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendRankupMessages(Player player, Rank rank) {
|
public void sendRankupMessages(Player player, Rank rank) {
|
||||||
@@ -56,13 +55,13 @@ public class RankupHelper {
|
|||||||
public void doPrestige(Player player, Prestige prestige) {
|
public void doPrestige(Player player, Prestige prestige) {
|
||||||
prestige.runCommands(player);
|
prestige.runCommands(player);
|
||||||
|
|
||||||
permissions.playerRemoveGroup(null, player, prestige.getFrom());
|
permissions.removeGroup(player.getUniqueId(), prestige.getFrom());
|
||||||
permissions.playerAddGroup(null, player, prestige.getTo());
|
permissions.addGroup(player.getUniqueId(), prestige.getTo());
|
||||||
|
|
||||||
if (prestige.getRank() != null) {
|
if (prestige.getRank() != null) {
|
||||||
permissions.playerRemoveGroup(null, player, prestige.getRank());
|
permissions.removeGroup(player.getUniqueId(), prestige.getRank());
|
||||||
}
|
}
|
||||||
permissions.playerAddGroup(null, player, prestige.getNext());
|
permissions.addGroup(player.getUniqueId(), prestige.getNext());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendPrestigeMessages(Player player, Prestige prestige) {
|
public void sendPrestigeMessages(Player player, Prestige prestige) {
|
||||||
|
|||||||
@@ -1,8 +1,13 @@
|
|||||||
package sh.okx.rankup;
|
package sh.okx.rankup;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.text.DecimalFormat;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.Supplier;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import net.milkbowl.vault.economy.Economy;
|
import net.milkbowl.vault.economy.Economy;
|
||||||
import net.milkbowl.vault.permission.Permission;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@@ -23,6 +28,8 @@ import sh.okx.rankup.commands.RanksCommand;
|
|||||||
import sh.okx.rankup.commands.RankupCommand;
|
import sh.okx.rankup.commands.RankupCommand;
|
||||||
import sh.okx.rankup.gui.Gui;
|
import sh.okx.rankup.gui.Gui;
|
||||||
import sh.okx.rankup.gui.GuiListener;
|
import sh.okx.rankup.gui.GuiListener;
|
||||||
|
import sh.okx.rankup.hook.PermissionManager;
|
||||||
|
import sh.okx.rankup.hook.PermissionProvider;
|
||||||
import sh.okx.rankup.messages.Message;
|
import sh.okx.rankup.messages.Message;
|
||||||
import sh.okx.rankup.messages.MessageBuilder;
|
import sh.okx.rankup.messages.MessageBuilder;
|
||||||
import sh.okx.rankup.messages.NullMessageBuilder;
|
import sh.okx.rankup.messages.NullMessageBuilder;
|
||||||
@@ -67,17 +74,10 @@ import sh.okx.rankup.requirements.requirement.votingplugin.VotingPluginVotesRequ
|
|||||||
import sh.okx.rankup.util.UpdateNotifier;
|
import sh.okx.rankup.util.UpdateNotifier;
|
||||||
import sh.okx.rankup.util.VersionChecker;
|
import sh.okx.rankup.util.VersionChecker;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.text.DecimalFormat;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
public class RankupPlugin extends JavaPlugin {
|
public class RankupPlugin extends JavaPlugin {
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private Permission permissions;
|
private PermissionProvider permissions;
|
||||||
@Getter
|
@Getter
|
||||||
private Economy economy;
|
private Economy economy;
|
||||||
/**
|
/**
|
||||||
@@ -155,7 +155,11 @@ public class RankupPlugin extends JavaPlugin {
|
|||||||
|
|
||||||
public void reload(boolean init) {
|
public void reload(boolean init) {
|
||||||
errorMessage = null;
|
errorMessage = null;
|
||||||
if (!setupPermissions()) {
|
|
||||||
|
PermissionManager permissionManager = new PermissionManager(this);
|
||||||
|
|
||||||
|
permissions = permissionManager.findPermissionProvider();
|
||||||
|
if (permissions == null) {
|
||||||
errorMessage = "No permission plugin found";
|
errorMessage = "No permission plugin found";
|
||||||
}
|
}
|
||||||
setupEconomy();
|
setupEconomy();
|
||||||
@@ -215,7 +219,7 @@ public class RankupPlugin extends JavaPlugin {
|
|||||||
|
|
||||||
private void addAll(Map<String, Integer> map, RankList<? extends Rank> ranks) {
|
private void addAll(Map<String, Integer> map, RankList<? extends Rank> ranks) {
|
||||||
for (Rank rank : ranks.ranks) {
|
for (Rank rank : ranks.ranks) {
|
||||||
for (Requirement requirement : rank.getRequirements()) {
|
for (Requirement requirement : rank.getRequirements().getRequirements(null)) {
|
||||||
String name = requirement.getName();
|
String name = requirement.getName();
|
||||||
map.put(name, map.getOrDefault(name, 0) + 1);
|
map.put(name, map.getOrDefault(name, 0) + 1);
|
||||||
}
|
}
|
||||||
@@ -259,10 +263,6 @@ public class RankupPlugin extends JavaPlugin {
|
|||||||
registerRequirements();
|
registerRequirements();
|
||||||
Bukkit.getPluginManager().callEvent(new RankupRegisterEvent(this));
|
Bukkit.getPluginManager().callEvent(new RankupRegisterEvent(this));
|
||||||
|
|
||||||
rankups = new Rankups(this, loadConfig("rankups.yml"));
|
|
||||||
// check rankups are not in an infinite loop
|
|
||||||
// rankups.getOrderedList();
|
|
||||||
|
|
||||||
if (config.getBoolean("prestige")) {
|
if (config.getBoolean("prestige")) {
|
||||||
prestiges = new Prestiges(this, loadConfig("prestiges.yml"));
|
prestiges = new Prestiges(this, loadConfig("prestiges.yml"));
|
||||||
// prestiges.getOrderedList();
|
// prestiges.getOrderedList();
|
||||||
@@ -270,6 +270,12 @@ public class RankupPlugin extends JavaPlugin {
|
|||||||
prestiges = null;
|
prestiges = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rankups = new Rankups(this, loadConfig("rankups.yml"));
|
||||||
|
// check rankups are not in an infinite loop
|
||||||
|
// rankups.getOrderedList();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
this.errorMessage = e.getClass().getName() + ": " + e.getMessage();
|
this.errorMessage = e.getClass().getName() + ": " + e.getMessage();
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -354,17 +360,6 @@ public class RankupPlugin extends JavaPlugin {
|
|||||||
new TokensDeductibleRequirement(this, "tokenmanager-tokens"));
|
new TokensDeductibleRequirement(this, "tokenmanager-tokens"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean setupPermissions() {
|
|
||||||
RegisteredServiceProvider<Permission> rsp = getServer().getServicesManager()
|
|
||||||
.getRegistration(Permission.class);
|
|
||||||
if (rsp == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
permissions = rsp.getProvider();
|
|
||||||
return permissions.hasGroupSupport();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setupEconomy() {
|
private void setupEconomy() {
|
||||||
RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager()
|
RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager()
|
||||||
.getRegistration(Economy.class);
|
.getRegistration(Economy.class);
|
||||||
@@ -392,11 +387,11 @@ public class RankupPlugin extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ConfigurationSection getSection(Rank rank, String path) {
|
public ConfigurationSection getSection(Rank rank, String path) {
|
||||||
ConfigurationSection messages = rank.getSection();
|
ConfigurationSection rankSection = rank.getSection();
|
||||||
if (messages == null || !messages.isConfigurationSection(path)) {
|
if (rankSection == null || !rankSection.isConfigurationSection(path)) {
|
||||||
return this.messages.getConfigurationSection(path);
|
return this.messages.getConfigurationSection(path);
|
||||||
}
|
}
|
||||||
return messages.getConfigurationSection(path);
|
return rankSection.getConfigurationSection(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MessageBuilder getMessage(Rank rank, Message message) {
|
public MessageBuilder getMessage(Rank rank, Message message) {
|
||||||
@@ -417,7 +412,7 @@ public class RankupPlugin extends JavaPlugin {
|
|||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
Requirement money = rank.getRequirement("money");
|
Requirement money = rank.getRequirement(sender instanceof Player ? (Player) sender : null, "money");
|
||||||
if (money != null) {
|
if (money != null) {
|
||||||
Double amount = null;
|
Double amount = null;
|
||||||
if (sender instanceof Player && rank.isIn((Player) sender)) {
|
if (sender instanceof Player && rank.isIn((Player) sender)) {
|
||||||
@@ -441,7 +436,7 @@ public class RankupPlugin extends JavaPlugin {
|
|||||||
public MessageBuilder replaceRequirements(MessageBuilder builder, Player player, Rank rank) {
|
public MessageBuilder replaceRequirements(MessageBuilder builder, Player player, Rank rank) {
|
||||||
DecimalFormat simpleFormat = placeholders.getSimpleFormat();
|
DecimalFormat simpleFormat = placeholders.getSimpleFormat();
|
||||||
DecimalFormat percentFormat = placeholders.getPercentFormat();
|
DecimalFormat percentFormat = placeholders.getPercentFormat();
|
||||||
for (Requirement requirement : rank.getRequirements()) {
|
for (Requirement requirement : rank.getRequirements().getRequirements(player)) {
|
||||||
try {
|
try {
|
||||||
replaceRequirements(builder, Variable.AMOUNT, requirement,
|
replaceRequirements(builder, Variable.AMOUNT, requirement,
|
||||||
() -> simpleFormat.format(requirement.getTotal(player)));
|
() -> simpleFormat.format(requirement.getTotal(player)));
|
||||||
|
|||||||
@@ -39,16 +39,17 @@ public class Gui implements InventoryHolder {
|
|||||||
gui.prestige = oldRank instanceof Prestige;
|
gui.prestige = oldRank instanceof Prestige;
|
||||||
|
|
||||||
String type = gui.prestige ? "prestige" : "rankup";
|
String type = gui.prestige ? "prestige" : "rankup";
|
||||||
ConfigurationSection config = plugin.getSection(oldRank, type + ".gui");
|
String basePath = type + ".gui";
|
||||||
|
ConfigurationSection config = plugin.getSection(oldRank, basePath);
|
||||||
ItemStack[] items = new ItemStack[config.getInt("rows", 1) * 9];
|
ItemStack[] items = new ItemStack[config.getInt("rows", 1) * 9];
|
||||||
|
|
||||||
ItemStack fill = getItem(plugin, config, "fill", player, oldRank, rank);
|
ItemStack fill = getItem(plugin, plugin.getSection(oldRank, basePath + ".fill"), player, oldRank, rank);
|
||||||
ItemStack cancel = getItem(plugin, config, "cancel", player, oldRank, rank);
|
ItemStack cancel = getItem(plugin, plugin.getSection(oldRank, basePath + ".cancel"), player, oldRank, rank);
|
||||||
ItemStack rankup = getItem(plugin, config, "rankup", player, oldRank, rank);
|
ItemStack rankup = getItem(plugin, plugin.getSection(oldRank, basePath + ".rankup"), player, oldRank, rank);
|
||||||
|
|
||||||
addItem(items, config.getConfigurationSection("rankup"), rankup);
|
addItem(items, plugin.getSection(oldRank, basePath + ".rankup"), rankup);
|
||||||
addItem(items, config.getConfigurationSection("cancel"), cancel);
|
addItem(items, plugin.getSection(oldRank, basePath + ".cancel"), cancel);
|
||||||
addItem(items, config.getConfigurationSection("fill"), fill);
|
addItem(items, plugin.getSection(oldRank, basePath + ".fill"), fill);
|
||||||
|
|
||||||
gui.rankup = rankup;
|
gui.rankup = rankup;
|
||||||
gui.cancel = cancel;
|
gui.cancel = cancel;
|
||||||
@@ -64,9 +65,7 @@ public class Gui implements InventoryHolder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
private static ItemStack getItem(RankupPlugin plugin, ConfigurationSection parent, String name, Player player, Rank oldRank, String rank) {
|
private static ItemStack getItem(RankupPlugin plugin, ConfigurationSection section, Player player, Rank oldRank, String rank) {
|
||||||
ConfigurationSection section = parent.getConfigurationSection(name);
|
|
||||||
|
|
||||||
String materialName = section.getString("material").toUpperCase();
|
String materialName = section.getString("material").toUpperCase();
|
||||||
|
|
||||||
ItemStack item;
|
ItemStack item;
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package sh.okx.rankup.hook;
|
||||||
|
|
||||||
|
import net.milkbowl.vault.permission.Permission;
|
||||||
|
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||||
|
import sh.okx.rankup.RankupPlugin;
|
||||||
|
|
||||||
|
public class PermissionManager {
|
||||||
|
private final RankupPlugin plugin;
|
||||||
|
|
||||||
|
public PermissionManager(RankupPlugin plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PermissionProvider findPermissionProvider() {
|
||||||
|
return getVaultPermissionProvider();
|
||||||
|
}
|
||||||
|
|
||||||
|
private PermissionProvider getVaultPermissionProvider() {
|
||||||
|
RegisteredServiceProvider<Permission> rsp = plugin.getServer().getServicesManager()
|
||||||
|
.getRegistration(Permission.class);
|
||||||
|
if (rsp == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
Permission provider = rsp.getProvider();
|
||||||
|
if (!provider.hasGroupSupport()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new VaultPermissionProvider(provider);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package sh.okx.rankup.hook;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public interface PermissionProvider {
|
||||||
|
boolean inGroup(UUID uuid, String group);
|
||||||
|
void addGroup(UUID uuid, String group);
|
||||||
|
void removeGroup(UUID uuid, String group);
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package sh.okx.rankup.hook;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.UUID;
|
||||||
|
import net.milkbowl.vault.permission.Permission;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
|
public class VaultPermissionProvider implements PermissionProvider {
|
||||||
|
private final Permission permission;
|
||||||
|
|
||||||
|
public VaultPermissionProvider(Permission permission) {
|
||||||
|
this.permission = permission;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean inGroup(UUID uuid, String group) {
|
||||||
|
Objects.requireNonNull(uuid);
|
||||||
|
Objects.requireNonNull(group);
|
||||||
|
|
||||||
|
String[] playerGroups = permission.getPlayerGroups(null, Bukkit.getOfflinePlayer(uuid));
|
||||||
|
for (String playerGroup : playerGroups) {
|
||||||
|
if (group.equalsIgnoreCase(playerGroup)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addGroup(UUID uuid, String group) {
|
||||||
|
Objects.requireNonNull(uuid);
|
||||||
|
Objects.requireNonNull(group);
|
||||||
|
|
||||||
|
permission.playerAddGroup(null, Bukkit.getOfflinePlayer(uuid), group);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeGroup(UUID uuid, String group) {
|
||||||
|
Objects.requireNonNull(uuid);
|
||||||
|
Objects.requireNonNull(group);
|
||||||
|
|
||||||
|
permission.playerRemoveGroup(null, Bukkit.getOfflinePlayer(uuid), group);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -9,7 +9,7 @@ public enum Message {
|
|||||||
SUCCESS_PUBLIC("rankup.success-public"),
|
SUCCESS_PUBLIC("rankup.success-public"),
|
||||||
SUCCESS_PRIVATE("rankup.success-private"),
|
SUCCESS_PRIVATE("rankup.success-private"),
|
||||||
CONFIRMATION("rankup.confirmation"),
|
CONFIRMATION("rankup.confirmation"),
|
||||||
TITLE("rankup.title"),
|
TITLE("rankup.gui.title"),
|
||||||
RANKS_HEADER("rankup.list.header"),
|
RANKS_HEADER("rankup.list.header"),
|
||||||
RANKS_FOOTER("rankup.list.footer"),
|
RANKS_FOOTER("rankup.list.footer"),
|
||||||
RANKS_COMPLETE("rankup.list.complete"),
|
RANKS_COMPLETE("rankup.list.complete"),
|
||||||
@@ -22,7 +22,7 @@ public enum Message {
|
|||||||
PRESTIGES_COMPLETE("prestige.list.complete"),
|
PRESTIGES_COMPLETE("prestige.list.complete"),
|
||||||
PRESTIGES_CURRENT("prestige.list.current"),
|
PRESTIGES_CURRENT("prestige.list.current"),
|
||||||
PRESTIGES_INCOMPLETE("prestige.list.incomplete"),
|
PRESTIGES_INCOMPLETE("prestige.list.incomplete"),
|
||||||
PRESTIGE_TITLE("prestige.title"),
|
PRESTIGE_TITLE("prestige.gui.title"),
|
||||||
COOLDOWN_SINGULAR("rankup.cooldown.singular"),
|
COOLDOWN_SINGULAR("rankup.cooldown.singular"),
|
||||||
COOLDOWN_PLURAL("rankup.cooldown.plural"),
|
COOLDOWN_PLURAL("rankup.cooldown.plural"),
|
||||||
MUST_PRESTIGE("rankup.must-prestige"),
|
MUST_PRESTIGE("rankup.must-prestige"),
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ public class RankupExpansion extends PlaceholderExpansion {
|
|||||||
// return placeholders.getSimpleFormat().format(orElse(rankups.getByName(parts[2]).getRequirement(parts[3]), Requirement::getValueDouble, 0));
|
// return placeholders.getSimpleFormat().format(orElse(rankups.getByName(parts[2]).getRequirement(parts[3]), Requirement::getValueDouble, 0));
|
||||||
} else if (params.startsWith("rank_money_")) {
|
} else if (params.startsWith("rank_money_")) {
|
||||||
String[] parts = params.split("_", 4);
|
String[] parts = params.split("_", 4);
|
||||||
double amount = Objects.requireNonNull(rankups.getByName(parts[2]), "Rankup " + parts[2] + " does not exist").getRequirement("money").getValueDouble();
|
double amount = Objects.requireNonNull(rankups.getByName(parts[2]), "Rankup " + parts[2] + " does not exist").getRequirement(player, "money").getValueDouble();
|
||||||
if (parts.length > 3 && parts[3].equalsIgnoreCase("left")) {
|
if (parts.length > 3 && parts[3].equalsIgnoreCase("left")) {
|
||||||
amount = amount - plugin.getEconomy().getBalance(player);
|
amount = amount - plugin.getEconomy().getBalance(player);
|
||||||
}
|
}
|
||||||
@@ -74,10 +74,10 @@ public class RankupExpansion extends PlaceholderExpansion {
|
|||||||
return orElse(prestige, Prestige::getNext, prestiges.getFirst().getNext());
|
return orElse(prestige, Prestige::getNext, prestiges.getFirst().getNext());
|
||||||
case "prestige_money":
|
case "prestige_money":
|
||||||
requirePrestiging(prestiges, params);
|
requirePrestiging(prestiges, params);
|
||||||
return String.valueOf(simplify(orElse(prestige, r -> r.isIn(player) ? r.getRequirement("money").getValueDouble() : 0, 0)));
|
return String.valueOf(simplify(orElse(prestige, r -> r.isIn(player) ? r.getRequirement(player, "money").getValueDouble() : 0, 0)));
|
||||||
case "prestige_money_formatted":
|
case "prestige_money_formatted":
|
||||||
requirePrestiging(prestiges, params);
|
requirePrestiging(prestiges, params);
|
||||||
return plugin.formatMoney(orElse(prestige, r -> r.isIn(player) ? r.getRequirement("money").getValueDouble() : 0, 0D));
|
return plugin.formatMoney(orElse(prestige, r -> r.isIn(player) ? r.getRequirement(player, "money").getValueDouble() : 0, 0D));
|
||||||
case "current_rank":
|
case "current_rank":
|
||||||
if (rankups.isLast(plugin.getPermissions(), player)) {
|
if (rankups.isLast(plugin.getPermissions(), player)) {
|
||||||
return rankups.getLast();
|
return rankups.getLast();
|
||||||
@@ -92,32 +92,32 @@ public class RankupExpansion extends PlaceholderExpansion {
|
|||||||
}
|
}
|
||||||
return orElsePlaceholder(rank, r -> orElsePlaceholder(rank, Rank::getNext, "highest-rank"), "not-in-ladder");
|
return orElsePlaceholder(rank, r -> orElsePlaceholder(rank, Rank::getNext, "highest-rank"), "not-in-ladder");
|
||||||
case "money":
|
case "money":
|
||||||
return String.valueOf(getMoney(rank));
|
return String.valueOf(getMoney(player, rank));
|
||||||
case "money_formatted":
|
case "money_formatted":
|
||||||
return plugin.formatMoney(getMoney(rank).doubleValue());
|
return plugin.formatMoney(getMoney(player, rank).doubleValue());
|
||||||
case "money_left":
|
case "money_left":
|
||||||
return String.valueOf(Math.max(0, orElse(rank, r -> simplify(plugin.getEconomy().getBalance(player) - r.getRequirement("money").getValueDouble()), 0).doubleValue()));
|
return String.valueOf(Math.max(0, orElse(rank, r -> simplify(plugin.getEconomy().getBalance(player) - r.getRequirement(player, "money").getValueDouble()), 0).doubleValue()));
|
||||||
case "money_left_formatted":
|
case "money_left_formatted":
|
||||||
return plugin.formatMoney(Math.max(0D, orElse(rank, r -> plugin.getEconomy().getBalance(player) - r.getRequirement("money").getValueDouble(), 0D)));
|
return plugin.formatMoney(Math.max(0D, orElse(rank, r -> plugin.getEconomy().getBalance(player) - r.getRequirement(player, "money").getValueDouble(), 0D)));
|
||||||
case "percent_left":
|
case "percent_left":
|
||||||
return String.valueOf(Math.max(0D, orElse(rank, r -> (1 - (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble())) * 100, 0).doubleValue()));
|
return String.valueOf(Math.max(0D, orElse(rank, r -> (1 - (plugin.getEconomy().getBalance(player) / r.getRequirement(player, "money").getValueDouble())) * 100, 0).doubleValue()));
|
||||||
case "percent_left_formatted":
|
case "percent_left_formatted":
|
||||||
return placeholders.getPercentFormat().format(Math.max(0D, orElse(rank, r -> (1 - (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble())) * 100, 0).doubleValue()));
|
return placeholders.getPercentFormat().format(Math.max(0D, orElse(rank, r -> (1 - (plugin.getEconomy().getBalance(player) / r.getRequirement(player, "money").getValueDouble())) * 100, 0).doubleValue()));
|
||||||
case "percent_done":
|
case "percent_done":
|
||||||
return String.valueOf(Math.min(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble()) * 100, 0).doubleValue()));
|
return String.valueOf(Math.min(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement(player, "money").getValueDouble()) * 100, 0).doubleValue()));
|
||||||
case "percent_done_formatted":
|
case "percent_done_formatted":
|
||||||
return placeholders.getPercentFormat().format(Math.min(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble()) * 100, 0).doubleValue()));
|
return placeholders.getPercentFormat().format(Math.min(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement(player, "money").getValueDouble()) * 100, 0).doubleValue()));
|
||||||
case "prestige_percent_left_formatted":
|
case "prestige_percent_left_formatted":
|
||||||
return placeholders.getPercentFormat().format(Math.max(0D, orElse(prestige, r -> (1 - (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble())) * 100, 0).doubleValue()));
|
return placeholders.getPercentFormat().format(Math.max(0D, orElse(prestige, r -> (1 - (plugin.getEconomy().getBalance(player) / r.getRequirement(player, "money").getValueDouble())) * 100, 0).doubleValue()));
|
||||||
case "prestige_percent_done_formatted":
|
case "prestige_percent_done_formatted":
|
||||||
return placeholders.getPercentFormat().format(Math.min(100D, orElse(prestige, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble()) * 100, 0).doubleValue()));
|
return placeholders.getPercentFormat().format(Math.min(100D, orElse(prestige, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement(player, "money").getValueDouble()) * 100, 0).doubleValue()));
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Number getMoney(Rank rank) {
|
private Number getMoney(Player player, Rank rank) {
|
||||||
return orElse(rank, r -> simplify(r.getRequirement("money").getValueDouble()), 0);
|
return orElse(rank, r -> simplify(r.getRequirement(player, "money").getValueDouble()), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void requirePrestiging(Prestiges prestiges, String params) {
|
private void requirePrestiging(Prestiges prestiges, String params) {
|
||||||
@@ -128,7 +128,7 @@ public class RankupExpansion extends PlaceholderExpansion {
|
|||||||
if (rank == null) {
|
if (rank == null) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
Requirement requirement = rank.getRequirement(requirementName);
|
Requirement requirement = rank.getRequirement(player, requirementName);
|
||||||
switch (params) {
|
switch (params) {
|
||||||
case "":
|
case "":
|
||||||
return orElse(requirement, Requirement::getValueString, "0");
|
return orElse(requirement, Requirement::getValueString, "0");
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ import org.bukkit.configuration.ConfigurationSection;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import sh.okx.rankup.RankupPlugin;
|
import sh.okx.rankup.RankupPlugin;
|
||||||
import sh.okx.rankup.ranks.Rank;
|
import sh.okx.rankup.ranks.Rank;
|
||||||
|
import sh.okx.rankup.ranks.requirements.ListRankRequirements;
|
||||||
|
import sh.okx.rankup.ranks.requirements.RankRequirements;
|
||||||
import sh.okx.rankup.requirements.Requirement;
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -20,7 +22,7 @@ public class Prestige extends Rank {
|
|||||||
@Getter
|
@Getter
|
||||||
private final String to;
|
private final String to;
|
||||||
|
|
||||||
private Prestige(ConfigurationSection section, RankupPlugin plugin, String next, String rank, Set<Requirement> requirements, List<String> commands, String from, String to) {
|
private Prestige(ConfigurationSection section, RankupPlugin plugin, String next, String rank, RankRequirements requirements, List<String> commands, String from, String to) {
|
||||||
super(section, plugin, next, rank, requirements, commands);
|
super(section, plugin, next, rank, requirements, commands);
|
||||||
this.from = from;
|
this.from = from;
|
||||||
this.to = to;
|
this.to = to;
|
||||||
@@ -33,7 +35,7 @@ public class Prestige extends Rank {
|
|||||||
return new Prestige(section, plugin,
|
return new Prestige(section, plugin,
|
||||||
section.getString("next"),
|
section.getString("next"),
|
||||||
section.getString("rank"),
|
section.getString("rank"),
|
||||||
requirements,
|
new ListRankRequirements(requirements),
|
||||||
section.getStringList("commands"),
|
section.getStringList("commands"),
|
||||||
section.getString("from"),
|
section.getString("from"),
|
||||||
section.getString("to"));
|
section.getString("to"));
|
||||||
@@ -41,30 +43,33 @@ public class Prestige extends Rank {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isIn(Player player) {
|
public boolean isIn(Player player) {
|
||||||
String[] groups = plugin.getPermissions().getPlayerGroups(null, player);
|
// first prestige does not have a rank
|
||||||
for (String group : groups) {
|
boolean inFrom = plugin.getPermissions().inGroup(player.getUniqueId(), from);
|
||||||
if (group.equalsIgnoreCase(from) && rank == null) {
|
if (rank == null && inFrom) {
|
||||||
|
// not in any other prestiges
|
||||||
for (Prestige prestige : plugin.getPrestiges().getOrderedList()) {
|
for (Prestige prestige : plugin.getPrestiges().getOrderedList()) {
|
||||||
if (prestige != this && prestige.isIn(player)) {
|
if (prestige != this && prestige.isIn(player)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
} else if(group.equalsIgnoreCase(rank)) {
|
}
|
||||||
|
|
||||||
|
if (rank == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// subsequent prestiges
|
||||||
|
boolean inRank = plugin.getPermissions().inGroup(player.getUniqueId(), rank);
|
||||||
|
if (inRank) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isEligable(Player player) {
|
public boolean isEligable(Player player) {
|
||||||
String[] groups = plugin.getPermissions().getPlayerGroups(null, player);
|
return plugin.getPermissions().inGroup(player.getUniqueId(), from);
|
||||||
for (String group : groups) {
|
|
||||||
if (group.equalsIgnoreCase(from)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package sh.okx.rankup.ranks;
|
package sh.okx.rankup.ranks;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.List;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@@ -12,12 +12,9 @@ import org.bukkit.configuration.ConfigurationSection;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import sh.okx.rankup.RankupPlugin;
|
import sh.okx.rankup.RankupPlugin;
|
||||||
import sh.okx.rankup.messages.MessageBuilder;
|
import sh.okx.rankup.messages.MessageBuilder;
|
||||||
import sh.okx.rankup.requirements.DeductibleRequirement;
|
import sh.okx.rankup.ranks.requirements.RankRequirements;
|
||||||
import sh.okx.rankup.requirements.Requirement;
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
@EqualsAndHashCode
|
@EqualsAndHashCode
|
||||||
@ToString
|
@ToString
|
||||||
@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
|
@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
|
||||||
@@ -30,73 +27,30 @@ public class Rank {
|
|||||||
@Getter
|
@Getter
|
||||||
protected final String rank;
|
protected final String rank;
|
||||||
@Getter
|
@Getter
|
||||||
protected final Set<Requirement> requirements;
|
protected final RankRequirements requirements;
|
||||||
protected final List<String> commands;
|
protected final List<String> commands;
|
||||||
|
|
||||||
public static Rank deserialize(RankupPlugin plugin, ConfigurationSection section) {
|
|
||||||
List<String> requirementsList;
|
|
||||||
if (section.isList("requirements")) {
|
|
||||||
requirementsList = section.getStringList("requirements");
|
|
||||||
} else {
|
|
||||||
requirementsList = Collections.singletonList(section.getString("requirements"));
|
|
||||||
}
|
|
||||||
Set<Requirement> requirements = plugin.getRequirements().getRequirements(requirementsList);
|
|
||||||
|
|
||||||
String next = section.getString("next");
|
|
||||||
String rank = section.getString("rank");
|
|
||||||
|
|
||||||
if (next != null && next.isEmpty()) {
|
|
||||||
plugin.getLogger().warning("Rankup section '" + section.getName() + "' has a blank 'next' field, will be ignored.");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Rank(section, plugin,
|
|
||||||
next,
|
|
||||||
rank,
|
|
||||||
requirements,
|
|
||||||
section.getStringList("commands"));
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasRequirements(Player player) {
|
|
||||||
for (Requirement requirement : requirements) {
|
|
||||||
if (!requirement.check(player)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isIn(Player player) {
|
public boolean isIn(Player player) {
|
||||||
String[] groups = plugin.getPermissions().getPlayerGroups(null, player);
|
return plugin.getPermissions().inGroup(player.getUniqueId(), rank);
|
||||||
for (String group : groups) {
|
|
||||||
if (group.equalsIgnoreCase(rank)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isLast() {
|
public boolean isLast() {
|
||||||
return plugin.getRankups().getByName(next) == null;
|
return plugin.getRankups().getByName(next) == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Requirement getRequirement(String name) {
|
public boolean hasRequirements(Player player) {
|
||||||
for (Requirement requirement : requirements) {
|
return requirements.hasRequirements(player);
|
||||||
if (requirement.getFullName().equalsIgnoreCase(name)) {
|
|
||||||
return requirement;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return null;
|
public Requirement getRequirement(Player player, String name) {
|
||||||
|
return requirements.getRequirement(player, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void applyRequirements(Player player) {
|
public void applyRequirements(Player player) {
|
||||||
for (Requirement requirement : requirements) {
|
requirements.applyRequirements(player);
|
||||||
if (requirement instanceof DeductibleRequirement) {
|
|
||||||
((DeductibleRequirement) requirement).apply(player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void runCommands(Player player) {
|
public void runCommands(Player player) {
|
||||||
for (String command : commands) {
|
for (String command : commands) {
|
||||||
String string = new MessageBuilder(command).replaceRanks(player, this, next).toString();
|
String string = new MessageBuilder(command).replaceRanks(player, this, next).toString();
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package sh.okx.rankup.ranks;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
import sh.okx.rankup.RankupPlugin;
|
||||||
|
import sh.okx.rankup.ranks.requirements.RankRequirements;
|
||||||
|
import sh.okx.rankup.ranks.requirements.RankRequirementsFactory;
|
||||||
|
|
||||||
|
public class Rankup extends Rank {
|
||||||
|
public static Rank deserialize(RankupPlugin plugin, ConfigurationSection section) {
|
||||||
|
String next = section.getString("next");
|
||||||
|
String rank = section.getString("rank");
|
||||||
|
|
||||||
|
if (next != null && next.isEmpty()) {
|
||||||
|
plugin.getLogger().warning("Rankup section '" + section.getName() + "' has a blank 'next' field, will be ignored.");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Rank(section, plugin,
|
||||||
|
next,
|
||||||
|
rank,
|
||||||
|
RankRequirementsFactory.getRequirements(plugin, section),
|
||||||
|
section.getStringList("commands"));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Rankup(ConfigurationSection section,
|
||||||
|
RankupPlugin plugin, String next, String rank,
|
||||||
|
RankRequirements requirements,
|
||||||
|
List<String> commands) {
|
||||||
|
super(section, plugin, next, rank, requirements, commands);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,6 +6,6 @@ import sh.okx.rankup.RankupPlugin;
|
|||||||
|
|
||||||
public class Rankups extends RankList<Rank> {
|
public class Rankups extends RankList<Rank> {
|
||||||
public Rankups(RankupPlugin plugin, FileConfiguration config) {
|
public Rankups(RankupPlugin plugin, FileConfiguration config) {
|
||||||
super(config, section -> Rank.deserialize(plugin, section));
|
super(config, section -> Rankup.deserialize(plugin, section));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
package sh.okx.rankup.ranks.requirements;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import sh.okx.rankup.requirements.DeductibleRequirement;
|
||||||
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
|
|
||||||
|
public class ListRankRequirements implements RankRequirements {
|
||||||
|
private final Set<Requirement> requirements;
|
||||||
|
|
||||||
|
public ListRankRequirements(Set<Requirement> requirements) {
|
||||||
|
this.requirements = requirements;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<Requirement> getRequirements(Player player) {
|
||||||
|
return requirements;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasRequirements(Player player) {
|
||||||
|
for (Requirement requirement : requirements) {
|
||||||
|
if (!requirement.check(player)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Requirement getRequirement(Player player, String name) {
|
||||||
|
for (Requirement requirement : requirements) {
|
||||||
|
if (requirement.getFullName().equalsIgnoreCase(name)) {
|
||||||
|
return requirement;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void applyRequirements(Player player) {
|
||||||
|
for (Requirement requirement : requirements) {
|
||||||
|
if (requirement instanceof DeductibleRequirement) {
|
||||||
|
((DeductibleRequirement) requirement).apply(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
package sh.okx.rankup.ranks.requirements;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Set;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import sh.okx.rankup.RankupPlugin;
|
||||||
|
import sh.okx.rankup.prestige.Prestige;
|
||||||
|
import sh.okx.rankup.prestige.Prestiges;
|
||||||
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
|
|
||||||
|
public class PrestigeListRankRequirements implements RankRequirements {
|
||||||
|
private final RankupPlugin plugin;
|
||||||
|
private final RankRequirements defaultRequirements;
|
||||||
|
private final Map<String, RankRequirements> requirements;
|
||||||
|
|
||||||
|
public PrestigeListRankRequirements(RankupPlugin plugin, RankRequirements defaultRequirements, Map<String, RankRequirements> requirements) {
|
||||||
|
Objects.requireNonNull(plugin);
|
||||||
|
Objects.requireNonNull(defaultRequirements);
|
||||||
|
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.defaultRequirements = defaultRequirements;
|
||||||
|
this.requirements = requirements;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<Requirement> getRequirements(Player player) {
|
||||||
|
return getRankRequirements(player).getRequirements(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasRequirements(Player player) {
|
||||||
|
return getRankRequirements(player).hasRequirements(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Requirement getRequirement(Player player, String name) {
|
||||||
|
return getRankRequirements(player).getRequirement(player, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void applyRequirements(Player player) {
|
||||||
|
getRankRequirements(player).applyRequirements(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
private RankRequirements getRankRequirements(Player player) {
|
||||||
|
Prestiges prestiges = plugin.getPrestiges();
|
||||||
|
if (player == null || prestiges == null) {
|
||||||
|
return defaultRequirements;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Prestige prestige : prestiges.getOrderedList()) {
|
||||||
|
String next = prestige.getNext();
|
||||||
|
if(plugin.getPermissions().inGroup(player.getUniqueId(), next)) {
|
||||||
|
RankRequirements rankRequirements = this.requirements.get(next.toLowerCase());
|
||||||
|
if (rankRequirements != null) {
|
||||||
|
return rankRequirements;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return defaultRequirements;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package sh.okx.rankup.ranks.requirements;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
|
|
||||||
|
public interface RankRequirements {
|
||||||
|
Set<Requirement> getRequirements(Player player);
|
||||||
|
|
||||||
|
boolean hasRequirements(Player player);
|
||||||
|
Requirement getRequirement(Player player, String name);
|
||||||
|
void applyRequirements(Player player);
|
||||||
|
}
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
package sh.okx.rankup.ranks.requirements;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
import sh.okx.rankup.RankupPlugin;
|
||||||
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
|
|
||||||
|
public class RankRequirementsFactory {
|
||||||
|
private static final String REQUIREMENTS = "requirements";
|
||||||
|
|
||||||
|
public static RankRequirements getRequirements(RankupPlugin plugin, ConfigurationSection section) {
|
||||||
|
if (section.isConfigurationSection(REQUIREMENTS)) {
|
||||||
|
return getPrestigeListRequirements(plugin, section.getConfigurationSection(REQUIREMENTS));
|
||||||
|
} else {
|
||||||
|
return getListRequirements(plugin, getRequirementStrings(section, REQUIREMENTS));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Collection<String> getRequirementStrings(ConfigurationSection section, String key) {
|
||||||
|
if (section.isList(key)) {
|
||||||
|
return section.getStringList(key);
|
||||||
|
} else {
|
||||||
|
String string = section.getString(key);
|
||||||
|
if (string == null) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return Collections.singleton(string);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Set<Requirement> stringsToRequirements(RankupPlugin plugin, Iterable<String> strings) {
|
||||||
|
return plugin.getRequirements().getRequirements(strings);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static RankRequirements getListRequirements(RankupPlugin plugin, Iterable<String> list) {
|
||||||
|
Set<Requirement> requirements = stringsToRequirements(plugin, list);
|
||||||
|
return new ListRankRequirements(requirements);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static RankRequirements getPrestigeListRequirements(RankupPlugin plugin, ConfigurationSection section) {
|
||||||
|
if (plugin.getPrestiges() == null) {
|
||||||
|
// don't know what to do here
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
RankRequirements defaultRequirements = null;
|
||||||
|
Map<String, RankRequirements> requirements = new HashMap<>();
|
||||||
|
|
||||||
|
for (String key : section.getKeys(false)) {
|
||||||
|
Collection<String> stringRequirements = getRequirementStrings(section, key);
|
||||||
|
if (stringRequirements != null) {
|
||||||
|
RankRequirements rankRequirements = getListRequirements(plugin, stringRequirements);
|
||||||
|
if ("default".equalsIgnoreCase(key)) {
|
||||||
|
defaultRequirements = rankRequirements;
|
||||||
|
} else {
|
||||||
|
requirements.put(key.toLowerCase(), rankRequirements);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (defaultRequirements == null) {
|
||||||
|
throw new IllegalArgumentException("No default requirements set for rank " + section.getParent().getName() + ". See the wiki for info.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return new PrestigeListRankRequirements(plugin, defaultRequirements, requirements);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,13 +15,11 @@ public class GroupRequirement extends Requirement {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean check(Player player) {
|
public boolean check(Player player) {
|
||||||
for (String group : plugin.getPermissions().getPlayerGroups(null, player)) {
|
for (String group : getValuesString()) {
|
||||||
for (String value : getValuesString()) {
|
if (plugin.getPermissions().inGroup(player.getUniqueId(), group)) {
|
||||||
if (group.equalsIgnoreCase(value)) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ public class ItemRequirement extends ProgressiveRequirement {
|
|||||||
.mapToInt(ItemStack::getAmount).sum();
|
.mapToInt(ItemStack::getAmount).sum();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
protected boolean matchItem(ItemStack item) {
|
protected boolean matchItem(ItemStack item) {
|
||||||
if (item == null) {
|
if (item == null) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2018-2020 Okx
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
Reference in New Issue
Block a user