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:
parent
af6ac27960
commit
b044052b6d
10 changed files with 58 additions and 44 deletions
|
|
@ -2,9 +2,13 @@ package io.github.adrianvic.nemesiseye.impl;
|
|||
|
||||
import io.github.adrianvic.nemesiseye.Nemesis;
|
||||
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.PolicyParsers;
|
||||
import io.github.adrianvic.nemesiseye.reflection.Glimmer;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
|
|
@ -99,4 +103,18 @@ public class b1_7_3 implements Glimmer {
|
|||
public boolean hasAnyEnchantment(ItemStack itemStack) {
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package io.github.adrianvic.nemesiseye.impl;
|
||||
package io.github.adrianvic.nemesiseye.impl.events;
|
||||
|
||||
import io.github.adrianvic.nemesiseye.Events;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package io.github.adrianvic.nemesiseye.impl;
|
||||
package io.github.adrianvic.nemesiseye.impl.events;
|
||||
|
||||
import io.github.adrianvic.nemesiseye.Events;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package io.github.adrianvic.nemesiseye.impl;
|
||||
package io.github.adrianvic.nemesiseye.impl.events;
|
||||
|
||||
import io.github.adrianvic.nemesiseye.Events;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
|
|
@ -9,18 +9,18 @@ import org.bukkit.entity.LivingEntity;
|
|||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class BePlaced implements NodeHandler {
|
||||
@Override
|
||||
public boolean check(LivingEntity entity, PolicyNode node, Action action, Event event) {
|
||||
if (event instanceof BlockPlaceEvent bpe) {
|
||||
String type = bpe.getBlock().getType().toString();
|
||||
List<String> parsedValue = DataShifter.parseValueToStringList(node.values());
|
||||
|
||||
for (String s : DataShifter.parseValueToStringList(node.values())) {
|
||||
if (DataShifter.safeMatches(s, type)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return DataShifter.safeMatches(parsedValue, type);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,10 +2,11 @@ package io.github.adrianvic.nemesiseye.policy.handlers;
|
|||
|
||||
import com.destroystokyo.paper.event.player.PlayerArmorChangeEvent;
|
||||
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.NodeHandler;
|
||||
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.Player;
|
||||
import org.bukkit.event.Event;
|
||||
|
|
@ -14,72 +15,53 @@ import org.bukkit.event.inventory.InventoryClickEvent;
|
|||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class Equip implements NodeHandler {
|
||||
private final Glimmer glim = Nemesis.getInstance().getGlimmer();
|
||||
|
||||
@Override
|
||||
public boolean check(LivingEntity entity, PolicyNode node, Action action, Event event) {
|
||||
ItemStack item = null;
|
||||
|
||||
if (event instanceof PlayerArmorChangeEvent e) {
|
||||
// Right click equip, dispenser equip, etc...
|
||||
item = e.getNewItem();
|
||||
}
|
||||
|
||||
else if (event instanceof InventoryClickEvent e) {
|
||||
InventoryType.SlotType slotType = e.getSlotType();
|
||||
|
||||
// Number key swap into armor slot
|
||||
if (e.getClick() == ClickType.NUMBER_KEY
|
||||
if (e.getClick() == ClickType.NUMBER_KEY // hotbar key swap
|
||||
&& slotType == InventoryType.SlotType.ARMOR
|
||||
&& entity instanceof Player player) {
|
||||
item = player.getInventory().getItem(e.getHotbarButton());
|
||||
}
|
||||
|
||||
// Shift click armor from inventory
|
||||
else if (e.isShiftClick()) {
|
||||
ItemStack current = e.getCurrentItem();
|
||||
|
||||
if (isArmor(current)) {
|
||||
if (glim.isArmor(current)) {
|
||||
item = current;
|
||||
}
|
||||
}
|
||||
|
||||
// Cursor click onto armor slot
|
||||
// regular click
|
||||
else if (slotType == InventoryType.SlotType.ARMOR) {
|
||||
ItemStack cursor = e.getCursor();
|
||||
|
||||
if (isArmor(cursor)) {
|
||||
if (glim.isArmor(cursor)) {
|
||||
item = cursor;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!isArmor(item)) {
|
||||
if (!glim.isArmor(item)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
String type = item.getType().name();
|
||||
List<String> parsedValue = DataShifter.parseValueToStringList(node.values());
|
||||
|
||||
for (String s : DataShifter.parseValueToStringList(node.values())) {
|
||||
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;
|
||||
return DataShifter.safeMatches(parsedValue, type);
|
||||
}
|
||||
}
|
||||
|
|
@ -3,7 +3,6 @@ package io.github.adrianvic.nemesiseye.policy.handlers;
|
|||
import io.github.adrianvic.nemesiseye.policy.Action;
|
||||
import io.github.adrianvic.nemesiseye.policy.NodeHandler;
|
||||
import io.github.adrianvic.nemesiseye.policy.PolicyNode;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.event.Event;
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@ import org.bukkit.entity.HumanEntity;
|
|||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.event.Event;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class UseItem implements NodeHandler {
|
||||
|
||||
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) {
|
||||
if (entity instanceof HumanEntity e) {
|
||||
String type = glim.getItemInMainHandHumanEntity(e).getType().toString();
|
||||
List<String> parsedValue = DataShifter.parseValueToStringList(node.values());
|
||||
|
||||
for (String s : DataShifter.parseValueToStringList(node.values())) {
|
||||
if (DataShifter.safeMatches(s, type)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return DataShifter.safeMatches(parsedValue, type);
|
||||
}
|
||||
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ public interface Glimmer {
|
|||
boolean hasItemMeta(ItemStack item);
|
||||
boolean hasEnchantment(ItemStack item, Map<String, String> valuesmap);
|
||||
boolean hasAnyEnchantment(ItemStack itemStack);
|
||||
boolean isArmor(ItemStack item);
|
||||
ItemStack getItemInMainHandHumanEntity(HumanEntity entity);
|
||||
|
||||
// Commands
|
||||
|
|
|
|||
|
|
@ -105,4 +105,19 @@ public class r1_21 implements Glimmer {
|
|||
public boolean hasAnyEnchantment(ItemStack item) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue