This commit is contained in:
okx-code
2019-08-31 00:45:20 +01:00
parent 11fb6dc936
commit bd08ad27c7
6 changed files with 64 additions and 29 deletions
@@ -19,7 +19,7 @@ public abstract class ProgressiveRequirement extends Requirement {
@Override
public boolean check(Player player) {
return getRemaining(player) == 0;
return getRemaining(player) <= 0;
}
@Override
@@ -28,7 +28,7 @@ public abstract class ProgressiveRequirement extends Requirement {
}
public double getRemaining(Player player, double multiplier) {
return Math.max(0, (multiplier * getValueDouble()) - getProgress(player));
return Math.max(0, (multiplier * getTotal(player)) - getProgress(player));
}
public abstract double getProgress(Player player);
@@ -97,4 +97,8 @@ public abstract class Requirement implements Cloneable {
}
public abstract Requirement clone();
public double getTotal(Player player) {
return getValueDouble();
}
}
@@ -3,9 +3,13 @@ package sh.okx.rankup.requirements.requirement;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.requirements.ProgressiveRequirement;
import sh.okx.rankup.requirements.Requirement;
public class PlaceholderRequirement extends Requirement {
public class PlaceholderRequirement extends ProgressiveRequirement {
public static final double DELTA = 0.00001D;
public PlaceholderRequirement(Rankup plugin) {
super(plugin, "placeholder");
}
@@ -15,20 +19,15 @@ public class PlaceholderRequirement extends Requirement {
}
@Override
public boolean check(Player player) {
String[] parts = getValueString().split(" ");
String parsed = PlaceholderAPI.setPlaceholders(player, parts[0]);
if (!PlaceholderAPI.containsPlaceholders(parts[0]) || parsed.equals(parts[0])) {
throw new IllegalArgumentException(parts[0] + " is not a PlaceholderAPI placeholder!");
} else if (parts.length < 3) {
throw new IllegalArgumentException("Placeholder requirements must be in the form %placeholder% <operation> string");
}
public double getProgress(Player player) {
String[] parts = getParts(player);
String parsed = parts[0];
String value = parts[2];
// string operations
switch (parts[1]) {
case "=":
return parsed.equals(value);
return parsed.equals(value) ? 1 : 0;
}
// numeric operations
@@ -36,23 +35,52 @@ public class PlaceholderRequirement extends Requirement {
double v = Double.parseDouble(value);
switch (parts[1]) {
case ">":
return p > v;
return p > v ? v : 0;
case ">=":
return p >= v;
return Math.min(p, v);
case "<":
return p < v;
return p < v ? v : 0;
case "<=":
return p <= v;
return p <= v ? 1 : 0;
case "==":
return p == v;
return p == v ? v : 0;
}
throw new IllegalArgumentException("Invalid operation: " + parts[1]);
}
@Override
public double getTotal(Player player) {
String[] parts = getParts(player);
if (parts[1].equalsIgnoreCase("=")) {
return 1;
} else {
return Double.parseDouble(parts[2]);
}
}
private String[] getParts(Player player) {
String[] parts = getValueString().split(" ");
if (parts.length < 3) {
throw new IllegalArgumentException("Placeholder requirements must be in the form %placeholder% <operation> string");
}
String parsed = PlaceholderAPI.setPlaceholders(player, parts[0]);
if (!PlaceholderAPI.containsPlaceholders(parts[0]) || parsed.equals(parts[0])) {
throw new IllegalArgumentException(parts[0] + " is not a PlaceholderAPI placeholder!");
}
parts[0] = parsed;
return parts;
}
@Override
public String getFullName() {
String[] parts = getValueString().split(" ");
return parts[0];
return name + "#" + parts[0].replace("%", "");
}
@Override
public boolean check(Player player) {
return getRemaining(player) <= 0;
}
@Override