From 26b478a9ea97659a7fdbce723a1b8e07cbf6ab07 Mon Sep 17 00:00:00 2001 From: Arubik <102335860+ArubikU@users.noreply.github.com> Date: Mon, 4 Aug 2025 21:37:47 -0500 Subject: [PATCH] Update ChangeOverTimeBlockBehavior.java --- .../behavior/ChangeOverTimeBlockBehavior.java | 44 ++++++++----------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/ChangeOverTimeBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/ChangeOverTimeBlockBehavior.java index c7e4c2707..d79531deb 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/ChangeOverTimeBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/ChangeOverTimeBlockBehavior.java @@ -20,11 +20,12 @@ import net.momirealms.craftengine.core.block.UpdateOption; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.RandomUtils; +import net.momirealms.craftengine.core.util.ResourceConfigUtils; import net.momirealms.craftengine.core.world.BlockPos; import net.momirealms.craftengine.core.world.World; import net.momirealms.sparrow.nbt.CompoundTag; -public class ChangeOverTimeBlockBehavior extends BukkitBlockBehavior{ +public class ChangeOverTimeBlockBehavior extends BukkitBlockBehavior { public static final Factory FACTORY = new Factory(); private final float delay; private final Key nextBlock; @@ -37,27 +38,21 @@ public class ChangeOverTimeBlockBehavior extends BukkitBlockBehavior{ @Override public void randomTick(Object thisBlock, Object[] args, Callable superMethod) throws Exception { - if (shouldChange(args)) { - Optional optionalNewCustomBlock = BukkitBlockManager.instance().blockById(nextBlock); - if (optionalNewCustomBlock.isPresent()) { - - Object blockState = args[0]; - World level = (World) args[1]; - BlockPos blockPos = (BlockPos) args[2]; - Optional optionalCurrentState = BlockStateUtils.getOptionalCustomBlockState(blockState); - if (optionalCurrentState.isEmpty()) { - return; - } - CompoundTag compoundTag = optionalCurrentState.get().propertiesNbt(); - ImmutableBlockState newState = optionalNewCustomBlock.get().getBlockState(compoundTag); - BukkitBlockInWorld blockInWorld = (BukkitBlockInWorld) level.getBlockAt(LocationUtils.fromBlockPos(blockPos)); - BlockFormEvent event = new BlockFormEvent(blockInWorld.block(), BlockStateUtils.fromBlockData(newState.customBlockState().handle()).createBlockState()); - if(event.callEvent()){ - - FastNMS.INSTANCE.method$LevelWriter$setBlock(level.serverWorld(), blockPos, newState.customBlockState().handle(), UpdateOption.UPDATE_ALL_IMMEDIATE.flags()); - blockInWorld.block().getWorld().sendGameEvent(null, GameEvent.BLOCK_CHANGE, new Vector(blockPos.x(), blockPos.y(), blockPos.z())); - } - } + if(!shouldChange(args)) return; + Optional optionalNewCustomBlock = BukkitBlockManager.instance().blockById(nextBlock); + if (!optionalNewCustomBlock.isPresent()) return; + Object blockState = args[0]; + World level = (World) args[1]; + BlockPos blockPos = (BlockPos) args[2]; + Optional optionalCurrentState = BlockStateUtils .getOptionalCustomBlockState(blockState); + if (optionalCurrentState.isEmpty()) return; + CompoundTag compoundTag = optionalCurrentState.get().propertiesNbt(); + ImmutableBlockState newState = optionalNewCustomBlock.get().getBlockState(compoundTag); + BukkitBlockInWorld blockInWorld = (BukkitBlockInWorld) level.getBlockAt(LocationUtils.fromBlockPos(blockPos)); + BlockFormEvent event = new BlockFormEvent(blockInWorld.block(),BlockStateUtils.fromBlockData(newState.customBlockState().handle()).createBlockState()); + if (event.callEvent()) { + FastNMS.INSTANCE.method$LevelWriter$setBlock(level.serverWorld(), blockPos, newState.customBlockState().handle(), UpdateOption.UPDATE_ALL_IMMEDIATE.flags()); + blockInWorld.block().getWorld().sendGameEvent(null, GameEvent.BLOCK_CHANGE, new Vector(blockPos.x(), blockPos.y(), blockPos.z())); } } @@ -66,12 +61,11 @@ public class ChangeOverTimeBlockBehavior extends BukkitBlockBehavior{ } public static class Factory implements BlockBehaviorFactory { - @Override public BlockBehavior create(CustomBlock block, Map arguments) { float delay = Float.valueOf(arguments.getOrDefault("delay", 0.05688889F).toString()); - String nextBlock = arguments.getOrDefault("next-block", "minecraft:air").toString(); - return new ChangeOverTimeBlockBehavior(block, delay, Key.from(nextBlock)); + Key nextBlock = Key.of(ResourceConfigUtils.requireNonEmptyStringOrThrow(arguments.getOrDefault("next-block", "minecraft:air"), "warning.config.block.behavior.change_over_time_block_missing_next_block")); + return new ChangeOverTimeBlockBehavior(block, delay, nextBlock); } } }