Many, many bug fixes

- Fix permission checks
- Fix unban command
- getOfflinePlexPlayer no longer uses cache
- Register worlds before trying to load gamerules
- Customizable ban messages
This commit is contained in:
Telesphoreo 2022-01-30 14:56:08 -06:00
parent bb978f2ab4
commit d4761d4386
12 changed files with 74 additions and 50 deletions

View File

@ -105,7 +105,7 @@ public class Plex extends JavaPlugin
sqlPlayerData = new SQLPlayerData(); sqlPlayerData = new SQLPlayerData();
} }
new ListenerHandler(); // this doesn't need a variable. new ListenerHandler();
new CommandHandler(); new CommandHandler();
@ -119,14 +119,14 @@ public class Plex extends JavaPlugin
banManager = new BanManager(); banManager = new BanManager();
PlexLog.log("Punishment System initialized"); PlexLog.log("Punishment System initialized");
generateWorlds();
serviceManager = new ServiceManager(); serviceManager = new ServiceManager();
PlexLog.log("Service Manager initialized"); PlexLog.log("Service Manager initialized");
serviceManager.startServices(); serviceManager.startServices();
PlexLog.log("Started " + serviceManager.serviceCount() + " services."); PlexLog.log("Started " + serviceManager.serviceCount() + " services.");
generateWorlds();
reloadPlayers(); reloadPlayers();
} }

View File

