diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/context/ContextKeys.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/context/ContextKeys.java index 9b670137..2cb20919 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/context/ContextKeys.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/context/ContextKeys.java @@ -96,6 +96,7 @@ public class ContextKeys { public static final ContextKeys BASE = of("base", Double.class); public static final ContextKeys LOOT_ORDER = of("loot_order", Integer.class); public static final ContextKeys EFFECT = of("effect", Effect.class); + public static final ContextKeys FIRST_CAPTURE = of("first_capture", Boolean.class); private final String key; private final Class type; diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/CustomFishingHook.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/CustomFishingHook.java index a7bbcc46..21b034da 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/CustomFishingHook.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/CustomFishingHook.java @@ -623,6 +623,10 @@ public class CustomFishingHook { if (!nextLoot.disableStats()) { plugin.getStorageManager().getOnlineUser(player.getUniqueId()).ifPresent( userData -> { + int amount = userData.statistics().getAmount(nextLoot.statisticKey().amountKey()); + if (amount == 0) { + context.arg(ContextKeys.FIRST_CAPTURE, true); + } Pair result = userData.statistics().addAmount(nextLoot.statisticKey().amountKey(), 1); context.arg(ContextKeys.TOTAL_AMOUNT, userData.statistics().getAmount(nextLoot.statisticKey().amountKey())); Optional.ofNullable(context.arg(ContextKeys.SIZE)).ifPresentOrElse(size -> { diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/hook/VanillaMechanic.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/hook/VanillaMechanic.java index 0aa8d3e0..2fbf0bbe 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/hook/VanillaMechanic.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/hook/VanillaMechanic.java @@ -113,7 +113,7 @@ public class VanillaMechanic implements HookMechanic { if (player.isOnline() && hook.isValid()) { AntiAutoFishing.prevent(player, hook); } - }, RandomUtils.generateRandomInt(20, SparrowHeart.getInstance().getWaitTime(hook) + lureTime - 5), hook.getLocation()); + }, RandomUtils.generateRandomInt(20, Math.max(20, SparrowHeart.getInstance().getWaitTime(hook) + lureTime - 5)), hook.getLocation()); } }, hook.getLocation()); } diff --git a/build.gradle.kts b/build.gradle.kts index bf720d9e..b6e2ae27 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -32,10 +32,10 @@ subprojects { } } -fun versionBanner() = project.providers.exec { +fun versionBanner(): String = project.providers.exec { commandLine("git", "rev-parse", "--short=8", "HEAD") }.standardOutput.asText.map { it.trim() }.getOrElse("Unknown") -fun builder() = project.providers.exec { +fun builder(): String = project.providers.exec { commandLine("git", "config", "user.name") }.standardOutput.asText.map { it.trim() }.getOrElse("Unknown") \ No newline at end of file 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 f91d9e50..6152b055 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 @@ -166,6 +166,7 @@ public class BukkitRequirementManager implements RequirementManager { } private void registerBuiltInRequirements() { + this.registerFirstCaptureRequirement(); this.registerTimeRequirement(); this.registerYRequirement(); this.registerInWaterRequirement(); @@ -458,6 +459,19 @@ public class BukkitRequirementManager implements RequirementManager { }, "&&"); } + private void registerFirstCaptureRequirement() { + registerRequirement((args, actions, runActions) -> { + boolean required = (boolean) args; + return context -> { + Boolean arg = context.arg(ContextKeys.FIRST_CAPTURE); + boolean first = arg != null && arg; + if (first == required) return true; + if (runActions) ActionManager.trigger(context, actions); + return false; + }; + }, "first-capture"); + } + private void registerInWaterRequirement() { registerRequirement((args, actions, runActions) -> { boolean inWater = (boolean) args;