Move isArmor to reflection implementations and refactor NodeHandler replace use of safeMatches(String expression, String against) usage with safeMatches(List<String> expressions, String against).

This commit is contained in:
天クマ 2026-05-20 15:54:14 -03:00
commit b044052b6d
10 changed files with 58 additions and 44 deletions

View file

@ -2,9 +2,13 @@ package io.github.adrianvic.nemesiseye.impl;
import io.github.adrianvic.nemesiseye.Nemesis; import io.github.adrianvic.nemesiseye.Nemesis;
import io.github.adrianvic.nemesiseye.impl.commands.Eye; import io.github.adrianvic.nemesiseye.impl.commands.Eye;
import io.github.adrianvic.nemesiseye.impl.events.BlockEventListener;
import io.github.adrianvic.nemesiseye.impl.events.EntityEventListener;
import io.github.adrianvic.nemesiseye.impl.events.PlayerEventListener;
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;
import org.bukkit.Material;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.HumanEntity; import org.bukkit.entity.HumanEntity;
@ -99,4 +103,18 @@ public class b1_7_3 implements Glimmer {
public boolean hasAnyEnchantment(ItemStack itemStack) { public boolean hasAnyEnchantment(ItemStack itemStack) {
return false; return false;
} }
@Override
public boolean isArmor(ItemStack item) {
if (item == null || item.getType() == Material.AIR) {
return false;
}
String name = item.getType().name();
return name.endsWith("_HELMET")
|| name.endsWith("_CHESTPLATE")
|| name.endsWith("_LEGGINGS")
|| name.endsWith("_BOOTS");
}
} }

View file

@ -1,4 +1,4 @@
package io.github.adrianvic.nemesiseye.impl; package io.github.adrianvic.nemesiseye.impl.events;
import io.github.adrianvic.nemesiseye.Events; import io.github.adrianvic.nemesiseye.Events;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBreakEvent;

View file

@ -1,4 +1,4 @@
package io.github.adrianvic.nemesiseye.impl; package io.github.adrianvic.nemesiseye.impl.events;
import io.github.adrianvic.nemesiseye.Events; import io.github.adrianvic.nemesiseye.Events;
import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent;

View file

@ -1,4 +1,4 @@
package io.github.adrianvic.nemesiseye.impl; package io.github.adrianvic.nemesiseye.impl.events;
import io.github.adrianvic.nemesiseye.Events; import io.github.adrianvic.nemesiseye.Events;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;

View file

@ -9,18 +9,18 @@ import org.bukkit.entity.LivingEntity;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.BlockPlaceEvent;
import java.util.List;
public class BePlaced implements NodeHandler { public class BePlaced implements NodeHandler {
@Override @Override
public boolean check(LivingEntity entity, PolicyNode node, Action action, Event event) { public boolean check(LivingEntity entity, PolicyNode node, Action action, Event event) {
if (event instanceof BlockPlaceEvent bpe) { if (event instanceof BlockPlaceEvent bpe) {
String type = bpe.getBlock().getType().toString(); String type = bpe.getBlock().getType().toString();
List<String> parsedValue = DataShifter.parseValueToStringList(node.values());
for (String s : DataShifter.parseValueToStringList(node.values())) { return DataShifter.safeMatches(parsedValue, type);
if (DataShifter.safeMatches(s, type)) {
return true;
}
}
} }
return false; return false;
} }
} }

View file