@ -167,6 +167,16 @@ public abstract class PlexCommand extends Command
audience.sendMessage(component); audience.sendMessage(component);
} }
protected boolean checkRank(CommandSender sender, Rank rank, String permission)
{
if (!isConsole(sender))
{
checkRank((Player)sender, rank, permission);
return true;
}
return true;
}
protected boolean checkRank(Player player, Rank rank, String permission) protected boolean checkRank(Player player, Rank rank, String permission)
{ {
PlexPlayer plexPlayer = getPlexPlayer(player); PlexPlayer plexPlayer = getPlexPlayer(player);
@ -174,16 +184,14 @@ public abstract class PlexCommand extends Command
{ {
if (!plexPlayer.getRank().equals(rank.toString())) if (!plexPlayer.getRank().equals(rank.toString()))
{ {
send(player, tl("noPermissionRank", rank.toString())); throw new CommandFailException(PlexUtils.tl("noPermissionRank", ChatColor.stripColor(rank.getLoginMSG())));
return true;
} }
} }
else if (plugin.getRanksOrPermissions().equalsIgnoreCase("permissions")) else if (plugin.getRanksOrPermissions().equalsIgnoreCase("permissions"))
{ {
if (!player.hasPermission(permission)) if (!player.hasPermission(permission))
{ {
send(player, tl("noPermissionNode", permission)); throw new CommandFailException(PlexUtils.tl("noPermissionNode", permission));
return true;
} }
} }
return true; return true;
@ -268,7 +276,7 @@ public abstract class PlexCommand extends Command
protected PlexPlayer getOfflinePlexPlayer(UUID uuid) protected PlexPlayer getOfflinePlexPlayer(UUID uuid)
{ {
PlexPlayer plexPlayer = PlayerCache.getPlexPlayer(uuid); PlexPlayer plexPlayer = DataUtils.getPlayer(uuid);
if (plexPlayer == null) if (plexPlayer == null)
{ {
throw new PlayerNotFoundException(); throw new PlayerNotFoundException();

View File

@ -64,11 +64,10 @@ public class BanCMD extends PlexCommand
punishment.setType(PunishmentType.BAN); punishment.setType(PunishmentType.BAN);
punishment.setReason(""); punishment.setReason("");
punishment.setPunishedUsername(plexPlayer.getName()); punishment.setPunishedUsername(plexPlayer.getName());
//TODO: Debug End date punishment.setEndDate(new Date(Instant.now().plusSeconds(PlexUtils.hoursToSeconds(24)).getEpochSecond()));
punishment.setEndDate(new Date(Instant.now().plusSeconds(10/*PlexUtils.secondsToHours(24)*/).getEpochSecond()));
punishment.setCustomTime(false); punishment.setCustomTime(false);
plugin.getPunishmentManager().doPunishment(punishedPlayer, punishment); plugin.getPunishmentManager().doPunishment(punishedPlayer, punishment);
PlexUtils.broadcast(tl("unbanningPlayer", sender.getName(), plexPlayer.getName())); PlexUtils.broadcast(tl("banningPlayer", sender.getName(), plexPlayer.getName()));
if (Bukkit.getPlayer(targetUUID) != null) if (Bukkit.getPlayer(targetUUID) != null)
{ {
Bukkit.getPlayer(targetUUID).kick(componentFromString("&cYou've been banned.")); Bukkit.getPlayer(targetUUID).kick(componentFromString("&cYou've been banned."));
@ -82,5 +81,4 @@ public class BanCMD extends PlexCommand
{ {
return args.length == 1 && isAdmin(sender) ? PlexUtils.getPlayerNameList() : ImmutableList.of(); return args.length == 1 && isAdmin(sender) ? PlexUtils.getPlayerNameList() : ImmutableList.of();
} }
} }

View File

@ -17,17 +17,20 @@ import org.jetbrains.annotations.NotNull;
@CommandPermissions(level = Rank.OP, permission = "plex.plex", source = RequiredCommandSource.ANY) @CommandPermissions(level = Rank.OP, permission = "plex.plex", source = RequiredCommandSource.ANY)
@CommandParameters(name = "plex", usage = "/<command> [reload]", aliases = "plexhelp", description = "Show information about Plex or reload it") @CommandParameters(name = "plex", usage = "/<command> [reload]", aliases = "plexhelp", description = "Show information about Plex or reload it")
public class PlexCMD extends PlexCommand { public class PlexCMD extends PlexCommand
{
@Override @Override
public Component execute(CommandSender sender, String[] args) { public Component execute(CommandSender sender, String[] args)
if (args.length == 0) { {
if (args.length == 0)
{
send(sender, ChatColor.LIGHT_PURPLE + "Plex. The long awaited TotalFreedomMod rewrite starts here..."); send(sender, ChatColor.LIGHT_PURPLE + "Plex. The long awaited TotalFreedomMod rewrite starts here...");
return componentFromString(ChatColor.LIGHT_PURPLE + "Plugin version: " + ChatColor.GOLD + "1.0"); return componentFromString(ChatColor.LIGHT_PURPLE + "Plugin version: " + ChatColor.GOLD + "1.0");
} }
if (args[0].equals("reload")) if (args[0].equals("reload"))
{ {
checkRank((Player)sender, Rank.SENIOR_ADMIN, "plex.reload"); checkRank(sender, Rank.SENIOR_ADMIN, "plex.reload");
Plex.get().config.load(); Plex.get().config.load();
send(sender, "Reloaded config file"); send(sender, "Reloaded config file");
Plex.get().messages.load(); Plex.get().messages.load();
@ -35,7 +38,9 @@ public class PlexCMD extends PlexCommand {
Plex.get().getRankManager().importDefaultRanks(); Plex.get().getRankManager().importDefaultRanks();
send(sender, "Imported ranks"); send(sender, "Imported ranks");
send(sender, "Plex successfully reloaded."); send(sender, "Plex successfully reloaded.");
} else { }
else
{
throw new CommandArgumentException(); throw new CommandArgumentException();
} }
return null; return null;
@ -46,5 +51,4 @@ public class PlexCMD extends PlexCommand {
{ {
return ImmutableList.of("reload"); return ImmutableList.of("reload");
} }
} }

View File

@ -8,11 +8,14 @@ import dev.plex.command.annotation.CommandPermissions;
import dev.plex.command.exception.PlayerNotBannedException; import dev.plex.command.exception.PlayerNotBannedException;
import dev.plex.command.exception.PlayerNotFoundException; import dev.plex.command.exception.PlayerNotFoundException;
import dev.plex.command.source.RequiredCommandSource; import dev.plex.command.source.RequiredCommandSource;
import dev.plex.player.PlexPlayer;
import dev.plex.rank.enums.Rank; import dev.plex.rank.enums.Rank;
import dev.plex.util.PlexUtils; import dev.plex.util.PlexUtils;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -33,9 +36,9 @@ public class UnbanCMD extends PlexCommand
if (args.length == 1) if (args.length == 1)
{ {
UUID targetUUID = PlexUtils.getFromName(args[0]); UUID targetUUID = PlexUtils.getFromName(args[0]);
Player player = getNonNullPlayer(args[0]); PlexPlayer plexPlayer = getOfflinePlexPlayer(targetUUID);
if (targetUUID == null || !DataUtils.hasPlayedBefore(targetUUID)) if (!DataUtils.hasPlayedBefore(targetUUID))
{ {
throw new PlayerNotFoundException(); throw new PlayerNotFoundException();
} }
@ -46,7 +49,7 @@ public class UnbanCMD extends PlexCommand
} }
plugin.getBanManager().unban(targetUUID); plugin.getBanManager().unban(targetUUID);
PlexUtils.broadcast(tl("unbanningPlayer", sender.getName(), player.getName())); PlexUtils.broadcast(tl("unbanningPlayer", sender.getName(), plexPlayer.getName()));
} }
return null; return null;
} }

View File

@ -19,6 +19,7 @@ public class CommandHandler extends PlexBase
commands.add(new DeopCMD()); commands.add(new DeopCMD());
commands.add(new OpAllCMD()); commands.add(new OpAllCMD());
commands.add(new OpCMD()); commands.add(new OpCMD());
commands.add(new RankCMD());
} }
commands.add(new AdminworldCMD()); commands.add(new AdminworldCMD());
commands.add(new AdventureCMD()); commands.add(new AdventureCMD());
@ -31,7 +32,6 @@ public class CommandHandler extends PlexBase
commands.add(new NameHistoryCMD()); commands.add(new NameHistoryCMD());
commands.add(new PlexCMD()); commands.add(new PlexCMD());
commands.add(new PunishmentsCMD()); commands.add(new PunishmentsCMD());
commands.add(new RankCMD());
commands.add(new SpectatorCMD()); commands.add(new SpectatorCMD());
commands.add(new SurvivalCMD()); commands.add(new SurvivalCMD());
commands.add(new UnbanCMD()); commands.add(new UnbanCMD());

View File

@ -28,22 +28,13 @@ public class ChatListener extends PlexListener
{ {
renderer.hasPrefix = true; renderer.hasPrefix = true;
renderer.prefix = plexPlayer.getPrefix(); renderer.prefix = plexPlayer.getPrefix();
} else if (Plex.get().getRankManager().isAdmin(plexPlayer)) }
else if (Plex.get().getRankManager().isAdmin(plexPlayer))
{ {
renderer.hasPrefix = true; renderer.hasPrefix = true;
renderer.prefix = plexPlayer.getRankFromString().getPrefix(); renderer.prefix = plexPlayer.getRankFromString().getPrefix();
} }
event.renderer(renderer); event.renderer(renderer);
/*if (!plexPlayer.getPrefix().isEmpty())
{
event.setFormat(String.format("%s %s §7» %s", plexPlayer.getPrefix(), ChatColor.RESET + plexPlayer.displayName(), event.getMessage()));
} else if (Plex.get().getRankManager().isAdmin(plexPlayer))
{
event.setFormat(String.format("%s %s §7» %s", plexPlayer.getRankFromString().getPrefix(), ChatColor.RESET + plexPlayer.displayName(), event.getMessage()));
} else
{
event.setFormat(String.format("%s §7» %s", ChatColor.RESET + plexPlayer.displayName(), event.getMessage()));
}*/
} }
public static class PlexChatRenderer implements ChatRenderer public static class PlexChatRenderer implements ChatRenderer

View File

@ -1,21 +1,25 @@
package dev.plex.listener.impl; package dev.plex.listener.impl;
import dev.plex.listener.PlexListener; import dev.plex.listener.PlexListener;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
import org.jetbrains.annotations.NotNull;
public class LoginListener extends PlexListener public class LoginListener extends PlexListener
{ {
//TODO: Customizable MSGS private final String banMessage = plugin.config.getString("banning.message");
@EventHandler @EventHandler
public void onPreLogin(AsyncPlayerPreLoginEvent event) public void onPreLogin(AsyncPlayerPreLoginEvent event)
{ {
// PlexLog.log(String.valueOf(plugin.getBanManager().isBanned(event.getUniqueId())));
if (plugin.getBanManager().isBanned(event.getUniqueId())) if (plugin.getBanManager().isBanned(event.getUniqueId()))
{ {
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED, "§cYou're currently banned from this server.\n§cPlease appeal at §6https://forum.telesphoreo.me"); event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED,
LegacyComponentSerializer.legacyAmpersand().deserialize(banMessage));
} }
} }
} }

