Changed TeamEvent to fire off class-specific events.

This commit is contained in:
Tastybento 2017-12-17 12:38:52 -08:00
parent ed6899c989
commit 18ad604b7b
8 changed files with 118 additions and 59 deletions

View File

@ -2,6 +2,8 @@ package us.tastybento.bskyblock.api.events.team;
import java.util.UUID;
import org.bukkit.Location;
import us.tastybento.bskyblock.api.events.IslandBaseEvent;
import us.tastybento.bskyblock.database.objects.Island;
@ -11,7 +13,8 @@ import us.tastybento.bskyblock.database.objects.Island;
* @author tastybento
* @since 1.0
*/
public class TeamEvent extends IslandBaseEvent {
public class TeamEvent {
public enum TeamReason {
INVITE,
JOIN,
@ -24,44 +27,85 @@ public class TeamEvent extends IslandBaseEvent {
UNKNOWN,
UNINVITE
};
/**
* Player involved with this event
*/
private final UUID player;
/**
* True if this is an admin action
*/
private final boolean admin;
/**
* Reason for this event
*/
private final TeamReason reason;
private TeamEvent(Island island, UUID player, boolean admin, TeamReason reason) {
// Final variables have to be declared in the constuctor
super(island);
this.player = player;
this.admin = admin;
this.reason = reason;
}
public static TeamEventBuilder builder() {
return new TeamEventBuilder();
}
public static class TeamJoinEvent extends IslandBaseEvent {
private TeamJoinEvent(Island island, UUID player, boolean admin, Location location) {
// Final variables have to be declared in the constuctor
super(island, player, admin, location);
}
}
public static class TeamInviteEvent extends IslandBaseEvent {
private TeamInviteEvent(Island island, UUID player, boolean admin, Location location) {
// Final variables have to be declared in the constuctor
super(island, player, admin, location);
}
}
public static class TeamLeaveEvent extends IslandBaseEvent {
private TeamLeaveEvent(Island island, UUID player, boolean admin, Location location) {
// Final variables have to be declared in the constuctor
super(island, player, admin, location);
}
}
public static class TeamRejectEvent extends IslandBaseEvent {
private TeamRejectEvent(Island island, UUID player, boolean admin, Location location) {
// Final variables have to be declared in the constuctor
super(island, player, admin, location);
}
}
public static class TeamKickEvent extends IslandBaseEvent {
private TeamKickEvent(Island island, UUID player, boolean admin, Location location) {
// Final variables have to be declared in the constuctor
super(island, player, admin, location);
}
}
public static class TeamMakeLeaderEvent extends IslandBaseEvent {
private TeamMakeLeaderEvent(Island island, UUID player, boolean admin, Location location) {
// Final variables have to be declared in the constuctor
super(island, player, admin, location);
}
}
public static class TeamInfoEvent extends IslandBaseEvent {
private TeamInfoEvent(Island island, UUID player, boolean admin, Location location) {
// Final variables have to be declared in the constuctor
super(island, player, admin, location);
}
}
public static class TeamDeleteEvent extends IslandBaseEvent {
private TeamDeleteEvent(Island island, UUID player, boolean admin, Location location) {
// Final variables have to be declared in the constuctor
super(island, player, admin, location);
}
}
public static class TeamUninviteEvent extends IslandBaseEvent {
private TeamUninviteEvent(Island island, UUID player, boolean admin, Location location) {
// Final variables have to be declared in the constuctor
super(island, player, admin, location);
}
}
public static class TeamGeneralEvent extends IslandBaseEvent {
private TeamGeneralEvent(Island island, UUID player, boolean admin, Location location) {
// Final variables have to be declared in the constuctor
super(island, player, admin, location);
}
}
public static class TeamEventBuilder {
// Here field are NOT final. They are just used for the building.
private Island island;
private UUID player;
private TeamReason reason = TeamReason.UNKNOWN;
private boolean admin;
private Location location;
public TeamEventBuilder island(Island island) {
this.island = island;
return this;
}
/**
* True if this is an admin driven event
* @param admin
@ -80,7 +124,7 @@ public class TeamEvent extends IslandBaseEvent {
this.reason = reason;
return this;
}
/**
* @param player involved in the event
* @return
@ -89,32 +133,36 @@ public class TeamEvent extends IslandBaseEvent {
this.player = player;
return this;
}
public TeamEvent build() {
return new TeamEvent(island, player, admin, reason);
public TeamEventBuilder location(Location center) {
this.location = center;
return this;
}
}
public IslandBaseEvent build() {
switch (reason) {
case JOIN:
return new TeamJoinEvent(island, player, admin, location);
case INVITE:
return new TeamInviteEvent(island, player, admin, location);
case LEAVE:
return new TeamLeaveEvent(island, player, admin, location);
case REJECT:
return new TeamRejectEvent(island, player, admin, location);
case KICK:
return new TeamKickEvent(island, player, admin, location);
case MAKELEADER:
return new TeamMakeLeaderEvent(island, player, admin, location);
case INFO:
return new TeamInfoEvent(island, player, admin, location);
case DELETE:
return new TeamDeleteEvent(island, player, admin, location);
case UNINVITE:
return new TeamUninviteEvent(island, player, admin, location);
default:
return new TeamGeneralEvent(island, player, admin, location);
/**
* @return the player involved with this event
*/
public UUID getPlayer() {
return player;
}
}
}
/**
* @return true if this is an admin action
*/
public boolean isAdmin() {
return admin;
}
/**
* @return the reason for this team event
*/
public TeamReason getReason() {
return reason;
}
}

View File

@ -8,6 +8,7 @@ import org.bukkit.GameMode;
import org.bukkit.Location;
import us.tastybento.bskyblock.api.commands.User;
import us.tastybento.bskyblock.api.events.IslandBaseEvent;
import us.tastybento.bskyblock.api.events.team.TeamEvent;
import us.tastybento.bskyblock.api.events.team.TeamEvent.TeamReason;
import us.tastybento.bskyblock.config.Settings;
@ -46,7 +47,7 @@ public class IslandInviteAcceptCommand extends AbstractIslandTeamCommandArgument
if (DEBUG)
plugin.getLogger().info("DEBUG: Invite is valid");
// Fire event so add-ons can run commands, etc.
TeamEvent event = TeamEvent.builder()
IslandBaseEvent event = TeamEvent.builder()
.island(getIslands()
.getIsland(prospectiveTeamLeaderUUID))
.reason(TeamReason.JOIN)

View File

@ -6,6 +6,7 @@ import java.util.UUID;
import org.bukkit.ChatColor;
import us.tastybento.bskyblock.api.commands.User;
import us.tastybento.bskyblock.api.events.IslandBaseEvent;
import us.tastybento.bskyblock.api.events.team.TeamEvent;
import us.tastybento.bskyblock.api.events.team.TeamEvent.TeamReason;
@ -23,7 +24,7 @@ public class IslandInviteRejectCommand extends AbstractIslandTeamCommandArgument
// Reject /island reject
if (inviteList.containsKey(playerUUID)) {
// Fire event so add-ons can run commands, etc.
TeamEvent event = TeamEvent.builder()
IslandBaseEvent event = TeamEvent.builder()
.island(getIslands()
.getIsland(inviteList.get(playerUUID)))
.reason(TeamReason.REJECT)

View File

@ -8,6 +8,7 @@ import org.bukkit.ChatColor;
import org.bukkit.permissions.PermissionAttachmentInfo;
import us.tastybento.bskyblock.api.commands.User;
import us.tastybento.bskyblock.api.events.IslandBaseEvent;
import us.tastybento.bskyblock.api.events.team.TeamEvent;
import us.tastybento.bskyblock.api.events.team.TeamEvent.TeamReason;
import us.tastybento.bskyblock.config.Settings;
@ -29,7 +30,7 @@ public class IslandTeamCommand extends AbstractIslandTeamCommandArgument {
if (DEBUG)
plugin.getLogger().info("DEBUG: executing team command for " + playerUUID);
// Fire event so add-ons can run commands, etc.
TeamEvent event = TeamEvent.builder()
IslandBaseEvent event = TeamEvent.builder()
.island(getIslands()
.getIsland(playerUUID))
.reason(TeamReason.INFO)

View File

@ -5,12 +5,12 @@ import java.util.Set;
import java.util.UUID;
import org.apache.commons.lang.math.NumberUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.permissions.PermissionAttachmentInfo;
import us.tastybento.bskyblock.api.commands.User;
import us.tastybento.bskyblock.api.events.IslandBaseEvent;
import us.tastybento.bskyblock.api.events.team.TeamEvent;
import us.tastybento.bskyblock.api.events.team.TeamEvent.TeamReason;
import us.tastybento.bskyblock.config.Settings;
@ -106,7 +106,7 @@ public class IslandTeamInviteCommand extends AbstractIslandTeamCommandArgument {
user.sendMessage(ChatColor.RED + "invite.removingInvite");
}
// Fire event so add-ons can run commands, etc.
TeamEvent event = TeamEvent.builder()
IslandBaseEvent event = TeamEvent.builder()
.island(getIslands().getIsland(playerUUID))
.reason(TeamReason.INVITE)
.involvedPlayer(invitedPlayerUUID)

View File

@ -9,6 +9,7 @@ import org.bukkit.ChatColor;
import org.bukkit.permissions.PermissionAttachmentInfo;
import us.tastybento.bskyblock.api.commands.User;
import us.tastybento.bskyblock.api.events.IslandBaseEvent;
import us.tastybento.bskyblock.api.events.team.TeamEvent;
import us.tastybento.bskyblock.api.events.team.TeamEvent.TeamReason;
import us.tastybento.bskyblock.config.Settings;
@ -54,7 +55,12 @@ public class IslandTeamPromoteCommand extends AbstractIslandTeamCommandArgument
return true;
}
// Fire event so add-ons can run commands, etc.
TeamEvent event = TeamEvent.builder().island(getIslands().getIsland(playerUUID)).reason(TeamReason.MAKELEADER).involvedPlayer(targetUUID).build();
IslandBaseEvent event = TeamEvent.builder()
.island(getIslands()
.getIsland(playerUUID))
.reason(TeamReason.MAKELEADER)
.involvedPlayer(targetUUID)
.build();
plugin.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) return true;

View File

@ -6,6 +6,7 @@ import java.util.UUID;
import org.bukkit.ChatColor;
import us.tastybento.bskyblock.api.commands.User;
import us.tastybento.bskyblock.api.events.IslandBaseEvent;
import us.tastybento.bskyblock.api.events.team.TeamEvent;
import us.tastybento.bskyblock.api.events.team.TeamEvent.TeamReason;
import us.tastybento.bskyblock.config.Settings;
@ -33,7 +34,7 @@ public class IslandTeamUninviteCommand extends AbstractIslandTeamCommandArgument
}
// Fire event so add-ons can run commands, etc.
TeamEvent event = TeamEvent.builder()
IslandBaseEvent event = TeamEvent.builder()
.island(getIslands()
.getIsland(playerUUID))
.reason(TeamReason.UNINVITE)

View File

@ -13,6 +13,7 @@ import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import us.tastybento.bskyblock.api.events.IslandBaseEvent;
import us.tastybento.bskyblock.api.events.team.TeamEvent;
import us.tastybento.bskyblock.api.events.team.TeamEvent.TeamReason;
@ -39,12 +40,12 @@ public class TestTest {
public void createAndSave() {
TeamEvent event = TeamEvent.builder()
IslandBaseEvent event = TeamEvent.builder()
//.island(getIslands().getIsland(playerUUID))
.reason(TeamReason.INFO)
.involvedPlayer(playerUUID)
.build();
assertEquals(playerUUID, event.getPlayer());
assertEquals(playerUUID, event.getPlayerUUID());
}