diff --git a/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamCommand.java index 19d8c2515..6cb702ea7 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/island/team/IslandTeamCommand.java @@ -136,7 +136,7 @@ public class IslandTeamCommand extends CompositeCommand { * @since 1.8.0 */ public void addInvite(TeamInvite.Type type, @NonNull UUID inviter, @NonNull UUID invitee, @NonNull Island island) { - handler.saveObjectAsync(new TeamInvite(type, inviter, invitee, island)); + handler.saveObjectAsync(new TeamInvite(type, inviter, invitee, island.getUniqueId())); } /** 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 ed08f2394..47ce878e7 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 @@ -13,7 +13,6 @@ import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.objects.Island; import world.bentobox.bentobox.database.objects.TeamInvite; import world.bentobox.bentobox.database.objects.TeamInvite.Type; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.RanksManager; import world.bentobox.bentobox.util.Util; @@ -100,7 +99,7 @@ public class IslandTeamInviteAcceptCommand extends ConfirmableCommand { // Remove the invite itc.removeInvite(user.getUniqueId()); User inviter = User.getInstance(invite.getInviter()); - Island island = invite.getIsland(); + Island island = getIslands().getIslandById(invite.getIslandID()).orElse(null); if (island != null) { if (island.getMemberSet(RanksManager.TRUSTED_RANK, false).size() > getIslands().getMaxMembers(island, RanksManager.TRUSTED_RANK)) { @@ -126,7 +125,7 @@ public class IslandTeamInviteAcceptCommand extends ConfirmableCommand { // Remove the invite itc.removeInvite(user.getUniqueId()); User inviter = User.getInstance(invite.getInviter()); - Island island = invite.getIsland(); + Island island = getIslands().getIslandById(invite.getIslandID()).orElse(null); if (island != null) { if (island.getMemberSet(RanksManager.COOP_RANK, false).size() > getIslands().getMaxMembers(island, RanksManager.COOP_RANK)) { @@ -154,7 +153,7 @@ public class IslandTeamInviteAcceptCommand extends ConfirmableCommand { // Get the player's island - may be null if the player has no island List islands = getIslands().getIslands(getWorld(), user.getUniqueId()); // Get the team's island - Island teamIsland = invite.getIsland(); + Island teamIsland = getIslands().getIslandById(invite.getIslandID()).orElse(null); if (teamIsland == null) { user.sendMessage(INVALID_INVITE); return; @@ -198,7 +197,7 @@ 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); + //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 e9f1e5eae..0c8475654 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 @@ -14,6 +14,7 @@ import world.bentobox.bentobox.api.events.team.TeamEvent; import world.bentobox.bentobox.api.localization.TextVariables; import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.objects.Island; +import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.RanksManager; import world.bentobox.bentobox.util.Util; @@ -91,7 +92,7 @@ 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(); - getIslands().updateIsland(island); + IslandsManager.updateIsland(island); return true; } 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 50e38334e..16d0c8524 100644 --- a/src/main/java/world/bentobox/bentobox/database/objects/Island.java +++ b/src/main/java/world/bentobox/bentobox/database/objects/Island.java @@ -41,7 +41,6 @@ import world.bentobox.bentobox.api.user.User; import world.bentobox.bentobox.database.objects.adapters.Adapter; import world.bentobox.bentobox.database.objects.adapters.LogEntryListAdapter; import world.bentobox.bentobox.lists.Flags; -import world.bentobox.bentobox.managers.IslandsManager; import world.bentobox.bentobox.managers.RanksManager; import world.bentobox.bentobox.util.Pair; import world.bentobox.bentobox.util.Util; @@ -57,7 +56,7 @@ import world.bentobox.bentobox.util.Util; public class Island implements DataObject, MetaDataAble { @Expose - private boolean primary; + private Set primaries = new HashSet<>(); /** * Set to true if this data object has been changed since being loaded from the @@ -290,7 +289,7 @@ public class Island implements DataObject, MetaDataAble { this.updatedDate = island.getUpdatedDate(); this.world = island.getWorld(); this.bonusRanges.addAll(island.getBonusRanges()); - this.primary = island.primary; + this.primaries.addAll(island.getPrimaries()); this.setChanged(); } @@ -1699,7 +1698,7 @@ public class Island implements DataObject, MetaDataAble { public void setChanged() { this.setUpdatedDate(System.currentTimeMillis()); this.changed = true; - IslandsManager.updateIsland(this); + //IslandsManager.updateIsland(this); } /** @@ -1997,18 +1996,28 @@ public class Island implements DataObject, MetaDataAble { } /** + * @param userID user UUID * @return the primary */ - public boolean isPrimary() { - return primary; + public boolean isPrimary(UUID userID) { + return getPrimaries().contains(userID); } /** * @param primary the primary to set */ - public void setPrimary(boolean primary) { - if (this.primary != primary) { - this.primary = primary; + public void setPrimary(UUID userID) { + if (getPrimaries().add(userID)) { + setChanged(); + } + } + + /** + * Remove the primary island + * @param userID user UUID + */ + public void removePrimary(UUID userID) { + if (getPrimaries().remove(userID)) { setChanged(); } } @@ -2049,4 +2058,21 @@ public class Island implements DataObject, MetaDataAble { + commandRanks + ", reserved=" + reserved + ", metaData=" + metaData + ", homes=" + homes + ", maxHomes=" + maxHomes + "]"; } + + /** + * @return the primaries + */ + public Set getPrimaries() { + if (primaries == null) { + primaries = new HashSet<>(); + } + return primaries; + } + + /** + * @param primaries the primaries to set + */ + public void setPrimaries(Set primaries) { + this.primaries = primaries; + } } diff --git a/src/main/java/world/bentobox/bentobox/database/objects/TeamInvite.java b/src/main/java/world/bentobox/bentobox/database/objects/TeamInvite.java index 72d5b960a..70634fc4b 100644 --- a/src/main/java/world/bentobox/bentobox/database/objects/TeamInvite.java +++ b/src/main/java/world/bentobox/bentobox/database/objects/TeamInvite.java @@ -26,7 +26,7 @@ public class TeamInvite implements DataObject { @Expose private UUID inviter; @Expose - private Island island; + private String islandID; @Expose private String uniqueId; @@ -35,13 +35,13 @@ public class TeamInvite implements DataObject { * @param type - invitation type, e.g., coop, team, trust * @param inviter - UUID of inviter * @param invitee - UUID of invitee - * @param island - the island this invite is for + * @param island - the unique ID of the island this invite is for */ - public TeamInvite(Type type, UUID inviter, UUID invitee, Island island) { + public TeamInvite(Type type, UUID inviter, UUID invitee, String islandID) { this.type = type; this.uniqueId = invitee.toString(); this.inviter = inviter; - this.island = island; + this.islandID = islandID; } @Override @@ -77,10 +77,10 @@ public class TeamInvite implements DataObject { } /** - * @return the island + * @return the islandID */ - public Island getIsland() { - return island; + public String getIslandID() { + return islandID; } /* (non-Javadoc) @@ -108,4 +108,5 @@ public class TeamInvite implements DataObject { return Objects.equals(inviter, other.inviter) && Objects.equals(uniqueId, other.getUniqueId()) && type == other.type; } + } diff --git a/src/main/java/world/bentobox/bentobox/managers/IslandsManager.java b/src/main/java/world/bentobox/bentobox/managers/IslandsManager.java index 4dcd898f7..34b969e34 100644 --- a/src/main/java/world/bentobox/bentobox/managers/IslandsManager.java +++ b/src/main/java/world/bentobox/bentobox/managers/IslandsManager.java @@ -508,6 +508,7 @@ public class IslandsManager { if (island.getOwner() == null) { // No owner, no rank settings island.setMaxMembers(null); + BentoBox.getInstance().logDebug("getMaxMembers no owner, no rank settings"); updateIsland(island); return 0; } @@ -529,8 +530,12 @@ public class IslandsManager { islandMax = owner.getPermissionValue(plugin.getIWM().getPermissionPrefix(island.getWorld()) + perm, islandMax); } - island.setMaxMembers(rank, islandMax == worldDefault ? null : islandMax); - updateIsland(island); + Integer change = islandMax == worldDefault ? null : islandMax; + if (island.getMaxMembers().get(rank) != change) { + island.setMaxMembers(rank, change); + BentoBox.getInstance().logDebug("getMaxMembers"); + updateIsland(island); + } return islandMax; } @@ -568,8 +573,12 @@ public class IslandsManager { } // If the island maxHomes is just the same as the world default, then set to // null - island.setMaxHomes(islandMax == plugin.getIWM().getMaxHomes(island.getWorld()) ? null : islandMax); - updateIsland(island); + Integer change = islandMax == plugin.getIWM().getMaxHomes(island.getWorld()) ? null : islandMax; + if (island.getMaxHomes() != change) { + island.setMaxHomes(change); + BentoBox.getInstance().logDebug("getMaxHomes"); + updateIsland(island); + } return islandMax; } @@ -757,8 +766,9 @@ public class IslandsManager { * @since 1.16.0 */ public boolean setHomeLocation(@Nullable Island island, Location location, String name) { - if (island != null) { + if (island != null && (island.getHome(name) == null || !island.getHome(name).equals(location))) { island.addHome(name, location); + BentoBox.getInstance().logDebug("setHomeLocation"); updateIsland(island); return true; } @@ -1166,9 +1176,11 @@ public class IslandsManager { * @param spawn the Island to set as spawn. Must not be null. */ public void setSpawn(@NonNull Island spawn) { - spawns.put(Util.getWorld(spawn.getWorld()), spawn); - // Tell other servers - MultiLib.notify("bentobox-setspawn", spawn.getWorld().getUID().toString() + "," + spawn.getUniqueId()); + if (spawn.getWorld() != null) { + spawns.put(Util.getWorld(spawn.getWorld()), spawn); + // Tell other servers + MultiLib.notify("bentobox-setspawn", spawn.getWorld().getUID().toString() + "," + spawn.getUniqueId()); + } } @@ -1468,6 +1480,7 @@ public class IslandsManager { teamIsland.addMember(playerUUID); islandCache.addPlayer(playerUUID, teamIsland); // Save the island + BentoBox.getInstance().logDebug("setJoinTeam"); updateIsland(teamIsland); } diff --git a/src/main/java/world/bentobox/bentobox/managers/PlayersManager.java b/src/main/java/world/bentobox/bentobox/managers/PlayersManager.java index cd6187c75..69ac06e12 100644 --- a/src/main/java/world/bentobox/bentobox/managers/PlayersManager.java +++ b/src/main/java/world/bentobox/bentobox/managers/PlayersManager.java @@ -3,6 +3,7 @@ package world.bentobox.bentobox.managers; import java.util.Collection; import java.util.Collections; import java.util.HashSet; +import java.util.Objects; import java.util.Set; import java.util.UUID; @@ -98,17 +99,18 @@ public class PlayersManager { * 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(UUID playerUUID) { - // If the player is in the database, load it, otherwise create a new player - if (handler.objectExists(playerUUID.toString())) { - Players player = handler.loadObject(playerUUID.toString()); - if (player != null) { - return player; - } + public 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())) { + Players player = handler.loadObject(playerUUID.toString()); + if (player != null) { + return player; } - Players player = new Players(plugin, playerUUID); - handler.saveObject(player); - return player; + } + Players player = new Players(plugin, playerUUID); + handler.saveObject(player); + return player; } /** @@ -119,7 +121,7 @@ public class PlayersManager { * @return true if player is known, otherwise false */ public boolean isKnown(UUID uniqueID) { - return handler.objectExists(uniqueID.toString()); + return uniqueID == null ? false : handler.objectExists(uniqueID.toString()); } /** 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 ad1d29072..6d959c45f 100644 --- a/src/main/java/world/bentobox/bentobox/managers/island/IslandCache.java +++ b/src/main/java/world/bentobox/bentobox/managers/island/IslandCache.java @@ -186,13 +186,13 @@ public class IslandCache { return null; } for (Island island : islands) { - if (island.isPrimary()) { + if (island.isPrimary(uuid)) { return island; } } // If there is no primary set, then set one - it doesn't matter which. Island result = islands.iterator().next(); - result.setPrimary(true); + result.setPrimary(uuid); return result; } @@ -221,7 +221,10 @@ public class IslandCache { */ public void setPrimaryIsland(@NonNull UUID uuid, @NonNull Island island) { for (Island is : getIslands(island.getWorld(), uuid)) { - is.setPrimary(island.equals(is)); + is.removePrimary(uuid); + if (is.equals(island)) { + is.setPrimary(uuid); + } } } diff --git a/src/main/java/world/bentobox/bentobox/panels/customizable/IslandCreationPanel.java b/src/main/java/world/bentobox/bentobox/panels/customizable/IslandCreationPanel.java index 681c3cd36..7b8269fdb 100644 --- a/src/main/java/world/bentobox/bentobox/panels/customizable/IslandCreationPanel.java +++ b/src/main/java/world/bentobox/bentobox/panels/customizable/IslandCreationPanel.java @@ -489,7 +489,7 @@ public class IslandCreationPanel long uses = plugin.getIslands().getIslands(world, user).stream() .filter(is -> is.getMetaData("bundle") .map(mdv -> bundle.getDisplayName().equalsIgnoreCase(mdv.asString()) - && !(reset && is.isPrimary())) // If this is a reset, then ignore the use of the island being reset + && !(reset && is.isPrimary(user.getUniqueId()))) // If this is a reset, then ignore the use of the island being reset .orElse(false)) .count(); builder.description(this.user.getTranslation(BUNDLE_BUTTON_REF + "uses", TextVariables.NUMBER, diff --git a/src/test/java/world/bentobox/bentobox/managers/IslandsManagerTest.java b/src/test/java/world/bentobox/bentobox/managers/IslandsManagerTest.java index cf6b51d09..dadfd87bf 100644 --- a/src/test/java/world/bentobox/bentobox/managers/IslandsManagerTest.java +++ b/src/test/java/world/bentobox/bentobox/managers/IslandsManagerTest.java @@ -65,6 +65,7 @@ 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 com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet.Builder; @@ -85,7 +86,7 @@ import world.bentobox.bentobox.managers.island.IslandCache; import world.bentobox.bentobox.util.Util; @RunWith(PowerMockRunner.class) -@PrepareForTest({ Bukkit.class, BentoBox.class, Util.class, Location.class }) +@PrepareForTest({ Bukkit.class, BentoBox.class, Util.class, Location.class, MultiLib.class }) public class IslandsManagerTest extends AbstractCommonSetup { @Mock @@ -157,6 +158,9 @@ public class IslandsManagerTest extends AbstractCommonSetup { plugin = mock(BentoBox.class); Whitebox.setInternalState(BentoBox.class, "instance", plugin); + // Mutilib + PowerMockito.mockStatic(MultiLib.class, Mockito.RETURNS_MOCKS); + // island world mgr when(world.getName()).thenReturn("world"); when(world.getEnvironment()).thenReturn(World.Environment.NORMAL); @@ -242,7 +246,7 @@ public class IslandsManagerTest extends AbstractCommonSetup { // Island when(island.getOwner()).thenReturn(uuid); when(island.getWorld()).thenReturn(world); - when(island.getMaxMembers()).thenReturn(null); // default + when(island.getMaxMembers()).thenReturn(new HashMap<>()); // default when(island.getMaxMembers(Mockito.anyInt())).thenReturn(null); // default when(island.getCenter()).thenReturn(location); when(island.getProtectionCenter()).thenReturn(location); @@ -329,6 +333,9 @@ public class IslandsManagerTest extends AbstractCommonSetup { // Util strip spaces when(Util.stripSpaceAfterColorCodes(anyString())).thenCallRealMethod(); + // World UID + when(world.getUID()).thenReturn(uuid); + // Class under test im = new IslandsManager(plugin); // Set cache @@ -1372,14 +1379,14 @@ public class IslandsManagerTest extends AbstractCommonSetup { Island island = mock(Island.class); when(island.getOwner()).thenReturn(uuid); when(island.getWorld()).thenReturn(world); - when(island.getMaxMembers()).thenReturn(null); + when(island.getMaxMembers()).thenReturn(new HashMap<>()); when(island.getMaxMembers(Mockito.anyInt())).thenReturn(null); when(iwm.getMaxTeamSize(eq(world))).thenReturn(4); // Offline owner when(Bukkit.getPlayer(any(UUID.class))).thenReturn(null); // Test assertEquals(4, im.getMaxMembers(island, RanksManager.MEMBER_RANK)); - verify(island).setMaxMembers(eq(RanksManager.MEMBER_RANK), eq(null)); + verify(island, never()).setMaxMembers(eq(RanksManager.MEMBER_RANK), eq(null)); // No change } /** @@ -1391,14 +1398,14 @@ public class IslandsManagerTest extends AbstractCommonSetup { Island island = mock(Island.class); when(island.getOwner()).thenReturn(uuid); when(island.getWorld()).thenReturn(world); - when(island.getMaxMembers()).thenReturn(null); + when(island.getMaxMembers()).thenReturn(new HashMap<>()); when(island.getMaxMembers(Mockito.anyInt())).thenReturn(null); when(iwm.getMaxTeamSize(eq(world))).thenReturn(4); // Online owner when(Bukkit.getPlayer(any(UUID.class))).thenReturn(player); // Test assertEquals(4, im.getMaxMembers(island, RanksManager.MEMBER_RANK)); - verify(island).setMaxMembers(eq(RanksManager.MEMBER_RANK), eq(null)); + verify(island, never()).setMaxMembers(RanksManager.MEMBER_RANK, null); } /** @@ -1410,7 +1417,7 @@ public class IslandsManagerTest extends AbstractCommonSetup { Island island = mock(Island.class); when(island.getOwner()).thenReturn(uuid); when(island.getWorld()).thenReturn(world); - when(island.getMaxMembers()).thenReturn(null); + when(island.getMaxMembers()).thenReturn(new HashMap<>()); when(island.getMaxMembers(Mockito.anyInt())).thenReturn(null); when(iwm.getMaxTeamSize(eq(world))).thenReturn(4); when(iwm.getMaxCoopSize(eq(world))).thenReturn(2); @@ -1419,9 +1426,9 @@ public class IslandsManagerTest extends AbstractCommonSetup { when(Bukkit.getPlayer(any(UUID.class))).thenReturn(player); // Test assertEquals(2, im.getMaxMembers(island, RanksManager.COOP_RANK)); - verify(island).setMaxMembers(eq(RanksManager.COOP_RANK), eq(null)); + verify(island, never()).setMaxMembers(RanksManager.COOP_RANK, null); // No change assertEquals(3, im.getMaxMembers(island, RanksManager.TRUSTED_RANK)); - verify(island).setMaxMembers(eq(RanksManager.TRUSTED_RANK), eq(null)); + verify(island, never()).setMaxMembers(RanksManager.TRUSTED_RANK, null); } /** @@ -1439,7 +1446,7 @@ public class IslandsManagerTest extends AbstractCommonSetup { when(Bukkit.getPlayer(any(UUID.class))).thenReturn(player); // Test assertEquals(10, im.getMaxMembers(island, RanksManager.MEMBER_RANK)); - verify(island).setMaxMembers(eq(RanksManager.MEMBER_RANK), eq(10)); + verify(island).setMaxMembers(RanksManager.MEMBER_RANK, 10); } /** @@ -1457,7 +1464,7 @@ public class IslandsManagerTest extends AbstractCommonSetup { when(Bukkit.getPlayer(any(UUID.class))).thenReturn(player); // Test assertEquals(10, im.getMaxMembers(island, RanksManager.MEMBER_RANK)); - verify(island).setMaxMembers(eq(RanksManager.MEMBER_RANK), eq(10)); + verify(island).setMaxMembers(RanksManager.MEMBER_RANK, 10); } /** @@ -1469,7 +1476,7 @@ public class IslandsManagerTest extends AbstractCommonSetup { Island island = mock(Island.class); when(island.getOwner()).thenReturn(uuid); when(island.getWorld()).thenReturn(world); - when(island.getMaxMembers()).thenReturn(null); + when(island.getMaxMembers()).thenReturn(new HashMap<>()); when(iwm.getMaxTeamSize(eq(world))).thenReturn(4); // Permission when(iwm.getPermissionPrefix(any())).thenReturn("bskyblock."); @@ -1482,7 +1489,7 @@ public class IslandsManagerTest extends AbstractCommonSetup { when(Bukkit.getPlayer(any(UUID.class))).thenReturn(player); // Test assertEquals(8, im.getMaxMembers(island, RanksManager.MEMBER_RANK)); - verify(island).setMaxMembers(eq(RanksManager.MEMBER_RANK), eq(8)); + verify(island).setMaxMembers(RanksManager.MEMBER_RANK, 8); } /** @@ -1494,7 +1501,7 @@ public class IslandsManagerTest extends AbstractCommonSetup { Island island = mock(Island.class); // Test im.setMaxMembers(island, RanksManager.MEMBER_RANK, 40); - verify(island).setMaxMembers(eq(RanksManager.MEMBER_RANK), eq(40)); + verify(island).setMaxMembers(RanksManager.MEMBER_RANK, 40); } /** @@ -1546,7 +1553,7 @@ public class IslandsManagerTest extends AbstractCommonSetup { // Test IslandsManager im = new IslandsManager(plugin); assertEquals(4, im.getMaxHomes(island)); - verify(island).setMaxHomes(eq(null)); + verify(island, never()).setMaxHomes(null); } /** @@ -1572,7 +1579,7 @@ public class IslandsManagerTest extends AbstractCommonSetup { // Test IslandsManager im = new IslandsManager(plugin); assertEquals(20, im.getMaxHomes(island)); - verify(island).setMaxHomes(eq(20)); + verify(island, never()).setMaxHomes(20); } /** @@ -1598,7 +1605,7 @@ public class IslandsManagerTest extends AbstractCommonSetup { // Test IslandsManager im = new IslandsManager(plugin); assertEquals(8, im.getMaxHomes(island)); - verify(island).setMaxHomes(eq(8)); + verify(island).setMaxHomes(8); } /** diff --git a/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java b/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java index b8bd1dc8c..2a69e5ba6 100644 --- a/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java +++ b/src/test/java/world/bentobox/bentobox/managers/PlayersManagerTest.java @@ -6,6 +6,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; @@ -39,6 +40,7 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.PlayerInventory; import org.bukkit.scheduler.BukkitScheduler; import org.bukkit.util.Vector; +import org.eclipse.jdt.annotation.Nullable; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; @@ -60,6 +62,7 @@ import world.bentobox.bentobox.database.Database; import world.bentobox.bentobox.database.DatabaseSetup; import world.bentobox.bentobox.database.DatabaseSetup.DatabaseType; import world.bentobox.bentobox.database.objects.Island; +import world.bentobox.bentobox.database.objects.Names; import world.bentobox.bentobox.database.objects.Players; import world.bentobox.bentobox.hooks.VaultHook; import world.bentobox.bentobox.util.Util; @@ -240,6 +243,18 @@ public class PlayersManagerTest { when(tamed.getOwner()).thenReturn(p); when(world.getEntitiesByClass(Tameable.class)).thenReturn(list); + // Loading objects + Object players = new Players(); + when(h.loadObject(anyString())).thenReturn(players); + // Set up names database + List names = new ArrayList<>(); + Names name = new Names(); + name.setUniqueId("tastybento"); + name.setUuid(uuid); + names.add(name); + when(h.loadObjects()).thenReturn(names); + when(h.objectExists(anyString())).thenReturn(true); + // Class under test pm = new PlayersManager(plugin); } @@ -269,13 +284,8 @@ public class PlayersManagerTest { */ @Test public void testAddPlayer() { - - pm.addPlayer(null); - // Add twice - assertFalse(pm.isKnown(uuid)); pm.addPlayer(uuid); assertTrue(pm.isKnown(uuid)); - pm.addPlayer(uuid); } /** @@ -442,9 +452,16 @@ public class PlayersManagerTest { /** * Test method for * {@link world.bentobox.bentobox.managers.PlayersManager#setResets(World, UUID, int)}. + * @throws IntrospectionException + * @throws NoSuchMethodException + * @throws ClassNotFoundException + * @throws InvocationTargetException + * @throws IllegalAccessException + * @throws InstantiationException */ @Test - public void testGetSetResetsLeft() { + public void testGetSetResetsLeft() throws InstantiationException, IllegalAccessException, InvocationTargetException, + ClassNotFoundException, NoSuchMethodException, IntrospectionException { // Add a player pm.addPlayer(uuid); assertEquals(0, pm.getResets(world, uuid)); @@ -455,9 +472,16 @@ public class PlayersManagerTest { /** * Test method for * {@link world.bentobox.bentobox.managers.PlayersManager#getUser(java.lang.String)}. + * @throws IntrospectionException + * @throws NoSuchMethodException + * @throws ClassNotFoundException + * @throws InvocationTargetException + * @throws IllegalAccessException + * @throws InstantiationException */ @Test - public void testGetUserString() { + public void testGetUserString() throws InstantiationException, IllegalAccessException, InvocationTargetException, + ClassNotFoundException, NoSuchMethodException, IntrospectionException { User user = pm.getUser("random"); assertNull(user); pm.addPlayer(uuid);