diff --git a/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminSettingsCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminSettingsCommand.java index b7e450a36..80dbc9d0a 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminSettingsCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminSettingsCommand.java @@ -242,8 +242,8 @@ public class AdminSettingsCommand extends CompositeCommand { new TabbedPanelBuilder() .user(user) .world(island.getWorld()) - .tab(1, new SettingsTab(user, island, Flag.Type.PROTECTION)) - .tab(2, new SettingsTab(user, island, Flag.Type.SETTING)) + .island(island).tab(1, new SettingsTab(user, Flag.Type.PROTECTION)) + .tab(2, new SettingsTab(user, Flag.Type.SETTING)) .startingSlot(1) .size(54) .build().openPanel(); diff --git a/src/main/java/world/bentobox/bentobox/api/commands/island/IslandSettingsCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/island/IslandSettingsCommand.java index 4e309ecfc..e37fd8ff2 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/island/IslandSettingsCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/island/IslandSettingsCommand.java @@ -47,9 +47,9 @@ public class IslandSettingsCommand extends CompositeCommand { public boolean execute(User user, String label, List args) { new TabbedPanelBuilder() .user(user) + .island(island) .world(island.getWorld()) - .tab(1, new SettingsTab(user, island, Flag.Type.PROTECTION)) - .tab(2, new SettingsTab(user, island, Flag.Type.SETTING)) + .tab(1, new SettingsTab(user, Flag.Type.PROTECTION)).tab(2, new SettingsTab(user, Flag.Type.SETTING)) .startingSlot(1) .size(54) .hideIfEmpty() diff --git a/src/main/java/world/bentobox/bentobox/api/panels/Panel.java b/src/main/java/world/bentobox/bentobox/api/panels/Panel.java index 6ab674a55..48aef7d6f 100644 --- a/src/main/java/world/bentobox/bentobox/api/panels/Panel.java +++ b/src/main/java/world/bentobox/bentobox/api/panels/Panel.java @@ -13,6 +13,7 @@ import org.eclipse.jdt.annotation.NonNull; import world.bentobox.bentobox.api.panels.builders.PanelBuilder; import world.bentobox.bentobox.api.user.User; +import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.listeners.PanelListenerManager; import world.bentobox.bentobox.util.heads.HeadGetter; import world.bentobox.bentobox.util.heads.HeadRequester; @@ -30,6 +31,7 @@ public class Panel implements HeadRequester, InventoryHolder { private User user; private String name; private World world; + private Island island; /** * Various types of Panels that can be created that use InventoryTypes. @@ -234,4 +236,18 @@ public class Panel implements HeadRequester, InventoryHolder { this.world = world; } + /** + * @return the island + */ + public Island getIsland() { + return island; + } + + /** + * @param island the island to set + */ + protected void setIsland(Island island) { + this.island = island; + } + } diff --git a/src/main/java/world/bentobox/bentobox/api/panels/Tab.java b/src/main/java/world/bentobox/bentobox/api/panels/Tab.java index 989b179e1..a9be2980f 100644 --- a/src/main/java/world/bentobox/bentobox/api/panels/Tab.java +++ b/src/main/java/world/bentobox/bentobox/api/panels/Tab.java @@ -15,6 +15,19 @@ import org.eclipse.jdt.annotation.Nullable; */ public interface Tab { + /** + * @return the tabbed panel that owns this tab + */ + default TabbedPanel getParentPanel() { + return null; + } + + /** + * @param parent set the tabbed panel that owns this tab + */ + default void setParentPanel(TabbedPanel parent) { + } + // The icon that should be shown at the top of the tabbed panel PanelItem getIcon(); diff --git a/src/main/java/world/bentobox/bentobox/api/panels/TabbedPanel.java b/src/main/java/world/bentobox/bentobox/api/panels/TabbedPanel.java index 1589877b2..c871ff403 100644 --- a/src/main/java/world/bentobox/bentobox/api/panels/TabbedPanel.java +++ b/src/main/java/world/bentobox/bentobox/api/panels/TabbedPanel.java @@ -44,6 +44,8 @@ public class TabbedPanel extends Panel implements PanelListener { public TabbedPanel(TabbedPanelBuilder tpb) { this.tpb = tpb; this.setWorld(tpb.getWorld()); + // Set island context in Panel + this.setIsland(tpb.getIsland()); } /* (non-Javadoc) @@ -208,4 +210,5 @@ public class TabbedPanel extends Panel implements PanelListener { public void setActiveTab(int activeTab) { this.activeTab = activeTab; } + } diff --git a/src/main/java/world/bentobox/bentobox/api/panels/builders/TabbedPanelBuilder.java b/src/main/java/world/bentobox/bentobox/api/panels/builders/TabbedPanelBuilder.java index 37904314b..af12d34fa 100644 --- a/src/main/java/world/bentobox/bentobox/api/panels/builders/TabbedPanelBuilder.java +++ b/src/main/java/world/bentobox/bentobox/api/panels/builders/TabbedPanelBuilder.java @@ -9,6 +9,7 @@ import org.bukkit.World; import world.bentobox.bentobox.api.panels.Tab; import world.bentobox.bentobox.api.panels.TabbedPanel; import world.bentobox.bentobox.api.user.User; +import world.bentobox.bentobox.database.objects.Island; /** * Builds {@link TabbedPanel}'s @@ -23,6 +24,17 @@ public class TabbedPanelBuilder { private World world; private User user; private boolean hideIfEmpty; + private Island island; + + /** + * Set the island related to this panel + * @param island island + * @return PanelBuilder - PanelBuilder + */ + public TabbedPanelBuilder island(Island island) { + this.island = island; + return this; + } /** * Forces panel to be a specific number of slots. @@ -97,7 +109,10 @@ public class TabbedPanelBuilder { if (!tabs.isEmpty() && !tabs.containsKey(startingSlot)) { startingSlot = ((TreeMap)tabs).firstKey(); } - return new TabbedPanel(this); + TabbedPanel tp = new TabbedPanel(this); + // Set tab parents + tabs.values().forEach(tab -> tab.setParentPanel(tp)); + return tp; } /** @@ -142,6 +157,12 @@ public class TabbedPanelBuilder { return hideIfEmpty; } + /** + * @return the island + */ + public Island getIsland() { + return island; + } } diff --git a/src/main/java/world/bentobox/bentobox/listeners/flags/clicklisteners/GeoMobLimitTab.java b/src/main/java/world/bentobox/bentobox/listeners/flags/clicklisteners/GeoMobLimitTab.java index b721dee20..d0a519001 100644 --- a/src/main/java/world/bentobox/bentobox/listeners/flags/clicklisteners/GeoMobLimitTab.java +++ b/src/main/java/world/bentobox/bentobox/listeners/flags/clicklisteners/GeoMobLimitTab.java @@ -48,8 +48,10 @@ public class GeoMobLimitTab implements Tab, ClickHandler { private final User user; private final EntityLimitTabType type; private final World world; + private TabbedPanel parent; /** + * @param parent - tabbed panel that owns this panel * @param user - user viewing the tab * @param type - type of tab to show - Geo limit or Mob limit * @param world - world where this tab is being used @@ -61,7 +63,6 @@ public class GeoMobLimitTab implements Tab, ClickHandler { this.world = world; } - @Override public boolean onClick(Panel panel, User user, ClickType clickType, int slot) { // Case panel to Tabbed Panel to get the active page @@ -140,4 +141,14 @@ public class GeoMobLimitTab implements Tab, ClickHandler { return pib.build(); } + @Override + public TabbedPanel getParentPanel() { + return parent; + } + + @Override + public void setParentPanel(TabbedPanel parent) { + this.parent = parent; + } + } diff --git a/src/main/java/world/bentobox/bentobox/panels/settings/SettingsTab.java b/src/main/java/world/bentobox/bentobox/panels/settings/SettingsTab.java index 9657aba49..36462301a 100644 --- a/src/main/java/world/bentobox/bentobox/panels/settings/SettingsTab.java +++ b/src/main/java/world/bentobox/bentobox/panels/settings/SettingsTab.java @@ -44,6 +44,7 @@ public class SettingsTab implements Tab, ClickHandler { protected User user; protected World world; protected Island island; + protected TabbedPanel parent; /** * Show a tab of settings @@ -51,9 +52,9 @@ public class SettingsTab implements Tab, ClickHandler { * @param island - the island * @param type - flag type */ - public SettingsTab(User user, Island island, Type type) { + public SettingsTab(User user, Type type) { this.user = user; - this.island = island; + this.island = parent.getIsland(); this.type = type; this.world = island.getWorld(); } @@ -124,7 +125,9 @@ public class SettingsTab implements Tab, ClickHandler { plugin.getPlayers().setFlagsDisplayMode(user.getUniqueId(), plugin.getPlayers().getFlagsDisplayMode(user.getUniqueId()).getNext()); flags = getFlags(); } - return flags.stream().map((f -> f.toPanelItem(plugin, user, island, plugin.getIWM().getHiddenFlags(world).contains(f.getID())))).toList(); + return flags.stream().map( + (f -> f.toPanelItem(plugin, user, island, plugin.getIWM().getHiddenFlags(world).contains(f.getID())))) + .toList(); } @Override @@ -223,4 +226,14 @@ public class SettingsTab implements Tab, ClickHandler { return true; } + @Override + public TabbedPanel getParentPanel() { + return parent; + } + + @Override + public void setParentPanel(TabbedPanel parent) { + this.parent = parent; + } + }