Add Super Listener to whitelist events
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This is a very strict measure, but works great in disabling features and keeping the server to a very barebones setup.main
parent
4c9689af6f
commit
b6aeed7ea8
@ -0,0 +1,72 @@
|
||||
package wtf.beatrice.limbomanager.listeners;
|
||||
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.plugin.EventExecutor;
|
||||
import org.reflections.Reflections;
|
||||
import wtf.beatrice.limbomanager.LimboManager;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class SuperListener implements Listener
|
||||
{
|
||||
|
||||
public void doStuff() {
|
||||
|
||||
// search event classes
|
||||
Reflections reflections = new Reflections("org.bukkit");// change to also find custom events
|
||||
Set<Class<? extends Event>> eventClasses = reflections.getSubTypesOf(Event.class).stream().
|
||||
filter(clazz -> Arrays.stream(clazz.getDeclaredFields())
|
||||
.anyMatch(field -> field.getType().getName().endsWith("HandlerList")))
|
||||
.collect(Collectors.toSet());
|
||||
LimboManager.getInstance().getLogger().info("Found " + eventClasses.size() + " available events!");
|
||||
LimboManager.getInstance().getLogger()
|
||||
.info(eventClasses.stream().map(Class::getName).collect(Collectors.joining(", ")));
|
||||
|
||||
// register events
|
||||
EventExecutor eventExecutor = (listener, event) -> iGetCalledForEveryEvent(event);
|
||||
eventClasses.forEach(clazz -> LimboManager.getInstance().getServer().getPluginManager()
|
||||
.registerEvent(clazz, this, EventPriority.MONITOR, eventExecutor, LimboManager.getInstance()));
|
||||
}
|
||||
|
||||
private final String[] dontLog = { "PlayerMoveEvent", "BlockFadeEvent", "BlockPhysicsEvent", "LeavesDecayEvent",
|
||||
"PlayerStatisticIncrementEvent", "PlayerRecipeDiscoverEvent", "PlayerArmSwingEvent", "BlockDropItemEvent",
|
||||
"BlockFertilizeEvent", "AsyncPlayerChatPreviewEvent", "InventoryOpenEvent"
|
||||
|
||||
};
|
||||
|
||||
private final String[] allowed = {"PlayerMoveEvent", "PlayerTeleportEvent", "ServerCommandEvent",
|
||||
"StandardPaperServerListPingEventImpl", "PlayerGameModeChangeEvent", "WorldUnloadEvent",
|
||||
"TimeSkipEvent", "PlayerToggleSprintEvent", "PlayerChatEvent", "AsyncPlayerChatEvent",
|
||||
"GenericGameEvent", "InventoryCreativeEvent", "PlayerItemHeldEvent", "PlayerInteractEvent",
|
||||
"BlockPlaceEvent", "BlockBreakEvent", "PlayerToggleSneakEvent", "PlayerKickEvent",
|
||||
"InventoryClickEvent"
|
||||
|
||||
};
|
||||
|
||||
public void iGetCalledForEveryEvent(Event event) {
|
||||
if (Arrays.stream(dontLog).anyMatch(ignored -> event.getEventName().equals(ignored))) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(Arrays.stream(allowed).noneMatch(allowed -> event.getEventName().equals(allowed))) {
|
||||
if(event instanceof Cancellable)
|
||||
{
|
||||
((Cancellable) event).setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
if(event instanceof Cancellable)
|
||||
{
|
||||
if(Arrays.stream(allowed).noneMatch(allowed -> event.getEventName().equals(allowed))) {
|
||||
LimboManager.getInstance().getLogger().warning(event.getEventName() + " was called!");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in new issue