Refactor more

This commit is contained in:
2026-05-19 21:53:54 -04:00
parent 42f7a02a7a
commit 63b6e72883
33 changed files with 234 additions and 229 deletions
+2 -1
View File
@@ -45,6 +45,7 @@ public class Plex
this.server = server; this.server = server;
this.logger = logger; this.logger = logger;
this.dataFolder = folder.toFile(); this.dataFolder = folder.toFile();
PlexLog.configure(server, () -> config != null && config.settings().getServer().isDebug());
if (!dataFolder.exists()) if (!dataFolder.exists())
{ {
dataFolder.mkdir(); dataFolder.mkdir();
@@ -58,7 +59,7 @@ public class Plex
this.config = loadConfig("config.yml"); this.config = loadConfig("config.yml");
this.messages = loadConfig("messages.yml"); this.messages = loadConfig("messages.yml");
this.api = new DefaultPlexApi(this, MODULE_API_COMPATIBILITY_VERSION); this.api = new DefaultPlexApi(this, MODULE_API_COMPATIBILITY_VERSION);
new ListenerHandler(); new ListenerHandler(this);
} }
private YamlConfig loadConfig(String name) private YamlConfig loadConfig(String name)
@@ -18,16 +18,6 @@ public abstract class ProxyCommand implements SimpleCommand
private final CommandSpec commandSpec; private final CommandSpec commandSpec;
private final RequiredCommandSource commandSource; private final RequiredCommandSource commandSource;
/**
* Creates and registers a proxy command using the current proxy plugin.
*
* @param commandSpec explicit command metadata
*/
protected ProxyCommand(CommandSpec commandSpec)
{
this(Plex.get(), commandSpec);
}
/** /**
* Creates and registers a proxy command. * Creates and registers a proxy command.
* *
@@ -1,32 +1,28 @@
package dev.plex.handlers; package dev.plex.handlers;
import com.google.common.collect.Lists; import dev.plex.Plex;
import dev.plex.listener.ProxyListener; import dev.plex.listener.ProxyListener;
import dev.plex.listener.impl.ConnectionListener;
import dev.plex.listener.impl.ServerListener;
import dev.plex.util.PlexLog; import dev.plex.util.PlexLog;
import dev.plex.util.ReflectionsUtil; import java.util.ArrayList;
import java.lang.reflect.InvocationTargetException;
import java.util.List; import java.util.List;
import java.util.Set;
public class ListenerHandler public class ListenerHandler
{ {
public ListenerHandler() private final Plex plugin;
{ private final List<ProxyListener> listeners = new ArrayList<>();
Set<Class<? extends ProxyListener>> listenerSet = ReflectionsUtil.getClassesBySubType("dev.plex.listener.impl", ProxyListener.class);
List<ProxyListener> listeners = Lists.newArrayList();
listenerSet.forEach(clazz -> public ListenerHandler(Plex plugin)
{ {
try this.plugin = plugin;
{ registerBuiltInListeners();
listeners.add(clazz.getConstructor().newInstance()); PlexLog.log("Registered " + listeners.size() + " proxy listeners.");
} }
catch (InvocationTargetException | InstantiationException | IllegalAccessException |
NoSuchMethodException ex) private void registerBuiltInListeners()
{ {
PlexLog.error("Failed to register " + clazz.getSimpleName() + " as a listener!"); listeners.add(new ConnectionListener(plugin));
} listeners.add(new ServerListener(plugin));
});
PlexLog.log(String.format("Registered %s listeners from %s classes!", listeners.size(), listenerSet.size()));
} }
} }
@@ -4,10 +4,11 @@ import dev.plex.Plex;
public class ProxyListener public class ProxyListener
{ {
protected final Plex plugin = Plex.get(); protected final Plex plugin;
public ProxyListener() protected ProxyListener(Plex plugin)
{ {
Plex.get().getServer().getEventManager().register(Plex.get(), this); this.plugin = plugin;
plugin.getServer().getEventManager().register(plugin, this);
} }
} }
@@ -4,12 +4,18 @@ import com.velocitypowered.api.event.PostOrder;
import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.event.Subscribe;
import com.velocitypowered.api.event.connection.DisconnectEvent; import com.velocitypowered.api.event.connection.DisconnectEvent;
import com.velocitypowered.api.event.player.ServerConnectedEvent; import com.velocitypowered.api.event.player.ServerConnectedEvent;
import dev.plex.Plex;
import dev.plex.listener.ProxyListener; import dev.plex.listener.ProxyListener;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.MiniMessage;
public class ConnectionListener extends ProxyListener public class ConnectionListener extends ProxyListener
{ {
public ConnectionListener(Plex plugin)
{
super(plugin);
}
@Subscribe(order = PostOrder.FIRST) @Subscribe(order = PostOrder.FIRST)
public void onPlayerJoin(ServerConnectedEvent event) public void onPlayerJoin(ServerConnectedEvent event)
{ {
@@ -4,6 +4,7 @@ import com.velocitypowered.api.event.PostOrder;
import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.event.Subscribe;
import com.velocitypowered.api.event.proxy.ProxyPingEvent; import com.velocitypowered.api.event.proxy.ProxyPingEvent;
import com.velocitypowered.api.proxy.server.ServerPing; import com.velocitypowered.api.proxy.server.ServerPing;
import dev.plex.Plex;
import dev.plex.listener.ProxyListener; import dev.plex.listener.ProxyListener;
import dev.plex.settings.ServerSettings; import dev.plex.settings.ServerSettings;
import dev.plex.util.RandomUtil; import dev.plex.util.RandomUtil;
@@ -18,6 +19,11 @@ import net.kyori.adventure.text.minimessage.MiniMessage;
public class ServerListener extends ProxyListener public class ServerListener extends ProxyListener
{ {
public ServerListener(Plex plugin)
{
super(plugin);
}
@Subscribe(order = PostOrder.FIRST) @Subscribe(order = PostOrder.FIRST)
public void onPing(ProxyPingEvent event) public void onPing(ProxyPingEvent event)
{ {
+17 -7
View File
@@ -1,12 +1,22 @@
package dev.plex.util; package dev.plex.util;
import dev.plex.Plex; import com.velocitypowered.api.proxy.ProxyServer;
import java.util.function.BooleanSupplier;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.MiniMessage;
public class PlexLog public class PlexLog
{ {
private static ProxyServer server;
private static BooleanSupplier debugEnabled = () -> false;
public static void configure(ProxyServer server, BooleanSupplier debugEnabled)
{
PlexLog.server = server;
PlexLog.debugEnabled = debugEnabled == null ? () -> false : debugEnabled;
}
public static void log(String message, Object... strings) public static void log(String message, Object... strings)
{ {
for (int i = 0; i < strings.length; i++) for (int i = 0; i < strings.length; i++)
@@ -16,12 +26,12 @@ public class PlexLog
message = message.replace("{" + i + "}", strings[i].toString()); message = message.replace("{" + i + "}", strings[i].toString());
} }
} }
Plex.get().getServer().getConsoleCommandSource().sendMessage(MiniMessage.miniMessage().deserialize("<yellow>[Plex] <gray>" + message)); server.getConsoleCommandSource().sendMessage(MiniMessage.miniMessage().deserialize("<yellow>[Plex] <gray>" + message));
} }
public static void log(Component component) public static void log(Component component)
{ {
Plex.get().getServer().getConsoleCommandSource().sendMessage(Component.text("[Plex] ").color(NamedTextColor.YELLOW).append(component).colorIfAbsent(NamedTextColor.GRAY)); server.getConsoleCommandSource().sendMessage(Component.text("[Plex] ").color(NamedTextColor.YELLOW).append(component).colorIfAbsent(NamedTextColor.GRAY));
} }
public static void error(String message, Object... strings) public static void error(String message, Object... strings)
@@ -33,7 +43,7 @@ public class PlexLog
message = message.replace("{" + i + "}", strings[i].toString()); message = message.replace("{" + i + "}", strings[i].toString());
} }
} }
Plex.get().getServer().getConsoleCommandSource().sendMessage(MiniMessage.miniMessage().deserialize("<red>[Plex Error] <gold>" + message)); server.getConsoleCommandSource().sendMessage(MiniMessage.miniMessage().deserialize("<red>[Plex Error] <gold>" + message));
} }
public static void warn(String message, Object... strings) public static void warn(String message, Object... strings)
@@ -45,7 +55,7 @@ public class PlexLog
message = message.replace("{" + i + "}", strings[i].toString()); message = message.replace("{" + i + "}", strings[i].toString());
} }
} }
Plex.get().getServer().getConsoleCommandSource().sendMessage(MiniMessage.miniMessage().deserialize("<#eb7c0e>[Plex Warning] <gold>" + message)); server.getConsoleCommandSource().sendMessage(MiniMessage.miniMessage().deserialize("<#eb7c0e>[Plex Warning] <gold>" + message));
} }
public static void debug(String message, Object... strings) public static void debug(String message, Object... strings)
@@ -57,9 +67,9 @@ public class PlexLog
message = message.replace("{" + i + "}", strings[i].toString()); message = message.replace("{" + i + "}", strings[i].toString());
} }
} }
if (Plex.get().getConfig().settings().getServer().isDebug()) if (debugEnabled.getAsBoolean())
{ {
Plex.get().getServer().getConsoleCommandSource().sendMessage(MiniMessage.miniMessage().deserialize("<dark_purple>[Plex Debug] <gold>" + message)); server.getConsoleCommandSource().sendMessage(MiniMessage.miniMessage().deserialize("<dark_purple>[Plex Debug] <gold>" + message));
} }
} }
} }
@@ -1,57 +0,0 @@
package dev.plex.util;
import com.google.common.collect.ImmutableSet;
import com.google.common.reflect.ClassPath;
import dev.plex.Plex;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
public class ReflectionsUtil
{
@SuppressWarnings("UnstableApiUsage")
public static Set<Class<?>> getClassesFrom(String packageName)
{
Set<Class<?>> classes = new HashSet<>();
try
{
ClassPath path = ClassPath.from(Plex.class.getClassLoader());
ImmutableSet<ClassPath.ClassInfo> infoSet = path.getTopLevelClasses(packageName);
infoSet.forEach(info ->
{
try
{
Class<?> clazz = Class.forName(info.getName());
classes.add(clazz);
}
catch (ClassNotFoundException ex)
{
PlexLog.error("Unable to find class " + info.getName() + " in " + packageName);
}
});
}
catch (IOException ex)
{
PlexLog.error("Something went wrong while fetching classes from " + packageName);
throw new RuntimeException(ex);
}
return Collections.unmodifiableSet(classes);
}
@SuppressWarnings("unchecked")
public static <T> Set<Class<? extends T>> getClassesBySubType(String packageName, Class<T> subType)
{
Set<Class<?>> loadedClasses = getClassesFrom(packageName);
Set<Class<? extends T>> classes = new HashSet<>();
loadedClasses.forEach(clazz ->
{
if (clazz.getSuperclass() == subType || Arrays.asList(clazz.getInterfaces()).contains(subType))
{
classes.add((Class<? extends T>) clazz);
}
});
return Collections.unmodifiableSet(classes);
}
}
@@ -26,7 +26,7 @@ public class AdminChatCMD extends ServerCommand
super(command("adminchat") super(command("adminchat")
.description("Talk privately with other admins") .description("Talk privately with other admins")
.usage("/<command> <message>") .usage("/<command> <message>")
.aliases("o,ac,sc,staffchat") .aliases("o,sc,staffchat")
.permission("plex.adminchat") .permission("plex.adminchat")
.build()); .build());
} }
@@ -26,7 +26,6 @@ public class BlockEditCMD extends ServerCommand
.permission("plex.blockedit") .permission("plex.blockedit")
.build()); .build());
} }
private final BlockListener bl = new BlockListener();
@Override @Override
protected void buildCommand(LiteralArgumentBuilder<CommandSourceStack> command) protected void buildCommand(LiteralArgumentBuilder<CommandSourceStack> command)
@@ -58,7 +57,7 @@ public class BlockEditCMD extends ServerCommand
context.send(sender, context.messageComponent("listOfPlayersBlocked")); context.send(sender, context.messageComponent("listOfPlayersBlocked"));
int count = 0; int count = 0;
for (String player : bl.blockedPlayers.stream().toList()) for (String player : BlockListener.blockedPlayers.stream().toList())
{ {
context.send(sender, context.messageComponent("blockeditListEntry", player)); context.send(sender, context.messageComponent("blockeditListEntry", player));
++count; ++count;
@@ -73,11 +72,11 @@ public class BlockEditCMD extends ServerCommand
{ {
PlexUtils.broadcast(context.messageComponent("unblockingEdits", sender.getName(), context.messageString("blockeditAllPlayers"))); PlexUtils.broadcast(context.messageComponent("unblockingEdits", sender.getName(), context.messageString("blockeditAllPlayers")));
int count = 0; int count = 0;
for (String player : bl.blockedPlayers.stream().toList()) for (String player : BlockListener.blockedPlayers.stream().toList())
{ {
if (bl.blockedPlayers.contains(player)) if (BlockListener.blockedPlayers.contains(player))
{ {
bl.blockedPlayers.remove(player); BlockListener.blockedPlayers.remove(player);
++count; ++count;
} }
} }
@@ -91,7 +90,7 @@ public class BlockEditCMD extends ServerCommand
{ {
if (!context.silentCheckPermission(player, "plex.blockedit")) if (!context.silentCheckPermission(player, "plex.blockedit"))
{ {
bl.blockedPlayers.add(player.getName()); BlockListener.blockedPlayers.add(player.getName());
++count; ++count;
} }
} }
@@ -100,7 +99,7 @@ public class BlockEditCMD extends ServerCommand
} }
final Player player = context.getNonNullPlayer(args[0]); final Player player = context.getNonNullPlayer(args[0]);
if (!bl.blockedPlayers.contains(player.getName())) if (!BlockListener.blockedPlayers.contains(player.getName()))
{ {
if (context.silentCheckPermission(player, "plex.blockedit")) if (context.silentCheckPermission(player, "plex.blockedit"))
{ {
@@ -108,14 +107,14 @@ public class BlockEditCMD extends ServerCommand
return null; return null;
} }
PlexUtils.broadcast(context.messageComponent("blockingEdits", sender.getName(), player.getName())); PlexUtils.broadcast(context.messageComponent("blockingEdits", sender.getName(), player.getName()));
bl.blockedPlayers.add(player.getName()); BlockListener.blockedPlayers.add(player.getName());
context.send(player, context.messageComponent("editsModified", context.messageString("blockeditBlockedState"))); context.send(player, context.messageComponent("editsModified", context.messageString("blockeditBlockedState")));
context.send(sender, context.messageComponent("editsBlocked", player.getName())); context.send(sender, context.messageComponent("editsBlocked", player.getName()));
} }
else else
{ {
PlexUtils.broadcast(context.messageComponent("unblockingEdits", sender.getName(), player.getName())); PlexUtils.broadcast(context.messageComponent("unblockingEdits", sender.getName(), player.getName()));
bl.blockedPlayers.remove(player.getName()); BlockListener.blockedPlayers.remove(player.getName());
context.send(player, context.messageComponent("editsModified", context.messageString("blockeditUnblockedState"))); context.send(player, context.messageComponent("editsModified", context.messageString("blockeditUnblockedState")));
context.send(sender, context.messageComponent("editsUnblocked", player.getName())); context.send(sender, context.messageComponent("editsUnblocked", player.getName()));
} }
@@ -1,49 +1,76 @@
package dev.plex.handlers; package dev.plex.handlers;
import com.google.common.collect.Lists;
import dev.plex.Plex; import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase; import dev.plex.listener.ServerListenerBase;
import dev.plex.listener.annotation.Toggleable; import dev.plex.listener.impl.AntiNukerListener;
import dev.plex.listener.impl.AntiSpamListener;
import dev.plex.listener.impl.BanListener;
import dev.plex.listener.impl.BlockListener;
import dev.plex.listener.impl.BookListener;
import dev.plex.listener.impl.ChatListener;
import dev.plex.listener.impl.CommandListener;
import dev.plex.listener.impl.DropListener;
import dev.plex.listener.impl.FreezeListener;
import dev.plex.listener.impl.GameModeListener;
import dev.plex.listener.impl.MenuListener;
import dev.plex.listener.impl.MobListener;
import dev.plex.listener.impl.MuteListener;
import dev.plex.listener.impl.PlayerListener;
import dev.plex.listener.impl.ServerListener;
import dev.plex.listener.impl.TabListener;
import dev.plex.listener.impl.TogglesListener;
import dev.plex.listener.impl.VanishListener;
import dev.plex.listener.impl.WorldListener;
import dev.plex.util.PlexLog; import dev.plex.util.PlexLog;
import dev.plex.util.ReflectionsUtil; import java.util.ArrayList;
import java.lang.reflect.InvocationTargetException;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.function.Supplier;
public class ListenerHandler public class ListenerHandler
{ {
private final Plex plugin; private final Plex plugin;
private final List<ServerListenerBase> listeners = new ArrayList<>();
public ListenerHandler(Plex plugin) public ListenerHandler(Plex plugin)
{ {
this.plugin = plugin; this.plugin = plugin;
Set<Class<? extends ServerListenerBase>> listenerSet = ReflectionsUtil.getClassesBySubType("dev.plex.listener.impl", ServerListenerBase.class); registerBuiltInListeners();
List<ServerListenerBase> listeners = Lists.newArrayList(); PlexLog.log("Registered " + listeners.size() + " listeners.");
}
listenerSet.forEach(clazz -> private void registerBuiltInListeners()
{
register(() -> new AntiNukerListener(plugin));
register(() -> new AntiSpamListener(plugin));
register(() -> new BanListener(plugin));
register(() -> new BlockListener(plugin));
register(() -> new BookListener(plugin));
registerIfEnabled("chat.enabled", () -> new ChatListener(plugin));
register(() -> new CommandListener(plugin));
register(() -> new DropListener(plugin));
register(() -> new FreezeListener(plugin));
register(() -> new GameModeListener(plugin));
register(() -> new MenuListener(plugin));
register(() -> new MobListener(plugin));
register(() -> new MuteListener(plugin));
register(() -> new PlayerListener(plugin));
register(() -> new ServerListener(plugin));
register(() -> new TabListener(plugin));
register(() -> new TogglesListener(plugin));
register(() -> new VanishListener(plugin));
register(() -> new WorldListener(plugin));
}
private void register(Supplier<ServerListenerBase> listener)
{
listeners.add(listener.get());
}
private void registerIfEnabled(String configPath, Supplier<ServerListenerBase> listener)
{
if (plugin.config.get(configPath) != null && plugin.config.getBoolean(configPath))
{ {
try register(listener);
{ }
if (clazz.isAnnotationPresent(Toggleable.class))
{
Toggleable annotation = clazz.getDeclaredAnnotation(Toggleable.class);
if (plugin.config.get(annotation.value()) != null && plugin.config.getBoolean(annotation.value()))
{
listeners.add(clazz.getConstructor().newInstance());
}
}
else
{
listeners.add(clazz.getConstructor().newInstance());
}
}
catch (InvocationTargetException | InstantiationException | IllegalAccessException |
NoSuchMethodException ex)
{
PlexLog.error("Failed to register " + clazz.getSimpleName() + " as a listener!");
}
});
PlexLog.log(String.format("Registered %s listeners from %s classes!", listeners.size(), listenerSet.size()));
} }
} }
@@ -7,11 +7,6 @@ public abstract class ServerListenerBase implements Listener
{ {
protected final Plex plugin; protected final Plex plugin;
public ServerListenerBase()
{
this(Plex.get());
}
protected ServerListenerBase(Plex plugin) protected ServerListenerBase(Plex plugin)
{ {
this.plugin = plugin; this.plugin = plugin;
@@ -1,10 +0,0 @@
package dev.plex.listener.annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface Toggleable
{
String value();
}
@@ -1,5 +1,6 @@
package dev.plex.listener.impl; package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase; import dev.plex.listener.ServerListenerBase;
import dev.plex.services.impl.TimingService; import dev.plex.services.impl.TimingService;
import dev.plex.util.PlexUtils; import dev.plex.util.PlexUtils;
@@ -13,6 +14,11 @@ import org.bukkit.event.block.BlockPlaceEvent;
public class AntiNukerListener extends ServerListenerBase public class AntiNukerListener extends ServerListenerBase
{ {
public AntiNukerListener(Plex plugin)
{
super(plugin);
}
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)
public void onBlockPlace(BlockPlaceEvent event) public void onBlockPlace(BlockPlaceEvent event)
{ {
@@ -1,5 +1,6 @@
package dev.plex.listener.impl; package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase; import dev.plex.listener.ServerListenerBase;
import dev.plex.services.impl.TimingService; import dev.plex.services.impl.TimingService;
import dev.plex.util.PlexUtils; import dev.plex.util.PlexUtils;
@@ -13,6 +14,11 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent;
public class AntiSpamListener extends ServerListenerBase public class AntiSpamListener extends ServerListenerBase
{ {
public AntiSpamListener(Plex plugin)
{
super(plugin);
}
@EventHandler @EventHandler
public void onChat(AsyncChatEvent event) public void onChat(AsyncChatEvent event)
{ {
@@ -1,5 +1,6 @@
package dev.plex.listener.impl; package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase; import dev.plex.listener.ServerListenerBase;
import dev.plex.player.PlexPlayer; import dev.plex.player.PlexPlayer;
import dev.plex.punishment.Punishment; import dev.plex.punishment.Punishment;
@@ -11,6 +12,11 @@ import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
public class BanListener extends ServerListenerBase public class BanListener extends ServerListenerBase
{ {
public BanListener(Plex plugin)
{
super(plugin);
}
@EventHandler @EventHandler
public void onPreLogin(AsyncPlayerPreLoginEvent event) public void onPreLogin(AsyncPlayerPreLoginEvent event)
{ {
@@ -1,5 +1,6 @@
package dev.plex.listener.impl; package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase; import dev.plex.listener.ServerListenerBase;
import dev.plex.util.PlexUtils; import dev.plex.util.PlexUtils;
@@ -19,10 +20,15 @@ import org.bukkit.event.block.BlockPlaceEvent;
public class BlockListener extends ServerListenerBase public class BlockListener extends ServerListenerBase
{ {
public BlockListener(Plex plugin)
{
super(plugin);
}
private static final List<Material> blockedBlocks = new ArrayList<>(); private static final List<Material> blockedBlocks = new ArrayList<>();
private static final List<Material> SIGNS = Arrays.stream(Material.values()).filter((mat) -> mat.name().endsWith("_SIGN")).toList(); private static final List<Material> SIGNS = Arrays.stream(Material.values()).filter((mat) -> mat.name().endsWith("_SIGN")).toList();
private static List<String> cachedBlockedBlocksConfig = null; private static List<String> cachedBlockedBlocksConfig = null;
public List<String> blockedPlayers = new ArrayList<>(); public static final List<String> blockedPlayers = new ArrayList<>();
@EventHandler(priority = EventPriority.LOW) @EventHandler(priority = EventPriority.LOW)
public void onBlockPlace(BlockPlaceEvent event) public void onBlockPlace(BlockPlaceEvent event)
@@ -1,5 +1,6 @@
package dev.plex.listener.impl; package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase; import dev.plex.listener.ServerListenerBase;
import dev.plex.util.PlexUtils; import dev.plex.util.PlexUtils;
import dev.plex.util.minimessage.SafeMiniMessage; import dev.plex.util.minimessage.SafeMiniMessage;
@@ -14,6 +15,11 @@ import java.util.List;
public class BookListener extends ServerListenerBase public class BookListener extends ServerListenerBase
{ {
public BookListener(Plex plugin)
{
super(plugin);
}
@EventHandler(priority = EventPriority.LOW) @EventHandler(priority = EventPriority.LOW)
public void onBookEdit(PlayerEditBookEvent event) public void onBookEdit(PlayerEditBookEvent event)
{ {
@@ -1,8 +1,8 @@
package dev.plex.listener.impl; package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.hook.VaultHook; import dev.plex.hook.VaultHook;
import dev.plex.listener.ServerListenerBase; import dev.plex.listener.ServerListenerBase;
import dev.plex.listener.annotation.Toggleable;
import dev.plex.meta.PlayerMeta; import dev.plex.meta.PlayerMeta;
import dev.plex.player.PlexPlayer; import dev.plex.player.PlexPlayer;
import dev.plex.util.PlexUtils; import dev.plex.util.PlexUtils;
@@ -24,9 +24,13 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@Toggleable("chat.enabled")
public class ChatListener extends ServerListenerBase public class ChatListener extends ServerListenerBase
{ {
public ChatListener(Plex plugin)
{
super(plugin);
}
public static final TextReplacementConfig URL_REPLACEMENT_CONFIG = TextReplacementConfig public static final TextReplacementConfig URL_REPLACEMENT_CONFIG = TextReplacementConfig
.builder() .builder()
.match("(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]") .match("(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]")
@@ -1,5 +1,6 @@
package dev.plex.listener.impl; package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase; import dev.plex.listener.ServerListenerBase;
import dev.plex.player.PlexPlayer; import dev.plex.player.PlexPlayer;
import dev.plex.util.PlexUtils; import dev.plex.util.PlexUtils;
@@ -11,6 +12,11 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent;
public class CommandListener extends ServerListenerBase public class CommandListener extends ServerListenerBase
{ {
public CommandListener(Plex plugin)
{
super(plugin);
}
@EventHandler(priority = EventPriority.HIGHEST) @EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event)
{ {
@@ -1,11 +1,17 @@
package dev.plex.listener.impl; package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase; import dev.plex.listener.ServerListenerBase;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerDropItemEvent;
public class DropListener extends ServerListenerBase public class DropListener extends ServerListenerBase
{ {
public DropListener(Plex plugin)
{
super(plugin);
}
@EventHandler @EventHandler
public void onPlayerDropItem(PlayerDropItemEvent event) public void onPlayerDropItem(PlayerDropItemEvent event)
{ {
@@ -1,5 +1,6 @@
package dev.plex.listener.impl; package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase; import dev.plex.listener.ServerListenerBase;
import dev.plex.player.PlexPlayer; import dev.plex.player.PlexPlayer;
@@ -9,6 +10,11 @@ import org.bukkit.event.player.PlayerTeleportEvent;
public class FreezeListener extends ServerListenerBase public class FreezeListener extends ServerListenerBase
{ {
public FreezeListener(Plex plugin)
{
super(plugin);
}
@EventHandler @EventHandler
public void onPlayerMove(PlayerMoveEvent e) public void onPlayerMove(PlayerMoveEvent e)
{ {
@@ -1,5 +1,6 @@
package dev.plex.listener.impl; package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.event.GameModeUpdateEvent; import dev.plex.event.GameModeUpdateEvent;
import dev.plex.listener.ServerListenerBase; import dev.plex.listener.ServerListenerBase;
import dev.plex.util.PlexUtils; import dev.plex.util.PlexUtils;
@@ -9,6 +10,11 @@ import org.bukkit.event.EventHandler;
public class GameModeListener extends ServerListenerBase public class GameModeListener extends ServerListenerBase
{ {
public GameModeListener(Plex plugin)
{
super(plugin);
}
@EventHandler @EventHandler
public void onGameModeUpdate(GameModeUpdateEvent event) public void onGameModeUpdate(GameModeUpdateEvent event)
{ {
@@ -1,5 +1,6 @@
package dev.plex.listener.impl; package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase; import dev.plex.listener.ServerListenerBase;
import dev.plex.menu.AbstractMenu; import dev.plex.menu.AbstractMenu;
import dev.plex.menu.pagination.PageableMenu; import dev.plex.menu.pagination.PageableMenu;
@@ -15,6 +16,11 @@ import org.bukkit.inventory.meta.ItemMeta;
*/ */
public class MenuListener extends ServerListenerBase public class MenuListener extends ServerListenerBase
{ {
public MenuListener(Plex plugin)
{
super(plugin);
}
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onClick(InventoryClickEvent event) public void onClick(InventoryClickEvent event)
{ {
@@ -1,5 +1,6 @@
package dev.plex.listener.impl; package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase; import dev.plex.listener.ServerListenerBase;
import dev.plex.util.BlockUtils; import dev.plex.util.BlockUtils;
import dev.plex.util.PlexUtils; import dev.plex.util.PlexUtils;
@@ -30,6 +31,11 @@ import java.util.List;
public class MobListener extends ServerListenerBase public class MobListener extends ServerListenerBase
{ {
public MobListener(Plex plugin)
{
super(plugin);
}
private static final List<Material> SPAWN_EGGS = Arrays.stream(Material.values()).filter((mat) -> mat.name().endsWith("_SPAWN_EGG")).toList(); private static final List<Material> SPAWN_EGGS = Arrays.stream(Material.values()).filter((mat) -> mat.name().endsWith("_SPAWN_EGG")).toList();
private static EntityType spawnEggToEntityType(Material mat) private static EntityType spawnEggToEntityType(Material mat)
@@ -1,5 +1,6 @@
package dev.plex.listener.impl; package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase; import dev.plex.listener.ServerListenerBase;
import dev.plex.util.PlexLog; import dev.plex.util.PlexLog;
import dev.plex.util.PlexUtils; import dev.plex.util.PlexUtils;
@@ -15,6 +16,11 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent;
public class MuteListener extends ServerListenerBase public class MuteListener extends ServerListenerBase
{ {
public MuteListener(Plex plugin)
{
super(plugin);
}
List<String> commands = plugin.config.getStringList("block_on_mute"); List<String> commands = plugin.config.getStringList("block_on_mute");
@EventHandler(priority = EventPriority.HIGHEST) @EventHandler(priority = EventPriority.HIGHEST)
@@ -1,5 +1,6 @@
package dev.plex.listener.impl; package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase; import dev.plex.listener.ServerListenerBase;
import dev.plex.meta.PlayerMeta; import dev.plex.meta.PlayerMeta;
@@ -19,6 +20,11 @@ import org.bukkit.event.player.PlayerQuitEvent;
public class PlayerListener extends ServerListenerBase public class PlayerListener extends ServerListenerBase
{ {
public PlayerListener(Plex plugin)
{
super(plugin);
}
// setting up a player's data // setting up a player's data
@EventHandler(priority = EventPriority.HIGHEST) @EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerSetup(PlayerJoinEvent event) public void onPlayerSetup(PlayerJoinEvent event)
@@ -1,5 +1,6 @@
package dev.plex.listener.impl; package dev.plex.listener.impl;
import dev.plex.Plex;
import com.destroystokyo.paper.event.server.PaperServerListPingEvent; import com.destroystokyo.paper.event.server.PaperServerListPingEvent;
import com.destroystokyo.paper.event.server.PaperServerListPingEvent.ListedPlayerInfo; import com.destroystokyo.paper.event.server.PaperServerListPingEvent.ListedPlayerInfo;
import dev.plex.listener.ServerListenerBase; import dev.plex.listener.ServerListenerBase;
@@ -16,6 +17,11 @@ import org.bukkit.event.EventHandler;
public class ServerListener extends ServerListenerBase public class ServerListener extends ServerListenerBase
{ {
public ServerListener(Plex plugin)
{
super(plugin);
}
@EventHandler @EventHandler
public void onServerPing(PaperServerListPingEvent event) public void onServerPing(PaperServerListPingEvent event)
{ {
@@ -1,5 +1,6 @@
package dev.plex.listener.impl; package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.hook.VaultHook; import dev.plex.hook.VaultHook;
import dev.plex.listener.ServerListenerBase; import dev.plex.listener.ServerListenerBase;
@@ -14,6 +15,11 @@ import org.bukkit.event.player.PlayerJoinEvent;
public class TabListener extends ServerListenerBase public class TabListener extends ServerListenerBase
{ {
public TabListener(Plex plugin)
{
super(plugin);
}
@EventHandler(priority = EventPriority.HIGHEST) @EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerJoin(PlayerJoinEvent event) public void onPlayerJoin(PlayerJoinEvent event)
{ {
@@ -1,5 +1,6 @@
package dev.plex.listener.impl; package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase; import dev.plex.listener.ServerListenerBase;
import dev.plex.util.PlexUtils; import dev.plex.util.PlexUtils;
import io.papermc.paper.event.player.AsyncChatEvent; import io.papermc.paper.event.player.AsyncChatEvent;
@@ -25,6 +26,11 @@ import org.bukkit.projectiles.ProjectileSource;
public class TogglesListener extends ServerListenerBase public class TogglesListener extends ServerListenerBase
{ {
public TogglesListener(Plex plugin)
{
super(plugin);
}
List<String> commands = plugin.config.getStringList("block_on_mute"); List<String> commands = plugin.config.getStringList("block_on_mute");
@EventHandler @EventHandler
@@ -1,5 +1,6 @@
package dev.plex.listener.impl; package dev.plex.listener.impl;
import dev.plex.Plex;
import de.myzelyam.api.vanish.PlayerShowEvent; import de.myzelyam.api.vanish.PlayerShowEvent;
import dev.plex.listener.ServerListenerBase; import dev.plex.listener.ServerListenerBase;
@@ -11,6 +12,11 @@ import org.bukkit.event.EventPriority;
public class VanishListener extends ServerListenerBase public class VanishListener extends ServerListenerBase
{ {
public VanishListener(Plex plugin)
{
super(plugin);
}
@EventHandler(priority = EventPriority.MONITOR) @EventHandler(priority = EventPriority.MONITOR)
public void onPlayerUnvanish(PlayerShowEvent event) public void onPlayerUnvanish(PlayerShowEvent event)
{ {
@@ -1,5 +1,6 @@
package dev.plex.listener.impl; package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase; import dev.plex.listener.ServerListenerBase;
import java.util.Arrays; import java.util.Arrays;
@@ -27,6 +28,11 @@ import org.bukkit.event.player.PlayerTeleportEvent;
public class WorldListener extends ServerListenerBase public class WorldListener extends ServerListenerBase
{ {
public WorldListener(Plex plugin)
{
super(plugin);
}
private final List<String> EDIT_COMMANDS = Arrays.asList("bigtree", "ebigtree", "largetree", "elargetree", "break", "ebreak", "antioch", "nuke", "editsign", "tree", "etree"); private final List<String> EDIT_COMMANDS = Arrays.asList("bigtree", "ebigtree", "largetree", "elargetree", "break", "ebreak", "antioch", "nuke", "editsign", "tree", "etree");
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
@@ -1,71 +0,0 @@
package dev.plex.util;
import com.google.common.collect.ImmutableSet;
import com.google.common.reflect.ClassPath;
import com.google.common.reflect.TypeToken;
import dev.plex.Plex;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
public class ReflectionsUtil
{
public static Set<Class<?>> getClassesFrom(String packageName)
{
Set<Class<?>> classes = new HashSet<>();
try
{
ClassPath path = ClassPath.from(Plex.class.getClassLoader());
ImmutableSet<ClassPath.ClassInfo> infoSet = path.getTopLevelClasses(packageName);
infoSet.forEach(info ->
{
try
{
Class<?> clazz = Class.forName(info.getName());
classes.add(clazz);
}
catch (ClassNotFoundException ex)
{
PlexLog.error("Unable to find class " + info.getName() + " in " + packageName);
}
});
}
catch (IOException ex)
{
PlexLog.error("Something went wrong while fetching classes from " + packageName);
throw new RuntimeException(ex);
}
return Collections.unmodifiableSet(classes);
}
@SuppressWarnings("unchecked")
public static <T> Set<Class<? extends T>> getClassesBySubType(String packageName, Class<T> subType)
{
Set<Class<?>> loadedClasses = getClassesFrom(packageName);
Set<Class<? extends T>> classes = new HashSet<>();
loadedClasses.forEach(clazz ->
{
if (clazz.getSuperclass() == subType || Arrays.asList(clazz.getInterfaces()).contains(subType))
{
classes.add((Class<? extends T>) clazz);
}
});
return Collections.unmodifiableSet(classes);
}
public static Class<?> getGenericField(Field field)
{
Type type = field.getGenericType();
if (type instanceof ParameterizedType parameterizedType)
{
return TypeToken.of(parameterizedType.getActualTypeArguments()[0]).getRawType();
}
return field.getType();
}
}