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.logger = logger;
this.dataFolder = folder.toFile();
PlexLog.configure(server, () -> config != null && config.settings().getServer().isDebug());
if (!dataFolder.exists())
{
dataFolder.mkdir();
@@ -58,7 +59,7 @@ public class Plex
this.config = loadConfig("config.yml");
this.messages = loadConfig("messages.yml");
this.api = new DefaultPlexApi(this, MODULE_API_COMPATIBILITY_VERSION);
new ListenerHandler();
new ListenerHandler(this);
}
private YamlConfig loadConfig(String name)
@@ -18,16 +18,6 @@ public abstract class ProxyCommand implements SimpleCommand
private final CommandSpec commandSpec;
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.
*
@@ -1,32 +1,28 @@
package dev.plex.handlers;
import com.google.common.collect.Lists;
import dev.plex.Plex;
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.ReflectionsUtil;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class ListenerHandler
{
public ListenerHandler()
{
Set<Class<? extends ProxyListener>> listenerSet = ReflectionsUtil.getClassesBySubType("dev.plex.listener.impl", ProxyListener.class);
List<ProxyListener> listeners = Lists.newArrayList();
private final Plex plugin;
private final List<ProxyListener> listeners = new ArrayList<>();
listenerSet.forEach(clazz ->
public ListenerHandler(Plex plugin)
{
try
this.plugin = plugin;
registerBuiltInListeners();
PlexLog.log("Registered " + listeners.size() + " proxy listeners.");
}
private void registerBuiltInListeners()
{
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()));
listeners.add(new ConnectionListener(plugin));
listeners.add(new ServerListener(plugin));
}
}
@@ -4,10 +4,11 @@ import dev.plex.Plex;
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.connection.DisconnectEvent;
import com.velocitypowered.api.event.player.ServerConnectedEvent;
import dev.plex.Plex;
import dev.plex.listener.ProxyListener;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
public class ConnectionListener extends ProxyListener
{
public ConnectionListener(Plex plugin)
{
super(plugin);
}
@Subscribe(order = PostOrder.FIRST)
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.proxy.ProxyPingEvent;
import com.velocitypowered.api.proxy.server.ServerPing;
import dev.plex.Plex;
import dev.plex.listener.ProxyListener;
import dev.plex.settings.ServerSettings;
import dev.plex.util.RandomUtil;
@@ -18,6 +19,11 @@ import net.kyori.adventure.text.minimessage.MiniMessage;
public class ServerListener extends ProxyListener
{
public ServerListener(Plex plugin)
{
super(plugin);
}
@Subscribe(order = PostOrder.FIRST)
public void onPing(ProxyPingEvent event)
{
+17 -7
View File
@@ -1,12 +1,22 @@
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.format.NamedTextColor;
import net.kyori.adventure.text.minimessage.MiniMessage;
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)
{
for (int i = 0; i < strings.length; i++)
@@ -16,12 +26,12 @@ public class PlexLog
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)
{
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)
@@ -33,7 +43,7 @@ public class PlexLog
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)
@@ -45,7 +55,7 @@ public class PlexLog
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)
@@ -57,9 +67,9 @@ public class PlexLog
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")
.description("Talk privately with other admins")
.usage("/<command> <message>")
.aliases("o,ac,sc,staffchat")
.aliases("o,sc,staffchat")
.permission("plex.adminchat")
.build());
}
@@ -26,7 +26,6 @@ public class BlockEditCMD extends ServerCommand
.permission("plex.blockedit")
.build());
}
private final BlockListener bl = new BlockListener();
@Override
protected void buildCommand(LiteralArgumentBuilder<CommandSourceStack> command)
@@ -58,7 +57,7 @@ public class BlockEditCMD extends ServerCommand
context.send(sender, context.messageComponent("listOfPlayersBlocked"));
int count = 0;
for (String player : bl.blockedPlayers.stream().toList())
for (String player : BlockListener.blockedPlayers.stream().toList())
{
context.send(sender, context.messageComponent("blockeditListEntry", player));
++count;
@@ -73,11 +72,11 @@ public class BlockEditCMD extends ServerCommand
{
PlexUtils.broadcast(context.messageComponent("unblockingEdits", sender.getName(), context.messageString("blockeditAllPlayers")));
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;
}
}
@@ -91,7 +90,7 @@ public class BlockEditCMD extends ServerCommand
{
if (!context.silentCheckPermission(player, "plex.blockedit"))
{
bl.blockedPlayers.add(player.getName());
BlockListener.blockedPlayers.add(player.getName());
++count;
}
}
@@ -100,7 +99,7 @@ public class BlockEditCMD extends ServerCommand
}
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"))
{
@@ -108,14 +107,14 @@ public class BlockEditCMD extends ServerCommand
return null;
}
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(sender, context.messageComponent("editsBlocked", player.getName()));
}
else
{
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(sender, context.messageComponent("editsUnblocked", player.getName()));
}
@@ -1,49 +1,76 @@
package dev.plex.handlers;
import com.google.common.collect.Lists;
import dev.plex.Plex;
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.ReflectionsUtil;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.function.Supplier;
public class ListenerHandler
{
private final Plex plugin;
private final List<ServerListenerBase> listeners = new ArrayList<>();
public ListenerHandler(Plex plugin)
{
this.plugin = plugin;
Set<Class<? extends ServerListenerBase>> listenerSet = ReflectionsUtil.getClassesBySubType("dev.plex.listener.impl", ServerListenerBase.class);
List<ServerListenerBase> listeners = Lists.newArrayList();
registerBuiltInListeners();
PlexLog.log("Registered " + listeners.size() + " listeners.");
}
listenerSet.forEach(clazz ->
private void registerBuiltInListeners()
{
try
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)
{
if (clazz.isAnnotationPresent(Toggleable.class))
listeners.add(listener.get());
}
private void registerIfEnabled(String configPath, Supplier<ServerListenerBase> listener)
{
Toggleable annotation = clazz.getDeclaredAnnotation(Toggleable.class);
if (plugin.config.get(annotation.value()) != null && plugin.config.getBoolean(annotation.value()))
if (plugin.config.get(configPath) != null && plugin.config.getBoolean(configPath))
{
listeners.add(clazz.getConstructor().newInstance());
register(listener);
}
}
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;
public ServerListenerBase()
{
this(Plex.get());
}
protected ServerListenerBase(Plex 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;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase;
import dev.plex.services.impl.TimingService;
import dev.plex.util.PlexUtils;
@@ -13,6 +14,11 @@ import org.bukkit.event.block.BlockPlaceEvent;
public class AntiNukerListener extends ServerListenerBase
{
public AntiNukerListener(Plex plugin)
{
super(plugin);
}
@EventHandler(priority = EventPriority.HIGH)
public void onBlockPlace(BlockPlaceEvent event)
{
@@ -1,5 +1,6 @@
package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase;
import dev.plex.services.impl.TimingService;
import dev.plex.util.PlexUtils;
@@ -13,6 +14,11 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent;
public class AntiSpamListener extends ServerListenerBase
{
public AntiSpamListener(Plex plugin)
{
super(plugin);
}
@EventHandler
public void onChat(AsyncChatEvent event)
{
@@ -1,5 +1,6 @@
package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase;
import dev.plex.player.PlexPlayer;
import dev.plex.punishment.Punishment;
@@ -11,6 +12,11 @@ import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
public class BanListener extends ServerListenerBase
{
public BanListener(Plex plugin)
{
super(plugin);
}
@EventHandler
public void onPreLogin(AsyncPlayerPreLoginEvent event)
{
@@ -1,5 +1,6 @@
package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase;
import dev.plex.util.PlexUtils;
@@ -19,10 +20,15 @@ import org.bukkit.event.block.BlockPlaceEvent;
public class BlockListener extends ServerListenerBase
{
public BlockListener(Plex plugin)
{
super(plugin);
}
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 List<String> cachedBlockedBlocksConfig = null;
public List<String> blockedPlayers = new ArrayList<>();
public static final List<String> blockedPlayers = new ArrayList<>();
@EventHandler(priority = EventPriority.LOW)
public void onBlockPlace(BlockPlaceEvent event)
@@ -1,5 +1,6 @@
package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase;
import dev.plex.util.PlexUtils;
import dev.plex.util.minimessage.SafeMiniMessage;
@@ -14,6 +15,11 @@ import java.util.List;
public class BookListener extends ServerListenerBase
{
public BookListener(Plex plugin)
{
super(plugin);
}
@EventHandler(priority = EventPriority.LOW)
public void onBookEdit(PlayerEditBookEvent event)
{
@@ -1,8 +1,8 @@
package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.hook.VaultHook;
import dev.plex.listener.ServerListenerBase;
import dev.plex.listener.annotation.Toggleable;
import dev.plex.meta.PlayerMeta;
import dev.plex.player.PlexPlayer;
import dev.plex.util.PlexUtils;
@@ -24,9 +24,13 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.jetbrains.annotations.NotNull;
@Toggleable("chat.enabled")
public class ChatListener extends ServerListenerBase
{
public ChatListener(Plex plugin)
{
super(plugin);
}
public static final TextReplacementConfig URL_REPLACEMENT_CONFIG = TextReplacementConfig
.builder()
.match("(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]")
@@ -1,5 +1,6 @@
package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase;
import dev.plex.player.PlexPlayer;
import dev.plex.util.PlexUtils;
@@ -11,6 +12,11 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent;
public class CommandListener extends ServerListenerBase
{
public CommandListener(Plex plugin)
{
super(plugin);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event)
{
@@ -1,11 +1,17 @@
package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerDropItemEvent;
public class DropListener extends ServerListenerBase
{
public DropListener(Plex plugin)
{
super(plugin);
}
@EventHandler
public void onPlayerDropItem(PlayerDropItemEvent event)
{
@@ -1,5 +1,6 @@
package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase;
import dev.plex.player.PlexPlayer;
@@ -9,6 +10,11 @@ import org.bukkit.event.player.PlayerTeleportEvent;
public class FreezeListener extends ServerListenerBase
{
public FreezeListener(Plex plugin)
{
super(plugin);
}
@EventHandler
public void onPlayerMove(PlayerMoveEvent e)
{
@@ -1,5 +1,6 @@
package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.event.GameModeUpdateEvent;
import dev.plex.listener.ServerListenerBase;
import dev.plex.util.PlexUtils;
@@ -9,6 +10,11 @@ import org.bukkit.event.EventHandler;
public class GameModeListener extends ServerListenerBase
{
public GameModeListener(Plex plugin)
{
super(plugin);
}
@EventHandler
public void onGameModeUpdate(GameModeUpdateEvent event)
{
@@ -1,5 +1,6 @@
package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase;
import dev.plex.menu.AbstractMenu;
import dev.plex.menu.pagination.PageableMenu;
@@ -15,6 +16,11 @@ import org.bukkit.inventory.meta.ItemMeta;
*/
public class MenuListener extends ServerListenerBase
{
public MenuListener(Plex plugin)
{
super(plugin);
}
@EventHandler(priority = EventPriority.LOWEST)
public void onClick(InventoryClickEvent event)
{
@@ -1,5 +1,6 @@
package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase;
import dev.plex.util.BlockUtils;
import dev.plex.util.PlexUtils;
@@ -30,6 +31,11 @@ import java.util.List;
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 EntityType spawnEggToEntityType(Material mat)
@@ -1,5 +1,6 @@
package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase;
import dev.plex.util.PlexLog;
import dev.plex.util.PlexUtils;
@@ -15,6 +16,11 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent;
public class MuteListener extends ServerListenerBase
{
public MuteListener(Plex plugin)
{
super(plugin);
}
List<String> commands = plugin.config.getStringList("block_on_mute");
@EventHandler(priority = EventPriority.HIGHEST)
@@ -1,5 +1,6 @@
package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase;
import dev.plex.meta.PlayerMeta;
@@ -19,6 +20,11 @@ import org.bukkit.event.player.PlayerQuitEvent;
public class PlayerListener extends ServerListenerBase
{
public PlayerListener(Plex plugin)
{
super(plugin);
}
// setting up a player's data
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerSetup(PlayerJoinEvent event)
@@ -1,5 +1,6 @@
package dev.plex.listener.impl;
import dev.plex.Plex;
import com.destroystokyo.paper.event.server.PaperServerListPingEvent;
import com.destroystokyo.paper.event.server.PaperServerListPingEvent.ListedPlayerInfo;
import dev.plex.listener.ServerListenerBase;
@@ -16,6 +17,11 @@ import org.bukkit.event.EventHandler;
public class ServerListener extends ServerListenerBase
{
public ServerListener(Plex plugin)
{
super(plugin);
}
@EventHandler
public void onServerPing(PaperServerListPingEvent event)
{
@@ -1,5 +1,6 @@
package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.hook.VaultHook;
import dev.plex.listener.ServerListenerBase;
@@ -14,6 +15,11 @@ import org.bukkit.event.player.PlayerJoinEvent;
public class TabListener extends ServerListenerBase
{
public TabListener(Plex plugin)
{
super(plugin);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerJoin(PlayerJoinEvent event)
{
@@ -1,5 +1,6 @@
package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase;
import dev.plex.util.PlexUtils;
import io.papermc.paper.event.player.AsyncChatEvent;
@@ -25,6 +26,11 @@ import org.bukkit.projectiles.ProjectileSource;
public class TogglesListener extends ServerListenerBase
{
public TogglesListener(Plex plugin)
{
super(plugin);
}
List<String> commands = plugin.config.getStringList("block_on_mute");
@EventHandler
@@ -1,5 +1,6 @@
package dev.plex.listener.impl;
import dev.plex.Plex;
import de.myzelyam.api.vanish.PlayerShowEvent;
import dev.plex.listener.ServerListenerBase;
@@ -11,6 +12,11 @@ import org.bukkit.event.EventPriority;
public class VanishListener extends ServerListenerBase
{
public VanishListener(Plex plugin)
{
super(plugin);
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerUnvanish(PlayerShowEvent event)
{
@@ -1,5 +1,6 @@
package dev.plex.listener.impl;
import dev.plex.Plex;
import dev.plex.listener.ServerListenerBase;
import java.util.Arrays;
@@ -27,6 +28,11 @@ import org.bukkit.event.player.PlayerTeleportEvent;
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");
@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();
}
}