Renamed Island#addToBanList() and Island#removeFromBanList() + added log in them

They respectively got renamed to Island#ban() and Island#unban(). They now require the UUID of an issuer (which can be null, but it's better to provide one)
This commit is contained in:
Florian CUNY 2019-01-03 15:59:24 +01:00
parent fa3dbc5519
commit 369600e4d5
7 changed files with 47 additions and 39 deletions

View File

@ -80,24 +80,24 @@ public class IslandBanCommand extends CompositeCommand {
return ban(user, target);
}
private boolean ban(User user, User targetUser) {
Island island = getIslands().getIsland(getWorld(), user.getUniqueId());
private boolean ban(User issuer, User target) {
Island island = getIslands().getIsland(getWorld(), issuer.getUniqueId());
// Check if player can ban any more players
int banLimit = user.getPermissionValue(getPermissionPrefix() + "ban.maxlimit", getIWM().getBanLimit(getWorld()));
int banLimit = issuer.getPermissionValue(getPermissionPrefix() + "ban.maxlimit", getIWM().getBanLimit(getWorld()));
if (banLimit <= -1 || island.getBanned().size() < banLimit) {
if (island.addToBanList(targetUser.getUniqueId())) {
user.sendMessage("general.success");
targetUser.sendMessage("commands.island.ban.owner-banned-you", TextVariables.NAME, user.getName());
if (island.ban(issuer.getUniqueId(), target.getUniqueId())) {
issuer.sendMessage("general.success");
target.sendMessage("commands.island.ban.owner-banned-you", TextVariables.NAME, issuer.getName());
// If the player is online, has an island and on the banned island, move them home immediately
if (targetUser.isOnline() && getIslands().hasIsland(getWorld(), targetUser.getUniqueId()) && island.onIsland(targetUser.getLocation())) {
getIslands().homeTeleport(getWorld(), targetUser.getPlayer());
island.getWorld().playSound(targetUser.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1F, 1F);
if (target.isOnline() && getIslands().hasIsland(getWorld(), target.getUniqueId()) && island.onIsland(target.getLocation())) {
getIslands().homeTeleport(getWorld(), target.getPlayer());
island.getWorld().playSound(target.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1F, 1F);
}
return true;
}
} else {
user.sendMessage("commands.island.ban.cannot-ban-more-players");
issuer.sendMessage("commands.island.ban.cannot-ban-more-players");
}
// Banning was blocked, maybe due to an event cancellation. Fail silently.
return false;

View File

@ -64,14 +64,14 @@ public class IslandUnbanCommand extends CompositeCommand {
return unban(user, targetUser);
}
private boolean unban(User user, User targetUser) {
if (getIslands().getIsland(getWorld(), user.getUniqueId()).removeFromBanList(targetUser.getUniqueId())) {
user.sendMessage("general.success");
targetUser.sendMessage("commands.island.unban.you-are-unbanned", TextVariables.NAME, user.getName());
private boolean unban(User issuer, User target) {
if (getIslands().getIsland(getWorld(), issuer.getUniqueId()).unban(issuer.getUniqueId(), target.getUniqueId())) {
issuer.sendMessage("general.success");
target.sendMessage("commands.island.unban.you-are-unbanned", TextVariables.NAME, issuer.getName());
// Set cooldown
if (getSettings().getBanCooldown() > 0 && getParent() != null) {
getParent().getSubCommand("ban").ifPresent(subCommand ->
subCommand.setCooldown(user.getUniqueId(), targetUser.getUniqueId(), getSettings().getBanCooldown() * 60));
subCommand.setCooldown(issuer.getUniqueId(), target.getUniqueId(), getSettings().getBanCooldown() * 60));
}
return true;
}

View File

@ -126,14 +126,17 @@ public class Island implements DataObject {
}
/**
* Adds target to a list of banned players for this island. May be blocked by the event being cancelled.
* Bans the target player from this Island.
* If the player is a member, coop or trustee, they will be removed from those lists.
* @param targetUUID - the target's UUID
* @return true if successfully added
* @param issuer UUID of the issuer, may be null.
* Whenever possible, one should be provided.
* @param target UUID of the target, must be provided.
* @return {@code true} if the target is successfully banned, {@code false} otherwise.
*/
public boolean addToBanList(UUID targetUUID) {
if (targetUUID != null) {
members.put(targetUUID, RanksManager.BANNED_RANK);
public boolean ban(UUID issuer, UUID target) {
if (target != null) {
members.put(target, RanksManager.BANNED_RANK);
log(new LogEntry.Builder("BAN").data("player", target).data("issuer", issuer).build());
return true;
}
return false;
@ -152,6 +155,21 @@ public class Island implements DataObject {
return result;
}
/**
* Unbans the target player from this Island.
* @param issuer UUID of the issuer, may be null.
* Whenever possible, one should be provided.
* @param target UUID of the target, must be provided.
* @return {@code true} if the target is successfully unbanned, {@code false} otherwise.
*/
public boolean unban(UUID issuer, UUID target) {
if (members.remove(target) != null) {
log(new LogEntry.Builder("UNBAN").data("player", target).data("issuer", issuer).build());
return true;
}
return false;
}
/**
* @return the center Location
*/
@ -405,15 +423,6 @@ public class Island implements DataObject {
return Util.sameWorld(world, target.getWorld()) && target.getBlockX() >= getMinProtectedX() && target.getBlockX() < (getMinProtectedX() + protectionRange * 2) && target.getBlockZ() >= getMinProtectedZ() && target.getBlockZ() < (getMinProtectedZ() + protectionRange * 2);
}
/**
* Removes target from the banned list. May be cancelled by unban event.
* @param targetUUID - the target's UUID
* @return true if successful, otherwise false.
*/
public boolean removeFromBanList(UUID targetUUID) {
return (members.remove(targetUUID) != null);
}
/**
* Removes a player from the team member map. Generally, you should
* use {@link world.bentobox.bentobox.managers.IslandsManager#removePlayer(World, UUID)}

View File

@ -745,7 +745,6 @@ public class IslandsManager {
islandCache.addPlayer(playerUUID, teamIsland);
// Save the database
save(false);
}
public void setLast(Location last) {

View File

@ -402,7 +402,7 @@ public class TestBentoBox {
assertFalse(members.contains(member3));
// Ban member
island.addToBanList(member1);
island.ban(null, member1);
members = island.getMemberSet();
assertTrue(members.contains(playerUUID));
assertFalse(members.contains(member1));
@ -413,7 +413,7 @@ public class TestBentoBox {
assertTrue(banned.contains(member1));
// Unban
island.removeFromBanList(member1);
island.unban(null, member1);
assertFalse(island.getBanned().contains(member1));
// Protection
@ -445,7 +445,7 @@ public class TestBentoBox {
// Check if the members have capability
User mem1 = User.getInstance(member1); // Visitor
User mem2 = User.getInstance(member2); // Member
island.addToBanList(member3);
island.ban(null, member3);
User mem3 = User.getInstance(member3); // Banned
// Member 1 is a visitor

View File

@ -237,7 +237,7 @@ public class IslandBanCommandTest {
when(user.getPermissionValue(Mockito.anyString(), Mockito.anyInt())).thenReturn(-1);
// Allow adding to ban list
when(island.addToBanList(Mockito.any())).thenReturn(true);
when(island.ban(Mockito.any(), Mockito.any())).thenReturn(true);
assertTrue(ibc.execute(user, ibc.getLabel(), Collections.singletonList("bill")));
Mockito.verify(user).sendMessage("general.success");
@ -259,7 +259,7 @@ public class IslandBanCommandTest {
when(User.getInstance(Mockito.any(UUID.class))).thenReturn(targetUser);
when(user.getPermissionValue(Mockito.anyString(), Mockito.anyInt())).thenReturn(-1);
// Allow adding to ban list
when(island.addToBanList(Mockito.any())).thenReturn(true);
when(island.ban(Mockito.any(), Mockito.any())).thenReturn(true);
assertTrue(ibc.execute(user, ibc.getLabel(), Collections.singletonList("bill")));
Mockito.verify(user).sendMessage("general.success");
@ -280,7 +280,7 @@ public class IslandBanCommandTest {
when(targetUser.isOnline()).thenReturn(true);
when(User.getInstance(Mockito.any(UUID.class))).thenReturn(targetUser);
// Disallow adding to ban list - even cancelled
when(island.addToBanList(Mockito.any())).thenReturn(false);
when(island.ban(Mockito.any(), Mockito.any())).thenReturn(false);
assertFalse(ibc.execute(user, ibc.getLabel(), Collections.singletonList("bill")));
Mockito.verify(user, Mockito.never()).sendMessage("general.success");

View File

@ -208,7 +208,7 @@ public class IslandUnbanCommandTest {
when(island.isBanned(Mockito.eq(targetUUID))).thenReturn(true);
// Allow removing from ban list
when(island.removeFromBanList(Mockito.any())).thenReturn(true);
when(island.unban(Mockito.any(), Mockito.any())).thenReturn(true);
assertTrue(iubc.execute(user, iubc.getLabel(), Collections.singletonList("bill")));
Mockito.verify(user).sendMessage("general.success");
@ -232,7 +232,7 @@ public class IslandUnbanCommandTest {
when(island.isBanned(Mockito.eq(targetUUID))).thenReturn(true);
// Allow removing from ban list
when(island.removeFromBanList(Mockito.any())).thenReturn(false);
when(island.unban(Mockito.any(), Mockito.any())).thenReturn(false);
assertFalse(iubc.execute(user, iubc.getLabel(), Collections.singletonList("bill")));
Mockito.verify(user, Mockito.never()).sendMessage("general.success");