From f8ede913efe0874c48f3b7b00ea5fa32aaed7afe Mon Sep 17 00:00:00 2001 From: okx-code Date: Thu, 13 Sep 2018 21:19:25 +0100 Subject: [PATCH] 3.1 prestiging improvements --- build.gradle | 2 +- src/main/java/sh/okx/rankup/RankList.java | 2 +- src/main/java/sh/okx/rankup/Rankup.java | 22 +++++++---- .../sh/okx/rankup/RankupRegisterEvent.java | 38 +++++++++++++++++++ .../okx/rankup/commands/PrestigeCommand.java | 2 +- .../java/sh/okx/rankup/messages/Message.java | 5 ++- .../rankup/placeholders/RankupExpansion.java | 4 ++ .../sh/okx/rankup/prestige/Prestiges.java | 2 +- .../java/sh/okx/rankup/ranks/Rankups.java | 2 +- src/main/resources/config.yml | 6 ++- src/main/resources/messages.yml | 7 ++++ src/main/resources/plugin.yml | 2 +- 12 files changed, 79 insertions(+), 15 deletions(-) create mode 100644 src/main/java/sh/okx/rankup/RankupRegisterEvent.java diff --git a/build.gradle b/build.gradle index 2f26c3c..7671b34 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group 'sh.okx' -version '3.0.2' +version '3.1' repositories { mavenCentral() diff --git a/src/main/java/sh/okx/rankup/RankList.java b/src/main/java/sh/okx/rankup/RankList.java index 6ffd0c0..0b73d58 100644 --- a/src/main/java/sh/okx/rankup/RankList.java +++ b/src/main/java/sh/okx/rankup/RankList.java @@ -16,7 +16,7 @@ public class RankList { protected final FileConfiguration config; protected final Set ranks = new HashSet<>(); - public RankList(Rankup plugin, FileConfiguration config, Function deserializer) { + public RankList(FileConfiguration config, Function deserializer) { this.config = config; for (Map.Entry entry : config.getValues(false).entrySet()) { ConfigurationSection rankSection = (ConfigurationSection) entry.getValue(); diff --git a/src/main/java/sh/okx/rankup/Rankup.java b/src/main/java/sh/okx/rankup/Rankup.java index 70081e2..6c2a69b 100644 --- a/src/main/java/sh/okx/rankup/Rankup.java +++ b/src/main/java/sh/okx/rankup/Rankup.java @@ -58,9 +58,9 @@ public class Rankup extends JavaPlugin { * The registry for listing the requirements to /rankup. */ @Getter - private RequirementRegistry requirementRegistry = new RequirementRegistry(); + private RequirementRegistry requirementRegistry; @Getter - private OperationRegistry operationRegistry = new OperationRegistry(); + private OperationRegistry operationRegistry; @Getter private FileConfiguration messages; @Getter @@ -78,7 +78,6 @@ public class Rankup extends JavaPlugin { @Override public void onEnable() { - registerRequirements(); setupPermissions(); setupEconomy(); reload(); @@ -121,10 +120,10 @@ public class Rankup extends JavaPlugin { closeInventories(); loadConfigs(); - if (config.getInt("version") != 0) { + if (config.getInt("version") < 1) { 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),"); + getLogger().severe("To update, please rename ALL your config files (or the folder they are in),"); getLogger().severe("and run /rankup3 reload to generate a new config file."); getLogger().severe("If that does not work, restart your server."); getLogger().severe("You may then copy in your config values from the old config."); @@ -150,6 +149,11 @@ public class Rankup extends JavaPlugin { private void loadConfigs() { messages = loadConfig("messages.yml"); config = loadConfig("config.yml"); + refreshRanks(); + } + + public void refreshRanks() { + registerRequirements(); rankups = new Rankups(this, loadConfig("rankups.yml")); if(config.getBoolean("prestige")) { prestiges = new Prestiges(this, loadConfig("prestiges.yml")); @@ -165,16 +169,20 @@ public class Rankup extends JavaPlugin { } private void registerRequirements() { + requirementRegistry = new RequirementRegistry(); requirementRegistry.addRequirement(new MoneyRequirement(this)); requirementRegistry.addRequirement(new XpLevelRequirement(this)); requirementRegistry.addRequirement(new PlaytimeMinutesRequirement(this)); requirementRegistry.addRequirement(new GroupRequirement(this)); requirementRegistry.addRequirement(new PermissionRequirement(this)); + operationRegistry = new OperationRegistry(); operationRegistry.addOperation("all", new AllOperation()); operationRegistry.addOperation("none", new NoneOperation()); operationRegistry.addOperation("one", new OneOperation()); operationRegistry.addOperation("any", new AnyOperation()); + + Bukkit.getPluginManager().callEvent(new RankupRegisterEvent(this)); } private void setupPermissions() { @@ -330,12 +338,12 @@ public class Rankup extends JavaPlugin { } permissions.playerAddGroup(null, player, prestige.getRank()); - getMessage(oldPrestige, Message.SUCCESS_PUBLIC) + getMessage(oldPrestige, Message.PRESTIGE_SUCCESS_PUBLIC) .failIfEmpty() .replaceRanks(player, oldPrestige, prestige) .replaceFromTo(oldPrestige) .broadcast(); - getMessage(oldPrestige, Message.SUCCESS_PRIVATE) + getMessage(oldPrestige, Message.PRESTIGE_SUCCESS_PRIVATE) .failIfEmpty() .replaceRanks(player, oldPrestige, prestige) .replaceFromTo(oldPrestige) diff --git a/src/main/java/sh/okx/rankup/RankupRegisterEvent.java b/src/main/java/sh/okx/rankup/RankupRegisterEvent.java new file mode 100644 index 0000000..b6edf06 --- /dev/null +++ b/src/main/java/sh/okx/rankup/RankupRegisterEvent.java @@ -0,0 +1,38 @@ +package sh.okx.rankup; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import sh.okx.rankup.requirements.OperationRegistry; +import sh.okx.rankup.requirements.RequirementRegistry; + +/** + * Called immediately before rankups and prestiges are registered, + * and immediately after the built-in requirements and operations are registered. + * This is used to register custom requirements. + * This is called when the plugin is enabled, and when it is reloaded from a command. + */ +@RequiredArgsConstructor +public class RankupRegisterEvent extends Event { + private static final HandlerList handlers = new HandlerList(); + @Getter + private final Rankup plugin; + + public RequirementRegistry getRequirementRegistry() { + return plugin.getRequirementRegistry(); + } + + public OperationRegistry getOperationRegistry() { + return plugin.getOperationRegistry(); + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/src/main/java/sh/okx/rankup/commands/PrestigeCommand.java b/src/main/java/sh/okx/rankup/commands/PrestigeCommand.java index 6a0f7da..c827ee6 100644 --- a/src/main/java/sh/okx/rankup/commands/PrestigeCommand.java +++ b/src/main/java/sh/okx/rankup/commands/PrestigeCommand.java @@ -47,7 +47,7 @@ public class PrestigeCommand implements CommandExecutor { switch (confirmationType) { case "text": confirming.put(player, System.currentTimeMillis()); - plugin.replaceMoneyRequirements(plugin.getMessage(prestige, Message.CONFIRMATION) + plugin.replaceMoneyRequirements(plugin.getMessage(prestige, Message.PRESTIGE_CONFIRMATION) .replaceRanks(player, prestige, prestiges.next(prestige)), player, prestige) .replaceFromTo(prestige) .send(player); diff --git a/src/main/java/sh/okx/rankup/messages/Message.java b/src/main/java/sh/okx/rankup/messages/Message.java index 66d1cf0..446e871 100644 --- a/src/main/java/sh/okx/rankup/messages/Message.java +++ b/src/main/java/sh/okx/rankup/messages/Message.java @@ -24,7 +24,10 @@ public enum Message { COOLDOWN_SINGULAR("rankup.cooldown.singular"), COOLDOWN_PLURAL("rankup.cooldown.plural"), MUST_PRESTIGE("rankup.must-prestige"), - NOT_HIGH_ENOUGH("prestige.not-high-enough"); + NOT_HIGH_ENOUGH("not-high-enough"), + PRESTIGE_SUCCESS_PUBLIC("prestige.success-public"), + PRESTIGE_SUCCESS_PRIVATE("prestige.success-private"), + PRESTIGE_CONFIRMATION("prestige.confirmation"); @Getter private final String name; diff --git a/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java b/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java index ecaa89f..dc86c9f 100644 --- a/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java +++ b/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java @@ -57,6 +57,10 @@ public class RankupExpansion extends PlaceholderExpansion { return orElsePlaceholder(nextPrestige, Prestige::getRank, "highest-rank"); case "next_prestige_name": return orElsePlaceholder(nextPrestige, Prestige::getName, "highest-rank"); + case "prestige_money": + return String.valueOf(simplify(orElse(prestige, r -> r.isEligable(player) ? r.getRequirement("money").getValueDouble() : 0, 0))); + case "prestige_money_formatted": + return plugin.formatMoney(orElse(prestige, r -> r.isEligable(player) ? r.getRequirement("money").getValueDouble() : 0, 0D)); case "current_rank": return orElsePlaceholder(rank, Rank::getRank, "not-in-ladder"); case "current_rank_name": diff --git a/src/main/java/sh/okx/rankup/prestige/Prestiges.java b/src/main/java/sh/okx/rankup/prestige/Prestiges.java index 95136a4..b58fea6 100644 --- a/src/main/java/sh/okx/rankup/prestige/Prestiges.java +++ b/src/main/java/sh/okx/rankup/prestige/Prestiges.java @@ -7,7 +7,7 @@ import sh.okx.rankup.Rankup; public class Prestiges extends RankList { public Prestiges(Rankup plugin, FileConfiguration config) { - super(plugin, config, section -> Prestige.deserialize(plugin, section)); + super(config, section -> Prestige.deserialize(plugin, section)); } @Override diff --git a/src/main/java/sh/okx/rankup/ranks/Rankups.java b/src/main/java/sh/okx/rankup/ranks/Rankups.java index 3a27661..b606cbe 100644 --- a/src/main/java/sh/okx/rankup/ranks/Rankups.java +++ b/src/main/java/sh/okx/rankup/ranks/Rankups.java @@ -6,6 +6,6 @@ import sh.okx.rankup.Rankup; public class Rankups extends RankList { public Rankups(Rankup plugin, FileConfiguration config) { - super(plugin, config, section -> Rank.deserialize(plugin, section)); + super(config, section -> Rank.deserialize(plugin, section)); } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 4258c58..c4a0596 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,13 +1,17 @@ # this is used for letting you know that you need to update/change your config file -version: 0 +version: 1 # whether /ranks and /prestiges should be enabled (true) or disabled (false) # /rankup3 reload will not do anything if this is changed, # you will have to restart your server. ranks: true +# in 1.13 you can negate the permission rankup.prestiges +# so the command will not autocomplete prestiges: true # whether or not /prestige and /prestiges should be enabled. +# in 1.13 you can negate the permission rankup.prestige +# so the command will not autocomplete prestige: true # how people should confirm ranking up diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml index 0358122..db1d2b2 100644 --- a/src/main/resources/messages.yml +++ b/src/main/resources/messages.yml @@ -38,7 +38,14 @@ rankup: plural: "&cYou must wait {SECONDS_LEFT} more seconds to rankup again." # prestige messages can also be customised prestige: + success-public: "&a{PLAYER} &ehas prestiged to: &d{RANK}" + success-private: "&aYou have prestiged to: &d{RANK}" + + confirmation: |- + &eAre you sure you want to prestige to &a{RANK}&e? + &eType &c/prestige &eagain to confirm. title: "Prestige to {RANK}" + list: complete: "&7{OLD_RANK} &8\xbb &7{RANK}" current: "&c{OLD_RANK} &e\xbb &c{RANK}" diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 22a248a..47c0a63 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: Rankup -version: 3.0.2 +version: 3.1 main: sh.okx.rankup.Rankup author: Okx depend: [Vault]