From 41fbd8c37414b7d7eda882b68454d04e2b50d0b3 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Thu, 21 Nov 2024 02:14:14 +0800 Subject: [PATCH] Added expression support for chance --- .../api/action/AbstractActionManager.java | 5 +- .../customcrops/api/action/ActionFactory.java | 4 +- .../action/builtin/AbstractBuiltInAction.java | 10 ++-- .../action/builtin/ActionActionbarNearby.java | 2 +- .../api/action/builtin/ActionBreak.java | 3 +- .../api/action/builtin/ActionBroadcast.java | 3 +- .../api/action/builtin/ActionChain.java | 3 +- .../api/action/builtin/ActionCommand.java | 3 +- .../action/builtin/ActionCommandNearby.java | 2 +- .../api/action/builtin/ActionConditional.java | 3 +- .../api/action/builtin/ActionDelay.java | 3 +- .../api/action/builtin/ActionDropItem.java | 3 +- .../action/builtin/ActionDropItemLegacy.java | 7 +-- .../api/action/builtin/ActionFakeItem.java | 2 +- .../api/action/builtin/ActionHologram.java | 2 +- .../action/builtin/ActionMessageNearby.java | 2 +- .../api/action/builtin/ActionParticle.java | 3 +- .../api/action/builtin/ActionPlant.java | 3 +- .../api/action/builtin/ActionPriority.java | 3 +- .../action/builtin/ActionQualityCrops.java | 3 +- .../action/builtin/ActionRandomCommand.java | 3 +- .../api/action/builtin/ActionSpawnEntity.java | 3 +- .../api/action/builtin/ActionTimer.java | 3 +- .../api/action/builtin/ActionTitleNearby.java | 3 +- .../api/action/builtin/ActionVariation.java | 3 +- gradle.properties | 2 +- .../bukkit/action/PlayerActionManager.java | 48 +++++++++---------- 27 files changed, 78 insertions(+), 56 deletions(-) diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/AbstractActionManager.java b/api/src/main/java/net/momirealms/customcrops/api/action/AbstractActionManager.java index bc19f0a..53af24d 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/AbstractActionManager.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/AbstractActionManager.java @@ -20,6 +20,7 @@ package net.momirealms.customcrops.api.action; import dev.dejvokep.boostedyaml.block.implementation.Section; import net.momirealms.customcrops.api.BukkitCustomCropsPlugin; import net.momirealms.customcrops.api.action.builtin.*; +import net.momirealms.customcrops.api.misc.value.MathValue; import net.momirealms.customcrops.common.util.ClassUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -96,7 +97,7 @@ public abstract class AbstractActionManager implements ActionManager { plugin.getPluginLogger().warn("Action type: " + section.getString("type") + " doesn't exist."); return Action.empty(); } - return factory.process(section.get("value"), section.getDouble("chance", 1d)); + return factory.process(section.get("value"), section.contains("chance") ? MathValue.auto(section.get("chance")) : MathValue.plain(1d)); } @NotNull @@ -122,7 +123,7 @@ public abstract class AbstractActionManager implements ActionManager { plugin.getPluginLogger().warn("Action type: " + type + " doesn't exist."); return Action.empty(); } - return factory.process(args, 1); + return factory.process(args, MathValue.plain(1)); } @SuppressWarnings({"ResultOfMethodCallIgnored", "unchecked"}) diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/ActionFactory.java b/api/src/main/java/net/momirealms/customcrops/api/action/ActionFactory.java index 61059b0..d55ee85 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/ActionFactory.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/ActionFactory.java @@ -17,6 +17,8 @@ package net.momirealms.customcrops.api.action; +import net.momirealms.customcrops.api.misc.value.MathValue; + /** * Interface representing a factory for creating actions. * @@ -30,5 +32,5 @@ public interface ActionFactory { * @param args the args containing the arguments needed to build the action * @return the constructed action */ - Action process(Object args, double chance); + Action process(Object args, MathValue chance); } diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/AbstractBuiltInAction.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/AbstractBuiltInAction.java index da91cbc..e6bbda9 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/AbstractBuiltInAction.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/AbstractBuiltInAction.java @@ -20,13 +20,15 @@ package net.momirealms.customcrops.api.action.builtin; import net.momirealms.customcrops.api.BukkitCustomCropsPlugin; import net.momirealms.customcrops.api.action.Action; import net.momirealms.customcrops.api.context.Context; +import net.momirealms.customcrops.api.misc.value.MathValue; +import org.bukkit.entity.Player; public abstract class AbstractBuiltInAction implements Action { protected final BukkitCustomCropsPlugin plugin; - protected final double chance; + protected final MathValue chance; - protected AbstractBuiltInAction(BukkitCustomCropsPlugin plugin, double chance) { + protected AbstractBuiltInAction(BukkitCustomCropsPlugin plugin, MathValue chance) { this.plugin = plugin; this.chance = chance; } @@ -35,13 +37,13 @@ public abstract class AbstractBuiltInAction implements Action { return plugin; } - public double chance() { + public MathValue chance() { return chance; } @Override public void trigger(Context context) { - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; triggerAction(context); } diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionActionbarNearby.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionActionbarNearby.java index 9088c1a..2a7c792 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionActionbarNearby.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionActionbarNearby.java @@ -39,7 +39,7 @@ public class ActionActionbarNearby extends AbstractBuiltInAction { public ActionActionbarNearby( BukkitCustomCropsPlugin plugin, Section section, - double chance + MathValue chance ) { super(plugin, chance); this.actionbar = section.getString("actionbar"); diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionBreak.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionBreak.java index e326dcf..09b684d 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionBreak.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionBreak.java @@ -29,6 +29,7 @@ import net.momirealms.customcrops.api.core.world.CustomCropsBlockState; import net.momirealms.customcrops.api.core.world.CustomCropsWorld; import net.momirealms.customcrops.api.core.world.Pos3; import net.momirealms.customcrops.api.core.wrapper.WrappedBreakEvent; +import net.momirealms.customcrops.api.misc.value.MathValue; import net.momirealms.customcrops.api.util.DummyCancellable; import org.bukkit.Location; import org.bukkit.entity.Player; @@ -46,7 +47,7 @@ public class ActionBreak extends AbstractBuiltInAction { public ActionBreak( BukkitCustomCropsPlugin plugin, Object args, - double chance + MathValue chance ) { super(plugin, chance); this.triggerEvent = Optional.ofNullable(args).map(it -> (boolean) it).orElse(true); diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionBroadcast.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionBroadcast.java index 9e983e6..dc3cba2 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionBroadcast.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionBroadcast.java @@ -21,6 +21,7 @@ import net.kyori.adventure.audience.Audience; import net.momirealms.customcrops.api.BukkitCustomCropsPlugin; import net.momirealms.customcrops.api.context.Context; import net.momirealms.customcrops.api.context.ContextKeys; +import net.momirealms.customcrops.api.misc.value.MathValue; import net.momirealms.customcrops.common.helper.AdventureHelper; import net.momirealms.customcrops.common.util.ListUtils; import org.bukkit.Bukkit; @@ -36,7 +37,7 @@ public class ActionBroadcast extends AbstractBuiltInAction { public ActionBroadcast( BukkitCustomCropsPlugin plugin, Object args, - double chance + MathValue chance ) { super(plugin, chance); this.messages = ListUtils.toList(args); diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionChain.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionChain.java index b1e5236..5bb42f1 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionChain.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionChain.java @@ -22,6 +22,7 @@ import net.momirealms.customcrops.api.BukkitCustomCropsPlugin; import net.momirealms.customcrops.api.action.AbstractActionManager; import net.momirealms.customcrops.api.action.Action; import net.momirealms.customcrops.api.context.Context; +import net.momirealms.customcrops.api.misc.value.MathValue; import java.util.ArrayList; import java.util.List; @@ -35,7 +36,7 @@ public class ActionChain extends AbstractBuiltInAction { BukkitCustomCropsPlugin plugin, AbstractActionManager manager, Object args, - double chance + MathValue chance ) { super(plugin, chance); this.actions = new ArrayList<>(); diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionCommand.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionCommand.java index 64bbc52..10cc300 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionCommand.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionCommand.java @@ -21,6 +21,7 @@ import net.momirealms.customcrops.api.BukkitCustomCropsPlugin; import net.momirealms.customcrops.api.context.Context; import net.momirealms.customcrops.api.context.ContextKeys; import net.momirealms.customcrops.api.misc.placeholder.BukkitPlaceholderManager; +import net.momirealms.customcrops.api.misc.value.MathValue; import net.momirealms.customcrops.common.util.ListUtils; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; @@ -35,7 +36,7 @@ public class ActionCommand extends AbstractBuiltInAction { public ActionCommand( BukkitCustomCropsPlugin plugin, Object args, - double chance + MathValue chance ) { super(plugin, chance); this.commands = ListUtils.toList(args); diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionCommandNearby.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionCommandNearby.java index f699652..2ac3e85 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionCommandNearby.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionCommandNearby.java @@ -42,7 +42,7 @@ public class ActionCommandNearby extends AbstractBuiltInAction { public ActionCommandNearby( BukkitCustomCropsPlugin plugin, Section section, - double chance + MathValue chance ) { super(plugin, chance); this.cmd = ListUtils.toList(section.get("command")); diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionConditional.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionConditional.java index e68270c..455d5f3 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionConditional.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionConditional.java @@ -22,6 +22,7 @@ import net.momirealms.customcrops.api.BukkitCustomCropsPlugin; import net.momirealms.customcrops.api.action.AbstractActionManager; import net.momirealms.customcrops.api.action.Action; import net.momirealms.customcrops.api.context.Context; +import net.momirealms.customcrops.api.misc.value.MathValue; import net.momirealms.customcrops.api.requirement.Requirement; public class ActionConditional extends AbstractBuiltInAction { @@ -34,7 +35,7 @@ public class ActionConditional extends AbstractBuiltInAction { AbstractActionManager manager, Class tClass, Section section, - double chance + MathValue chance ) { super(plugin, chance); this.actions = manager.parseActions(section.getSection("actions")); diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionDelay.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionDelay.java index 71274b9..fbf8fa6 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionDelay.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionDelay.java @@ -23,6 +23,7 @@ import net.momirealms.customcrops.api.action.AbstractActionManager; import net.momirealms.customcrops.api.action.Action; import net.momirealms.customcrops.api.context.Context; import net.momirealms.customcrops.api.context.ContextKeys; +import net.momirealms.customcrops.api.misc.value.MathValue; import org.bukkit.Location; import java.util.ArrayList; @@ -40,7 +41,7 @@ public class ActionDelay extends AbstractBuiltInAction { BukkitCustomCropsPlugin plugin, AbstractActionManager manager, Object args, - double chance + MathValue chance ) { super(plugin, chance); this.actions = new ArrayList<>(); diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionDropItem.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionDropItem.java index 3cb7a96..1dfc2c2 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionDropItem.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionDropItem.java @@ -55,7 +55,7 @@ public class ActionDropItem extends AbstractBuiltInAction { public ActionDropItem( BukkitCustomCropsPlugin plugin, Section section, - double chance + MathValue chance ) { super(plugin, chance); this.ignoreFertilizer = section.getBoolean("ignore-fertilizer", true); @@ -75,6 +75,7 @@ public class ActionDropItem extends AbstractBuiltInAction { player = null; } int random = RandomUtils.generateRandomInt((int) min.evaluate(context), (int) max.evaluate(context)); + if (random <= 0) return; ItemStack itemStack = generateItem(location, player, random); plugin.getScheduler().sync().run(() -> { DropItemActionEvent actionEvent = new DropItemActionEvent(context, location, item, itemStack); diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionDropItemLegacy.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionDropItemLegacy.java index a41cdf8..97e972b 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionDropItemLegacy.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionDropItemLegacy.java @@ -22,6 +22,7 @@ import net.momirealms.customcrops.api.BukkitCustomCropsPlugin; import net.momirealms.customcrops.api.action.Action; import net.momirealms.customcrops.api.action.ActionManager; import net.momirealms.customcrops.api.context.Context; +import net.momirealms.customcrops.api.misc.value.MathValue; import java.util.ArrayList; import java.util.List; @@ -37,7 +38,7 @@ public class ActionDropItemLegacy extends AbstractBuiltInAction { BukkitCustomCropsPlugin plugin, ActionManager manager, Section section, - double chance + MathValue chance ) { super(plugin, chance); this.actions = new ArrayList<>(); @@ -45,13 +46,13 @@ public class ActionDropItemLegacy extends AbstractBuiltInAction { if (otherItemSection != null) { for (Map.Entry entry : otherItemSection.getStringRouteMappedValues(false).entrySet()) { if (entry.getValue() instanceof Section inner) { - actions.add(requireNonNull(manager.getActionFactory("drop-item")).process(inner, inner.getDouble("chance", 1D))); + actions.add(requireNonNull(manager.getActionFactory("drop-item")).process(inner, section.contains("chance") ? MathValue.auto(section.get("chance")) : MathValue.plain(1d))); } } } Section qualitySection = section.getSection("quality-crops"); if (qualitySection != null) { - actions.add(requireNonNull(manager.getActionFactory("quality-crops")).process(qualitySection, 1)); + actions.add(requireNonNull(manager.getActionFactory("quality-crops")).process(qualitySection, MathValue.plain(1))); } } diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionFakeItem.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionFakeItem.java index 1b8e1de..117a50e 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionFakeItem.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionFakeItem.java @@ -53,7 +53,7 @@ public class ActionFakeItem extends AbstractBuiltInAction { public ActionFakeItem( BukkitCustomCropsPlugin plugin, Section section, - double chance + MathValue chance ) { super(plugin, chance); String itemID = section.getString("item", ""); diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionHologram.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionHologram.java index 76d34ea..b22dc50 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionHologram.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionHologram.java @@ -34,7 +34,7 @@ public class ActionHologram extends AbstractBuiltInAction { public ActionHologram( BukkitCustomCropsPlugin plugin, Section section, - double chance + MathValue chance ) { super(plugin, chance); this.text = TextValue.auto(section.getString("text", "")); diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionMessageNearby.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionMessageNearby.java index 1b61172..9684ac3 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionMessageNearby.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionMessageNearby.java @@ -43,7 +43,7 @@ public class ActionMessageNearby extends AbstractBuiltInAction { public ActionMessageNearby( BukkitCustomCropsPlugin plugin, Section section, - double chance + MathValue chance ) { super(plugin, chance); this.messages = ListUtils.toList(section.get("message")); diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionParticle.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionParticle.java index 5c13ddb..96b69e1 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionParticle.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionParticle.java @@ -21,6 +21,7 @@ import dev.dejvokep.boostedyaml.block.implementation.Section; import net.momirealms.customcrops.api.BukkitCustomCropsPlugin; import net.momirealms.customcrops.api.context.Context; import net.momirealms.customcrops.api.context.ContextKeys; +import net.momirealms.customcrops.api.misc.value.MathValue; import net.momirealms.customcrops.api.util.ParticleUtils; import org.bukkit.Color; import org.bukkit.Location; @@ -51,7 +52,7 @@ public class ActionParticle extends AbstractBuiltInAction { public ActionParticle( BukkitCustomCropsPlugin plugin, Section section, - double chance + MathValue chance ) { super(plugin, chance); this.particleType = ParticleUtils.getParticle(section.getString("particle", "ASH").toUpperCase(Locale.ENGLISH)); diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionPlant.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionPlant.java index 73bfb70..e755e59 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionPlant.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionPlant.java @@ -35,6 +35,7 @@ import net.momirealms.customcrops.api.core.world.CustomCropsBlockState; import net.momirealms.customcrops.api.core.world.CustomCropsWorld; import net.momirealms.customcrops.api.core.world.Pos3; import net.momirealms.customcrops.api.event.CropPlantEvent; +import net.momirealms.customcrops.api.misc.value.MathValue; import net.momirealms.customcrops.api.util.EventUtils; import org.bukkit.Location; import org.bukkit.entity.Player; @@ -54,7 +55,7 @@ public class ActionPlant extends AbstractBuiltInAction { public ActionPlant( BukkitCustomCropsPlugin plugin, Section section, - double chance + MathValue chance ) { super(plugin, chance); this.point = section.getInt("point", 0); diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionPriority.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionPriority.java index 790f767..e77c9f5 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionPriority.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionPriority.java @@ -22,6 +22,7 @@ import net.momirealms.customcrops.api.BukkitCustomCropsPlugin; import net.momirealms.customcrops.api.action.AbstractActionManager; import net.momirealms.customcrops.api.action.Action; import net.momirealms.customcrops.api.context.Context; +import net.momirealms.customcrops.api.misc.value.MathValue; import net.momirealms.customcrops.api.requirement.Requirement; import net.momirealms.customcrops.common.util.Pair; @@ -38,7 +39,7 @@ public class ActionPriority extends AbstractBuiltInAction { AbstractActionManager manager, Class tClass, Section section, - double chance + MathValue chance ) { super(plugin, chance); this.conditionActionPairList = new ArrayList<>(); diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionQualityCrops.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionQualityCrops.java index aad39c8..1a43cd0 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionQualityCrops.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionQualityCrops.java @@ -56,7 +56,7 @@ public class ActionQualityCrops extends AbstractBuiltInAction { public ActionQualityCrops( BukkitCustomCropsPlugin plugin, Section section, - double chance + MathValue chance ) { super(plugin, chance); this.min = MathValue.auto(section.get("min")); @@ -76,6 +76,7 @@ public class ActionQualityCrops extends AbstractBuiltInAction { protected void triggerAction(Context context) { Location location = requireNonNull(context.arg(ContextKeys.LOCATION)); int random = RandomUtils.generateRandomInt((int) min.evaluate(context), (int) max.evaluate(context)); + if (random <= 0) return; Player player; if (context.holder() instanceof Player p) { player = p; diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionRandomCommand.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionRandomCommand.java index 25934ae..e3abdec 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionRandomCommand.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionRandomCommand.java @@ -21,6 +21,7 @@ import net.momirealms.customcrops.api.BukkitCustomCropsPlugin; import net.momirealms.customcrops.api.context.Context; import net.momirealms.customcrops.api.context.ContextKeys; import net.momirealms.customcrops.api.misc.placeholder.BukkitPlaceholderManager; +import net.momirealms.customcrops.api.misc.value.MathValue; import net.momirealms.customcrops.common.util.ListUtils; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; @@ -36,7 +37,7 @@ public class ActionRandomCommand extends AbstractBuiltInAction { public ActionRandomCommand( BukkitCustomCropsPlugin plugin, Object args, - double chance + MathValue chance ) { super(plugin, chance); this.commands = ListUtils.toList(args); diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionSpawnEntity.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionSpawnEntity.java index 2efdf9d..dc8a4ac 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionSpawnEntity.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionSpawnEntity.java @@ -22,6 +22,7 @@ import net.momirealms.customcrops.api.BukkitCustomCropsPlugin; import net.momirealms.customcrops.api.context.Context; import net.momirealms.customcrops.api.context.ContextKeys; import net.momirealms.customcrops.api.integration.EntityProvider; +import net.momirealms.customcrops.api.misc.value.MathValue; import org.bukkit.Location; import java.util.HashMap; @@ -37,7 +38,7 @@ public class ActionSpawnEntity extends AbstractBuiltInAction { public ActionSpawnEntity( BukkitCustomCropsPlugin plugin, Section section, - double chance + MathValue chance ) { super(plugin, chance); this.id = section.getString("id"); diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionTimer.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionTimer.java index 2270631..65f4ac5 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionTimer.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionTimer.java @@ -23,6 +23,7 @@ import net.momirealms.customcrops.api.action.AbstractActionManager; import net.momirealms.customcrops.api.action.Action; import net.momirealms.customcrops.api.context.Context; import net.momirealms.customcrops.api.context.ContextKeys; +import net.momirealms.customcrops.api.misc.value.MathValue; import net.momirealms.customcrops.common.plugin.scheduler.SchedulerTask; import org.bukkit.Location; @@ -41,7 +42,7 @@ public class ActionTimer extends AbstractBuiltInAction { BukkitCustomCropsPlugin plugin, AbstractActionManager manager, Object args, - double chance + MathValue chance ) { super(plugin, chance); this.actions = new ArrayList<>(); diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionTitleNearby.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionTitleNearby.java index 5e5d504..924d79e 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionTitleNearby.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionTitleNearby.java @@ -22,6 +22,7 @@ import net.kyori.adventure.audience.Audience; import net.momirealms.customcrops.api.BukkitCustomCropsPlugin; import net.momirealms.customcrops.api.context.Context; import net.momirealms.customcrops.api.context.ContextKeys; +import net.momirealms.customcrops.api.misc.value.MathValue; import net.momirealms.customcrops.api.misc.value.TextValue; import net.momirealms.customcrops.api.util.LocationUtils; import net.momirealms.customcrops.common.helper.AdventureHelper; @@ -42,7 +43,7 @@ public class ActionTitleNearby extends AbstractBuiltInAction { public ActionTitleNearby( BukkitCustomCropsPlugin plugin, Section section, - double chance + MathValue chance ) { super(plugin, chance); this.title = TextValue.auto(section.getString("title")); diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionVariation.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionVariation.java index 6967498..9b11e01 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionVariation.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionVariation.java @@ -33,6 +33,7 @@ import net.momirealms.customcrops.api.core.mechanic.fertilizer.FertilizerConfig; import net.momirealms.customcrops.api.core.world.CustomCropsBlockState; import net.momirealms.customcrops.api.core.world.CustomCropsWorld; import net.momirealms.customcrops.api.core.world.Pos3; +import net.momirealms.customcrops.api.misc.value.MathValue; import org.bukkit.Location; import java.util.*; @@ -47,7 +48,7 @@ public class ActionVariation extends AbstractBuiltInAction { public ActionVariation( BukkitCustomCropsPlugin plugin, Section section, - double chance + MathValue chance ) { super(plugin, chance); ignore = section.getBoolean("ignore-fertilizer", false); diff --git a/gradle.properties b/gradle.properties index 1ce66b1..01dd42f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ # Project settings # Rule: [major update].[feature update].[bug fix] -project_version=3.6.20.1 +project_version=3.6.21 config_version=42 project_group=net.momirealms diff --git a/plugin/src/main/java/net/momirealms/customcrops/bukkit/action/PlayerActionManager.java b/plugin/src/main/java/net/momirealms/customcrops/bukkit/action/PlayerActionManager.java index ff9d96f..4f89214 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/bukkit/action/PlayerActionManager.java +++ b/plugin/src/main/java/net/momirealms/customcrops/bukkit/action/PlayerActionManager.java @@ -93,7 +93,7 @@ public class PlayerActionManager extends AbstractActionManager { List messages = ListUtils.toList(args); return context -> { if (context.holder() == null) return; - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; List replaced = plugin.getPlaceholderManager().parse(context.holder(), messages, context.placeholderMap()); Audience audience = plugin.getSenderFactory().getAudience(context.holder()); for (String text : replaced) { @@ -105,7 +105,7 @@ public class PlayerActionManager extends AbstractActionManager { List messages = ListUtils.toList(args); return context -> { if (context.holder() == null) return; - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; String random = messages.get(RandomUtils.generateRandomInt(0, messages.size() - 1)); random = BukkitPlaceholderManager.getInstance().parse(context.holder(), random, context.placeholderMap()); Audience audience = plugin.getSenderFactory().getAudience(context.holder()); @@ -119,7 +119,7 @@ public class PlayerActionManager extends AbstractActionManager { List commands = ListUtils.toList(args); return context -> { if (context.holder() == null) return; - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; List replaced = BukkitPlaceholderManager.getInstance().parse(context.holder(), commands, context.placeholderMap()); plugin.getScheduler().sync().run(() -> { for (String text : replaced) { @@ -133,7 +133,7 @@ public class PlayerActionManager extends AbstractActionManager { private void registerCloseInvAction() { registerAction((args, chance) -> context -> { if (context.holder() == null) return; - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; context.holder().closeInventory(); }, "close-inv"); } @@ -143,7 +143,7 @@ public class PlayerActionManager extends AbstractActionManager { String text = (String) args; return context -> { if (context.holder() == null) return; - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; Audience audience = plugin.getSenderFactory().getAudience(context.holder()); Component component = AdventureHelper.miniMessage(plugin.getPlaceholderManager().parse(context.holder(), text, context.placeholderMap())); audience.sendActionBar(component); @@ -153,7 +153,7 @@ public class PlayerActionManager extends AbstractActionManager { List texts = ListUtils.toList(args); return context -> { if (context.holder() == null) return; - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; String random = texts.get(RandomUtils.generateRandomInt(0, texts.size() - 1)); random = plugin.getPlaceholderManager().parse(context.holder(), random, context.placeholderMap()); Audience audience = plugin.getSenderFactory().getAudience(context.holder()); @@ -167,7 +167,7 @@ public class PlayerActionManager extends AbstractActionManager { MathValue value = MathValue.auto(args); return context -> { if (context.holder() == null) return; - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; final Player player = context.holder(); ExperienceOrb entity = player.getLocation().getWorld().spawn(player.getLocation().clone().add(0,0.5,0), ExperienceOrb.class); entity.setExperience((int) value.evaluate(context)); @@ -177,7 +177,7 @@ public class PlayerActionManager extends AbstractActionManager { MathValue value = MathValue.auto(args); return context -> { if (context.holder() == null) return; - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; final Player player = context.holder(); player.giveExp((int) Math.round(value.evaluate(context))); Audience audience = plugin.getSenderFactory().getAudience(player); @@ -188,7 +188,7 @@ public class PlayerActionManager extends AbstractActionManager { MathValue value = MathValue.auto(args); return context -> { if (context.holder() == null) return; - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; Player player = context.holder(); player.setLevel((int) Math.max(0, player.getLevel() + value.evaluate(context))); }; @@ -200,7 +200,7 @@ public class PlayerActionManager extends AbstractActionManager { MathValue value = MathValue.auto(args); return context -> { if (context.holder() == null) return; - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; Player player = context.holder(); player.setFoodLevel((int) (player.getFoodLevel() + value.evaluate(context))); }; @@ -209,7 +209,7 @@ public class PlayerActionManager extends AbstractActionManager { MathValue value = MathValue.auto(args); return context -> { if (context.holder() == null) return; - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; Player player = context.holder(); player.setSaturation((float) (player.getSaturation() + value.evaluate(context))); }; @@ -233,7 +233,7 @@ public class PlayerActionManager extends AbstractActionManager { } return context -> { if (context.holder() == null) return; - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; Player player = context.holder(); EquipmentSlot hand = context.arg(ContextKeys.SLOT); if (mainOrOff == null && hand == null) { @@ -264,7 +264,7 @@ public class PlayerActionManager extends AbstractActionManager { return Action.empty(); } return context -> { - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; Player player = context.holder(); if (player == null) return; EquipmentSlot tempSlot = slot; @@ -297,7 +297,7 @@ public class PlayerActionManager extends AbstractActionManager { int amount = section.getInt("amount", 1); boolean toInventory = section.getBoolean("to-inventory", false); return context -> { - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; Player player = context.holder(); if (player == null) return; ItemStack itemStack = plugin.getItemManager().build(context.holder(), finalID); @@ -329,7 +329,7 @@ public class PlayerActionManager extends AbstractActionManager { MathValue value = MathValue.auto(args); return context -> { if (context.holder() == null) return; - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; if (!VaultHook.isHooked()) return; VaultHook.deposit(context.holder(), value.evaluate(context)); }; @@ -338,7 +338,7 @@ public class PlayerActionManager extends AbstractActionManager { MathValue value = MathValue.auto(args); return context -> { if (context.holder() == null) return; - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; if (!VaultHook.isHooked()) return; VaultHook.withdraw(context.holder(), value.evaluate(context)); }; @@ -355,7 +355,7 @@ public class PlayerActionManager extends AbstractActionManager { ); return context -> { if (context.holder() == null) return; - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; context.holder().addPotionEffect(potionEffect); }; } else { @@ -376,7 +376,7 @@ public class PlayerActionManager extends AbstractActionManager { ); return context -> { if (context.holder() == null) return; - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; Audience audience = plugin.getSenderFactory().getAudience(context.holder()); AdventureHelper.playSound(audience, sound); }; @@ -395,7 +395,7 @@ public class PlayerActionManager extends AbstractActionManager { String target = section.getString("target"); return context -> { if (context.holder() == null) return; - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; Optional.ofNullable(plugin.getIntegrationManager().getLevelerProvider(pluginName)).ifPresentOrElse(it -> { it.addXp(context.holder(), target, value.evaluate(context)); }, () -> plugin.getPluginLogger().warn("Plugin (" + pluginName + "'s) level is not compatible. Please double check if it's a problem caused by pronunciation.")); @@ -416,7 +416,7 @@ public class PlayerActionManager extends AbstractActionManager { int stay = section.getInt("stay", 30); int fadeOut = section.getInt("fade-out", 10); return context -> { - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; final Player player = context.holder(); if (player == null) return; Audience audience = plugin.getSenderFactory().getAudience(player); @@ -442,7 +442,7 @@ public class PlayerActionManager extends AbstractActionManager { int fadeOut = section.getInt("fade-out", 10); return context -> { if (context.holder() == null) return; - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; TextValue title = TextValue.auto(titles.get(RandomUtils.generateRandomInt(0, titles.size() - 1))); TextValue subtitle = TextValue.auto(subtitles.get(RandomUtils.generateRandomInt(0, subtitles.size() - 1))); final Player player = context.holder(); @@ -465,7 +465,7 @@ public class PlayerActionManager extends AbstractActionManager { boolean arg = (boolean) args; return context -> { if (context.holder() == null) return; - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; EquipmentSlot slot = context.arg(ContextKeys.SLOT); if (slot == null) { SparrowHeart.getInstance().swingHand(context.holder(), arg ? HandSlot.MAIN : HandSlot.OFF); @@ -480,7 +480,7 @@ public class PlayerActionManager extends AbstractActionManager { private void registerForceTickAction() { registerAction((args, chance) -> context -> { if (context.holder() == null) return; - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; Location location = requireNonNull(context.arg(ContextKeys.LOCATION)); Pos3 pos3 = Pos3.from(location); Optional> optionalWorld = plugin.getWorldManager().getWorld(location.getWorld()); @@ -500,7 +500,7 @@ public class PlayerActionManager extends AbstractActionManager { }, "force-tick"); registerAction((args, chance) -> context -> { if (context.holder() == null) return; - if (Math.random() > chance) return; + if (Math.random() > chance.evaluate(context)) return; Location location = requireNonNull(context.arg(ContextKeys.LOCATION)); Pos3 pos3 = Pos3.from(location); Optional> optionalWorld = plugin.getWorldManager().getWorld(location.getWorld());