2021-01-03 07:21:15 +00:00
|
|
|
package dev.plex.menu;
|
2020-11-10 04:08:37 +00:00
|
|
|
|
|
|
|
import com.google.common.collect.Lists;
|
2022-04-04 08:36:50 +00:00
|
|
|
import dev.plex.cache.DataUtils;
|
|
|
|
import dev.plex.cache.player.PlayerCache;
|
|
|
|
import dev.plex.player.PlexPlayer;
|
2021-01-03 07:21:15 +00:00
|
|
|
import dev.plex.punishment.Punishment;
|
2022-04-10 22:27:25 +00:00
|
|
|
import dev.plex.util.PlexUtils;
|
2021-01-03 07:21:15 +00:00
|
|
|
import dev.plex.util.menu.AbstractMenu;
|
2022-02-25 07:09:55 +00:00
|
|
|
import java.util.Collections;
|
2022-01-27 21:23:01 +00:00
|
|
|
import java.util.List;
|
2022-02-25 07:09:55 +00:00
|
|
|
import net.kyori.adventure.text.Component;
|
|
|
|
import net.kyori.adventure.text.format.NamedTextColor;
|
2020-11-10 04:08:37 +00:00
|
|
|
import org.bukkit.Bukkit;
|
|
|
|
import org.bukkit.ChatColor;
|
|
|
|
import org.bukkit.Material;
|
|
|
|
import org.bukkit.OfflinePlayer;
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
import org.bukkit.event.EventHandler;
|
|
|
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
|
|
|
import org.bukkit.inventory.Inventory;
|
|
|
|
import org.bukkit.inventory.ItemStack;
|
|
|
|
import org.bukkit.inventory.meta.ItemMeta;
|
|
|
|
import org.bukkit.inventory.meta.SkullMeta;
|
|
|
|
|
|
|
|
public class PunishedPlayerMenu extends AbstractMenu
|
|
|
|
{
|
2022-04-04 08:36:50 +00:00
|
|
|
private final PlexPlayer punishedPlayer;
|
2020-11-10 04:08:37 +00:00
|
|
|
|
2021-01-03 07:21:15 +00:00
|
|
|
private final List<Inventory> inventories = Lists.newArrayList();
|
2020-11-10 04:08:37 +00:00
|
|
|
|
2022-04-04 08:36:50 +00:00
|
|
|
public PunishedPlayerMenu(PlexPlayer player)
|
2022-01-30 21:03:47 +00:00
|
|
|
{
|
2020-11-10 04:08:37 +00:00
|
|
|
super("§c§lPunishments");
|
|
|
|
this.punishedPlayer = player;
|
|
|
|
for (int i = 0; i <= punishedPlayer.getPunishments().size() / 53; i++)
|
|
|
|
{
|
2022-04-10 22:27:25 +00:00
|
|
|
Inventory inventory = Bukkit.createInventory(null, 54, PlexUtils.mmDeserialize("Punishments Page " + (i + 1)));
|
2020-11-10 04:08:37 +00:00
|
|
|
ItemStack nextPage = new ItemStack(Material.FEATHER);
|
|
|
|
ItemMeta meta = nextPage.getItemMeta();
|
2022-02-25 07:09:55 +00:00
|
|
|
meta.displayName(Component.text("Next Page").color(NamedTextColor.LIGHT_PURPLE));
|
2020-11-10 04:08:37 +00:00
|
|
|
nextPage.setItemMeta(meta);
|
2022-01-30 21:03:47 +00:00
|
|
|
|
2020-11-10 04:08:37 +00:00
|
|
|
ItemStack previousPage = new ItemStack(Material.FEATHER);
|
|
|
|
ItemMeta meta2 = previousPage.getItemMeta();
|
2022-02-25 07:09:55 +00:00
|
|
|
meta2.displayName(Component.text("Next Page").color(NamedTextColor.LIGHT_PURPLE));
|
2020-11-10 04:08:37 +00:00
|
|
|
previousPage.setItemMeta(meta2);
|
|
|
|
|
|
|
|
ItemStack back = new ItemStack(Material.BARRIER);
|
|
|
|
ItemMeta meta3 = back.getItemMeta();
|
2022-02-25 07:09:55 +00:00
|
|
|
meta3.displayName(Component.text("Next Page").color(NamedTextColor.LIGHT_PURPLE));
|
2020-11-10 04:08:37 +00:00
|
|
|
back.setItemMeta(meta3);
|
2022-01-30 21:03:47 +00:00
|
|
|
|
2020-11-10 04:08:37 +00:00
|
|
|
inventory.setItem(50, nextPage);
|
|
|
|
inventory.setItem(49, back);
|
|
|
|
inventory.setItem(48, previousPage);
|
|
|
|
inventories.add(inventory);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-01-30 21:03:47 +00:00
|
|
|
public List<Inventory> getInventory()
|
|
|
|
{
|
2020-11-10 04:08:37 +00:00
|
|
|
return inventories;
|
|
|
|
}
|
|
|
|
|
2022-01-30 21:03:47 +00:00
|
|
|
public void openInv(Player player, int index)
|
|
|
|
{
|
2020-11-10 04:08:37 +00:00
|
|
|
int currentItemIndex = 0;
|
|
|
|
int currentInvIndex = 0;
|
|
|
|
for (Punishment punishment : punishedPlayer.getPunishments())
|
|
|
|
{
|
|
|
|
Inventory inv = inventories.get(currentInvIndex);
|
|
|
|
if (currentInvIndex > inventories.size() - 1)
|
|
|
|
{
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2022-01-30 21:03:47 +00:00
|
|
|
if (currentItemIndex == inv.getSize() - 1)
|
|
|
|
{
|
2020-11-10 04:08:37 +00:00
|
|
|
currentInvIndex++;
|
|
|
|
currentItemIndex = 0;
|
|
|
|
inv = inventories.get(currentInvIndex);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ItemStack item = new ItemStack(Material.NETHER_STAR);
|
|
|
|
ItemMeta meta = item.getItemMeta();
|
2022-02-25 07:09:55 +00:00
|
|
|
meta.displayName(Component.text(punishment.getType().name().toUpperCase()).color(NamedTextColor.RED));
|
|
|
|
meta.lore(Collections.singletonList(Component.text("Reason: ").color(NamedTextColor.YELLOW).append(Component.newline()).append(Component.text(punishment.getReason()).color(NamedTextColor.GRAY))));
|
2020-11-10 04:08:37 +00:00
|
|
|
item.setItemMeta(meta);
|
|
|
|
|
|
|
|
inv.setItem(currentItemIndex, item);
|
|
|
|
|
|
|
|
currentItemIndex++;
|
|
|
|
}
|
|
|
|
player.openInventory(inventories.get(index));
|
|
|
|
}
|
|
|
|
|
|
|
|
@EventHandler
|
|
|
|
public void onClick(InventoryClickEvent event)
|
|
|
|
{
|
2022-01-30 21:03:47 +00:00
|
|
|
if (event.getClickedInventory() == null)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
2020-11-10 04:08:37 +00:00
|
|
|
Inventory inv = event.getClickedInventory();
|
2022-01-30 21:03:47 +00:00
|
|
|
if (!isValidInventory(inv))
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (event.getCurrentItem() == null)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
2020-11-10 04:08:37 +00:00
|
|
|
ItemStack item = event.getCurrentItem();
|
2022-02-26 06:26:42 +00:00
|
|
|
if (!item.hasItemMeta())
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (!item.getItemMeta().hasDisplayName())
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
2020-11-10 04:08:37 +00:00
|
|
|
event.setCancelled(true);
|
|
|
|
if (item.getType() == Material.FEATHER)
|
|
|
|
{
|
2022-02-25 07:09:55 +00:00
|
|
|
if (item.getItemMeta().displayName().equals(Component.text("Next Page").color(NamedTextColor.LIGHT_PURPLE)))
|
2020-11-10 04:08:37 +00:00
|
|
|
{
|
2022-01-30 21:03:47 +00:00
|
|
|
if (getCurrentInventoryIndex(inv) + 1 > inventories.size() - 1)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (inventories.get(getCurrentInventoryIndex(inv) + 1).getContents().length == 0)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
openInv((Player)event.getWhoClicked(), getCurrentInventoryIndex(inv) + 1);
|
|
|
|
}
|
2022-02-25 07:09:55 +00:00
|
|
|
else if (item.getItemMeta().displayName().equals(Component.text("Previous Page").color(NamedTextColor.LIGHT_PURPLE)))
|
2020-11-10 04:08:37 +00:00
|
|
|
{
|
2022-01-30 21:03:47 +00:00
|
|
|
if (getCurrentInventoryIndex(inv) - 1 < 0)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (getCurrentInventoryIndex(inv) - 1 > inventories.size() - 1)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (inventories.get(getCurrentInventoryIndex(inv) - 1).getContents().length == 0)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
openInv((Player)event.getWhoClicked(), getCurrentInventoryIndex(inv) - 1);
|
2020-11-10 04:08:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2022-01-30 21:03:47 +00:00
|
|
|
}
|
|
|
|
else if (item.getType() == Material.BARRIER)
|
2020-11-10 04:08:37 +00:00
|
|
|
{
|
2022-01-30 21:03:47 +00:00
|
|
|
new PunishmentMenu().openInv((Player)event.getWhoClicked(), 0);
|
|
|
|
}
|
|
|
|
else if (item.getType() == Material.PLAYER_HEAD)
|
2020-11-10 04:08:37 +00:00
|
|
|
{
|
2022-01-30 21:03:47 +00:00
|
|
|
SkullMeta meta = (SkullMeta)item.getItemMeta();
|
2020-11-10 04:08:37 +00:00
|
|
|
OfflinePlayer player = meta.getOwningPlayer();
|
|
|
|
assert player != null;
|
2022-04-04 08:36:50 +00:00
|
|
|
PlexPlayer punishedPlayer = DataUtils.getPlayer(player.getUniqueId()) == null ? null : PlayerCache.getPlexPlayer(player.getUniqueId());
|
2020-11-10 04:08:37 +00:00
|
|
|
if (punishedPlayer == null)
|
|
|
|
{
|
|
|
|
event.getWhoClicked().sendMessage(ChatColor.RED + "This player does not exist. Try doing /punishments <player> instead.");
|
|
|
|
event.getWhoClicked().closeInventory();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getCurrentInventoryIndex(Inventory inventory)
|
|
|
|
{
|
|
|
|
for (int i = 0; i <= inventories.size() - 1; i++)
|
|
|
|
{
|
|
|
|
if (inventories.get(i).hashCode() == inventory.hashCode())
|
|
|
|
{
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
private boolean isValidInventory(Inventory inventory)
|
|
|
|
{
|
|
|
|
return inventories.contains(inventory);
|
|
|
|
}
|
|
|
|
}
|