3.11 update
This commit is contained in:
+4
-1
@@ -35,8 +35,11 @@ dependencies {
|
|||||||
implementation('com.github.MilkBowl:VaultAPI:1.7') {
|
implementation('com.github.MilkBowl:VaultAPI:1.7') {
|
||||||
exclude group: 'org.bukkit'
|
exclude group: 'org.bukkit'
|
||||||
}
|
}
|
||||||
implementation 'me.clip:placeholderapi:2.10.6'
|
implementation ('me.clip:placeholderapi:2.10.9') {
|
||||||
|
exclude group: 'org.bstats'
|
||||||
|
}
|
||||||
implementation 'com.github.pyvesb:advanced-achievements:6.7.2'
|
implementation 'com.github.pyvesb:advanced-achievements:6.7.2'
|
||||||
|
implementation 'com.github.astei:Superbvote:700fca43659b438cb9bb36c218a7646d2f2ef315'
|
||||||
implementation('com.github.mcMMO-Dev:mcMMO:601297') {
|
implementation('com.github.mcMMO-Dev:mcMMO:601297') {
|
||||||
exclude group: 'com.sk89q.worldguard'
|
exclude group: 'com.sk89q.worldguard'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,8 +3,11 @@ package sh.okx.rankup;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import sh.okx.rankup.events.PlayerPrestigeEvent;
|
||||||
|
import sh.okx.rankup.events.PlayerRankupEvent;
|
||||||
import sh.okx.rankup.hook.GroupProvider;
|
import sh.okx.rankup.hook.GroupProvider;
|
||||||
import sh.okx.rankup.messages.Message;
|
import sh.okx.rankup.messages.Message;
|
||||||
import sh.okx.rankup.messages.Variable;
|
import sh.okx.rankup.messages.Variable;
|
||||||
@@ -40,7 +43,9 @@ public class RankupHelper {
|
|||||||
}
|
}
|
||||||
permissions.addGroup(player.getUniqueId(), rank.getNext().getRank().getRank());
|
permissions.addGroup(player.getUniqueId(), rank.getNext().getRank().getRank());
|
||||||
|
|
||||||
rank.getRank().runCommands(player);
|
rank.getRank().runCommands(player, rank.getNext().getRank());
|
||||||
|
|
||||||
|
Bukkit.getPluginManager().callEvent(new PlayerRankupEvent(plugin, player, rank));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendRankupMessages(Player player, RankElement<Rank> rank) {
|
public void sendRankupMessages(Player player, RankElement<Rank> rank) {
|
||||||
@@ -65,7 +70,9 @@ public class RankupHelper {
|
|||||||
}
|
}
|
||||||
permissions.addGroup(player.getUniqueId(), prestige.getNext().getRank().getRank());
|
permissions.addGroup(player.getUniqueId(), prestige.getNext().getRank().getRank());
|
||||||
|
|
||||||
rank.runCommands(player);
|
rank.runCommands(player, prestige.getNext().getRank());
|
||||||
|
|
||||||
|
Bukkit.getPluginManager().callEvent(new PlayerPrestigeEvent(plugin, player, prestige));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendPrestigeMessages(Player player, RankElement<Prestige> prestige) {
|
public void sendPrestigeMessages(Player player, RankElement<Prestige> prestige) {
|
||||||
@@ -95,7 +102,7 @@ public class RankupHelper {
|
|||||||
plugin
|
plugin
|
||||||
.getMessage(rank, secondsLeft > 1 ? Message.COOLDOWN_PLURAL : Message.COOLDOWN_SINGULAR)
|
.getMessage(rank, secondsLeft > 1 ? Message.COOLDOWN_PLURAL : Message.COOLDOWN_SINGULAR)
|
||||||
.failIfEmpty()
|
.failIfEmpty()
|
||||||
.replaceRanks(player, rank.getRank())
|
.replaceRanks(player, rank)
|
||||||
.replaceFromTo(rank)
|
.replaceFromTo(rank)
|
||||||
.replace(Variable.SECONDS, cooldownSeconds)
|
.replace(Variable.SECONDS, cooldownSeconds)
|
||||||
.replace(Variable.SECONDS_LEFT, secondsLeft)
|
.replace(Variable.SECONDS_LEFT, secondsLeft)
|
||||||
@@ -153,7 +160,7 @@ public class RankupHelper {
|
|||||||
Prestiges prestiges = plugin.getPrestiges();
|
Prestiges prestiges = plugin.getPrestiges();
|
||||||
plugin.getMessage(prestiges == null || !prestiges.getByPlayer(player).hasNext() ? Message.NO_RANKUP : Message.MUST_PRESTIGE)
|
plugin.getMessage(prestiges == null || !prestiges.getByPlayer(player).hasNext() ? Message.NO_RANKUP : Message.MUST_PRESTIGE)
|
||||||
.failIf(!message)
|
.failIf(!message)
|
||||||
.replaceRanks(player, rankups.getTree().last().getRank().getRank())
|
.replaceRanks(player, rankups.getTree().last().getRank())
|
||||||
.send(player);
|
.send(player);
|
||||||
return false;
|
return false;
|
||||||
} else if (!rank.hasRequirements(player)) { // check if they can afford it
|
} else if (!rank.hasRequirements(player)) { // check if they can afford it
|
||||||
@@ -200,7 +207,7 @@ public class RankupHelper {
|
|||||||
} else if (!prestigeElement.hasNext()) { // check if they are at the highest rank
|
} else if (!prestigeElement.hasNext()) { // check if they are at the highest rank
|
||||||
plugin.getMessage(prestigeElement.getRank(), Message.PRESTIGE_NO_PRESTIGE)
|
plugin.getMessage(prestigeElement.getRank(), Message.PRESTIGE_NO_PRESTIGE)
|
||||||
.failIf(!message)
|
.failIf(!message)
|
||||||
.replaceRanks(player, prestigeElement.getRank().getRank())
|
.replaceRanks(player, prestigeElement.getRank())
|
||||||
.replaceFromTo(prestigeElement.getRank())
|
.replaceFromTo(prestigeElement.getRank())
|
||||||
.send(player);
|
.send(player);
|
||||||
return false;
|
return false;
|
||||||
@@ -208,7 +215,7 @@ public class RankupHelper {
|
|||||||
plugin.replaceMoneyRequirements(
|
plugin.replaceMoneyRequirements(
|
||||||
plugin.getMessage(prestigeElement.getRank(), Message.PRESTIGE_REQUIREMENTS_NOT_MET)
|
plugin.getMessage(prestigeElement.getRank(), Message.PRESTIGE_REQUIREMENTS_NOT_MET)
|
||||||
.failIf(!message)
|
.failIf(!message)
|
||||||
.replaceRanks(player, prestigeElement.getRank(), prestigeElement.getNext().getRank().getRank()), player, prestigeElement.getRank())
|
.replaceRanks(player, prestigeElement.getRank(), prestigeElement.getNext().getRank()), player, prestigeElement.getRank())
|
||||||
.replaceFromTo(prestigeElement.getRank())
|
.replaceFromTo(prestigeElement.getRank())
|
||||||
.send(player);
|
.send(player);
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import sh.okx.rankup.commands.RankupCommand;
|
|||||||
import sh.okx.rankup.economy.Economy;
|
import sh.okx.rankup.economy.Economy;
|
||||||
import sh.okx.rankup.economy.EconomyProvider;
|
import sh.okx.rankup.economy.EconomyProvider;
|
||||||
import sh.okx.rankup.economy.VaultEconomyProvider;
|
import sh.okx.rankup.economy.VaultEconomyProvider;
|
||||||
|
import sh.okx.rankup.events.RankupRegisterEvent;
|
||||||
import sh.okx.rankup.gui.Gui;
|
import sh.okx.rankup.gui.Gui;
|
||||||
import sh.okx.rankup.gui.GuiListener;
|
import sh.okx.rankup.gui.GuiListener;
|
||||||
import sh.okx.rankup.hook.GroupProvider;
|
import sh.okx.rankup.hook.GroupProvider;
|
||||||
@@ -70,6 +71,7 @@ import sh.okx.rankup.requirements.requirement.advancedachievements.AdvancedAchie
|
|||||||
import sh.okx.rankup.requirements.requirement.advancedachievements.AdvancedAchievementsTotalRequirement;
|
import sh.okx.rankup.requirements.requirement.advancedachievements.AdvancedAchievementsTotalRequirement;
|
||||||
import sh.okx.rankup.requirements.requirement.mcmmo.McMMOPowerLevelRequirement;
|
import sh.okx.rankup.requirements.requirement.mcmmo.McMMOPowerLevelRequirement;
|
||||||
import sh.okx.rankup.requirements.requirement.mcmmo.McMMOSkillRequirement;
|
import sh.okx.rankup.requirements.requirement.mcmmo.McMMOSkillRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.superbvote.SuperbVoteVotesRequirement;
|
||||||
import sh.okx.rankup.requirements.requirement.tokenmanager.TokensDeductibleRequirement;
|
import sh.okx.rankup.requirements.requirement.tokenmanager.TokensDeductibleRequirement;
|
||||||
import sh.okx.rankup.requirements.requirement.tokenmanager.TokensRequirement;
|
import sh.okx.rankup.requirements.requirement.tokenmanager.TokensRequirement;
|
||||||
import sh.okx.rankup.requirements.requirement.towny.TownyKingNumberResidentsRequirement;
|
import sh.okx.rankup.requirements.requirement.towny.TownyKingNumberResidentsRequirement;
|
||||||
@@ -406,6 +408,9 @@ public class RankupPlugin extends JavaPlugin {
|
|||||||
new TokensRequirement(this, "tokenmanager-tokensh"),
|
new TokensRequirement(this, "tokenmanager-tokensh"),
|
||||||
new TokensDeductibleRequirement(this, "tokenmanager-tokens"));
|
new TokensDeductibleRequirement(this, "tokenmanager-tokens"));
|
||||||
}
|
}
|
||||||
|
if (Bukkit.getPluginManager().isPluginEnabled("SuperbVotes")) {
|
||||||
|
requirements.addRequirements(new SuperbVoteVotesRequirement(this));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
private void setupEconomy() {
|
private void setupEconomy() {
|
||||||
economy = economyProvider.getEconomy();
|
economy = economyProvider.getEconomy();
|
||||||
@@ -521,7 +526,7 @@ public class RankupPlugin extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return replaceMoneyRequirements(getMessage(oldRank, message)
|
return replaceMoneyRequirements(getMessage(oldRank, message)
|
||||||
.replaceRanks(player, rankName.getRank())
|
.replaceRanks(player, rankName)
|
||||||
.replace(Variable.OLD_RANK, oldRankName), player, oldRank)
|
.replace(Variable.OLD_RANK, oldRankName), player, oldRank)
|
||||||
.replaceFromTo(oldRank);
|
.replaceFromTo(oldRank);
|
||||||
}
|
}
|
||||||
@@ -535,7 +540,7 @@ public class RankupPlugin extends JavaPlugin {
|
|||||||
} else {
|
} else {
|
||||||
builder = getMessage(rank, type)
|
builder = getMessage(rank, type)
|
||||||
.failIfEmpty()
|
.failIfEmpty()
|
||||||
.replaceRanks(sender, rank.getRank())
|
.replaceRanks(sender, rank)
|
||||||
.replaceFromTo(rank);
|
.replaceFromTo(rank);
|
||||||
}
|
}
|
||||||
builder.send(sender);
|
builder.send(sender);
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
package sh.okx.rankup.commands;
|
package sh.okx.rankup.commands;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
@@ -18,8 +23,6 @@ import sh.okx.rankup.ranks.RankElement;
|
|||||||
import sh.okx.rankup.ranks.Rankups;
|
import sh.okx.rankup.ranks.Rankups;
|
||||||
import sh.okx.rankup.util.UpdateNotifier;
|
import sh.okx.rankup.util.UpdateNotifier;
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
public class InfoCommand implements TabExecutor {
|
public class InfoCommand implements TabExecutor {
|
||||||
private final RankupPlugin plugin;
|
private final RankupPlugin plugin;
|
||||||
|
|
||||||
@@ -130,7 +133,7 @@ public class InfoCommand implements TabExecutor {
|
|||||||
|
|
||||||
if (plugin.getRankups().getFirst().equals(currentRank)) {
|
if (plugin.getRankups().getFirst().equals(currentRank)) {
|
||||||
sender.sendMessage(ChatColor.YELLOW + "That player is in the first rank and cannot be ranked down.");
|
sender.sendMessage(ChatColor.YELLOW + "That player is in the first rank and cannot be ranked down.");
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
RankElement<Rank> prevRankElement = plugin.getRankups().getTree().getFirst();
|
RankElement<Rank> prevRankElement = plugin.getRankups().getTree().getFirst();
|
||||||
@@ -140,6 +143,7 @@ public class InfoCommand implements TabExecutor {
|
|||||||
|
|
||||||
if (!prevRankElement.hasNext()) {
|
if (!prevRankElement.hasNext()) {
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Could not match previous rank.");
|
sender.sendMessage(ChatColor.YELLOW + "Could not match previous rank.");
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
Rank prevRank = prevRankElement.getRank();
|
Rank prevRank = prevRankElement.getRank();
|
||||||
|
|
||||||
@@ -214,6 +218,7 @@ public class InfoCommand implements TabExecutor {
|
|||||||
ChatColor.GREEN + "/" + label + " forceprestige <player> " + ChatColor.YELLOW
|
ChatColor.GREEN + "/" + label + " forceprestige <player> " + ChatColor.YELLOW
|
||||||
+ "Force a player to prestige, bypassing requirements.");
|
+ "Force a player to prestige, bypassing requirements.");
|
||||||
}
|
}
|
||||||
|
sender.sendMessage(ChatColor.GREEN + "/" + label + " rankdown <player> " + ChatColor.YELLOW + "Force a player to move down one rank.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sender.hasPermission("rankup.checkversion")) {
|
if (sender.hasPermission("rankup.checkversion")) {
|
||||||
@@ -239,7 +244,7 @@ public class InfoCommand implements TabExecutor {
|
|||||||
} else if (args.length == 2) {
|
} else if (args.length == 2) {
|
||||||
if (args[0].equalsIgnoreCase("forcerankup") && sender.hasPermission("rankup.force")) {
|
if (args[0].equalsIgnoreCase("forcerankup") && sender.hasPermission("rankup.force")) {
|
||||||
return StringUtil.copyPartialMatches(args[1], players(), new ArrayList<>());
|
return StringUtil.copyPartialMatches(args[1], players(), new ArrayList<>());
|
||||||
} else if (args[0].equalsIgnoreCase("forceprestige") && sender.hasPermission("rankup.force")) {
|
} else if (args[0].equalsIgnoreCase("forceprestige") && sender.hasPermission("rankup.force") && plugin.getPrestiges() != null) {
|
||||||
return StringUtil.copyPartialMatches(args[1], players(), new ArrayList<>());
|
return StringUtil.copyPartialMatches(args[1], players(), new ArrayList<>());
|
||||||
} else if (args[0].equalsIgnoreCase("rankdown") && sender.hasPermission("rankup.force")) {
|
} else if (args[0].equalsIgnoreCase("rankdown") && sender.hasPermission("rankup.force")) {
|
||||||
return StringUtil.copyPartialMatches(args[1], players(), new ArrayList<>());
|
return StringUtil.copyPartialMatches(args[1], players(), new ArrayList<>());
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import sh.okx.rankup.gui.Gui;
|
|||||||
import sh.okx.rankup.messages.Message;
|
import sh.okx.rankup.messages.Message;
|
||||||
import sh.okx.rankup.prestige.Prestige;
|
import sh.okx.rankup.prestige.Prestige;
|
||||||
import sh.okx.rankup.prestige.Prestiges;
|
import sh.okx.rankup.prestige.Prestiges;
|
||||||
|
import sh.okx.rankup.ranks.Rank;
|
||||||
import sh.okx.rankup.ranks.RankElement;
|
import sh.okx.rankup.ranks.RankElement;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -55,7 +56,7 @@ public class PrestigeCommand implements CommandExecutor {
|
|||||||
case "text":
|
case "text":
|
||||||
confirming.put(player, System.currentTimeMillis());
|
confirming.put(player, System.currentTimeMillis());
|
||||||
Prestige next = rankElement.getNext().getRank();
|
Prestige next = rankElement.getNext().getRank();
|
||||||
String nextRank = next == null ? prestiges.getTree().last().getRank().getRank() : next.getRank();
|
Rank nextRank = next == null ? prestiges.getTree().last().getRank() : next;
|
||||||
|
|
||||||
plugin.replaceMoneyRequirements(plugin.getMessage(prestige, Message.PRESTIGE_CONFIRMATION)
|
plugin.replaceMoneyRequirements(plugin.getMessage(prestige, Message.PRESTIGE_CONFIRMATION)
|
||||||
.replaceRanks(player, prestige, nextRank), player, prestige)
|
.replaceRanks(player, prestige, nextRank), player, prestige)
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package sh.okx.rankup.events;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
import org.bukkit.event.player.PlayerEvent;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import sh.okx.rankup.RankupPlugin;
|
||||||
|
import sh.okx.rankup.prestige.Prestige;
|
||||||
|
import sh.okx.rankup.ranks.RankElement;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when a player ranks up from one prestige to another.
|
||||||
|
*/
|
||||||
|
public class PlayerPrestigeEvent extends PlayerEvent {
|
||||||
|
private static final HandlerList handlers = new HandlerList();
|
||||||
|
@Getter
|
||||||
|
private final RankupPlugin plugin;
|
||||||
|
/**
|
||||||
|
* The prestige someone is current at. Use <code>RankElement#getNext()</code> to get the prestige
|
||||||
|
* a player is ranking up to.
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
private final RankElement<Prestige> prestige;
|
||||||
|
|
||||||
|
public PlayerPrestigeEvent(RankupPlugin plugin, @NotNull Player who, RankElement<Prestige> prestige) {
|
||||||
|
super(who);
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.prestige = prestige;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HandlerList getHandlers() {
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package sh.okx.rankup.events;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
import org.bukkit.event.player.PlayerEvent;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import sh.okx.rankup.RankupPlugin;
|
||||||
|
import sh.okx.rankup.ranks.Rank;
|
||||||
|
import sh.okx.rankup.ranks.RankElement;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when a player ranks up from one rank to another.
|
||||||
|
*/
|
||||||
|
public class PlayerRankupEvent extends PlayerEvent {
|
||||||
|
private static final HandlerList handlers = new HandlerList();
|
||||||
|
@Getter
|
||||||
|
private final RankupPlugin plugin;
|
||||||
|
/**
|
||||||
|
* The rank someone is current at. Use <code>RankElement#getNext()</code> to get the rank
|
||||||
|
* a player is ranking up to.
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
private final RankElement<Rank> rank;
|
||||||
|
|
||||||
|
public PlayerRankupEvent(RankupPlugin plugin, @NotNull Player who, RankElement<Rank> rank) {
|
||||||
|
super(who);
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.rank = rank;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HandlerList getHandlers() {
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
}
|
||||||
+39
-38
@@ -1,38 +1,39 @@
|
|||||||
package sh.okx.rankup;
|
package sh.okx.rankup.events;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
import sh.okx.rankup.requirements.Requirement;
|
import sh.okx.rankup.RankupPlugin;
|
||||||
import sh.okx.rankup.requirements.RequirementRegistry;
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
|
import sh.okx.rankup.requirements.RequirementRegistry;
|
||||||
/**
|
|
||||||
* Called immediately before rankups and prestiges are registered,
|
/**
|
||||||
* and immediately after the built-in requirements are registered.
|
* Called immediately before rankups and prestiges are registered,
|
||||||
* This is used to register custom requirements.
|
* and immediately after the built-in requirements are registered.
|
||||||
* This is called when the plugin is enabled, and when it is reloaded from a command.
|
* 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 {
|
@RequiredArgsConstructor
|
||||||
private static final HandlerList handlers = new HandlerList();
|
public class RankupRegisterEvent extends Event {
|
||||||
@Getter
|
private static final HandlerList handlers = new HandlerList();
|
||||||
private final RankupPlugin plugin;
|
@Getter
|
||||||
|
private final RankupPlugin plugin;
|
||||||
public static HandlerList getHandlerList() {
|
|
||||||
return handlers;
|
public static HandlerList getHandlerList() {
|
||||||
}
|
return handlers;
|
||||||
|
}
|
||||||
public RequirementRegistry getRequirementRegistry() {
|
|
||||||
return plugin.getRequirements();
|
public RequirementRegistry getRequirementRegistry() {
|
||||||
}
|
return plugin.getRequirements();
|
||||||
|
}
|
||||||
public void addRequirement(Requirement requirement) {
|
|
||||||
plugin.getRequirements().addRequirement(requirement);
|
public void addRequirement(Requirement requirement, Requirement... requirements) {
|
||||||
}
|
plugin.getRequirements().addRequirements(requirement, requirements);
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public HandlerList getHandlers() {
|
@Override
|
||||||
return handlers;
|
public HandlerList getHandlers() {
|
||||||
}
|
return handlers;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
@@ -21,6 +21,7 @@ import sh.okx.rankup.messages.MessageBuilder;
|
|||||||
import sh.okx.rankup.prestige.Prestige;
|
import sh.okx.rankup.prestige.Prestige;
|
||||||
import sh.okx.rankup.ranks.Rank;
|
import sh.okx.rankup.ranks.Rank;
|
||||||
import sh.okx.rankup.ranks.RankElement;
|
import sh.okx.rankup.ranks.RankElement;
|
||||||
|
import sh.okx.rankup.util.Colour;
|
||||||
import sh.okx.rankup.util.ItemUtil;
|
import sh.okx.rankup.util.ItemUtil;
|
||||||
|
|
||||||
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
|
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
@@ -62,10 +63,10 @@ public class Gui implements InventoryHolder {
|
|||||||
gui.cancel = cancel;
|
gui.cancel = cancel;
|
||||||
|
|
||||||
Inventory inventory = Bukkit.createInventory(gui, items.length,
|
Inventory inventory = Bukkit.createInventory(gui, items.length,
|
||||||
ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', plugin.replaceMoneyRequirements(
|
Colour.translate(plugin.replaceMoneyRequirements(
|
||||||
plugin.getMessage(oldRank, gui.prestige ? Message.PRESTIGE_TITLE : Message.TITLE)
|
plugin.getMessage(oldRank, gui.prestige ? Message.PRESTIGE_TITLE : Message.TITLE)
|
||||||
.replaceRanks(player, oldRank, rank)
|
.replaceRanks(player, oldRank, rank)
|
||||||
.replaceFromTo(oldRank), player, oldRank).toString())));
|
.replaceFromTo(oldRank), player, oldRank).toString()));
|
||||||
inventory.setContents(items);
|
inventory.setContents(items);
|
||||||
gui.inventory = inventory;
|
gui.inventory = inventory;
|
||||||
return gui;
|
return gui;
|
||||||
@@ -75,7 +76,8 @@ public class Gui implements InventoryHolder {
|
|||||||
if (element == null) {
|
if (element == null) {
|
||||||
return getItem(plugin, section, player, null, null);
|
return getItem(plugin, section, player, null, null);
|
||||||
} else {
|
} else {
|
||||||
return getItem(plugin, section, player, element.getRank(), element.getNext().getRank());
|
RankElement<Rank> next = element.getNext();
|
||||||
|
return getItem(plugin, section, player, element.getRank(), (next == null ? element : next).getRank());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,7 +127,7 @@ public class Gui implements InventoryHolder {
|
|||||||
if (oldRank != null && rank != null) {
|
if (oldRank != null && rank != null) {
|
||||||
builder = builder.replaceRanks(player, oldRank, rank);
|
builder = builder.replaceRanks(player, oldRank, rank);
|
||||||
}
|
}
|
||||||
return ChatColor.translateAlternateColorCodes('&', plugin.replaceMoneyRequirements(builder, player, oldRank).toString());
|
return Colour.translate(plugin.replaceMoneyRequirements(builder, player, oldRank).toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void addItem(ItemStack[] items, ConfigurationSection section, ItemStack item) {
|
private static void addItem(ItemStack[] items, ConfigurationSection section, ItemStack item) {
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public class GuiListener implements Listener {
|
|||||||
Bukkit.getScheduler().runTask(plugin, () -> {
|
Bukkit.getScheduler().runTask(plugin, () -> {
|
||||||
player.closeInventory();
|
player.closeInventory();
|
||||||
if (gui.isReturnToRanksGui()) {
|
if (gui.isReturnToRanksGui()) {
|
||||||
Bukkit.dispatchCommand(player, "ranksgui");
|
Bukkit.dispatchCommand(player, "ranks");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,141 +1,156 @@
|
|||||||
package sh.okx.rankup.messages;
|
package sh.okx.rankup.messages;
|
||||||
|
|
||||||
import me.clip.placeholderapi.PlaceholderAPI;
|
import java.util.Objects;
|
||||||
import org.bukkit.Bukkit;
|
import java.util.regex.Matcher;
|
||||||
import org.bukkit.ChatColor;
|
import java.util.regex.Pattern;
|
||||||
import org.bukkit.command.CommandSender;
|
import me.clip.placeholderapi.PlaceholderAPI;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.command.CommandSender;
|
||||||
import sh.okx.rankup.prestige.Prestige;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import sh.okx.rankup.prestige.Prestiges;
|
import org.bukkit.entity.Player;
|
||||||
import sh.okx.rankup.ranks.Rank;
|
import sh.okx.rankup.prestige.Prestige;
|
||||||
|
import sh.okx.rankup.prestige.Prestiges;
|
||||||
import java.util.Objects;
|
import sh.okx.rankup.ranks.Rank;
|
||||||
import java.util.regex.Matcher;
|
import sh.okx.rankup.util.Colour;
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
public class MessageBuilder {
|
||||||
public class MessageBuilder {
|
private String message;
|
||||||
private String message;
|
|
||||||
|
public MessageBuilder(String message) {
|
||||||
public MessageBuilder(String message) {
|
this.message = message;
|
||||||
this.message = message;
|
}
|
||||||
}
|
|
||||||
|
public static MessageBuilder of(ConfigurationSection config, Message message) {
|
||||||
public static MessageBuilder of(ConfigurationSection config, Message message) {
|
return MessageBuilder.of(config, message.getName());
|
||||||
return MessageBuilder.of(config, message.getName());
|
}
|
||||||
}
|
|
||||||
|
private static MessageBuilder of(ConfigurationSection config, String message) {
|
||||||
private static MessageBuilder of(ConfigurationSection config, String message) {
|
String string = config.getString(message);
|
||||||
String string = config.getString(message);
|
Objects.requireNonNull(string, "Configuration message '" + message + "' not found!");
|
||||||
Objects.requireNonNull(string, "Configuration message '" + message + "' not found!");
|
return new MessageBuilder(Colour.translate(string));
|
||||||
return new MessageBuilder(ChatColor.translateAlternateColorCodes('&', string));
|
}
|
||||||
}
|
|
||||||
|
public MessageBuilder replace(Variable variable, Object value) {
|
||||||
public MessageBuilder replace(Variable variable, Object value) {
|
return replace(variable.name(), value);
|
||||||
return replace(variable.name(), value);
|
}
|
||||||
}
|
|
||||||
|
public MessageBuilder replace(String name, Object value) {
|
||||||
public MessageBuilder replace(String name, Object value) {
|
if (value == null) {
|
||||||
Pattern pattern = Pattern.compile("\\{" + name + "}", Pattern.CASE_INSENSITIVE);
|
return this;
|
||||||
Matcher matcher = pattern.matcher(message);
|
}
|
||||||
this.message = matcher.replaceAll(String.valueOf(value));
|
Pattern pattern = Pattern.compile("\\{" + name + "}", Pattern.CASE_INSENSITIVE);
|
||||||
return this;
|
Matcher matcher = pattern.matcher(message);
|
||||||
}
|
this.message = matcher.replaceAll(String.valueOf(value));
|
||||||
|
return this;
|
||||||
public MessageBuilder replaceFirstPrestige(Rank rank, Prestiges prestiges, String with) {
|
}
|
||||||
if (prestiges != null && prestiges.getFirst().equals(rank)) {
|
|
||||||
replace(Variable.OLD_RANK, with);
|
public MessageBuilder replaceFirstPrestige(Rank rank, Prestiges prestiges, String with) {
|
||||||
}
|
if (prestiges != null && prestiges.getFirst().equals(rank)) {
|
||||||
return this;
|
replace(Variable.OLD_RANK, with);
|
||||||
}
|
}
|
||||||
|
return this;
|
||||||
public MessageBuilder replaceRanks(CommandSender player, String rankName) {
|
}
|
||||||
replace(Variable.PLAYER, player.getName());
|
|
||||||
replaceRanks(rankName);
|
@Deprecated
|
||||||
return this;
|
public MessageBuilder replaceRanks(CommandSender player, String rankName) {
|
||||||
}
|
replace(Variable.PLAYER, player.getName());
|
||||||
|
replaceRanks(rankName);
|
||||||
public MessageBuilder replaceRanks(CommandSender player, Rank oldRank, String rankName) {
|
return this;
|
||||||
replace(Variable.PLAYER, player.getName());
|
}
|
||||||
replaceRanks(oldRank, rankName);
|
|
||||||
return this;
|
@Deprecated
|
||||||
}
|
public MessageBuilder replaceRanks(CommandSender player, Rank oldRank, String rankName) {
|
||||||
|
replace(Variable.PLAYER, player.getName());
|
||||||
public MessageBuilder replaceRanks(CommandSender player, Rank oldRank, Rank rank) {
|
replaceRanks(oldRank, rankName);
|
||||||
replace(Variable.PLAYER, player.getName());
|
return this;
|
||||||
replaceRanks(oldRank, rank);
|
}
|
||||||
return this;
|
|
||||||
}
|
public MessageBuilder replaceRanks(CommandSender player, Rank rank) {
|
||||||
|
replace(Variable.PLAYER, player.getName());
|
||||||
public MessageBuilder replaceRanks(String rankName) {
|
replaceRanks(rank);
|
||||||
replace(Variable.RANK, rankName);
|
return this;
|
||||||
return this;
|
}
|
||||||
}
|
|
||||||
|
public MessageBuilder replaceRanks(CommandSender player, Rank oldRank, Rank rank) {
|
||||||
public MessageBuilder replaceRanks(Rank rank) {
|
replace(Variable.PLAYER, player.getName());
|
||||||
replace(Variable.RANK, rank.getRank());
|
replaceRanks(oldRank, rank);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MessageBuilder replaceRanks(Rank oldRank, String rankName) {
|
@Deprecated
|
||||||
replaceRanks(rankName);
|
public MessageBuilder replaceRanks(String rankName) {
|
||||||
replace(Variable.OLD_RANK, oldRank.getRank());
|
replace(Variable.RANK, rankName);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MessageBuilder replaceRanks(Rank oldRank, Rank rank) {
|
public MessageBuilder replaceRanks(Rank rank) {
|
||||||
replaceRanks(rank);
|
replace(Variable.RANK, rank.getRank());
|
||||||
replace(Variable.OLD_RANK, oldRank.getRank());
|
replace(Variable.RANK_NAME, rank.getDisplayName());
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MessageBuilder replaceFromTo(Rank rank) {
|
@Deprecated
|
||||||
if (rank instanceof Prestige) {
|
public MessageBuilder replaceRanks(Rank oldRank, String rankName) {
|
||||||
Prestige prestige = (Prestige) rank;
|
replaceRanks(rankName);
|
||||||
replace(Variable.FROM, prestige.getFrom());
|
replace(Variable.OLD_RANK, oldRank.getRank());
|
||||||
replace(Variable.TO, prestige.getTo());
|
replace(Variable.OLD_RANK_NAME, oldRank.getDisplayName());
|
||||||
}
|
return this;
|
||||||
return this;
|
}
|
||||||
}
|
|
||||||
|
public MessageBuilder replaceRanks(Rank oldRank, Rank rank) {
|
||||||
/**
|
replaceRanks(rank);
|
||||||
* Fails the MessageBuilder if the message is empty.
|
replace(Variable.OLD_RANK, oldRank.getRank());
|
||||||
* if this fails, all subsequent calls to that MessageBuilder will do nothing
|
replace(Variable.OLD_RANK_NAME, oldRank.getDisplayName());
|
||||||
* @return a NullMessageBuilder if the message is empty, itself otherwise
|
return this;
|
||||||
*/
|
}
|
||||||
public MessageBuilder failIfEmpty() {
|
|
||||||
return failIf(message.isEmpty());
|
public MessageBuilder replaceFromTo(Rank rank) {
|
||||||
}
|
if (rank instanceof Prestige) {
|
||||||
|
Prestige prestige = (Prestige) rank;
|
||||||
public MessageBuilder failIf(boolean value) {
|
replace(Variable.FROM, prestige.getFrom());
|
||||||
if (value) {
|
replace(Variable.TO, prestige.getTo());
|
||||||
return new NullMessageBuilder();
|
}
|
||||||
} else {
|
return this;
|
||||||
return this;
|
}
|
||||||
}
|
|
||||||
}
|
/**
|
||||||
|
* Fails the MessageBuilder if the message is empty.
|
||||||
public void send(CommandSender sender) {
|
* if this fails, all subsequent calls to that MessageBuilder will do nothing
|
||||||
String msg = message;
|
* @return a NullMessageBuilder if the message is empty, itself otherwise
|
||||||
if (sender instanceof Player && Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
*/
|
||||||
msg = PlaceholderAPI.setPlaceholders((Player) sender, msg);
|
public MessageBuilder failIfEmpty() {
|
||||||
}
|
return failIf(message.isEmpty());
|
||||||
sender.sendMessage(msg);
|
}
|
||||||
}
|
|
||||||
|
public MessageBuilder failIf(boolean value) {
|
||||||
/**
|
if (value) {
|
||||||
* Sends the message to all players
|
return new NullMessageBuilder();
|
||||||
* ie, calls MessageBuilder#send(Player) for all players online, and sends the message in the console.
|
} else {
|
||||||
*/
|
return this;
|
||||||
public void broadcast() {
|
}
|
||||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
}
|
||||||
send(player);
|
|
||||||
}
|
public void send(CommandSender sender) {
|
||||||
send(Bukkit.getConsoleSender());
|
String msg = message;
|
||||||
}
|
if (sender instanceof Player && Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
||||||
|
msg = PlaceholderAPI.setPlaceholders((Player) sender, msg);
|
||||||
@Override
|
}
|
||||||
public String toString() {
|
sender.sendMessage(msg);
|
||||||
return message;
|
}
|
||||||
}
|
|
||||||
}
|
/**
|
||||||
|
* Sends the message to all players
|
||||||
|
* ie, calls MessageBuilder#send(Player) for all players online, and sends the message in the console.
|
||||||
|
*/
|
||||||
|
public void broadcast() {
|
||||||
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||||
|
send(player);
|
||||||
|
}
|
||||||
|
send(Bukkit.getConsoleSender());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,7 +2,9 @@ package sh.okx.rankup.messages;
|
|||||||
|
|
||||||
public enum Variable {
|
public enum Variable {
|
||||||
PLAYER,
|
PLAYER,
|
||||||
|
OLD_RANK_NAME,
|
||||||
OLD_RANK,
|
OLD_RANK,
|
||||||
|
RANK_NAME,
|
||||||
RANK,
|
RANK,
|
||||||
FROM,
|
FROM,
|
||||||
TO,
|
TO,
|
||||||
|
|||||||
@@ -1,45 +1,41 @@
|
|||||||
package sh.okx.rankup.placeholders;
|
package sh.okx.rankup.placeholders;
|
||||||
|
|
||||||
import lombok.Getter;
|
import java.text.DecimalFormat;
|
||||||
import me.clip.placeholderapi.PlaceholderAPI;
|
import lombok.Getter;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import sh.okx.rankup.RankupPlugin;
|
import sh.okx.rankup.RankupPlugin;
|
||||||
|
|
||||||
import java.text.DecimalFormat;
|
public class Placeholders {
|
||||||
|
private final RankupPlugin plugin;
|
||||||
public class Placeholders {
|
@Getter
|
||||||
private final RankupPlugin plugin;
|
private final DecimalFormat moneyFormat;
|
||||||
@Getter
|
@Getter
|
||||||
private final DecimalFormat moneyFormat;
|
private final DecimalFormat percentFormat;
|
||||||
@Getter
|
@Getter
|
||||||
private final DecimalFormat percentFormat;
|
private final DecimalFormat simpleFormat;
|
||||||
@Getter
|
@Getter
|
||||||
private final DecimalFormat simpleFormat;
|
private RankupExpansion expansion;
|
||||||
@Getter
|
|
||||||
private RankupExpansion expansion;
|
private RankupPlaceholderExpansion papiExpansion;
|
||||||
private boolean registered;
|
|
||||||
|
public Placeholders(RankupPlugin plugin) {
|
||||||
public Placeholders(RankupPlugin plugin) {
|
this.plugin = plugin;
|
||||||
this.plugin = plugin;
|
this.moneyFormat = new DecimalFormat(plugin.getConfig().getString("placeholders.money-format"));
|
||||||
this.moneyFormat = new DecimalFormat(plugin.getConfig().getString("placeholders.money-format"));
|
this.percentFormat = new DecimalFormat(plugin.getConfig().getString("placeholders.percent-format"));
|
||||||
this.percentFormat = new DecimalFormat(plugin.getConfig().getString("placeholders.percent-format"));
|
this.simpleFormat = new DecimalFormat(plugin.getConfig().getString("placeholders.simple-format"));
|
||||||
this.simpleFormat = new DecimalFormat(plugin.getConfig().getString("placeholders.simple-format"));
|
}
|
||||||
}
|
|
||||||
|
public void register() {
|
||||||
public void register() {
|
expansion = new RankupExpansion(plugin, this);
|
||||||
expansion = new RankupExpansion(plugin, this);
|
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
||||||
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
papiExpansion = new RankupPlaceholderExpansion(plugin, expansion);
|
||||||
RankupPlaceholderExpansion placeholderExpansion = new RankupPlaceholderExpansion(plugin, expansion);
|
papiExpansion.register();
|
||||||
placeholderExpansion.register();
|
}
|
||||||
registered = true;
|
}
|
||||||
} else {
|
|
||||||
registered = false;
|
public void unregister() {
|
||||||
}
|
if (papiExpansion != null) {
|
||||||
}
|
papiExpansion.unregister();
|
||||||
|
}
|
||||||
public void unregister() {
|
}
|
||||||
if (registered) {
|
}
|
||||||
PlaceholderAPI.unregisterPlaceholderHook("rankup");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,43 +1,36 @@
|
|||||||
package sh.okx.rankup.prestige;
|
package sh.okx.rankup.prestige;
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import java.util.Collections;
|
||||||
import sh.okx.rankup.RankupPlugin;
|
import org.bukkit.entity.Player;
|
||||||
import sh.okx.rankup.ranks.requirements.LastRankRequirements;
|
import sh.okx.rankup.RankupPlugin;
|
||||||
import sh.okx.rankup.requirements.NullRequirement;
|
import sh.okx.rankup.ranks.Rank;
|
||||||
import sh.okx.rankup.requirements.Requirement;
|
import sh.okx.rankup.ranks.requirements.LastRankRequirements;
|
||||||
|
|
||||||
import java.util.Collections;
|
public class LastPrestige extends Prestige {
|
||||||
|
public LastPrestige(RankupPlugin plugin, String name) {
|
||||||
public class LastPrestige extends Prestige {
|
super(null, plugin, null, name, new LastRankRequirements(), Collections.emptyList(), null, null);
|
||||||
public LastPrestige(RankupPlugin plugin, String name) {
|
}
|
||||||
super(null, plugin, null, name, new LastRankRequirements(), Collections.emptyList(), null, null);
|
|
||||||
}
|
@Override
|
||||||
|
public boolean isIn(Player player) {
|
||||||
@Override
|
return plugin.getPermissions().inGroup(player.getUniqueId(), rank);
|
||||||
public boolean isIn(Player player) {
|
}
|
||||||
return plugin.getPermissions().inGroup(player.getUniqueId(), rank);
|
|
||||||
}
|
@Override
|
||||||
|
public boolean hasRequirements(Player player) {
|
||||||
@Override
|
return false;
|
||||||
public boolean hasRequirements(Player player) {
|
}
|
||||||
return false;
|
|
||||||
}
|
@Override
|
||||||
|
public void applyRequirements(Player player) {
|
||||||
@Override
|
}
|
||||||
public Requirement getRequirement(Player player, String name) {
|
|
||||||
return new NullRequirement();
|
@Override
|
||||||
}
|
public void runCommands(Player player, Rank next) {
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public void applyRequirements(Player player) {
|
@Override
|
||||||
}
|
public boolean isEligible(Player player) {
|
||||||
|
return true;
|
||||||
@Override
|
}
|
||||||
public void runCommands(Player player) {
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isEligible(Player player) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,74 +1,74 @@
|
|||||||
package sh.okx.rankup.prestige;
|
package sh.okx.rankup.prestige;
|
||||||
|
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import sh.okx.rankup.RankupPlugin;
|
import sh.okx.rankup.RankupPlugin;
|
||||||
import sh.okx.rankup.ranks.Rank;
|
import sh.okx.rankup.ranks.Rank;
|
||||||
import sh.okx.rankup.ranks.requirements.ListRankRequirements;
|
import sh.okx.rankup.ranks.requirements.ListRankRequirements;
|
||||||
import sh.okx.rankup.ranks.requirements.RankRequirements;
|
import sh.okx.rankup.ranks.requirements.RankRequirements;
|
||||||
import sh.okx.rankup.requirements.Requirement;
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@ToString(callSuper = true)
|
@ToString(callSuper = true)
|
||||||
public class Prestige extends Rank {
|
public class Prestige extends Rank {
|
||||||
@Getter
|
@Getter
|
||||||
private final String from;
|
private final String from;
|
||||||
@Getter
|
@Getter
|
||||||
private final String to;
|
private final String to;
|
||||||
|
|
||||||
protected Prestige(ConfigurationSection section, RankupPlugin plugin, String next, String rank, RankRequirements requirements, List<String> commands, String from, String to) {
|
protected Prestige(ConfigurationSection section, RankupPlugin plugin, String next, String rank, RankRequirements requirements, List<String> commands, String from, String to) {
|
||||||
super(section, plugin, next, rank, requirements, commands);
|
super(section, plugin, next, rank, rank, requirements, commands);
|
||||||
this.from = from;
|
this.from = from;
|
||||||
this.to = to;
|
this.to = to;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Prestige deserialize(RankupPlugin plugin, ConfigurationSection section) {
|
public static Prestige deserialize(RankupPlugin plugin, ConfigurationSection section) {
|
||||||
List<String> requirementsList = section.getStringList("requirements");
|
List<String> requirementsList = section.getStringList("requirements");
|
||||||
Set<Requirement> requirements = plugin.getRequirements().getRequirements(requirementsList);
|
Set<Requirement> requirements = plugin.getRequirements().getRequirements(requirementsList);
|
||||||
|
|
||||||
return new Prestige(section, plugin,
|
return new Prestige(section, plugin,
|
||||||
section.getString("next"),
|
section.getString("next"),
|
||||||
section.getString("rank"),
|
section.getString("rank"),
|
||||||
new ListRankRequirements(requirements),
|
new ListRankRequirements(requirements),
|
||||||
section.getStringList("commands"),
|
section.getStringList("commands"),
|
||||||
section.getString("from"),
|
section.getString("from"),
|
||||||
section.getString("to"));
|
section.getString("to"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isIn(Player player) {
|
public boolean isIn(Player player) {
|
||||||
// first prestige does not have a rank
|
// first prestige does not have a rank
|
||||||
boolean inFrom = plugin.getPermissions().inGroup(player.getUniqueId(), from);
|
boolean inFrom = plugin.getPermissions().inGroup(player.getUniqueId(), from);
|
||||||
if (rank == null && inFrom) {
|
if (rank == null && inFrom) {
|
||||||
// not in any other prestiges
|
// not in any other prestiges
|
||||||
for (Prestige prestige : plugin.getPrestiges().getTree()) {
|
for (Prestige prestige : plugin.getPrestiges().getTree()) {
|
||||||
if (prestige != this && prestige.isIn(player)) {
|
if (prestige != this && prestige.isIn(player)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rank == null) {
|
if (rank == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// subsequent prestiges
|
// subsequent prestiges
|
||||||
boolean inRank = plugin.getPermissions().inGroup(player.getUniqueId(), rank);
|
boolean inRank = plugin.getPermissions().inGroup(player.getUniqueId(), rank);
|
||||||
if (inRank) {
|
if (inRank) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isEligible(Player player) {
|
public boolean isEligible(Player player) {
|
||||||
return plugin.getPermissions().inGroup(player.getUniqueId(), from);
|
return plugin.getPermissions().inGroup(player.getUniqueId(), from);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
package sh.okx.rankup.prestige;
|
package sh.okx.rankup.prestige;
|
||||||
|
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import sh.okx.rankup.ranks.RankElement;
|
import sh.okx.rankup.ranks.RankElement;
|
||||||
import sh.okx.rankup.ranks.RankList;
|
import sh.okx.rankup.ranks.RankList;
|
||||||
import sh.okx.rankup.RankupPlugin;
|
import sh.okx.rankup.RankupPlugin;
|
||||||
|
|
||||||
public class Prestiges extends RankList<Prestige> {
|
public class Prestiges extends RankList<Prestige> {
|
||||||
public Prestiges(RankupPlugin plugin, FileConfiguration config) {
|
public Prestiges(RankupPlugin plugin, FileConfiguration config) {
|
||||||
super(plugin, config, section -> Prestige.deserialize(plugin, section));
|
super(plugin, config, section -> Prestige.deserialize(plugin, section));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addLastRank(RankupPlugin plugin) {
|
protected void addLastRank(RankupPlugin plugin) {
|
||||||
RankElement<Prestige> last = getTree().last();
|
RankElement<Prestige> last = getTree().last();
|
||||||
last.setNext(new RankElement<>(new LastPrestige(plugin, last.getRank().getNext()), null));
|
last.setNext(new RankElement<>(new LastPrestige(plugin, last.getRank().getNext()), null));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,33 +1,25 @@
|
|||||||
package sh.okx.rankup.ranks;
|
package sh.okx.rankup.ranks;
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import java.util.Collections;
|
||||||
import sh.okx.rankup.RankupPlugin;
|
import org.bukkit.entity.Player;
|
||||||
import sh.okx.rankup.ranks.requirements.LastRankRequirements;
|
import sh.okx.rankup.RankupPlugin;
|
||||||
import sh.okx.rankup.requirements.NullRequirement;
|
import sh.okx.rankup.ranks.requirements.LastRankRequirements;
|
||||||
import sh.okx.rankup.requirements.Requirement;
|
|
||||||
|
public class LastRank extends Rank {
|
||||||
import java.util.Collections;
|
public LastRank(RankupPlugin plugin, String name, String displayName) {
|
||||||
|
super(null, plugin, null, name, displayName, new LastRankRequirements(), Collections.emptyList());
|
||||||
public class LastRank extends Rank {
|
}
|
||||||
public LastRank(RankupPlugin plugin, String name) {
|
|
||||||
super(null, plugin, null, name, new LastRankRequirements(), Collections.emptyList());
|
@Override
|
||||||
}
|
public boolean hasRequirements(Player player) {
|
||||||
|
return false;
|
||||||
@Override
|
}
|
||||||
public boolean hasRequirements(Player player) {
|
|
||||||
return false;
|
@Override
|
||||||
}
|
public void applyRequirements(Player player) {
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public Requirement getRequirement(Player player, String name) {
|
@Override
|
||||||
return new NullRequirement();
|
public void runCommands(Player player, Rank next) {
|
||||||
}
|
}
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public void applyRequirements(Player player) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void runCommands(Player player) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,67 +1,69 @@
|
|||||||
package sh.okx.rankup.ranks;
|
package sh.okx.rankup.ranks;
|
||||||
|
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import me.clip.placeholderapi.PlaceholderAPI;
|
import me.clip.placeholderapi.PlaceholderAPI;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import sh.okx.rankup.RankupPlugin;
|
import sh.okx.rankup.RankupPlugin;
|
||||||
import sh.okx.rankup.messages.MessageBuilder;
|
import sh.okx.rankup.messages.MessageBuilder;
|
||||||
import sh.okx.rankup.ranks.requirements.RankRequirements;
|
import sh.okx.rankup.ranks.requirements.RankRequirements;
|
||||||
import sh.okx.rankup.requirements.Requirement;
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@EqualsAndHashCode
|
@EqualsAndHashCode
|
||||||
@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
|
@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
|
||||||
public class Rank {
|
public class Rank {
|
||||||
@Getter
|
@Getter
|
||||||
protected final ConfigurationSection section;
|
protected final ConfigurationSection section;
|
||||||
protected final RankupPlugin plugin;
|
protected final RankupPlugin plugin;
|
||||||
@Getter
|
@Getter
|
||||||
protected final String next;
|
protected final String next;
|
||||||
@Getter
|
@Getter
|
||||||
protected final String rank;
|
protected final String rank;
|
||||||
@Getter
|
@Getter
|
||||||
protected final RankRequirements requirements;
|
protected final String displayName;
|
||||||
protected final List<String> commands;
|
@Getter
|
||||||
|
protected final RankRequirements requirements;
|
||||||
public boolean isIn(Player player) {
|
@Getter
|
||||||
return plugin.getPermissions().inGroup(player.getUniqueId(), rank);
|
protected final List<String> commands;
|
||||||
}
|
|
||||||
|
public boolean isIn(Player player) {
|
||||||
public boolean hasRequirements(Player player) {
|
return plugin.getPermissions().inGroup(player.getUniqueId(), rank);
|
||||||
return requirements.hasRequirements(player);
|
}
|
||||||
}
|
|
||||||
|
public boolean hasRequirements(Player player) {
|
||||||
public Requirement getRequirement(Player player, String name) {
|
return requirements.hasRequirements(player);
|
||||||
return requirements.getRequirement(player, name);
|
}
|
||||||
}
|
|
||||||
|
public Requirement getRequirement(Player player, String name) {
|
||||||
public void applyRequirements(Player player) {
|
return requirements.getRequirement(player, name);
|
||||||
requirements.applyRequirements(player);
|
}
|
||||||
}
|
|
||||||
|
public void applyRequirements(Player player) {
|
||||||
|
requirements.applyRequirements(player);
|
||||||
public void runCommands(Player player) {
|
}
|
||||||
for (String command : commands) {
|
|
||||||
String string = new MessageBuilder(command).replaceRanks(player, this, next).toString();
|
public void runCommands(Player player, Rank next) {
|
||||||
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
for (String command : commands) {
|
||||||
string = PlaceholderAPI.setPlaceholders(player, string);
|
String string = new MessageBuilder(command).replaceRanks(player, this, next).toString();
|
||||||
}
|
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
||||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), string);
|
string = PlaceholderAPI.setPlaceholders(player, string);
|
||||||
}
|
}
|
||||||
}
|
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), string);
|
||||||
|
}
|
||||||
@Override
|
}
|
||||||
public String toString() {
|
|
||||||
return "Rank{" +
|
@Override
|
||||||
"next='" + next + '\'' +
|
public String toString() {
|
||||||
", rank='" + rank + '\'' +
|
return "Rank{" +
|
||||||
", commands=" + commands +
|
"next='" + next + '\'' +
|
||||||
'}';
|
", rank='" + rank + '\'' +
|
||||||
}
|
", commands=" + commands +
|
||||||
}
|
'}';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,125 +1,129 @@
|
|||||||
package sh.okx.rankup.ranks;
|
package sh.okx.rankup.ranks;
|
||||||
|
|
||||||
import lombok.Getter;
|
import java.util.ArrayList;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import java.util.Collections;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import java.util.List;
|
||||||
import org.bukkit.entity.Player;
|
import java.util.Map;
|
||||||
import sh.okx.rankup.RankupPlugin;
|
import java.util.Objects;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.*;
|
import java.util.function.Function;
|
||||||
import java.util.function.Function;
|
import lombok.Getter;
|
||||||
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
public abstract class RankList<T extends Rank> {
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
protected RankupPlugin plugin;
|
import sh.okx.rankup.RankupPlugin;
|
||||||
@Getter
|
|
||||||
protected FileConfiguration config;
|
public abstract class RankList<T extends Rank> {
|
||||||
@Getter
|
|
||||||
private RankTree<T> tree;
|
protected RankupPlugin plugin;
|
||||||
|
@Getter
|
||||||
public RankList(RankupPlugin plugin, FileConfiguration config,
|
protected FileConfiguration config;
|
||||||
Function<ConfigurationSection, T> deserializer) {
|
@Getter
|
||||||
this.plugin = plugin;
|
private RankTree<T> tree;
|
||||||
this.config = config;
|
|
||||||
List<RankElement<T>> rankElements = new ArrayList<>();
|
public RankList(RankupPlugin plugin, FileConfiguration config,
|
||||||
for (Map.Entry<String, Object> entry : config.getValues(false).entrySet()) {
|
Function<ConfigurationSection, T> deserializer) {
|
||||||
ConfigurationSection rankSection = (ConfigurationSection) entry.getValue();
|
this.plugin = plugin;
|
||||||
validateSection(rankSection);
|
this.config = config;
|
||||||
T apply = deserializer.apply(rankSection);
|
List<RankElement<T>> rankElements = new ArrayList<>();
|
||||||
if (apply != null) {
|
for (Map.Entry<String, Object> entry : config.getValues(false).entrySet()) {
|
||||||
// find next
|
ConfigurationSection rankSection = (ConfigurationSection) entry.getValue();
|
||||||
rankElements.add(findNext(apply, rankElements));
|
validateSection(rankSection);
|
||||||
}
|
T apply = deserializer.apply(rankSection);
|
||||||
}
|
if (apply != null) {
|
||||||
|
// find next
|
||||||
for (RankElement<T> rankElement : rankElements) {
|
rankElements.add(findNext(apply, rankElements));
|
||||||
if (rankElement.isRootNode()) {
|
}
|
||||||
if (tree == null) {
|
}
|
||||||
tree = new RankTree<>(rankElement);
|
|
||||||
addLastRank(plugin);
|
for (RankElement<T> rankElement : rankElements) {
|
||||||
} else {
|
if (rankElement.isRootNode()) {
|
||||||
plugin.getLogger().severe("Multiple root rankup nodes detected (a root rankup nodes is a rankup that does not have anything that ranks up to it). This may lead to inconsistent behaviour.");
|
if (tree == null) {
|
||||||
plugin.getLogger().severe("Conflicting root node: " + rankElement.getRank() + ". Using root node: " + tree.getFirst().getRank());
|
tree = new RankTree<>(rankElement);
|
||||||
}
|
addLastRank(plugin);
|
||||||
}
|
} else {
|
||||||
}
|
plugin.getLogger().severe("Multiple root rankup nodes detected (a root rankup nodes is a rankup that does not have anything that ranks up to it). This may lead to inconsistent behaviour.");
|
||||||
}
|
plugin.getLogger().severe("Conflicting root node: " + rankElement.getRank() + ". Using root node: " + tree.getFirst().getRank());
|
||||||
|
}
|
||||||
public abstract void addLastRank(RankupPlugin plugin);
|
}
|
||||||
|
}
|
||||||
private RankElement<T> findNext(T rank, List<RankElement<T>> rankElements) {
|
}
|
||||||
Objects.requireNonNull(rank);
|
|
||||||
|
protected abstract void addLastRank(RankupPlugin plugin);
|
||||||
RankElement<T> currentElement = new RankElement<>(rank, null);
|
|
||||||
|
private RankElement<T> findNext(T rank, List<RankElement<T>> rankElements) {
|
||||||
for (RankElement<T> rankElement : rankElements) {
|
Objects.requireNonNull(rank);
|
||||||
T rank1 = rankElement.getRank();
|
|
||||||
if (rank1.getRank() != null
|
RankElement<T> currentElement = new RankElement<>(rank, null);
|
||||||
&& rank1.getRank().equalsIgnoreCase(rank.getNext())) {
|
|
||||||
// current rank element is the next rank
|
for (RankElement<T> rankElement : rankElements) {
|
||||||
currentElement.setNext(rankElement);
|
T rank1 = rankElement.getRank();
|
||||||
} else if (rank1.getNext() != null
|
if (rank1.getRank() != null
|
||||||
&& rank1.getNext().equalsIgnoreCase(rank.getRank())) {
|
&& rank1.getRank().equalsIgnoreCase(rank.getNext())) {
|
||||||
rankElement.setNext(currentElement);
|
// current rank element is the next rank
|
||||||
}
|
currentElement.setNext(rankElement);
|
||||||
}
|
} else if (rank1.getNext() != null
|
||||||
return currentElement;
|
&& rank1.getNext().equalsIgnoreCase(rank.getRank())) {
|
||||||
}
|
rankElement.setNext(currentElement);
|
||||||
|
}
|
||||||
protected void validateSection(ConfigurationSection section) {
|
}
|
||||||
String name = "'" + section.getName() + "'";
|
return currentElement;
|
||||||
/*if (section.getConfigurationSection("requirements") != null) {
|
}
|
||||||
throw new IllegalArgumentException(
|
|
||||||
"Rankup/prestige section " + name + " is using the old requirements system.\n" +
|
protected void validateSection(ConfigurationSection section) {
|
||||||
"Instead of a configuration section, it is now a list of strings.\n" +
|
String name = "'" + section.getName() + "'";
|
||||||
"For example, instead of \"requirements: money: 1000\" you should use \"requirements: - 'money 1000'\".");
|
/*if (section.getConfigurationSection("requirements") != null) {
|
||||||
}*/
|
throw new IllegalArgumentException(
|
||||||
Set<String> keys = section.getKeys(false);
|
"Rankup/prestige section " + name + " is using the old requirements system.\n" +
|
||||||
if (keys.size() == 1 && keys.iterator().next().equalsIgnoreCase("rank")) {
|
"Instead of a configuration section, it is now a list of strings.\n" +
|
||||||
throw new IllegalArgumentException(
|
"For example, instead of \"requirements: money: 1000\" you should use \"requirements: - 'money 1000'\".");
|
||||||
"Having a final rank (for example: \"Z: rank: 'Z'\") from 3.4.2 or earlier should no longer be used.\n"
|
}*/
|
||||||
+
|
Set<String> keys = section.getKeys(false);
|
||||||
"It is safe to just delete the final rank " + name + "");
|
if (keys.size() == 1 && keys.iterator().next().equalsIgnoreCase("rank")) {
|
||||||
} else if (!section.contains("requirements")) {
|
throw new IllegalArgumentException(
|
||||||
throw new IllegalArgumentException("Rank " + name + " does not have any requirements.");
|
"Having a final rank (for example: \"Z: rank: 'Z'\") from 3.4.2 or earlier should no longer be used.\n"
|
||||||
}
|
+
|
||||||
}
|
"It is safe to just delete the final rank " + name + "");
|
||||||
|
} else if (!section.contains("requirements")) {
|
||||||
public T getFirst() {
|
throw new IllegalArgumentException("Rank " + name + " does not have any requirements.");
|
||||||
return tree.getFirst().getRank();
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public T getByName(String name) {
|
public T getFirst() {
|
||||||
if (name == null) {
|
return tree.getFirst().getRank();
|
||||||
return null;
|
}
|
||||||
}
|
|
||||||
for (T rank : tree) {
|
public T getByName(String name) {
|
||||||
if (name.equalsIgnoreCase(rank.getRank())) {
|
if (name == null) {
|
||||||
return rank;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
for (T rank : tree) {
|
||||||
return null;
|
if (name.equalsIgnoreCase(rank.getRank())) {
|
||||||
}
|
return rank;
|
||||||
|
}
|
||||||
public RankElement<T> getByPlayer(Player player) {
|
}
|
||||||
List<RankElement<T>> list = tree.asList();
|
return null;
|
||||||
Collections.reverse(list);
|
}
|
||||||
for (RankElement<T> t : list) {
|
|
||||||
if (t.getRank().isIn(player)) {
|
public RankElement<T> getByPlayer(Player player) {
|
||||||
return t;
|
List<RankElement<T>> list = tree.asList();
|
||||||
}
|
Collections.reverse(list);
|
||||||
}
|
for (RankElement<T> t : list) {
|
||||||
return null;
|
if (t.getRank().isIn(player)) {
|
||||||
}
|
return t;
|
||||||
|
}
|
||||||
public T getRankByPlayer(Player player) {
|
}
|
||||||
List<RankElement<T>> list = tree.asList();
|
return null;
|
||||||
Collections.reverse(list);
|
}
|
||||||
for (RankElement<T> t : list) {
|
|
||||||
if (t.getRank().isIn(player)) {
|
public T getRankByPlayer(Player player) {
|
||||||
return t.getRank();
|
List<RankElement<T>> list = tree.asList();
|
||||||
}
|
Collections.reverse(list);
|
||||||
}
|
for (RankElement<T> t : list) {
|
||||||
return null;
|
if (t.getRank().isIn(player)) {
|
||||||
}
|
return t.getRank();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ public class Rankup extends Rank {
|
|||||||
public static Rankup deserialize(RankupPlugin plugin, ConfigurationSection section) {
|
public static Rankup deserialize(RankupPlugin plugin, ConfigurationSection section) {
|
||||||
String next = section.getString("next");
|
String next = section.getString("next");
|
||||||
String rank = section.getString("rank");
|
String rank = section.getString("rank");
|
||||||
|
String displayName = section.getString("display-name");
|
||||||
|
|
||||||
if (next == null || next.isEmpty()) {
|
if (next == null || next.isEmpty()) {
|
||||||
plugin.getLogger().warning("Having a final rank (for example: \"Z: rank: 'Z'\") from 3.4.2 or earlier should no longer be used.\n"
|
plugin.getLogger().warning("Having a final rank (for example: \"Z: rank: 'Z'\") from 3.4.2 or earlier should no longer be used.\n"
|
||||||
@@ -23,13 +24,14 @@ public class Rankup extends Rank {
|
|||||||
plugin,
|
plugin,
|
||||||
next,
|
next,
|
||||||
rank,
|
rank,
|
||||||
|
displayName,
|
||||||
RankRequirementsFactory.getRequirements(plugin, section),
|
RankRequirementsFactory.getRequirements(plugin, section),
|
||||||
section.getStringList("commands"));
|
section.getStringList("commands"));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Rankup(ConfigurationSection section, RankupPlugin plugin, String next, String rank,
|
protected Rankup(ConfigurationSection section, RankupPlugin plugin, String next, String rank, String displayName,
|
||||||
RankRequirements requirements,
|
RankRequirements requirements,
|
||||||
List<String> commands) {
|
List<String> commands) {
|
||||||
super(section, plugin, next, rank, requirements, commands);
|
super(section, plugin, next, rank, displayName, requirements, commands);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,22 @@
|
|||||||
package sh.okx.rankup.ranks;
|
package sh.okx.rankup.ranks;
|
||||||
|
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import sh.okx.rankup.RankupPlugin;
|
import sh.okx.rankup.RankupPlugin;
|
||||||
|
|
||||||
public class Rankups extends RankList<Rank> {
|
public class Rankups extends RankList<Rank> {
|
||||||
public Rankups(RankupPlugin plugin, FileConfiguration config) {
|
|
||||||
super(plugin, config, section -> Rankup.deserialize(plugin, section));
|
public Rankups(RankupPlugin plugin, FileConfiguration config) {
|
||||||
}
|
super(plugin, config, section -> Rankup.deserialize(plugin, section));
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public void addLastRank(RankupPlugin plugin) {
|
@Override
|
||||||
RankElement<Rank> last = getTree().last();
|
protected void addLastRank(RankupPlugin plugin) {
|
||||||
last.setNext(new RankElement<>(new LastRank(plugin, last.getRank().getNext()), null));
|
RankElement<Rank> last = getTree().last();
|
||||||
}
|
String lastRankDisplayName = plugin.getConfig().getString("placeholders.last-rank-display-name");
|
||||||
}
|
String lastRankName = last.getRank().getNext();
|
||||||
|
if (lastRankDisplayName == null) {
|
||||||
|
lastRankDisplayName = lastRankName;
|
||||||
|
}
|
||||||
|
last.setNext(new RankElement<>(new LastRank(plugin, lastRankName, lastRankDisplayName), null));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import sh.okx.rankup.RankupPlugin;
|
|||||||
import sh.okx.rankup.gui.Gui;
|
import sh.okx.rankup.gui.Gui;
|
||||||
import sh.okx.rankup.ranks.Rank;
|
import sh.okx.rankup.ranks.Rank;
|
||||||
import sh.okx.rankup.ranks.RankElement;
|
import sh.okx.rankup.ranks.RankElement;
|
||||||
|
import sh.okx.rankup.util.Colour;
|
||||||
|
|
||||||
public class RanksGui {
|
public class RanksGui {
|
||||||
private final RankupPlugin plugin;
|
private final RankupPlugin plugin;
|
||||||
@@ -38,7 +39,7 @@ public class RanksGui {
|
|||||||
int offset = get(ConfigurationSection::getInt, "offset", playerPath, basePath, 10);
|
int offset = get(ConfigurationSection::getInt, "offset", playerPath, basePath, 10);
|
||||||
int width = get(ConfigurationSection::getInt, "width", playerPath, basePath, 7);
|
int width = get(ConfigurationSection::getInt, "width", playerPath, basePath, 7);
|
||||||
|
|
||||||
inventory = Bukkit.createInventory(null, rows * 9, title);
|
inventory = Bukkit.createInventory(null, rows * 9, Colour.translate(title));
|
||||||
|
|
||||||
ItemStack fill = get((section, path) -> Gui.getItem(plugin, section.getConfigurationSection(path), player, playerRankElement), "fill", playerPath, basePath, null);
|
ItemStack fill = get((section, path) -> Gui.getItem(plugin, section.getConfigurationSection(path), player, playerRankElement), "fill", playerPath, basePath, null);
|
||||||
|
|
||||||
|
|||||||
@@ -1,49 +1,51 @@
|
|||||||
package sh.okx.rankup.requirements;
|
package sh.okx.rankup.requirements;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class RequirementRegistry {
|
public class RequirementRegistry {
|
||||||
private final Set<Requirement> requirements = new HashSet<>();
|
private final Set<Requirement> requirements = new HashSet<>();
|
||||||
|
|
||||||
public void addRequirement(Requirement requirement) {
|
@Deprecated
|
||||||
requirements.add(requirement);
|
public void addRequirement(Requirement requirement) {
|
||||||
}
|
requirements.add(requirement);
|
||||||
|
}
|
||||||
public void addRequirements(Requirement... requirements) {
|
|
||||||
Collections.addAll(this.requirements, requirements);
|
public void addRequirements(Requirement requirement, Requirement... requirements) {
|
||||||
}
|
this.requirements.add(requirement);
|
||||||
|
Collections.addAll(this.requirements, requirements);
|
||||||
public Requirement newRequirement(String name, String value) {
|
}
|
||||||
for (Requirement requirement : requirements) {
|
|
||||||
if (requirement.getName().equalsIgnoreCase(name)) {
|
public Requirement newRequirement(String name, String value) {
|
||||||
Requirement newRequirement = requirement.clone();
|
for (Requirement requirement : requirements) {
|
||||||
newRequirement.setValue(value);
|
if (requirement.getName().equalsIgnoreCase(name)) {
|
||||||
return newRequirement;
|
Requirement newRequirement = requirement.clone();
|
||||||
}
|
newRequirement.setValue(value);
|
||||||
}
|
return newRequirement;
|
||||||
return null;
|
}
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
public Set<Requirement> getRequirements(Iterable<String> list) {
|
}
|
||||||
Set<Requirement> requirements = new HashSet<>();
|
|
||||||
|
public Set<Requirement> getRequirements(Iterable<String> list) {
|
||||||
for (String req : list) {
|
Set<Requirement> requirements = new HashSet<>();
|
||||||
String[] parts = req.split(" ", 2);
|
|
||||||
if (parts.length < 2) {
|
for (String req : list) {
|
||||||
throw new IllegalArgumentException("For requirement: '" + req + "'. Requirements must contain a space between" +
|
String[] parts = req.split(" ", 2);
|
||||||
" the name of the requirement and the value of the requirement. If it already looks like it has a space, " +
|
if (parts.length < 2) {
|
||||||
"make sure it is not a tab or has an invisible character.");
|
throw new IllegalArgumentException("For requirement: '" + req + "'. Requirements must contain a space between" +
|
||||||
}
|
" the name of the requirement and the value of the requirement. If it already looks like it has a space, " +
|
||||||
|
"make sure it is not a tab or has an invisible character.");
|
||||||
String name = parts[0];
|
}
|
||||||
String value = parts[1];
|
|
||||||
Requirement requirement = newRequirement(name, value);
|
String name = parts[0];
|
||||||
Objects.requireNonNull(requirement, name.equalsIgnoreCase("money") ? "The 'money' requirement is being used but no economy is found" : "Unknown requirement: " + name);
|
String value = parts[1];
|
||||||
requirements.add(requirement);
|
Requirement requirement = newRequirement(name, value);
|
||||||
}
|
Objects.requireNonNull(requirement, name.equalsIgnoreCase("money") ? "The 'money' requirement is being used but no economy is found" : "Unknown requirement: " + name);
|
||||||
return requirements;
|
requirements.add(requirement);
|
||||||
}
|
}
|
||||||
}
|
return requirements;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,90 +1,90 @@
|
|||||||
package sh.okx.rankup.requirements.requirement;
|
package sh.okx.rankup.requirements.requirement;
|
||||||
|
|
||||||
import me.clip.placeholderapi.PlaceholderAPI;
|
import me.clip.placeholderapi.PlaceholderAPI;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import sh.okx.rankup.RankupPlugin;
|
import sh.okx.rankup.RankupPlugin;
|
||||||
import sh.okx.rankup.requirements.ProgressiveRequirement;
|
import sh.okx.rankup.requirements.ProgressiveRequirement;
|
||||||
import sh.okx.rankup.requirements.Requirement;
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
|
|
||||||
public class PlaceholderRequirement extends ProgressiveRequirement {
|
public class PlaceholderRequirement extends ProgressiveRequirement {
|
||||||
|
|
||||||
public static final double DELTA = 0.00001D;
|
public static final double DELTA = 0.00001D;
|
||||||
|
|
||||||
public PlaceholderRequirement(RankupPlugin plugin) {
|
public PlaceholderRequirement(RankupPlugin plugin) {
|
||||||
super(plugin, "placeholder");
|
super(plugin, "placeholder");
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlaceholderRequirement(PlaceholderRequirement clone) {
|
public PlaceholderRequirement(PlaceholderRequirement clone) {
|
||||||
super(clone);
|
super(clone);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getProgress(Player player) {
|
public double getProgress(Player player) {
|
||||||
String[] parts = getParts(player);
|
String[] parts = getParts(player);
|
||||||
String parsed = parts[0];
|
String parsed = parts[0];
|
||||||
String value = parts[2];
|
String value = parts[2];
|
||||||
|
|
||||||
// string operations
|
// string operations
|
||||||
switch (parts[1]) {
|
switch (parts[1]) {
|
||||||
case "=":
|
case "=":
|
||||||
return parsed.equals(value) ? 1 : 0;
|
return parsed.equals(value) ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// numeric operations
|
// numeric operations
|
||||||
double p = Double.parseDouble(parsed);
|
double p = Double.parseDouble(parsed.replace(",", ""));
|
||||||
double v = Double.parseDouble(value);
|
double v = Double.parseDouble(value.replace(",", ""));
|
||||||
switch (parts[1]) {
|
switch (parts[1]) {
|
||||||
case ">":
|
case ">":
|
||||||
return p > v ? v : 0;
|
return p > v ? v : 0;
|
||||||
case ">=":
|
case ">=":
|
||||||
return Math.min(p, v);
|
return Math.min(p, v);
|
||||||
case "<":
|
case "<":
|
||||||
return p < v ? v : 0;
|
return p < v ? v : 0;
|
||||||
case "<=":
|
case "<=":
|
||||||
return p <= v ? 1 : 0;
|
return p <= v ? 1 : 0;
|
||||||
case "==":
|
case "==":
|
||||||
return p == v ? v : 0;
|
return p == v ? v : 0;
|
||||||
}
|
}
|
||||||
throw new IllegalArgumentException("Invalid operation: " + parts[1]);
|
throw new IllegalArgumentException("Invalid operation: " + parts[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getTotal(Player player) {
|
public double getTotal(Player player) {
|
||||||
String[] parts = getParts(player);
|
String[] parts = getParts(player);
|
||||||
|
|
||||||
if (parts[1].equalsIgnoreCase("=")) {
|
if (parts[1].equalsIgnoreCase("=")) {
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
return Double.parseDouble(parts[2]);
|
return Double.parseDouble(parts[2]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String[] getParts(Player player) {
|
private String[] getParts(Player player) {
|
||||||
String[] parts = getValueString().split(" ");
|
String[] parts = getValueString().split(" ");
|
||||||
if (parts.length < 3) {
|
if (parts.length < 3) {
|
||||||
throw new IllegalArgumentException("Placeholder requirements must be in the form %placeholder% <operation> string");
|
throw new IllegalArgumentException("Placeholder requirements must be in the form %placeholder% <operation> string");
|
||||||
}
|
}
|
||||||
String parsed = PlaceholderAPI.setPlaceholders(player, parts[0]);
|
String parsed = PlaceholderAPI.setPlaceholders(player, parts[0]);
|
||||||
if (!PlaceholderAPI.containsPlaceholders(parts[0]) || parsed.equals(parts[0])) {
|
if (!PlaceholderAPI.containsPlaceholders(parts[0]) || parsed.equals(parts[0])) {
|
||||||
throw new IllegalArgumentException(parts[0] + " is not a PlaceholderAPI placeholder!");
|
throw new IllegalArgumentException(parts[0] + " is not a PlaceholderAPI placeholder!");
|
||||||
}
|
}
|
||||||
parts[0] = parsed;
|
parts[0] = parsed;
|
||||||
return parts;
|
return parts;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getFullName() {
|
public String getFullName() {
|
||||||
String[] parts = getValueString().split(" ");
|
String[] parts = getValueString().split(" ");
|
||||||
return name + "#" + parts[0].replace("%", "");
|
return name + "#" + parts[0].replace("%", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean check(Player player) {
|
public boolean check(Player player) {
|
||||||
return getRemaining(player) <= 0;
|
return getRemaining(player) <= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Requirement clone() {
|
public Requirement clone() {
|
||||||
return new PlaceholderRequirement(this);
|
return new PlaceholderRequirement(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+27
@@ -0,0 +1,27 @@
|
|||||||
|
package sh.okx.rankup.requirements.requirement.superbvote;
|
||||||
|
|
||||||
|
import io.minimum.minecraft.superbvote.SuperbVote;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import sh.okx.rankup.RankupPlugin;
|
||||||
|
import sh.okx.rankup.requirements.ProgressiveRequirement;
|
||||||
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
|
|
||||||
|
public class SuperbVoteVotesRequirement extends ProgressiveRequirement {
|
||||||
|
public SuperbVoteVotesRequirement(RankupPlugin plugin) {
|
||||||
|
super(plugin, "superbvote-votes");
|
||||||
|
}
|
||||||
|
|
||||||
|
private SuperbVoteVotesRequirement(Requirement clone) {
|
||||||
|
super(clone);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getProgress(Player player) {
|
||||||
|
return SuperbVote.getPlugin().getVoteStorage().getVotes(player.getUniqueId()).getVotes();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Requirement clone() {
|
||||||
|
return new SuperbVoteVotesRequirement(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package sh.okx.rankup.util;
|
||||||
|
|
||||||
|
import net.md_5.bungee.api.ChatColor;
|
||||||
|
|
||||||
|
public class Colour {
|
||||||
|
|
||||||
|
private static final char altColorChar = '&';
|
||||||
|
|
||||||
|
public static String translate(String string) {
|
||||||
|
StringBuilder result = new StringBuilder();
|
||||||
|
char[] b = string.toCharArray();
|
||||||
|
for (int i = 0; i < b.length; i++) {
|
||||||
|
if (b[i] == altColorChar && i < b.length - 1) {
|
||||||
|
if ("0123456789AaBbCcDdEeFfKkLlMmNnOoRr".indexOf(b[i + 1]) > -1) {
|
||||||
|
result.append(ChatColor.COLOR_CHAR).append(Character.toLowerCase(b[i + 1]));
|
||||||
|
i ++;
|
||||||
|
} else if ('#' == b[i + 1] && i < b.length - 7) {
|
||||||
|
String hex = string.substring(i + 1, i + 8);
|
||||||
|
result.append(ChatColor.of(hex));
|
||||||
|
i += 7;
|
||||||
|
} else {
|
||||||
|
result.append(b[i]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
result.append(b[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,7 +20,7 @@ ranks: true
|
|||||||
# this will also make the command not autocomplete in 1.13
|
# this will also make the command not autocomplete in 1.13
|
||||||
prestiges: true
|
prestiges: true
|
||||||
|
|
||||||
# whether to enabable the /ranks GUI.
|
# whether to enable the /ranks GUI.
|
||||||
# will override the /ranks command
|
# will override the /ranks command
|
||||||
ranks-gui: false
|
ranks-gui: false
|
||||||
|
|
||||||
@@ -93,6 +93,7 @@ placeholders:
|
|||||||
complete: "Complete"
|
complete: "Complete"
|
||||||
current: "Current"
|
current: "Current"
|
||||||
incomplete: "Incomplete"
|
incomplete: "Incomplete"
|
||||||
|
last-rank-display-name: "last rank"
|
||||||
|
|
||||||
# what to shorten money by.
|
# what to shorten money by.
|
||||||
# ie 1000 -> 1k
|
# ie 1000 -> 1k
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ version: "${version}"
|
|||||||
main: sh.okx.rankup.RankupPlugin
|
main: sh.okx.rankup.RankupPlugin
|
||||||
author: Okx
|
author: Okx
|
||||||
depend: [Vault]
|
depend: [Vault]
|
||||||
softdepend: [PlaceholderAPI, mcMMO, AdvancedAchievements, Towny]
|
softdepend: [PlaceholderAPI, mcMMO, AdvancedAchievements, Towny, SuperbVote, VotingPlugin]
|
||||||
api-version: 1.13
|
api-version: 1.13
|
||||||
|
|
||||||
commands:
|
commands:
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
package sh.okx.rankup;
|
package sh.okx.rankup;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
import be.seeseemelk.mockbukkit.MockBukkit;
|
import be.seeseemelk.mockbukkit.MockBukkit;
|
||||||
import be.seeseemelk.mockbukkit.ServerMock;
|
import be.seeseemelk.mockbukkit.ServerMock;
|
||||||
import be.seeseemelk.mockbukkit.entity.PlayerMock;
|
import be.seeseemelk.mockbukkit.entity.PlayerMock;
|
||||||
@@ -15,9 +18,6 @@ import sh.okx.rankup.messages.Variable;
|
|||||||
import sh.okx.rankup.ranks.Rank;
|
import sh.okx.rankup.ranks.Rank;
|
||||||
import sh.okx.rankup.ranks.RankElement;
|
import sh.okx.rankup.ranks.RankElement;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
import static org.junit.Assert.assertTrue;
|
|
||||||
|
|
||||||
public class RankupTest {
|
public class RankupTest {
|
||||||
protected GroupProvider groupProvider;
|
protected GroupProvider groupProvider;
|
||||||
protected ServerMock server;
|
protected ServerMock server;
|
||||||
@@ -73,7 +73,7 @@ public class RankupTest {
|
|||||||
|
|
||||||
plugin.getHelper().rankup(player);
|
plugin.getHelper().rankup(player);
|
||||||
|
|
||||||
player.assertSaid(plugin.getMessage(Message.NO_RANKUP).replaceRanks(player, plugin.getRankups().getTree().last().getRank().getRank()).toString());
|
player.assertSaid(plugin.getMessage(Message.NO_RANKUP).replaceRanks(player, plugin.getRankups().getTree().last().getRank()).toString());
|
||||||
player.assertNoMoreSaid();
|
player.assertNoMoreSaid();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user