9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-25 09:59:20 +00:00

Merge pull request #455 from jhqwqmc/dev

增强cycle_block_property
This commit is contained in:
XiaoMoMi
2025-11-11 22:54:12 +08:00
committed by GitHub
2 changed files with 7 additions and 6 deletions

View File

@@ -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<CTX extends Context> extends AbstractConditionalFunction<CTX> {
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<Condition<CTX>> predicates, String property, NumberProvider x, NumberProvider y, NumberProvider z, NumberProvider updateFlags) {
public CycleBlockPropertyFunction(List<Condition<CTX>> 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<CTX extends Context> 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<CTX extends Context> extends AbstractCon
public Function<CTX> create(Map<String, Object> arguments) {
return new CycleBlockPropertyFunction<>(getPredicates(arguments),
ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("property"), "warning.config.function.cycle_block_property.missing_property"),
NumberProviders.fromObject(arguments.getOrDefault("inverse", "<arg:player.is_sneaking>")),
NumberProviders.fromObject(arguments.getOrDefault("x", "<arg:position.x>")),
NumberProviders.fromObject(arguments.getOrDefault("y", "<arg:position.y>")),
NumberProviders.fromObject(arguments.getOrDefault("z", "<arg:position.z>")),

View File

@@ -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<String, Object>) map);
} else {