Divide modern and beta-safe event handling to avoid class not found errors. Fix compatibility with Poseidon.
Some checks are pending
Build / build (push) Waiting to run

This commit is contained in:
天クマ 2026-06-16 20:52:24 -03:00
commit d6e65cda12
8 changed files with 76 additions and 34 deletions

View file

@ -5,6 +5,8 @@ import io.github.adrianvic.nemesiseye.impl.v1_7_3.commands.Eye;
import io.github.adrianvic.nemesiseye.impl.v1_7_3.events.BlockEventListener; import io.github.adrianvic.nemesiseye.impl.v1_7_3.events.BlockEventListener;
import io.github.adrianvic.nemesiseye.impl.v1_7_3.events.EntityEventListener; import io.github.adrianvic.nemesiseye.impl.v1_7_3.events.EntityEventListener;
import io.github.adrianvic.nemesiseye.impl.v1_7_3.events.PlayerEventListener; import io.github.adrianvic.nemesiseye.impl.v1_7_3.events.PlayerEventListener;
import io.github.adrianvic.nemesiseye.policy.Action;
import io.github.adrianvic.nemesiseye.policy.NodeHandler;
import io.github.adrianvic.nemesiseye.policy.Policy; import io.github.adrianvic.nemesiseye.policy.Policy;
import io.github.adrianvic.nemesiseye.policy.PolicyParsers; import io.github.adrianvic.nemesiseye.policy.PolicyParsers;
import io.github.adrianvic.nemesiseye.reflection.Glimmer; import io.github.adrianvic.nemesiseye.reflection.Glimmer;
@ -19,6 +21,7 @@ import org.bukkit.plugin.java.JavaPlugin;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -67,6 +70,7 @@ public class b1_7_3 implements Glimmer {
pm = Nemesis.getInstance().getPluginManager(); pm = Nemesis.getInstance().getPluginManager();
pm.registerEvent(Event.Type.ENTITY_DAMAGE, new EntityEventListener(), Event.Priority.Normal, plugin); pm.registerEvent(Event.Type.ENTITY_DAMAGE, new EntityEventListener(), Event.Priority.Normal, plugin);
pm.registerEvent(Event.Type.BLOCK_BREAK, new BlockEventListener(), Event.Priority.Normal, plugin); pm.registerEvent(Event.Type.BLOCK_BREAK, new BlockEventListener(), Event.Priority.Normal, plugin);
pm.registerEvent(Event.Type.BLOCK_PLACE, new BlockEventListener(), Event.Priority.Normal, plugin);
pm.registerEvent(Event.Type.PLAYER_INTERACT, new PlayerEventListener(), Event.Priority.Normal, plugin); pm.registerEvent(Event.Type.PLAYER_INTERACT, new PlayerEventListener(), Event.Priority.Normal, plugin);
plugin.getCommand("eye").setExecutor(new Eye()); plugin.getCommand("eye").setExecutor(new Eye());
} }
@ -108,6 +112,11 @@ public class b1_7_3 implements Glimmer {
return null; return null;
} }
@Override
public Map<Action, NodeHandler> getExtraHandlers() {
return new HashMap<>();
}
@Override @Override
public void sendMessage(CommandSender commandSender, String text) { public void sendMessage(CommandSender commandSender, String text) {
String[] lines = text.split("\\r?\\n"); String[] lines = text.split("\\r?\\n");

View file

@ -1,16 +1,12 @@
package io.github.adrianvic.nemesiseye; package io.github.adrianvic.nemesiseye;
import com.destroystokyo.paper.event.entity.EndermanAttackPlayerEvent;
import io.github.adrianvic.nemesiseye.policy.Action; import io.github.adrianvic.nemesiseye.policy.Action;
import io.github.adrianvic.nemesiseye.reflection.Glimmer; import io.github.adrianvic.nemesiseye.reflection.Glimmer;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockFormEvent;
import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@ -82,28 +78,7 @@ public class Events {
} }
} }
public static void onInventoryClickEvent(InventoryClickEvent event) {
if (!g().isArmorEquipAttempt(event)) {
return;
}
HumanEntity entity = event.getWhoClicked();
if (!Validator.can(entity, Action.EQUIP, event)) {
event.setCancelled(true);
}
}
public static void onCreatureSpawnEvent(CreatureSpawnEvent event) { public static void onCreatureSpawnEvent(CreatureSpawnEvent event) {
event.setCancelled(!Validator.can(event.getEntity(), Action.SPAWN, event)); event.setCancelled(!Validator.can(event.getEntity(), Action.SPAWN, event));
} }
public static void onEndermanAttackPlayerEvent(EndermanAttackPlayerEvent event) {
event.setCancelled(!Validator.can(event.getEntity(), Action.ENDERMAN_ATTACK_PLAYER, event));
}
public static void onBlockFormEvent(BlockFormEvent event) {
boolean canceled = !Validator.can(event.getBlock().getWorld(), Action.FORMBLOCK, event);
event.setCancelled(canceled);
}
} }

