diff --git a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/b1_7_3.java b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/b1_7_3.java index 0129a81..97ad260 100644 --- a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/b1_7_3.java +++ b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/b1_7_3.java @@ -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.EntityEventListener; 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.PolicyParsers; import io.github.adrianvic.nemesiseye.reflection.Glimmer; @@ -19,6 +21,7 @@ import org.bukkit.plugin.java.JavaPlugin; import java.io.File; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -67,6 +70,7 @@ public class b1_7_3 implements Glimmer { pm = Nemesis.getInstance().getPluginManager(); 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_PLACE, new BlockEventListener(), Event.Priority.Normal, plugin); pm.registerEvent(Event.Type.PLAYER_INTERACT, new PlayerEventListener(), Event.Priority.Normal, plugin); plugin.getCommand("eye").setExecutor(new Eye()); } @@ -108,6 +112,11 @@ public class b1_7_3 implements Glimmer { return null; } + @Override + public Map getExtraHandlers() { + return new HashMap<>(); + } + @Override public void sendMessage(CommandSender commandSender, String text) { String[] lines = text.split("\\r?\\n"); diff --git a/src/main/java/io/github/adrianvic/nemesiseye/Events.java b/src/main/java/io/github/adrianvic/nemesiseye/Events.java index bb857e2..c452cd6 100644 --- a/src/main/java/io/github/adrianvic/nemesiseye/Events.java +++ b/src/main/java/io/github/adrianvic/nemesiseye/Events.java @@ -1,16 +1,12 @@ package io.github.adrianvic.nemesiseye; -import com.destroystokyo.paper.event.entity.EndermanAttackPlayerEvent; import io.github.adrianvic.nemesiseye.policy.Action; import io.github.adrianvic.nemesiseye.reflection.Glimmer; -import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockFormEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerMoveEvent; 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) { 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); - } } \ No newline at end of file diff --git a/src/main/java/io/github/adrianvic/nemesiseye/ModernEvents.java b/src/main/java/io/github/adrianvic/nemesiseye/ModernEvents.java new file mode 100644 index 0000000..7208703 --- /dev/null +++ b/src/main/java/io/github/adrianvic/nemesiseye/ModernEvents.java @@ -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); + } +} diff --git a/src/main/java/io/github/adrianvic/nemesiseye/Validator.java b/src/main/java/io/github/adrianvic/nemesiseye/Validator.java index 1e3e020..41c1531 100644 --- a/src/main/java/io/github/adrianvic/nemesiseye/Validator.java +++ b/src/main/java/io/github/adrianvic/nemesiseye/Validator.java @@ -41,6 +41,8 @@ public class Validator { } public static boolean can(World world, Action action, Event event) { + boolean allowed = true; + for (GlobalPolicy policy : getGlobalPolicies()) { boolean matches = policy.matches(world, action, event); @@ -51,10 +53,11 @@ public class Validator { case DENY: if (matches) return false; + break; } } - return true; + return allowed; } public static List getGlobalPolicies() { diff --git a/src/main/java/io/github/adrianvic/nemesiseye/policy/NodeHandlers.java b/src/main/java/io/github/adrianvic/nemesiseye/policy/NodeHandlers.java index 77db729..bef30f1 100644 --- a/src/main/java/io/github/adrianvic/nemesiseye/policy/NodeHandlers.java +++ b/src/main/java/io/github/adrianvic/nemesiseye/policy/NodeHandlers.java @@ -1,5 +1,6 @@ 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.Boolean; @@ -8,7 +9,7 @@ import java.util.Map; public class NodeHandlers { private static final Map handlers = new HashMap<>(); - + static { handlers.put(Action.HIT, new UseItem()); handlers.put(Action.PLACE, new BePlaced()); @@ -20,10 +21,15 @@ public class NodeHandlers { handlers.put(Action.BREAK, new UseItem()); // TODO: implement place handler handlers.put(Action.INTERACTWITH, new InteractWith()); handlers.put(Action.ENDERMAN_ATTACK_PLAYER, new Boolean()); - handlers.put(Action.FORMBLOCK, new FormBlock()); } - + 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; } } diff --git a/src/main/java/io/github/adrianvic/nemesiseye/reflection/Glimmer.java b/src/main/java/io/github/adrianvic/nemesiseye/reflection/Glimmer.java index ccc69b4..a8ba767 100644 --- a/src/main/java/io/github/adrianvic/nemesiseye/reflection/Glimmer.java +++ b/src/main/java/io/github/adrianvic/nemesiseye/reflection/Glimmer.java @@ -1,5 +1,7 @@ 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 org.bukkit.Location; import org.bukkit.World; @@ -39,6 +41,9 @@ public interface Glimmer { boolean isArmorEquipAttempt(org.bukkit.event.Event event); ItemStack getEquippedItem(org.bukkit.event.Event event); + // Handlers + Map getExtraHandlers(); + // Commands void sendMessage(CommandSender commandSender, String text); diff --git a/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/v1_21/EventListener.java b/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/v1_21/EventListener.java index 7718061..a096dd1 100644 --- a/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/v1_21/EventListener.java +++ b/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/v1_21/EventListener.java @@ -1,6 +1,7 @@ package io.github.adrianvic.nemesiseye.impl.v1_21; import io.github.adrianvic.nemesiseye.Events; +import io.github.adrianvic.nemesiseye.ModernEvents; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; 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.entity.CreatureSpawnEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntitySpawnEvent; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerMoveEvent; @@ -39,18 +39,18 @@ public class EventListener implements Listener { public void onPlayerMoveEvent(PlayerMoveEvent event) { Events.onPlayerMoveEvent(event); } @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) - public void onInventoryClickEvent(InventoryClickEvent event) { Events.onInventoryClickEvent(event); } + public void onInventoryClickEvent(InventoryClickEvent event) { ModernEvents.onInventoryClickEvent(event); } @EventHandler public void onCreatureSpawnEvent(CreatureSpawnEvent event) { Events.onCreatureSpawnEvent(event); } @EventHandler public void onEndermanAttackPlayerEvent(com.destroystokyo.paper.event.entity.EndermanAttackPlayerEvent event) { - Events.onEndermanAttackPlayerEvent(event); + ModernEvents.onEndermanAttackPlayerEvent(event); } @EventHandler public void onBlockFormEvent(BlockFormEvent event) { - Events.onBlockFormEvent(event); + ModernEvents.onBlockFormEvent(event); } } \ No newline at end of file diff --git a/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/v1_21/r1_21.java b/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/v1_21/r1_21.java index f135aa9..edd5a60 100644 --- a/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/v1_21/r1_21.java +++ b/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/v1_21/r1_21.java @@ -3,8 +3,11 @@ package io.github.adrianvic.nemesiseye.impl.v1_21; import io.github.adrianvic.nemesiseye.DataShifter; import io.github.adrianvic.nemesiseye.Nemesis; 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.PolicyParsers; +import io.github.adrianvic.nemesiseye.policy.handlers.FormBlock; import io.github.adrianvic.nemesiseye.reflection.Glimmer; import org.bukkit.Bukkit; import org.bukkit.World; @@ -17,6 +20,7 @@ import org.bukkit.plugin.PluginManager; import java.io.File; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -147,6 +151,13 @@ public class r1_21 implements Glimmer { return null; } + @Override + public Map getExtraHandlers() { + Map handlers = new HashMap<>(); + handlers.put(Action.FORMBLOCK, new FormBlock()); + return handlers; + } + @Override public void sendMessage(CommandSender commandSender, String text) { commandSender.sendMessage(text); @@ -182,6 +193,7 @@ public class r1_21 implements Glimmer { return false; } + @Override public boolean hasAnyEnchantment(ItemStack item) { return !(item.getItemMeta().getEnchants().isEmpty()); }