diff --git a/api/src/main/java/net/momirealms/customcrops/api/requirement/AbstractRequirementManager.java b/api/src/main/java/net/momirealms/customcrops/api/requirement/AbstractRequirementManager.java index 9fdf596..705c2a0 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/requirement/AbstractRequirementManager.java +++ b/api/src/main/java/net/momirealms/customcrops/api/requirement/AbstractRequirementManager.java @@ -542,7 +542,7 @@ public abstract class AbstractRequirementManager implements RequirementManage plugin.getPluginLogger().warn("Invalid value type: " + args.getClass().getSimpleName() + " found at == requirement which is expected be `Section`"); return Requirement.empty(); } - }, "=="); + }, "==", "="); registerRequirement((args, actions, runActions) -> { if (args instanceof Section section) { MathValue v1 = MathValue.auto(section.get("value1")); diff --git a/jitpack.yml b/jitpack.yml index fbd76b7..a8f900b 100644 --- a/jitpack.yml +++ b/jitpack.yml @@ -1,4 +1,4 @@ before_install: - - sdk install java 17.0.9-oracle - - sdk install java 21.0.2-oracle - - sdk use java 17.0.9-oracle \ No newline at end of file + - sdk install java 17.0.11-oracle + - sdk install java 21.0.3-oracle + - sdk use java 17.0.11-oracle \ No newline at end of file diff --git a/plugin/src/main/java/net/momirealms/customcrops/bukkit/requirement/PlayerRequirementManager.java b/plugin/src/main/java/net/momirealms/customcrops/bukkit/requirement/PlayerRequirementManager.java index 384c581..baf9ee2 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/bukkit/requirement/PlayerRequirementManager.java +++ b/plugin/src/main/java/net/momirealms/customcrops/bukkit/requirement/PlayerRequirementManager.java @@ -103,6 +103,47 @@ public class PlayerRequirementManager extends AbstractRequirementManager return Requirement.empty(); } }, "item-in-hand"); + registerRequirement((args, actions, runActions) -> { + if (args instanceof Section section) { + String hand = section.getString("hand","main"); + int mode; + if (hand.equalsIgnoreCase("main")) { + mode = 1; + } else if (hand.equalsIgnoreCase("off")) { + mode = 2; + } else if (hand.equalsIgnoreCase("other")) { + mode = 3; + } else { + mode = 0; + plugin.getPluginLogger().warn("Invalid hand argument: " + hand + " which is expected to be main/off/other"); + return Requirement.empty(); + } + int amount = section.getInt("amount", 0); + List items = ListUtils.toList(section.get("material")); + return context -> { + Player player = context.holder(); + if (player == null) return true; + EquipmentSlot slot = context.arg(ContextKeys.SLOT); + ItemStack itemStack; + if (slot == null) { + itemStack = mode == 1 ? player.getInventory().getItemInMainHand() : player.getInventory().getItemInOffHand(); + } else { + if (mode == 3) { + itemStack = player.getInventory().getItem(slot == EquipmentSlot.HAND ? EquipmentSlot.OFF_HAND : EquipmentSlot.HAND); + } else { + itemStack = player.getInventory().getItem(slot); + } + } + String id = itemStack.getType().name(); + if (items.contains(id) && itemStack.getAmount() >= amount) return true; + if (runActions) ActionManager.trigger(context, actions); + return false; + }; + } else { + plugin.getPluginLogger().warn("Invalid value type: " + args.getClass().getSimpleName() + " found at material-in-hand requirement which is expected be `Section`"); + return Requirement.empty(); + } + }, "material-in-hand"); } private void registerPluginLevelRequirement() {