update to alpha.10

This commit is contained in:
okx-code
2018-08-23 23:32:19 +01:00
parent 703342024d
commit be5ee90036
9 changed files with 54 additions and 35 deletions
+20 -1
View File
@@ -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
+1 -1
View File
@@ -1,5 +1,5 @@
name: Rankup
version: 3.0-alpha.7
version: 3.0-alpha.10
main: sh.okx.rankup.Rankup
author: Okx
depend: [Vault]