- patch placeholders
- fix an error if you have setup ranks incorrectly
This commit is contained in:
okx-code
2020-09-23 17:20:55 +01:00
parent 598962592b
commit 2bb17a0b71
4 changed files with 179 additions and 172 deletions
+1 -1
View File
@@ -4,7 +4,7 @@ plugins {
} }
group 'sh.okx' group 'sh.okx'
version '3.9' version '3.9.1'
repositories { repositories {
mavenCentral() mavenCentral()
+35 -33
View File
@@ -1,33 +1,35 @@
package sh.okx.rankup.ranks; package sh.okx.rankup.ranks;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import sh.okx.rankup.RankupPlugin; import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.ranks.requirements.RankRequirements; import sh.okx.rankup.ranks.requirements.RankRequirements;
import sh.okx.rankup.ranks.requirements.RankRequirementsFactory; import sh.okx.rankup.ranks.requirements.RankRequirementsFactory;
import java.util.List; import java.util.List;
public class Rankup extends Rank { public class Rankup extends Rank {
public static Rankup deserialize(RankupPlugin plugin, ConfigurationSection section) { public static Rankup deserialize(RankupPlugin plugin, ConfigurationSection section) {
String next = section.getString("next"); String next = section.getString("next");
String rank = section.getString("rank"); String rank = section.getString("rank");
if (next != null && next.isEmpty()) { if (next == null || next.isEmpty()) {
plugin.getLogger().warning("Rankup section '" + section.getName() + "' has a blank 'next' field, will be ignored."); plugin.getLogger().warning("Having a final rank (for example: \"Z: rank: 'Z'\") from 3.4.2 or earlier should no longer be used.\n"
return null; + "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, return new Rankup(section,
rank, plugin,
RankRequirementsFactory.getRequirements(plugin, section), next,
section.getStringList("commands")); rank,
} RankRequirementsFactory.getRequirements(plugin, section),
section.getStringList("commands"));
protected Rankup(ConfigurationSection section, RankupPlugin plugin, String next, String rank, }
RankRequirements requirements,
List<String> commands) { protected Rankup(ConfigurationSection section, RankupPlugin plugin, String next, String rank,
super(section, plugin, next, rank, requirements, commands); RankRequirements requirements,
} List<String> commands) {
} super(section, plugin, next, rank, requirements, commands);
}
}
@@ -1,34 +1,39 @@
package sh.okx.rankup.requirements; package sh.okx.rankup.requirements;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import sh.okx.rankup.RankupPlugin; import sh.okx.rankup.RankupPlugin;
public abstract class ProgressiveRequirement extends Requirement { public abstract class ProgressiveRequirement extends Requirement {
public ProgressiveRequirement(RankupPlugin plugin, String name) { public ProgressiveRequirement(RankupPlugin plugin, String name) {
super(plugin, name); super(plugin, name);
} }
public ProgressiveRequirement(RankupPlugin plugin, String name, boolean subRequirement) { public ProgressiveRequirement(RankupPlugin plugin, String name, boolean subRequirement) {
super(plugin, name, subRequirement); super(plugin, name, subRequirement);
} }
protected ProgressiveRequirement(Requirement clone) { protected ProgressiveRequirement(Requirement clone) {
super(clone); super(clone);
} }
@Override @Override
public boolean check(Player player) { public boolean check(Player player) {
return getRemaining(player) <= 0; return getRemaining(player) <= 0;
} }
@Override @Override
public final double getRemaining(Player player) { public final double getRemaining(Player player) {
return getRemaining(player, 1); return getRemaining(player, 1);
} }
public double getRemaining(Player player, double multiplier) { public double getRemaining(Player player, double multiplier) {
return Math.max(0, (multiplier * getTotal(player)) - getProgress(player)); return Math.max(0, (multiplier * getTotal(player)) - getProgress(player));
} }
public abstract double getProgress(Player player); @Override
} public double getTotal(Player player) {
return getValueDouble();
}
public abstract double getProgress(Player player);
}
@@ -1,104 +1,104 @@
package sh.okx.rankup.requirements; package sh.okx.rankup.requirements;
import lombok.Getter; import lombok.Getter;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import sh.okx.rankup.RankupPlugin; import sh.okx.rankup.RankupPlugin;
public abstract class Requirement implements Cloneable { public abstract class Requirement implements Cloneable {
protected final RankupPlugin plugin; protected final RankupPlugin plugin;
@Getter @Getter
protected final String name; protected final String name;
private String value; private String value;
@Getter @Getter
private String sub; private String sub;
private boolean subRequirement; private boolean subRequirement;
public Requirement(RankupPlugin plugin, String name) { public Requirement(RankupPlugin plugin, String name) {
this(plugin, name, false); this(plugin, name, false);
} }
public Requirement(RankupPlugin plugin, String name, boolean subRequirement) { public Requirement(RankupPlugin plugin, String name, boolean subRequirement) {
this.plugin = plugin; this.plugin = plugin;
this.name = name; this.name = name;
this.subRequirement = subRequirement; this.subRequirement = subRequirement;
} }
protected Requirement(Requirement clone) { protected Requirement(Requirement clone) {
this.plugin = clone.plugin; this.plugin = clone.plugin;
this.name = clone.name; this.name = clone.name;
this.value = clone.value; this.value = clone.value;
this.sub = clone.sub; this.sub = clone.sub;
this.subRequirement = clone.subRequirement; this.subRequirement = clone.subRequirement;
} }
public void setValue(String value) { public void setValue(String value) {
if (hasSubRequirement()) { if (hasSubRequirement()) {
String[] parts = value.split(" ", 2); String[] parts = value.split(" ", 2);
if (parts.length < 2) { if (parts.length < 2) {
throw new IllegalArgumentException("Amount and sub-requirement not present for requirement '" + getName() + "'. You must use the format '" + getName() + " <sub-requirement> <amount>'"); throw new IllegalArgumentException("Amount and sub-requirement not present for requirement '" + getName() + "'. You must use the format '" + getName() + " <sub-requirement> <amount>'");
} }
this.sub = parts[0]; this.sub = parts[0];
this.value = parts[1]; this.value = parts[1];
} else { } else {
this.value = value; this.value = value;
} }
} }
public String getValueString() { public String getValueString() {
return value; return value;
} }
public String[] getValuesString() { public String[] getValuesString() {
return value.split(" "); return value.split(" ");
} }
public double getValueDouble() { public double getValueDouble() {
return Double.parseDouble(value); return Double.parseDouble(value);
} }
public int getValueInt() { public int getValueInt() {
return Integer.parseInt(value); return Integer.parseInt(value);
} }
public boolean getValueBoolean() { public boolean getValueBoolean() {
return Boolean.parseBoolean(value); return Boolean.parseBoolean(value);
} }
public String getFullName() { public String getFullName() {
if (hasSubRequirement()) { if (hasSubRequirement()) {
return name + "#" + sub; return name + "#" + sub;
} else { } else {
return name; return name;
} }
} }
/** /**
* Check if a player meets this requirement * Check if a player meets this requirement
* *
* @param player the player to check * @param player the player to check
* @return true if they meet the requirement, false otherwise * @return true if they meet the requirement, false otherwise
*/ */
public abstract boolean check(Player player); public abstract boolean check(Player player);
/** /**
* Get the remaining amount needed for <code>Requirement#check(Player)</code> to yield true. * Get the remaining amount needed for <code>Requirement#check(Player)</code> to yield true.
* This is not required and is only used in placeholders. * This is not required and is only used in placeholders.
* *
* @param player the player to find the remaining amount of * @param player the player to find the remaining amount of
* @return the remaining amount needed. Should be non-negative. * @return the remaining amount needed. Should be non-negative.
*/ */
public double getRemaining(Player player) { public double getRemaining(Player player) {
return check(player) ? 0 : 1; return check(player) ? 0 : 1;
} }
public final boolean hasSubRequirement() { public final boolean hasSubRequirement() {
return subRequirement; return subRequirement;
} }
public abstract Requirement clone(); public abstract Requirement clone();
public double getTotal(Player player) { public double getTotal(Player player) {
return getValueDouble(); return 1;
} }
} }