Merge branch 'ranksgui'
# Conflicts: # build.gradle
This commit is contained in:
+2
-2
@@ -4,7 +4,7 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
group 'sh.okx'
|
group 'sh.okx'
|
||||||
version '3.9.1'
|
version '3.10'
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
@@ -28,7 +28,7 @@ dependencies {
|
|||||||
testImplementation 'com.github.seeseemelk:MockBukkit-v1.15:0.3.0'
|
testImplementation 'com.github.seeseemelk:MockBukkit-v1.15:0.3.0'
|
||||||
|
|
||||||
compileOnly 'org.jetbrains:annotations:16.0.2'
|
compileOnly 'org.jetbrains:annotations:16.0.2'
|
||||||
implementation 'org.spigotmc:spigot-api:1.16.1-R0.1-SNAPSHOT'
|
implementation 'org.spigotmc:spigot-api:1.16.2-R0.1-SNAPSHOT'
|
||||||
implementation('com.github.Realizedd:TokenManager:3.2.4') {
|
implementation('com.github.Realizedd:TokenManager:3.2.4') {
|
||||||
transitive = false
|
transitive = false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
package sh.okx.rankup;
|
package sh.okx.rankup;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import sh.okx.rankup.hook.GroupProvider;
|
import sh.okx.rankup.hook.GroupProvider;
|
||||||
@@ -11,10 +14,6 @@ import sh.okx.rankup.ranks.Rank;
|
|||||||
import sh.okx.rankup.ranks.RankElement;
|
import sh.okx.rankup.ranks.RankElement;
|
||||||
import sh.okx.rankup.ranks.Rankups;
|
import sh.okx.rankup.ranks.Rankups;
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
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.
|
||||||
@@ -36,12 +35,12 @@ public class RankupHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void doRankup(Player player, RankElement<Rank> rank) {
|
public void doRankup(Player player, RankElement<Rank> rank) {
|
||||||
rank.getRank().runCommands(player);
|
|
||||||
|
|
||||||
if (rank.getRank() != null) {
|
if (rank.getRank() != null) {
|
||||||
permissions.removeGroup(player.getUniqueId(), rank.getRank().getRank());
|
permissions.removeGroup(player.getUniqueId(), rank.getRank().getRank());
|
||||||
}
|
}
|
||||||
permissions.addGroup(player.getUniqueId(), rank.getNext().getRank().getRank());
|
permissions.addGroup(player.getUniqueId(), rank.getNext().getRank().getRank());
|
||||||
|
|
||||||
|
rank.getRank().runCommands(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendRankupMessages(Player player, RankElement<Rank> rank) {
|
public void sendRankupMessages(Player player, RankElement<Rank> rank) {
|
||||||
@@ -57,7 +56,6 @@ public class RankupHelper {
|
|||||||
|
|
||||||
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.removeGroup(player.getUniqueId(), rank.getFrom());
|
||||||
permissions.addGroup(player.getUniqueId(), rank.getTo());
|
permissions.addGroup(player.getUniqueId(), rank.getTo());
|
||||||
@@ -66,6 +64,8 @@ public class RankupHelper {
|
|||||||
permissions.removeGroup(player.getUniqueId(), rank.getRank());
|
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) {
|
||||||
|
|||||||
@@ -1,5 +1,11 @@
|
|||||||
package sh.okx.rankup;
|
package sh.okx.rankup;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.text.DecimalFormat;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.Supplier;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@@ -14,7 +20,12 @@ import org.bukkit.plugin.PluginDescriptionFile;
|
|||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.bukkit.plugin.java.JavaPluginLoader;
|
import org.bukkit.plugin.java.JavaPluginLoader;
|
||||||
import sh.okx.rankup.commands.*;
|
import sh.okx.rankup.commands.InfoCommand;
|
||||||
|
import sh.okx.rankup.commands.MaxRankupCommand;
|
||||||
|
import sh.okx.rankup.commands.PrestigeCommand;
|
||||||
|
import sh.okx.rankup.commands.PrestigesCommand;
|
||||||
|
import sh.okx.rankup.commands.RanksCommand;
|
||||||
|
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;
|
||||||
@@ -33,30 +44,46 @@ import sh.okx.rankup.prestige.Prestiges;
|
|||||||
import sh.okx.rankup.ranks.Rank;
|
import sh.okx.rankup.ranks.Rank;
|
||||||
import sh.okx.rankup.ranks.RankList;
|
import sh.okx.rankup.ranks.RankList;
|
||||||
import sh.okx.rankup.ranks.Rankups;
|
import sh.okx.rankup.ranks.Rankups;
|
||||||
|
import sh.okx.rankup.ranksgui.RanksGuiCommand;
|
||||||
|
import sh.okx.rankup.ranksgui.RanksGuiListener;
|
||||||
import sh.okx.rankup.requirements.Requirement;
|
import sh.okx.rankup.requirements.Requirement;
|
||||||
import sh.okx.rankup.requirements.RequirementRegistry;
|
import sh.okx.rankup.requirements.RequirementRegistry;
|
||||||
|
import sh.okx.rankup.requirements.requirement.AdvancementRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.BlockBreakRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.CraftItemRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.GroupRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.ItemDeductibleRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.ItemRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.MobKillsRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.MoneyDeductibleRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.MoneyRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.PermissionRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.PlaceholderRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.PlayerKillsRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.PlaytimeMinutesRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.TotalMobKillsRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.UseItemRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.WorldRequirement;
|
||||||
import sh.okx.rankup.requirements.requirement.XpLevelDeductibleRequirement;
|
import sh.okx.rankup.requirements.requirement.XpLevelDeductibleRequirement;
|
||||||
import sh.okx.rankup.requirements.requirement.*;
|
import sh.okx.rankup.requirements.requirement.XpLevelRequirement;
|
||||||
import sh.okx.rankup.requirements.requirement.advancedachievements.AdvancedAchievementsAchievementRequirement;
|
import sh.okx.rankup.requirements.requirement.advancedachievements.AdvancedAchievementsAchievementRequirement;
|
||||||
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.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.*;
|
import sh.okx.rankup.requirements.requirement.towny.TownyKingNumberResidentsRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.towny.TownyKingNumberTownsRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.towny.TownyKingRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.towny.TownyMayorNumberResidentsRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.towny.TownyMayorRequirement;
|
||||||
|
import sh.okx.rankup.requirements.requirement.towny.TownyResidentRequirement;
|
||||||
import sh.okx.rankup.requirements.requirement.votingplugin.VotingPluginPointsDeductibleRequirement;
|
import sh.okx.rankup.requirements.requirement.votingplugin.VotingPluginPointsDeductibleRequirement;
|
||||||
import sh.okx.rankup.requirements.requirement.votingplugin.VotingPluginPointsRequirement;
|
import sh.okx.rankup.requirements.requirement.votingplugin.VotingPluginPointsRequirement;
|
||||||
import sh.okx.rankup.requirements.requirement.votingplugin.VotingPluginVotesRequirement;
|
import sh.okx.rankup.requirements.requirement.votingplugin.VotingPluginVotesRequirement;
|
||||||
import sh.okx.rankup.util.UpdateNotifier;
|
import sh.okx.rankup.util.UpdateNotifier;
|
||||||
import sh.okx.rankup.util.VersionChecker;
|
import sh.okx.rankup.util.VersionChecker;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.text.DecimalFormat;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
public class RankupPlugin extends JavaPlugin {
|
public class RankupPlugin extends JavaPlugin {
|
||||||
|
|
||||||
public static final int CONFIG_VERSION = 8;
|
public static final int CONFIG_VERSION = 8;
|
||||||
@@ -124,7 +151,13 @@ public class RankupPlugin extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (config.getBoolean("ranks")) {
|
if (config.getBoolean("ranks")) {
|
||||||
getCommand("ranks").setExecutor(new RanksCommand(this));
|
if (config.getBoolean("ranks-gui")) {
|
||||||
|
RanksGuiListener listener = new RanksGuiListener();
|
||||||
|
getCommand("ranks").setExecutor(new RanksGuiCommand(this, listener));
|
||||||
|
getServer().getPluginManager().registerEvents(listener, this);
|
||||||
|
} else {
|
||||||
|
getCommand("ranks").setExecutor(new RanksCommand(this));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (config.getBoolean("prestige")) {
|
if (config.getBoolean("prestige")) {
|
||||||
getCommand("prestige").setExecutor(new PrestigeCommand(this));
|
getCommand("prestige").setExecutor(new PrestigeCommand(this));
|
||||||
@@ -414,23 +447,27 @@ public class RankupPlugin extends JavaPlugin {
|
|||||||
|
|
||||||
public MessageBuilder replaceMoneyRequirements(MessageBuilder builder, CommandSender sender,
|
public MessageBuilder replaceMoneyRequirements(MessageBuilder builder, CommandSender sender,
|
||||||
Rank rank) {
|
Rank rank) {
|
||||||
if (builder instanceof NullMessageBuilder) {
|
if (builder instanceof NullMessageBuilder || rank == null) {
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
Requirement money = rank.getRequirement(sender instanceof Player ? (Player) sender : null, "money");
|
Requirement money = rank.getRequirement(sender instanceof Player ? (Player) sender : null, "money");
|
||||||
if (money != null) {
|
if (money != null) {
|
||||||
Double amount = null;
|
Double amount = null;
|
||||||
|
Double total = null;
|
||||||
if (sender instanceof Player && rank.isIn((Player) sender)) {
|
if (sender instanceof Player && rank.isIn((Player) sender)) {
|
||||||
if (economy != null) {
|
if (economy != null) {
|
||||||
amount = money.getRemaining((Player) sender);
|
amount = money.getRemaining((Player) sender);
|
||||||
|
total = money.getTotal((Player) sender);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
amount = money.getValueDouble();
|
amount = money.getValueDouble();
|
||||||
|
total = 0D;
|
||||||
}
|
}
|
||||||
if (amount != null && economy != null) {
|
if (amount != null && economy != null) {
|
||||||
builder.replace(Variable.MONEY_NEEDED, formatMoney(amount));
|
builder.replace(Variable.MONEY_NEEDED, formatMoney(amount));
|
||||||
builder.replace(Variable.MONEY, formatMoney(money.getValueDouble()));
|
builder.replace(Variable.MONEY, formatMoney(money.getValueDouble()));
|
||||||
|
builder.replace(Variable.MONEY_DONE, formatMoney(total));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sender instanceof Player) {
|
if (sender instanceof Player) {
|
||||||
|
|||||||
@@ -164,7 +164,6 @@ public class InfoCommand implements TabExecutor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String[] placeholders = new String[] {
|
String[] placeholders = new String[] {
|
||||||
"prestige_money",
|
|
||||||
"prestige_money_formatted",
|
"prestige_money_formatted",
|
||||||
"prestige_percent_left_formatted",
|
"prestige_percent_left_formatted",
|
||||||
"prestige_percent_done_formatted",
|
"prestige_percent_done_formatted",
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public class PrestigeCommand implements CommandExecutor {
|
|||||||
.send(player);
|
.send(player);
|
||||||
break;
|
break;
|
||||||
case "gui":
|
case "gui":
|
||||||
Gui gui = Gui.of(player, prestige, rankElement.getNext().getRank(), plugin);
|
Gui gui = Gui.of(player, prestige, rankElement.getNext().getRank(), plugin, false);
|
||||||
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 informatiopn.");
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -46,7 +46,8 @@ public class RankupCommand implements CommandExecutor {
|
|||||||
String confirmationType = config.getString("confirmation-type").toLowerCase();
|
String confirmationType = config.getString("confirmation-type").toLowerCase();
|
||||||
|
|
||||||
// if they are on text confirming, rank them up
|
// if they are on text confirming, rank them up
|
||||||
if (confirmationType.equals("text") && confirming.containsKey(player)) {
|
// clicking on the gui cannot confirm a rankup
|
||||||
|
if (confirmationType.equals("text") && confirming.containsKey(player) && !(args.length > 0 && args[0].equalsIgnoreCase("gui"))) {
|
||||||
long time = System.currentTimeMillis() - confirming.remove(player);
|
long time = System.currentTimeMillis() - confirming.remove(player);
|
||||||
if (time < config.getInt("text.timeout") * 1000) {
|
if (time < config.getInt("text.timeout") * 1000) {
|
||||||
plugin.getHelper().rankup(player);
|
plugin.getHelper().rankup(player);
|
||||||
@@ -62,9 +63,9 @@ public class RankupCommand implements CommandExecutor {
|
|||||||
.send(player);
|
.send(player);
|
||||||
break;
|
break;
|
||||||
case "gui":
|
case "gui":
|
||||||
Gui gui = Gui.of(player, rankElement.getRank(), rankElement.getNext().getRank(), plugin);
|
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);
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
package sh.okx.rankup.gui;
|
package sh.okx.rankup.gui;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@@ -17,14 +20,13 @@ import sh.okx.rankup.messages.Message;
|
|||||||
import sh.okx.rankup.messages.MessageBuilder;
|
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.util.ItemUtil;
|
import sh.okx.rankup.util.ItemUtil;
|
||||||
|
|
||||||
import java.util.Arrays;
|
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
|
||||||
public class Gui implements InventoryHolder {
|
public class Gui implements InventoryHolder {
|
||||||
|
@Getter
|
||||||
|
private final boolean returnToRanksGui;
|
||||||
@Getter
|
@Getter
|
||||||
private Inventory inventory;
|
private Inventory inventory;
|
||||||
@Getter
|
@Getter
|
||||||
@@ -34,8 +36,8 @@ public class Gui implements InventoryHolder {
|
|||||||
@Getter
|
@Getter
|
||||||
private boolean prestige;
|
private boolean prestige;
|
||||||
|
|
||||||
public static Gui of(Player player, Rank oldRank, Rank rank, RankupPlugin plugin) {
|
public static Gui of(Player player, Rank oldRank, Rank rank, RankupPlugin plugin, boolean returnToRanksGui) {
|
||||||
Gui gui = new Gui();
|
Gui gui = new Gui(returnToRanksGui);
|
||||||
gui.prestige = oldRank instanceof Prestige;
|
gui.prestige = oldRank instanceof Prestige;
|
||||||
|
|
||||||
String type = gui.prestige ? "prestige" : "rankup";
|
String type = gui.prestige ? "prestige" : "rankup";
|
||||||
@@ -60,17 +62,28 @@ 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,
|
||||||
plugin.replaceMoneyRequirements(
|
ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ItemStack getItem(RankupPlugin plugin, ConfigurationSection section, Player player, RankElement<Rank> element) {
|
||||||
|
if (element == null) {
|
||||||
|
return getItem(plugin, section, player, null, null);
|
||||||
|
} else {
|
||||||
|
return getItem(plugin, section, player, element.getRank(), element.getNext().getRank());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
private static ItemStack getItem(RankupPlugin plugin, ConfigurationSection section, Player player, Rank oldRank, Rank rank) {
|
public static ItemStack getItem(RankupPlugin plugin, ConfigurationSection section, Player player, Rank oldRank, Rank rank) {
|
||||||
|
if (section == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
String materialName = section.getString("material").toUpperCase();
|
String materialName = section.getString("material").toUpperCase();
|
||||||
|
|
||||||
ItemStack item;
|
ItemStack item;
|
||||||
@@ -108,9 +121,11 @@ public class Gui implements InventoryHolder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static String format(RankupPlugin plugin, String message, Player player, Rank oldRank, Rank rank) {
|
private static String format(RankupPlugin plugin, String message, Player player, Rank oldRank, Rank rank) {
|
||||||
return plugin.replaceMoneyRequirements(new MessageBuilder(ChatColor.translateAlternateColorCodes('&', message))
|
MessageBuilder builder = new MessageBuilder(message);
|
||||||
.replaceRanks(player, oldRank, rank), player, oldRank)
|
if (oldRank != null && rank != null) {
|
||||||
.toString();
|
builder = builder.replaceRanks(player, oldRank, rank);
|
||||||
|
}
|
||||||
|
return ChatColor.translateAlternateColorCodes('&', 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) {
|
||||||
|
|||||||
@@ -34,7 +34,12 @@ public class GuiListener implements Listener {
|
|||||||
plugin.getHelper().rankup(player);
|
plugin.getHelper().rankup(player);
|
||||||
}
|
}
|
||||||
} else if (gui.getCancel().isSimilar(e.getCurrentItem())) {
|
} else if (gui.getCancel().isSimilar(e.getCurrentItem())) {
|
||||||
Bukkit.getScheduler().runTask(plugin, player::closeInventory);
|
Bukkit.getScheduler().runTask(plugin, () -> {
|
||||||
|
player.closeInventory();
|
||||||
|
if (gui.isReturnToRanksGui()) {
|
||||||
|
Bukkit.dispatchCommand(player, "ranksgui");
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ public enum Variable {
|
|||||||
TO,
|
TO,
|
||||||
MONEY,
|
MONEY,
|
||||||
MONEY_NEEDED,
|
MONEY_NEEDED,
|
||||||
|
MONEY_DONE,
|
||||||
AMOUNT,
|
AMOUNT,
|
||||||
AMOUNT_NEEDED,
|
AMOUNT_NEEDED,
|
||||||
AMOUNT_DONE,
|
AMOUNT_DONE,
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public class PrestigeListRankRequirements implements RankRequirements {
|
|||||||
|
|
||||||
for (Prestige prestige : prestiges.getTree()) {
|
for (Prestige prestige : prestiges.getTree()) {
|
||||||
String next = prestige.getNext();
|
String next = prestige.getNext();
|
||||||
if(plugin.getPermissions().inGroup(player.getUniqueId(), next)) {
|
if(next != null && plugin.getPermissions().inGroup(player.getUniqueId(), next)) {
|
||||||
RankRequirements rankRequirements = this.requirements.get(next.toLowerCase());
|
RankRequirements rankRequirements = this.requirements.get(next.toLowerCase());
|
||||||
if (rankRequirements != null) {
|
if (rankRequirements != null) {
|
||||||
return rankRequirements;
|
return rankRequirements;
|
||||||
|
|||||||
@@ -0,0 +1,122 @@
|
|||||||
|
package sh.okx.rankup.ranksgui;
|
||||||
|
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import sh.okx.rankup.RankupPlugin;
|
||||||
|
import sh.okx.rankup.gui.Gui;
|
||||||
|
import sh.okx.rankup.ranks.Rank;
|
||||||
|
import sh.okx.rankup.ranks.RankElement;
|
||||||
|
|
||||||
|
public class RanksGui {
|
||||||
|
private final RankupPlugin plugin;
|
||||||
|
@Getter
|
||||||
|
private final Player player;
|
||||||
|
|
||||||
|
private int rankupSlot;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private Inventory inventory;
|
||||||
|
|
||||||
|
public RanksGui(RankupPlugin plugin, Player player) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.player = player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void open() {
|
||||||
|
RankElement<Rank> playerRankElement = plugin.getRankups().getByPlayer(player);
|
||||||
|
ConfigurationSection playerPath = playerRankElement == null ? null : plugin.getSection(playerRankElement.getRank(), "rankup.ranksgui");
|
||||||
|
ConfigurationSection basePath = plugin.getMessages().getConfigurationSection("rankup.ranksgui");
|
||||||
|
|
||||||
|
String title = get(ConfigurationSection::getString, "title", playerPath, basePath, "Ranks");
|
||||||
|
int rows = get(ConfigurationSection::getInt, "rows", playerPath, basePath, 3);
|
||||||
|
int offset = get(ConfigurationSection::getInt, "offset", playerPath, basePath, 10);
|
||||||
|
int width = get(ConfigurationSection::getInt, "width", playerPath, basePath, 7);
|
||||||
|
|
||||||
|
inventory = Bukkit.createInventory(null, rows * 9, title);
|
||||||
|
|
||||||
|
ItemStack fill = get((section, path) -> Gui.getItem(plugin, section.getConfigurationSection(path), player, playerRankElement), "fill", playerPath, basePath, null);
|
||||||
|
|
||||||
|
int index = offset;
|
||||||
|
int rowIndex = offset + width;
|
||||||
|
RankElement<Rank> rankElement = plugin.getRankups().getTree().getFirst();
|
||||||
|
boolean complete = playerRankElement != null;
|
||||||
|
while(rankElement.hasNext()) {
|
||||||
|
ConfigurationSection rankPath = plugin.getSection(rankElement.getRank(), "rankup.ranksgui");
|
||||||
|
|
||||||
|
String path;
|
||||||
|
if (rankElement == playerRankElement) {
|
||||||
|
path = "current";
|
||||||
|
complete = false;
|
||||||
|
rankupSlot = index;
|
||||||
|
} else if (complete) {
|
||||||
|
path = "complete";
|
||||||
|
} else {
|
||||||
|
path = "incomplete";
|
||||||
|
}
|
||||||
|
|
||||||
|
RankElement<Rank> rankElement0 = rankElement;
|
||||||
|
ItemStack item = get((section, path0) -> Gui.getItem(plugin, section.getConfigurationSection(path0), player, rankElement0), path, rankPath, basePath, null);
|
||||||
|
|
||||||
|
inventory.setItem(index++, item);
|
||||||
|
if (index == rowIndex) {
|
||||||
|
rowIndex += 9;
|
||||||
|
index += 9 - width;
|
||||||
|
}
|
||||||
|
if (index >= rows * 9) {
|
||||||
|
throw new IllegalArgumentException("Ranks GUI is too small for the number of ranks. Increase the number of rows on the ranks GUI.");
|
||||||
|
}
|
||||||
|
rankElement = rankElement.getNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fill != null) {
|
||||||
|
for (int i = 0; i < rows * 9; i++) {
|
||||||
|
ItemStack item = inventory.getItem(i);
|
||||||
|
if (item == null) {
|
||||||
|
inventory.setItem(i, fill);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
player.openInventory(inventory);
|
||||||
|
}
|
||||||
|
|
||||||
|
private <T> T get(BiFunction<ConfigurationSection, String, T> fun, String path, ConfigurationSection primary, ConfigurationSection secondary, T def) {
|
||||||
|
T get = null;
|
||||||
|
if (primary != null) {
|
||||||
|
get = fun.apply(primary, path);
|
||||||
|
}
|
||||||
|
if (get != null) {
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
if (secondary != null) {
|
||||||
|
get = fun.apply(secondary, path);
|
||||||
|
}
|
||||||
|
if (get != null) {
|
||||||
|
return get;
|
||||||
|
}
|
||||||
|
return def;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void click(InventoryClickEvent event) {
|
||||||
|
if (event.getClickedInventory() != event.getInventory()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int slot = event.getRawSlot();
|
||||||
|
if (slot == rankupSlot) {
|
||||||
|
Bukkit.getScheduler().runTask(plugin, () -> {
|
||||||
|
player.closeInventory();
|
||||||
|
Bukkit.dispatchCommand(player, "rankup gui");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void close() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package sh.okx.rankup.ranksgui;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import sh.okx.rankup.RankupPlugin;
|
||||||
|
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class RanksGuiCommand implements CommandExecutor {
|
||||||
|
private final RankupPlugin plugin;
|
||||||
|
private final RanksGuiListener listener;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||||
|
if (!(sender instanceof Player)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Player player = (Player) sender;
|
||||||
|
|
||||||
|
listener.open(new RanksGui(plugin, player));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
package sh.okx.rankup.ranksgui;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
|
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||||
|
|
||||||
|
public class RanksGuiListener implements Listener {
|
||||||
|
|
||||||
|
private final Map<Player, RanksGui> guiMap = new HashMap<>();
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void on(InventoryCloseEvent event) {
|
||||||
|
if (!(event.getPlayer() instanceof Player)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Player player = (Player) event.getPlayer();
|
||||||
|
if (guiMap.containsKey(player)) {
|
||||||
|
RanksGui ranksGui = guiMap.get(player);
|
||||||
|
if (ranksGui.getInventory() != null
|
||||||
|
&& ranksGui.getInventory() == event.getInventory()) {
|
||||||
|
guiMap.remove(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void on(InventoryClickEvent event) {
|
||||||
|
if (!(event.getWhoClicked() instanceof Player)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Player player = (Player) event.getWhoClicked();
|
||||||
|
RanksGui ranksGui = guiMap.get(player);
|
||||||
|
if (ranksGui != null && event.getInventory() == ranksGui.getInventory()) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
ranksGui.click(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void open(RanksGui gui) {
|
||||||
|
guiMap.put(gui.getPlayer(), gui);
|
||||||
|
gui.open();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# this is used for letting you know that you need to update/change your config file
|
# this is used for letting you know that you need to update/change your config file
|
||||||
version: 8
|
version: 9
|
||||||
|
|
||||||
# the locale to use for messages
|
# the locale to use for messages
|
||||||
# all messages can be customised but this allows you to
|
# all messages can be customised but this allows you to
|
||||||
@@ -8,7 +8,7 @@ version: 8
|
|||||||
locale: en
|
locale: en
|
||||||
|
|
||||||
# interval (in minutes) to check to autorankup players
|
# interval (in minutes) to check to autorankup players
|
||||||
# ranking up manually wil always be enabled
|
# ranking up manually will always be enabled
|
||||||
# set to 0 to disable
|
# set to 0 to disable
|
||||||
autorankup-interval: 0
|
autorankup-interval: 0
|
||||||
|
|
||||||
@@ -20,6 +20,10 @@ 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.
|
||||||
|
# will override the /ranks command
|
||||||
|
ranks-gui: false
|
||||||
|
|
||||||
# whether or not /prestige and /prestiges should be enabled.
|
# whether or not /prestige and /prestiges should be enabled.
|
||||||
# when a player reaches the top rank, they can do /prestige to return to the first rank,
|
# when a player reaches the top rank, they can do /prestige to return to the first rank,
|
||||||
# but you will be able to grant them an additional "prestige" group or additional items.
|
# but you will be able to grant them an additional "prestige" group or additional items.
|
||||||
|
|||||||
@@ -38,6 +38,25 @@ rankup:
|
|||||||
# this works for both the rankup and cancel blocks as well
|
# this works for both the rankup and cancel blocks as well
|
||||||
material: BLACK_STAINED_GLASS_PANE
|
material: BLACK_STAINED_GLASS_PANE
|
||||||
|
|
||||||
|
ranksgui:
|
||||||
|
title: "Ranks"
|
||||||
|
rows: 3
|
||||||
|
offset: 10
|
||||||
|
width: 7
|
||||||
|
complete:
|
||||||
|
material: GREEN_STAINED_GLASS_PANE
|
||||||
|
name: "&aRank &7{RANK} &a(completed)"
|
||||||
|
current:
|
||||||
|
material: ORANGE_STAINED_GLASS_PANE
|
||||||
|
name: "&dRankup to &7{RANK}"
|
||||||
|
incomplete:
|
||||||
|
material: RED_STAINED_GLASS_PANE
|
||||||
|
name: "&cRank &7{RANK} &c(requires rankup)"
|
||||||
|
fill:
|
||||||
|
material: BLACK_STAINED_GLASS_PANE
|
||||||
|
name: ' '
|
||||||
|
|
||||||
|
|
||||||
# you can (and probably should) you override these in rankups.yml
|
# you can (and probably should) you override these in rankups.yml
|
||||||
# to show the specific requirements for each rank.
|
# to show the specific requirements for each rank.
|
||||||
# however if you are just using money or don't need to change the message per rank, you can use any combination of:
|
# however if you are just using money or don't need to change the message per rank, you can use any combination of:
|
||||||
|
|||||||
Reference in New Issue
Block a user