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
+12 -5
View File
@@ -244,6 +244,7 @@ public class Rankup extends JavaPlugin {
saveLocale("pt-br"); saveLocale("pt-br");
saveLocale("ru"); saveLocale("ru");
saveLocale("zh_CN"); saveLocale("zh_CN");
saveLocale("fr");
} }
private void saveLocale(String locale) { private void saveLocale(String locale) {
@@ -385,15 +386,15 @@ public class Rankup extends JavaPlugin {
DecimalFormat percentFormat = placeholders.getPercentFormat(); DecimalFormat percentFormat = placeholders.getPercentFormat();
for (Requirement requirement : rank.getRequirements()) { for (Requirement requirement : rank.getRequirements()) {
try { try {
replaceRequirements(builder, Variable.AMOUNT, requirement, () -> simpleFormat.format(requirement.getValueDouble())); replaceRequirements(builder, Variable.AMOUNT, requirement, () -> simpleFormat.format(requirement.getTotal(player)));
if (rank.isIn(player)) { if (rank.isIn(player)) {
replaceRequirements(builder, Variable.AMOUNT_NEEDED, requirement, () -> simpleFormat.format(requirement.getRemaining(player))); replaceRequirements(builder, Variable.AMOUNT_NEEDED, requirement, () -> simpleFormat.format(requirement.getRemaining(player)));
replaceRequirements(builder, Variable.PERCENT_LEFT, requirement, replaceRequirements(builder, Variable.PERCENT_LEFT, requirement,
() -> percentFormat.format(Math.max(0, (requirement.getRemaining(player) / requirement.getValueDouble()) * 100))); () -> percentFormat.format(Math.max(0, (requirement.getRemaining(player) / requirement.getTotal(player)) * 100)));
replaceRequirements(builder, Variable.PERCENT_DONE, requirement, replaceRequirements(builder, Variable.PERCENT_DONE, requirement,
() -> percentFormat.format(Math.min(100, (1 - (requirement.getRemaining(player) / requirement.getValueDouble())) * 100))); () -> percentFormat.format(Math.min(100, (1 - (requirement.getRemaining(player) / requirement.getTotal(player))) * 100)));
replaceRequirements(builder, Variable.AMOUNT_DONE, requirement, replaceRequirements(builder, Variable.AMOUNT_DONE, requirement,
() -> simpleFormat.format(requirement.getValueDouble() - requirement.getRemaining(player))); () -> simpleFormat.format(requirement.getTotal(player) - requirement.getRemaining(player)));
} }
} catch (NumberFormatException ignored) { } catch (NumberFormatException ignored) {
} }
@@ -402,7 +403,13 @@ public class Rankup extends JavaPlugin {
} }
private void replaceRequirements(MessageBuilder builder, Variable variable, Requirement requirement, Supplier<Object> value) { private void replaceRequirements(MessageBuilder builder, Variable variable, Requirement requirement, Supplier<Object> value) {
builder.replace(variable + " " + requirement.getFullName(), value.get()); Object get;
try {
get = value.get();
builder.replace(variable + " " + requirement.getFullName(), value.get());
} catch (Exception e) {
e.printStackTrace();
}
} }
public MessageBuilder getMessage(CommandSender player, Message message, Rank oldRank, String rankName) { public MessageBuilder getMessage(CommandSender player, Message message, Rank oldRank, String rankName) {
@@ -37,7 +37,7 @@ public class RankupExpansion extends PlaceholderExpansion {
if (params.startsWith("requirement_")) { if (params.startsWith("requirement_")) {
String[] parts = params.split("_", 3); String[] parts = params.split("_", 3);
return getPlaceholderRequirement(player, rank, return getPlaceholderRequirement(player, rank,
parts[1], parts.length > 2 ? parts[2] : ""); parts[1].replace("-", "_"), parts.length > 2 ? parts[2] : "");
} else if (params.startsWith("rank_requirement_")) { } else if (params.startsWith("rank_requirement_")) {
String[] parts = params.split("_", 5); String[] parts = params.split("_", 5);
return getPlaceholderRequirement(player, rankups.getByName(parts[2]), return getPlaceholderRequirement(player, rankups.getByName(parts[2]),
+1 -5
View File
@@ -68,11 +68,7 @@ public class Rank {
public Requirement getRequirement(String name) { public Requirement getRequirement(String name) {
for (Requirement requirement : requirements) { for (Requirement requirement : requirements) {
String reqName = requirement.getName(); if (requirement.getFullName().equalsIgnoreCase(name)) {
if (requirement.hasSubRequirement()) {
reqName += "#" + requirement.getSub();
}
if (reqName.equalsIgnoreCase(name)) {
return requirement; return requirement;
} }
} }
@@ -19,7 +19,7 @@ public abstract class ProgressiveRequirement extends Requirement {
@Override @Override
public boolean check(Player player) { public boolean check(Player player) {
return getRemaining(player) == 0; return getRemaining(player) <= 0;
} }
@Override @Override
@@ -28,7 +28,7 @@ public abstract class ProgressiveRequirement extends Requirement {
} }
public double getRemaining(Player player, double multiplier) { 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); public abstract double getProgress(Player player);
@@ -97,4 +97,8 @@ public abstract class Requirement implements Cloneable {
} }
public abstract Requirement clone(); 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 me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup; import sh.okx.rankup.Rankup;
import sh.okx.rankup.requirements.ProgressiveRequirement;
import sh.okx.rankup.requirements.Requirement; 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) { public PlaceholderRequirement(Rankup plugin) {
super(plugin, "placeholder"); super(plugin, "placeholder");
} }
@@ -15,20 +19,15 @@ public class PlaceholderRequirement extends Requirement {
} }
@Override @Override
public boolean check(Player player) { public double getProgress(Player player) {
String[] parts = getValueString().split(" "); String[] parts = getParts(player);
String parsed = PlaceholderAPI.setPlaceholders(player, parts[0]); String parsed = 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");
}
String value = parts[2]; String value = parts[2];
// string operations // string operations
switch (parts[1]) { switch (parts[1]) {
case "=": case "=":
return parsed.equals(value); return parsed.equals(value) ? 1 : 0;
} }
// numeric operations // numeric operations
@@ -36,23 +35,52 @@ public class PlaceholderRequirement extends Requirement {
double v = Double.parseDouble(value); double v = Double.parseDouble(value);
switch (parts[1]) { switch (parts[1]) {
case ">": case ">":
return p > v; return p > v ? v : 0;
case ">=": case ">=":
return p >= v; return Math.min(p, v);
case "<": case "<":
return p < v; return p < v ? v : 0;
case "<=": case "<=":
return p <= v; return p <= v ? 1 : 0;
case "==": case "==":
return p == v; return p == v ? v : 0;
} }
throw new IllegalArgumentException("Invalid operation: " + parts[1]); 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 @Override
public String getFullName() { public String getFullName() {
String[] parts = getValueString().split(" "); String[] parts = getValueString().split(" ");
return parts[0]; return name + "#" + parts[0].replace("%", "");
}
@Override
public boolean check(Player player) {
return getRemaining(player) <= 0;
} }
@Override @Override