diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index 15e2f295..b7f72ce6 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -10,6 +10,13 @@ deploy webhooks to print changelog successfully That's all, matcher will stop when detects next line started with `###` match +## 5.0.15 Release (03.05.2025) +* Allowing by default 20 places placeholder for summary list +* Check if OPTIONS_MENU item is still in builders inventory and readd it if necessary +* Fixed IllegalArgumentException on PlotSelector, also switched to PaginatedInventory to support all Plots +* Added filter to maxplayers/random join team / solo so that only the correct arenas are selected +* Updated Minigamesbox to 1.4.1 + ### 5.0.14 Release (13.03.2025) * Changed plot distribution on team mode tries to create only full plots now * Fixed plot distribution in same cases lets spectators into the plot as member diff --git a/.github/building/pom.xml b/.github/building/pom.xml index 23d4c421..98284ef1 100644 --- a/.github/building/pom.xml +++ b/.github/building/pom.xml @@ -26,7 +26,7 @@ plugily.projects buildbattle - 5.0.13-SNAPSHOT5 + 5.0.14-SNAPSHOT1 BuildBattle @@ -51,17 +51,13 @@ jitpack https://jitpack.io - - codemc-repo - https://repo.codemc.org/repository/maven-public/ - spigot-repo https://hub.spigotmc.org/nexus/content/repositories/snapshots/ citizens-repo - http://repo.citizensnpcs.co/ + https://repo.citizensnpcs.co/ @@ -82,7 +78,7 @@ plugily.projects MiniGamesBox-Classic - 1.3.17-SNAPSHOT12 + 1.4.0 compile true @@ -115,6 +111,7 @@ ${java.version} ${java.version} + UTF-8 @@ -160,6 +157,7 @@ shade + true com.zaxxer.hikari diff --git a/pom.xml b/pom.xml index fadabde0..81766f80 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ plugily.projects buildbattle - 5.0.14 + 5.0.14-SNAPSHOT8 BuildBattle @@ -78,7 +78,7 @@ plugily.projects MiniGamesBox-Classic - 1.4.0 + 1.4.1 compile true @@ -111,6 +111,7 @@ ${java.version} ${java.version} + UTF-8 diff --git a/src/main/java/plugily/projects/buildbattle/arena/managers/ScoreboardManager.java b/src/main/java/plugily/projects/buildbattle/arena/managers/ScoreboardManager.java index 5e46b99f..abce932e 100644 --- a/src/main/java/plugily/projects/buildbattle/arena/managers/ScoreboardManager.java +++ b/src/main/java/plugily/projects/buildbattle/arena/managers/ScoreboardManager.java @@ -45,10 +45,9 @@ public ScoreboardManager(PluginArena arena) { } @Override - public List formatScoreboardLines(List lines, Player player) { - List changedLines = new ArrayList<>(); - - switch (arena.getArenaState()) { + public List getScoreboardLines(Player player) { + List lines; + switch(arena.getArenaState()) { case IN_GAME: { if(arena instanceof GuessArena) { lines = arena.getPlugin().getLanguageManager().getLanguageList("Scoreboard.Content." + arena.getArenaState().getFormattedName() + ".Guess-The-Build" + (((GuessArena) arena).getArenaInGameState() == BaseArena.ArenaInGameState.PLOT_VOTING ? "-Waiting" : "")); @@ -70,16 +69,9 @@ public List formatScoreboardLines(List lines, Player player) { break; } default: { - lines = arena.getPlugin().getLanguageManager().getLanguageList(arena.getArenaState() == IArenaState.FULL_GAME ? "Scoreboard.Content.Starting" - : "Scoreboard.Content." + arena.getArenaState().getFormattedName()); - + lines = super.getScoreboardLines(player); } } - - for(String line : lines) { - changedLines.add(new MessageBuilder(line).player(player).arena(arena).build()); - } - return changedLines; + return lines; } - } diff --git a/src/main/java/plugily/projects/buildbattle/arena/managers/plots/PlotMenuHandler.java b/src/main/java/plugily/projects/buildbattle/arena/managers/plots/PlotMenuHandler.java index 688ef48b..036f3f79 100644 --- a/src/main/java/plugily/projects/buildbattle/arena/managers/plots/PlotMenuHandler.java +++ b/src/main/java/plugily/projects/buildbattle/arena/managers/plots/PlotMenuHandler.java @@ -35,6 +35,8 @@ import plugily.projects.minigamesbox.classic.utils.version.xseries.XMaterial; import plugily.projects.minigamesbox.inventory.common.item.SimpleClickableItem; import plugily.projects.minigamesbox.inventory.normal.NormalFastInv; +import plugily.projects.minigamesbox.inventory.utils.fastinv.InventoryScheme; +import plugily.projects.minigamesbox.inventory.utils.fastinv.PaginatedFastInv; import java.util.ArrayList; import java.util.List; @@ -79,10 +81,22 @@ private ItemStack getItemStack(Plot plot, int maxPlotMembers, Player player) { } public void createMenu(Player player, BaseArena arena) { - NormalFastInv gui = new NormalFastInv(plugin.getBukkitHelper().serializeInt(arena.getPlotManager().getPlots().size()), new MessageBuilder("IN_GAME_MESSAGES_PLOT_SELECTOR_MENU_NAME").asKey().build()); + PaginatedFastInv gui = new PaginatedFastInv(27, new MessageBuilder("IN_GAME_MESSAGES_PLOT_SELECTOR_MENU_NAME").asKey().build()); + new InventoryScheme() + .mask(" 1111111 ") + .mask(" 1111111 ") + .bindPagination('1').apply(gui); + + int plots = 0; int arenaPlotMemberSize = arena.getArenaOption("PLOT_MEMBER_SIZE"); + gui.previousPageItem(20, p -> new ItemBuilder(XMaterial.ARROW.parseItem()).name("<- " + p + "/" + gui.lastPage()).build()); + gui.nextPageItem(24, p -> new ItemBuilder(XMaterial.ARROW.parseItem()).name(p + "/" + gui.lastPage() + " ->").build()); + + gui.setItem(22, new ItemBuilder(XMaterial.BARRIER.parseItem()).name("X").build(), + e -> e.getWhoClicked().closeInventory()); + for(Plot plot : arena.getPlotManager().getPlots()) { ItemStack itemStack = getItemStack(plot, arenaPlotMemberSize, player); int plotMemberSize = plot.getMembersSize(); @@ -127,7 +141,7 @@ public void createMenu(Player player, BaseArena arena) { }); int finalPlots = plots; - gui.addItem(new SimpleClickableItem(itemStack, event -> { + gui.addContent(itemStack, event -> { event.setCancelled(true); if(!(event.isLeftClick() || event.isRightClick())) { @@ -143,7 +157,7 @@ public void createMenu(Player player, BaseArena arena) { new MessageBuilder("IN_GAME_MESSAGES_PLOT_SELECTOR_PLOT_CHOOSE").asKey().player(player).integer(finalPlots).sendPlayer(); event.getWhoClicked().closeInventory(); - })); + }); plots++; } diff --git a/src/main/java/plugily/projects/buildbattle/arena/states/build/InGameState.java b/src/main/java/plugily/projects/buildbattle/arena/states/build/InGameState.java index 3c99e3e4..5d1f000c 100644 --- a/src/main/java/plugily/projects/buildbattle/arena/states/build/InGameState.java +++ b/src/main/java/plugily/projects/buildbattle/arena/states/build/InGameState.java @@ -77,12 +77,11 @@ public void handleCall(PluginArena arena) { break; case BUILD_TIME: handleBuildTime(pluginArena); + handleOptionsMenu(pluginArena); if(arena.getTimer() <= 0) { for(Player player : pluginArena.getPlayersLeft()) { IUser user = getPlugin().getUserManager().getUser(player); - if(user.isSpectator()) continue; - Plot playerPlot = pluginArena.getPlotFromPlayer(player); if(!pluginArena.getQueue().contains(playerPlot)) { pluginArena.getQueue().add(playerPlot); @@ -198,6 +197,15 @@ private void handleBuildTime(BuildArena pluginArena) { pluginArena.checkPlayerOutSidePlot(); } + private void handleOptionsMenu(BuildArena pluginArena) { + if(pluginArena.getTimer() % 10 != 0) { + return; + } + for(Player player : pluginArena.getPlayersLeft()) { + pluginArena.getPlugin().getSpecialItemManager().getSpecialItem("OPTIONS_MENU").setItem(player); + } + } + private void handlePlotVoting(BuildArena pluginArena) { } diff --git a/src/main/java/plugily/projects/buildbattle/arena/states/guess/InGameState.java b/src/main/java/plugily/projects/buildbattle/arena/states/guess/InGameState.java index 103085c3..5581746e 100644 --- a/src/main/java/plugily/projects/buildbattle/arena/states/guess/InGameState.java +++ b/src/main/java/plugily/projects/buildbattle/arena/states/guess/InGameState.java @@ -26,6 +26,7 @@ import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; import plugily.projects.buildbattle.arena.BaseArena; +import plugily.projects.buildbattle.arena.BuildArena; import plugily.projects.buildbattle.arena.GuessArena; import plugily.projects.buildbattle.arena.managers.plots.Plot; import plugily.projects.buildbattle.handlers.themes.BBTheme; @@ -102,6 +103,7 @@ public void handleCall(PluginArena arena) { } //} handleBuildTime(pluginArena); + handleOptionsMenu(pluginArena); break; case PLOT_VOTING: if(pluginArena.getRound() + 1 > pluginArena.getPlotList().size() * pluginArena.getArenaOption("GTB_ROUNDS_PER_PLOT")) { @@ -189,6 +191,15 @@ private void forceSetTheme(GuessArena pluginArena) { setChosenTheme(pluginArena, getThemeByDifficulty(pluginArena, difficulty)); } + private void handleOptionsMenu(GuessArena pluginArena) { + if(pluginArena.getTimer() % 10 != 0) { + return; + } + for(Player player : pluginArena.getCurrentBuilders()) { + pluginArena.getPlugin().getSpecialItemManager().getSpecialItem("OPTIONS_MENU").setItem(player); + } + } + private void setChosenTheme(GuessArena pluginArena, BBTheme bbTheme) { setTheme(pluginArena, bbTheme); pluginArena.getCurrentBuilders().forEach(HumanEntity::closeInventory); diff --git a/src/main/java/plugily/projects/buildbattle/boot/PlaceholderInitializer.java b/src/main/java/plugily/projects/buildbattle/boot/PlaceholderInitializer.java index 1f3e4dcd..f06e5a84 100644 --- a/src/main/java/plugily/projects/buildbattle/boot/PlaceholderInitializer.java +++ b/src/main/java/plugily/projects/buildbattle/boot/PlaceholderInitializer.java @@ -447,8 +447,8 @@ private String getSummary(IPluginArena arena) { return null; } int places = pluginArena.getPlotManager().getTopPlotsOrder().size(); - if(places > 16) { - places = 16; + if(places > 20) { + places = 20; } StringBuilder placeSummary = new StringBuilder(); for(int i = 1; i <= places; i++) { diff --git a/src/main/java/plugily/projects/buildbattle/commands/arguments/ArgumentsRegistry.java b/src/main/java/plugily/projects/buildbattle/commands/arguments/ArgumentsRegistry.java index 0fb2596b..4512098d 100644 --- a/src/main/java/plugily/projects/buildbattle/commands/arguments/ArgumentsRegistry.java +++ b/src/main/java/plugily/projects/buildbattle/commands/arguments/ArgumentsRegistry.java @@ -21,6 +21,7 @@ package plugily.projects.buildbattle.commands.arguments; import plugily.projects.buildbattle.Main; +import plugily.projects.buildbattle.arena.BaseArena; import plugily.projects.buildbattle.arena.BuildArena; import plugily.projects.buildbattle.arena.GuessArena; import plugily.projects.buildbattle.commands.arguments.admin.ThemeArgument; @@ -63,10 +64,13 @@ public List getSpecificFilteredArenas(List arenas, S case "guessthebuild": case "guess_the_build": return arenas.stream().filter(GuessArena.class::isInstance).collect(Collectors.toList()); + case "team": + return arenas.stream().filter(BuildArena.class::isInstance).filter(arena -> ((BuildArena) arena).getArenaType().equals(BaseArena.ArenaType.TEAM)).collect(Collectors.toList()); case "classic": case "solo": - case "team": - default: + return arenas.stream().filter(BuildArena.class::isInstance).filter(arena -> ((BuildArena) arena).getArenaType().equals(BaseArena.ArenaType.SOLO)).collect(Collectors.toList()); + case "build": + default: return arenas.stream().filter(BuildArena.class::isInstance).collect(Collectors.toList()); } } diff --git a/src/main/java/plugily/projects/buildbattle/handlers/menu/OptionsRegistry.java b/src/main/java/plugily/projects/buildbattle/handlers/menu/OptionsRegistry.java index 3fde74cc..68af2b9d 100644 --- a/src/main/java/plugily/projects/buildbattle/handlers/menu/OptionsRegistry.java +++ b/src/main/java/plugily/projects/buildbattle/handlers/menu/OptionsRegistry.java @@ -39,6 +39,7 @@ import plugily.projects.minigamesbox.inventory.common.item.ItemMap; import plugily.projects.minigamesbox.inventory.common.item.SimpleClickableItem; import plugily.projects.minigamesbox.inventory.normal.NormalFastInv; +import plugily.projects.minigamesbox.inventory.utils.fastinv.PaginatedFastInv; import java.util.HashSet; import java.util.Set; @@ -50,147 +51,154 @@ */ public class OptionsRegistry { - private ParticleRegistry particleRegistry; - private BiomesRegistry biomesRegistry; - private PlayerHeadsRegistry playerHeadsRegistry; - private final Set registeredOptions = new HashSet<>(); - private int inventorySize = 5 * 9; - private final ItemStack menuItem; - private final Main plugin; - - private NormalFastInv optionsGui; - - public OptionsRegistry(Main plugin) { - this.plugin = plugin; - this.menuItem = plugin.getSpecialItemManager().getSpecialItemStack("OPTIONS_MENU"); - } - - public void registerOptions() { - biomesRegistry = new BiomesRegistry(this); - new BiomeChangeOption(this); - - new FloorChangeOption(this); - - //register particles - particleRegistry = new ParticleRegistry(this); - new ParticlesOption(this); - - //register player heads - playerHeadsRegistry = new PlayerHeadsRegistry(this); - new PlayerHeadsOption(this); - - new PlotResetOption(this); - new TimeChangeOption(this); - new WeatherChangeOption(this); - new BannerCreatorOption(this); - } - - /** - * Registers new menu option available in options menu in game. - * - * @param option option to register - * @throws IllegalArgumentException if option slot is same as one of already registered ones - * or ID of option is same as one of registered one - */ - public void registerOption(MenuOption option) { - for (MenuOption opt : registeredOptions) { - if (opt.getSlot() == option.getSlot()) { - throw new IllegalArgumentException("Cannot register new option on existing option slot!"); - } - if (opt.getID().equals(option.getID())) { - throw new IllegalArgumentException("Cannot register new option with equal identifier!"); - } - } - registeredOptions.add(option); - } - - /** - * Unregisters menu option that available in options menu - * - * @param option option to unregister - * @throws IllegalArgumentException if option doesn't exist - */ - public void unregisterOption(MenuOption option) { - if (!registeredOptions.remove(option)) { - throw new IllegalArgumentException("Cannot remove non existing option!"); - } + private ParticleRegistry particleRegistry; + private BiomesRegistry biomesRegistry; + private PlayerHeadsRegistry playerHeadsRegistry; + private final Set registeredOptions = new HashSet<>(); + private int inventorySize = 5 * 9; + private final ItemStack menuItem; + private final Main plugin; + + private NormalFastInv optionsGui; + + public OptionsRegistry(Main plugin) { + this.plugin = plugin; + this.menuItem = plugin.getSpecialItemManager().getSpecialItemStack("OPTIONS_MENU"); + } + + public void registerOptions() { + biomesRegistry = new BiomesRegistry(this); + new BiomeChangeOption(this); + + new FloorChangeOption(this); + + //register particles + particleRegistry = new ParticleRegistry(this); + new ParticlesOption(this); + + //register player heads + playerHeadsRegistry = new PlayerHeadsRegistry(this); + new PlayerHeadsOption(this); + + new PlotResetOption(this); + new TimeChangeOption(this); + new WeatherChangeOption(this); + new BannerCreatorOption(this); + } + + /** + * Registers new menu option available in options menu in game. + * + * @param option option to register + * @throws IllegalArgumentException if option slot is same as one of already registered ones + * or ID of option is same as one of registered one + */ + public void registerOption(MenuOption option) { + for(MenuOption opt : registeredOptions) { + if(opt.getSlot() == option.getSlot()) { + throw new IllegalArgumentException("Cannot register new option on existing option slot!"); + } + if(opt.getID().equals(option.getID())) { + throw new IllegalArgumentException("Cannot register new option with equal identifier!"); + } } - - /** - * Defines new size of options inventory - * - * @param size size to set - */ - public void defineInventorySize(int size) { - inventorySize = size; - } - - /** - * Creates inventory with all of registered menu options - * - * @return options inventory - */ - public NormalFastInv getOptionsGui() { - if (optionsGui != null) - return optionsGui; - NormalFastInv gui = new NormalFastInv(inventorySize, new MessageBuilder("MENU_OPTION_INVENTORY").asKey().build()); - gui.addClickHandler(clickEvent -> { - if (clickEvent.getClickedInventory() != gui.getInventory()) { - clickEvent.setCancelled(false); - } - }); - for (MenuOption option : registeredOptions) { - gui.setItem(option.getSlot(), new SimpleClickableItem(option.getItemStack(), option::onClick)); - } - return optionsGui = gui; + registeredOptions.add(option); + } + + /** + * Unregisters menu option that available in options menu + * + * @param option option to unregister + * @throws IllegalArgumentException if option doesn't exist + */ + public void unregisterOption(MenuOption option) { + if(!registeredOptions.remove(option)) { + throw new IllegalArgumentException("Cannot remove non existing option!"); } - - public Set getRegisteredOptions() { - return registeredOptions; + } + + /** + * Defines new size of options inventory + * + * @param size size to set + */ + public void defineInventorySize(int size) { + inventorySize = size; + } + + /** + * Creates inventory with all of registered menu options + * + * @return options inventory + */ + public NormalFastInv getOptionsGui() { + if(optionsGui != null) + return optionsGui; + NormalFastInv gui = new NormalFastInv(inventorySize, new MessageBuilder("MENU_OPTION_INVENTORY").asKey().build()); + gui.addClickHandler(clickEvent -> { + if(clickEvent.getClickedInventory() != gui.getInventory()) { + clickEvent.setCancelled(false); + } + }); + for(MenuOption option : registeredOptions) { + gui.setItem(option.getSlot(), new SimpleClickableItem(option.getItemStack(), option::onClick)); } + return optionsGui = gui; + } - public ItemStack getMenuItem() { - return menuItem; - } + public Set getRegisteredOptions() { + return registeredOptions; + } - public BiomesRegistry getBiomesRegistry() { - return biomesRegistry; - } + public ItemStack getMenuItem() { + return menuItem; + } - public PlayerHeadsRegistry getPlayerHeadsRegistry() { - return playerHeadsRegistry; - } + public BiomesRegistry getBiomesRegistry() { + return biomesRegistry; + } - public ParticleRegistry getParticleRegistry() { - return particleRegistry; - } + public PlayerHeadsRegistry getPlayerHeadsRegistry() { + return playerHeadsRegistry; + } - public Main getPlugin() { - return plugin; - } + public ParticleRegistry getParticleRegistry() { + return particleRegistry; + } - private ItemBuilder backButton; - - private SimpleClickableItem getBackItem() { - if (backButton == null) { - backButton = new ItemBuilder(XMaterial.STONE_BUTTON.parseItem()) - .name(new MessageBuilder("MENU_BUTTONS_BACK_ITEM_NAME").asKey().build()) - .lore(new MessageBuilder("MENU_BUTTONS_BACK_ITEM_LORE").asKey().build()); - } - return new SimpleClickableItem(backButton.build(), event -> { - event.setCancelled(true); - event.getWhoClicked().closeInventory(); - getOptionsGui().open(event.getWhoClicked()); - }); - } + public Main getPlugin() { + return plugin; + } - public void addGoBackItem(ItemMap page, int slot) { - page.setItem(slot, getBackItem()); - } + private ItemBuilder backButton; - public void addGoBackItem(NormalFastInv gui, int slot) { - gui.setItem(slot, getBackItem()); + private SimpleClickableItem getBackItem() { + if(backButton == null) { + backButton = new ItemBuilder(XMaterial.STONE_BUTTON.parseItem()) + .name(new MessageBuilder("MENU_BUTTONS_BACK_ITEM_NAME").asKey().build()) + .lore(new MessageBuilder("MENU_BUTTONS_BACK_ITEM_LORE").asKey().build()); } - + return new SimpleClickableItem(backButton.build(), event -> { + event.setCancelled(true); + event.getWhoClicked().closeInventory(); + getOptionsGui().open(event.getWhoClicked()); + }); + } + + public void addGoBackItem(ItemMap page, int slot) { + page.setItem(slot, getBackItem()); + } + + public void addGoBackItem(NormalFastInv gui, int slot) { + gui.setItem(slot, getBackItem()); + } + + public void addGoBackItem(PaginatedFastInv gui, int slot) { + gui.setItem(slot, backButton.build(), event -> { + event.setCancelled(true); + event.getWhoClicked().closeInventory(); + getOptionsGui().open(event.getWhoClicked()); + }); + } } diff --git a/src/main/java/plugily/projects/buildbattle/handlers/menu/registry/particles/ParticleRegistry.java b/src/main/java/plugily/projects/buildbattle/handlers/menu/registry/particles/ParticleRegistry.java index b9b8b5d9..3479dda3 100644 --- a/src/main/java/plugily/projects/buildbattle/handlers/menu/registry/particles/ParticleRegistry.java +++ b/src/main/java/plugily/projects/buildbattle/handlers/menu/registry/particles/ParticleRegistry.java @@ -35,9 +35,8 @@ import plugily.projects.minigamesbox.classic.utils.helper.ItemBuilder; import plugily.projects.minigamesbox.classic.utils.version.VersionUtils; import plugily.projects.minigamesbox.classic.utils.version.xseries.XMaterial; -import plugily.projects.minigamesbox.inventory.common.item.ItemMap; -import plugily.projects.minigamesbox.inventory.common.item.SimpleClickableItem; -import plugily.projects.minigamesbox.inventory.paged.PagedFastInv; +import plugily.projects.minigamesbox.inventory.utils.fastinv.InventoryScheme; +import plugily.projects.minigamesbox.inventory.utils.fastinv.PaginatedFastInv; import java.util.*; @@ -49,7 +48,7 @@ */ public class ParticleRegistry { - private PagedFastInv particles; + private PaginatedFastInv particles; private final List blackListedParticles = Arrays.asList("BLOCK_CRACK", "ITEM_CRACK", "ITEM_TAKE", "BLOCK_DUST", "MOB_APPEARANCE", "FOOTSTEP", "REDSTONE"); private final Set registeredParticles = new HashSet<>(); private final Main plugin; @@ -114,46 +113,23 @@ private void updateParticlesFile() { } private void registerInventory() { - int i = 0; - Set particleItemsPage1 = new HashSet<>(registeredParticles.size()); - Set particleItemsPage2 = new HashSet<>(); - - for(ParticleItem item : registeredParticles) { - (i >= 45 ? particleItemsPage2 : particleItemsPage1).add(item); - i++; - } - - PagedFastInv gui = new PagedFastInv(54, new MessageBuilder("MENU_OPTION_CONTENT_PARTICLE_INVENTORY").asKey().build()); - - gui.setForceRefresh(true); - - ItemMap page1 = gui.createNewPage(); - ItemMap page2 = gui.createNewPage(); + PaginatedFastInv gui = new PaginatedFastInv(54, new MessageBuilder("MENU_OPTION_CONTENT_PARTICLE_INVENTORY").asKey().build()); - page2.setItem(45, new SimpleClickableItem(new ItemBuilder(new ItemStack(XMaterial.ARROW.parseMaterial())).name("<-").build(), event -> { - gui.setCurrentPage(0); - gui.refresh(); - })); - page1.setItem(53, new SimpleClickableItem(new ItemBuilder(new ItemStack(XMaterial.ARROW.parseMaterial())).name("->").build(), event -> { - gui.setCurrentPage(1); - gui.refresh(); - })); + new InventoryScheme() + .mask(" 1111111 ") + .mask(" 1111111 ") + .mask(" 1111111 ") + .mask(" 1111111 ") + .bindPagination('1').apply(gui); - addParticles(page1, particleItemsPage1); - addParticles(page2, particleItemsPage2); - addRemoveItem(page1); - addRemoveItem(page2); - setParticles(gui); - - plugin.getOptionsRegistry().addGoBackItem(page1, 46); - plugin.getOptionsRegistry().addGoBackItem(page2, 46); + gui.previousPageItem(45, p -> new ItemBuilder(XMaterial.ARROW.parseItem()).name("<- " + p + "/" + gui.lastPage()).build()); + gui.nextPageItem(53, p -> new ItemBuilder(XMaterial.ARROW.parseItem()).name(p + "/" + gui.lastPage() + " ->").build()); - gui.refresh(); - } + gui.setItem(52, new ItemBuilder(XMaterial.BARRIER.parseItem()).name("X").build(), + e -> e.getWhoClicked().closeInventory()); - private void addRemoveItem(ItemMap itemMap) { - itemMap.setItem(49, new SimpleClickableItem(new ItemBuilder(new ItemStack(Material.REDSTONE_BLOCK)) + gui.setItem(49, new ItemBuilder(new ItemStack(Material.REDSTONE_BLOCK)) .name(new MessageBuilder("MENU_OPTION_CONTENT_PARTICLE_ITEM_REMOVE_NAME").asKey().build()) .lore(Collections.singletonList(new MessageBuilder("MENU_OPTION_CONTENT_PARTICLE_ITEM_REMOVE_LORE").asKey().build())) .build(), event -> { @@ -170,12 +146,18 @@ private void addRemoveItem(ItemMap itemMap) { event.setCancelled(false); player.closeInventory(); ParticleRemoveMenu.openMenu(player, arena.getPlotManager().getPlot(player)); - })); + }); + + plugin.getOptionsRegistry().addGoBackItem(gui, 46); + + addParticles(gui); + + setParticles(gui); } - private void addParticles(ItemMap itemMap, Set particleItems) { - for(ParticleItem item : particleItems) { - itemMap.addItem(new SimpleClickableItem(item.getItemStack(), event -> { + private void addParticles(PaginatedFastInv gui) { + for(ParticleItem item : registeredParticles) { + gui.addContent(item.getItemStack(), event -> { HumanEntity humanEntity = event.getWhoClicked(); if(!(humanEntity instanceof Player)) @@ -198,15 +180,15 @@ private void addParticles(ItemMap itemMap, Set particleItems) { plot.getParticles().put(player.getLocation(), item.getEffect()); plugin.getUserManager().getUser(player).adjustStatistic("PARTICLES_USED", 1); new MessageBuilder("MENU_OPTION_CONTENT_PARTICLE_ADDED").asKey().player(player).sendPlayer(); - })); + }); } } - public PagedFastInv getParticles() { + public PaginatedFastInv getParticles() { return particles; } - public void setParticles(PagedFastInv particles) { + public void setParticles(PaginatedFastInv particles) { this.particles = particles; } diff --git a/src/main/java/plugily/projects/buildbattle/handlers/menu/registry/particles/ParticlesOption.java b/src/main/java/plugily/projects/buildbattle/handlers/menu/registry/particles/ParticlesOption.java index 41281d35..26fed1f9 100644 --- a/src/main/java/plugily/projects/buildbattle/handlers/menu/registry/particles/ParticlesOption.java +++ b/src/main/java/plugily/projects/buildbattle/handlers/menu/registry/particles/ParticlesOption.java @@ -52,7 +52,7 @@ public void onClick(InventoryClickEvent event) { } humanEntity.closeInventory(); - registry.getPlugin().getOptionsRegistry().getParticleRegistry().getParticles().open(humanEntity); + registry.getPlugin().getOptionsRegistry().getParticleRegistry().getParticles().open(((Player) humanEntity)); } }); } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 72834414..d466aefd 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -10,6 +10,7 @@ # Available localizations: # default - English language. Uses 'language.yml'. # See https://github.com/Plugily-Projects/locale_storage/tree/master/plugins/minecraft/buildbattle +# Help us translate the project -> https://translate.plugily.xyz # Use filename of the language e.g. de_DE.yml -> locale: de_DE locale: default