bugfixes
This commit is contained in:
@@ -244,6 +244,7 @@ public class Rankup extends JavaPlugin {
|
||||
saveLocale("pt-br");
|
||||
saveLocale("ru");
|
||||
saveLocale("zh_CN");
|
||||
saveLocale("fr");
|
||||
}
|
||||
|
||||
private void saveLocale(String locale) {
|
||||
@@ -385,15 +386,15 @@ public class Rankup extends JavaPlugin {
|
||||
DecimalFormat percentFormat = placeholders.getPercentFormat();
|
||||
for (Requirement requirement : rank.getRequirements()) {
|
||||
try {
|
||||
replaceRequirements(builder, Variable.AMOUNT, requirement, () -> simpleFormat.format(requirement.getValueDouble()));
|
||||
replaceRequirements(builder, Variable.AMOUNT, requirement, () -> simpleFormat.format(requirement.getTotal(player)));
|
||||
if (rank.isIn(player)) {
|
||||
replaceRequirements(builder, Variable.AMOUNT_NEEDED, requirement, () -> simpleFormat.format(requirement.getRemaining(player)));
|
||||
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,
|
||||
() -> 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,
|
||||
() -> simpleFormat.format(requirement.getValueDouble() - requirement.getRemaining(player)));
|
||||
() -> simpleFormat.format(requirement.getTotal(player) - requirement.getRemaining(player)));
|
||||
}
|
||||
} catch (NumberFormatException ignored) {
|
||||
}
|
||||
@@ -402,7 +403,13 @@ public class Rankup extends JavaPlugin {
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
@@ -37,7 +37,7 @@ public class RankupExpansion extends PlaceholderExpansion {
|
||||
if (params.startsWith("requirement_")) {
|
||||
String[] parts = params.split("_", 3);
|
||||
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_")) {
|
||||
String[] parts = params.split("_", 5);
|
||||
return getPlaceholderRequirement(player, rankups.getByName(parts[2]),
|
||||
|
||||
@@ -68,11 +68,7 @@ public class Rank {
|
||||
|
||||
public Requirement getRequirement(String name) {
|
||||
for (Requirement requirement : requirements) {
|
||||
String reqName = requirement.getName();
|
||||
if (requirement.hasSubRequirement()) {
|
||||
reqName += "#" + requirement.getSub();
|
||||
}
|
||||
if (reqName.equalsIgnoreCase(name)) {
|
||||
if (requirement.getFullName().equalsIgnoreCase(name)) {
|
||||
return requirement;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user