From 3325788ac00a869cc1ad645c382a37236e398f66 Mon Sep 17 00:00:00 2001 From: VideoGameSmash12 Date: Thu, 9 Jul 2026 18:22:16 -0600 Subject: [PATCH 1/2] Implements barebones event API --- .../totalfreedommod/admin/Admin.java | 22 +++++ .../totalfreedommod/admin/AdminList.java | 10 +++ .../command/Command_saconfig.java | 42 ++-------- .../event/admin/AdminAddEvent.java | 32 ++++++++ .../event/admin/AdminManagementEvent.java | 80 +++++++++++++++++++ .../event/admin/AdminRankUpdateEvent.java | 44 ++++++++++ .../totalfreedommod/freeze/Freezer.java | 18 +++++ .../totalfreedommod/rank/RankManager.java | 12 +++ 8 files changed, 226 insertions(+), 34 deletions(-) create mode 100644 src/main/java/me/totalfreedom/totalfreedommod/event/admin/AdminAddEvent.java create mode 100644 src/main/java/me/totalfreedom/totalfreedommod/event/admin/AdminManagementEvent.java create mode 100644 src/main/java/me/totalfreedom/totalfreedommod/event/admin/AdminRankUpdateEvent.java diff --git a/src/main/java/me/totalfreedom/totalfreedommod/admin/Admin.java b/src/main/java/me/totalfreedom/totalfreedommod/admin/Admin.java index 9eb789451..f9666e079 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/admin/Admin.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/admin/Admin.java @@ -5,11 +5,18 @@ import java.util.Date; import java.util.List; import java.util.UUID; + +import me.totalfreedom.totalfreedommod.event.admin.AdminAddEvent; +import me.totalfreedom.totalfreedommod.event.admin.AdminManagementEvent; +import me.totalfreedom.totalfreedommod.event.admin.AdminRankUpdateEvent; +import me.totalfreedom.totalfreedommod.rank.CustomRank; +import me.totalfreedom.totalfreedommod.rank.Displayable; import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.util.ConfigInterfaces.ConfigLoadable; import me.totalfreedom.totalfreedommod.util.ConfigInterfaces.ConfigSavable; import me.totalfreedom.totalfreedommod.util.ConfigInterfaces.Validatable; import me.totalfreedom.totalfreedommod.util.FUtil; +import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; @@ -220,4 +227,19 @@ public boolean isValid() && !ips.isEmpty() && lastLogin != null; } + + public void fireGenericManagementEvent(CommandSender by, AdminManagementEvent.Action action) + { + new AdminManagementEvent(this, by, action).callEvent(); + } + + public void fireAddEvent(CommandSender by, boolean newEntry) + { + new AdminAddEvent(this, by, newEntry).callEvent(); + } + + public void fireRankUpdateEvent(CommandSender by, Rank rank, CustomRank customRank) + { + new AdminRankUpdateEvent(this, by, rank, customRank).callEvent(); + } } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/admin/AdminList.java b/src/main/java/me/totalfreedom/totalfreedommod/admin/AdminList.java index ed4e14244..bf7eda949 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/admin/AdminList.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/admin/AdminList.java @@ -15,6 +15,7 @@ import me.totalfreedom.totalfreedommod.FreedomService; import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.config.ConfigEntry; +import me.totalfreedom.totalfreedommod.event.admin.AdminManagementEvent; import me.totalfreedom.totalfreedommod.rank.Rank; import java.nio.charset.StandardCharsets; import me.totalfreedom.totalfreedommod.sql.adapter.AdminRepository; @@ -832,6 +833,15 @@ public void onPlayerQuit(PlayerQuitEvent event) onlineAdminPlayers.remove(event.getPlayer()); } + @EventHandler(priority = EventPriority.HIGHEST) + public void onAdminManagement(AdminManagementEvent event) + { + FLog.info("Debug - Management event called"); + + plugin.al.updateTables(); + plugin.al.saveAdminAsync(event.getAdmin()); + } + public void deactivateOldEntries(boolean verbose) { for (Admin admin : allAdmins.values()) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_saconfig.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_saconfig.java index dee2d017a..8b86e6fc3 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_saconfig.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_saconfig.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.Map; import me.totalfreedom.totalfreedommod.admin.Admin; +import me.totalfreedom.totalfreedommod.event.admin.AdminManagementEvent; import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.rank.CustomRank; import me.totalfreedom.totalfreedommod.rank.Rank; @@ -87,14 +88,7 @@ public boolean setRank(CommandContext ctx, String username, String rankInput) admin.setRank(rank); admin.setCustomRankId(custom != null ? custom.getId() : null); - plugin.al.updateTables(); - plugin.al.saveAdminAsync(admin); - - Player player = getPlayer(admin.getName()); - if (player != null && plugin.rm != null) - { - plugin.rm.updatePlayerTeam(player); - } + admin.fireRankUpdateEvent(ctx.getSender(), rank, custom); msg("Set " + admin.getName() + "'s rank to " + displayName); return true; @@ -164,7 +158,10 @@ public boolean addUser(CommandContext ctx, String username) player.setOp(true); FUtil.adminAction(sender.getName(), "Adding " + player.getName() + " to the admin list", true); - plugin.al.addAdmin(new Admin(player)); + admin = new Admin(player); + + plugin.al.addAdmin(admin); + admin.fireAddEvent(ctx.getSender(), true); } else // Existing admin { @@ -179,24 +176,7 @@ public boolean addUser(CommandContext ctx, String username) admin.setActive(true); admin.setLastLogin(new Date()); - - plugin.al.updateTables(); - plugin.al.saveAdminAsync(admin); - } - - if (player != null) - { - if (plugin.rm != null) - { - plugin.rm.updatePlayerTeam(player); - } - - final FPlayer fPlayer = plugin.pl.getPlayer(player); - if (fPlayer.getFreezeData().isFrozen()) - { - fPlayer.getFreezeData().setFrozen(false); - msg(player.getPlayer(), "You have been unfrozen."); - } + admin.fireAddEvent(ctx.getSender(), false); } return true; @@ -219,14 +199,8 @@ public boolean removeUser(CommandContext ctx, String username) FUtil.adminAction(sender.getName(), "Removing " + admin.getName() + " from the admin list", true); admin.setActive(false); - plugin.al.updateTables(); - plugin.al.saveAdminAsync(admin); - - if (player != null && plugin.rm != null) - { - plugin.rm.updatePlayerTeam(player); - } + admin.fireGenericManagementEvent(ctx.getSender(), AdminManagementEvent.Action.REMOVE); return true; } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/event/admin/AdminAddEvent.java b/src/main/java/me/totalfreedom/totalfreedommod/event/admin/AdminAddEvent.java new file mode 100644 index 000000000..7035d2f16 --- /dev/null +++ b/src/main/java/me/totalfreedom/totalfreedommod/event/admin/AdminAddEvent.java @@ -0,0 +1,32 @@ +package me.totalfreedom.totalfreedommod.event.admin; + +import lombok.Getter; +import me.totalfreedom.totalfreedommod.admin.Admin; +import org.bukkit.command.CommandSender; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.Nonnull; + +/** + * A more specific event for when an Admin is added to the admin list. + */ +@Getter +public class AdminAddEvent extends AdminManagementEvent +{ + /** + * Whether the admin entry was new. + */ + private final boolean newEntry; + + public AdminAddEvent(@Nonnull Admin affectedAdmin, @Nonnull CommandSender by, boolean newEntry) + { + super(affectedAdmin, by, Action.ADD); + this.newEntry = newEntry; + } + + public static HandlerList getHandlerList() + { + return AdminManagementEvent.getHandlerList(); + } +} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/event/admin/AdminManagementEvent.java b/src/main/java/me/totalfreedom/totalfreedommod/event/admin/AdminManagementEvent.java new file mode 100644 index 000000000..554805ceb --- /dev/null +++ b/src/main/java/me/totalfreedom/totalfreedommod/event/admin/AdminManagementEvent.java @@ -0,0 +1,80 @@ +package me.totalfreedom.totalfreedommod.event.admin; + +import com.google.common.base.Preconditions; +import lombok.Getter; +import me.totalfreedom.totalfreedommod.admin.Admin; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.Nullable; +import javax.annotation.Nonnull; + +/** + * A somewhat generic event called when a management action is performed on a single admin entry. This does not get + * called if the admin list is cleaned. + */ +@Getter +public class AdminManagementEvent extends Event +{ + @Getter + private static final HandlerList handlerList = new HandlerList(); + + /** + * The {@link Admin} entry relevant to this event. + */ + @Nonnull + private final Admin admin; + /** + * The {@link CommandSender source} of the event. + */ + @Nonnull + private final CommandSender source; + /** + * The {@link Action action} performed in the event. + */ + @Nonnull + private final Action action; + + public AdminManagementEvent(@Nonnull Admin admin, @Nonnull CommandSender source, @Nonnull Action action) + { + Preconditions.checkNotNull(admin, "Admin can not be null"); + Preconditions.checkNotNull(source, "Source can not be null"); + Preconditions.checkNotNull(action, "Action can not be null"); + + this.admin = admin; + this.source = source; + this.action = action; + } + + @Override + public @Nonnull HandlerList getHandlers() + { + return handlerList; + } + + /** + * Helper method for getting the affected admin as a standard Player. + * @return Player matching the admin entry in the event, if they are on the server. + */ + public @Nullable Player getAffectedAdminAsPlayer() + { + if (admin.getUuid() != null) + { + return Bukkit.getPlayer(admin.getUuid()); + } + + return Bukkit.getPlayer(admin.getName()); + } + + /** + * Enum for the different actions that can happen in this event. + */ + public enum Action + { + ADD, + REMOVE, + SET_RANK + } +} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/event/admin/AdminRankUpdateEvent.java b/src/main/java/me/totalfreedom/totalfreedommod/event/admin/AdminRankUpdateEvent.java new file mode 100644 index 000000000..3f77c704d --- /dev/null +++ b/src/main/java/me/totalfreedom/totalfreedommod/event/admin/AdminRankUpdateEvent.java @@ -0,0 +1,44 @@ +package me.totalfreedom.totalfreedommod.event.admin; + +import com.google.common.base.Preconditions; +import lombok.Getter; +import me.totalfreedom.totalfreedommod.admin.Admin; +import me.totalfreedom.totalfreedommod.rank.CustomRank; +import me.totalfreedom.totalfreedommod.rank.Rank; +import org.bukkit.command.CommandSender; +import org.bukkit.event.HandlerList; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +/** + * A more specific event for when an Admin's rank is updated. + */ +@Getter +public class AdminRankUpdateEvent extends AdminManagementEvent +{ + /** + * The internal {@link Rank} that was set during the operation. + */ + @Nonnull + private final Rank rank; + /** + * The internal {@link CustomRank} that may have been set during the operation. + */ + @Nullable + private final CustomRank customRank; + + public AdminRankUpdateEvent(@Nonnull Admin affectedAdmin, @Nonnull CommandSender by, @Nonnull Rank rank, @Nullable CustomRank customRank) + { + super(affectedAdmin, by, Action.SET_RANK); + Preconditions.checkNotNull(rank, "Rank can not be null"); + + this.rank = rank; + this.customRank = customRank; + } + + public static HandlerList getHandlerList() + { + return AdminManagementEvent.getHandlerList(); + } +} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/freeze/Freezer.java b/src/main/java/me/totalfreedom/totalfreedommod/freeze/Freezer.java index 3b503c7c8..06d099710 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/freeze/Freezer.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/freeze/Freezer.java @@ -3,6 +3,8 @@ import lombok.Getter; import me.totalfreedom.totalfreedommod.FreedomService; import me.totalfreedom.totalfreedommod.TotalFreedomMod; +import me.totalfreedom.totalfreedommod.admin.Admin; +import me.totalfreedom.totalfreedommod.event.admin.AdminAddEvent; import me.totalfreedom.totalfreedommod.util.FUtil; import org.bukkit.Location; import org.bukkit.entity.Player; @@ -79,4 +81,20 @@ public void onPlayerMove(PlayerMoveEvent event) event.setTo(loc); } + @EventHandler + public void onAdminAdd(AdminAddEvent event) + { + final Player player = event.getAffectedAdminAsPlayer(); + + if (player != null) + { + final FreezeData fd = plugin.pl.getPlayer(player).getFreezeData(); + + if (fd.isFrozen()) + { + fd.setFrozen(false); + FUtil.playerMsg(player, "You have been unfrozen."); + } + } + } } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/rank/RankManager.java b/src/main/java/me/totalfreedom/totalfreedommod/rank/RankManager.java index 38d01f612..b7c5096fc 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/rank/RankManager.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/rank/RankManager.java @@ -18,6 +18,7 @@ import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.dispatch.RemoteDispatchContext; import me.totalfreedom.totalfreedommod.dispatch.RemoteDispatchSession; +import me.totalfreedom.totalfreedommod.event.admin.AdminManagementEvent; import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.util.AdventureUtil; import me.totalfreedom.totalfreedommod.util.FLog; @@ -878,6 +879,17 @@ public void onPlayerQuit(PlayerQuitEvent event) } } + @EventHandler + public void onAdminManagement(AdminManagementEvent event) + { + final Player player = event.getAffectedAdminAsPlayer(); + + if (player != null) + { + updatePlayerTeam(player); + } + } + // ======================================================================== // Interactive Menu Builder (for /rankconfig) // ======================================================================== From ba12fbf5c7002a32139971cbdff67b769a6f74d1 Mon Sep 17 00:00:00 2001 From: VideoGameSmash12 Date: Thu, 9 Jul 2026 18:23:17 -0600 Subject: [PATCH 2/2] oops, forgot to remove --- .../java/me/totalfreedom/totalfreedommod/admin/AdminList.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/admin/AdminList.java b/src/main/java/me/totalfreedom/totalfreedommod/admin/AdminList.java index bf7eda949..34e95a9d5 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/admin/AdminList.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/admin/AdminList.java @@ -836,8 +836,6 @@ public void onPlayerQuit(PlayerQuitEvent event) @EventHandler(priority = EventPriority.HIGHEST) public void onAdminManagement(AdminManagementEvent event) { - FLog.info("Debug - Management event called"); - plugin.al.updateTables(); plugin.al.saveAdminAsync(event.getAdmin()); }