View File

@ -7,31 +7,42 @@ import dev.plex.services.impl.GameRuleService;
import java.util.List; import java.util.List;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
public class ServiceManager { public class ServiceManager
{
private final List<AbstractService> services = Lists.newArrayList(); private final List<AbstractService> services = Lists.newArrayList();
public ServiceManager() { public ServiceManager()
registerService(new BanService()); {
//registerService(new BanService());
registerService(new GameRuleService()); registerService(new GameRuleService());
} }
public void startServices() { public void startServices()
for (AbstractService service : services) { {
if (!service.isRepeating()) { for (AbstractService service : services)
{
if (!service.isRepeating())
{
Bukkit.getScheduler().runTask(Plex.get(), service::run); Bukkit.getScheduler().runTask(Plex.get(), service::run);
} else if (service.isRepeating() && service.isAsynchronous()) { }
else if (service.isRepeating() && service.isAsynchronous())
{
Bukkit.getScheduler().runTaskTimerAsynchronously(Plex.get(), service::run, 0, 20 * service.repeatInSeconds()); Bukkit.getScheduler().runTaskTimerAsynchronously(Plex.get(), service::run, 0, 20 * service.repeatInSeconds());
} else if (service.isRepeating() && !service.isAsynchronous()) { }
else if (service.isRepeating() && !service.isAsynchronous())
{
Bukkit.getScheduler().runTaskTimer(Plex.get(), service::run, 0, 20 * service.repeatInSeconds()); Bukkit.getScheduler().runTaskTimer(Plex.get(), service::run, 0, 20 * service.repeatInSeconds());
} }
} }
} }
private void registerService(AbstractService service) { private void registerService(AbstractService service)
{
services.add(service); services.add(service);
} }
public int serviceCount() { public int serviceCount()
{
return services.size(); return services.size();
} }
} }

