ClaimSettingsGUI.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package me.lethunderhawk.clans.gui;
  2. import me.lethunderhawk.clans.Clan;
  3. import me.lethunderhawk.clans.claim.Claim;
  4. import me.lethunderhawk.clans.claim.ClaimManager;
  5. import me.lethunderhawk.fluxapi.FluxService;
  6. import me.lethunderhawk.fluxapi.util.gui.ConfirmationMenu;
  7. import me.lethunderhawk.fluxapi.util.gui.InventoryGUI;
  8. import me.lethunderhawk.fluxapi.util.gui.input.SignMenuFactory;
  9. import me.lethunderhawk.main.BazaarFlux;
  10. import me.lethunderhawk.fluxapi.util.UnItalic;
  11. import net.kyori.adventure.text.Component;
  12. import net.kyori.adventure.text.format.NamedTextColor;
  13. import org.bukkit.Material;
  14. import org.bukkit.entity.Player;
  15. import org.bukkit.event.inventory.ClickType;
  16. import org.bukkit.inventory.ItemStack;
  17. import org.bukkit.inventory.meta.ItemMeta;
  18. import java.util.List;
  19. public class ClaimSettingsGUI extends InventoryGUI {
  20. private final Player player;
  21. private final Clan clan;
  22. public ClaimSettingsGUI(Player player, Clan clan) {
  23. super("Claim Settings", 36);
  24. this.player = player;
  25. this.clan = clan;
  26. }
  27. private void buildItems() {
  28. final int[] slot = {0};
  29. clan.getClaims().forEach(claim -> {
  30. setItemWithClickAction(slot[0], buildItemFromClaim(claim), (p, type)->{
  31. if(type == ClickType.RIGHT || type == ClickType.SHIFT_RIGHT){
  32. renameClaim(claim);
  33. update();
  34. }else if(type == ClickType.LEFT || type == ClickType.SHIFT_LEFT){
  35. showRemoveClaimDialog(claim, p);
  36. }
  37. });
  38. slot[0]++;
  39. });
  40. }
  41. private void showRemoveClaimDialog(Claim claim, Player p) {
  42. ConfirmationMenu confirmationMenu = new ConfirmationMenu("Delete Claim?", (pl) ->{
  43. removeClaim(claim);
  44. });
  45. openNext(p, confirmationMenu);
  46. }
  47. private void removeClaim(Claim claim) {
  48. FluxService.get(ClaimManager.class).removeClaim(claim);
  49. }
  50. private void renameClaim(Claim claim) {
  51. SignMenuFactory.Menu menu = new SignMenuFactory(FluxService.get(BazaarFlux.class)).newMenu(List.of("", "^^^^^^^^^^^^", "Enter the new", "name of the claim"))
  52. .reopenIfFail(true)
  53. .response((p, strings) -> {
  54. rename(strings[0], claim);
  55. update();
  56. open(p);
  57. return true;
  58. });
  59. menu.open(player);
  60. }
  61. private void rename(String input, Claim claim) {
  62. claim.setName(input);
  63. }
  64. private ItemStack buildItemFromClaim(Claim claim) {
  65. ItemStack item = new ItemStack(Material.GRASS_BLOCK);
  66. ItemMeta meta = item.getItemMeta();
  67. meta.displayName(Component.text(claim.getName(), NamedTextColor.GOLD));
  68. meta.lore(List.of(
  69. Component.text("Spans from x=" + claim.getMaxX() + ", z=" + claim.getMaxZ(), NamedTextColor.GRAY),
  70. Component.text("to x=" + claim.getMinX() + ", z=" + claim.getMinZ(), NamedTextColor.GRAY),
  71. Component.text("Volume: " + claim.getVolume() + " blocks²", NamedTextColor.GRAY),
  72. Component.text(""),
  73. Component.text("Left click to remove", NamedTextColor.YELLOW),
  74. Component.text("Right click to rename", NamedTextColor.YELLOW)
  75. ));
  76. item.setItemMeta(UnItalic.removeItalicFromMeta(meta));
  77. return item;
  78. }
  79. @Override
  80. public void buildContent() {
  81. fillGlassPaneBackground();
  82. setBackButton(30);
  83. setCloseButton(31);
  84. buildItems();
  85. }
  86. @Override
  87. public void update() {
  88. buildContent();
  89. }
  90. }