package me.lethunderhawk.clans.gui; import me.lethunderhawk.clans.Clan; import me.lethunderhawk.clans.claim.Claim; import me.lethunderhawk.clans.claim.ClaimManager; import me.lethunderhawk.fluxapi.FluxService; import me.lethunderhawk.fluxapi.util.gui.ConfirmationMenu; import me.lethunderhawk.fluxapi.util.gui.InventoryGUI; import me.lethunderhawk.fluxapi.util.gui.input.SignMenuFactory; import me.lethunderhawk.main.BazaarFlux; import me.lethunderhawk.fluxapi.util.UnItalic; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import java.util.List; public class ClaimSettingsGUI extends InventoryGUI { private final Player player; private final Clan clan; public ClaimSettingsGUI(Player player, Clan clan) { super("Claim Settings", 36); this.player = player; this.clan = clan; } private void buildItems() { final int[] slot = {0}; clan.getClaims().forEach(claim -> { setItemWithClickAction(slot[0], buildItemFromClaim(claim), (p, type)->{ if(type == ClickType.RIGHT || type == ClickType.SHIFT_RIGHT){ renameClaim(claim); update(); }else if(type == ClickType.LEFT || type == ClickType.SHIFT_LEFT){ showRemoveClaimDialog(claim, p); } }); slot[0]++; }); } private void showRemoveClaimDialog(Claim claim, Player p) { ConfirmationMenu confirmationMenu = new ConfirmationMenu("Delete Claim?", (pl) ->{ removeClaim(claim); }); openNext(p, confirmationMenu); } private void removeClaim(Claim claim) { FluxService.get(ClaimManager.class).removeClaim(claim); } private void renameClaim(Claim claim) { SignMenuFactory.Menu menu = new SignMenuFactory(FluxService.get(BazaarFlux.class)).newMenu(List.of("", "^^^^^^^^^^^^", "Enter the new", "name of the claim")) .reopenIfFail(true) .response((p, strings) -> { rename(strings[0], claim); update(); open(p); return true; }); menu.open(player); } private void rename(String input, Claim claim) { claim.setName(input); } private ItemStack buildItemFromClaim(Claim claim) { ItemStack item = new ItemStack(Material.GRASS_BLOCK); ItemMeta meta = item.getItemMeta(); meta.displayName(Component.text(claim.getName(), NamedTextColor.GOLD)); meta.lore(List.of( Component.text("Spans from x=" + claim.getMaxX() + ", z=" + claim.getMaxZ(), NamedTextColor.GRAY), Component.text("to x=" + claim.getMinX() + ", z=" + claim.getMinZ(), NamedTextColor.GRAY), Component.text("Volume: " + claim.getVolume() + " blocks²", NamedTextColor.GRAY), Component.text(""), Component.text("Left click to remove", NamedTextColor.YELLOW), Component.text("Right click to rename", NamedTextColor.YELLOW) )); item.setItemMeta(UnItalic.removeItalicFromMeta(meta)); return item; } @Override public void buildContent() { fillGlassPaneBackground(); setBackButton(30); setCloseButton(31); buildItems(); } @Override public void update() { buildContent(); } }