update to alpha.10
This commit is contained in:
@@ -26,11 +26,14 @@ import sh.okx.rankup.ranks.Rank;
|
||||
import sh.okx.rankup.ranks.Rankups;
|
||||
import sh.okx.rankup.ranks.requirements.MoneyRequirement;
|
||||
import sh.okx.rankup.ranks.requirements.PlaytimeMinutesRequirement;
|
||||
import sh.okx.rankup.ranks.requirements.Requirement;
|
||||
import sh.okx.rankup.ranks.requirements.RequirementRegistry;
|
||||
import sh.okx.rankup.ranks.requirements.XpLevelRequirement;
|
||||
|
||||
import java.io.File;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class Rankup extends JavaPlugin {
|
||||
@Getter
|
||||
@@ -87,7 +90,7 @@ public class Rankup extends JavaPlugin {
|
||||
placeholders.register();
|
||||
}
|
||||
|
||||
if (config.getInt("version") != YamlConfiguration.loadConfiguration(getTextResource("config.yml")).getInt("version")) {
|
||||
if (config.getInt("version") != 0) {
|
||||
getLogger().severe("You are using an outdated config!");
|
||||
getLogger().severe("This means that some things might not work!");
|
||||
getLogger().severe("To update, please rename your config files (or the folder they are in),");
|
||||
@@ -231,9 +234,25 @@ public class Rankup extends JavaPlugin {
|
||||
.replace(Variable.MONEY, formatMoney(amount))
|
||||
.replace(Variable.MONEY_NEEDED, formatMoney(Math.max(0, amount - balance)));
|
||||
}
|
||||
replaceRequirements(player, builder, rank);
|
||||
builder.send(player);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void replaceRequirements(Player player, MessageBuilder builder, Rank rank) {
|
||||
DecimalFormat simpleFormat = placeholders.getSimpleFormat();
|
||||
DecimalFormat percentFormat = placeholders.getPercentFormat();
|
||||
for(Requirement requirement : rank.getRequirements()) {
|
||||
replaceRequirements(builder, Variable.AMOUNT, requirement, () -> simpleFormat.format(requirement.getAmount()));
|
||||
replaceRequirements(builder, Variable.AMOUNT_NEEDED, requirement, () -> simpleFormat.format(requirement.getRemaining(player)));
|
||||
replaceRequirements(builder, Variable.PERCENT_LEFT, requirement, () -> percentFormat.format((requirement.getRemaining(player) / requirement.getAmount()) * 100));
|
||||
replaceRequirements(builder, Variable.PERCENT_DONE, requirement, () -> percentFormat.format((1-(requirement.getRemaining(player) / requirement.getAmount())) * 100));
|
||||
}
|
||||
}
|
||||
|
||||
private void replaceRequirements(MessageBuilder builder, Variable variable, Requirement requirement, Supplier<Object> value) {
|
||||
builder.replace(variable + " " + requirement.getName(), value.get());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,8 +13,6 @@ import sh.okx.rankup.ranks.Rank;
|
||||
import sh.okx.rankup.ranks.Rankups;
|
||||
import sh.okx.rankup.ranks.requirements.Requirement;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class RankListCommand implements CommandExecutor {
|
||||
private final Rankup plugin;
|
||||
@@ -59,36 +57,36 @@ public class RankListCommand implements CommandExecutor {
|
||||
|
||||
private void sendMessage(CommandSender player, int state, Rank oldRank, Rank rank) {
|
||||
if(state == 0) {
|
||||
replaceCost(plugin.getMessage(oldRank, Message.RANKS_COMPLETE)
|
||||
replaceRequirements(plugin.getMessage(oldRank, Message.RANKS_COMPLETE)
|
||||
.replaceAll(player, oldRank, rank), player, oldRank)
|
||||
.send(player);
|
||||
} else if(state == 1) {
|
||||
replaceCost(plugin.getMessage(oldRank, Message.RANKS_CURRENT)
|
||||
replaceRequirements(plugin.getMessage(oldRank, Message.RANKS_CURRENT)
|
||||
.replaceAll(player, oldRank, rank), player, oldRank)
|
||||
.send(player);
|
||||
} else if(state == 2) {
|
||||
replaceCost(plugin.getMessage(oldRank, Message.RANKS_INCOMPLETE)
|
||||
replaceRequirements(plugin.getMessage(oldRank, Message.RANKS_INCOMPLETE)
|
||||
.replaceAll(player, oldRank, rank), player, oldRank)
|
||||
.send(player);
|
||||
}
|
||||
}
|
||||
|
||||
private MessageBuilder replaceCost(MessageBuilder builder, CommandSender sender, Rank rank) {
|
||||
private MessageBuilder replaceRequirements(MessageBuilder builder, CommandSender sender, Rank rank) {
|
||||
Requirement money = rank.getRequirement("money");
|
||||
if(money == null || plugin.getEconomy() == null) {
|
||||
return builder;
|
||||
}
|
||||
double amount;
|
||||
Double amount = null;
|
||||
if(sender instanceof Player && rank.isInRank((Player) sender)) {
|
||||
amount = money.getRemaining((Player) sender);
|
||||
if(money != null && plugin.getEconomy() != null) {
|
||||
amount = money.getRemaining((Player) sender);
|
||||
}
|
||||
plugin.replaceRequirements((Player) sender, builder, rank);
|
||||
} else {
|
||||
amount = money.getAmount();
|
||||
}
|
||||
DecimalFormat percentFormat = plugin.getPlaceholders().getPercentFormat();
|
||||
return builder
|
||||
.replace(Variable.MONEY_NEEDED, plugin.formatMoney(amount))
|
||||
.replace(Variable.PERCENT_LEFT, percentFormat.format((amount / money.getAmount()) * 100))
|
||||
.replace(Variable.PERCENT_DONE, percentFormat.format((1-(amount / money.getAmount())) * 100))
|
||||
.replace(Variable.MONEY, plugin.formatMoney(money.getAmount()));
|
||||
if(amount != null && plugin.getEconomy() != null) {
|
||||
builder.replace(Variable.MONEY_NEEDED, plugin.formatMoney(amount));
|
||||
builder.replace(Variable.MONEY, plugin.formatMoney(money.getAmount()));
|
||||
}
|
||||
return builder;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,8 @@ import sh.okx.rankup.ranks.Rank;
|
||||
import sh.okx.rankup.ranks.requirements.Requirement;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class MessageBuilder {
|
||||
private String message;
|
||||
@@ -24,7 +26,13 @@ public class MessageBuilder {
|
||||
}
|
||||
|
||||
public MessageBuilder replace(Variable variable, Object value) {
|
||||
this.message = variable.replace(message, String.valueOf(value));
|
||||
return replace(variable.name(), value);
|
||||
}
|
||||
|
||||
public MessageBuilder replace(String name, Object value) {
|
||||
Pattern pattern = Pattern.compile("\\{" + name + "}", Pattern.CASE_INSENSITIVE);
|
||||
Matcher matcher = pattern.matcher(message);
|
||||
this.message = matcher.replaceAll(String.valueOf(value));
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -11,20 +11,13 @@ public enum Variable {
|
||||
RANK_NAME,
|
||||
MONEY,
|
||||
MONEY_NEEDED,
|
||||
AMOUNT,
|
||||
AMOUNT_NEEDED,
|
||||
PERCENT_DONE,
|
||||
PERCENT_LEFT;
|
||||
|
||||
public static Variable getVariable(String name) {
|
||||
for(Variable variable : values()) {
|
||||
if(variable.toString().equalsIgnoreCase(name)) {
|
||||
return variable;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public String replace(String message, String value) {
|
||||
Pattern pattern = Pattern.compile("\\{" + this + "}", Pattern.CASE_INSENSITIVE);
|
||||
public String replace(String message, String value, String type) {
|
||||
Pattern pattern = Pattern.compile("\\{" + type + "_" + this + "}", Pattern.CASE_INSENSITIVE);
|
||||
Matcher matcher = pattern.matcher(message);
|
||||
return matcher.replaceAll(value);
|
||||
}
|
||||
|
||||
@@ -85,9 +85,9 @@ public class Placeholders extends PlaceholderExpansion {
|
||||
case "percent_left_formatted":
|
||||
return percentFormat.format(Math.max(0D, orElse(rank, r -> (1-(plugin.getEconomy().getBalance(player) / r.getRequirement("money").getAmount())) * 100, 0).doubleValue()));
|
||||
case "percent_done":
|
||||
return String.valueOf(Math.max(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getAmount()) * 100, 0).doubleValue()));
|
||||
return String.valueOf(Math.min(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getAmount()) * 100, 0).doubleValue()));
|
||||
case "percent_done_formatted":
|
||||
return percentFormat.format(Math.max(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getAmount()) * 100, 0).doubleValue()));
|
||||
return percentFormat.format(Math.min(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getAmount()) * 100, 0).doubleValue()));
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ public class Rank {
|
||||
private final String next;
|
||||
@Getter
|
||||
private final String rank;
|
||||
@Getter
|
||||
private final Set<Requirement> requirements;
|
||||
private final BinaryOperator<Boolean> reducer;
|
||||
private final List<String> commands;
|
||||
|
||||
@@ -35,7 +35,7 @@ public class PlaytimeMinutesRequirement extends Requirement {
|
||||
|
||||
@Override
|
||||
public double getRemaining(Player player) {
|
||||
return amount - (player.getStatistic(playOneTick) * TICKS_PER_MINUTE);
|
||||
return Math.max(0, amount - (player.getStatistic(playOneTick) * TICKS_PER_MINUTE));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user