diff --git a/src/main/java/com/bgsoftware/superiorskyblock/menu/button/SuperiorMenuButton.java b/src/main/java/com/bgsoftware/superiorskyblock/menu/button/SuperiorMenuButton.java index 4a9ba97b7..25bc6915e 100644 --- a/src/main/java/com/bgsoftware/superiorskyblock/menu/button/SuperiorMenuButton.java +++ b/src/main/java/com/bgsoftware/superiorskyblock/menu/button/SuperiorMenuButton.java @@ -57,6 +57,10 @@ public SoundWrapper getLackPermissionSound() { return lackPermissionSound; } + public boolean ignorePagedButton() { + return false; + } + public > T applyToBuilder(AbstractBuilder buttonBuilder) { if (buttonBuilder.buttonItem == null) buttonBuilder.setButtonItem(this.buttonItem); diff --git a/src/main/java/com/bgsoftware/superiorskyblock/menu/button/impl/menu/TopIslandsPagedObjectButton.java b/src/main/java/com/bgsoftware/superiorskyblock/menu/button/impl/menu/TopIslandsPagedObjectButton.java index bba148794..43b33f1e3 100644 --- a/src/main/java/com/bgsoftware/superiorskyblock/menu/button/impl/menu/TopIslandsPagedObjectButton.java +++ b/src/main/java/com/bgsoftware/superiorskyblock/menu/button/impl/menu/TopIslandsPagedObjectButton.java @@ -56,8 +56,11 @@ public ItemStack modifyButtonItem(ItemStack buttonItem, MenuTopIslands superiorM SuperiorPlayer inventoryViewer = superiorMenu.getInventoryViewer(); - if (isSelfPlayerIsland && inventoryViewer.getIsland() != null) + if (isSelfPlayerIsland) { island = inventoryViewer.getIsland(); + if (island == null) + return getNullItem().build(); + } SuperiorPlayer islandOwner = island.getOwner(); int place = plugin.getGrid().getIslandPosition(island, superiorMenu.getSortingType()) + 1; @@ -164,6 +167,11 @@ public void onButtonClick(SuperiorSkyblockPlugin plugin, MenuTopIslands superior command.replace("PLAYER:", "").replace("%player%", clickedPlayer.getName()))); } + @Override + public boolean ignorePagedButton() { + return this.isSelfPlayerIsland; + } + public static class Builder extends PagedObjectBuilder { private TemplateItem noIslandItem; @@ -213,6 +221,20 @@ public TopIslandsPagedObjectButton build() { getObjectIndex()); } + public Builder copy() { + Builder cloned = new Builder(); + cloned.requiredPermission = requiredPermission; + cloned.lackPermissionSound = lackPermissionSound == null ? null : lackPermissionSound.copy(); + cloned.buttonItem = buttonItem == null ? null : buttonItem.copy(); + cloned.clickSound = clickSound == null ? null : clickSound.copy(); + cloned.commands = commands == null ? null : new ArrayList<>(commands); + cloned.noIslandItem = noIslandItem == null ? null : noIslandItem.copy(); + cloned.noIslandSound = noIslandSound == null ? null : noIslandSound.copy(); + cloned.noIslandCommands = noIslandCommands == null ? null : new ArrayList<>(noIslandCommands); + cloned.isPlayerSelfIsland = isPlayerSelfIsland; + return cloned; + } + } } diff --git a/src/main/java/com/bgsoftware/superiorskyblock/menu/impl/MenuTopIslands.java b/src/main/java/com/bgsoftware/superiorskyblock/menu/impl/MenuTopIslands.java index 32ad56219..86df3e88a 100644 --- a/src/main/java/com/bgsoftware/superiorskyblock/menu/impl/MenuTopIslands.java +++ b/src/main/java/com/bgsoftware/superiorskyblock/menu/impl/MenuTopIslands.java @@ -7,9 +7,6 @@ import com.bgsoftware.superiorskyblock.api.menu.ISuperiorMenu; import com.bgsoftware.superiorskyblock.api.objects.Pair; import com.bgsoftware.superiorskyblock.api.wrappers.SuperiorPlayer; -import com.bgsoftware.superiorskyblock.hooks.support.PlaceholderHook; -import com.bgsoftware.superiorskyblock.lang.Message; -import com.bgsoftware.superiorskyblock.lang.PlayerLocales; import com.bgsoftware.superiorskyblock.menu.PagedSuperiorMenu; import com.bgsoftware.superiorskyblock.menu.SuperiorMenu; import com.bgsoftware.superiorskyblock.menu.button.impl.menu.ChangeSortingTypeButton; @@ -80,9 +77,6 @@ public static void init() { sortGlowWhenSelected = cfg.getBoolean("sort-glow-when-selected", false); - patternBuilder.mapButtons(getSlots(cfg, "player-island", menuPatternSlots), new TopIslandsPagedObjectButton.Builder() - .setPlayerSelfIsland(true)); - patternBuilder.mapButtons(getSlots(cfg, "worth-sort", menuPatternSlots), new ChangeSortingTypeButton.Builder().setSortingType(SortingTypes.BY_WORTH)); @@ -115,19 +109,29 @@ public static void init() { } if (cfg.isString("slots")) { + boolean configuredSelfPlayerButton = false; + for (char slotsChar : cfg.getString("slots", "").toCharArray()) { ConfigurationSection itemsSection = cfg.getConfigurationSection("items." + slotsChar); if (itemsSection == null) continue; - patternBuilder.mapButtons(menuPatternSlots.getSlots(slotsChar), new TopIslandsPagedObjectButton.Builder() + TopIslandsPagedObjectButton.Builder slotsBuilder = new TopIslandsPagedObjectButton.Builder() .setIslandItem(FileUtils.getItemStack("top-islands.yml", itemsSection.getConfigurationSection("island"))) .setNoIslandItem(FileUtils.getItemStack("top-islands.yml", itemsSection.getConfigurationSection("no-island"))) .setIslandSound(FileUtils.getSound(cfg.getConfigurationSection("sounds." + slotsChar + ".island"))) .setNoIslandSound(FileUtils.getSound(cfg.getConfigurationSection("sounds." + slotsChar + ".no-island"))) .setIslandCommands(cfg.getStringList("commands." + slotsChar + ".island")) - .setNoIslandCommands(cfg.getStringList("commands." + slotsChar + ".no-island"))); + .setNoIslandCommands(cfg.getStringList("commands." + slotsChar + ".no-island")); + + patternBuilder.mapButtons(menuPatternSlots.getSlots(slotsChar), slotsBuilder); + + if (!configuredSelfPlayerButton) { + configuredSelfPlayerButton = true; + patternBuilder.mapButtons(getSlots(cfg, "player-island", menuPatternSlots), + slotsBuilder.copy().setPlayerSelfIsland(true)); + } } } diff --git a/src/main/java/com/bgsoftware/superiorskyblock/menu/pattern/impl/PagedMenuPattern.java b/src/main/java/com/bgsoftware/superiorskyblock/menu/pattern/impl/PagedMenuPattern.java index 49bdb6e56..ab4cb4e1b 100644 --- a/src/main/java/com/bgsoftware/superiorskyblock/menu/pattern/impl/PagedMenuPattern.java +++ b/src/main/java/com/bgsoftware/superiorskyblock/menu/pattern/impl/PagedMenuPattern.java @@ -42,7 +42,7 @@ public void setupInventory(Inventory inventory, M superiorMenu) { for (int slot = 0; slot < this.buttons.length; ++slot) { SuperiorMenuButton button = this.buttons[slot]; - if (button instanceof PagedObjectButton) { + if (button instanceof PagedObjectButton && !button.ignorePagedButton()) { PagedObjectButton pagedObjectButton = (PagedObjectButton) button; int objectIndex = pagedObjectSlot + (objectsPerPage * (currentPage - 1)); diff --git a/src/main/java/com/bgsoftware/superiorskyblock/utils/items/TemplateItem.java b/src/main/java/com/bgsoftware/superiorskyblock/utils/items/TemplateItem.java index 5ed4518a6..cba1d574a 100644 --- a/src/main/java/com/bgsoftware/superiorskyblock/utils/items/TemplateItem.java +++ b/src/main/java/com/bgsoftware/superiorskyblock/utils/items/TemplateItem.java @@ -30,4 +30,8 @@ public ItemStack build(SuperiorPlayer superiorPlayer) { return getBuilder().build(superiorPlayer); } + public TemplateItem copy() { + return new TemplateItem(this.itemBuilder.copy()); + } + } diff --git a/src/main/java/com/bgsoftware/superiorskyblock/wrappers/SoundWrapper.java b/src/main/java/com/bgsoftware/superiorskyblock/wrappers/SoundWrapper.java index dc3eadcc3..fb72c09be 100644 --- a/src/main/java/com/bgsoftware/superiorskyblock/wrappers/SoundWrapper.java +++ b/src/main/java/com/bgsoftware/superiorskyblock/wrappers/SoundWrapper.java @@ -35,4 +35,9 @@ public float getVolume() { public float getPitch() { return pitch; } + + public SoundWrapper copy() { + return new SoundWrapper(this.sound, this.volume, this.pitch); + } + }