diff --git a/src/main/java/us/tastybento/bskyblock/api/events/team/TeamEvent.java b/src/main/java/us/tastybento/bskyblock/api/events/team/TeamEvent.java index bcbffaf8a..8f2168163 100644 --- a/src/main/java/us/tastybento/bskyblock/api/events/team/TeamEvent.java +++ b/src/main/java/us/tastybento/bskyblock/api/events/team/TeamEvent.java @@ -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; - } - } diff --git a/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandInviteAcceptCommand.java b/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandInviteAcceptCommand.java index 503e8228f..6205ece5a 100644 --- a/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandInviteAcceptCommand.java +++ b/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandInviteAcceptCommand.java @@ -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) diff --git a/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandInviteRejectCommand.java b/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandInviteRejectCommand.java index a604d91a2..03080bf8f 100644 --- a/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandInviteRejectCommand.java +++ b/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandInviteRejectCommand.java @@ -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) diff --git a/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandTeamCommand.java b/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandTeamCommand.java index 56bc056ab..c2b3cf586 100644 --- a/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandTeamCommand.java +++ b/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandTeamCommand.java @@ -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) diff --git a/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandTeamInviteCommand.java b/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandTeamInviteCommand.java index 024098f55..afac78a4c 100644 --- a/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandTeamInviteCommand.java +++ b/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandTeamInviteCommand.java @@ -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) diff --git a/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandTeamPromoteCommand.java b/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandTeamPromoteCommand.java index 4b7175e62..e95ef23d0 100644 --- a/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandTeamPromoteCommand.java +++ b/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandTeamPromoteCommand.java @@ -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; diff --git a/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandTeamUninviteCommand.java b/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandTeamUninviteCommand.java index 2b8820448..64e3d1944 100644 --- a/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandTeamUninviteCommand.java +++ b/src/main/java/us/tastybento/bskyblock/commands/island/teams/IslandTeamUninviteCommand.java @@ -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) diff --git a/src/test/java/bskyblock/TestTest.java b/src/test/java/bskyblock/TestTest.java index 291a1f3bc..695a3e6e0 100644 --- a/src/test/java/bskyblock/TestTest.java +++ b/src/test/java/bskyblock/TestTest.java @@ -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()); }