3.9.1
- patch placeholders - fix an error if you have setup ranks incorrectly
This commit is contained in:
@@ -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<String> 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<String> commands) {
|
||||
super(section, plugin, next, rank, requirements, commands);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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() + " <sub-requirement> <amount>'");
|
||||
}
|
||||
|
||||
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 <code>Requirement#check(Player)</code> 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() + " <sub-requirement> <amount>'");
|
||||
}
|
||||
|
||||
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 <code>Requirement#check(Player)</code> 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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user