bugfixes
This commit is contained in:
@@ -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]),
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user