FabledSkyBlock/FabledSkyBlock/Core/src/main/java/me/goodandevil/skyblock/menus/Leaderboard.java

359 lines
15 KiB
Java

package me.goodandevil.skyblock.menus;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import me.goodandevil.skyblock.utils.NumberUtil;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.ItemStack;
import me.goodandevil.skyblock.SkyBlock;
import me.goodandevil.skyblock.config.FileManager;
import me.goodandevil.skyblock.config.FileManager.Config;
import me.goodandevil.skyblock.placeholder.Placeholder;
import me.goodandevil.skyblock.playerdata.PlayerDataManager;
import me.goodandevil.skyblock.sound.SoundManager;
import me.goodandevil.skyblock.utils.item.SkullUtil;
import me.goodandevil.skyblock.utils.item.nInventoryUtil;
import me.goodandevil.skyblock.utils.item.nInventoryUtil.ClickEvent;
import me.goodandevil.skyblock.utils.item.nInventoryUtil.ClickEventHandler;
import me.goodandevil.skyblock.utils.player.OfflinePlayer;
import me.goodandevil.skyblock.utils.version.Materials;
import me.goodandevil.skyblock.utils.version.Sounds;
public class Leaderboard {
private static Leaderboard instance;
public static Leaderboard getInstance() {
if (instance == null) {
instance = new Leaderboard();
}
return instance;
}
public void open(Player player) {
SkyBlock skyblock = SkyBlock.getInstance();
PlayerDataManager playerDataManager = skyblock.getPlayerDataManager();
SoundManager soundManager = skyblock.getSoundManager();
FileManager fileManager = skyblock.getFileManager();
if (playerDataManager.hasPlayerData(player)) {
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
Viewer viewer = (Viewer) playerDataManager.getPlayerData(player).getViewer();
if (viewer.getType() == Viewer.Type.Browse) {
nInventoryUtil nInv = new nInventoryUtil(player, event -> {
if (playerDataManager.hasPlayerData(player)) {
ItemStack is = event.getItem();
if ((is.getType() == Materials.OAK_FENCE_GATE.parseMaterial()) && (is.hasItemMeta())
&& (is.getItemMeta().getDisplayName()
.equals(ChatColor.translateAlternateColorCodes('&',
configLoad.getString("Menu.Leaderboard." + Viewer.Type.Browse.name()
+ ".Item.Exit.Displayname"))))) {
soundManager.playSound(player, Sounds.CHEST_CLOSE.bukkitSound(), 1.0F, 1.0F);
return;
} else if ((is.getType() == Material.DIAMOND) && (is.hasItemMeta())
&& (is.getItemMeta().getDisplayName()
.equals(ChatColor.translateAlternateColorCodes('&',
configLoad
.getString("Menu.Leaderboard." + Viewer.Type.Browse.name()
+ ".Item.Leaderboard.Displayname")
.replace("%leaderboard", Viewer.Type.Level.name()))))) {
playerDataManager.getPlayerData(player).setViewer(new Viewer(Viewer.Type.Level));
} else if ((is.getType() == Material.GOLD_INGOT) && (is.hasItemMeta())
&& (is.getItemMeta().getDisplayName()
.equals(ChatColor.translateAlternateColorCodes('&',
configLoad
.getString("Menu.Leaderboard." + Viewer.Type.Browse.name()
+ ".Item.Leaderboard.Displayname")
.replace("%leaderboard", Viewer.Type.Bank.name()))))) {
playerDataManager.getPlayerData(player).setViewer(new Viewer(Viewer.Type.Bank));
} else if ((is.getType() == Material.EMERALD) && (is.hasItemMeta())
&& (is.getItemMeta().getDisplayName()
.equals(ChatColor.translateAlternateColorCodes('&',
configLoad
.getString("Menu.Leaderboard." + Viewer.Type.Browse.name()
+ ".Item.Leaderboard.Displayname")
.replace("%leaderboard", Viewer.Type.Votes.name()))))) {
playerDataManager.getPlayerData(player).setViewer(new Viewer(Viewer.Type.Votes));
}
soundManager.playSound(player, Sounds.NOTE_PLING.bukkitSound(), 1.0F, 1.0F);
Bukkit.getServer().getScheduler().runTaskLater(skyblock, () -> open(player), 1L);
}
});
nInv.addItem(nInv.createItem(Materials.OAK_FENCE_GATE.parseItem(),
configLoad.getString("Menu.Leaderboard." + viewer.getType().name() + ".Item.Exit.Displayname"),
null, null, null, null), 0, 4);
nInv.addItem(
nInv.createItem(new ItemStack(Material.DIAMOND), configLoad
.getString(
"Menu.Leaderboard." + viewer.getType().name() + ".Item.Leaderboard.Displayname")
.replace("%leaderboard", Viewer.Type.Level.name()),
configLoad.getStringList(
"Menu.Leaderboard." + viewer.getType().name() + ".Item.Leaderboard.Lore"),
new Placeholder[] { new Placeholder("%leaderboard", Viewer.Type.Level.name()) }, null,
null),
1);
nInv.addItem(
nInv.createItem(new ItemStack(Material.GOLD_INGOT), configLoad
.getString(
"Menu.Leaderboard." + viewer.getType().name() + ".Item.Leaderboard.Displayname")
.replace("%leaderboard", Viewer.Type.Bank.name()),
configLoad.getStringList(
"Menu.Leaderboard." + viewer.getType().name() + ".Item.Leaderboard.Lore"),
new Placeholder[] { new Placeholder("%leaderboard", Viewer.Type.Bank.name()) }, null,
null),
2);
nInv.addItem(
nInv.createItem(new ItemStack(Material.EMERALD), configLoad
.getString(
"Menu.Leaderboard." + viewer.getType().name() + ".Item.Leaderboard.Displayname")
.replace("%leaderboard", Viewer.Type.Votes.name()),
configLoad.getStringList(
"Menu.Leaderboard." + viewer.getType().name() + ".Item.Leaderboard.Lore"),
new Placeholder[] { new Placeholder("%leaderboard", Viewer.Type.Votes.name()) }, null,
null),
3);
nInv.setTitle(ChatColor.translateAlternateColorCodes('&',
configLoad.getString("Menu.Leaderboard." + viewer.getType().name() + ".Title")));
nInv.setType(InventoryType.HOPPER);
Bukkit.getServer().getScheduler().runTask(skyblock, () -> nInv.open());
} else {
nInventoryUtil nInv = new nInventoryUtil(player, event -> {
if (playerDataManager.hasPlayerData(player)) {
ItemStack is = event.getItem();
if ((is.getType() == Materials.OAK_FENCE_GATE.parseMaterial()) && (is.hasItemMeta())) {
if (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&',
configLoad.getString("Menu.Leaderboard.Leaderboard.Item.Exit.Displayname")))) {
soundManager.playSound(player, Sounds.CHEST_CLOSE.bukkitSound(), 1.0F, 1.0F);
} else if (is.getItemMeta().getDisplayName()
.equals(ChatColor.translateAlternateColorCodes('&', configLoad
.getString("Menu.Leaderboard.Leaderboard.Item.Return.Displayname")))) {
if (skyblock.getFileManager()
.getConfig(new File(skyblock.getDataFolder(), "config.yml"))
.getFileConfiguration().getBoolean("Island.Visitor.Vote")) {
playerDataManager.getPlayerData(player)
.setViewer(new Viewer(Viewer.Type.Browse));
soundManager.playSound(player, Sounds.ARROW_HIT.bukkitSound(), 1.0F, 1.0F);
Bukkit.getServer().getScheduler().runTaskLater(skyblock, () -> open(player), 1L);
} else {
soundManager.playSound(player, Sounds.CHEST_CLOSE.bukkitSound(), 1.0F, 1.0F);
}
return;
}
}
int clickedSlot = event.getSlot();
int leaderboardPosition = -1;
if (clickedSlot == 13) {
leaderboardPosition = 0;
} else if (clickedSlot == 21) {
leaderboardPosition = 1;
} else if (clickedSlot == 22) {
leaderboardPosition = 2;
} else if (clickedSlot == 23) {
leaderboardPosition = 3;
} else if (clickedSlot == 29) {
leaderboardPosition = 4;
} else if (clickedSlot == 31) {
leaderboardPosition = 5;
} else if (clickedSlot == 33) {
leaderboardPosition = 6;
} else if (clickedSlot == 37) {
leaderboardPosition = 7;
} else if (clickedSlot == 40) {
leaderboardPosition = 8;
} else if (clickedSlot == 43) {
leaderboardPosition = 9;
}
if (leaderboardPosition != -1) {
List<me.goodandevil.skyblock.leaderboard.Leaderboard> leaderboardIslands = skyblock
.getLeaderboardManager().getLeaderboard(
me.goodandevil.skyblock.leaderboard.Leaderboard.Type.valueOf(viewer.getType().name()));
if (leaderboardIslands.size() > leaderboardPosition) {
me.goodandevil.skyblock.leaderboard.Leaderboard leaderboard = leaderboardIslands.get(leaderboardPosition);
me.goodandevil.skyblock.visit.Visit visit = leaderboard.getVisit();
OfflinePlayer offlinePlayer = new OfflinePlayer(visit.getOwnerUUID());
Bukkit.getScheduler().scheduleSyncDelayedTask(skyblock, () -> Bukkit.dispatchCommand(player, "island teleport " + offlinePlayer.getName()));
}
event.setWillClose(false);
event.setWillDestroy(false);
return;
}
soundManager.playSound(player, Sounds.CHICKEN_EGG_POP.bukkitSound(), 1.0F, 1.0F);
event.setWillClose(false);
event.setWillDestroy(false);
}
});
if (fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration()
.getBoolean("Island.Visitor.Vote")) {
nInv.addItem(nInv.createItem(Materials.OAK_FENCE_GATE.parseItem(),
configLoad.getString("Menu.Leaderboard.Leaderboard.Item.Return.Displayname"), null, null,
null, null), 0, 8);
} else {
nInv.addItem(nInv.createItem(Materials.OAK_FENCE_GATE.parseItem(),
configLoad.getString("Menu.Leaderboard.Leaderboard.Item.Exit.Displayname"), null, null,
null, null), 0, 8);
}
List<me.goodandevil.skyblock.leaderboard.Leaderboard> leaderboardIslands = skyblock
.getLeaderboardManager().getLeaderboard(
me.goodandevil.skyblock.leaderboard.Leaderboard.Type.valueOf(viewer.getType().name()));
for (int i = 0; i < leaderboardIslands.size(); i++) {
me.goodandevil.skyblock.leaderboard.Leaderboard leaderboard = leaderboardIslands.get(i);
me.goodandevil.skyblock.visit.Visit visit = leaderboard.getVisit();
int itemSlot = 0;
String playerName;
String[] playerTexture;
Player targetPlayer = Bukkit.getServer().getPlayer(visit.getOwnerUUID());
if (targetPlayer == null) {
OfflinePlayer offlinePlayer = new OfflinePlayer(visit.getOwnerUUID());
playerName = offlinePlayer.getName();
playerTexture = offlinePlayer.getTexture();
} else {
playerName = targetPlayer.getName();
if (!playerDataManager.hasPlayerData(targetPlayer))
playerDataManager.createPlayerData(targetPlayer);
playerTexture = playerDataManager.getPlayerData(targetPlayer).getTexture();
}
if (leaderboard.getPosition() == 0) {
itemSlot = 13;
} else if (leaderboard.getPosition() == 1) {
itemSlot = 21;
} else if (leaderboard.getPosition() == 2) {
itemSlot = 22;
} else if (leaderboard.getPosition() == 3) {
itemSlot = 23;
} else if (leaderboard.getPosition() == 4) {
itemSlot = 29;
} else if (leaderboard.getPosition() == 5) {
itemSlot = 31;
} else if (leaderboard.getPosition() == 6) {
itemSlot = 33;
} else if (leaderboard.getPosition() == 7) {
itemSlot = 37;
} else if (leaderboard.getPosition() == 8) {
itemSlot = 40;
} else if (leaderboard.getPosition() == 9) {
itemSlot = 43;
}
List<String> itemLore = new ArrayList<>();
for (String itemLoreList : configLoad.getStringList(
"Menu.Leaderboard.Leaderboard.Item.Island." + viewer.getType().name() + ".Lore")) {
if (itemLoreList.contains("%signature")) {
if (visit.getSiganture() == null || visit.getSiganture().size() == 0) {
itemLore.add(
configLoad.getString("Menu.Leaderboard.Leaderboard.Item.Island.Word.Empty"));
} else {
for (String signatureList : visit.getSiganture()) {
itemLore.add(signatureList);
}
}
} else {
itemLore.add(itemLoreList);
}
}
nInv.addItem(
nInv.createItem(SkullUtil.create(playerTexture[0], playerTexture[1]),
configLoad.getString("Menu.Leaderboard.Leaderboard.Item.Island.Displayname")
.replace(
"%owner", playerName)
.replace("%position", "" + (leaderboard.getPosition() + 1)),
itemLore,
new Placeholder[] {
new Placeholder("%position", "" + (leaderboard.getPosition() + 1)),
new Placeholder("%owner", playerName),
new Placeholder("%level", "" + visit.getLevel().getLevel()),
new Placeholder("%balance", NumberUtil.formatNumberByDecimal(visit.getBankBalance())),
new Placeholder("%votes", "" + visit.getVoters().size()),
new Placeholder("%members", "" + visit.getMembers()) },
null, null),
itemSlot);
}
int[] itemSlots = new int[] { 13, 21, 22, 23, 29, 31, 33, 37, 40, 43 };
for (int i = 0; i < itemSlots.length; i++) {
if (!nInv.getItems().containsKey(itemSlots[i])) {
nInv.addItem(nInv.createItem(SkullUtil.create(
"gi+wnQt/y4Z6E9rn65iDWmt8vUOM2WXY66XvtydqDJZTzwgFrjVcx2c5YwdzvtOIRtiX2nZt4n2uWesUFKb59xS24YWbxCDXnalHhCpPFcIP58SQbCm9AYp3UPzkcRNWzuV4BddrS608QQZGyIFOUaLPOPasGITZu51VLcOKcTyFOCKu1QE2yRo1orTH8bWfdpE769BB/VYGdny0qJtm1amc12wGiVifMJRutZmYo2ZdA0APhIJVaNsPppNESVcbeBCvk60l4QK43C/p98/QEe5U6UJ6Z6N01pBQcswubMu8lCuPLasep+vX3v2K+Ui9jnTQNreGNIZPWVjf6V1GH4xMbbUVQJsoPdcaXG855VdzyoW+kyHdWYEojSn0qAY/moH6JCLnx6PLCv9mITSvOIUHq8ITet0M7Z9KALY5s6eg6VdA8TvClRy2TTm9tIRt//TJo5JxBoTYujawGNSR7ryODj2UEDQ2xOyWSagxAXZpispdrO5jHxRmBZUwX9vxnAp+CNWxifpu9sINJTlqYsT/KlGOJQC483gv5B6Nm5VBB1DRFmQkohzO6Wc2eDixgEbaU795GlLxrNaFfNjVH6Bwr1e7df2H3nE0P0bexs4wYdWplijn4gPyHwjT2LDBPGFQK3Vo2SlaXfPYbkIHX21c9qaz3eWHpLEXUBQfnWc=",
"eyJ0aW1lc3RhbXAiOjE1MzE3MTcxNjY3MDAsInByb2ZpbGVJZCI6IjYwNmUyZmYwZWQ3NzQ4NDI5ZDZjZTFkMzMyMWM3ODM4IiwicHJvZmlsZU5hbWUiOiJNSEZfUXVlc3Rpb24iLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2QzNGUwNjNjYWZiNDY3YTVjOGRlNDNlYzc4NjE5Mzk5ZjM2OWY0YTUyNDM0ZGE4MDE3YTk4M2NkZDkyNTE2YTAifX19"),
configLoad.getString("Menu.Leaderboard.Leaderboard.Item.Empty.Displayname")
.replace("%position", "" + (i + 1)),
configLoad.getStringList("Menu.Leaderboard.Leaderboard.Item.Empty.Lore"),
new Placeholder[] { new Placeholder("%position", "" + (i + 1)) }, null, null),
itemSlots[i]);
}
}
nInv.setTitle(ChatColor.translateAlternateColorCodes('&',
configLoad.getString("Menu.Leaderboard.Leaderboard.Title").replace("%leaderboard",
viewer.getType().name())));
nInv.setRows(6);
Bukkit.getServer().getScheduler().runTask(skyblock, () -> nInv.open());
}
}
}
public static class Viewer {
private Type type;
public Viewer(Type type) {
this.type = type;
}
public Type getType() {
return type;
}
public enum Type {
Browse, Level, Bank, Votes
}
}
}