View File

@ -251,7 +251,7 @@ public class PlexUtils extends PlexBase
public static long hoursToSeconds(long hours) public static long hoursToSeconds(long hours)
{ {
return hours * 60 * 60; return hours * 3600;
} }
public static long minutesToSeconds(long minutes) public static long minutesToSeconds(long minutes)

View File

@ -1,10 +1,15 @@
# Plex Configuration File # Plex Configuration File
server: server:
name: "ExampleFreedom" name: "Plexus"
motd: "%servername% - Minecraft %mcversion%" motd: "%servername% - Minecraft %mcversion%"
colorize_motd: true colorize_motd: true
# Ban message is customized here. Additional messages can be configured in messages.yml
banning:
message: "&cYou are banned! Please appeal on the forums at https://forum.plex.us.org/"
# Settings for commands relating to Plex # Settings for commands relating to Plex
commands: commands:
# Should Plex use a "true op" system with ranks or only permission nodes # Should Plex use a "true op" system with ranks or only permission nodes

View File

@ -42,7 +42,7 @@ frozePlayer: "<b><v> - Froze <v>"
unfrozePlayer: "<b><v> - Unfroze <v>" unfrozePlayer: "<b><v> - Unfroze <v>"
noPermission: "<e>You cannot use this command!" noPermission: "<e>You cannot use this command!"
# 1: the login message (uncolored) of the rank required to use the command # 1: the login message (uncolored) of the rank required to use the command
noPermissionRank: "<e>You must be at least <v> rank to use this command!" noPermissionRank: "<e>You must be at least <v> to use this command!"
noPermissionNode: "<e>You must have the permission: <v> to use this command!" noPermissionNode: "<e>You must have the permission: <v> to use this command!"
noPermissionInGame: "<e>You must be in console to use this command!" noPermissionInGame: "<e>You must be in console to use this command!"
noPermissionConsole: "<e>You must be in-game to use this command!" noPermissionConsole: "<e>You must be in-game to use this command!"