diff --git a/build.gradle b/build.gradle index ae5d530..8e0f505 100644 --- a/build.gradle +++ b/build.gradle @@ -1,10 +1,10 @@ plugins { id 'java' - id "io.freefair.lombok" version "4.1.6" + id "io.freefair.lombok" version "5.0.1" } group 'sh.okx' -version '3.8.1' +version '3.8.2' repositories { mavenCentral() @@ -27,7 +27,7 @@ repositories { dependencies { testImplementation group: 'junit', name: 'junit', version: '4.12' compileOnly 'org.jetbrains:annotations:16.0.2' - implementation 'org.spigotmc:spigot:1.15.2-R0.1-SNAPSHOT' + implementation 'org.spigotmc:spigot-api:1.15.2-R0.1-SNAPSHOT' implementation('com.github.Realizedd:TokenManager:3.2.4') { transitive = false } diff --git a/src/main/java/sh/okx/rankup/RankList.java b/src/main/java/sh/okx/rankup/RankList.java index ce2c82f..191e5b3 100644 --- a/src/main/java/sh/okx/rankup/RankList.java +++ b/src/main/java/sh/okx/rankup/RankList.java @@ -1,6 +1,7 @@ package sh.okx.rankup; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.List; @@ -17,7 +18,7 @@ public class RankList { protected final RankupPlugin plugin; @Getter protected final FileConfiguration config; - protected final Set ranks = new HashSet<>(); + protected final Collection ranks = new ArrayList<>(); public RankList(RankupPlugin plugin, FileConfiguration config, Function deserializer) { this.plugin = plugin; @@ -59,7 +60,7 @@ public class RankList { for (T rank : ranks) { // see if anything ranks up to this for (T rank0 : ranks) { - if (rank0.getNext().equals(rank.getRank())) { + if (rank0.getNext().equalsIgnoreCase(rank.getRank())) { continue OUTER; } } diff --git a/src/main/java/sh/okx/rankup/RankupHelper.java b/src/main/java/sh/okx/rankup/RankupHelper.java index 1db6d47..65c857d 100644 --- a/src/main/java/sh/okx/rankup/RankupHelper.java +++ b/src/main/java/sh/okx/rankup/RankupHelper.java @@ -4,7 +4,7 @@ import java.util.HashMap; import java.util.Map; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; -import sh.okx.rankup.hook.PermissionProvider; +import sh.okx.rankup.hook.GroupProvider; import sh.okx.rankup.messages.Message; import sh.okx.rankup.messages.Variable; import sh.okx.rankup.prestige.Prestige; @@ -20,7 +20,7 @@ public class RankupHelper { private final RankupPlugin plugin; private final ConfigurationSection config; - private final PermissionProvider permissions; + private final GroupProvider permissions; /** * Players who cannot rankup/prestige for a certain amount of time. */ diff --git a/src/main/java/sh/okx/rankup/RankupPlugin.java b/src/main/java/sh/okx/rankup/RankupPlugin.java index f9dcf3f..9e6ce05 100644 --- a/src/main/java/sh/okx/rankup/RankupPlugin.java +++ b/src/main/java/sh/okx/rankup/RankupPlugin.java @@ -29,7 +29,7 @@ import sh.okx.rankup.commands.RankupCommand; import sh.okx.rankup.gui.Gui; import sh.okx.rankup.gui.GuiListener; import sh.okx.rankup.hook.PermissionManager; -import sh.okx.rankup.hook.PermissionProvider; +import sh.okx.rankup.hook.GroupProvider; import sh.okx.rankup.messages.Message; import sh.okx.rankup.messages.MessageBuilder; import sh.okx.rankup.messages.NullMessageBuilder; @@ -79,7 +79,7 @@ import sh.okx.rankup.util.VersionChecker; public class RankupPlugin extends JavaPlugin { @Getter - private PermissionProvider permissions; + private GroupProvider permissions; @Getter private Economy economy; /** @@ -179,7 +179,7 @@ public class RankupPlugin extends JavaPlugin { if (autoRankup != null) { autoRankup.cancel(); } - long time = config.getInt("autorankup-interval") * 60 * 20; + long time = (long) (config.getDouble("autorankup-interval") * 60 * 20); if (time > 0) { autoRankup = new AutoRankup(this); autoRankup.runTaskTimer(this, time, time); @@ -469,19 +469,15 @@ public class RankupPlugin extends JavaPlugin { return builder; } - private void replaceRequirements(MessageBuilder builder, Variable variable, - Requirement requirement, Supplier value) { - Object get; + private void replaceRequirements(MessageBuilder builder, Variable variable, Requirement requirement, Supplier value) { 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) { String oldRankName; if (oldRank instanceof Prestige && oldRank.getRank() == null) { oldRankName = ((Prestige) oldRank).getFrom(); diff --git a/src/main/java/sh/okx/rankup/commands/InfoCommand.java b/src/main/java/sh/okx/rankup/commands/InfoCommand.java index 4599617..c6de264 100644 --- a/src/main/java/sh/okx/rankup/commands/InfoCommand.java +++ b/src/main/java/sh/okx/rankup/commands/InfoCommand.java @@ -102,6 +102,8 @@ public class InfoCommand implements CommandExecutor { + ChatColor.GREEN + " from " + ChatColor.GOLD + prestige.getFrom() + ChatColor.GREEN + " to " + ChatColor.GOLD + prestige.getTo()); return true; + } else if(args[0].equalsIgnoreCase("rankdown") && sender.hasPermission("rankup.force")) { + } } diff --git a/src/main/java/sh/okx/rankup/commands/RanksCommand.java b/src/main/java/sh/okx/rankup/commands/RanksCommand.java index 32fc06f..cdd2975 100644 --- a/src/main/java/sh/okx/rankup/commands/RanksCommand.java +++ b/src/main/java/sh/okx/rankup/commands/RanksCommand.java @@ -34,10 +34,10 @@ public class RanksCommand implements CommandExecutor { while (rank != null) { String name = rank.getNext(); if (rank.equals(playerRank)) { - plugin.getMessage(sender, Message.RANKS_CURRENT, rank, name).send(sender); + plugin.getMessage(sender, Message.RANKS_CURRENT, rank, name).failIfEmpty().send(sender); message = Message.RANKS_INCOMPLETE; } else { - plugin.getMessage(sender, message, rank, name).send(sender); + plugin.getMessage(sender, message, rank, name).failIfEmpty().send(sender); } rank = rankups.getByName(name); } diff --git a/src/main/java/sh/okx/rankup/hook/PermissionProvider.java b/src/main/java/sh/okx/rankup/hook/GroupProvider.java similarity index 79% rename from src/main/java/sh/okx/rankup/hook/PermissionProvider.java rename to src/main/java/sh/okx/rankup/hook/GroupProvider.java index 1a3a215..093d15d 100644 --- a/src/main/java/sh/okx/rankup/hook/PermissionProvider.java +++ b/src/main/java/sh/okx/rankup/hook/GroupProvider.java @@ -1,9 +1,9 @@ -package sh.okx.rankup.hook; - -import java.util.UUID; - -public interface PermissionProvider { - boolean inGroup(UUID uuid, String group); - void addGroup(UUID uuid, String group); - void removeGroup(UUID uuid, String group); -} +package sh.okx.rankup.hook; + +import java.util.UUID; + +public interface GroupProvider { + boolean inGroup(UUID uuid, String group); + void addGroup(UUID uuid, String group); + void removeGroup(UUID uuid, String group); +} diff --git a/src/main/java/sh/okx/rankup/hook/PermissionPermissionProvider.java b/src/main/java/sh/okx/rankup/hook/PermissionGroupProvider.java similarity index 89% rename from src/main/java/sh/okx/rankup/hook/PermissionPermissionProvider.java rename to src/main/java/sh/okx/rankup/hook/PermissionGroupProvider.java index 3206fc7..3990d30 100644 --- a/src/main/java/sh/okx/rankup/hook/PermissionPermissionProvider.java +++ b/src/main/java/sh/okx/rankup/hook/PermissionGroupProvider.java @@ -4,7 +4,7 @@ import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -public class PermissionPermissionProvider implements PermissionProvider { +public class PermissionGroupProvider implements GroupProvider { @Override public boolean inGroup(UUID uuid, String group) { diff --git a/src/main/java/sh/okx/rankup/hook/PermissionManager.java b/src/main/java/sh/okx/rankup/hook/PermissionManager.java index e658dc9..0c4a007 100644 --- a/src/main/java/sh/okx/rankup/hook/PermissionManager.java +++ b/src/main/java/sh/okx/rankup/hook/PermissionManager.java @@ -11,11 +11,11 @@ public class PermissionManager { this.plugin = plugin; } - public PermissionProvider findPermissionProvider() { + public GroupProvider findPermissionProvider() { return getVaultPermissionProvider(); } - private PermissionProvider getVaultPermissionProvider() { + private GroupProvider getVaultPermissionProvider() { RegisteredServiceProvider rsp = plugin.getServer().getServicesManager() .getRegistration(Permission.class); if (rsp == null) { @@ -25,10 +25,10 @@ public class PermissionManager { if (!provider.hasGroupSupport()) { return null; } - return new VaultPermissionProvider(provider); + return new VaultGroupProvider(provider); } - public PermissionProvider permissionOnlyProvider() { - return new PermissionPermissionProvider(); + public GroupProvider permissionOnlyProvider() { + return new PermissionGroupProvider(); } } diff --git a/src/main/java/sh/okx/rankup/hook/VaultPermissionProvider.java b/src/main/java/sh/okx/rankup/hook/VaultGroupProvider.java similarity index 85% rename from src/main/java/sh/okx/rankup/hook/VaultPermissionProvider.java rename to src/main/java/sh/okx/rankup/hook/VaultGroupProvider.java index 8bc9eec..695b50b 100644 --- a/src/main/java/sh/okx/rankup/hook/VaultPermissionProvider.java +++ b/src/main/java/sh/okx/rankup/hook/VaultGroupProvider.java @@ -1,44 +1,44 @@ -package sh.okx.rankup.hook; - -import java.util.Objects; -import java.util.UUID; -import net.milkbowl.vault.permission.Permission; -import org.bukkit.Bukkit; - -public class VaultPermissionProvider implements PermissionProvider { - private final Permission permission; - - public VaultPermissionProvider(Permission permission) { - this.permission = permission; - } - - @Override - public boolean inGroup(UUID uuid, String group) { - Objects.requireNonNull(uuid); - Objects.requireNonNull(group); - - String[] playerGroups = permission.getPlayerGroups(null, Bukkit.getOfflinePlayer(uuid)); - for (String playerGroup : playerGroups) { - if (group.equalsIgnoreCase(playerGroup)) { - return true; - } - } - return false; - } - - @Override - public void addGroup(UUID uuid, String group) { - Objects.requireNonNull(uuid); - Objects.requireNonNull(group); - - permission.playerAddGroup(null, Bukkit.getOfflinePlayer(uuid), group); - } - - @Override - public void removeGroup(UUID uuid, String group) { - Objects.requireNonNull(uuid); - Objects.requireNonNull(group); - - permission.playerRemoveGroup(null, Bukkit.getOfflinePlayer(uuid), group); - } -} +package sh.okx.rankup.hook; + +import java.util.Objects; +import java.util.UUID; +import net.milkbowl.vault.permission.Permission; +import org.bukkit.Bukkit; + +public class VaultGroupProvider implements GroupProvider { + private final Permission permission; + + public VaultGroupProvider(Permission permission) { + this.permission = permission; + } + + @Override + public boolean inGroup(UUID uuid, String group) { + Objects.requireNonNull(uuid); + Objects.requireNonNull(group); + + String[] playerGroups = permission.getPlayerGroups(null, Bukkit.getOfflinePlayer(uuid)); + for (String playerGroup : playerGroups) { + if (group.equalsIgnoreCase(playerGroup)) { + return true; + } + } + return false; + } + + @Override + public void addGroup(UUID uuid, String group) { + Objects.requireNonNull(uuid); + Objects.requireNonNull(group); + + permission.playerAddGroup(null, Bukkit.getOfflinePlayer(uuid), group); + } + + @Override + public void removeGroup(UUID uuid, String group) { + Objects.requireNonNull(uuid); + Objects.requireNonNull(group); + + permission.playerRemoveGroup(null, Bukkit.getOfflinePlayer(uuid), group); + } +} diff --git a/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java b/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java index 7db942a..57d0e24 100644 --- a/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java +++ b/src/main/java/sh/okx/rankup/placeholders/RankupExpansion.java @@ -54,6 +54,12 @@ public class RankupExpansion extends PlaceholderExpansion { amount = amount - plugin.getEconomy().getBalance(player); } return plugin.formatMoney(Math.max(0, amount)); + } else if (params.startsWith("status_")) { + if (rankups.isLast(player) || rank.isIn(player)) { + return getPlaceholder("status-complete"); + } else { + return getPlaceholder("status-incomplete"); + } } switch (params) { diff --git a/src/main/java/sh/okx/rankup/requirements/requirement/WorldRequirement.java b/src/main/java/sh/okx/rankup/requirements/requirement/WorldRequirement.java index db82229..8414347 100644 --- a/src/main/java/sh/okx/rankup/requirements/requirement/WorldRequirement.java +++ b/src/main/java/sh/okx/rankup/requirements/requirement/WorldRequirement.java @@ -22,6 +22,11 @@ public class WorldRequirement extends Requirement { return false; } + @Override + public double getTotal(Player player) { + return 1; + } + @Override public Requirement clone() { return new WorldRequirement(this); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 6534516..fadf4d8 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -84,6 +84,9 @@ placeholders: no-prestige: "None" # used in the next_rank and next_prestige placeholders when a player is at the highest rank or prestige highest-rank: "None" + # used in the %rankup_status_[rank]% placeholders + status-complete: "Complete" + status-incomplete: "Incomplete" # what to shorten money by. # ie 1000 -> 1k diff --git a/src/main/resources/locale/en.yml b/src/main/resources/locale/en.yml index cb6c440..51e7586 100644 --- a/src/main/resources/locale/en.yml +++ b/src/main/resources/locale/en.yml @@ -16,6 +16,7 @@ rankup: must-prestige: "&cYou must prestige to /rankup further!" gui: + rows: 1 title: "Rankup to {RANK}" rankup: material: EMERALD_BLOCK