mirror of
https://github.com/plexusorg/Plex.git
synced 2026-07-14 21:44:55 +00:00
Overhaul menu system and simplify it heavily, separating Pageable Menus and regular Menus into two different implementations
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
package dev.plex.menu.impl;
|
||||
|
||||
import dev.plex.menu.AbstractMenu;
|
||||
import dev.plex.menu.pagination.PageableMenu;
|
||||
import dev.plex.util.item.ItemBuilder;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Taah
|
||||
* @since 8:44 AM [02-09-2023]
|
||||
*/
|
||||
public class MaterialMenu extends PageableMenu<Material>
|
||||
{
|
||||
public MaterialMenu()
|
||||
{
|
||||
super("<dark_aqua><bold>Materials", AbstractMenu.Rows.SIX);
|
||||
onClick((inventoryView, inventory, player, itemStack) ->
|
||||
{
|
||||
player.sendMessage(itemStack.displayName());
|
||||
return true;
|
||||
});
|
||||
this.init();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ItemStack toItem(Material object)
|
||||
{
|
||||
return new ItemBuilder(object).displayName("<blue>" + object.name()).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<Material> list()
|
||||
{
|
||||
return Arrays.stream(Material.values()).filter(material -> !material.isAir()).toList();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package dev.plex.menu.impl;
|
||||
|
||||
import dev.plex.Plex;
|
||||
import dev.plex.menu.AbstractMenu;
|
||||
import dev.plex.menu.pagination.PageableMenu;
|
||||
import dev.plex.player.PlexPlayer;
|
||||
import dev.plex.punishment.Punishment;
|
||||
import dev.plex.util.TimeUtils;
|
||||
import dev.plex.util.item.ItemBuilder;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class PunishedPlayerMenu extends PageableMenu<Punishment>
|
||||
{
|
||||
private final PlexPlayer punishedPlayer;
|
||||
public PunishedPlayerMenu(PlexPlayer player)
|
||||
{
|
||||
super("<red><bold>Punishments - " + player.getName(), AbstractMenu.Rows.SIX);
|
||||
this.punishedPlayer = player;
|
||||
onClick((inventoryView, itemStacks, player1, itemStack) -> true);
|
||||
this.init();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ItemStack toItem(Punishment object)
|
||||
{
|
||||
return new ItemBuilder(Material.PAPER).displayName("<!italic><red>" + object.getType().name()).lore("<!italic><red>By: <gold>" + (object.getPunisher() == null ? "CONSOLE" : Plex.get().getSqlPlayerData().getNameByUUID(object.getPunished())), "<!italic><red>Expire(d/s): <gold>" + TimeUtils.useTimezone(object.getEndDate()), "<!italic><red>Reason: <gold>" + object.getReason()).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<Punishment> list()
|
||||
{
|
||||
return this.punishedPlayer.getPunishments();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
package dev.plex.menu.impl;
|
||||
|
||||
import dev.plex.cache.DataUtils;
|
||||
import dev.plex.menu.AbstractMenu;
|
||||
import dev.plex.menu.pagination.PageableMenu;
|
||||
import dev.plex.player.PlexPlayer;
|
||||
import dev.plex.util.PlexLog;
|
||||
import dev.plex.util.item.ItemBuilder;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.SkullMeta;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Taah
|
||||
* @since 9:27 AM [02-09-2023]
|
||||
*/
|
||||
public class PunishmentMenu extends PageableMenu<Player>
|
||||
{
|
||||
public PunishmentMenu()
|
||||
{
|
||||
super("<aqua><bold>Punishments", AbstractMenu.Rows.SIX);
|
||||
PlexLog.debug("list: {0}", list().size());
|
||||
onClick((inventoryView, itemStacks, player, itemStack) ->
|
||||
{
|
||||
if (itemStack.getType() != Material.PLAYER_HEAD) return true;
|
||||
final SkullMeta meta = (SkullMeta) itemStack.getItemMeta();
|
||||
if (meta.getOwningPlayer() == null)
|
||||
{
|
||||
meta.setOwningPlayer(Bukkit.getOfflinePlayer("markbyron"));
|
||||
}
|
||||
PlexPlayer punishedPlayer = DataUtils.getPlayer(meta.getOwningPlayer().getUniqueId());
|
||||
if (punishedPlayer == null)
|
||||
{
|
||||
player.sendMessage(Component.text("This player does not exist. Try doing /punishments <player> instead.").color(NamedTextColor.RED));
|
||||
player.closeInventory();
|
||||
return true;
|
||||
}
|
||||
new PunishedPlayerMenu(punishedPlayer).open(player);
|
||||
return true;
|
||||
});
|
||||
|
||||
this.init();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ItemStack toItem(Player object)
|
||||
{
|
||||
return new ItemBuilder(Material.PLAYER_HEAD).owner(object).displayName("<!italic><yellow>" + object.getName()).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<Player> list()
|
||||
{
|
||||
return Bukkit.getOnlinePlayers().stream().map(OfflinePlayer::getPlayer).toList();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
package dev.plex.menu.impl;
|
||||
|
||||
import dev.plex.Plex;
|
||||
import dev.plex.menu.AbstractMenu;
|
||||
import dev.plex.util.PlexUtils;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.InventoryView;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ToggleMenu extends AbstractMenu
|
||||
{
|
||||
private final Plex plugin;
|
||||
|
||||
public ToggleMenu()
|
||||
{
|
||||
super("<green><bold>Toggles", Rows.ONE);
|
||||
this.plugin = Plex.get();
|
||||
resetExplosionItem(this.inventory());
|
||||
resetFluidspreadItem(this.inventory());
|
||||
resetDropsItem(this.inventory());
|
||||
resetRedstoneItem(this.inventory());
|
||||
}
|
||||
|
||||
private void resetExplosionItem(Inventory inventory)
|
||||
{
|
||||
ItemStack explosions = new ItemStack(Material.TNT);
|
||||
ItemMeta explosionsItemMeta = explosions.getItemMeta();
|
||||
explosionsItemMeta.displayName(PlexUtils.mmDeserialize("<!italic><light_purple>Toggle explosions"));
|
||||
explosionsItemMeta.lore(List.of(PlexUtils.mmDeserialize("<!italic><yellow>Explosions are " + (plugin.toggles.getBoolean("explosions") ? "<red>enabled" : "<green>disabled"))));
|
||||
explosions.setItemMeta(explosionsItemMeta);
|
||||
inventory.setItem(0, explosions);
|
||||
}
|
||||
|
||||
private void resetFluidspreadItem(Inventory inventory)
|
||||
{
|
||||
ItemStack water = new ItemStack(Material.WATER_BUCKET);
|
||||
ItemMeta waterItemMeta = water.getItemMeta();
|
||||
waterItemMeta.displayName(PlexUtils.mmDeserialize("<!italic><light_purple>Toggle fluid spread"));
|
||||
waterItemMeta.lore(List.of(PlexUtils.mmDeserialize("<!italic><yellow>Fluid spread is " + (plugin.toggles.getBoolean("fluidspread") ? "<green>enabled" : "<red>disabled"))));
|
||||
water.setItemMeta(waterItemMeta);
|
||||
inventory.setItem(1, water);
|
||||
}
|
||||
|
||||
private void resetDropsItem(Inventory inventory)
|
||||
{
|
||||
ItemStack feather = new ItemStack(Material.FEATHER);
|
||||
ItemMeta featherItemMeta = feather.getItemMeta();
|
||||
featherItemMeta.displayName(PlexUtils.mmDeserialize("<!italic><light_purple>Toggle drops"));
|
||||
featherItemMeta.lore(List.of(PlexUtils.mmDeserialize("<!italic><yellow>Drops are " + (plugin.toggles.getBoolean("drops") ? "<green>enabled" : "<red>disabled"))));
|
||||
feather.setItemMeta(featherItemMeta);
|
||||
inventory.setItem(2, feather);
|
||||
}
|
||||
|
||||
private void resetRedstoneItem(Inventory inventory)
|
||||
{
|
||||
ItemStack redstone = new ItemStack(Material.REDSTONE);
|
||||
ItemMeta redstoneItemMeta = redstone.getItemMeta();
|
||||
redstoneItemMeta.displayName(PlexUtils.mmDeserialize("<!italic><light_purple>Redstone"));
|
||||
redstoneItemMeta.lore(List.of(PlexUtils.mmDeserialize("<!italic><yellow>Redstone is " + (plugin.toggles.getBoolean("redstone") ? "<green>enabled" : "<red>disabled"))));
|
||||
redstone.setItemMeta(redstoneItemMeta);
|
||||
inventory.setItem(3, redstone);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onClick(InventoryView view, Inventory inventory, Player player, ItemStack clicked)
|
||||
{
|
||||
if (clicked.getType() == Material.TNT)
|
||||
{
|
||||
plugin.toggles.set("explosions", !plugin.toggles.getBoolean("explosions"));
|
||||
resetExplosionItem(inventory);
|
||||
player.sendMessage(PlexUtils.mmDeserialize("<gray>Toggled explosions."));
|
||||
}
|
||||
if (clicked.getType() == Material.WATER_BUCKET)
|
||||
{
|
||||
plugin.toggles.set("fluidspread", !plugin.toggles.getBoolean("fluidspread"));
|
||||
resetFluidspreadItem(inventory);
|
||||
player.sendMessage(PlexUtils.mmDeserialize("<gray>Toggled fluid spread."));
|
||||
}
|
||||
if (clicked.getType() == Material.FEATHER)
|
||||
{
|
||||
plugin.toggles.set("drops", !plugin.toggles.getBoolean("drops"));
|
||||
resetDropsItem(inventory);
|
||||
player.sendMessage(PlexUtils.mmDeserialize("<gray>Toggled drops."));
|
||||
}
|
||||
if (clicked.getType() == Material.REDSTONE)
|
||||
{
|
||||
plugin.toggles.set("redstone", !plugin.toggles.getBoolean("redstone"));
|
||||
resetRedstoneItem(inventory);
|
||||
player.sendMessage(PlexUtils.mmDeserialize("<gray>Toggled redstone."));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user