mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2025-02-20 14:21:31 +01:00
Version NPE protections.
This commit is contained in:
parent
3236c68e5c
commit
f66eeed4a1
@ -72,7 +72,7 @@ public class IslandBanCommand extends CompositeCommand {
|
|||||||
user.sendMessage("commands.island.ban.cannot-ban-member");
|
user.sendMessage("commands.island.ban.cannot-ban-member");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (getIslands().getIsland(getWorld(), playerUUID).isBanned(targetUUID)) {
|
if (island.isBanned(targetUUID)) {
|
||||||
user.sendMessage("commands.island.ban.player-already-banned");
|
user.sendMessage("commands.island.ban.player-already-banned");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -113,31 +113,19 @@ public class IslandResetCommand extends ConfirmableCommand {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reset island
|
||||||
|
* @param user user
|
||||||
|
* @param name name of Blueprint Bundle
|
||||||
|
* @return true if successful
|
||||||
|
*/
|
||||||
private boolean resetIsland(User user, String name) {
|
private boolean resetIsland(User user, String name) {
|
||||||
// Get the player's old island
|
// Get the player's old island
|
||||||
Island oldIsland = getIslands().getIsland(getWorld(), user);
|
Island oldIsland = getIslands().getIsland(getWorld(), user);
|
||||||
|
if (oldIsland != null) {
|
||||||
// Fire island preclear event
|
deleteOldIsland(user, oldIsland);
|
||||||
IslandEvent.builder()
|
}
|
||||||
.involvedPlayer(user.getUniqueId())
|
|
||||||
.reason(Reason.PRECLEAR)
|
|
||||||
.island(oldIsland)
|
|
||||||
.oldIsland(oldIsland)
|
|
||||||
.location(oldIsland.getCenter())
|
|
||||||
.build();
|
|
||||||
|
|
||||||
// Reset the island
|
|
||||||
user.sendMessage("commands.island.create.creating-island");
|
user.sendMessage("commands.island.create.creating-island");
|
||||||
|
|
||||||
// Kick all island members (including the owner)
|
|
||||||
kickMembers(oldIsland);
|
|
||||||
|
|
||||||
// Add a reset
|
|
||||||
getPlayers().addReset(getWorld(), user.getUniqueId());
|
|
||||||
|
|
||||||
// Reset the homes of the player
|
|
||||||
getPlayers().clearHomeLocations(getWorld(), user.getUniqueId());
|
|
||||||
|
|
||||||
// Create new island and then delete the old one
|
// Create new island and then delete the old one
|
||||||
try {
|
try {
|
||||||
Builder builder = NewIsland.builder()
|
Builder builder = NewIsland.builder()
|
||||||
@ -157,6 +145,28 @@ public class IslandResetCommand extends ConfirmableCommand {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void deleteOldIsland(User user, Island oldIsland) {
|
||||||
|
// Fire island preclear event
|
||||||
|
IslandEvent.builder()
|
||||||
|
.involvedPlayer(user.getUniqueId())
|
||||||
|
.reason(Reason.PRECLEAR)
|
||||||
|
.island(oldIsland)
|
||||||
|
.oldIsland(oldIsland)
|
||||||
|
.location(oldIsland.getCenter())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
// Reset the island
|
||||||
|
|
||||||
|
// Kick all island members (including the owner)
|
||||||
|
kickMembers(oldIsland);
|
||||||
|
|
||||||
|
// Add a reset
|
||||||
|
getPlayers().addReset(getWorld(), user.getUniqueId());
|
||||||
|
|
||||||
|
// Reset the homes of the player
|
||||||
|
getPlayers().clearHomeLocations(getWorld(), user.getUniqueId());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Kicks the members (incl. owner) of the island.
|
* Kicks the members (incl. owner) of the island.
|
||||||
* @since 1.7.0
|
* @since 1.7.0
|
||||||
|
@ -6,6 +6,8 @@ import java.util.Optional;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import org.eclipse.jdt.annotation.Nullable;
|
||||||
|
|
||||||
import world.bentobox.bentobox.api.commands.CompositeCommand;
|
import world.bentobox.bentobox.api.commands.CompositeCommand;
|
||||||
import world.bentobox.bentobox.api.events.IslandBaseEvent;
|
import world.bentobox.bentobox.api.events.IslandBaseEvent;
|
||||||
import world.bentobox.bentobox.api.events.island.IslandEvent;
|
import world.bentobox.bentobox.api.events.island.IslandEvent;
|
||||||
@ -21,6 +23,8 @@ import world.bentobox.bentobox.util.Util;
|
|||||||
*/
|
*/
|
||||||
public class IslandUnbanCommand extends CompositeCommand {
|
public class IslandUnbanCommand extends CompositeCommand {
|
||||||
|
|
||||||
|
private @Nullable UUID targetUUID;
|
||||||
|
|
||||||
public IslandUnbanCommand(CompositeCommand islandCommand) {
|
public IslandUnbanCommand(CompositeCommand islandCommand) {
|
||||||
super(islandCommand, "unban", "pardon");
|
super(islandCommand, "unban", "pardon");
|
||||||
}
|
}
|
||||||
@ -55,7 +59,7 @@ public class IslandUnbanCommand extends CompositeCommand {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Get target player
|
// Get target player
|
||||||
UUID targetUUID = getPlayers().getUUID(args.get(0));
|
targetUUID = getPlayers().getUUID(args.get(0));
|
||||||
if (targetUUID == null) {
|
if (targetUUID == null) {
|
||||||
user.sendMessage("general.errors.unknown-player", TextVariables.NAME, args.get(0));
|
user.sendMessage("general.errors.unknown-player", TextVariables.NAME, args.get(0));
|
||||||
return false;
|
return false;
|
||||||
@ -65,7 +69,7 @@ public class IslandUnbanCommand extends CompositeCommand {
|
|||||||
user.sendMessage("commands.island.unban.cannot-unban-yourself");
|
user.sendMessage("commands.island.unban.cannot-unban-yourself");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!getIslands().getIsland(getWorld(), playerUUID).isBanned(targetUUID)) {
|
if (!island.isBanned(targetUUID)) {
|
||||||
user.sendMessage("commands.island.unban.player-not-banned");
|
user.sendMessage("commands.island.unban.player-not-banned");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -75,7 +79,7 @@ public class IslandUnbanCommand extends CompositeCommand {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean execute(User user, String label, List<String> args) {
|
public boolean execute(User user, String label, List<String> args) {
|
||||||
User target = User.getInstance(getPlayers().getUUID(args.get(0)));
|
User target = User.getInstance(targetUUID);
|
||||||
Island island = getIslands().getIsland(getWorld(), user.getUniqueId());
|
Island island = getIslands().getIsland(getWorld(), user.getUniqueId());
|
||||||
|
|
||||||
// Run the event
|
// Run the event
|
||||||
|
@ -176,16 +176,30 @@ public class User implements MetaDataAble {
|
|||||||
return sender.getEffectivePermissions();
|
return sender.getEffectivePermissions();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the user's inventory
|
||||||
|
* @return player's inventory
|
||||||
|
* @throws {@link NullPointerException} - if user is not a player
|
||||||
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
public PlayerInventory getInventory() {
|
public PlayerInventory getInventory() {
|
||||||
return Objects.requireNonNull(player, "getInventory can only be called for online players!").getInventory();
|
return Objects.requireNonNull(player, "getInventory can only be called for online players!").getInventory();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the user's location
|
||||||
|
* @return location
|
||||||
|
* @throws {@link NullPointerException} - if user is not a player
|
||||||
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
public Location getLocation() {
|
public Location getLocation() {
|
||||||
return Objects.requireNonNull(player, "getLocation can only be called for online players!").getLocation();
|
return Objects.requireNonNull(player, "getLocation can only be called for online players!").getLocation();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the user's name
|
||||||
|
* @return player's name
|
||||||
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return player != null ? player.getName() : plugin.getPlayers().getName(playerUUID);
|
return player != null ? player.getName() : plugin.getPlayers().getName(playerUUID);
|
||||||
@ -211,6 +225,7 @@ public class User implements MetaDataAble {
|
|||||||
* Use {@link #isOfflinePlayer()} before calling this method
|
* Use {@link #isOfflinePlayer()} before calling this method
|
||||||
* @return the offline player
|
* @return the offline player
|
||||||
* @since 1.3.0
|
* @since 1.3.0
|
||||||
|
* @throws {@link NullPointerException} - if user is not an offline player
|
||||||
*/
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
public OfflinePlayer getOfflinePlayer() {
|
public OfflinePlayer getOfflinePlayer() {
|
||||||
@ -511,10 +526,13 @@ public class User implements MetaDataAble {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the current world this entity resides in
|
* Gets the current world this entity resides in
|
||||||
* @return World - world or null
|
* @return World - world
|
||||||
|
* @throws {@link NullPointerException} - if user is not a player
|
||||||
*/
|
*/
|
||||||
|
@NonNull
|
||||||
public World getWorld() {
|
public World getWorld() {
|
||||||
return player == null ? null : player.getWorld();
|
Objects.requireNonNull(player, "Cannot be called on a non-player User!");
|
||||||
|
return Objects.requireNonNull(player.getWorld(), "Player's world cannot be null!");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -6,7 +6,6 @@ import static org.mockito.ArgumentMatchers.any;
|
|||||||
import static org.mockito.ArgumentMatchers.anyString;
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.never;
|
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
@ -248,39 +247,12 @@ public class IslandUnbanCommandTest {
|
|||||||
|
|
||||||
// Allow removing from ban list
|
// Allow removing from ban list
|
||||||
when(island.unban(any(), any())).thenReturn(true);
|
when(island.unban(any(), any())).thenReturn(true);
|
||||||
|
assertTrue(iubc.canExecute(user, iubc.getLabel(), Collections.singletonList("bill")));
|
||||||
assertTrue(iubc.execute(user, iubc.getLabel(), Collections.singletonList("bill")));
|
assertTrue(iubc.execute(user, iubc.getLabel(), Collections.singletonList("bill")));
|
||||||
verify(user).sendMessage("commands.island.unban.player-unbanned", TextVariables.NAME, targetUser.getName());
|
verify(user).sendMessage("commands.island.unban.player-unbanned", TextVariables.NAME, targetUser.getName());
|
||||||
verify(targetUser).sendMessage("commands.island.unban.you-are-unbanned", TextVariables.NAME, user.getName());
|
verify(targetUser).sendMessage("commands.island.unban.you-are-unbanned", TextVariables.NAME, user.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Test method for {@link IslandUnbanCommand#execute(User, String, List)}
|
|
||||||
*/
|
|
||||||
@Test
|
|
||||||
public void testCancelledUnban() {
|
|
||||||
IslandUnbanCommand iubc = new IslandUnbanCommand(ic);
|
|
||||||
when(im.hasIsland(any(), eq(uuid))).thenReturn(true);
|
|
||||||
when(im.isOwner(any(), eq(uuid))).thenReturn(true);
|
|
||||||
UUID targetUUID = UUID.randomUUID();
|
|
||||||
when(pm.getUUID(Mockito.anyString())).thenReturn(targetUUID);
|
|
||||||
PowerMockito.mockStatic(User.class);
|
|
||||||
User targetUser = mock(User.class);
|
|
||||||
when(targetUser.isOp()).thenReturn(false);
|
|
||||||
when(targetUser.isPlayer()).thenReturn(true);
|
|
||||||
when(targetUser.isOnline()).thenReturn(false);
|
|
||||||
when(User.getInstance(any(UUID.class))).thenReturn(targetUser);
|
|
||||||
// Mark as banned
|
|
||||||
when(island.isBanned(eq(targetUUID))).thenReturn(true);
|
|
||||||
|
|
||||||
// Allow removing from ban list
|
|
||||||
when(island.unban(any(), any())).thenReturn(false);
|
|
||||||
|
|
||||||
assertFalse(iubc.execute(user, iubc.getLabel(), Collections.singletonList("bill")));
|
|
||||||
verify(user, never()).sendMessage("commands.island.unban.player-unbanned", TextVariables.NAME, targetUser.getName());
|
|
||||||
verify(targetUser, never()).sendMessage("commands.island.unban.you-are-unbanned", "[owner]", user.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test method for {@link IslandUnbanCommand#tabComplete(User, String, List)}
|
* Test method for {@link IslandUnbanCommand#tabComplete(User, String, List)}
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user