diff --git a/build.gradle b/build.gradle index 3a7bbcd..ed8cde6 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group 'sh.okx' -version '3.9' +version '3.9.1' repositories { mavenCentral() diff --git a/src/main/java/sh/okx/rankup/ranks/Rankup.java b/src/main/java/sh/okx/rankup/ranks/Rankup.java index 129bfe3..30afebe 100644 --- a/src/main/java/sh/okx/rankup/ranks/Rankup.java +++ b/src/main/java/sh/okx/rankup/ranks/Rankup.java @@ -1,33 +1,35 @@ -package sh.okx.rankup.ranks; - -import org.bukkit.configuration.ConfigurationSection; -import sh.okx.rankup.RankupPlugin; -import sh.okx.rankup.ranks.requirements.RankRequirements; -import sh.okx.rankup.ranks.requirements.RankRequirementsFactory; - -import java.util.List; - -public class Rankup extends Rank { - public static Rankup 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 Rankup(section, - plugin, - next, - rank, - RankRequirementsFactory.getRequirements(plugin, section), - section.getStringList("commands")); - } - - protected Rankup(ConfigurationSection section, RankupPlugin plugin, String next, String rank, - RankRequirements requirements, - List commands) { - super(section, plugin, next, rank, requirements, commands); - } -} +package sh.okx.rankup.ranks; + +import org.bukkit.configuration.ConfigurationSection; +import sh.okx.rankup.RankupPlugin; +import sh.okx.rankup.ranks.requirements.RankRequirements; +import sh.okx.rankup.ranks.requirements.RankRequirementsFactory; + +import java.util.List; + +public class Rankup extends Rank { + public static Rankup deserialize(RankupPlugin plugin, ConfigurationSection section) { + String next = section.getString("next"); + String rank = section.getString("rank"); + + if (next == null || next.isEmpty()) { + plugin.getLogger().warning("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 " + section.getName() + ""); + plugin.getLogger().warning("Rankup section '" + section.getName() + "' has a blank 'next' field, will be ignored."); + return null; + } + + return new Rankup(section, + plugin, + next, + rank, + RankRequirementsFactory.getRequirements(plugin, section), + section.getStringList("commands")); + } + + protected Rankup(ConfigurationSection section, RankupPlugin plugin, String next, String rank, + RankRequirements requirements, + List commands) { + super(section, plugin, next, rank, requirements, commands); + } +} diff --git a/src/main/java/sh/okx/rankup/requirements/ProgressiveRequirement.java b/src/main/java/sh/okx/rankup/requirements/ProgressiveRequirement.java index fece93f..0a6fcec 100644 --- a/src/main/java/sh/okx/rankup/requirements/ProgressiveRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/ProgressiveRequirement.java @@ -1,34 +1,39 @@ -package sh.okx.rankup.requirements; - -import org.bukkit.entity.Player; -import sh.okx.rankup.RankupPlugin; - -public abstract class ProgressiveRequirement extends Requirement { - public ProgressiveRequirement(RankupPlugin plugin, String name) { - super(plugin, name); - } - - public ProgressiveRequirement(RankupPlugin plugin, String name, boolean subRequirement) { - super(plugin, name, subRequirement); - } - - protected ProgressiveRequirement(Requirement clone) { - super(clone); - } - - @Override - public boolean check(Player player) { - return getRemaining(player) <= 0; - } - - @Override - public final double getRemaining(Player player) { - return getRemaining(player, 1); - } - - public double getRemaining(Player player, double multiplier) { - return Math.max(0, (multiplier * getTotal(player)) - getProgress(player)); - } - - public abstract double getProgress(Player player); -} +package sh.okx.rankup.requirements; + +import org.bukkit.entity.Player; +import sh.okx.rankup.RankupPlugin; + +public abstract class ProgressiveRequirement extends Requirement { + public ProgressiveRequirement(RankupPlugin plugin, String name) { + super(plugin, name); + } + + public ProgressiveRequirement(RankupPlugin plugin, String name, boolean subRequirement) { + super(plugin, name, subRequirement); + } + + protected ProgressiveRequirement(Requirement clone) { + super(clone); + } + + @Override + public boolean check(Player player) { + return getRemaining(player) <= 0; + } + + @Override + public final double getRemaining(Player player) { + return getRemaining(player, 1); + } + + public double getRemaining(Player player, double multiplier) { + return Math.max(0, (multiplier * getTotal(player)) - getProgress(player)); + } + + @Override + public double getTotal(Player player) { + return getValueDouble(); + } + + 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 654ba4b..e16353f 100644 --- a/src/main/java/sh/okx/rankup/requirements/Requirement.java +++ b/src/main/java/sh/okx/rankup/requirements/Requirement.java @@ -1,104 +1,104 @@ -package sh.okx.rankup.requirements; - -import lombok.Getter; -import org.bukkit.entity.Player; -import sh.okx.rankup.RankupPlugin; - -public abstract class Requirement implements Cloneable { - protected final RankupPlugin plugin; - @Getter - protected final String name; - private String value; - @Getter - private String sub; - private boolean subRequirement; - - public Requirement(RankupPlugin plugin, String name) { - this(plugin, name, false); - } - - public Requirement(RankupPlugin plugin, String name, boolean subRequirement) { - this.plugin = plugin; - this.name = name; - this.subRequirement = subRequirement; - } - - protected Requirement(Requirement clone) { - this.plugin = clone.plugin; - this.name = clone.name; - this.value = clone.value; - this.sub = clone.sub; - this.subRequirement = clone.subRequirement; - } - - public void setValue(String value) { - if (hasSubRequirement()) { - String[] parts = value.split(" ", 2); - if (parts.length < 2) { - throw new IllegalArgumentException("Amount and sub-requirement not present for requirement '" + getName() + "'. You must use the format '" + getName() + " '"); - } - - 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); - } - - public int getValueInt() { - return Integer.parseInt(value); - } - - public boolean getValueBoolean() { - return Boolean.parseBoolean(value); - } - - public String getFullName() { - if (hasSubRequirement()) { - return name + "#" + sub; - } else { - return name; - } - } - - /** - * Check if a player meets this requirement - * - * @param player the player to check - * @return true if they meet the requirement, false otherwise - */ - public abstract boolean check(Player player); - - /** - * Get the remaining amount needed for Requirement#check(Player) to yield true. - * This is not required and is only used in placeholders. - * - * @param player the player to find the remaining amount of - * @return the remaining amount needed. Should be non-negative. - */ - public double getRemaining(Player player) { - return check(player) ? 0 : 1; - } - - public final boolean hasSubRequirement() { - return subRequirement; - } - - public abstract Requirement clone(); - - public double getTotal(Player player) { - return getValueDouble(); - } -} +package sh.okx.rankup.requirements; + +import lombok.Getter; +import org.bukkit.entity.Player; +import sh.okx.rankup.RankupPlugin; + +public abstract class Requirement implements Cloneable { + protected final RankupPlugin plugin; + @Getter + protected final String name; + private String value; + @Getter + private String sub; + private boolean subRequirement; + + public Requirement(RankupPlugin plugin, String name) { + this(plugin, name, false); + } + + public Requirement(RankupPlugin plugin, String name, boolean subRequirement) { + this.plugin = plugin; + this.name = name; + this.subRequirement = subRequirement; + } + + protected Requirement(Requirement clone) { + this.plugin = clone.plugin; + this.name = clone.name; + this.value = clone.value; + this.sub = clone.sub; + this.subRequirement = clone.subRequirement; + } + + public void setValue(String value) { + if (hasSubRequirement()) { + String[] parts = value.split(" ", 2); + if (parts.length < 2) { + throw new IllegalArgumentException("Amount and sub-requirement not present for requirement '" + getName() + "'. You must use the format '" + getName() + " '"); + } + + 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); + } + + public int getValueInt() { + return Integer.parseInt(value); + } + + public boolean getValueBoolean() { + return Boolean.parseBoolean(value); + } + + public String getFullName() { + if (hasSubRequirement()) { + return name + "#" + sub; + } else { + return name; + } + } + + /** + * Check if a player meets this requirement + * + * @param player the player to check + * @return true if they meet the requirement, false otherwise + */ + public abstract boolean check(Player player); + + /** + * Get the remaining amount needed for Requirement#check(Player) to yield true. + * This is not required and is only used in placeholders. + * + * @param player the player to find the remaining amount of + * @return the remaining amount needed. Should be non-negative. + */ + public double getRemaining(Player player) { + return check(player) ? 0 : 1; + } + + public final boolean hasSubRequirement() { + return subRequirement; + } + + public abstract Requirement clone(); + + public double getTotal(Player player) { + return 1; + } +}