From fd12ef9fe793cfaf614f75738d9904b3acf3ff1a Mon Sep 17 00:00:00 2001 From: tastybento Date: Sun, 21 Apr 2024 13:12:52 -0700 Subject: [PATCH 1/5] Load of debug - trying to solve the settings slowness --- .../java/world/bentobox/bentobox/BStats.java | 22 ---- .../bentobox/bentobox/api/addons/Addon.java | 5 + .../bentobox/api/addons/GameModeAddon.java | 7 +- .../commands/admin/AdminSettingsCommand.java | 3 - .../admin/AdminUnregisterCommand.java | 1 - .../admin/conversations/NamePrompt.java | 1 - .../team/IslandTeamInviteAcceptCommand.java | 1 - .../team/IslandTeamSetownerCommand.java | 1 - .../bentobox/bentobox/api/flags/Flag.java | 13 +- .../bentobox/api/panels/TabbedPanel.java | 13 +- .../bentobox/database/objects/Island.java | 1 + .../bentobox/database/objects/Players.java | 124 ------------------ .../bentobox/listeners/JoinLeaveListener.java | 4 +- .../clicklisteners/CommandCycleClick.java | 3 - .../bentobox/managers/IslandsManager.java | 3 + .../bentobox/managers/PlayersManager.java | 71 +++------- .../bentobox/panels/settings/SettingsTab.java | 35 ++++- .../settings/WorldDefaultSettingsTab.java | 2 + .../admin/AdminSettingsCommandTest.java | 1 - .../bentobox/managers/PlayersManagerTest.java | 19 --- 20 files changed, 88 insertions(+), 242 deletions(-) diff --git a/src/main/java/world/bentobox/bentobox/BStats.java b/src/main/java/world/bentobox/bentobox/BStats.java index aedf7c83a..2fd23b587 100644 --- a/src/main/java/world/bentobox/bentobox/BStats.java +++ b/src/main/java/world/bentobox/bentobox/BStats.java @@ -59,7 +59,6 @@ public class BStats { registerGameModeAddonsChart(); registerHooksChart(); registerPlayersPerServerChart(); - registerFlagsDisplayModeChart(); // Single Line charts registerIslandsCountChart(); @@ -171,27 +170,6 @@ public class BStats { })); } - /** - * Sends the "flags display mode" of all the online players. - * @since 1.6.0 - */ - private void registerFlagsDisplayModeChart() { - metrics.addCustomChart(new AdvancedPie("flagsDisplayMode", () -> { - Map values = new HashMap<>(); - - Bukkit.getOnlinePlayers().forEach(player -> { - Flag.Mode mode = plugin.getPlayers().getFlagsDisplayMode(player.getUniqueId()); - if (values.containsKey(mode.name())) { - values.put(mode.name(), values.get(mode.name()) + 1); - } else { - values.put(mode.name(), 1); - } - }); - - return values; - })); - } - /** * Sends the enabled addons (except GameModeAddons) of this server as bar chart. * @since 1.17.1 diff --git a/src/main/java/world/bentobox/bentobox/api/addons/Addon.java b/src/main/java/world/bentobox/bentobox/api/addons/Addon.java index 57190b7d9..32f656ac4 100644 --- a/src/main/java/world/bentobox/bentobox/api/addons/Addon.java +++ b/src/main/java/world/bentobox/bentobox/api/addons/Addon.java @@ -21,6 +21,8 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.event.Listener; +import com.github.puregero.multilib.MultiLib; + import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.addons.request.AddonRequestHandler; import world.bentobox.bentobox.api.flags.Flag; @@ -45,6 +47,8 @@ public abstract class Addon { protected Addon() { state = State.DISABLED; + // If the config is updated, update the config. + MultiLib.onString(getPlugin(), "bentobox-config-update", v -> this.reloadConfig()); } /** @@ -220,6 +224,7 @@ public abstract class Addon { * @since 1.13.0 */ public void reloadConfig() { + BentoBox.getInstance().logDebug("Config reloaded"); config = loadYamlFile(); } diff --git a/src/main/java/world/bentobox/bentobox/api/addons/GameModeAddon.java b/src/main/java/world/bentobox/bentobox/api/addons/GameModeAddon.java index a45b12d68..79c3fa016 100644 --- a/src/main/java/world/bentobox/bentobox/api/addons/GameModeAddon.java +++ b/src/main/java/world/bentobox/bentobox/api/addons/GameModeAddon.java @@ -8,6 +8,8 @@ import org.bukkit.generator.ChunkGenerator; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; +import com.github.puregero.multilib.MultiLib; + import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.configuration.WorldSettings; import world.bentobox.bentobox.util.Util; @@ -129,7 +131,10 @@ public abstract class GameModeAddon extends Addon { * in-game and need to be saved. * @since 1.4.0 */ - public abstract void saveWorldSettings(); + public void saveWorldSettings() { + // Inform other servers + MultiLib.notify("bentobox-config-update", ""); + } /** * Defines if the game mode uses the latest {@link ChunkGenerator} API or 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 1fa50c1a7..f3192369b 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 @@ -206,11 +206,9 @@ public class AdminSettingsCommand extends CompositeCommand { switch (f.getType()) { case PROTECTION -> { island.setFlag(f, rank); - getIslands().updateIsland(island); } case SETTING -> { island.setSettingsFlag(f, activeState); - getIslands().updateIsland(island); } case WORLD_SETTING -> f.setSetting(getWorld(), activeState); default -> { @@ -226,7 +224,6 @@ public class AdminSettingsCommand extends CompositeCommand { user.sendMessage("general.errors.use-in-game"); return false; } - getPlayers().setFlagsDisplayMode(user.getUniqueId(), Mode.EXPERT); if (args.isEmpty()) { new TabbedPanelBuilder() .user(user) diff --git a/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminUnregisterCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminUnregisterCommand.java index d0b319aee..d4d730380 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminUnregisterCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/admin/AdminUnregisterCommand.java @@ -116,7 +116,6 @@ public class AdminUnregisterCommand extends ConfirmableCommand { targetIsland.getMembers().clear(); targetIsland.log(new LogEntry.Builder("UNREGISTER").data("player", targetUUID.toString()) .data("admin", user.getUniqueId().toString()).build()); - getIslands().updateIsland(targetIsland); user.sendMessage("commands.admin.unregister.unregistered-island", TextVariables.XYZ, Util.xyz(targetIsland.getCenter().toVector()), TextVariables.NAME, getPlayers().getName(targetUUID)); } diff --git a/src/main/java/world/bentobox/bentobox/api/commands/admin/conversations/NamePrompt.java b/src/main/java/world/bentobox/bentobox/api/commands/admin/conversations/NamePrompt.java index 645be62b2..79776ed5b 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/admin/conversations/NamePrompt.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/admin/conversations/NamePrompt.java @@ -40,7 +40,6 @@ public class NamePrompt extends StringPrompt { @Override public Prompt acceptInput(@NonNull ConversationContext context, String input) { if (island.renameHome(oldName, input)) { - plugin.getIslands().updateIsland(island); Bukkit.getScheduler().runTask(plugin, () -> user.sendMessage("general.success")); } else { Bukkit.getScheduler().runTask(plugin, () -> user.sendMessage("commands.island.renamehome.already-exists")); diff --git a/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamInviteAcceptCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamInviteAcceptCommand.java index 47ce878e7..3ba3013f1 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamInviteAcceptCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamInviteAcceptCommand.java @@ -197,7 +197,6 @@ public class IslandTeamInviteAcceptCommand extends ConfirmableCommand { inviter.sendMessage("commands.island.team.invite.accept.name-joined-your-island", TextVariables.NAME, user.getName(), TextVariables.DISPLAY_NAME, user.getDisplayName()); } - //IslandsManager.updateIsland(teamIsland); // Fire event TeamEvent.builder().island(teamIsland).reason(TeamEvent.Reason.JOINED).involvedPlayer(user.getUniqueId()) .build(); diff --git a/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamSetownerCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamSetownerCommand.java index 0c8475654..67827a1d8 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamSetownerCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamSetownerCommand.java @@ -92,7 +92,6 @@ public class IslandTeamSetownerCommand extends CompositeCommand { IslandEvent.builder().island(island).involvedPlayer(user.getUniqueId()).admin(false) .reason(IslandEvent.Reason.RANK_CHANGE).rankChange(RanksManager.OWNER_RANK, RanksManager.SUB_OWNER_RANK) .build(); - IslandsManager.updateIsland(island); return true; } diff --git a/src/main/java/world/bentobox/bentobox/api/flags/Flag.java b/src/main/java/world/bentobox/bentobox/api/flags/Flag.java index d28bc0add..4acca3cd1 100644 --- a/src/main/java/world/bentobox/bentobox/api/flags/Flag.java +++ b/src/main/java/world/bentobox/bentobox/api/flags/Flag.java @@ -384,6 +384,7 @@ public class Flag implements Comparable { */ @Nullable public PanelItem toPanelItem(BentoBox plugin, User user, World world, @Nullable Island island, boolean invisible) { + long m = System.currentTimeMillis(); // Invisibility if (!user.isOp() && invisible) { return null; @@ -394,10 +395,12 @@ public class Flag implements Comparable { .name(user.getTranslation("protection.panel.flag-item.name-layout", TextVariables.NAME, user.getTranslation(getNameReference()))) .clickHandler(clickHandler) .invisible(invisible); + BentoBox.getInstance().logDebug("Time for pib = " + (System.currentTimeMillis() - m)); if (hasSubPanel()) { pib.description(user.getTranslation("protection.panel.flag-item.menu-layout", TextVariables.DESCRIPTION, user.getTranslation(getDescriptionReference()))); return pib.build(); } + BentoBox.getInstance().logDebug("Type = " + getType()); return switch (getType()) { case PROTECTION -> createProtectionFlag(plugin, user, island, pib).build(); case SETTING -> createSettingFlag(user, island, pib).build(); @@ -428,20 +431,24 @@ public class Flag implements Comparable { } private PanelItemBuilder createProtectionFlag(BentoBox plugin, User user, Island island, PanelItemBuilder pib) { + long m = System.currentTimeMillis(); + BentoBox.getInstance().logDebug("Protection flag"); if (island != null) { + int y = island.getFlag(this); // Protection flag pib.description(user.getTranslation("protection.panel.flag-item.description-layout", TextVariables.DESCRIPTION, user.getTranslation(getDescriptionReference()))); RanksManager.getInstance().getRanks().forEach((reference, score) -> { - if (score > RanksManager.BANNED_RANK && score < island.getFlag(this)) { + if (score > RanksManager.BANNED_RANK && score < y) { pib.description(user.getTranslation("protection.panel.flag-item.blocked-rank") + user.getTranslation(reference)); - } else if (score <= RanksManager.OWNER_RANK && score > island.getFlag(this)) { + } else if (score <= RanksManager.OWNER_RANK && score > y) { pib.description(user.getTranslation("protection.panel.flag-item.allowed-rank") + user.getTranslation(reference)); - } else if (score == island.getFlag(this)) { + } else if (score == y) { pib.description(user.getTranslation("protection.panel.flag-item.minimal-rank") + user.getTranslation(reference)); } }); } + BentoBox.getInstance().logDebug("Protection flag " + (System.currentTimeMillis() - m)); return pib; } 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 cc1a41290..91abe4a0d 100644 --- a/src/main/java/world/bentobox/bentobox/api/panels/TabbedPanel.java +++ b/src/main/java/world/bentobox/bentobox/api/panels/TabbedPanel.java @@ -74,6 +74,7 @@ public class TabbedPanel extends Panel implements PanelListener { * @param page - the page of the tab to show (if multi paged) */ public void openPanel(int activeTab, int page) { + long m = System.currentTimeMillis(); if (!tpb.getTabs().containsKey(activeTab)) { // Request to open a non-existent tab throw new InvalidParameterException("Attempt to open a non-existent tab in a tabbed panel. Missing tab #" + activeTab); @@ -84,11 +85,12 @@ public class TabbedPanel extends Panel implements PanelListener { } this.activeTab = activeTab; this.activePage = page; + BentoBox.getInstance().logDebug("Time 1 " + (System.currentTimeMillis() - m)); // The items in the panel TreeMap items = new TreeMap<>(); // Get the tab Tab tab = tpb.getTabs().get(activeTab); - + BentoBox.getInstance().logDebug("Time 2 " + (System.currentTimeMillis() - m)); // Remove any tabs that have no items, if required if (tpb.isHideIfEmpty()) { tpb.getTabs().values().removeIf(t -> !t.equals(tab) && t.getPanelItems().stream().noneMatch(Objects::nonNull)); @@ -96,15 +98,16 @@ public class TabbedPanel extends Panel implements PanelListener { // Set up the tabbed header setupHeader(tab, items); - + BentoBox.getInstance().logDebug("Time 3 " + (System.currentTimeMillis() - m)); // Show the active tab if (tpb.getTabs().containsKey(activeTab)) { List panelItems = tab.getPanelItems(); // Adds the flag items panelItems.stream().filter(Objects::nonNull).skip(page * ITEMS_PER_PAGE).limit(page * ITEMS_PER_PAGE + ITEMS_PER_PAGE).forEach(i -> items.put(items.lastKey() + 1, i)); - + BentoBox.getInstance().logDebug("Time 4 " + (System.currentTimeMillis() - m)); // set up the footer setupFooter(items); + BentoBox.getInstance().logDebug("Time 5 " + (System.currentTimeMillis() - m)); // Add forward and backward icons if (page > 0) { // Previous page icon @@ -114,6 +117,7 @@ public class TabbedPanel extends Panel implements PanelListener { return true; }).build()); } + BentoBox.getInstance().logDebug("Time 6 " + (System.currentTimeMillis() - m)); if ((page + 1) * ITEMS_PER_PAGE < panelItems.stream().filter(Objects::nonNull).count()) { // Next page icon items.put(52, new PanelItemBuilder().icon(Material.ARROW).name(tpb.getUser().getTranslation(PROTECTION_PANEL + "next")).clickHandler((panel, user1, clickType, slot1) -> { @@ -122,11 +126,14 @@ public class TabbedPanel extends Panel implements PanelListener { return true; }).build()); } + BentoBox.getInstance().logDebug("Time 7 " + (System.currentTimeMillis() - m)); } else { throw new InvalidParameterException("Unknown tab slot number " + activeTab); } + BentoBox.getInstance().logDebug("Time 8 " + (System.currentTimeMillis() - m)); // Show it to the player this.makePanel(tab.getName(), items, tpb.getSize(), tpb.getUser(), this); + BentoBox.getInstance().logDebug("Time 9 " + (System.currentTimeMillis() - m)); } /** diff --git a/src/main/java/world/bentobox/bentobox/database/objects/Island.java b/src/main/java/world/bentobox/bentobox/database/objects/Island.java index 2be8fa824..fb8f7b0c8 100644 --- a/src/main/java/world/bentobox/bentobox/database/objects/Island.java +++ b/src/main/java/world/bentobox/bentobox/database/objects/Island.java @@ -1711,6 +1711,7 @@ public class Island implements DataObject, MetaDataAble { * Indicates the fields have been changed. Used to optimize saving on shutdown and notify other servers */ public void setChanged() { + BentoBox.getInstance().logDebug("Island changed"); this.setUpdatedDate(System.currentTimeMillis()); this.changed = true; IslandsManager.updateIsland(this); diff --git a/src/main/java/world/bentobox/bentobox/database/objects/Players.java b/src/main/java/world/bentobox/bentobox/database/objects/Players.java index 3cf06d2c0..ca384ed12 100644 --- a/src/main/java/world/bentobox/bentobox/database/objects/Players.java +++ b/src/main/java/world/bentobox/bentobox/database/objects/Players.java @@ -6,13 +6,10 @@ import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.UUID; -import java.util.stream.Collectors; import org.bukkit.Bukkit; -import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.Player; -import org.eclipse.jdt.annotation.Nullable; import com.google.gson.annotations.Expose; @@ -30,8 +27,6 @@ import world.bentobox.bentobox.util.Util; */ @Table(name = "Players") public class Players implements DataObject, MetaDataAble { - @Expose - private Map homeLocations = new HashMap<>(); @Expose private String uniqueId; @Expose @@ -77,7 +72,6 @@ public class Players implements DataObject, MetaDataAble { */ public Players(BentoBox plugin, UUID uniqueId) { this.uniqueId = uniqueId.toString(); - homeLocations = new HashMap<>(); locale = ""; // Try to get player's name this.playerName = Bukkit.getOfflinePlayer(uniqueId).getName(); @@ -86,72 +80,6 @@ public class Players implements DataObject, MetaDataAble { } } - /** - * Gets the default home location. - * @param world - world to check - * @return Location - home location in world - * @deprecated Homes are stored in the Island object now - */ - @Deprecated(since="1.18.0", forRemoval=true) - @Nullable - public Location getHomeLocation(World world) { - return getHomeLocation(world, 1); // Default - } - - /** - * Gets the home location by number for world - * @param world - includes world and any related nether or end worlds - * @param number - a number - * @return Location of this home or null if not available - * @deprecated Homes are stored in the island object now - */ - @Deprecated(since="1.18.0", forRemoval=true) - @Nullable - public Location getHomeLocation(World world, int number) { - // Remove any lost worlds/locations - homeLocations.keySet().removeIf(l -> l == null || l.getWorld() == null); - return homeLocations.entrySet().stream() - .filter(en -> Util.sameWorld(en.getKey().getWorld(), world) && en.getValue() == number) - .map(Map.Entry::getKey) - .findFirst() - .orElse(null); - } - - /** - * @param world - world - * @return Map of home locations - * @deprecated Homes are stored in the island object now - */ - @Deprecated(since="1.18.0", forRemoval=true) - public Map getHomeLocations(World world) { - // Remove any lost worlds/locations - homeLocations.keySet().removeIf(l -> l == null || l.getWorld() == null); - return homeLocations.entrySet().stream().filter(e -> Util.sameWorld(e.getKey().getWorld(),world)) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - } - - /** - * @return the homeLocations - * @deprecated Homes are stored in the Island object now - */ - @Deprecated(since="1.18.0", forRemoval=true) - public Map getHomeLocations() { - // Remove any lost worlds/locations - homeLocations.keySet().removeIf(l -> l == null || l.getWorld() == null); - return homeLocations; - } - - /** - * @param homeLocations the homeLocations to set - * @deprecated Homes are stored in the Island object now - */ - @Deprecated(since="1.18.0", forRemoval=true) - public void setHomeLocations(Map homeLocations) { - this.homeLocations = homeLocations; - // Remove any lost worlds/locations - homeLocations.keySet().removeIf(l -> l == null || l.getWorld() == null); - } - /** * @param playerName the playerName to set */ @@ -202,30 +130,6 @@ public class Players implements DataObject, MetaDataAble { this.resets.put(world.getName(), resets); } - /** - * Stores the home location of the player in a String format - * - * @param l a Bukkit location - * @deprecated Home locations are stored in islands - */ - @Deprecated(since="1.18.0", forRemoval=true) - public void setHomeLocation(final Location l) { - setHomeLocation(l, 1); - } - - /** - * Stores the numbered home location of the player. Numbering starts at 1. - * @param location - the location - * @param number - a number - * @deprecated Home locations are no longer stored for players. They are stored in islands. - */ - @Deprecated(since="1.18.0", forRemoval=true) - public void setHomeLocation(Location location, int number) { - // Remove any home locations in the same world with the same number - homeLocations.entrySet().removeIf(e -> e.getKey() == null || (Util.sameWorld(location.getWorld(), e.getKey().getWorld()) && e.getValue().equals(number))); - homeLocations.put(location, number); - } - /** * Set the uuid for this player object * @param uuid - UUID @@ -234,16 +138,6 @@ public class Players implements DataObject, MetaDataAble { uniqueId = uuid.toString(); } - /** - * Clears all home Locations in world - * @param world - world - * @deprecated Home locations are no longer stored for players. Use {@link world.bentobox.bentobox.managers.IslandsManager} - */ - @Deprecated(since="1.18.0", forRemoval=true) - public void clearHomeLocations(World world) { - homeLocations.keySet().removeIf(l -> l == null || l.getWorld() == null || Util.sameWorld(l.getWorld(), world)); - } - /** * @return the locale */ @@ -350,24 +244,6 @@ public class Players implements DataObject, MetaDataAble { } } - /** - * Returns the display mode for the Flags in the Settings Panel. - * @return the display mode for the Flags in the Settings Panel. - * @since 1.6.0 - */ - public Flag.Mode getFlagsDisplayMode() { - return flagsDisplayMode; - } - - /** - * Sets the display mode for the Flags in the Settings Panel. - * @param flagsDisplayMode the display mode for the Flags in the Settings Panel. - * @since 1.6.0 - */ - public void setFlagsDisplayMode(Flag.Mode flagsDisplayMode) { - this.flagsDisplayMode = flagsDisplayMode; - } - /** * @return the metaData * @since 1.15.5 diff --git a/src/main/java/world/bentobox/bentobox/listeners/JoinLeaveListener.java b/src/main/java/world/bentobox/bentobox/listeners/JoinLeaveListener.java index 7cac25a0c..0fdee8507 100644 --- a/src/main/java/world/bentobox/bentobox/listeners/JoinLeaveListener.java +++ b/src/main/java/world/bentobox/bentobox/listeners/JoinLeaveListener.java @@ -62,7 +62,7 @@ public class JoinLeaveListener implements Listener { // Make sure the player is loaded into the cache or create the player if they // don't exist - players.addPlayer(playerUUID); + players.getPlayer(playerUUID); // Reset island resets if required plugin.getIWM().getOverWorlds().stream() @@ -110,7 +110,7 @@ public class JoinLeaveListener implements Listener { private void firstTime(User user) { // Make sure the player is loaded into the cache or create the player if they // don't exist - players.addPlayer(user.getUniqueId()); + players.getPlayer(user.getUniqueId()); plugin.getIWM().getOverWorlds().stream().filter(w -> plugin.getIWM().isCreateIslandOnFirstLoginEnabled(w)) .forEach(w -> { diff --git a/src/main/java/world/bentobox/bentobox/listeners/flags/clicklisteners/CommandCycleClick.java b/src/main/java/world/bentobox/bentobox/listeners/flags/clicklisteners/CommandCycleClick.java index 922c82dcd..d5891191b 100644 --- a/src/main/java/world/bentobox/bentobox/listeners/flags/clicklisteners/CommandCycleClick.java +++ b/src/main/java/world/bentobox/bentobox/listeners/flags/clicklisteners/CommandCycleClick.java @@ -60,9 +60,6 @@ public class CommandCycleClick implements ClickHandler { } // Apply change to panel panel.getInventory().setItem(slot, commandRankClickListener.getPanelItem(command, user, world).getItem()); - // Save island - plugin.getIslands().updateIsland(island); - } else { user.getPlayer().playSound(user.getLocation(), Sound.BLOCK_METAL_HIT, 1F, 1F); } diff --git a/src/main/java/world/bentobox/bentobox/managers/IslandsManager.java b/src/main/java/world/bentobox/bentobox/managers/IslandsManager.java index 38090056d..5c9426bee 100644 --- a/src/main/java/world/bentobox/bentobox/managers/IslandsManager.java +++ b/src/main/java/world/bentobox/bentobox/managers/IslandsManager.java @@ -1641,11 +1641,14 @@ public class IslandsManager { * @param island - island */ public static void updateIsland(Island island) { + long m = System.currentTimeMillis(); + if (handler.objectExists(island.getUniqueId())) { island.clearChanged(); handler.saveObjectAsync(island) .thenAccept(b -> MultiLib.notify("bentobox-updateIsland", island.getUniqueId())); } + BentoBox.getInstance().logDebug("Island update " + (System.currentTimeMillis() - m)); } /** diff --git a/src/main/java/world/bentobox/bentobox/managers/PlayersManager.java b/src/main/java/world/bentobox/bentobox/managers/PlayersManager.java index 69ac06e12..b3303f738 100644 --- a/src/main/java/world/bentobox/bentobox/managers/PlayersManager.java +++ b/src/main/java/world/bentobox/bentobox/managers/PlayersManager.java @@ -2,7 +2,9 @@ package world.bentobox.bentobox.managers; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.UUID; @@ -14,7 +16,6 @@ import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import world.bentobox.bentobox.BentoBox; -import world.bentobox.bentobox.api.flags.Flag; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.Database; import world.bentobox.bentobox.database.objects.Island; @@ -27,11 +28,10 @@ public class PlayersManager { private final BentoBox plugin; private Database handler; private final Database names; + private final Map playerCache = new HashMap<>(); private final Set inTeleport; // this needs databasing - private boolean isSaveTaskRunning; - /** * Provides a memory cache of online player information * This is the one-stop-shop of player info @@ -56,17 +56,6 @@ public class PlayersManager { this.handler = handler; } - /** - * Load all players - not normally used as to load all players into memory will be wasteful - */ - public void load(){ - inTeleport.clear(); - } - - public boolean isSaveTaskRunning() { - return isSaveTaskRunning; - } - public void shutdown(){ handler.close(); } @@ -78,28 +67,18 @@ public class PlayersManager { */ @Nullable public Players getPlayer(UUID uuid){ - return addPlayer(uuid); + if (!playerCache.containsKey(uuid)) { + playerCache.put(uuid, addPlayer(uuid)); + BentoBox.getInstance().logDebug("Not in cache"); + } + return playerCache.get(uuid); } - /** - * Returns an unmodifiable collection of all the players that are currently in the cache. - * @return unmodifiable collection containing every player in the cache. - * @since 1.1 - */ - @NonNull - public Collection getPlayers() { - return Collections.unmodifiableCollection(handler.loadObjects()); - } - - /* - * Cache control methods - */ - /** * Adds a player to the database. If the UUID does not exist, a new player is made * @param playerUUID - the player's UUID */ - public Players addPlayer(@NonNull UUID playerUUID) { + private Players addPlayer(@NonNull UUID playerUUID) { Objects.requireNonNull(playerUUID); // If the player is in the database, load it, otherwise create a new player if (handler.objectExists(playerUUID.toString())) { @@ -113,6 +92,16 @@ public class PlayersManager { return player; } + /** + * Returns an unmodifiable collection of all the players that are currently in the cache. + * @return unmodifiable collection containing every player in the cache. + * @since 1.1 + */ + @NonNull + public Collection getPlayers() { + return Collections.unmodifiableCollection(handler.loadObjects()); + } + /** * Checks if the player is known or not. * Will check not just the cache but if the object but in the database too. @@ -320,28 +309,6 @@ public class PlayersManager { handler.saveObject(p); } - /** - * Sets the Flags display mode for the Settings Panel for this player. - * @param playerUUID player's UUID - * @param displayMode the {@link Flag.Mode} to set - * @since 1.6.0 - */ - public void setFlagsDisplayMode(UUID playerUUID, Flag.Mode displayMode) { - Players p = addPlayer(playerUUID); - p.setFlagsDisplayMode(displayMode); - handler.saveObject(p); - } - - /** - * Returns the Flags display mode for the Settings Panel for this player. - * @param playerUUID player's UUID - * @return the {@link Flag.Mode display mode} for the Flags in the Settings Panel. - * @since 1.6.0 - */ - public Flag.Mode getFlagsDisplayMode(UUID playerUUID) { - return addPlayer(playerUUID).getFlagsDisplayMode(); - } - /** * Remove player from database * @param player player to remove 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 547238e7c..738c0c9ff 100644 --- a/src/main/java/world/bentobox/bentobox/panels/settings/SettingsTab.java +++ b/src/main/java/world/bentobox/bentobox/panels/settings/SettingsTab.java @@ -1,9 +1,11 @@ package world.bentobox.bentobox.panels.settings; +import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.stream.Collectors; import org.bukkit.ChatColor; @@ -16,6 +18,7 @@ import org.eclipse.jdt.annotation.Nullable; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.flags.Flag; +import world.bentobox.bentobox.api.flags.Flag.Mode; import world.bentobox.bentobox.api.flags.Flag.Type; import world.bentobox.bentobox.api.localization.TextVariables; import world.bentobox.bentobox.api.panels.Panel; @@ -46,6 +49,8 @@ public class SettingsTab implements Tab, ClickHandler { protected Island island; protected TabbedPanel parent; + private Map currentMode = new HashMap<>(); + /** * Show a tab of settings * @param user - user who is viewing the tab @@ -73,6 +78,7 @@ public class SettingsTab implements Tab, ClickHandler { * @return list of flags that will be shown in this panel */ protected List getFlags() { + long m = System.currentTimeMillis(); // Get a list of flags of the correct type and sort by the translated names List flags = plugin.getFlagsManager().getFlags().stream().filter(f -> f.getType().equals(type)) // We're stripping colors to avoid weird sorting issues @@ -81,9 +87,10 @@ public class SettingsTab implements Tab, ClickHandler { // Remove any that are not for this game mode plugin.getIWM().getAddon(world).ifPresent(gm -> flags.removeIf(f -> !f.getGameModes().isEmpty() && !f.getGameModes().contains(gm))); // Remove any that are the wrong rank or that will be on the top row - Flag.Mode mode = plugin.getPlayers().getFlagsDisplayMode(user.getUniqueId()); + Flag.Mode mode = currentMode.getOrDefault(user.getUniqueId(), Mode.BASIC); plugin.getIWM().getAddon(world).ifPresent(gm -> flags.removeIf(f -> f.getMode().isGreaterThan(mode) || f.getMode().equals(Flag.Mode.TOP_ROW))); + BentoBox.getInstance().logDebug("Time to get flags = " + (System.currentTimeMillis() - m)); return flags; } @@ -116,17 +123,33 @@ public class SettingsTab implements Tab, ClickHandler { @Override @NonNull public List<@Nullable PanelItem> getPanelItems() { + long m = System.currentTimeMillis(); + BentoBox.getInstance().logDebug("Get panel items"); List flags = getFlags(); + BentoBox.getInstance().logDebug("Time for getFlags = " + (System.currentTimeMillis() - m)); int i = 0; // Jump past empty tabs while (flags.isEmpty() && i++ < Flag.Mode.values().length) { - plugin.getPlayers().setFlagsDisplayMode(user.getUniqueId(), plugin.getPlayers().getFlagsDisplayMode(user.getUniqueId()).getNext()); + currentMode.put(user.getUniqueId(), currentMode.getOrDefault(user.getUniqueId(), Mode.BASIC).getNext()); flags = getFlags(); } - return flags.stream().map( + + List<@Nullable PanelItem> result = new ArrayList<>(); + for (Flag f : flags) { + boolean x = plugin.getIWM().getHiddenFlags(world).contains(f.getID()); + //BentoBox.getInstance().logDebug("Time for x = " + (System.currentTimeMillis() - m)); + PanelItem pi = f.toPanelItem(plugin, user, world, island, x); + ///BentoBox.getInstance().logDebug("Time for pi = " + (System.currentTimeMillis() - m)); + result.add(pi); + } + /* + List<@Nullable PanelItem> result = flags.stream().map( (f -> f.toPanelItem(plugin, user, world, island, plugin.getIWM().getHiddenFlags(world).contains(f.getID())))) .toList(); + */ + BentoBox.getInstance().logDebug("Time for getpanelitems end = " + (System.currentTimeMillis() - m)); + return result; } @Override @@ -138,7 +161,7 @@ public class SettingsTab implements Tab, ClickHandler { icons.put(5, Flags.LOCK.toPanelItem(plugin, user, world, island, false)); } // Add the mode icon - switch (plugin.getPlayers().getFlagsDisplayMode(user.getUniqueId())) { + switch (currentMode.getOrDefault(user.getUniqueId(), Mode.BASIC)) { case ADVANCED -> icons.put(7, new PanelItemBuilder().icon(Material.GOLD_INGOT) .name(user.getTranslation(PROTECTION_PANEL + "mode.advanced.name")) .description(user.getTranslation(PROTECTION_PANEL + "mode.advanced.description"), "", @@ -215,13 +238,15 @@ public class SettingsTab implements Tab, ClickHandler { @Override public boolean onClick(Panel panel, User user, ClickType clickType, int slot) { + long m = System.currentTimeMillis(); // Cycle the mode - plugin.getPlayers().setFlagsDisplayMode(user.getUniqueId(), plugin.getPlayers().getFlagsDisplayMode(user.getUniqueId()).getNext()); + currentMode.put(user.getUniqueId(), currentMode.getOrDefault(user.getUniqueId(), Mode.BASIC).getNext()); if (panel instanceof TabbedPanel tp) { tp.setActivePage(0); tp.refreshPanel(); user.getPlayer().playSound(user.getLocation(), Sound.BLOCK_STONE_BUTTON_CLICK_OFF, 1F, 1F); } + BentoBox.getInstance().logDebug("Time for onClick = " + (System.currentTimeMillis() - m)); return true; } diff --git a/src/main/java/world/bentobox/bentobox/panels/settings/WorldDefaultSettingsTab.java b/src/main/java/world/bentobox/bentobox/panels/settings/WorldDefaultSettingsTab.java index 38f2ebad8..752d9d9c3 100644 --- a/src/main/java/world/bentobox/bentobox/panels/settings/WorldDefaultSettingsTab.java +++ b/src/main/java/world/bentobox/bentobox/panels/settings/WorldDefaultSettingsTab.java @@ -7,6 +7,7 @@ import org.bukkit.Material; import org.bukkit.World; import org.eclipse.jdt.annotation.NonNull; +import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.flags.Flag.Type; import world.bentobox.bentobox.api.flags.clicklisteners.WorldToggleClick; import world.bentobox.bentobox.api.localization.TextVariables; @@ -69,6 +70,7 @@ public class WorldDefaultSettingsTab extends SettingsTab implements Tab { */ @Override public @NonNull List getPanelItems() { + BentoBox.getInstance().logDebug("Get world default settings"); // Different description and click handlers return getFlags().stream().map(f -> { PanelItem i = f.toPanelItem(plugin, user, world, island, false); diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminSettingsCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminSettingsCommandTest.java index c22fc6c60..603522044 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminSettingsCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminSettingsCommandTest.java @@ -144,7 +144,6 @@ public class AdminSettingsCommandTest extends RanksManagerBeforeClassTest { when(plugin.getIWM()).thenReturn(iwm); // Players manager when(plugin.getPlayers()).thenReturn(pm); - when(pm.getFlagsDisplayMode(any())).thenReturn(Mode.BASIC); //Island Manager when(plugin.getIslands()).thenReturn(im); // Island - player has island diff --git a/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java b/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java index 77c00bbf4..d89ed0379 100644 --- a/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java +++ b/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java @@ -382,15 +382,6 @@ public class PlayersManagerTest { assertEquals(0, pm.getDeaths(world, uuid)); } - /** - * Test method for - * {@link world.bentobox.bentobox.managers.PlayersManager#getFlagsDisplayMode(java.util.UUID)}. - */ - @Test - public void testGetFlagsDisplayMode() { - assertEquals(Mode.BASIC, pm.getFlagsDisplayMode(uuid)); - } - /** * Test method for * {@link world.bentobox.bentobox.managers.PlayersManager#getLocale(java.util.UUID)}. @@ -634,16 +625,6 @@ public class PlayersManagerTest { } - /** - * Test method for - * {@link world.bentobox.bentobox.managers.PlayersManager#setFlagsDisplayMode(java.util.UUID, world.bentobox.bentobox.api.flags.Flag.Mode)}. - */ - @Test - public void testSetFlagsDisplayMode() { - pm.setFlagsDisplayMode(uuid, Mode.ADVANCED); - assertEquals(Mode.ADVANCED, pm.getFlagsDisplayMode(uuid)); - } - /** * Test method for * {@link world.bentobox.bentobox.managers.PlayersManager#setInTeleport(java.util.UUID)}. From 5b4ecd52933d00da397a95a0786232110b26407a Mon Sep 17 00:00:00 2001 From: tastybento Date: Sun, 21 Apr 2024 13:30:03 -0700 Subject: [PATCH 2/5] Debug debug --- src/main/java/world/bentobox/bentobox/api/flags/Flag.java | 5 ++++- .../bentobox/bentobox/panels/settings/SettingsTab.java | 6 ++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/world/bentobox/bentobox/api/flags/Flag.java b/src/main/java/world/bentobox/bentobox/api/flags/Flag.java index 4acca3cd1..938d0dc6b 100644 --- a/src/main/java/world/bentobox/bentobox/api/flags/Flag.java +++ b/src/main/java/world/bentobox/bentobox/api/flags/Flag.java @@ -384,6 +384,7 @@ public class Flag implements Comparable { */ @Nullable public PanelItem toPanelItem(BentoBox plugin, User user, World world, @Nullable Island island, boolean invisible) { + // TODO: Why is this taking long long m = System.currentTimeMillis(); // Invisibility if (!user.isOp() && invisible) { @@ -435,9 +436,11 @@ public class Flag implements Comparable { BentoBox.getInstance().logDebug("Protection flag"); if (island != null) { int y = island.getFlag(this); + BentoBox.getInstance().logDebug("Protection flag getFlag time " + (System.currentTimeMillis() - m)); // Protection flag pib.description(user.getTranslation("protection.panel.flag-item.description-layout", TextVariables.DESCRIPTION, user.getTranslation(getDescriptionReference()))); + BentoBox.getInstance().logDebug("Protection flag description time " + (System.currentTimeMillis() - m)); RanksManager.getInstance().getRanks().forEach((reference, score) -> { if (score > RanksManager.BANNED_RANK && score < y) { pib.description(user.getTranslation("protection.panel.flag-item.blocked-rank") + user.getTranslation(reference)); @@ -448,7 +451,7 @@ public class Flag implements Comparable { } }); } - BentoBox.getInstance().logDebug("Protection flag " + (System.currentTimeMillis() - m)); + BentoBox.getInstance().logDebug("Protection flag time " + (System.currentTimeMillis() - m)); return pib; } 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 738c0c9ff..85486d6a1 100644 --- a/src/main/java/world/bentobox/bentobox/panels/settings/SettingsTab.java +++ b/src/main/java/world/bentobox/bentobox/panels/settings/SettingsTab.java @@ -123,16 +123,18 @@ public class SettingsTab implements Tab, ClickHandler { @Override @NonNull public List<@Nullable PanelItem> getPanelItems() { - long m = System.currentTimeMillis(); + BentoBox.getInstance().logDebug("Get panel items"); List flags = getFlags(); - BentoBox.getInstance().logDebug("Time for getFlags = " + (System.currentTimeMillis() - m)); int i = 0; // Jump past empty tabs while (flags.isEmpty() && i++ < Flag.Mode.values().length) { currentMode.put(user.getUniqueId(), currentMode.getOrDefault(user.getUniqueId(), Mode.BASIC).getNext()); flags = getFlags(); } + long m = System.currentTimeMillis(); + + // TODO This is taking too long!!! List<@Nullable PanelItem> result = new ArrayList<>(); for (Flag f : flags) { From cf0bdbc3904c4a2889218597c24071008b93ecf7 Mon Sep 17 00:00:00 2001 From: tastybento Date: Sun, 28 Apr 2024 08:00:03 -0700 Subject: [PATCH 3/5] Bug found - addPlayer being called instead of getPlayer --- .../world/bentobox/bentobox/BentoBox.java | 2 +- .../bentobox/bentobox/api/addons/Addon.java | 1 - .../bentobox/bentobox/api/flags/Flag.java | 24 +++++------ .../bentobox/api/panels/TabbedPanel.java | 13 +----- .../bentobox/database/objects/Island.java | 1 - .../listeners/PanelListenerManager.java | 1 + .../bentobox/managers/IslandsManager.java | 8 ---- .../bentobox/managers/PlayersManager.java | 21 +++++----- .../bentobox/managers/island/IslandCache.java | 5 +++ .../bentobox/panels/settings/SettingsTab.java | 33 +++------------ .../settings/WorldDefaultSettingsTab.java | 1 - .../admin/AdminSettingsCommandTest.java | 10 ----- .../listeners/JoinLeaveListenerTest.java | 4 +- .../bentobox/managers/PlayersManagerTest.java | 40 +++++-------------- 14 files changed, 48 insertions(+), 116 deletions(-) diff --git a/src/main/java/world/bentobox/bentobox/BentoBox.java b/src/main/java/world/bentobox/bentobox/BentoBox.java index 567c2eceb..2f537cd84 100644 --- a/src/main/java/world/bentobox/bentobox/BentoBox.java +++ b/src/main/java/world/bentobox/bentobox/BentoBox.java @@ -419,7 +419,7 @@ public class BentoBox extends JavaPlugin implements Listener { * @return the ranksManager * @deprecated Just use {@code RanksManager.getInstance()} */ - @Deprecated(since = "2.0.0") + @Deprecated(since = "2.0.0", forRemoval = true) public RanksManager getRanksManager() { return RanksManager.getInstance(); } diff --git a/src/main/java/world/bentobox/bentobox/api/addons/Addon.java b/src/main/java/world/bentobox/bentobox/api/addons/Addon.java index 32f656ac4..5b4b5c18f 100644 --- a/src/main/java/world/bentobox/bentobox/api/addons/Addon.java +++ b/src/main/java/world/bentobox/bentobox/api/addons/Addon.java @@ -224,7 +224,6 @@ public abstract class Addon { * @since 1.13.0 */ public void reloadConfig() { - BentoBox.getInstance().logDebug("Config reloaded"); config = loadYamlFile(); } diff --git a/src/main/java/world/bentobox/bentobox/api/flags/Flag.java b/src/main/java/world/bentobox/bentobox/api/flags/Flag.java index 938d0dc6b..89b13cb09 100644 --- a/src/main/java/world/bentobox/bentobox/api/flags/Flag.java +++ b/src/main/java/world/bentobox/bentobox/api/flags/Flag.java @@ -384,29 +384,28 @@ public class Flag implements Comparable { */ @Nullable public PanelItem toPanelItem(BentoBox plugin, User user, World world, @Nullable Island island, boolean invisible) { - // TODO: Why is this taking long - long m = System.currentTimeMillis(); // Invisibility if (!user.isOp() && invisible) { return null; } - // Start the flag conversion PanelItemBuilder pib = new PanelItemBuilder() .icon(ItemParser.parse(user.getTranslationOrNothing(this.getIconReference()), new ItemStack(icon))) - .name(user.getTranslation("protection.panel.flag-item.name-layout", TextVariables.NAME, user.getTranslation(getNameReference()))) + .name(user.getTranslation("protection.panel.flag-item.name-layout", TextVariables.NAME, + user.getTranslation(getNameReference()))) .clickHandler(clickHandler) .invisible(invisible); - BentoBox.getInstance().logDebug("Time for pib = " + (System.currentTimeMillis() - m)); if (hasSubPanel()) { pib.description(user.getTranslation("protection.panel.flag-item.menu-layout", TextVariables.DESCRIPTION, user.getTranslation(getDescriptionReference()))); return pib.build(); } - BentoBox.getInstance().logDebug("Type = " + getType()); + return switch (getType()) { case PROTECTION -> createProtectionFlag(plugin, user, island, pib).build(); case SETTING -> createSettingFlag(user, island, pib).build(); case WORLD_SETTING -> createWorldSettingFlag(user, world, pib).build(); + }; + } private PanelItemBuilder createWorldSettingFlag(User user, World world, PanelItemBuilder pib) { @@ -432,16 +431,15 @@ public class Flag implements Comparable { } private PanelItemBuilder createProtectionFlag(BentoBox plugin, User user, Island island, PanelItemBuilder pib) { - long m = System.currentTimeMillis(); - BentoBox.getInstance().logDebug("Protection flag"); if (island != null) { int y = island.getFlag(this); - BentoBox.getInstance().logDebug("Protection flag getFlag time " + (System.currentTimeMillis() - m)); // Protection flag + pib.description(user.getTranslation("protection.panel.flag-item.description-layout", TextVariables.DESCRIPTION, user.getTranslation(getDescriptionReference()))); - BentoBox.getInstance().logDebug("Protection flag description time " + (System.currentTimeMillis() - m)); + RanksManager.getInstance().getRanks().forEach((reference, score) -> { + if (score > RanksManager.BANNED_RANK && score < y) { pib.description(user.getTranslation("protection.panel.flag-item.blocked-rank") + user.getTranslation(reference)); } else if (score <= RanksManager.OWNER_RANK && score > y) { @@ -451,7 +449,7 @@ public class Flag implements Comparable { } }); } - BentoBox.getInstance().logDebug("Protection flag time " + (System.currentTimeMillis() - m)); + return pib; } @@ -479,7 +477,7 @@ public class Flag implements Comparable { public Set getSubflags() { return subflags; } - + /** * Set the name of this flag for a specified locale. This enables the flag's name to be assigned via API. It will not be stored anywhere * and must be rewritten using this call every time the flag is built. @@ -492,7 +490,7 @@ public class Flag implements Comparable { public boolean setTranslatedName(Locale locale, String name) { return BentoBox.getInstance().getLocalesManager().setTranslation(locale, getNameReference(), name); } - + /** * Set the name of this flag for a specified locale. This enables the flag's name to be assigned via API. It will not be stored anywhere * and must be rewritten using this call every time the flag is built. 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 91abe4a0d..3c93ad8a6 100644 --- a/src/main/java/world/bentobox/bentobox/api/panels/TabbedPanel.java +++ b/src/main/java/world/bentobox/bentobox/api/panels/TabbedPanel.java @@ -74,7 +74,7 @@ public class TabbedPanel extends Panel implements PanelListener { * @param page - the page of the tab to show (if multi paged) */ public void openPanel(int activeTab, int page) { - long m = System.currentTimeMillis(); + if (!tpb.getTabs().containsKey(activeTab)) { // Request to open a non-existent tab throw new InvalidParameterException("Attempt to open a non-existent tab in a tabbed panel. Missing tab #" + activeTab); @@ -85,29 +85,23 @@ public class TabbedPanel extends Panel implements PanelListener { } this.activeTab = activeTab; this.activePage = page; - BentoBox.getInstance().logDebug("Time 1 " + (System.currentTimeMillis() - m)); // The items in the panel TreeMap items = new TreeMap<>(); // Get the tab Tab tab = tpb.getTabs().get(activeTab); - BentoBox.getInstance().logDebug("Time 2 " + (System.currentTimeMillis() - m)); // Remove any tabs that have no items, if required if (tpb.isHideIfEmpty()) { tpb.getTabs().values().removeIf(t -> !t.equals(tab) && t.getPanelItems().stream().noneMatch(Objects::nonNull)); } - // Set up the tabbed header setupHeader(tab, items); - BentoBox.getInstance().logDebug("Time 3 " + (System.currentTimeMillis() - m)); // Show the active tab if (tpb.getTabs().containsKey(activeTab)) { List panelItems = tab.getPanelItems(); // Adds the flag items panelItems.stream().filter(Objects::nonNull).skip(page * ITEMS_PER_PAGE).limit(page * ITEMS_PER_PAGE + ITEMS_PER_PAGE).forEach(i -> items.put(items.lastKey() + 1, i)); - BentoBox.getInstance().logDebug("Time 4 " + (System.currentTimeMillis() - m)); // set up the footer setupFooter(items); - BentoBox.getInstance().logDebug("Time 5 " + (System.currentTimeMillis() - m)); // Add forward and backward icons if (page > 0) { // Previous page icon @@ -117,7 +111,6 @@ public class TabbedPanel extends Panel implements PanelListener { return true; }).build()); } - BentoBox.getInstance().logDebug("Time 6 " + (System.currentTimeMillis() - m)); if ((page + 1) * ITEMS_PER_PAGE < panelItems.stream().filter(Objects::nonNull).count()) { // Next page icon items.put(52, new PanelItemBuilder().icon(Material.ARROW).name(tpb.getUser().getTranslation(PROTECTION_PANEL + "next")).clickHandler((panel, user1, clickType, slot1) -> { @@ -126,14 +119,11 @@ public class TabbedPanel extends Panel implements PanelListener { return true; }).build()); } - BentoBox.getInstance().logDebug("Time 7 " + (System.currentTimeMillis() - m)); } else { throw new InvalidParameterException("Unknown tab slot number " + activeTab); } - BentoBox.getInstance().logDebug("Time 8 " + (System.currentTimeMillis() - m)); // Show it to the player this.makePanel(tab.getName(), items, tpb.getSize(), tpb.getUser(), this); - BentoBox.getInstance().logDebug("Time 9 " + (System.currentTimeMillis() - m)); } /** @@ -189,6 +179,7 @@ public class TabbedPanel extends Panel implements PanelListener { // Reset the closed flag closed = false; } + } /** diff --git a/src/main/java/world/bentobox/bentobox/database/objects/Island.java b/src/main/java/world/bentobox/bentobox/database/objects/Island.java index fb8f7b0c8..2be8fa824 100644 --- a/src/main/java/world/bentobox/bentobox/database/objects/Island.java +++ b/src/main/java/world/bentobox/bentobox/database/objects/Island.java @@ -1711,7 +1711,6 @@ public class Island implements DataObject, MetaDataAble { * Indicates the fields have been changed. Used to optimize saving on shutdown and notify other servers */ public void setChanged() { - BentoBox.getInstance().logDebug("Island changed"); this.setUpdatedDate(System.currentTimeMillis()); this.changed = true; IslandsManager.updateIsland(this); diff --git a/src/main/java/world/bentobox/bentobox/listeners/PanelListenerManager.java b/src/main/java/world/bentobox/bentobox/listeners/PanelListenerManager.java index 53d402c5e..6cb57fd45 100644 --- a/src/main/java/world/bentobox/bentobox/listeners/PanelListenerManager.java +++ b/src/main/java/world/bentobox/bentobox/listeners/PanelListenerManager.java @@ -61,6 +61,7 @@ public class PanelListenerManager implements Listener { // Refresh l.refreshPanel(); }); + } else { // Wrong name - delete this panel openPanels.remove(user.getUniqueId()); diff --git a/src/main/java/world/bentobox/bentobox/managers/IslandsManager.java b/src/main/java/world/bentobox/bentobox/managers/IslandsManager.java index 5c9426bee..f1741721f 100644 --- a/src/main/java/world/bentobox/bentobox/managers/IslandsManager.java +++ b/src/main/java/world/bentobox/bentobox/managers/IslandsManager.java @@ -108,7 +108,6 @@ public class IslandsManager { // Listen for Island Updates MultiLib.onString(plugin, "bentobox-updateIsland", id -> { - BentoBox.getInstance().logDebug("Updating island " + id); Island island = handler.loadObject(id); if (island != null) { islandCache.updateIsland(island); @@ -117,13 +116,11 @@ public class IslandsManager { // Delete island blocks MultiLib.onString(plugin, "bentobox-deleteIsland", id -> { - BentoBox.getInstance().logDebug("Delete island blocks"); IslandDeletion idd = getGson().fromJson(id, IslandDeletion.class); plugin.getIslandDeletionManager().getIslandChunkDeletionManager().add(idd); }); // List for new islands MultiLib.onString(plugin, "bentobox-newIsland", id -> { - BentoBox.getInstance().logDebug("New island " + id); Island island = handler.loadObject(id); if (island != null) { islandCache.addIsland(island); @@ -139,7 +136,6 @@ public class IslandsManager { World world = Bukkit.getWorld(split[0]); if (world != null) { getIslandById(split[1]).ifPresent(i -> this.setSpawn(i)); - BentoBox.getInstance().logDebug("Setting spawn for world " + world); } } @@ -277,7 +273,6 @@ public class IslandsManager { * @param involvedPlayer - player related to the island deletion, if any */ public void deleteIsland(@NonNull Island island, boolean removeBlocks, @Nullable UUID involvedPlayer) { - BentoBox.getInstance().logDebug("Deleting island " + island.getUniqueId() + " remove blocks = " + removeBlocks); // Fire event IslandBaseEvent event = IslandEvent.builder().island(island).involvedPlayer(involvedPlayer) .reason(Reason.DELETE).build(); @@ -1641,14 +1636,11 @@ public class IslandsManager { * @param island - island */ public static void updateIsland(Island island) { - long m = System.currentTimeMillis(); - if (handler.objectExists(island.getUniqueId())) { island.clearChanged(); handler.saveObjectAsync(island) .thenAccept(b -> MultiLib.notify("bentobox-updateIsland", island.getUniqueId())); } - BentoBox.getInstance().logDebug("Island update " + (System.currentTimeMillis() - m)); } /** diff --git a/src/main/java/world/bentobox/bentobox/managers/PlayersManager.java b/src/main/java/world/bentobox/bentobox/managers/PlayersManager.java index b3303f738..0137c8ee5 100644 --- a/src/main/java/world/bentobox/bentobox/managers/PlayersManager.java +++ b/src/main/java/world/bentobox/bentobox/managers/PlayersManager.java @@ -69,7 +69,6 @@ public class PlayersManager { public Players getPlayer(UUID uuid){ if (!playerCache.containsKey(uuid)) { playerCache.put(uuid, addPlayer(uuid)); - BentoBox.getInstance().logDebug("Not in cache"); } return playerCache.get(uuid); } @@ -138,7 +137,7 @@ public class PlayersManager { * @param user - the User */ public void setPlayerName(@NonNull User user) { - Players player = addPlayer(user.getUniqueId()); + Players player = getPlayer(user.getUniqueId()); player.setPlayerName(user.getName()); handler.saveObject(player); Names newName = new Names(user.getName(), user.getUniqueId()); @@ -169,7 +168,7 @@ public class PlayersManager { * @return number of resets */ public int getResets(World world, UUID playerUUID) { - return addPlayer(playerUUID).getResets(world); + return getPlayer(playerUUID).getResets(world); } /** @@ -181,7 +180,7 @@ public class PlayersManager { * @see #getResets(World, UUID) */ public int getResetsLeft(World world, UUID playerUUID) { - addPlayer(playerUUID); + getPlayer(playerUUID); if (plugin.getIWM().getResetLimit(world) == -1) { return -1; } else { @@ -197,7 +196,7 @@ public class PlayersManager { * @param resets number of resets to set */ public void setResets(World world, UUID playerUUID, int resets) { - Players p = addPlayer(playerUUID); + Players p = getPlayer(playerUUID); p.setResets(world, resets); handler.saveObject(p); } @@ -208,7 +207,7 @@ public class PlayersManager { * @return name of the locale this player uses */ public String getLocale(UUID playerUUID) { - return addPlayer(playerUUID).getLocale(); + return getPlayer(playerUUID).getLocale(); } /** @@ -217,7 +216,7 @@ public class PlayersManager { * @param localeName - locale name, e.g., en-US */ public void setLocale(UUID playerUUID, String localeName) { - Players p = addPlayer(playerUUID); + Players p = getPlayer(playerUUID); p.setLocale(localeName); handler.saveObject(p); } @@ -228,7 +227,7 @@ public class PlayersManager { * @param playerUUID - the player's UUID */ public void addDeath(World world, UUID playerUUID) { - Players p = addPlayer(playerUUID); + Players p = getPlayer(playerUUID); p.addDeath(world); handler.saveObject(p); } @@ -240,7 +239,7 @@ public class PlayersManager { * @param deaths - number of deaths */ public void setDeaths(World world, UUID playerUUID, int deaths) { - Players p = addPlayer(playerUUID); + Players p = getPlayer(playerUUID); p.setDeaths(world, deaths); handler.saveObject(p); } @@ -252,7 +251,7 @@ public class PlayersManager { * @return number of deaths */ public int getDeaths(World world, UUID playerUUID) { - return addPlayer(playerUUID).getDeaths(world); + return getPlayer(playerUUID).getDeaths(world); } /** @@ -304,7 +303,7 @@ public class PlayersManager { * @param playerUUID player's UUID */ public void addReset(World world, UUID playerUUID) { - Players p = addPlayer(playerUUID); + Players p = getPlayer(playerUUID); p.addReset(world); handler.saveObject(p); } diff --git a/src/main/java/world/bentobox/bentobox/managers/island/IslandCache.java b/src/main/java/world/bentobox/bentobox/managers/island/IslandCache.java index 954972afa..3846c1a21 100644 --- a/src/main/java/world/bentobox/bentobox/managers/island/IslandCache.java +++ b/src/main/java/world/bentobox/bentobox/managers/island/IslandCache.java @@ -96,6 +96,11 @@ public class IslandCache { } + /** + * TODO REMOVE THIS DEBUG METHOD + * @param island1 island1 + * @param island2 island 2 + */ public void compareIslands(Island island1, Island island2) { if (island1 == null || island2 == null) { BentoBox.getInstance().logDebug("One or both islands are null. Cannot compare."); 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 85486d6a1..0bf39d470 100644 --- a/src/main/java/world/bentobox/bentobox/panels/settings/SettingsTab.java +++ b/src/main/java/world/bentobox/bentobox/panels/settings/SettingsTab.java @@ -1,14 +1,10 @@ package world.bentobox.bentobox.panels.settings; -import java.util.ArrayList; -import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; -import java.util.stream.Collectors; -import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.World; @@ -78,7 +74,8 @@ public class SettingsTab implements Tab, ClickHandler { * @return list of flags that will be shown in this panel */ protected List getFlags() { - long m = System.currentTimeMillis(); + return plugin.getFlagsManager().getFlags(); + /* // Get a list of flags of the correct type and sort by the translated names List flags = plugin.getFlagsManager().getFlags().stream().filter(f -> f.getType().equals(type)) // We're stripping colors to avoid weird sorting issues @@ -90,8 +87,7 @@ public class SettingsTab implements Tab, ClickHandler { Flag.Mode mode = currentMode.getOrDefault(user.getUniqueId(), Mode.BASIC); plugin.getIWM().getAddon(world).ifPresent(gm -> flags.removeIf(f -> f.getMode().isGreaterThan(mode) || f.getMode().equals(Flag.Mode.TOP_ROW))); - BentoBox.getInstance().logDebug("Time to get flags = " + (System.currentTimeMillis() - m)); - return flags; + return flags;*/ } /** @@ -123,8 +119,6 @@ public class SettingsTab implements Tab, ClickHandler { @Override @NonNull public List<@Nullable PanelItem> getPanelItems() { - - BentoBox.getInstance().logDebug("Get panel items"); List flags = getFlags(); int i = 0; // Jump past empty tabs @@ -132,25 +126,10 @@ public class SettingsTab implements Tab, ClickHandler { currentMode.put(user.getUniqueId(), currentMode.getOrDefault(user.getUniqueId(), Mode.BASIC).getNext()); flags = getFlags(); } - long m = System.currentTimeMillis(); - - // TODO This is taking too long!!! - - List<@Nullable PanelItem> result = new ArrayList<>(); - for (Flag f : flags) { - boolean x = plugin.getIWM().getHiddenFlags(world).contains(f.getID()); - //BentoBox.getInstance().logDebug("Time for x = " + (System.currentTimeMillis() - m)); - PanelItem pi = f.toPanelItem(plugin, user, world, island, x); - ///BentoBox.getInstance().logDebug("Time for pi = " + (System.currentTimeMillis() - m)); - result.add(pi); - } - /* List<@Nullable PanelItem> result = flags.stream().map( (f -> f.toPanelItem(plugin, user, world, island, plugin.getIWM().getHiddenFlags(world).contains(f.getID())))) .toList(); - */ - BentoBox.getInstance().logDebug("Time for getpanelitems end = " + (System.currentTimeMillis() - m)); return result; } @@ -162,6 +141,7 @@ public class SettingsTab implements Tab, ClickHandler { icons.put(4, Flags.CHANGE_SETTINGS.toPanelItem(plugin, user, world, island, false)); icons.put(5, Flags.LOCK.toPanelItem(plugin, user, world, island, false)); } + // Add the mode icon switch (currentMode.getOrDefault(user.getUniqueId(), Mode.BASIC)) { case ADVANCED -> icons.put(7, new PanelItemBuilder().icon(Material.GOLD_INGOT) @@ -186,7 +166,8 @@ public class SettingsTab implements Tab, ClickHandler { .clickHandler(this) .build()); } - // Add the reset everything to default - it's only in the player's settings panel + + // Add the reset everything to default - it's only in the player's settings panel if (island != null && user.getUniqueId().equals(island.getOwner())) { icons.put(8, new PanelItemBuilder().icon(Material.TNT) .name(user.getTranslation(PROTECTION_PANEL + "reset-to-default.name")) @@ -240,7 +221,6 @@ public class SettingsTab implements Tab, ClickHandler { @Override public boolean onClick(Panel panel, User user, ClickType clickType, int slot) { - long m = System.currentTimeMillis(); // Cycle the mode currentMode.put(user.getUniqueId(), currentMode.getOrDefault(user.getUniqueId(), Mode.BASIC).getNext()); if (panel instanceof TabbedPanel tp) { @@ -248,7 +228,6 @@ public class SettingsTab implements Tab, ClickHandler { tp.refreshPanel(); user.getPlayer().playSound(user.getLocation(), Sound.BLOCK_STONE_BUTTON_CLICK_OFF, 1F, 1F); } - BentoBox.getInstance().logDebug("Time for onClick = " + (System.currentTimeMillis() - m)); return true; } diff --git a/src/main/java/world/bentobox/bentobox/panels/settings/WorldDefaultSettingsTab.java b/src/main/java/world/bentobox/bentobox/panels/settings/WorldDefaultSettingsTab.java index 752d9d9c3..d258eb9ab 100644 --- a/src/main/java/world/bentobox/bentobox/panels/settings/WorldDefaultSettingsTab.java +++ b/src/main/java/world/bentobox/bentobox/panels/settings/WorldDefaultSettingsTab.java @@ -70,7 +70,6 @@ public class WorldDefaultSettingsTab extends SettingsTab implements Tab { */ @Override public @NonNull List getPanelItems() { - BentoBox.getInstance().logDebug("Get world default settings"); // Different description and click handlers return getFlags().stream().map(f -> { PanelItem i = f.toPanelItem(plugin, user, world, island, false); diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminSettingsCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminSettingsCommandTest.java index 603522044..10bdcaa12 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminSettingsCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/AdminSettingsCommandTest.java @@ -266,16 +266,6 @@ public class AdminSettingsCommandTest extends RanksManagerBeforeClassTest { verify(user).sendMessage("general.errors.use-in-game"); } - /** - * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminSettingsCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. - */ - @Test - public void testExecuteUserStringListOfStringNoArgs() { - assertTrue(asc.execute(user, "", Collections.emptyList())); - verify(pm).setFlagsDisplayMode(user.getUniqueId(), Mode.EXPERT); - // Open panel - } - /** * Test method for {@link world.bentobox.bentobox.api.commands.admin.AdminSettingsCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}. */ diff --git a/src/test/java/world/bentobox/bentobox/listeners/JoinLeaveListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/JoinLeaveListenerTest.java index f84a5ad3d..1bc40b1bc 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/JoinLeaveListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/JoinLeaveListenerTest.java @@ -237,7 +237,7 @@ public class JoinLeaveListenerTest { PlayerJoinEvent event = new PlayerJoinEvent(player, ""); jll.onPlayerJoin(event); // Verify - verify(pm, times(2)).addPlayer(any()); + verify(pm, times(2)).getPlayer(any()); verify(player, never()).sendMessage(anyString()); // Verify resets verify(pm).setResets(eq(world), any(), eq(0)); @@ -354,7 +354,7 @@ public class JoinLeaveListenerTest { PlayerJoinEvent event = new PlayerJoinEvent(player, ""); jll.onPlayerJoin(event); // Verify - verify(pm, times(2)).addPlayer(any()); + verify(pm, times(2)).getPlayer(any()); verify(player).sendMessage(eq("commands.island.create.on-first-login")); } diff --git a/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java b/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java index d89ed0379..3c6bcaa86 100644 --- a/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java +++ b/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java @@ -278,16 +278,6 @@ public class PlayersManagerTest { assertEquals(deaths + 1, pm.getDeaths(world, uuid)); } - /** - * Test method for - * {@link world.bentobox.bentobox.managers.PlayersManager#addPlayer(java.util.UUID)}. - */ - @Test - public void testAddPlayer() { - pm.addPlayer(uuid); - assertTrue(pm.isKnown(uuid)); - } - /** * Test method for * {@link world.bentobox.bentobox.managers.PlayersManager#addReset(org.bukkit.World, java.util.UUID)}. @@ -443,7 +433,7 @@ public class PlayersManagerTest { public void testGetSetResetsLeft() throws InstantiationException, IllegalAccessException, InvocationTargetException, ClassNotFoundException, NoSuchMethodException, IntrospectionException { // Add a player - pm.addPlayer(uuid); + pm.getPlayer(uuid); assertEquals(0, pm.getResets(world, uuid)); pm.setResets(world, uuid, 20); assertEquals(20, pm.getResets(world, uuid)); @@ -464,7 +454,7 @@ public class PlayersManagerTest { ClassNotFoundException, NoSuchMethodException, IntrospectionException { User user = pm.getUser("random"); assertNull(user); - pm.addPlayer(uuid); + pm.getPlayer(uuid); user = pm.getUser("tastybento"); assertEquals("tastybento", user.getName()); } @@ -485,7 +475,7 @@ public class PlayersManagerTest { */ @Test public void testGetUUID() { - pm.addPlayer(uuid); + pm.getPlayer(uuid); assertEquals(uuid, pm.getUUID("tastybento")); assertNull(pm.getUUID("unknown")); } @@ -498,7 +488,7 @@ public class PlayersManagerTest { public void testGetUUIDOfflinePlayer() { pm.setHandler(db); // Add a player to the cache - pm.addPlayer(uuid); + pm.getPlayer(uuid); UUID uuidResult = pm.getUUID("tastybento"); assertEquals(uuid, uuidResult); } @@ -511,7 +501,7 @@ public class PlayersManagerTest { public void testGetUUIDUnknownPlayer() { pm.setHandler(db); // Add a player to the cache - pm.addPlayer(uuid); + pm.getPlayer(uuid); // Unknown player should return null assertNull(pm.getUUID("tastybento123")); } @@ -541,8 +531,8 @@ public class PlayersManagerTest { @Test public void testIsKnown() { - pm.addPlayer(uuid); - pm.addPlayer(notUUID); + pm.getPlayer(uuid); + pm.getPlayer(notUUID); assertFalse(pm.isKnown(null)); assertTrue(pm.isKnown(uuid)); @@ -551,21 +541,11 @@ public class PlayersManagerTest { /** * Test method for - * {@link world.bentobox.bentobox.managers.PlayersManager#isSaveTaskRunning()}. + * {@link world.bentobox.bentobox.managers.PlayersManager#setHandler(Database)} */ @Test - public void testIsSaveTaskRunning() { - assertFalse(pm.isSaveTaskRunning()); - } - - /** - * Test method for - * {@link world.bentobox.bentobox.managers.PlayersManager#load()}. - */ - @Test - public void testLoad() { + public void testSetHandler() { pm.setHandler(db); - pm.load(); } /** @@ -608,7 +588,7 @@ public class PlayersManagerTest { public void testSetandGetPlayerName() { pm.setHandler(db); // Add a player - pm.addPlayer(uuid); + pm.getPlayer(uuid); assertEquals("tastybento", pm.getName(user.getUniqueId())); pm.setPlayerName(user); assertEquals(user.getName(), pm.getName(user.getUniqueId())); From 901295b0eaaa3a7fde77077ea94bb9e7e2eca43b Mon Sep 17 00:00:00 2001 From: tastybento Date: Sun, 28 Apr 2024 08:13:01 -0700 Subject: [PATCH 4/5] Uncomment code after debug --- .../bentobox/bentobox/panels/settings/SettingsTab.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) 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 0bf39d470..43359ed2e 100644 --- a/src/main/java/world/bentobox/bentobox/panels/settings/SettingsTab.java +++ b/src/main/java/world/bentobox/bentobox/panels/settings/SettingsTab.java @@ -1,10 +1,13 @@ package world.bentobox.bentobox.panels.settings; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.stream.Collectors; +import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.World; @@ -74,8 +77,6 @@ public class SettingsTab implements Tab, ClickHandler { * @return list of flags that will be shown in this panel */ protected List getFlags() { - return plugin.getFlagsManager().getFlags(); - /* // Get a list of flags of the correct type and sort by the translated names List flags = plugin.getFlagsManager().getFlags().stream().filter(f -> f.getType().equals(type)) // We're stripping colors to avoid weird sorting issues @@ -87,7 +88,7 @@ public class SettingsTab implements Tab, ClickHandler { Flag.Mode mode = currentMode.getOrDefault(user.getUniqueId(), Mode.BASIC); plugin.getIWM().getAddon(world).ifPresent(gm -> flags.removeIf(f -> f.getMode().isGreaterThan(mode) || f.getMode().equals(Flag.Mode.TOP_ROW))); - return flags;*/ + return flags; } /** From 64ccfaa37ff46d9e0085f61f0110001014b6d6cb Mon Sep 17 00:00:00 2001 From: tastybento Date: Sun, 28 Apr 2024 09:20:53 -0700 Subject: [PATCH 5/5] Fix tests --- .../commands/admin/AdminSettingsCommand.java | 7 +++-- .../island/IslandSettingsCommand.java | 3 ++- .../bentobox/panels/settings/SettingsTab.java | 26 +++++++++++-------- .../api/addons/AddonClassLoaderTest.java | 6 ++++- .../bentobox/api/addons/AddonTest.java | 6 ++++- .../team/IslandTeamSetownerCommandTest.java | 4 --- .../listeners/JoinLeaveListenerTest.java | 6 ++--- .../bentobox/managers/AddonsManagerTest.java | 6 ++++- .../managers/BlueprintsManagerTest.java | 10 ++++--- .../bentobox/managers/PlayersManagerTest.java | 1 - 10 files changed, 44 insertions(+), 31 deletions(-) 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 f3192369b..f7fafe800 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 @@ -16,7 +16,6 @@ import org.eclipse.jdt.annotation.Nullable; import world.bentobox.bentobox.api.addons.GameModeAddon; import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.flags.Flag; -import world.bentobox.bentobox.api.flags.Flag.Mode; import world.bentobox.bentobox.api.flags.Flag.Type; import world.bentobox.bentobox.api.localization.TextVariables; import world.bentobox.bentobox.api.panels.builders.TabbedPanelBuilder; @@ -228,7 +227,7 @@ public class AdminSettingsCommand extends CompositeCommand { new TabbedPanelBuilder() .user(user) .world(getWorld()) - .tab(1, new SettingsTab(getWorld(), user, Flag.Type.WORLD_SETTING)) + .tab(1, new SettingsTab(getWorld(), user, Flag.Type.WORLD_SETTING, Flag.Mode.EXPERT)) .tab(2, new WorldDefaultSettingsTab(getWorld(), user)) .startingSlot(1) .size(54) @@ -239,8 +238,8 @@ public class AdminSettingsCommand extends CompositeCommand { new TabbedPanelBuilder() .user(user) .world(island.getWorld()) - .island(island).tab(1, new SettingsTab(user, Flag.Type.PROTECTION)) - .tab(2, new SettingsTab(user, Flag.Type.SETTING)) + .island(island).tab(1, new SettingsTab(getWorld(), user, Flag.Type.PROTECTION, Flag.Mode.EXPERT)) + .tab(2, new SettingsTab(getWorld(), user, Flag.Type.SETTING, Flag.Mode.EXPERT)) .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 e37fd8ff2..027a16961 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 @@ -49,7 +49,8 @@ public class IslandSettingsCommand extends CompositeCommand { .user(user) .island(island) .world(island.getWorld()) - .tab(1, new SettingsTab(user, Flag.Type.PROTECTION)).tab(2, new SettingsTab(user, Flag.Type.SETTING)) + .tab(1, new SettingsTab(getWorld(), user, Flag.Type.PROTECTION)) + .tab(2, new SettingsTab(getWorld(), user, Flag.Type.SETTING)) .startingSlot(1) .size(54) .hideIfEmpty() 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 43359ed2e..b558cc9d4 100644 --- a/src/main/java/world/bentobox/bentobox/panels/settings/SettingsTab.java +++ b/src/main/java/world/bentobox/bentobox/panels/settings/SettingsTab.java @@ -50,17 +50,6 @@ public class SettingsTab implements Tab, ClickHandler { private Map currentMode = new HashMap<>(); - /** - * Show a tab of settings - * @param user - user who is viewing the tab - * @param type - flag type - */ - public SettingsTab(User user, Type type) { - this.user = user; - this.type = type; - // Island and world are set when the parent is set. - } - /** * Show a tab of settings * @param world - world @@ -73,6 +62,21 @@ public class SettingsTab implements Tab, ClickHandler { this.type = type; } + /** + * Show a tab of settings + * @param world - world + * @param user - user who is viewing the tab + * @param type - flag type + * @param defaultMode - the default mode to show + * @since 2.4.0 + */ + public SettingsTab(World world, User user, Type type, Flag.Mode defaultMode) { + this.world = world; + this.user = user; + this.type = type; + currentMode.put(user.getUniqueId(), defaultMode); + } + /** * @return list of flags that will be shown in this panel */ diff --git a/src/test/java/world/bentobox/bentobox/api/addons/AddonClassLoaderTest.java b/src/test/java/world/bentobox/bentobox/api/addons/AddonClassLoaderTest.java index f3fb90554..fc5d42574 100644 --- a/src/test/java/world/bentobox/bentobox/api/addons/AddonClassLoaderTest.java +++ b/src/test/java/world/bentobox/bentobox/api/addons/AddonClassLoaderTest.java @@ -32,10 +32,13 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.Whitebox; +import com.github.puregero.multilib.MultiLib; + import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.addons.exceptions.InvalidAddonDescriptionException; import world.bentobox.bentobox.managers.AddonsManager; @@ -46,7 +49,7 @@ import world.bentobox.bentobox.managers.AddonsManager; * */ @RunWith(PowerMockRunner.class) -@PrepareForTest( { BentoBox.class, Bukkit.class }) +@PrepareForTest({ BentoBox.class, Bukkit.class, MultiLib.class }) public class AddonClassLoaderTest { private enum mandatoryTags { @@ -80,6 +83,7 @@ public class AddonClassLoaderTest { */ @Before public void setUp() throws Exception { + PowerMockito.mockStatic(MultiLib.class, Mockito.RETURNS_MOCKS); // Set up plugin plugin = mock(BentoBox.class); Whitebox.setInternalState(BentoBox.class, "instance", plugin); diff --git a/src/test/java/world/bentobox/bentobox/api/addons/AddonTest.java b/src/test/java/world/bentobox/bentobox/api/addons/AddonTest.java index 6bb9c3e84..4921373b8 100644 --- a/src/test/java/world/bentobox/bentobox/api/addons/AddonTest.java +++ b/src/test/java/world/bentobox/bentobox/api/addons/AddonTest.java @@ -44,13 +44,15 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.Whitebox; +import com.github.puregero.multilib.MultiLib; + import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.managers.AddonsManager; import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.PlayersManager; @RunWith(PowerMockRunner.class) -@PrepareForTest( { BentoBox.class, Bukkit.class }) +@PrepareForTest({ BentoBox.class, Bukkit.class, MultiLib.class }) public class AddonTest { public static int BUFFER_SIZE = 10240; @@ -90,6 +92,8 @@ public class AddonTest { // Addons manager when(plugin.getAddonsManager()).thenReturn(am); + // MultiLib + PowerMockito.mockStatic(MultiLib.class, Mockito.RETURNS_MOCKS); // Mock item factory (for itemstacks) ItemFactory itemFactory = mock(ItemFactory.class); diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamSetownerCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamSetownerCommandTest.java index a7dcb0aae..7c89ff93c 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamSetownerCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamSetownerCommandTest.java @@ -278,8 +278,6 @@ public class IslandTeamSetownerCommandTest { assertTrue(its.canExecute(user, "", List.of("tastybento"))); assertTrue(its.execute(user, "", List.of("tastybento"))); verify(im).setOwner(any(), eq(user), eq(target)); - PowerMockito.verifyStatic(IslandsManager.class); - IslandsManager.updateIsland(island); } /** @@ -295,8 +293,6 @@ public class IslandTeamSetownerCommandTest { assertTrue(its.canExecute(user, "", List.of("tastybento"))); assertTrue(its.execute(user, "", List.of("tastybento"))); verify(im).setOwner(any(), eq(user), eq(target)); - PowerMockito.verifyStatic(IslandsManager.class); - IslandsManager.updateIsland(island); } /** diff --git a/src/test/java/world/bentobox/bentobox/listeners/JoinLeaveListenerTest.java b/src/test/java/world/bentobox/bentobox/listeners/JoinLeaveListenerTest.java index 1bc40b1bc..d60092f74 100644 --- a/src/test/java/world/bentobox/bentobox/listeners/JoinLeaveListenerTest.java +++ b/src/test/java/world/bentobox/bentobox/listeners/JoinLeaveListenerTest.java @@ -220,8 +220,6 @@ public class JoinLeaveListenerTest { jll = new JoinLeaveListener(plugin); } - /** - */ @After public void tearDown() { User.clearUsers(); @@ -237,7 +235,7 @@ public class JoinLeaveListenerTest { PlayerJoinEvent event = new PlayerJoinEvent(player, ""); jll.onPlayerJoin(event); // Verify - verify(pm, times(2)).getPlayer(any()); + verify(pm, times(3)).getPlayer(any()); verify(player, never()).sendMessage(anyString()); // Verify resets verify(pm).setResets(eq(world), any(), eq(0)); @@ -354,7 +352,7 @@ public class JoinLeaveListenerTest { PlayerJoinEvent event = new PlayerJoinEvent(player, ""); jll.onPlayerJoin(event); // Verify - verify(pm, times(2)).getPlayer(any()); + verify(pm, times(3)).getPlayer(any()); verify(player).sendMessage(eq("commands.island.create.on-first-login")); } diff --git a/src/test/java/world/bentobox/bentobox/managers/AddonsManagerTest.java b/src/test/java/world/bentobox/bentobox/managers/AddonsManagerTest.java index afb1a3bcc..260ef75d4 100644 --- a/src/test/java/world/bentobox/bentobox/managers/AddonsManagerTest.java +++ b/src/test/java/world/bentobox/bentobox/managers/AddonsManagerTest.java @@ -37,6 +37,8 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.Whitebox; +import com.github.puregero.multilib.MultiLib; + import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.Settings; import world.bentobox.bentobox.api.addons.Addon; @@ -49,7 +51,7 @@ import world.bentobox.bentobox.database.DatabaseSetup.DatabaseType; import world.bentobox.bentobox.database.objects.DataObject; @RunWith(PowerMockRunner.class) -@PrepareForTest( {Bukkit.class, BentoBox.class, DefaultPermissions.class} ) +@PrepareForTest({ Bukkit.class, BentoBox.class, DefaultPermissions.class, MultiLib.class }) public class AddonsManagerTest { private BentoBox plugin; @@ -81,6 +83,8 @@ public class AddonsManagerTest { when(plugin.getSettings()).thenReturn(s); PowerMockito.mockStatic(DefaultPermissions.class); + + PowerMockito.mockStatic(MultiLib.class, Mockito.RETURNS_MOCKS); } /** diff --git a/src/test/java/world/bentobox/bentobox/managers/BlueprintsManagerTest.java b/src/test/java/world/bentobox/bentobox/managers/BlueprintsManagerTest.java index b3b24ab42..ade8eda30 100644 --- a/src/test/java/world/bentobox/bentobox/managers/BlueprintsManagerTest.java +++ b/src/test/java/world/bentobox/bentobox/managers/BlueprintsManagerTest.java @@ -45,6 +45,8 @@ import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import com.github.puregero.multilib.MultiLib; + import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.addons.Addon; import world.bentobox.bentobox.api.addons.AddonDescription; @@ -62,7 +64,7 @@ import world.bentobox.bentobox.database.objects.Island; * */ @RunWith(PowerMockRunner.class) -@PrepareForTest( {Bukkit.class, BentoBox.class, BlueprintPaster.class} ) +@PrepareForTest({ Bukkit.class, BentoBox.class, BlueprintPaster.class, MultiLib.class }) public class BlueprintsManagerTest { public static int BUFFER_SIZE = 10240; @@ -95,10 +97,12 @@ public class BlueprintsManagerTest { private int times; @Mock private Server server; - /** - */ + @Before public void setUp() throws Exception { + // Multilib + PowerMockito.mockStatic(MultiLib.class, Mockito.RETURNS_MOCKS); + // Make the addon dataFolder = new File("dataFolder"); jarFile = new File("addon.jar"); diff --git a/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java b/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java index 3c6bcaa86..8037ad671 100644 --- a/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java +++ b/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java @@ -55,7 +55,6 @@ import org.powermock.reflect.Whitebox; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.Settings; -import world.bentobox.bentobox.api.flags.Flag.Mode; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.AbstractDatabaseHandler; import world.bentobox.bentobox.database.Database;