@ -2,10 +2,11 @@ package io.github.adrianvic.nemesiseye.policy.handlers;
import com.destroystokyo.paper.event.player.PlayerArmorChangeEvent; import com.destroystokyo.paper.event.player.PlayerArmorChangeEvent;
import io.github.adrianvic.nemesiseye.DataShifter; import io.github.adrianvic.nemesiseye.DataShifter;
import io.github.adrianvic.nemesiseye.Nemesis;
import io.github.adrianvic.nemesiseye.policy.Action; import io.github.adrianvic.nemesiseye.policy.Action;
import io.github.adrianvic.nemesiseye.policy.NodeHandler; import io.github.adrianvic.nemesiseye.policy.NodeHandler;
import io.github.adrianvic.nemesiseye.policy.PolicyNode; import io.github.adrianvic.nemesiseye.policy.PolicyNode;
import org.bukkit.entity.HumanEntity; import io.github.adrianvic.nemesiseye.reflection.Glimmer;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Event; import org.bukkit.event.Event;
@ -14,72 +15,53 @@ import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.util.List;
public class Equip implements NodeHandler { public class Equip implements NodeHandler {
private final Glimmer glim = Nemesis.getInstance().getGlimmer();
@Override @Override
public boolean check(LivingEntity entity, PolicyNode node, Action action, Event event) { public boolean check(LivingEntity entity, PolicyNode node, Action action, Event event) {
ItemStack item = null; ItemStack item = null;
if (event instanceof PlayerArmorChangeEvent e) { if (event instanceof PlayerArmorChangeEvent e) {
// Right click equip, dispenser equip, etc...
item = e.getNewItem(); item = e.getNewItem();
} }
else if (event instanceof InventoryClickEvent e) { else if (event instanceof InventoryClickEvent e) {
InventoryType.SlotType slotType = e.getSlotType(); InventoryType.SlotType slotType = e.getSlotType();
// Number key swap into armor slot if (e.getClick() == ClickType.NUMBER_KEY // hotbar key swap
if (e.getClick() == ClickType.NUMBER_KEY
&& slotType == InventoryType.SlotType.ARMOR && slotType == InventoryType.SlotType.ARMOR
&& entity instanceof Player player) { && entity instanceof Player player) {
item = player.getInventory().getItem(e.getHotbarButton()); item = player.getInventory().getItem(e.getHotbarButton());
} }
// Shift click armor from inventory
else if (e.isShiftClick()) { else if (e.isShiftClick()) {
ItemStack current = e.getCurrentItem(); ItemStack current = e.getCurrentItem();
if (isArmor(current)) { if (glim.isArmor(current)) {
item = current; item = current;
} }
} }
// Cursor click onto armor slot // regular click
else if (slotType == InventoryType.SlotType.ARMOR) { else if (slotType == InventoryType.SlotType.ARMOR) {
ItemStack cursor = e.getCursor(); ItemStack cursor = e.getCursor();
if (isArmor(cursor)) { if (glim.isArmor(cursor)) {
item = cursor; item = cursor;
} }
} }
} }
if (!isArmor(item)) { if (!glim.isArmor(item)) {
return false; return false;
} }
String type = item.getType().name(); String type = item.getType().name();
List<String> parsedValue = DataShifter.parseValueToStringList(node.values());
for (String s : DataShifter.parseValueToStringList(node.values())) { return DataShifter.safeMatches(parsedValue, type);
if (DataShifter.safeMatches(s, type)) {
return true;
}
}
return false;
}
private boolean isArmor(ItemStack item) {
if (item == null || item.getType().isAir()) {
return false;
}
String name = item.getType().name();
return name.endsWith("_HELMET")
|| name.endsWith("_CHESTPLATE")
|| name.endsWith("_LEGGINGS")
|| name.endsWith("_BOOTS")
|| item.getType() == org.bukkit.Material.ELYTRA;
} }
} }

View file

@ -3,7 +3,6 @@ package io.github.adrianvic.nemesiseye.policy.handlers;
import io.github.adrianvic.nemesiseye.policy.Action; import io.github.adrianvic.nemesiseye.policy.Action;
import io.github.adrianvic.nemesiseye.policy.NodeHandler; import io.github.adrianvic.nemesiseye.policy.NodeHandler;
import io.github.adrianvic.nemesiseye.policy.PolicyNode; import io.github.adrianvic.nemesiseye.policy.PolicyNode;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.event.Event; import org.bukkit.event.Event;

View file

@ -10,6 +10,8 @@ import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import java.util.List;
public class UseItem implements NodeHandler { public class UseItem implements NodeHandler {
private final Glimmer glim = Nemesis.getInstance().getGlimmer(); private final Glimmer glim = Nemesis.getInstance().getGlimmer();
@ -18,12 +20,9 @@ public class UseItem implements NodeHandler {
public boolean check(LivingEntity entity, PolicyNode node, Action action, Event event) { public boolean check(LivingEntity entity, PolicyNode node, Action action, Event event) {
if (entity instanceof HumanEntity e) { if (entity instanceof HumanEntity e) {
String type = glim.getItemInMainHandHumanEntity(e).getType().toString(); String type = glim.getItemInMainHandHumanEntity(e).getType().toString();
List<String> parsedValue = DataShifter.parseValueToStringList(node.values());
for (String s : DataShifter.parseValueToStringList(node.values())) { return DataShifter.safeMatches(parsedValue, type);
if (DataShifter.safeMatches(s, type)) {
return true;
}
}
} }
return false; return false;

View file

@ -26,6 +26,7 @@ public interface Glimmer {
boolean hasItemMeta(ItemStack item); boolean hasItemMeta(ItemStack item);
boolean hasEnchantment(ItemStack item, Map<String, String> valuesmap); boolean hasEnchantment(ItemStack item, Map<String, String> valuesmap);
boolean hasAnyEnchantment(ItemStack itemStack); boolean hasAnyEnchantment(ItemStack itemStack);
boolean isArmor(ItemStack item);
ItemStack getItemInMainHandHumanEntity(HumanEntity entity); ItemStack getItemInMainHandHumanEntity(HumanEntity entity);
// Commands // Commands

View file

@ -105,4 +105,19 @@ public class r1_21 implements Glimmer {
public boolean hasAnyEnchantment(ItemStack item) { public boolean hasAnyEnchantment(ItemStack item) {
return !(item.getItemMeta().getEnchants().isEmpty()); return !(item.getItemMeta().getEnchants().isEmpty());
} }
@Override
public boolean isArmor(ItemStack item) {
if (item == null || item.getType().isAir()) {
return false;
}
String name = item.getType().name();
return name.endsWith("_HELMET")
|| name.endsWith("_CHESTPLATE")
|| name.endsWith("_LEGGINGS")
|| name.endsWith("_BOOTS")
|| item.getType() == org.bukkit.Material.ELYTRA;
}
} }