diff --git a/build.gradle b/build.gradle index 08eaf19..85372c3 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group 'sh.okx' -version '3.5-beta' +version '3.5-beta.2' repositories { mavenCentral() diff --git a/src/main/java/sh/okx/rankup/RankList.java b/src/main/java/sh/okx/rankup/RankList.java index 19811e4..9a49ecf 100644 --- a/src/main/java/sh/okx/rankup/RankList.java +++ b/src/main/java/sh/okx/rankup/RankList.java @@ -25,10 +25,29 @@ public class RankList { this.config = config; for (Map.Entry entry : config.getValues(false).entrySet()) { ConfigurationSection rankSection = (ConfigurationSection) entry.getValue(); + validateSection(rankSection); ranks.add(deserializer.apply(rankSection)); } } + protected void validateSection(ConfigurationSection section) { + String name = "'" + section.getName() + "'"; + if (section.getConfigurationSection("requirements") != null) { + throw new IllegalArgumentException( + "Rankup section " + name + " is using the old requirements system.\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'\"."); + } + Set keys = section.getKeys(false); + if (keys.size() == 1 && keys.iterator().next().equalsIgnoreCase("rank")) { + throw new IllegalArgumentException( + "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 + ""); + } else if (section.getStringList("requirements").isEmpty()) { + throw new IllegalArgumentException("Rank " + name + " does not have any requirements."); + } + } + public T getFirst() { OUTER: for (T rank : ranks) { diff --git a/src/main/java/sh/okx/rankup/Rankup.java b/src/main/java/sh/okx/rankup/Rankup.java index cfe5dde..4de7072 100644 --- a/src/main/java/sh/okx/rankup/Rankup.java +++ b/src/main/java/sh/okx/rankup/Rankup.java @@ -131,8 +131,6 @@ public class Rankup extends JavaPlugin { autoRankup.runTaskTimer(this, time, time); } - - if (config.getInt("version") < 4) { getLogger().severe("You are using an outdated config!"); getLogger().severe("This means that some things might not work!"); @@ -180,12 +178,18 @@ public class Rankup extends JavaPlugin { } public void refreshRanks() { - registerRequirements(); - Bukkit.getPluginManager().callEvent(new RankupRegisterEvent(this)); + try { + registerRequirements(); + Bukkit.getPluginManager().callEvent(new RankupRegisterEvent(this)); - rankups = new Rankups(this, loadConfig("rankups.yml")); - if (config.getBoolean("prestige")) { - prestiges = new Prestiges(this, loadConfig("prestiges.yml")); + rankups = new Rankups(this, loadConfig("rankups.yml")); + if (config.getBoolean("prestige")) { + prestiges = new Prestiges(this, loadConfig("prestiges.yml")); + } + } catch (Exception e) { + e.printStackTrace(); + Bukkit.getPluginManager().disablePlugin(this); + getLogger().severe("Could not finish enabling Rankup"); } } @@ -221,10 +225,12 @@ public class Rankup extends JavaPlugin { requirementRegistry.addRequirement(new GroupRequirement(this)); requirementRegistry.addRequirement(new PermissionRequirement(this)); requirementRegistry.addRequirement(new PlaceholderRequirement(this)); + requirementRegistry.addRequirement(new WorldRequirement(this)); + requirementRegistry.addRequirement(new BlockBreakRequirement(this)); + requirementRegistry.addRequirement(new PlayerKillsRequirement(this)); + requirementRegistry.addRequirement(new MobKillsRequirement(this)); if (Bukkit.getPluginManager().isPluginEnabled("mcMMO")) { - for (String skill : McMMOSkillUtil.getInstance().getSkills()) { - requirementRegistry.addRequirement(new McMMOSkillRequirement(this, skill)); - } + requirementRegistry.addRequirement(new McMMOSkillRequirement(this)); requirementRegistry.addRequirement(new McMMOPowerLevelRequirement(this)); } if (Bukkit.getPluginManager().isPluginEnabled("AdvancedAchievements")) { @@ -246,7 +252,7 @@ public class Rankup extends JavaPlugin { if (rsp != null) { economy = rsp.getProvider(); } else { - getLogger().warning("No economy found."); + getLogger().warning("No economy found. The 'money' requirement will be disabled."); } } @@ -378,7 +384,6 @@ public class Rankup extends JavaPlugin { } Prestige oldPrestige = prestiges.getByPlayer(player); - Prestige prestige = prestiges.next(oldPrestige); oldPrestige.applyRequirements(player); @@ -387,20 +392,20 @@ public class Rankup extends JavaPlugin { if (oldPrestige.getRank() != null) { permissions.playerRemoveGroup(null, player, oldPrestige.getRank()); } - permissions.playerAddGroup(null, player, prestige.getRank()); + permissions.playerAddGroup(null, player, oldPrestige.getNext()); getMessage(oldPrestige, Message.PRESTIGE_SUCCESS_PUBLIC) .failIfEmpty() - .replaceRanks(player, oldPrestige, prestige.getRank()) + .replaceRanks(player, oldPrestige,oldPrestige.getNext()) .replaceFromTo(oldPrestige) .broadcast(); getMessage(oldPrestige, Message.PRESTIGE_SUCCESS_PRIVATE) .failIfEmpty() - .replaceRanks(player, oldPrestige, prestige.getRank()) + .replaceRanks(player, oldPrestige, oldPrestige.getNext()) .replaceFromTo(oldPrestige) .send(player); - oldPrestige.runCommands(player, prestige.getRank()); + oldPrestige.runCommands(player, oldPrestige.getNext()); applyCooldown(player); } @@ -410,13 +415,13 @@ public class Rankup extends JavaPlugin { public boolean checkPrestige(Player player, boolean message) { Prestige prestige = prestiges.getByPlayer(player); - if (!prestige.isIn(player)) { // check if in ladder + if (prestige == null || !prestige.isEligable(player)) { // check if in ladder getMessage(Message.NOT_HIGH_ENOUGH) .failIf(!message) .replace(Variable.PLAYER, player.getName()) .send(player); return false; - } else if (prestiges.getByName(prestige.getNext()) == null) { // check if they are at the highest rank + } else if (prestiges.isLast(permissions, player)) { // check if they are at the highest rank getMessage(prestige, Message.PRESTIGE_NO_PRESTIGE) .failIf(!message) .replaceRanks(player, prestige.getRank()) @@ -509,6 +514,6 @@ public class Rankup extends JavaPlugin { public boolean isLegacy() { String version = Bukkit.getVersion(); - return !(version.startsWith("1.13") || version.startsWith("1.14")); + return !(version.contains("1.13") || version.contains("1.14")); } } diff --git a/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java b/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java index 27779ab..e9f63e3 100644 --- a/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java +++ b/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java @@ -1,5 +1,7 @@ package sh.okx.rankup.placeholders; +import com.sk89q.worldedit.extension.platform.Actor; +import com.sk89q.worldguard.WorldGuard; import lombok.RequiredArgsConstructor; import me.clip.placeholderapi.expansion.PlaceholderExpansion; import org.bukkit.entity.Player; diff --git a/src/main/java/sh/okx/rankup/prestige/Prestige.java b/src/main/java/sh/okx/rankup/prestige/Prestige.java index cc60d99..d3bb72d 100644 --- a/src/main/java/sh/okx/rankup/prestige/Prestige.java +++ b/src/main/java/sh/okx/rankup/prestige/Prestige.java @@ -41,7 +41,6 @@ public class Prestige extends Rank { @Override public boolean isIn(Player player) { - String[] groups = plugin.getPermissions().getPlayerGroups(null, player); for (String group : groups) { if (group.equalsIgnoreCase(from) && rank == null) { @@ -58,6 +57,16 @@ public class Prestige extends Rank { return false; } + public boolean isEligable(Player player) { + String[] groups = plugin.getPermissions().getPlayerGroups(null, player); + for (String group : groups) { + if (group.equalsIgnoreCase(from)) { + return true; + } + } + return false; + } + @Override public boolean isLast() { return plugin.getPrestiges().getByName(next) == null; diff --git a/src/main/java/sh/okx/rankup/ranks/Rank.java b/src/main/java/sh/okx/rankup/ranks/Rank.java index 2b8d438..1be2a86 100644 --- a/src/main/java/sh/okx/rankup/ranks/Rank.java +++ b/src/main/java/sh/okx/rankup/ranks/Rank.java @@ -15,9 +15,7 @@ import sh.okx.rankup.requirements.Requirement; import java.util.HashSet; import java.util.List; -import java.util.Objects; import java.util.Set; -import java.util.stream.Collectors; @EqualsAndHashCode @RequiredArgsConstructor(access = AccessLevel.PROTECTED) @@ -35,7 +33,6 @@ public class Rank { public static Rank deserialize(Rankup plugin, ConfigurationSection section) { List requirementsList = section.getStringList("requirements"); - Validate.notEmpty(requirementsList, "No requirements defined for rankup section " + section.getName()); Set requirements = plugin.getRequirementRegistry().getRequirements(requirementsList); return new Rank(section, plugin, @@ -70,7 +67,11 @@ public class Rank { public Requirement getRequirement(String name) { for (Requirement requirement : requirements) { - if (requirement.getName().equalsIgnoreCase(name)) { + String reqName = requirement.getName(); + if (requirement.hasSubRequirement()) { + reqName += "#" + requirement.getSub(); + } + if (reqName.equalsIgnoreCase(name)) { return requirement; } } diff --git a/src/main/java/sh/okx/rankup/requirements/DeductibleRequirement.java b/src/main/java/sh/okx/rankup/requirements/DeductibleRequirement.java index ef6113e..40d6b29 100644 --- a/src/main/java/sh/okx/rankup/requirements/DeductibleRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/DeductibleRequirement.java @@ -3,7 +3,7 @@ package sh.okx.rankup.requirements; import org.bukkit.entity.Player; import sh.okx.rankup.Rankup; -public abstract class DeductibleRequirement extends Requirement { +public abstract class DeductibleRequirement extends ProgressiveRequirement { public DeductibleRequirement(Rankup plugin, String name) { super(plugin, name); } diff --git a/src/main/java/sh/okx/rankup/requirements/ProgressiveRequirement.java b/src/main/java/sh/okx/rankup/requirements/ProgressiveRequirement.java new file mode 100644 index 0000000..284cd89 --- /dev/null +++ b/src/main/java/sh/okx/rankup/requirements/ProgressiveRequirement.java @@ -0,0 +1,27 @@ +package sh.okx.rankup.requirements; + +import org.bukkit.entity.Player; +import sh.okx.rankup.Rankup; +import sh.okx.rankup.requirements.Requirement; + +public abstract class ProgressiveRequirement extends Requirement { + public ProgressiveRequirement(Rankup plugin, String name) { + super(plugin, name); + } + + protected ProgressiveRequirement(Requirement clone) { + super(clone); + } + + @Override + public boolean check(Player player) { + return getRemaining(player) == 0; + } + + @Override + public double getRemaining(Player player) { + return Math.max(0, getValueDouble() - getProgress(player)); + } + + public abstract double getProgress(Player player); +} diff --git a/src/main/java/sh/okx/rankup/requirements/Requirement.java b/src/main/java/sh/okx/rankup/requirements/Requirement.java index dd09fe7..e6e911c 100644 --- a/src/main/java/sh/okx/rankup/requirements/Requirement.java +++ b/src/main/java/sh/okx/rankup/requirements/Requirement.java @@ -9,8 +9,9 @@ public abstract class Requirement implements Cloneable { protected final Rankup plugin; @Getter protected final String name; - @Setter private String value; + @Getter + private String sub; public Requirement(Rankup plugin, String name) { this.plugin = plugin; @@ -21,12 +22,27 @@ public abstract class Requirement implements Cloneable { this.plugin = clone.plugin; this.name = clone.name; this.value = clone.value; + this.sub = clone.sub; + } + + public void setValue(String value) { + if (hasSubRequirement()) { + String[] parts = value.split(" ", 2); + this.sub = parts[0]; + this.value = parts[1]; + } else { + this.value = value; + } } public String getValueString() { return value; } + public String[] getValuesString() { + return value.split(" "); + } + public double getValueDouble() { return Double.parseDouble(value); } @@ -52,7 +68,11 @@ public abstract class Requirement implements Cloneable { * @return the remaining amount needed. Should be non-negative. */ public double getRemaining(Player player) { - return getValueDouble(); + return check(player) ? 0 : 1; + } + + public boolean hasSubRequirement() { + return false; } public abstract Requirement clone(); diff --git a/src/main/java/sh/okx/rankup/requirements/RequirementRegistry.java b/src/main/java/sh/okx/rankup/requirements/RequirementRegistry.java index 0bf7745..33d5eb1 100644 --- a/src/main/java/sh/okx/rankup/requirements/RequirementRegistry.java +++ b/src/main/java/sh/okx/rankup/requirements/RequirementRegistry.java @@ -31,7 +31,7 @@ public class RequirementRegistry { String name = parts[0]; String value = parts[1]; Requirement requirement = newRequirement(name, value); - Objects.requireNonNull(requirement, "Unknown requirement: " + name); + Objects.requireNonNull(requirement, name.equalsIgnoreCase("money") ? "Money requirement disabled because no economy was found." : "Unknown requirement: " + name); requirements.add(requirement); } return requirements; diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/BlockBreakRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/BlockBreakRequirement.java new file mode 100644 index 0000000..a6b70c2 --- /dev/null +++ b/src/main/java/sh/okx/rankup/requirements/requirement/BlockBreakRequirement.java @@ -0,0 +1,38 @@ +package sh.okx.rankup.requirements.requirement; + +import org.bukkit.Material; +import org.bukkit.Statistic; +import org.bukkit.entity.Player; +import sh.okx.rankup.Rankup; +import sh.okx.rankup.requirements.ProgressiveRequirement; +import sh.okx.rankup.requirements.Requirement; + +public class BlockBreakRequirement extends ProgressiveRequirement { + public BlockBreakRequirement(Rankup plugin) { + super(plugin, "block-break"); + } + + @Override + public boolean check(Player player) { + return false; + } + + protected BlockBreakRequirement(BlockBreakRequirement clone) { + super(clone); + } + + @Override + public double getProgress(Player player) { + return player.getStatistic(Statistic.MINE_BLOCK, Material.matchMaterial(getValueString())); + } + + @Override + public Requirement clone() { + return new BlockBreakRequirement(this); + } + + @Override + public boolean hasSubRequirement() { + return true; + } +} diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/GroupRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/GroupRequirement.java index be6a39c..734d1a4 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/GroupRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/GroupRequirement.java @@ -15,22 +15,14 @@ public class GroupRequirement extends Requirement { @Override public boolean check(Player player) { - return getRemaining(player) < 1; - } - - @Override - public double getRemaining(Player player) { - int matched = 0; - String[] groups = getValueString().split(" "); - for (String requiredGroup : groups) { - for (String group : plugin.getPermissions().getPlayerGroups(null, player)) { - if (group.equalsIgnoreCase(requiredGroup)) { - matched++; - break; + for (String group : plugin.getPermissions().getPlayerGroups(null, player)) { + for (String value : getValuesString()) { + if (group.equalsIgnoreCase(value)) { + return true; } } } - return groups.length - matched; + return false; } @Override diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/MobKillsRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/MobKillsRequirement.java new file mode 100644 index 0000000..5f7b929 --- /dev/null +++ b/src/main/java/sh/okx/rankup/requirements/requirement/MobKillsRequirement.java @@ -0,0 +1,33 @@ +package sh.okx.rankup.requirements.requirement; + +import org.bukkit.Statistic; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import sh.okx.rankup.Rankup; +import sh.okx.rankup.requirements.ProgressiveRequirement; +import sh.okx.rankup.requirements.Requirement; + +public class MobKillsRequirement extends ProgressiveRequirement { + public MobKillsRequirement(Rankup plugin) { + super(plugin, "mob-kills"); + } + + protected MobKillsRequirement(Requirement clone) { + super(clone); + } + + @Override + public double getProgress(Player player) { + return player.getStatistic(Statistic.KILL_ENTITY, EntityType.fromName(getValueString())); + } + + @Override + public Requirement clone() { + return new MobKillsRequirement(this); + } + + @Override + public boolean hasSubRequirement() { + return true; + } +} diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/MoneyRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/MoneyRequirement.java index 8df9312..61566d3 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/MoneyRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/MoneyRequirement.java @@ -15,13 +15,6 @@ public class MoneyRequirement extends DeductibleRequirement { super(clone); } - @Override - public boolean check(Player player) { - Economy economy = plugin.getEconomy(); - double balance = economy.getBalance(player); - return balance >= getValueDouble(); - } - @Override public void apply(Player player) { Economy economy = plugin.getEconomy(); @@ -29,8 +22,8 @@ public class MoneyRequirement extends DeductibleRequirement { } @Override - public double getRemaining(Player player) { - return Math.max(0, getValueDouble() - plugin.getEconomy().getBalance(player)); + public double getProgress(Player player) { + return plugin.getEconomy().getBalance(player); } @Override diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/PermissionRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/PermissionRequirement.java index 0ab2f38..5816da7 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/PermissionRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/PermissionRequirement.java @@ -15,19 +15,12 @@ public class PermissionRequirement extends Requirement { @Override public boolean check(Player player) { - return getRemaining(player) < 1; - } - - @Override - public double getRemaining(Player player) { - int matched = 0; - String[] permissions = getValueString().split(" "); - for (String permission : permissions) { + for (String permission : getValuesString()) { if (player.hasPermission(permission)) { - matched++; + return true; } } - return permissions.length - matched; + return false; } @Override diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/PlaceholderRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/PlaceholderRequirement.java index 70ba7c6..3f12e59 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/PlaceholderRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/PlaceholderRequirement.java @@ -43,15 +43,12 @@ public class PlaceholderRequirement extends Requirement { return p < v; case "<=": return p <= v; + case "==": + return p == v; } throw new IllegalArgumentException("Invalid operation: " + parts[1]); } - @Override - public double getRemaining(Player player) { - return check(player) ? 0 : 1; - } - @Override public Requirement clone() { return new PlaceholderRequirement(this); diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/PlayerKillsRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/PlayerKillsRequirement.java new file mode 100644 index 0000000..32b31e7 --- /dev/null +++ b/src/main/java/sh/okx/rankup/requirements/requirement/PlayerKillsRequirement.java @@ -0,0 +1,27 @@ +package sh.okx.rankup.requirements.requirement; + +import org.bukkit.Statistic; +import org.bukkit.entity.Player; +import sh.okx.rankup.Rankup; +import sh.okx.rankup.requirements.ProgressiveRequirement; +import sh.okx.rankup.requirements.Requirement; + +public class PlayerKillsRequirement extends ProgressiveRequirement { + public PlayerKillsRequirement(Rankup plugin) { + super(plugin, "player-kills"); + } + + protected PlayerKillsRequirement(Requirement clone) { + super(clone); + } + + @Override + public double getProgress(Player player) { + return player.getStatistic(Statistic.PLAYER_KILLS); + } + + @Override + public Requirement clone() { + return new PlayerKillsRequirement(this); + } +} diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/PlaytimeMinutesRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/PlaytimeMinutesRequirement.java index abdb83e..9de0513 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/PlaytimeMinutesRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/PlaytimeMinutesRequirement.java @@ -3,9 +3,10 @@ package sh.okx.rankup.requirements.requirement; import org.bukkit.Statistic; import org.bukkit.entity.Player; import sh.okx.rankup.Rankup; +import sh.okx.rankup.requirements.ProgressiveRequirement; import sh.okx.rankup.requirements.Requirement; -public class PlaytimeMinutesRequirement extends Requirement { +public class PlaytimeMinutesRequirement extends ProgressiveRequirement { private static final int TICKS_PER_MINUTE = 20 * 60; private Statistic playOneTick; @@ -25,13 +26,8 @@ public class PlaytimeMinutesRequirement extends Requirement { } @Override - public boolean check(Player player) { - return getRemaining(player) <= 0; - } - - @Override - public double getRemaining(Player player) { - return Math.max(0, getValueDouble() - (player.getStatistic(playOneTick) / TICKS_PER_MINUTE)); + public double getProgress(Player player) { + return player.getStatistic(playOneTick) / TICKS_PER_MINUTE; } @Override diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/WorldRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/WorldRequirement.java index 58a0dcd..53f2a86 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/WorldRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/WorldRequirement.java @@ -15,17 +15,7 @@ public class WorldRequirement extends Requirement { @Override public boolean check(Player player) { - for (String world : getValueString().split(" ")) { - if (player.getWorld().getName().equalsIgnoreCase(world)) { - return true; - } - } - return false; - } - - @Override - public double getRemaining(Player player) { - return check(player) ? 0 : 1; + return player.getWorld().getName().equalsIgnoreCase(getValueString()); } @Override diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/XpLevelRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/XpLevelRequirement.java index 864309c..45922e8 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/XpLevelRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/XpLevelRequirement.java @@ -14,19 +14,14 @@ public class XpLevelRequirement extends DeductibleRequirement { super(clone); } - @Override - public boolean check(Player player) { - return player.getLevel() >= getValueInt(); - } - @Override public void apply(Player player) { player.setLevel(player.getLevel() - getValueInt()); } @Override - public double getRemaining(Player player) { - return Math.max(0, getValueInt() - player.getLevel()); + public double getProgress(Player player) { + return player.getLevel(); } @Override diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/advancedachievements/AdvancedAchievementsAchievementRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/advancedachievements/AdvancedAchievementsAchievementRequirement.java index 3dbc56c..c6633df 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/advancedachievements/AdvancedAchievementsAchievementRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/advancedachievements/AdvancedAchievementsAchievementRequirement.java @@ -17,21 +17,8 @@ public class AdvancedAchievementsAchievementRequirement extends Requirement { @Override public boolean check(Player player) { - return getRemaining(player) < 1; - } - - @Override - public double getRemaining(Player player) { AdvancedAchievementsAPI api = AdvancedAchievementsAPIFetcher.fetchInstance().get(); - - int total = 0; - String[] achievements = getValueString().split(" "); - for (String achievement : achievements) { - if (api.hasPlayerReceivedAchievement(player.getUniqueId(), achievement)) { - total++; - } - } - return achievements.length - total; + return api.hasPlayerReceivedAchievement(player.getUniqueId(), getValueString()); } @Override diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/advancedachievements/AdvancedAchievementsTotalRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/advancedachievements/AdvancedAchievementsTotalRequirement.java index 8bfe315..d69b783 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/advancedachievements/AdvancedAchievementsTotalRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/advancedachievements/AdvancedAchievementsTotalRequirement.java @@ -1,12 +1,12 @@ package sh.okx.rankup.requirements.requirement.advancedachievements; -import com.hm.achievement.api.AdvancedAchievementsAPI; import com.hm.achievement.api.AdvancedAchievementsAPIFetcher; import org.bukkit.entity.Player; import sh.okx.rankup.Rankup; import sh.okx.rankup.requirements.Requirement; +import sh.okx.rankup.requirements.ProgressiveRequirement; -public class AdvancedAchievementsTotalRequirement extends Requirement { +public class AdvancedAchievementsTotalRequirement extends ProgressiveRequirement { public AdvancedAchievementsTotalRequirement(Rankup plugin) { super(plugin, "advancedachievements-total"); } @@ -16,14 +16,8 @@ public class AdvancedAchievementsTotalRequirement extends Requirement { } @Override - public boolean check(Player player) { - return getRemaining(player) < 1; - } - - @Override - public double getRemaining(Player player) { - AdvancedAchievementsAPI api = AdvancedAchievementsAPIFetcher.fetchInstance().get(); - return getValueInt() - api.getPlayerTotalAchievements(player.getUniqueId()); + public double getProgress(Player player) { + return AdvancedAchievementsAPIFetcher.fetchInstance().get().getPlayerTotalAchievements(player.getUniqueId()); } @Override diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOPowerLevelRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOPowerLevelRequirement.java index 026a62b..04be159 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOPowerLevelRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOPowerLevelRequirement.java @@ -4,8 +4,9 @@ import com.gmail.nossr50.util.player.UserManager; import org.bukkit.entity.Player; import sh.okx.rankup.Rankup; import sh.okx.rankup.requirements.Requirement; +import sh.okx.rankup.requirements.ProgressiveRequirement; -public class McMMOPowerLevelRequirement extends Requirement { +public class McMMOPowerLevelRequirement extends ProgressiveRequirement { public McMMOPowerLevelRequirement(Rankup plugin) { super(plugin, "mcmmo-power-level"); } @@ -15,13 +16,8 @@ public class McMMOPowerLevelRequirement extends Requirement { } @Override - public boolean check(Player player) { - return getRemaining(player) <= 0; - } - - @Override - public double getRemaining(Player player) { - return Math.max(0, getValueInt() - UserManager.getPlayer(player).getPowerLevel()); + public double getProgress(Player player) { + return UserManager.getPlayer(player).getPowerLevel(); } @Override diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOSkillRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOSkillRequirement.java index a0bcd0c..55180ad 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOSkillRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOSkillRequirement.java @@ -3,28 +3,25 @@ package sh.okx.rankup.requirements.requirement.mcmmo; import org.bukkit.entity.Player; import sh.okx.rankup.Rankup; import sh.okx.rankup.requirements.Requirement; +import sh.okx.rankup.requirements.ProgressiveRequirement; -public class McMMOSkillRequirement extends Requirement { - private String skill; - - public McMMOSkillRequirement(Rankup plugin, String skill) { - super(plugin, "mcmmo-" + skill.toLowerCase()); - this.skill = skill; +public class McMMOSkillRequirement extends ProgressiveRequirement { + public McMMOSkillRequirement(Rankup plugin) { + super(plugin, "mcmmo"); } protected McMMOSkillRequirement(McMMOSkillRequirement clone) { super(clone); - this.skill = clone.skill; } @Override - public boolean check(Player player) { - return getRemaining(player) <= 0; + public double getProgress(Player player) { + return McMMOSkillUtil.getInstance().getSkillLevel(player, getValueString()); } @Override - public double getRemaining(Player player) { - return Math.max(0, getValueInt() - McMMOSkillUtil.getInstance().getSkillLevel(player, skill)); + public boolean hasSubRequirement() { + return true; } @Override diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOSkillUtil.java b/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOSkillUtil.java index e51720d..6bb3f85 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOSkillUtil.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/mcmmo/McMMOSkillUtil.java @@ -51,6 +51,7 @@ public class McMMOSkillUtil { } catch (ClassNotFoundException e) { throw new RuntimeException("mcMMO UserManager class not found"); }*/ + try { getSkillLevel = McMMOPlayer.class.getMethod("getSkillLevel", skillTypeClass); } catch (NoSuchMethodException e) { @@ -81,7 +82,7 @@ public class McMMOSkillUtil { public int getSkillLevel(Player player, String skill) { McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player); try { - Object skillType = skillTypeClass.cast(valueOf.invoke(null, skill)); + Object skillType = skillTypeClass.cast(valueOf.invoke(null, skill.toUpperCase())); return (int) getSkillLevel.invoke(mcMMOPlayer, skillType); } catch (IllegalAccessException | InvocationTargetException e) { throw new RuntimeException(e); diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/votingplugin/VotingPluginVotesRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/votingplugin/VotingPluginVotesRequirement.java index 29e8537..54d21d0 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/votingplugin/VotingPluginVotesRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/votingplugin/VotingPluginVotesRequirement.java @@ -4,8 +4,9 @@ import com.Ben12345rocks.VotingPlugin.UserManager.UserManager; import org.bukkit.entity.Player; import sh.okx.rankup.Rankup; import sh.okx.rankup.requirements.Requirement; +import sh.okx.rankup.requirements.ProgressiveRequirement; -public class VotingPluginVotesRequirement extends Requirement { +public class VotingPluginVotesRequirement extends ProgressiveRequirement { public VotingPluginVotesRequirement(Rankup plugin) { super(plugin, "votingplugin-votes"); } @@ -15,13 +16,8 @@ public class VotingPluginVotesRequirement extends Requirement { } @Override - public boolean check(Player player) { - return getRemaining(player) < 1; - } - - @Override - public double getRemaining(Player player) { - return Math.max(0, getValueDouble() - UserManager.getInstance().getVotingPluginUser(player).getPoints()); + public double getProgress(Player player) { + return UserManager.getInstance().getVotingPluginUser(player).getPoints(); } @Override diff --git a/src/main/resources/locale/en.yml b/src/main/resources/locale/en.yml index 87d6cff..5f253f8 100644 --- a/src/main/resources/locale/en.yml +++ b/src/main/resources/locale/en.yml @@ -60,5 +60,5 @@ prestige: plural: "&cYou must wait {SECONDS_LEFT} more seconds to prestige again." not-high-enough: "&cYou cannot prestige at your rank!" -not-in-ladder: "&cSorry, but we could not find any rankups for the group(s) you are in." +not-in-ladder: "&cSorry, but we could not find any rankups for the group(s) you are in. Use /ranks to list the rankups." invalid-rankup: "Invalid rankup defined in config, please check console." \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 58a28d5..161a4ae 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: Rankup -version: 3.5-beta +version: 3.5-beta.2 main: sh.okx.rankup.Rankup author: Okx depend: [Vault] diff --git a/src/main/resources/prestiges.yml b/src/main/resources/prestiges.yml index 3bdfd06..c85036b 100644 --- a/src/main/resources/prestiges.yml +++ b/src/main/resources/prestiges.yml @@ -15,8 +15,4 @@ P1example: next: 'P2' requirements: - 'money 20000' - - 'xp-level 5' -P2example: - from: 'D' - to: 'A' - rank: 'P2' \ No newline at end of file + - 'xp-level 5' \ No newline at end of file