JackOUT

Untitled

Aug 2nd, 2022
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.10 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 org.bukkit.World;
  6. import org.bukkit.conversations.ConversationContext;
  7. import org.bukkit.conversations.Prompt;
  8. import org.bukkit.entity.EntityType;
  9. import org.bukkit.entity.Player;
  10. import org.bukkit.event.inventory.ClickType;
  11. import org.bukkit.inventory.ItemStack;
  12. import org.jetbrains.annotations.NotNull;
  13. import org.jetbrains.annotations.Nullable;
  14. import org.mineacademy.fo.ItemUtil;
  15. import org.mineacademy.fo.conversation.SimplePrompt;
  16. import org.mineacademy.fo.menu.Menu;
  17. import org.mineacademy.fo.menu.MenuPagged;
  18. import org.mineacademy.fo.menu.button.Button;
  19. import org.mineacademy.fo.menu.button.ButtonConversation;
  20. import org.mineacademy.fo.menu.button.ButtonMenu;
  21. import org.mineacademy.fo.menu.button.annotation.Position;
  22. import org.mineacademy.fo.menu.model.ItemCreator;
  23. import org.mineacademy.fo.remain.CompMaterial;
  24. import org.mineacademy.fo.remain.Remain;
  25.  
  26. import java.util.*;
  27. import java.util.stream.Collectors;
  28.  
  29. public class BlacklistMenu extends Menu {
  30.  
  31.     private final TurretData turretData;
  32.  
  33.     @Position(14)
  34.     private final Button mobBlacklistButton;
  35.  
  36.     @Position(12)
  37.     private final Button playerBlacklistButton;
  38.  
  39.     public BlacklistMenu(final Menu parent, final TurretData turretData, final Player player) {
  40.         super(parent);
  41.  
  42.         this.turretData = turretData;
  43.  
  44.         this.setViewer(player);
  45.         this.setSize(27);
  46.         this.setTitle("Turret Blacklist");
  47.  
  48.         this.mobBlacklistButton = new ButtonMenu(new MobBlacklistMenu(turretData), CompMaterial.CREEPER_HEAD,
  49.                 "Mob Blacklist", "", "Edit your mob blacklist");
  50.  
  51.         this.playerBlacklistButton = new ButtonMenu(new PlayerBlacklistMenu(turretData), CompMaterial.PLAYER_HEAD,
  52.                 "Player Blacklist", "", "Edit your player blacklist");
  53.     }
  54.  
  55.     private class MobBlacklistMenu extends MenuPagged<EntityType> {
  56.  
  57.         private final Button addButton;
  58.  
  59.         private MobBlacklistMenu(final TurretData turretData) {
  60.             super(27, BlacklistMenu.this, new ArrayList<>(turretData.getMobBlackList()));
  61.  
  62.             System.out.println("Mob blacklist: " + new ArrayList<>(turretData.getMobBlackList()));
  63.             this.setTitle("Mob Blacklist");
  64.  
  65.             this.addButton = new ButtonMenu(new MobBlacklistMenu.MobSelectionMenu(), CompMaterial.ENDER_CHEST,
  66.                     "Add Mob",
  67.                     "",
  68.                     "Open this menu to add ",
  69.                     "mobs from the blacklist",
  70.                     "to prevent the turret",
  71.                     "from targeting them.");
  72.         }
  73.  
  74.         @Override
  75.         protected ItemStack convertToItemStack(final EntityType entityType) {
  76.             return ItemCreator.ofEgg(entityType, ItemUtil.bountifyCapitalized(entityType)).make();
  77.         }
  78.  
  79.         @Override
  80.         protected void onPageClick(final Player player, final EntityType entityType, final ClickType clickType) {
  81.             TurretRegistry.getInstance().removeMobFromBlacklist(turretData, entityType);
  82.             this.restartMenu("&cRemoved " + entityType.name());
  83.         }
  84.  
  85.         @Override
  86.         public ItemStack getItemAt(final int slot) {
  87.             if (slot == this.getBottomCenterSlot())
  88.                 return addButton.getItem();
  89.  
  90.             return NO_ITEM;
  91.         }
  92.  
  93.         @Override
  94.         protected String[] getInfo() {
  95.             return new String[]{
  96.                     "Edit your mob blacklist by",
  97.                     "clicking the existing eggs",
  98.                     "to remove them or clicking",
  99.                     "the 'Add Mob' button to add",
  100.                     "mobs to your blacklist."
  101.             };
  102.         }
  103.  
  104.         private class MobSelectionMenu extends MenuPagged<EntityType> {
  105.             private MobSelectionMenu() {
  106.                 super(18, BlacklistMenu.MobBlacklistMenu.this, Arrays.stream(EntityType.values())
  107.                         .filter(EntityType::isAlive)
  108.                         .collect(Collectors.toList()));
  109.  
  110.                 this.setTitle("Select a Mob");
  111.             }
  112.  
  113.             @Override
  114.             protected ItemStack convertToItemStack(final EntityType entityType) {
  115.                 return ItemCreator.ofEgg(entityType, ItemUtil.bountifyCapitalized(entityType)).make();
  116.             }
  117.  
  118.             @Override
  119.             protected void onPageClick(final org.bukkit.entity.Player player, final EntityType entityType, final ClickType clickType) {
  120.                 TurretRegistry.getInstance().addMobToBlacklist(turretData, entityType);
  121.                 this.restartMenu("&aAdded " + entityType.name());
  122.             }
  123.         }
  124.     }
  125.  
  126.     private class PlayerBlacklistMenu extends MenuPagged<Player> {
  127.  
  128.         private final Button addButton;
  129.  
  130.         private final Button addPromptButton;
  131.  
  132.         private PlayerBlacklistMenu(final TurretData turretData) {
  133.             super(27, BlacklistMenu.this, compileBlacklistedPlayers(turretData.getPlayerBlacklist()));
  134.  
  135.             System.out.println("Blacklisted Players: " + compileBlacklistedPlayers(turretData.getPlayerBlacklist()));
  136.             this.setTitle("Player Blacklist");
  137.  
  138.             this.addButton = new ButtonMenu(new PlayerSelectionMenu(), CompMaterial.ENDER_CHEST,
  139.                     "Add Players",
  140.                     "",
  141.                     "Open this menu to add ",
  142.                     "players to the blacklist",
  143.                     "to prevent the turret",
  144.                     "from targeting them.");
  145.  
  146.             this.addPromptButton = new ButtonConversation(new PlayerBlacklistPrompt(),
  147.                     ItemCreator.of(CompMaterial.WRITABLE_BOOK, "Type a name",
  148.                             "",
  149.                             "Click this button if you",
  150.                             "would like to add a player",
  151.                             "to the blacklist by typing ",
  152.                             "his name, this means you can",
  153.                             "also add offline players."));
  154.         }
  155.  
  156.         @Override
  157.         protected ItemStack convertToItemStack(final Player player) {
  158.             return ItemCreator.of(
  159.                             CompMaterial.PLAYER_HEAD,
  160.                             player.getName(),
  161.                             "Click to remove",
  162.                             player.getName())
  163.                     .skullOwner(player.getName()).make();
  164.         }
  165.  
  166.         @Override
  167.         protected void onPageClick(final Player player, final Player item, final ClickType click) {
  168.             TurretRegistry.getInstance().removePlayerFromBlacklist(turretData, player.getUniqueId());
  169.             this.restartMenu("&cRemoved " + player.getName());
  170.         }
  171.  
  172.         @Override
  173.         public ItemStack getItemAt(final int slot) {
  174.             if (slot == this.getBottomCenterSlot() - 1)
  175.                 return addButton.getItem();
  176.             if (slot == this.getBottomCenterSlot() + 1)
  177.                 return addPromptButton.getItem();
  178.  
  179.             return NO_ITEM;
  180.         }
  181.  
  182.         @Override
  183.         protected String[] getInfo() {
  184.             return new String[]{
  185.                     "Edit your player blacklist by",
  186.                     "clicking the existing heads",
  187.                     "to remove them or clicking",
  188.                     "the 'Add Mob' button to add",
  189.                     "mobs to your blacklist."
  190.             };
  191.         }
  192.  
  193.         private class PlayerSelectionMenu extends MenuPagged<Player> {
  194.             private PlayerSelectionMenu() {
  195.                 super(9, BlacklistMenu.PlayerBlacklistMenu.this, compileWorldPlayers(turretData));
  196.  
  197.                 this.setTitle("Select a player");
  198.             }
  199.  
  200.             @Override
  201.             protected ItemStack convertToItemStack(final Player player) {
  202.                 return ItemCreator.of(
  203.                                 CompMaterial.PLAYER_HEAD,
  204.                                 player.getName(),
  205.                                 "Click to add",
  206.                                 player.getName())
  207.                         .skullOwner(player.getName()).make();
  208.             }
  209.  
  210.             @Override
  211.             protected void onPageClick(final Player player, final Player item, final ClickType click) {
  212.                 TurretRegistry.getInstance().addPlayerToBlacklist(turretData, item.getUniqueId());
  213.                 this.restartMenu("&aAdded " + player.getName());
  214.             }
  215.         }
  216.     }
  217.  
  218.     private final class PlayerBlacklistPrompt extends SimplePrompt {
  219.  
  220.         @Override
  221.         protected String getPrompt(final ConversationContext context) {
  222.             return "&6What player shouldn't be targeted by this turret? You can add more players to the blacklist by using the /turret blacklist add <player> command.";
  223.         }
  224.  
  225.         @Nullable
  226.         @Override
  227.         protected Prompt acceptValidatedInput(@NotNull final ConversationContext context, @NotNull final String input) {
  228.             final TurretRegistry registry = TurretRegistry.getInstance();
  229.  
  230.             registry.addPlayerToBlacklist(turretData, input);
  231.             tellSuccess("You have added " + input + " to the blacklist!");
  232.             return END_OF_CONVERSATION;
  233.         }
  234.     }
  235.  
  236.     public static List<Player> compileBlacklistedPlayers(final Set<UUID> uuidList) {
  237.         final List<Player> blacklistedPlayers = new ArrayList<>();
  238.  
  239.         for (final UUID uuid : uuidList)
  240.             blacklistedPlayers.add(Remain.getPlayerByUUID(uuid));
  241.  
  242.         return blacklistedPlayers;
  243.     }
  244.  
  245.     private static List<Player> compileWorldPlayers(final TurretData turretData) {
  246.         final World world = turretData.getLocation().getWorld();
  247.  
  248.         if (world != null) {
  249.             return world.getPlayers();
  250.         }
  251.  
  252.         return null;
  253.     }
  254. }
  255.  
  256.  
Add Comment
Please, Sign In to add comment