From c0142b3e8f4560a69dd2bab65bec77aa43d5e605 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Sun, 22 Dec 2024 16:07:33 +0800 Subject: [PATCH] liquid depth condition --- .../requirement/BukkitRequirementManager.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/requirement/BukkitRequirementManager.java b/core/src/main/java/net/momirealms/customfishing/bukkit/requirement/BukkitRequirementManager.java index 76f746eb..455973f3 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/requirement/BukkitRequirementManager.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/requirement/BukkitRequirementManager.java @@ -201,6 +201,7 @@ public class BukkitRequirementManager implements RequirementManager { this.registerSneakRequirement(); this.registerGameModeRequirement(); this.registerEquipmentRequirement(); + this.registerLiquidDepthRequirement(); } private void registerImpossibleRequirement() { @@ -722,6 +723,38 @@ public class BukkitRequirementManager implements RequirementManager { }, "ice-fishing"); } + private void registerLiquidDepthRequirement() { + registerRequirement((args, actions, advanced) -> { + String depthRange = (String) args; + String[] split = depthRange.split("~"); + if (split.length != 2) { + plugin.getPluginLogger().warn("Invalid value found(" + depthRange + "). `liquid-depth` requires a range in the format 'min~max' (e.g., 1~10)."); + return Requirement.empty(); + } + int min; + int max; + try { + min = Integer.parseInt(split[0]); + max = Integer.parseInt(split[0]); + } catch (NumberFormatException e) { + plugin.getPluginLogger().warn("Invalid number format for range: " + depthRange, e); + return Requirement.empty(); + } + return context -> { + Location location = requireNonNull(context.arg(ContextKeys.OTHER_LOCATION)); + Location startLocation = location.getBlock().isLiquid() ? location.clone() : location.clone().subtract(0, 1, 0); + int depth = 0; + while (startLocation.getBlock().isLiquid()) { + startLocation.subtract(0, 1, 0); + depth++; + } + if (depth >= min && depth <= max) return true; + if (advanced) ActionManager.trigger(context, actions); + return false; + }; + }, "liquid-depth"); + } + private void registerLevelRequirement() { registerRequirement((args, actions, runActions) -> { MathValue value = MathValue.auto(args);