View file

@ -0,0 +1,32 @@
package io.github.adrianvic.nemesiseye;
import com.destroystokyo.paper.event.entity.EndermanAttackPlayerEvent;
import io.github.adrianvic.nemesiseye.policy.Action;
import org.bukkit.entity.HumanEntity;
import org.bukkit.event.block.BlockFormEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
public class ModernEvents {
public static void onInventoryClickEvent(InventoryClickEvent event) {
if (!Nemesis.getInstance().getGlimmer().isArmorEquipAttempt(event)) {
return;
}
HumanEntity entity = event.getWhoClicked();
if (!Validator.can(entity, Action.EQUIP, event)) {
event.setCancelled(true);
}
}
public static void onEndermanAttackPlayerEvent(EndermanAttackPlayerEvent event) {
if (!Validator.can(event.getEntity(), Action.ENDERMAN_ATTACK_PLAYER, event)) {
event.setCancelled(true);
}
}
public static void onBlockFormEvent(BlockFormEvent event) {
boolean canceled = !Validator.can(event.getBlock().getWorld(), Action.FORMBLOCK, event);
event.setCancelled(canceled);
}
}

View file

@ -41,6 +41,8 @@ public class Validator {
} }
public static boolean can(World world, Action action, Event event) { public static boolean can(World world, Action action, Event event) {
boolean allowed = true;
for (GlobalPolicy policy : getGlobalPolicies()) { for (GlobalPolicy policy : getGlobalPolicies()) {
boolean matches = policy.matches(world, action, event); boolean matches = policy.matches(world, action, event);
@ -51,10 +53,11 @@ public class Validator {
case DENY: case DENY:
if (matches) return false; if (matches) return false;
break;
} }
} }
return true; return allowed;
} }
public static List<GlobalPolicy> getGlobalPolicies() { public static List<GlobalPolicy> getGlobalPolicies() {

View file

@ -1,5 +1,6 @@
package io.github.adrianvic.nemesiseye.policy; package io.github.adrianvic.nemesiseye.policy;
import io.github.adrianvic.nemesiseye.Nemesis;
import io.github.adrianvic.nemesiseye.policy.handlers.*; import io.github.adrianvic.nemesiseye.policy.handlers.*;
import io.github.adrianvic.nemesiseye.policy.handlers.Boolean; import io.github.adrianvic.nemesiseye.policy.handlers.Boolean;
@ -20,10 +21,15 @@ public class NodeHandlers {
handlers.put(Action.BREAK, new UseItem()); // TODO: implement place handler handlers.put(Action.BREAK, new UseItem()); // TODO: implement place handler
handlers.put(Action.INTERACTWITH, new InteractWith()); handlers.put(Action.INTERACTWITH, new InteractWith());
handlers.put(Action.ENDERMAN_ATTACK_PLAYER, new Boolean()); handlers.put(Action.ENDERMAN_ATTACK_PLAYER, new Boolean());
handlers.put(Action.FORMBLOCK, new FormBlock());
} }
public static NodeHandler get(Action type) { public static NodeHandler get(Action type) {
return handlers.get(type); NodeHandler handler = handlers.get(type);
if (handler == null) {
handler = Nemesis.getInstance().getGlimmer().getExtraHandlers().get(type);
}
return handler;
} }
} }

View file

@ -1,5 +1,7 @@
package io.github.adrianvic.nemesiseye.reflection; package io.github.adrianvic.nemesiseye.reflection;
import io.github.adrianvic.nemesiseye.policy.Action;
import io.github.adrianvic.nemesiseye.policy.NodeHandler;
import io.github.adrianvic.nemesiseye.policy.Policy; import io.github.adrianvic.nemesiseye.policy.Policy;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.World; import org.bukkit.World;
@ -39,6 +41,9 @@ public interface Glimmer {
boolean isArmorEquipAttempt(org.bukkit.event.Event event); boolean isArmorEquipAttempt(org.bukkit.event.Event event);
ItemStack getEquippedItem(org.bukkit.event.Event event); ItemStack getEquippedItem(org.bukkit.event.Event event);
// Handlers
Map<Action, NodeHandler> getExtraHandlers();
// Commands // Commands
void sendMessage(CommandSender commandSender, String text); void sendMessage(CommandSender commandSender, String text);

View file

@ -1,6 +1,7 @@
package io.github.adrianvic.nemesiseye.impl.v1_21; package io.github.adrianvic.nemesiseye.impl.v1_21;
import io.github.adrianvic.nemesiseye.Events; import io.github.adrianvic.nemesiseye.Events;
import io.github.adrianvic.nemesiseye.ModernEvents;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -9,7 +10,6 @@ import org.bukkit.event.block.BlockFormEvent;
import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntitySpawnEvent;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerMoveEvent;
@ -39,18 +39,18 @@ public class EventListener implements Listener {
public void onPlayerMoveEvent(PlayerMoveEvent event) { Events.onPlayerMoveEvent(event); } public void onPlayerMoveEvent(PlayerMoveEvent event) { Events.onPlayerMoveEvent(event); }
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onInventoryClickEvent(InventoryClickEvent event) { Events.onInventoryClickEvent(event); } public void onInventoryClickEvent(InventoryClickEvent event) { ModernEvents.onInventoryClickEvent(event); }
@EventHandler @EventHandler
public void onCreatureSpawnEvent(CreatureSpawnEvent event) { Events.onCreatureSpawnEvent(event); } public void onCreatureSpawnEvent(CreatureSpawnEvent event) { Events.onCreatureSpawnEvent(event); }
@EventHandler @EventHandler
public void onEndermanAttackPlayerEvent(com.destroystokyo.paper.event.entity.EndermanAttackPlayerEvent event) { public void onEndermanAttackPlayerEvent(com.destroystokyo.paper.event.entity.EndermanAttackPlayerEvent event) {
Events.onEndermanAttackPlayerEvent(event); ModernEvents.onEndermanAttackPlayerEvent(event);
} }
@EventHandler @EventHandler
public void onBlockFormEvent(BlockFormEvent event) { public void onBlockFormEvent(BlockFormEvent event) {
Events.onBlockFormEvent(event); ModernEvents.onBlockFormEvent(event);
} }
} }

View file

@ -3,8 +3,11 @@ package io.github.adrianvic.nemesiseye.impl.v1_21;
import io.github.adrianvic.nemesiseye.DataShifter; import io.github.adrianvic.nemesiseye.DataShifter;
import io.github.adrianvic.nemesiseye.Nemesis; import io.github.adrianvic.nemesiseye.Nemesis;
import io.github.adrianvic.nemesiseye.impl.v1_21.commands.Eye; import io.github.adrianvic.nemesiseye.impl.v1_21.commands.Eye;
import io.github.adrianvic.nemesiseye.policy.Action;
import io.github.adrianvic.nemesiseye.policy.NodeHandler;
import io.github.adrianvic.nemesiseye.policy.Policy; import io.github.adrianvic.nemesiseye.policy.Policy;
import io.github.adrianvic.nemesiseye.policy.PolicyParsers; import io.github.adrianvic.nemesiseye.policy.PolicyParsers;
import io.github.adrianvic.nemesiseye.policy.handlers.FormBlock;
import io.github.adrianvic.nemesiseye.reflection.Glimmer; import io.github.adrianvic.nemesiseye.reflection.Glimmer;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.World; import org.bukkit.World;
@ -17,6 +20,7 @@ import org.bukkit.plugin.PluginManager;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -147,6 +151,13 @@ public class r1_21 implements Glimmer {
return null; return null;
} }
@Override
public Map<Action, NodeHandler> getExtraHandlers() {
Map<Action, NodeHandler> handlers = new HashMap<>();
handlers.put(Action.FORMBLOCK, new FormBlock());
return handlers;
}
@Override @Override
public void sendMessage(CommandSender commandSender, String text) { public void sendMessage(CommandSender commandSender, String text) {
commandSender.sendMessage(text); commandSender.sendMessage(text);
@ -182,6 +193,7 @@ public class r1_21 implements Glimmer {
return false; return false;
} }
@Override
public boolean hasAnyEnchantment(ItemStack item) { public boolean hasAnyEnchantment(ItemStack item) {
return !(item.getItemMeta().getEnchants().isEmpty()); return !(item.getItemMeta().getEnchants().isEmpty());
} }