ranks gui

This commit is contained in:
okx-code
2020-09-20 00:18:57 +01:00
parent 0028af8ba0
commit 7b1a6fd335
4 changed files with 224 additions and 224 deletions
+1 -1
View File
@@ -4,7 +4,7 @@ plugins {
} }
group 'sh.okx' group 'sh.okx'
version '3.10-alpha' version '3.10-alpha.1'
repositories { repositories {
mavenCentral() mavenCentral()
+221 -221
View File
@@ -1,221 +1,221 @@
package sh.okx.rankup; package sh.okx.rankup;
import org.bukkit.configuration.ConfigurationSection; import java.util.HashMap;
import org.bukkit.entity.Player; import java.util.Map;
import sh.okx.rankup.hook.GroupProvider; import java.util.Objects;
import sh.okx.rankup.messages.Message; import org.bukkit.configuration.ConfigurationSection;
import sh.okx.rankup.messages.Variable; import org.bukkit.entity.Player;
import sh.okx.rankup.prestige.Prestige; import sh.okx.rankup.hook.GroupProvider;
import sh.okx.rankup.prestige.Prestiges; import sh.okx.rankup.messages.Message;
import sh.okx.rankup.ranks.Rank; import sh.okx.rankup.messages.Variable;
import sh.okx.rankup.ranks.RankElement; import sh.okx.rankup.prestige.Prestige;
import sh.okx.rankup.ranks.Rankups; import sh.okx.rankup.prestige.Prestiges;
import sh.okx.rankup.ranks.Rank;
import java.util.HashMap; import sh.okx.rankup.ranks.RankElement;
import java.util.Map; import sh.okx.rankup.ranks.Rankups;
import java.util.Objects;
/**
/** * Actually performs the ranking up and prestiging for the plugin and also manages the cooldowns
* Actually performs the ranking up and prestiging for the plugin and also manages the cooldowns * between ranking up.
* between ranking up. */
*/ public class RankupHelper {
public class RankupHelper {
private final RankupPlugin plugin;
private final RankupPlugin plugin; private final ConfigurationSection config;
private final ConfigurationSection config; private final GroupProvider permissions;
private final GroupProvider permissions; /**
/** * Players who cannot rankup/prestige for a certain amount of time.
* Players who cannot rankup/prestige for a certain amount of time. */
*/ private final Map<Player, Long> cooldowns = new HashMap<>();
private final Map<Player, Long> cooldowns = new HashMap<>();
public RankupHelper(RankupPlugin plugin) {
public RankupHelper(RankupPlugin plugin) { this.plugin = plugin;
this.plugin = plugin; this.config = plugin.getConfig();
this.config = plugin.getConfig(); this.permissions = plugin.getPermissions();
this.permissions = plugin.getPermissions(); }
}
public void doRankup(Player player, RankElement<Rank> rank) {
public void doRankup(Player player, RankElement<Rank> rank) { if (rank.getRank() != null) {
rank.getRank().runCommands(player); permissions.removeGroup(player.getUniqueId(), rank.getRank().getRank());
}
if (rank.getRank() != null) { permissions.addGroup(player.getUniqueId(), rank.getNext().getRank().getRank());
permissions.removeGroup(player.getUniqueId(), rank.getRank().getRank());
} rank.getRank().runCommands(player);
permissions.addGroup(player.getUniqueId(), rank.getNext().getRank().getRank()); }
}
public void sendRankupMessages(Player player, RankElement<Rank> rank) {
public void sendRankupMessages(Player player, RankElement<Rank> rank) { plugin.getMessage(rank.getRank(), Message.SUCCESS_PUBLIC)
plugin.getMessage(rank.getRank(), Message.SUCCESS_PUBLIC) .failIfEmpty()
.failIfEmpty() .replaceRanks(player, rank.getRank(), rank.getNext().getRank())
.replaceRanks(player, rank.getRank(), rank.getNext().getRank()) .broadcast();
.broadcast(); plugin.getMessage(rank.getRank(), Message.SUCCESS_PRIVATE)
plugin.getMessage(rank.getRank(), Message.SUCCESS_PRIVATE) .failIfEmpty()
.failIfEmpty() .replaceRanks(player, rank.getRank(), rank.getNext().getRank())
.replaceRanks(player, rank.getRank(), rank.getNext().getRank()) .send(player);
.send(player); }
}
public void doPrestige(Player player, RankElement<Prestige> prestige) {
public void doPrestige(Player player, RankElement<Prestige> prestige) { Prestige rank = prestige.getRank();
Prestige rank = prestige.getRank();
rank.runCommands(player); permissions.removeGroup(player.getUniqueId(), rank.getFrom());
permissions.addGroup(player.getUniqueId(), rank.getTo());
permissions.removeGroup(player.getUniqueId(), rank.getFrom());
permissions.addGroup(player.getUniqueId(), rank.getTo()); if (rank.getRank() != null) {
permissions.removeGroup(player.getUniqueId(), rank.getRank());
if (rank.getRank() != null) { }
permissions.removeGroup(player.getUniqueId(), rank.getRank()); permissions.addGroup(player.getUniqueId(), prestige.getNext().getRank().getRank());
}
permissions.addGroup(player.getUniqueId(), prestige.getNext().getRank().getRank()); rank.runCommands(player);
} }
public void sendPrestigeMessages(Player player, RankElement<Prestige> prestige) { public void sendPrestigeMessages(Player player, RankElement<Prestige> prestige) {
Objects.requireNonNull(prestige); Objects.requireNonNull(prestige);
Objects.requireNonNull(prestige.getNext()); Objects.requireNonNull(prestige.getNext());
plugin.getMessage(prestige.getRank(), Message.PRESTIGE_SUCCESS_PUBLIC) plugin.getMessage(prestige.getRank(), Message.PRESTIGE_SUCCESS_PUBLIC)
.failIfEmpty() .failIfEmpty()
.replaceRanks(player, prestige.getRank(), prestige.getNext().getRank()) .replaceRanks(player, prestige.getRank(), prestige.getNext().getRank())
.replaceFromTo(prestige.getRank()) .replaceFromTo(prestige.getRank())
.broadcast(); .broadcast();
plugin.getMessage(prestige.getRank(), Message.PRESTIGE_SUCCESS_PRIVATE) plugin.getMessage(prestige.getRank(), Message.PRESTIGE_SUCCESS_PRIVATE)
.failIfEmpty() .failIfEmpty()
.replaceRanks(player, prestige.getRank(), prestige.getNext().getRank()) .replaceRanks(player, prestige.getRank(), prestige.getNext().getRank())
.replaceFromTo(prestige.getRank()) .replaceFromTo(prestige.getRank())
.send(player); .send(player);
} }
private boolean checkCooldown(Player player, Rank rank) { private boolean checkCooldown(Player player, Rank rank) {
if (cooldowns.containsKey(player)) { if (cooldowns.containsKey(player)) {
long time = System.currentTimeMillis() - cooldowns.get(player); long time = System.currentTimeMillis() - cooldowns.get(player);
// if time passed is less than the cooldown // if time passed is less than the cooldown
long cooldownSeconds = config.getInt("cooldown"); long cooldownSeconds = config.getInt("cooldown");
long timeLeft = (cooldownSeconds * 1000) - time; long timeLeft = (cooldownSeconds * 1000) - time;
if (timeLeft > 0) { if (timeLeft > 0) {
long secondsLeft = (long) Math.ceil(timeLeft / 1000f); long secondsLeft = (long) Math.ceil(timeLeft / 1000f);
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.getRank())
.replaceFromTo(rank) .replaceFromTo(rank)
.replace(Variable.SECONDS, cooldownSeconds) .replace(Variable.SECONDS, cooldownSeconds)
.replace(Variable.SECONDS_LEFT, secondsLeft) .replace(Variable.SECONDS_LEFT, secondsLeft)
.send(player); .send(player);
return true; return true;
} }
// cooldown has expired so remove it // cooldown has expired so remove it
cooldowns.remove(player); cooldowns.remove(player);
} }
return false; return false;
} }
private void applyCooldown(Player player) { private void applyCooldown(Player player) {
if (config.getInt("cooldown") > 0) { if (config.getInt("cooldown") > 0) {
cooldowns.put(player, System.currentTimeMillis()); cooldowns.put(player, System.currentTimeMillis());
} }
} }
public void rankup(Player player) { public void rankup(Player player) {
if (!checkRankup(player)) { if (!checkRankup(player)) {
return; return;
} }
RankElement<Rank> rankElement = plugin.getRankups().getByPlayer(player); RankElement<Rank> rankElement = plugin.getRankups().getByPlayer(player);
Rank rank = rankElement.getRank(); Rank rank = rankElement.getRank();
rank.applyRequirements(player); rank.applyRequirements(player);
applyCooldown(player); applyCooldown(player);
doRankup(player, rankElement); doRankup(player, rankElement);
sendRankupMessages(player, rankElement); sendRankupMessages(player, rankElement);
} }
public boolean checkRankup(Player player) { public boolean checkRankup(Player player) {
return checkRankup(player, true); return checkRankup(player, true);
} }
/** /**
* Checks if a player can rankup, and if they can't, sends the player a message and returns false * Checks if a player can rankup, and if they can't, sends the player a message and returns false
* *
* @param player the player to check if they can rankup * @param player the player to check if they can rankup
* @return true if the player can rankup, false otherwise * @return true if the player can rankup, false otherwise
*/ */
public boolean checkRankup(Player player, boolean message) { public boolean checkRankup(Player player, boolean message) {
Rankups rankups = plugin.getRankups(); Rankups rankups = plugin.getRankups();
RankElement<Rank> rankElement = rankups.getByPlayer(player); RankElement<Rank> rankElement = rankups.getByPlayer(player);
if (rankElement == null) { // check if in ladder if (rankElement == null) { // check if in ladder
plugin.getMessage(Message.NOT_IN_LADDER) plugin.getMessage(Message.NOT_IN_LADDER)
.failIf(!message) .failIf(!message)
.replace(Variable.PLAYER, player.getName()) .replace(Variable.PLAYER, player.getName())
.send(player); .send(player);
return false; return false;
} }
Rank rank = rankElement.getRank(); Rank rank = rankElement.getRank();
if (!rankElement.hasNext()) { if (!rankElement.hasNext()) {
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().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
if (message) { if (message) {
plugin.replaceMoneyRequirements(plugin.getMessage(rank, Message.REQUIREMENTS_NOT_MET) plugin.replaceMoneyRequirements(plugin.getMessage(rank, Message.REQUIREMENTS_NOT_MET)
.replaceRanks(player, rank, rankElement.getNext().getRank()), player, rank) .replaceRanks(player, rank, rankElement.getNext().getRank()), player, rank)
.send(player); .send(player);
} }
return false; return false;
} else if (message && checkCooldown(player, rank)) { } else if (message && checkCooldown(player, rank)) {
return false; return false;
} }
return true; return true;
} }
public void prestige(Player player) { public void prestige(Player player) {
if (!checkPrestige(player)) { if (!checkPrestige(player)) {
return; return;
} }
RankElement<Prestige> rankElement = plugin.getPrestiges().getByPlayer(player); RankElement<Prestige> rankElement = plugin.getPrestiges().getByPlayer(player);
Prestige prestige = rankElement.getRank(); Prestige prestige = rankElement.getRank();
prestige.applyRequirements(player); prestige.applyRequirements(player);
applyCooldown(player); applyCooldown(player);
doPrestige(player, rankElement); doPrestige(player, rankElement);
sendPrestigeMessages(player, rankElement); sendPrestigeMessages(player, rankElement);
} }
public boolean checkPrestige(Player player) { public boolean checkPrestige(Player player) {
return checkPrestige(player, true); return checkPrestige(player, true);
} }
public boolean checkPrestige(Player player, boolean message) { public boolean checkPrestige(Player player, boolean message) {
Prestiges prestiges = plugin.getPrestiges(); Prestiges prestiges = plugin.getPrestiges();
RankElement<Prestige> prestigeElement = prestiges.getByPlayer(player); RankElement<Prestige> prestigeElement = prestiges.getByPlayer(player);
if (prestigeElement == null || !prestigeElement.getRank().isEligible(player)) { // check if in ladder if (prestigeElement == null || !prestigeElement.getRank().isEligible(player)) { // check if in ladder
plugin.getMessage(Message.NOT_HIGH_ENOUGH) plugin.getMessage(Message.NOT_HIGH_ENOUGH)
.failIf(!message) .failIf(!message)
.replace(Variable.PLAYER, player.getName()) .replace(Variable.PLAYER, player.getName())
.send(player); .send(player);
return false; return false;
} 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().getRank())
.replaceFromTo(prestigeElement.getRank()) .replaceFromTo(prestigeElement.getRank())
.send(player); .send(player);
return false; return false;
} else if (!prestigeElement.getRank().hasRequirements(player)) { // check if they can afford it } else if (!prestigeElement.getRank().hasRequirements(player)) { // check if they can afford it
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().getRank()), player, prestigeElement.getRank())
.replaceFromTo(prestigeElement.getRank()) .replaceFromTo(prestigeElement.getRank())
.send(player); .send(player);
return false; return false;
} else if (checkCooldown(player, prestigeElement.getRank())) { } else if (checkCooldown(player, prestigeElement.getRank())) {
return false; return false;
} }
return true; return true;
} }
} }
@@ -64,7 +64,7 @@ public class RankupCommand implements CommandExecutor {
case "gui": case "gui":
Gui gui = Gui.of(player, rankElement.getRank(), rankElement.getNext().getRank(), plugin, args.length > 0 && args[0].equalsIgnoreCase("gui")); Gui gui = Gui.of(player, rankElement.getRank(), rankElement.getNext().getRank(), plugin, args.length > 0 && args[0].equalsIgnoreCase("gui"));
if (gui == null) { if (gui == null) {
player.sendMessage(ChatColor.RED + "GUI is not available. Check console for more informatiopn."); player.sendMessage(ChatColor.RED + "GUI is not available. Check console for more information.");
return true; return true;
} }
gui.open(player); gui.open(player);
@@ -35,8 +35,8 @@ public class RanksGuiListener implements Listener {
Player player = (Player) event.getWhoClicked(); Player player = (Player) event.getWhoClicked();
RanksGui ranksGui = guiMap.get(player); RanksGui ranksGui = guiMap.get(player);
if (ranksGui != null && event.getInventory() == ranksGui.getInventory()) { if (ranksGui != null && event.getInventory() == ranksGui.getInventory()) {
ranksGui.click(event);
event.setCancelled(true); event.setCancelled(true);
ranksGui.click(event);
} }
} }