From 0a80029217ad09b6a5b281b680d15754aadaf9d5 Mon Sep 17 00:00:00 2001 From: jhqwqmc Date: Tue, 11 Nov 2025 22:25:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=BC=BAcycle=5Fblock=5Fproperty?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../context/function/CycleBlockPropertyFunction.java | 11 +++++------ .../core/plugin/context/number/NumberProviders.java | 2 ++ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/CycleBlockPropertyFunction.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/CycleBlockPropertyFunction.java index c7b2ac317..5dbedc7d1 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/CycleBlockPropertyFunction.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/function/CycleBlockPropertyFunction.java @@ -2,7 +2,6 @@ package net.momirealms.craftengine.core.plugin.context.function; import net.momirealms.craftengine.core.block.BlockStateWrapper; import net.momirealms.craftengine.core.block.UpdateOption; -import net.momirealms.craftengine.core.entity.player.Player; import net.momirealms.craftengine.core.plugin.context.Condition; import net.momirealms.craftengine.core.plugin.context.Context; import net.momirealms.craftengine.core.plugin.context.number.NumberProvider; @@ -21,14 +20,16 @@ import java.util.Optional; public class CycleBlockPropertyFunction extends AbstractConditionalFunction { private final String property; + private final NumberProvider inverse; private final NumberProvider x; private final NumberProvider y; private final NumberProvider z; private final NumberProvider updateFlags; - public CycleBlockPropertyFunction(List> predicates, String property, NumberProvider x, NumberProvider y, NumberProvider z, NumberProvider updateFlags) { + public CycleBlockPropertyFunction(List> predicates, String property, NumberProvider inverse, NumberProvider x, NumberProvider y, NumberProvider z, NumberProvider updateFlags) { super(predicates); this.property = property; + this.inverse = inverse; this.x = x; this.y = y; this.z = z; @@ -44,10 +45,7 @@ public class CycleBlockPropertyFunction extends AbstractCon int y = MiscUtils.fastFloor(this.y.getDouble(ctx)); int z = MiscUtils.fastFloor(this.z.getDouble(ctx)); ExistingBlock blockAt = world.getBlockAt(x, y, z); - boolean isSecondaryUseActive = ctx.getOptionalParameter(DirectContextParameters.PLAYER) - .map(Player::isSecondaryUseActive) - .orElse(false); - BlockStateWrapper wrapper = blockAt.blockState().cycleProperty(this.property, isSecondaryUseActive); + BlockStateWrapper wrapper = blockAt.blockState().cycleProperty(this.property, this.inverse.getInt(ctx) == 0); world.setBlockAt(x, y, z, wrapper, this.updateFlags.getInt(ctx)); } @@ -66,6 +64,7 @@ public class CycleBlockPropertyFunction extends AbstractCon public Function create(Map arguments) { return new CycleBlockPropertyFunction<>(getPredicates(arguments), ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("property"), "warning.config.function.cycle_block_property.missing_property"), + NumberProviders.fromObject(arguments.getOrDefault("inverse", "")), NumberProviders.fromObject(arguments.getOrDefault("x", "")), NumberProviders.fromObject(arguments.getOrDefault("y", "")), NumberProviders.fromObject(arguments.getOrDefault("z", "")), diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/NumberProviders.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/NumberProviders.java index 0b46ffb92..fd636b1c7 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/NumberProviders.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/number/NumberProviders.java @@ -64,6 +64,8 @@ public class NumberProviders { } if (object instanceof Number number) { return new FixedNumberProvider(number.floatValue()); + } else if (object instanceof Boolean bool) { + return new FixedNumberProvider(bool ? 1 : 0); } else if (object instanceof Map map) { return fromMap((Map) map); } else {