mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-31 21:06:31 +00:00
添加蔓延方块行为
This commit is contained in:
@@ -52,6 +52,7 @@ public class BukkitBlockBehaviors extends BlockBehaviors {
|
||||
public static final BlockBehaviorType DROP_EXPERIENCE_BLOCK = register(DropExperienceBlockBehavior.ID, DropExperienceBlockBehavior.FACTORY);
|
||||
public static final BlockBehaviorType DROP_EXP_BLOCK = register(Key.from("craftengine:drop_exp_block"), DropExperienceBlockBehavior.FACTORY);
|
||||
public static final BlockBehaviorType MULTI_HIGH_BLOCK = register(MultiHighBlockBehavior.ID, MultiHighBlockBehavior.FACTORY);
|
||||
public static final BlockBehaviorType SPREADING_BLOCK = register(SpreadingBlockBehavior.ID, SpreadingBlockBehavior.FACTORY);
|
||||
|
||||
public static void init() {
|
||||
}
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
package net.momirealms.craftengine.bukkit.block.behavior;
|
||||
|
||||
import net.momirealms.craftengine.bukkit.block.BukkitBlockManager;
|
||||
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
||||
import net.momirealms.craftengine.core.block.CustomBlock;
|
||||
import net.momirealms.craftengine.core.block.UpdateOption;
|
||||
import net.momirealms.craftengine.core.block.behavior.BlockBehavior;
|
||||
import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory;
|
||||
import net.momirealms.craftengine.core.util.Key;
|
||||
import net.momirealms.craftengine.core.util.LazyReference;
|
||||
import net.momirealms.craftengine.core.util.RandomUtils;
|
||||
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
public class SpreadingBlockBehavior extends BukkitBlockBehavior {
|
||||
public static final Key ID = Key.from("minecraft:spreading_block");
|
||||
public static final BlockBehaviorFactory FACTORY = new Factory();
|
||||
private final LazyReference<Object> targetBlock;
|
||||
|
||||
public SpreadingBlockBehavior(CustomBlock customBlock, String targetBlock) {
|
||||
super(customBlock);
|
||||
this.targetBlock = LazyReference.lazyReference(() -> Objects.requireNonNull(BukkitBlockManager.instance().createBlockState(targetBlock)).literalObject());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void randomTick(Object thisBlock, Object[] args, Callable<Object> superMethod) throws Exception {
|
||||
Object level = args[1];
|
||||
Object pos = args[2];
|
||||
Object blockPos = FastNMS.INSTANCE.method$BlockPos$offset(pos, RandomUtils.generateRandomInt(-1, 2), RandomUtils.generateRandomInt(-3, 2), RandomUtils.generateRandomInt(-1, 2));
|
||||
if (FastNMS.INSTANCE.method$BlockStateBase$isBlock(FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, blockPos), FastNMS.INSTANCE.method$BlockState$getBlock(this.targetBlock.get()))) {
|
||||
FastNMS.INSTANCE.method$LevelWriter$setBlock(level, blockPos, this.block().defaultState().customBlockState().literalObject(), UpdateOption.UPDATE_ALL.flags());
|
||||
}
|
||||
}
|
||||
|
||||
public static class Factory implements BlockBehaviorFactory {
|
||||
|
||||
@Override
|
||||
public BlockBehavior create(CustomBlock block, Map<String, Object> arguments) {
|
||||
String targetBlock = ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.get("target-block"), "warning.config.block.behavior.spreading.missing_target_block");
|
||||
return new SpreadingBlockBehavior(block, targetBlock);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user