Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions src/main/java/me/totalfreedom/totalfreedommod/admin/Admin.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -832,6 +833,13 @@ public void onPlayerQuit(PlayerQuitEvent event)
onlineAdminPlayers.remove(event.getPlayer());
}

@EventHandler(priority = EventPriority.HIGHEST)
public void onAdminManagement(AdminManagementEvent event)
{
plugin.al.updateTables();
plugin.al.saveAdminAsync(event.getAdmin());
}

public void deactivateOldEntries(boolean verbose)
{
for (Admin admin : allAdmins.values())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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
{
Expand All @@ -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;
Expand All @@ -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;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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
}
}
Original file line number Diff line number Diff line change
@@ -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();
}
}
18 changes: 18 additions & 0 deletions src/main/java/me/totalfreedom/totalfreedommod/freeze/Freezer.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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.");
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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)
// ========================================================================
Expand Down