Added IslandRankChangeEvent (#1260)

Implements #1135

changed name of the event to append Event to it

Call the event in proper places
This commit is contained in:
Clément P. (Cleymax) 2020-04-04 18:58:13 +02:00 committed by Florian CUNY
parent 74007a7a9f
commit 3bd0ff4a69
16 changed files with 209 additions and 10 deletions

View File

@ -14,6 +14,7 @@ import world.bentobox.bentobox.api.events.island.IslandEvent;
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.RanksManager;
import world.bentobox.bentobox.util.Util;
public class AdminRegisterCommand extends ConfirmableCommand {
@ -87,6 +88,13 @@ public class AdminRegisterCommand extends ConfirmableCommand {
.involvedPlayer(targetUUID)
.admin(true)
.build();
IslandEvent.builder()
.island(i)
.involvedPlayer(targetUUID)
.admin(true)
.reason(IslandEvent.Reason.RANK_CHANGE)
.rankChange(RanksManager.VISITOR_RANK, RanksManager.OWNER_RANK)
.build();
return true;
}).orElse(false)) {
// Island does not exist - this is a reservation

View File

@ -9,6 +9,7 @@ import java.util.stream.Collectors;
import org.eclipse.jdt.annotation.Nullable;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.events.island.IslandEvent;
import world.bentobox.bentobox.api.localization.TextVariables;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.database.objects.Island;
@ -98,6 +99,13 @@ public class AdminSetrankCommand extends CompositeCommand {
}
int currentRank = island.getRank(target);
island.setRank(target, rankValue);
IslandEvent.builder()
.island(island)
.involvedPlayer(targetUUID)
.admin(true)
.reason(IslandEvent.Reason.RANK_CHANGE)
.rankChange(currentRank, rankValue)
.build();
String ownerName;
if (ownerUUID != null) {

View File

@ -11,6 +11,7 @@ import world.bentobox.bentobox.api.events.island.IslandEvent;
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.RanksManager;
import world.bentobox.bentobox.util.Util;
public class AdminUnregisterCommand extends ConfirmableCommand {
@ -62,6 +63,13 @@ public class AdminUnregisterCommand extends ConfirmableCommand {
.involvedPlayer(targetUUID)
.admin(true)
.build();
IslandEvent.builder()
.island(oldIsland)
.involvedPlayer(targetUUID)
.admin(true)
.reason(IslandEvent.Reason.RANK_CHANGE)
.rankChange(RanksManager.OWNER_RANK, RanksManager.VISITOR_RANK)
.build();
// Remove all island members
oldIsland.getMemberSet().forEach(m -> {
getIslands().removePlayer(getWorld(), m);

View File

@ -4,10 +4,13 @@ import java.util.List;
import java.util.UUID;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.events.IslandBaseEvent;
import world.bentobox.bentobox.api.events.island.IslandEvent;
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.RanksManager;
public class AdminTeamAddCommand extends CompositeCommand {
@ -63,11 +66,18 @@ public class AdminTeamAddCommand extends CompositeCommand {
getIslands().setJoinTeam(teamIsland, targetUUID);
user.sendMessage("commands.admin.team.add.success", TextVariables.NAME, target.getName(), "[owner]", owner.getName());
TeamEvent.builder()
.island(teamIsland)
.reason(TeamEvent.Reason.JOINED)
.involvedPlayer(targetUUID)
.admin(true)
.build();
.island(teamIsland)
.reason(TeamEvent.Reason.JOINED)
.involvedPlayer(targetUUID)
.admin(true)
.build();
IslandEvent.builder()
.island(teamIsland)
.involvedPlayer(targetUUID)
.admin(true)
.reason(IslandEvent.Reason.RANK_CHANGE)
.rankChange(teamIsland.getRank(target), RanksManager.MEMBER_RANK)
.build();
return true;
} else {
user.sendMessage("general.errors.player-has-no-island");

View File

@ -4,10 +4,12 @@ import java.util.List;
import java.util.UUID;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.events.island.IslandEvent;
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.RanksManager;
public class AdminTeamDisbandCommand extends CompositeCommand {
@ -46,7 +48,8 @@ public class AdminTeamDisbandCommand extends CompositeCommand {
// Disband team
Island island = getIslands().getIsland(getWorld(), targetUUID);
getIslands().getMembers(getWorld(), targetUUID).forEach(m -> {
User.getInstance(m).sendMessage("commands.admin.team.disband.disbanded");
User mUser = User.getInstance(m);
mUser.sendMessage("commands.admin.team.disband.disbanded");
// The owner gets to keep the island
if (!m.equals(targetUUID)) {
getIslands().setLeaveTeam(getWorld(), m);
@ -56,6 +59,13 @@ public class AdminTeamDisbandCommand extends CompositeCommand {
.involvedPlayer(m)
.admin(true)
.build();
IslandEvent.builder()
.island(island)
.involvedPlayer(targetUUID)
.admin(true)
.reason(IslandEvent.Reason.RANK_CHANGE)
.rankChange(island.getRank(mUser), RanksManager.VISITOR_RANK)
.build();
}
});
user.sendMessage("commands.admin.team.disband.success", TextVariables.NAME, args.get(0));

View File

@ -6,10 +6,12 @@ import java.util.UUID;
import org.eclipse.jdt.annotation.NonNull;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.events.island.IslandEvent;
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.RanksManager;
/**
* Kicks the specified player from the island team.
@ -71,6 +73,13 @@ public class AdminTeamKickCommand extends CompositeCommand {
.involvedPlayer(targetUUID)
.admin(true)
.build();
IslandEvent.builder()
.island(island)
.involvedPlayer(targetUUID)
.admin(true)
.reason(IslandEvent.Reason.RANK_CHANGE)
.rankChange(island.getRank(target), RanksManager.VISITOR_RANK)
.build();
return true;
}
}

View File

@ -4,10 +4,12 @@ import java.util.List;
import java.util.UUID;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.events.island.IslandEvent;
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.RanksManager;
/**
* Sets the owner of an island.
@ -44,6 +46,7 @@ public class AdminTeamSetownerCommand extends CompositeCommand {
return false;
}
// Make new owner
User target = User.getInstance(targetUUID);
getIslands().setOwner(getWorld(), user, targetUUID);
user.sendMessage("commands.admin.team.setowner.success", TextVariables.NAME, args.get(0));
// Fire event so add-ons know
@ -54,6 +57,13 @@ public class AdminTeamSetownerCommand extends CompositeCommand {
.involvedPlayer(targetUUID)
.admin(true)
.build();
IslandEvent.builder()
.island(island)
.involvedPlayer(targetUUID)
.admin(true)
.reason(IslandEvent.Reason.RANK_CHANGE)
.rankChange(island.getRank(target), RanksManager.OWNER_RANK)
.build();
return true;
}
}

View File

@ -5,6 +5,7 @@ import java.util.UUID;
import world.bentobox.bentobox.api.commands.ConfirmableCommand;
import world.bentobox.bentobox.api.commands.island.team.Invite.Type;
import world.bentobox.bentobox.api.events.island.IslandEvent;
import world.bentobox.bentobox.api.events.team.TeamEvent;
import world.bentobox.bentobox.api.localization.TextVariables;
import world.bentobox.bentobox.api.user.User;
@ -86,6 +87,13 @@ public class IslandTeamInviteAcceptCommand extends ConfirmableCommand {
Island island = getIslands().getIsland(getWorld(), inviter);
if (island != null) {
island.setRank(user, RanksManager.TRUSTED_RANK);
IslandEvent.builder()
.island(island)
.involvedPlayer(user.getUniqueId())
.admin(false)
.reason(IslandEvent.Reason.RANK_CHANGE)
.rankChange(island.getRank(user), RanksManager.TRUSTED_RANK)
.build();
inviter.sendMessage("commands.island.team.trust.success", TextVariables.NAME, user.getName());
user.sendMessage("commands.island.team.trust.you-are-trusted", TextVariables.NAME, inviter.getName());
}
@ -100,6 +108,13 @@ public class IslandTeamInviteAcceptCommand extends ConfirmableCommand {
Island island = getIslands().getIsland(getWorld(), inviter);
if (island != null) {
island.setRank(user, RanksManager.COOP_RANK);
IslandEvent.builder()
.island(island)
.involvedPlayer(user.getUniqueId())
.admin(false)
.reason(IslandEvent.Reason.RANK_CHANGE)
.rankChange(island.getRank(user), RanksManager.COOP_RANK)
.build();
inviter.sendMessage("commands.island.team.coop.success", TextVariables.NAME, user.getName());
user.sendMessage("commands.island.team.coop.you-are-a-coop-member", TextVariables.NAME, inviter.getName());
}
@ -145,6 +160,13 @@ public class IslandTeamInviteAcceptCommand extends ConfirmableCommand {
.reason(TeamEvent.Reason.JOINED)
.involvedPlayer(playerUUID)
.build();
IslandEvent.builder()
.island(teamIsland)
.involvedPlayer(user.getUniqueId())
.admin(false)
.reason(IslandEvent.Reason.RANK_CHANGE)
.rankChange(teamIsland.getRank(user), RanksManager.MEMBER_RANK)
.build();
}
private void cleanPlayer(User user) {

View File

@ -7,10 +7,12 @@ import org.bukkit.Bukkit;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.commands.ConfirmableCommand;
import world.bentobox.bentobox.api.events.island.IslandEvent;
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.RanksManager;
public class IslandTeamKickCommand extends ConfirmableCommand {
@ -126,6 +128,13 @@ public class IslandTeamKickCommand extends ConfirmableCommand {
.reason(TeamEvent.Reason.KICK)
.involvedPlayer(targetUUID)
.build();
IslandEvent.builder()
.island(oldIsland)
.involvedPlayer(user.getUniqueId())
.admin(false)
.reason(IslandEvent.Reason.RANK_CHANGE)
.rankChange(oldIsland.getRank(user), RanksManager.VISITOR_RANK)
.build();
// Add cooldown for this player and target
if (getSettings().getInviteCooldown() > 0 && getParent() != null) {

View File

@ -7,10 +7,12 @@ import org.bukkit.Bukkit;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.commands.ConfirmableCommand;
import world.bentobox.bentobox.api.events.island.IslandEvent;
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.RanksManager;
public class IslandTeamLeaveCommand extends ConfirmableCommand {
@ -121,5 +123,12 @@ public class IslandTeamLeaveCommand extends ConfirmableCommand {
.reason(TeamEvent.Reason.LEAVE)
.involvedPlayer(user.getUniqueId())
.build();
IslandEvent.builder()
.island(island)
.involvedPlayer(user.getUniqueId())
.admin(false)
.reason(IslandEvent.Reason.RANK_CHANGE)
.rankChange(island.getRank(user), RanksManager.VISITOR_RANK)
.build();
}
}

View File

@ -3,6 +3,7 @@ package world.bentobox.bentobox.api.commands.island.team;
import java.util.List;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.events.island.IslandEvent;
import world.bentobox.bentobox.api.localization.TextVariables;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.database.objects.Island;
@ -62,7 +63,8 @@ public class IslandTeamPromoteCommand extends CompositeCommand {
}
private boolean change(User user, User target) {
int currentRank = getIslands().getIsland(getWorld(), user.getUniqueId()).getRank(target);
Island island = getIslands().getIsland(getWorld(), user.getUniqueId());
int currentRank = island.getRank(target);
if (this.getLabel().equals("promote")) {
int nextRank = getPlugin().getRanksManager().getRankUpValue(currentRank);
// Stop short of owner
@ -70,6 +72,13 @@ public class IslandTeamPromoteCommand extends CompositeCommand {
getIslands().getIsland(getWorld(), user.getUniqueId()).setRank(target, nextRank);
String rankName = user.getTranslation(getPlugin().getRanksManager().getRank(nextRank));
user.sendMessage("commands.island.team.promote.success", TextVariables.NAME, target.getName(), TextVariables.RANK, rankName);
IslandEvent.builder()
.island(island)
.involvedPlayer(user.getUniqueId())
.admin(false)
.reason(IslandEvent.Reason.RANK_CHANGE)
.rankChange(currentRank, nextRank)
.build();
return true;
} else {
user.sendMessage("commands.island.team.promote.failure");
@ -83,6 +92,13 @@ public class IslandTeamPromoteCommand extends CompositeCommand {
getIslands().getIsland(getWorld(), user.getUniqueId()).setRank(target, prevRank);
String rankName = user.getTranslation(getPlugin().getRanksManager().getRank(prevRank));
user.sendMessage("commands.island.team.demote.success", TextVariables.NAME, target.getName(), TextVariables.RANK, rankName);
IslandEvent.builder()
.island(island)
.involvedPlayer(user.getUniqueId())
.admin(false)
.reason(IslandEvent.Reason.RANK_CHANGE)
.rankChange(currentRank, prevRank)
.build();
return true;
} else {
user.sendMessage("commands.island.team.demote.failure");

View File

@ -8,10 +8,12 @@ import java.util.UUID;
import org.bukkit.Bukkit;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.events.island.IslandEvent;
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.RanksManager;
import world.bentobox.bentobox.util.Util;
public class IslandTeamSetownerCommand extends CompositeCommand {
@ -67,6 +69,13 @@ public class IslandTeamSetownerCommand extends CompositeCommand {
return false;
}
getIslands().setOwner(getWorld(), user, targetUUID);
IslandEvent.builder()
.island(island)
.involvedPlayer(targetUUID)
.admin(false)
.reason(IslandEvent.Reason.RANK_CHANGE)
.rankChange(island.getRank(User.getInstance(targetUUID)), RanksManager.OWNER_RANK)
.build();
getIslands().save(island);
return true;
}

View File

@ -9,6 +9,7 @@ import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.events.island.IslandEvent;
import world.bentobox.bentobox.api.localization.TextVariables;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.database.objects.Island;
@ -85,6 +86,13 @@ public class IslandTeamUncoopCommand extends CompositeCommand {
getParent().getSubCommand("coop").ifPresent(subCommand ->
subCommand.setCooldown(island.getUniqueId(), targetUUID.toString(), getSettings().getCoopCooldown() * 60));
}
IslandEvent.builder()
.island(island)
.involvedPlayer(targetUUID)
.admin(false)
.reason(IslandEvent.Reason.RANK_CHANGE)
.rankChange(RanksManager.COOP_RANK, RanksManager.VISITOR_RANK)
.build();
return true;
} else {
// Should not happen

View File

@ -9,6 +9,7 @@ import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.events.island.IslandEvent;
import world.bentobox.bentobox.api.localization.TextVariables;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.database.objects.Island;
@ -85,6 +86,13 @@ public class IslandTeamUntrustCommand extends CompositeCommand {
getParent().getSubCommand("trust").ifPresent(subCommand ->
subCommand.setCooldown(island.getUniqueId(), targetUUID.toString(), getSettings().getTrustCooldown() * 60));
}
IslandEvent.builder()
.island(island)
.involvedPlayer(targetUUID)
.admin(false)
.reason(IslandEvent.Reason.RANK_CHANGE)
.rankChange(RanksManager.TRUSTED_RANK, RanksManager.VISITOR_RANK)
.build();
return true;
} else {
// Should not happen

View File

@ -141,13 +141,43 @@ public class IslandEvent extends IslandBaseEvent {
* The island protection range was changed.
* @since 1.11.0
*/
RANGE_CHANGE
RANGE_CHANGE,
/**
* Event that will fire any time a player's rank changes on an island.
* @since 1.13.0
*/
RANK_CHANGE
}
public static IslandEventBuilder builder() {
return new IslandEventBuilder();
}
/**
* Fired when a player's rank has changed on an island.
* Cancellation has no effect.
* @since 1.13.0
*/
public static class IslandRankChangeEvent extends IslandBaseEvent {
private final int oldRank;
private final int newRank;
public IslandRankChangeEvent(Island island, UUID playerUUID, boolean admin, Location location, int oldRank, int newRank) {
super(island, playerUUID, admin, location);
this.oldRank = oldRank;
this.newRank = newRank;
}
public int getOldRank() {
return oldRank;
}
public int getNewRank(){
return newRank;
}
}
/**
* Fired when a player will be expelled from an island.
* May be cancelled.
@ -542,6 +572,16 @@ public class IslandEvent extends IslandBaseEvent {
*/
private Island oldIsland;
/**
* @since 1.13.0
*/
private int oldRank;
/**
* @since 1.13.0
*/
private int newRank;
public IslandEventBuilder island(Island island) {
this.island = island;
return this;
@ -618,6 +658,15 @@ public class IslandEvent extends IslandBaseEvent {
return this;
}
/**
* @since 1.13.0
*/
@NonNull
public IslandEventBuilder rankChange(int oldRank, int newRank){
this.oldRank = oldRank;
this.newRank = newRank;
return this;
}
public IslandBaseEvent build() {
// Call the generic event for developers who just want one event and use the Reason enum
@ -701,6 +750,10 @@ public class IslandEvent extends IslandBaseEvent {
IslandReservedEvent res = new IslandReservedEvent(island, player, admin, location);
Bukkit.getPluginManager().callEvent(res);
return res;
case RANK_CHANGE:
IslandRankChangeEvent rankChange = new IslandRankChangeEvent(island, player, admin, location, oldRank, newRank);
Bukkit.getPluginManager().callEvent(rankChange);
return rankChange;
default:
IslandGeneralEvent general = new IslandGeneralEvent(island, player, admin, location);
Bukkit.getPluginManager().callEvent(general);

View File

@ -30,6 +30,8 @@ import com.google.gson.annotations.Expose;
import world.bentobox.bentobox.BentoBox;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.configuration.WorldSettings;
import world.bentobox.bentobox.api.events.IslandBaseEvent;
import world.bentobox.bentobox.api.events.island.IslandEvent;
import world.bentobox.bentobox.api.flags.Flag;
import world.bentobox.bentobox.api.localization.TextVariables;
import world.bentobox.bentobox.api.logs.LogEntry;
@ -850,7 +852,8 @@ public class Island implements DataObject {
}
/**
* Sets player's rank to an arbitrary rank value
* Sets player's rank to an arbitrary rank value.
* Calling this method won't call the {@link IslandEvent.IslandRankChangeEvent}.
* @param uuid UUID of the player
* @param rank rank value
* @since 1.1
@ -859,7 +862,6 @@ public class Island implements DataObject {
if (uuid == null) {
return; // Defensive code
}
members.put(uuid, rank);
}