ClanSettingsGUI.java 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. package me.lethunderhawk.clans.gui;
  2. import me.lethunderhawk.fluxapi.util.gui.InventoryGUI;
  3. import me.lethunderhawk.clans.settings.ClanSetting;
  4. import me.lethunderhawk.clans.settings.ClanSettings;
  5. import me.lethunderhawk.fluxapi.util.UnItalic;
  6. import net.kyori.adventure.text.Component;
  7. import net.kyori.adventure.text.format.NamedTextColor;
  8. import org.bukkit.Material;
  9. import org.bukkit.entity.Player;
  10. import org.bukkit.inventory.ItemFlag;
  11. import org.bukkit.inventory.ItemStack;
  12. import org.bukkit.inventory.meta.ItemMeta;
  13. import java.util.List;
  14. import java.util.concurrent.atomic.AtomicInteger;
  15. public class ClanSettingsGUI extends InventoryGUI {
  16. private final Player player;
  17. private final ClanSettings settings;
  18. public ClanSettingsGUI(Player player, ClanSettings settings) {
  19. super("Clan Settings", 36);
  20. this.player = player;
  21. this.settings = settings;
  22. }
  23. private void buildItems() {
  24. AtomicInteger slot = new AtomicInteger(9);
  25. settings.asMap().forEach((setting, value) -> {
  26. ItemStack settingsItem;
  27. if(value == true){
  28. settingsItem = new ItemStack(Material.LIME_STAINED_GLASS_PANE);
  29. }else{
  30. settingsItem = new ItemStack(Material.RED_STAINED_GLASS_PANE);
  31. }
  32. ItemMeta meta = settingsItem.getItemMeta();
  33. meta.displayName(
  34. value ? Component.text("Enabled", NamedTextColor.GREEN) : Component.text("Disabled", NamedTextColor.RED)
  35. );
  36. settingsItem.setItemMeta(UnItalic.removeItalicFromMeta(meta));
  37. setItemWithClickAction(slot.get() -9, buildDecorationItem(setting), (p, type) ->{
  38. toggleAndUpdate(p, setting);
  39. });
  40. setItemWithClickAction(slot.get(), settingsItem, (p, type) ->{
  41. toggleAndUpdate(p, setting);
  42. });
  43. slot.getAndIncrement();
  44. });
  45. }
  46. private void toggleAndUpdate(Player p, ClanSetting setting) {
  47. settings.toggleSetting(setting);
  48. update();
  49. }
  50. private ItemStack buildDecorationItem(ClanSetting setting) {
  51. switch (setting){
  52. case ClanSetting.BLOCK_BREAK -> {
  53. List<Component> lore = List.of(
  54. Component.text(""),
  55. Component.text("Enable / Disable the ability of other", NamedTextColor.GRAY),
  56. Component.text("Players not in your clan to", NamedTextColor.GRAY),
  57. Component.text("break all kinds of blocks!", NamedTextColor.GRAY)
  58. );
  59. return buildItemFromParams(Material.DIAMOND_PICKAXE, Component.text("Breaking blocks"), lore);
  60. }
  61. case ClanSetting.BLOCK_PLACE -> {
  62. List<Component> lore = List.of(
  63. Component.text(""),
  64. Component.text("Enable / Disable the ability of other", NamedTextColor.GRAY),
  65. Component.text("Players not in your clan to", NamedTextColor.GRAY),
  66. Component.text("place blocks inside your territory!", NamedTextColor.GRAY)
  67. );
  68. return buildItemFromParams(Material.OAK_PLANKS, Component.text("Placing Blocks"), lore);
  69. }
  70. case ClanSetting.INTERACT_IGNITION -> {
  71. List<Component> lore = List.of(
  72. Component.text(""),
  73. Component.text("Allow or prevent outsiders from", NamedTextColor.GRAY),
  74. Component.text("using flint and steel to ignite", NamedTextColor.GRAY),
  75. Component.text("blocks within your clan land!", NamedTextColor.GRAY),
  76. Component.text(""),
  77. Component.text("WARNING: This doesn't prevent", NamedTextColor.RED),
  78. Component.text("others from igniting TNT!", NamedTextColor.RED)
  79. );
  80. return buildItemFromParams(Material.FLINT_AND_STEEL, Component.text("Igniting blocks"), lore);
  81. }
  82. case ClanSetting.INTERACT_BLOCK -> {
  83. List<Component> lore = List.of(
  84. Component.text(""),
  85. Component.text("Controls whether non-clan players", NamedTextColor.GRAY),
  86. Component.text("can interact with mechanisms like", NamedTextColor.GRAY),
  87. Component.text("buttons, levers, and doors!", NamedTextColor.GRAY)
  88. );
  89. return buildItemFromParams(Material.LEVER, Component.text("Interacting with blocks"), lore);
  90. }
  91. case ClanSetting.INTERACT_ENTITY -> {
  92. List<Component> lore = List.of(
  93. Component.text(""),
  94. Component.text("Determines if outsiders may", NamedTextColor.GRAY),
  95. Component.text("right-click or otherwise interact", NamedTextColor.GRAY),
  96. Component.text("with animals and NPC entities!", NamedTextColor.GRAY)
  97. );
  98. return buildItemFromParams(Material.VILLAGER_SPAWN_EGG, Component.text("Interacting with entities"), lore);
  99. }
  100. case ClanSetting.OPEN_CONTAINER -> {
  101. List<Component> lore = List.of(
  102. Component.text(""),
  103. Component.text("Determines if outsiders may", NamedTextColor.GRAY),
  104. Component.text("right-click or otherwise interact", NamedTextColor.GRAY),
  105. Component.text("with animals and NPC entities!", NamedTextColor.GRAY)
  106. );
  107. return buildItemFromParams(Material.CHEST, Component.text("Opening Containers"), lore);
  108. }
  109. case ClanSetting.USE_ANVIL -> {
  110. List<Component> lore = List.of(
  111. Component.text(""),
  112. Component.text("Control if outsiders can use", NamedTextColor.GRAY),
  113. Component.text("anvils inside your territory", NamedTextColor.GRAY),
  114. Component.text("to repair or rename items!", NamedTextColor.GRAY)
  115. );
  116. return buildItemFromParams(Material.ANVIL, Component.text("Using Anvils"), lore);
  117. }
  118. case ClanSetting.ALLOW_HITTING_MOBS -> {
  119. List<Component> lore = List.of(
  120. Component.text(""),
  121. Component.text("Determines whether players inside", NamedTextColor.GRAY),
  122. Component.text("your claims may attack hostile", NamedTextColor.GRAY),
  123. Component.text("or passive mobs in your land!", NamedTextColor.GRAY)
  124. );
  125. return buildItemFromParams(Material.ZOMBIE_HEAD, Component.text("Hitting mobs"), lore);
  126. }
  127. case ClanSetting.ALLOW_HITTING_PLAYERS -> {
  128. List<Component> lore = List.of(
  129. Component.text(""),
  130. Component.text("Toggle whether players inside", NamedTextColor.GRAY),
  131. Component.text("of your claim are allowed to", NamedTextColor.GRAY),
  132. Component.text("fight other Players (PvP)!", NamedTextColor.GRAY)
  133. );
  134. return buildItemFromParams(Material.PLAYER_HEAD, Component.text("PvP"), lore);
  135. }
  136. default -> {
  137. return new ItemStack(Material.AIR);
  138. }
  139. }
  140. }
  141. private ItemStack buildItemFromParams(Material material, Component displayName, List<Component> lore) {
  142. ItemStack item = new ItemStack(material);
  143. ItemMeta meta = item.getItemMeta();
  144. meta.displayName(displayName.color(NamedTextColor.GOLD));
  145. meta.lore(lore);
  146. meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
  147. item.setItemMeta(UnItalic.removeItalicFromMeta(meta));
  148. return item;
  149. }
  150. @Override
  151. public void buildContent() {
  152. fillGlassPaneBackground();
  153. setBackButton(30);
  154. setCloseButton(31);
  155. buildItems();
  156. }
  157. @Override
  158. public void update() {
  159. buildItems();
  160. }
  161. }