update to 3.0.1

This commit is contained in:
okx-code
2018-09-08 17:07:07 +01:00
parent 4c7c4ef7f5
commit feca6d5c75
6 changed files with 179 additions and 149 deletions
+1 -3
View File
@@ -4,9 +4,7 @@ plugins {
} }
group 'sh.okx' group 'sh.okx'
version '3.0-alpha.22' version '3.0.1'
sourceCompatibility = 1.8
repositories { repositories {
mavenCentral() mavenCentral()
+4 -5
View File
@@ -104,23 +104,22 @@ public class Rankup extends JavaPlugin {
getCommand("rankup").setExecutor(new RankupCommand(this)); getCommand("rankup").setExecutor(new RankupCommand(this));
getCommand("rankup3").setExecutor(new InfoCommand(this)); getCommand("rankup3").setExecutor(new InfoCommand(this));
getServer().getPluginManager().registerEvents(new GuiListener(this), this); getServer().getPluginManager().registerEvents(new GuiListener(this), this);
placeholders = new Placeholders(this);
placeholders.register();
} }
@Override @Override
public void onDisable() { public void onDisable() {
closeInventories(); closeInventories();
PlaceholderAPI.unregisterExpansion(placeholders); placeholders.unregister();
} }
public void reload() { public void reload() {
cooldowns = new WeakHashMap<>(); cooldowns = new WeakHashMap<>();
closeInventories(); closeInventories();
loadConfigs(); loadConfigs();
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
placeholders = new Placeholders(this);
placeholders.register();
}
if (config.getInt("version") != 0) { if (config.getInt("version") != 0) {
getLogger().severe("You are using an outdated config!"); getLogger().severe("You are using an outdated config!");
@@ -1,7 +1,9 @@
package sh.okx.rankup.placeholders; package sh.okx.rankup.placeholders;
import lombok.Getter; import lombok.Getter;
import me.clip.placeholderapi.PlaceholderAPI;
import me.clip.placeholderapi.expansion.PlaceholderExpansion; import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup; import sh.okx.rankup.Rankup;
import sh.okx.rankup.prestige.Prestige; import sh.okx.rankup.prestige.Prestige;
@@ -13,8 +15,9 @@ import sh.okx.rankup.requirements.Requirement;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.function.Function; import java.util.function.Function;
public class Placeholders extends PlaceholderExpansion { public class Placeholders {
private final Rankup plugin; private final Rankup plugin;
private boolean registered;
@Getter @Getter
private final DecimalFormat moneyFormat; private final DecimalFormat moneyFormat;
@Getter @Getter
@@ -29,148 +32,18 @@ public class Placeholders extends PlaceholderExpansion {
this.simpleFormat = new DecimalFormat(plugin.getConfig().getString("placeholders.simple-format")); this.simpleFormat = new DecimalFormat(plugin.getConfig().getString("placeholders.simple-format"));
} }
@Override public void register() {
public String onPlaceholderRequest(Player player, String params) { if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
if (player == null) { new RankupExpansion(plugin, this).register();
return ""; registered = true;
}
params = params.toLowerCase();
Rankups rankups = plugin.getRankups();
Rank rank = rankups.getByPlayer(player);
Rank nextRank = rank == null ? null : rankups.next(rank);
Prestiges prestiges = plugin.getPrestiges();
Prestige prestige = prestiges.getByPlayer(player);
Prestige nextPrestige = prestiges.next(prestige);
if (params.startsWith("requirement_")) {
String[] parts = params.split("_", 3);
return getPlaceholderRequirement(player, rank,
parts[1], parts.length > 2 ? parts[2] : "");
} else if (params.startsWith("rank_requirement_")) {
String[] parts = params.split("_", 4);
return simpleFormat.format(orElse(rankups.getByName(parts[2]).getRequirement(parts[3]), Requirement::getValueDouble, 0));
} else if (params.startsWith("rank_money_")) {
String[] parts = params.split("_", 4);
double amount = rankups.getByName(parts[2]).getRequirement("money").getValueDouble();
if(parts.length > 3 && parts[3].equalsIgnoreCase("left")) {
amount = amount - plugin.getEconomy().getBalance(player);
}
return plugin.formatMoney(Math.max(0, amount));
}
switch (params) {
case "current_prestige":
return prestige.getRank();
case "current_prestige_name":
return prestige.getName();
case "next_prestige":
return orElsePlaceholder(nextPrestige, Prestige::getRank, "highest-rank");
case "next_prestige_name":
return orElsePlaceholder(nextPrestige, Prestige::getName, "highest-rank");
case "current_rank":
return orElsePlaceholder(rank, Rank::getRank, "not-in-ladder");
case "current_rank_name":
return orElsePlaceholder(rank, Rank::getName, "not-in-ladder");
case "current_rank_money":
return String.valueOf(orElse(rank, r -> simplify(r.getRequirement("money").getValueDouble()), 0));
case "current_rank_money_formatted":
return moneyFormat.format(orElse(rank, r -> r.getRequirement("money").getValueDouble(), 0));
case "next_rank":
return orElsePlaceholder(rank, r -> orElsePlaceholder(nextRank, Rank::getRank, "highest-rank"), "not-in-ladder");
case "next_rank_name":
return orElsePlaceholder(rank, r -> orElsePlaceholder(nextRank, Rank::getName, "highest-rank"), "not-in-ladder");
case "money":
return String.valueOf(orElse(rank, r -> simplify(r.getRequirement("money").getValueDouble()), 0));
case "money_formatted":
return plugin.formatMoney(orElse(rank, r -> r.getRequirement("money").getValueDouble(), 0D));
case "money_left":
return String.valueOf(Math.max(0, orElse(rank, r -> simplify(plugin.getEconomy().getBalance(player) - r.getRequirement("money").getValueDouble()), 0).doubleValue()));
case "money_left_formatted":
return plugin.formatMoney(Math.max(0D, orElse(rank, r -> plugin.getEconomy().getBalance(player) - r.getRequirement("money").getValueDouble(), 0D)));
case "percent_left":
return String.valueOf(Math.max(0D, orElse(rank, r -> (1 - (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble())) * 100, 0).doubleValue()));
case "percent_left_formatted":
return percentFormat.format(Math.max(0D, orElse(rank, r -> (1 - (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble())) * 100, 0).doubleValue()));
case "percent_done":
return String.valueOf(Math.min(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble()) * 100, 0).doubleValue()));
case "percent_done_formatted":
return percentFormat.format(Math.min(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble()) * 100, 0).doubleValue()));
default:
return null;
}
}
private String getPlaceholderRequirement(Player player, Rank rank, String requirementName, String params) {
if (rank == null) {
return "";
}
Requirement requirement = rank.getRequirement(requirementName);
switch (params) {
case "":
return simpleFormat.format(orElse(requirement, Requirement::getValueDouble, 0));
case "left":
return simpleFormat.format(orElse(requirement, r -> r.getRemaining(player), 0));
case "percent_left":
return percentFormat.format(orElse(requirement, r -> (r.getRemaining(player) / r.getValueDouble()) * 100, 0));
case "percent_done":
return percentFormat.format(orElse(requirement, r -> (1 - (r.getRemaining(player) / r.getValueDouble())) * 100, 100));
default:
return null;
}
}
private Number simplify(Number number) {
if (number instanceof Float) {
return (float) number % 1 == 0 ? number.intValue() : number;
} else if (number instanceof Double) {
return (double) number % 1 == 0 ? number.longValue() : number;
} else { } else {
return number; registered = false;
} }
} }
private <T> String orElsePlaceholder(T t, Function<T, Object> value, Object fallback) { public void unregister() {
if (t == null) { if(registered) {
return getPlaceholder(String.valueOf(fallback)); PlaceholderAPI.unregisterPlaceholderHook("rankup");
}
try {
return String.valueOf(value.apply(t));
} catch (NullPointerException ex) {
return getPlaceholder(String.valueOf(fallback));
} }
} }
private <T, R> R orElse(T t, Function<T, R> value, R fallback) {
if (t == null) {
return fallback;
}
try {
return value.apply(t);
} catch (NullPointerException ex) {
return fallback;
}
}
private String getPlaceholder(String name) {
return plugin.getConfig().getString("placeholders." + name);
}
@Override
public String getIdentifier() {
return "rankup";
}
@Override
public String getAuthor() {
return String.join(", ", plugin.getDescription().getAuthors());
}
@Override
public String getVersion() {
return plugin.getDescription().getVersion();
}
} }
@@ -0,0 +1,160 @@
package sh.okx.rankup.placeholders;
import lombok.RequiredArgsConstructor;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.prestige.Prestige;
import sh.okx.rankup.prestige.Prestiges;
import sh.okx.rankup.ranks.Rank;
import sh.okx.rankup.ranks.Rankups;
import sh.okx.rankup.requirements.Requirement;
import java.util.function.Function;
@RequiredArgsConstructor
public class RankupExpansion extends PlaceholderExpansion {
private final Rankup plugin;
private final Placeholders placeholders;
@Override
public String onPlaceholderRequest(Player player, String params) {
if (player == null) {
return "";
}
params = params.toLowerCase();
Rankups rankups = plugin.getRankups();
Rank rank = rankups.getByPlayer(player);
Rank nextRank = rank == null ? null : rankups.next(rank);
Prestiges prestiges = plugin.getPrestiges();
Prestige prestige = prestiges.getByPlayer(player);
Prestige nextPrestige = prestiges.next(prestige);
if (params.startsWith("requirement_")) {
String[] parts = params.split("_", 3);
return getPlaceholderRequirement(player, rank,
parts[1], parts.length > 2 ? parts[2] : "");
} else if (params.startsWith("rank_requirement_")) {
String[] parts = params.split("_", 4);
return placeholders.getSimpleFormat().format(orElse(rankups.getByName(parts[2]).getRequirement(parts[3]), Requirement::getValueDouble, 0));
} else if (params.startsWith("rank_money_")) {
String[] parts = params.split("_", 4);
double amount = rankups.getByName(parts[2]).getRequirement("money").getValueDouble();
if (parts.length > 3 && parts[3].equalsIgnoreCase("left")) {
amount = amount - plugin.getEconomy().getBalance(player);
}
return plugin.formatMoney(Math.max(0, amount));
}
switch (params) {
case "current_prestige":
return prestige.getRank();
case "current_prestige_name":
return prestige.getName();
case "next_prestige":
return orElsePlaceholder(nextPrestige, Prestige::getRank, "highest-rank");
case "next_prestige_name":
return orElsePlaceholder(nextPrestige, Prestige::getName, "highest-rank");
case "current_rank":
return orElsePlaceholder(rank, Rank::getRank, "not-in-ladder");
case "current_rank_name":
return orElsePlaceholder(rank, Rank::getName, "not-in-ladder");
case "next_rank":
return orElsePlaceholder(rank, r -> orElsePlaceholder(nextRank, Rank::getRank, "highest-rank"), "not-in-ladder");
case "next_rank_name":
return orElsePlaceholder(rank, r -> orElsePlaceholder(nextRank, Rank::getName, "highest-rank"), "not-in-ladder");
case "money":
return String.valueOf(orElse(rank, r -> simplify(r.getRequirement("money").getValueDouble()), 0));
case "money_formatted":
return plugin.formatMoney(orElse(rank, r -> r.getRequirement("money").getValueDouble(), 0D));
case "money_left":
return String.valueOf(Math.max(0, orElse(rank, r -> simplify(plugin.getEconomy().getBalance(player) - r.getRequirement("money").getValueDouble()), 0).doubleValue()));
case "money_left_formatted":
return plugin.formatMoney(Math.max(0D, orElse(rank, r -> plugin.getEconomy().getBalance(player) - r.getRequirement("money").getValueDouble(), 0D)));
case "percent_left":
return String.valueOf(Math.max(0D, orElse(rank, r -> (1 - (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble())) * 100, 0).doubleValue()));
case "percent_left_formatted":
return placeholders.getPercentFormat().format(Math.max(0D, orElse(rank, r -> (1 - (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble())) * 100, 0).doubleValue()));
case "percent_done":
return String.valueOf(Math.min(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble()) * 100, 0).doubleValue()));
case "percent_done_formatted":
return placeholders.getPercentFormat().format(Math.min(100D, orElse(rank, r -> (plugin.getEconomy().getBalance(player) / r.getRequirement("money").getValueDouble()) * 100, 0).doubleValue()));
default:
return null;
}
}
private String getPlaceholderRequirement(Player player, Rank rank, String requirementName, String params) {
if (rank == null) {
return "";
}
Requirement requirement = rank.getRequirement(requirementName);
switch (params) {
case "":
return placeholders.getSimpleFormat().format(orElse(requirement, Requirement::getValueDouble, 0));
case "left":
return placeholders.getSimpleFormat().format(orElse(requirement, r -> r.getRemaining(player), 0));
case "percent_left":
return placeholders.getPercentFormat().format(orElse(requirement, r -> (r.getRemaining(player) / r.getValueDouble()) * 100, 0));
case "percent_done":
return placeholders.getPercentFormat().format(orElse(requirement, r -> (1 - (r.getRemaining(player) / r.getValueDouble())) * 100, 100));
default:
return null;
}
}
private Number simplify(Number number) {
if (number instanceof Float) {
return (float) number % 1 == 0 ? number.intValue() : number;
} else if (number instanceof Double) {
return (double) number % 1 == 0 ? number.longValue() : number;
} else {
return number;
}
}
private <T> String orElsePlaceholder(T t, Function<T, Object> value, Object fallback) {
if (t == null) {
return getPlaceholder(String.valueOf(fallback));
}
try {
return String.valueOf(value.apply(t));
} catch (NullPointerException ex) {
return getPlaceholder(String.valueOf(fallback));
}
}
private <T, R> R orElse(T t, Function<T, R> value, R fallback) {
if (t == null) {
return fallback;
}
try {
return value.apply(t);
} catch (NullPointerException ex) {
return fallback;
}
}
private String getPlaceholder(String name) {
return plugin.getConfig().getString("placeholders." + name);
}
@Override
public String getIdentifier() {
return "rankup";
}
@Override
public String getAuthor() {
return String.join(", ", plugin.getDescription().getAuthors());
}
@Override
public String getVersion() {
return plugin.getDescription().getVersion();
}
}
+1 -1
View File
@@ -1,5 +1,5 @@
name: Rankup name: Rankup
version: 3.0-alpha.22 version: 3.0.1
main: sh.okx.rankup.Rankup main: sh.okx.rankup.Rankup
author: Okx author: Okx
depend: [Vault] depend: [Vault]
+1 -1
View File
@@ -41,7 +41,7 @@ Cexample:
# you can use this to list the requirements needed. # you can use this to list the requirements needed.
rankup: rankup:
requirements-not-met: '&cYou need 5000 money and 2 levels of XP to rankup to D.' requirements-not-met: '&cYou need 5000 money and 2 levels of XP to rankup to D.'
ranks: list:
complete: "&7{OLD_RANK} &8\xbb &7{RANK} &e(5000 money, 2 XP levels)" complete: "&7{OLD_RANK} &8\xbb &7{RANK} &e(5000 money, 2 XP levels)"
current: "&c{OLD_RANK} &e\xbb &c{RANK} &e(5000 money, 2 XP levels)" current: "&c{OLD_RANK} &e\xbb &c{RANK} &e(5000 money, 2 XP levels)"
incomplete: "&r{OLD_RANK} &e\xbb &r{RANK} &e(5000 money, 2 XP levels)" incomplete: "&r{OLD_RANK} &e\xbb &r{RANK} &e(5000 money, 2 XP levels)"