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.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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
@ -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;
|
||||||
|
|
@ -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;
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue