JackOUT

Untitled

Apr 1st, 2023
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 16.03 KB | None | 0 0
  1. package games.coob.laserturrets.menu;
  2.  
  3. import games.coob.laserturrets.model.TurretData;
  4. import games.coob.laserturrets.model.TurretRegistry;
  5. import games.coob.laserturrets.util.Lang;
  6. import games.coob.laserturrets.util.TurretUtil;
  7. import org.bukkit.Bukkit;
  8. import org.bukkit.OfflinePlayer;
  9. import org.bukkit.World;
  10. import org.bukkit.conversations.ConversationContext;
  11. import org.bukkit.conversations.Prompt;
  12. import org.bukkit.entity.EntityType;
  13. import org.bukkit.entity.Player;
  14. import org.bukkit.event.inventory.ClickType;
  15. import org.bukkit.inventory.Inventory;
  16. import org.bukkit.inventory.ItemStack;
  17. import org.jetbrains.annotations.NotNull;
  18. import org.jetbrains.annotations.Nullable;
  19. import org.mineacademy.fo.ItemUtil;
  20. import org.mineacademy.fo.conversation.SimplePrompt;
  21. import org.mineacademy.fo.menu.Menu;
  22. import org.mineacademy.fo.menu.MenuPagged;
  23. import org.mineacademy.fo.menu.button.Button;
  24. import org.mineacademy.fo.menu.button.ButtonConversation;
  25. import org.mineacademy.fo.menu.button.ButtonMenu;
  26. import org.mineacademy.fo.menu.button.annotation.Position;
  27. import org.mineacademy.fo.menu.model.ItemCreator;
  28. import org.mineacademy.fo.model.Replacer;
  29. import org.mineacademy.fo.remain.CompMaterial;
  30. import org.mineacademy.fo.remain.Remain;
  31.  
  32. import java.util.Arrays;
  33. import java.util.List;
  34. import java.util.UUID;
  35. import java.util.stream.Collectors;
  36.  
  37. public class AlliesMenu extends Menu { // TODO only sync turrets with owner turrets | Error only occurs when creating the turrets
  38.  
  39.     private final TurretData turretData;
  40.  
  41.     private final Menu parent;
  42.  
  43.     @Position(14)
  44.     private final Button mobBlacklistButton;
  45.  
  46.     @Position(12)
  47.     private final Button playerBlacklistButton;
  48.  
  49.     public AlliesMenu(final Menu parent, final TurretData turretData, final Player player) {
  50.         super(parent);
  51.  
  52.         this.parent = parent;
  53.         this.turretData = turretData;
  54.  
  55.         this.setViewer(player);
  56.         this.setSize(27);
  57.         this.setTitle(Lang.of("Manage_Allies_Menu.Main_Title"));
  58.  
  59.         this.mobBlacklistButton = new ButtonMenu(new MobBlacklistMenu(), CompMaterial.CREEPER_HEAD,
  60.                 Lang.of("Manage_Allies_Menu.Mob_Allies_Title", "{listType}", turretData.isMobWhitelistEnabled() ? TurretUtil.capitalizeWord(Lang.of("Placeholders.Whitelist")) : TurretUtil.capitalizeWord(Lang.of("Placeholders.Blacklist"))), Lang.ofArray("Manage_Allies_Menu.Mob_Allies_Lore", "{listType}", turretData.isMobWhitelistEnabled() ? Lang.of("Placeholders.Whitelist") : Lang.of("Placeholders.Blacklist")));
  61.  
  62.         this.playerBlacklistButton = new ButtonMenu(new PlayerBlacklistMenu(), CompMaterial.PLAYER_HEAD,
  63.                 Lang.of("Manage_Allies_Menu.Player_Allies_Title", "{listType}", turretData.isPlayerWhitelistEnabled() ? TurretUtil.capitalizeWord(Lang.of("Placeholders.Whitelist")) : TurretUtil.capitalizeWord(Lang.of("Placeholders.Blacklist"))), Lang.ofArray("Manage_Allies_Menu.Player_Allies_Lore", "{listType}", turretData.isPlayerWhitelistEnabled() ? Lang.of("Placeholders.Whitelist") : Lang.of("Placeholders.Blacklist")));
  64.     }
  65.  
  66.     @Override
  67.     protected String[] getInfo() {
  68.         return Lang.ofArray("Manage_Allies_Menu.Main_Info");
  69.     }
  70.  
  71.     @Override
  72.     public Menu newInstance() {
  73.         return new AlliesMenu(this.parent, this.turretData, this.getViewer());
  74.     }
  75.  
  76.     private class MobBlacklistMenu extends MenuPagged<EntityType> {
  77.  
  78.         private final Button addButton;
  79.  
  80.         private final Button mobListTypeButton;
  81.  
  82.         private MobBlacklistMenu() {
  83.             super(27, AlliesMenu.this, turretData.getMobBlacklist());
  84.  
  85.             this.setTitle(Replacer.replaceArray(Lang.of("Manage_Allies_Menu.Mob_Allies_Title"), "{listType}", turretData.isMobWhitelistEnabled() ? TurretUtil.capitalizeWord(Lang.of("Placeholders.Whitelist")) : TurretUtil.capitalizeWord(Lang.of("Placeholders.Blacklist"))));
  86.  
  87.             this.addButton = new ButtonMenu(new MobBlacklistMenu.MobSelectionMenu(), CompMaterial.ENDER_CHEST,
  88.                     Lang.of("Manage_Allies_Menu.Mob_Add_Button_Title"),
  89.                     Lang.ofArray("Manage_Allies_Menu.Mob_Add_Button_Lore", "{listType}", turretData.isMobWhitelistEnabled() ? Lang.of("Placeholders.Whitelist") : Lang.of("Placeholders.Blacklist")));
  90.  
  91.             this.mobListTypeButton = new Button() {
  92.                 @Override
  93.                 public void onClickedInMenu(final Player player, final Menu menu, final ClickType clickType) {
  94.                     final TurretRegistry registry = TurretRegistry.getInstance();
  95.                     final boolean isWhitelist = turretData.isMobWhitelistEnabled();
  96.  
  97.                     registry.enableMobWhitelist(turretData, !isWhitelist);
  98.                     setTitle(Lang.of("Manage_Allies_Menu.Mob_List_Type_Menu_Title", "{listType}", turretData.isMobWhitelistEnabled() ? TurretUtil.capitalizeWord(Lang.of("Placeholders.Whitelist")) : TurretUtil.capitalizeWord(Lang.of("Placeholders.Blacklist"))));
  99.                     restartMenu(Lang.of("Manage_Allies_Menu.Mob_List_Type_Menu_Animated_Message", "{listType}", isWhitelist ? Lang.of("Placeholders.Whitelist_Coloured") : Lang.of("Placeholders.Blacklist_Coloured")));
  100.                 }
  101.  
  102.                 @Override
  103.                 public ItemStack getItem() {
  104.                     final boolean isWhitelist = turretData.isMobWhitelistEnabled();
  105.  
  106.                     return ItemCreator.of(isWhitelist ? CompMaterial.WHITE_WOOL : CompMaterial.BLACK_WOOL, Lang.of("Manage_Allies_Menu.Mob_List_Type_Button_Title", "{listType}", isWhitelist ? TurretUtil.capitalizeWord(Lang.of("Placeholders.Whitelist_Coloured")) : TurretUtil.capitalizeWord(Lang.of("Placeholders.Blacklist_Coloured"))),
  107.                             Lang.ofArray("Manage_Allies_Menu.Mob_List_Type_Button_Lore", "{listType}", !isWhitelist ? Lang.of("Placeholders.Whitelist_Coloured") : Lang.of("Placeholders.Blacklist_Coloured"))).make();
  108.                 }
  109.             };
  110.         }
  111.  
  112.         @Override
  113.         protected ItemStack convertToItemStack(final EntityType entityType) {
  114.             return ItemCreator.ofEgg(entityType, ItemUtil.bountifyCapitalized(entityType))
  115.                     .lore(Lang.ofArray("Manage_Allies_Menu.Mob_Egg_Lore", "{entityName}", entityType.name())).make();
  116.         }
  117.  
  118.         @Override
  119.         protected void onPageClick(final Player player, final EntityType entityType, final ClickType clickType) {
  120.             TurretRegistry.getInstance().removeMobFromBlacklist(turretData, entityType);
  121.             this.restartMenu(Lang.of("Manage_Allies_Menu.Mob_Egg_Animated_Message", "{entityName}", entityType.name()));
  122.         }
  123.  
  124.         @Override
  125.         protected void onMenuClose(final Player player, final Inventory inventory) {
  126.             this.restartMenu();
  127.         }
  128.  
  129.         @Override
  130.         public ItemStack getItemAt(final int slot) {
  131.             if (slot == this.getBottomCenterSlot())
  132.                 return addButton.getItem();
  133.             if (slot == this.getBottomCenterSlot() + 3)
  134.                 return mobListTypeButton.getItem();
  135.  
  136.             return super.getItemAt(slot);
  137.         }
  138.  
  139.         @Override
  140.         protected String[] getInfo() {
  141.             return Lang.ofArray("Manage_Allies_Menu.Mob_Menu_Info_Button", "{listType}", turretData.isMobWhitelistEnabled() ? Lang.of("Placeholders.Whitelist") : Lang.of("Placeholders.Blacklist"));
  142.         }
  143.  
  144.         @Override
  145.         public Menu newInstance() {
  146.             return new MobBlacklistMenu();
  147.         }
  148.  
  149.         private class MobSelectionMenu extends MenuPagged<EntityType> {
  150.             private MobSelectionMenu() {
  151.                 super(27, AlliesMenu.MobBlacklistMenu.this, Arrays.stream(EntityType.values())
  152.                         .filter(EntityType::isAlive)
  153.                         .filter(EntityType::isSpawnable)
  154.                         .collect(Collectors.toList()));
  155.  
  156.                 this.setTitle(Lang.of("Manage_Allies_Menu.Mob_Selection_Menu_Title"));
  157.             }
  158.  
  159.             @Override
  160.             protected ItemStack convertToItemStack(final EntityType entityType) {
  161.                 return ItemCreator.ofEgg(entityType, ItemUtil.bountifyCapitalized(entityType))
  162.                         .glow(turretData.getMobBlacklist().contains(entityType))
  163.                         .lore(turretData.getMobBlacklist().contains(entityType) ? Lang.ofArray("Manage_Allies_Menu.Mob_Already_Selected_Lore", "{listType}", turretData.isMobWhitelistEnabled() ? Lang.of("Placeholders.Whitelist") : Lang.of("Placeholders.Blacklist"), "{entityName}", entityType.name()) : Lang.ofArray("Manage_Allies_Menu.Mob_Available_For_Selection_Lore", "{listType}", turretData.isMobWhitelistEnabled() ? Lang.of("Placeholders.Whitelist") : Lang.of("Placeholders.Blacklist"), "{entityName}", entityType.name()))
  164.                         .make();
  165.             }
  166.  
  167.             @Override
  168.             protected void onPageClick(final org.bukkit.entity.Player player, final EntityType entityType, final ClickType clickType) {
  169.                 TurretRegistry.getInstance().addMobToBlacklist(turretData, entityType);
  170.                 this.restartMenu(Lang.of("Manage_Allies_Menu.Mob_Selection_Animated_Message", "{entityName}", entityType.name()));
  171.             }
  172.  
  173.             @Override
  174.             protected void onMenuClose(final Player player, final Inventory inventory) {
  175.                 MobBlacklistMenu.this.newInstance().displayTo(player);
  176.             }
  177.  
  178.             @Override
  179.             public Menu newInstance() {
  180.                 return new MobSelectionMenu();
  181.             }
  182.         }
  183.     }
  184.  
  185.     private class PlayerBlacklistMenu extends MenuPagged<UUID> {
  186.  
  187.         private final Button addButton;
  188.  
  189.         private final Button addPromptButton;
  190.  
  191.         private final Button playerListTypeButton;
  192.  
  193.         private PlayerBlacklistMenu() {
  194.             super(27, AlliesMenu.this, turretData.getPlayerBlacklist());
  195.  
  196.             this.setTitle(Lang.of("Manage_Allies_Menu.Player_Allies_Title", "{listType}", (turretData.isPlayerWhitelistEnabled() ? TurretUtil.capitalizeWord(Lang.of("Placeholders.Whitelist")) : TurretUtil.capitalizeWord(Lang.of("Placeholders.Blacklist")))));
  197.  
  198.             this.addButton = new ButtonMenu(new PlayerSelectionMenu(), CompMaterial.ENDER_CHEST,
  199.                     Lang.of("Manage_Allies_Menu.Player_Add_Button_Title"),
  200.                     Lang.ofArray("Manage_Allies_Menu.Player_Add_Button_Lore", "{listType}", turretData.isPlayerWhitelistEnabled() ? Lang.of("Placeholders.Whitelist") : Lang.of("Placeholders.Blacklist")));
  201.  
  202.             this.addPromptButton = new ButtonConversation(new PlayerBlacklistPrompt(),
  203.                     ItemCreator.of(CompMaterial.WRITABLE_BOOK, Lang.of("Manage_Allies_Menu.Player_Add_Prompt_Button_Title"),
  204.                             Lang.ofArray("Manage_Allies_Menu.Player_Add_Prompt_Button_Lore", "{listType}", turretData.isPlayerWhitelistEnabled() ? Lang.of("Placeholders.Whitelist") : Lang.of("Placeholders.Blacklist"))));
  205.  
  206.             this.playerListTypeButton = new Button() {
  207.                 @Override
  208.                 public void onClickedInMenu(final Player player, final Menu menu, final ClickType clickType) {
  209.                     final TurretRegistry registry = TurretRegistry.getInstance();
  210.                     final boolean isWhitelist = turretData.isPlayerWhitelistEnabled();
  211.  
  212.                     registry.enablePlayerWhitelist(turretData, !isWhitelist);
  213.                     setTitle(Lang.of("Manage_Allies_Menu.Player_List_Type_Menu_Title", "{listType}", turretData.isPlayerWhitelistEnabled() ? TurretUtil.capitalizeWord(Lang.of("Placeholders.Whitelist")) : TurretUtil.capitalizeWord(Lang.of("Placeholders.Blacklist"))));
  214.                     restartMenu(Lang.of("Manage_Allies_Menu.Player_List_Type_Menu_Animated_Message", "{listType}", isWhitelist ? Lang.of("Placeholders.Whitelist_Coloured") : Lang.of("Placeholders.Blacklist_Coloured")));
  215.                 }
  216.  
  217.                 @Override
  218.                 public ItemStack getItem() {
  219.                     final boolean isWhitelist = turretData.isPlayerWhitelistEnabled();
  220.  
  221.                     return ItemCreator.of(isWhitelist ? CompMaterial.WHITE_WOOL : CompMaterial.BLACK_WOOL, Lang.of("Manage_Allies_Menu.Player_List_Type_Button_Title", "{listType}", isWhitelist ? TurretUtil.capitalizeWord(Lang.of("Placeholders.Whitelist_Coloured")) : TurretUtil.capitalizeWord(Lang.of("Placeholders.Blacklist_Coloured"))),
  222.                             Lang.ofArray("Manage_Allies_Menu.Player_List_Type_Button_Lore", "{listType}", !isWhitelist ? Lang.of("Placeholders.Whitelist_Coloured") : Lang.of("Placeholders.Blacklist_Coloured"))).make();
  223.                 }
  224.             };
  225.         }
  226.  
  227.         @Override
  228.         protected ItemStack convertToItemStack(final UUID uuid) {
  229.             final OfflinePlayer player = Remain.getOfflinePlayerByUUID(uuid);
  230.  
  231.             return ItemCreator.of(
  232.                             CompMaterial.PLAYER_HEAD,
  233.                             player.getName(),
  234.                             Lang.ofArray("Manage_Allies_Menu.Player_Head_Lore", "{playerName}", player.getName()))
  235.                     .skullOwner(player.getName()).make();
  236.         }
  237.  
  238.         @Override
  239.         protected void onPageClick(final Player player, final UUID item, final ClickType click) {
  240.             final OfflinePlayer target = Remain.getOfflinePlayerByUUID(item);
  241.  
  242.             TurretRegistry.getInstance().removePlayerFromBlacklist(turretData, target.getUniqueId());
  243.             this.restartMenu(Lang.of("Manage_Allies_Menu.Player_Head_Animated_Message", "{playerName}", target.getName()));
  244.         }
  245.  
  246.         @Override
  247.         protected void onMenuClose(final Player player, final Inventory inventory) {
  248.             this.restartMenu();
  249.         }
  250.  
  251.         @Override
  252.         public ItemStack getItemAt(final int slot) {
  253.             if (slot == this.getBottomCenterSlot() - 1)
  254.                 return this.addButton.getItem();
  255.             if (slot == this.getBottomCenterSlot() + 1)
  256.                 return this.addPromptButton.getItem();
  257.             if (slot == this.getBottomCenterSlot() + 3)
  258.                 return playerListTypeButton.getItem();
  259.  
  260.             return super.getItemAt(slot);
  261.         }
  262.  
  263.         @Override
  264.         protected String[] getInfo() {
  265.             return Lang.ofArray("Manage_Allies_Menu.Player_Menu_Info_Button", "{listType}", turretData.isPlayerWhitelistEnabled() ? Lang.of("Placeholders.Whitelist") : Lang.of("Placeholders.Blacklist"));
  266.         }
  267.  
  268.         @Override
  269.         public Menu newInstance() {
  270.             return new PlayerBlacklistMenu();
  271.         }
  272.  
  273.         private class PlayerSelectionMenu extends MenuPagged<Player> {
  274.             private PlayerSelectionMenu() {
  275.                 super(18, AlliesMenu.PlayerBlacklistMenu.this, compileWorldPlayers(turretData));
  276.  
  277.                 this.setTitle(Lang.of("Manage_Allies_Menu.Player_Selection_Menu_Title"));
  278.             }
  279.  
  280.             @Override
  281.             protected ItemStack convertToItemStack(final Player player) {
  282.                 return ItemCreator.of(
  283.                                 CompMaterial.PLAYER_HEAD,
  284.                                 player.getName(),
  285.                                 turretData.getPlayerBlacklist().contains(player.getUniqueId()) ? Lang.ofArray("Manage_Allies_Menu.Player_Already_Selected_Lore", "{listType}", turretData.isMobWhitelistEnabled() ? Lang.of("Placeholders.Whitelist") : Lang.of("Placeholders.Blacklist"), "{playerName}", player.getName()) : Lang.ofArray("Manage_Allies_Menu.Player_Available_For_Selection_Lore", "{listType}", turretData.isMobWhitelistEnabled() ? Lang.of("Placeholders.Whitelist") : Lang.of("Placeholders.Blacklist"), "{playerName}", player.getName()))
  286.                         .skullOwner(player.getName()).make();
  287.             }
  288.  
  289.             @Override
  290.             protected void onPageClick(final Player player, final Player item, final ClickType click) {
  291.                 System.out.println("Turret id:" + turretData.getId());
  292.  
  293.                 TurretRegistry.getInstance().addPlayerToBlacklist(turretData, item.getUniqueId());
  294.                 this.restartMenu(Lang.of("Manage_Allies_Menu.Player_Selection_Animated_Message", "{playerName}", player.getName()));
  295.             }
  296.  
  297.             @Override
  298.             protected void onMenuClose(final Player player, final Inventory inventory) {
  299.                 PlayerBlacklistMenu.this.newInstance().displayTo(player);
  300.             }
  301.  
  302.             @Override
  303.             public Menu newInstance() {
  304.                 return new PlayerSelectionMenu();
  305.             }
  306.         }
  307.     }
  308.  
  309.     private final class PlayerBlacklistPrompt extends SimplePrompt {
  310.  
  311.         @Override
  312.         protected String getPrompt(final ConversationContext context) {
  313.             return Lang.of("Manage_Allies_Menu.Player_Prompt_Message", "{listType}", turretData.isPlayerWhitelistEnabled() ? Lang.of("Placeholders.Whitelist") : Lang.of("Placeholders.Blacklist"));
  314.         }
  315.  
  316.         @Override
  317.         protected boolean isInputValid(final ConversationContext context, final String input) {
  318.             for (final OfflinePlayer player : Bukkit.getOfflinePlayers())
  319.                 return player.getName() != null && player.getName().equals(input);
  320.             return false;
  321.         }
  322.  
  323.         @Override
  324.         protected String getFailedValidationText(final ConversationContext context, final String invalidInput) {
  325.             return Lang.of("Manage_Allies_Menu.Player_Prompt_Invalid_Text", "{invalidPlayer}", invalidInput);
  326.         }
  327.  
  328.         @Nullable
  329.         @Override
  330.         protected Prompt acceptValidatedInput(@NotNull final ConversationContext context, @NotNull final String input) {
  331.             final TurretRegistry registry = TurretRegistry.getInstance();
  332.  
  333.             registry.addPlayerToBlacklist(turretData, Bukkit.getOfflinePlayer(input).getUniqueId());
  334.             tellSuccess(Lang.of("Manage_Allies_Menu.Player_Prompt_Success", "{playerName}", input, "{listType}", turretData.isPlayerWhitelistEnabled() ? Lang.of("Placeholders.Whitelist") : Lang.of("Placeholders.Blacklist")));
  335.  
  336.             return END_OF_CONVERSATION;
  337.         }
  338.     }
  339.  
  340.     private static List<Player> compileWorldPlayers(final TurretData turretData) {
  341.         final World world = turretData.getLocation().getWorld();
  342.  
  343.         if (world != null) {
  344.             return world.getPlayers();
  345.         }
  346.  
  347.         return null;
  348.     }
  349. }
  350.  
  351.  
Add Comment
Please, Sign In to add comment