From aa3e8f5504be514d80980fe98eebc5c79e8e5e30 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Wed, 26 Mar 2025 10:30:46 +0800 Subject: [PATCH] =?UTF-8?q?fix(client):=20=E4=BF=AE=E5=A4=8D=E6=96=B9?= =?UTF-8?q?=E5=9D=97=E8=A2=AB=E6=B4=BB=E5=A1=9E=E6=8E=A8=E5=8A=A8=E8=A7=86?= =?UTF-8?q?=E8=A7=89=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../craftengine/fabric/CraftEngineFabricMod.java | 4 +++- .../craftengine/fabric/util/BlockUtils.java | 8 ++++++++ .../craftengine/fabric/util/RegisterBlocks.java | 11 +++++++++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/client-mod/src/main/java/net/momirealms/craftengine/fabric/CraftEngineFabricMod.java b/client-mod/src/main/java/net/momirealms/craftengine/fabric/CraftEngineFabricMod.java index e8ab5ecf7..00572f0ba 100644 --- a/client-mod/src/main/java/net/momirealms/craftengine/fabric/CraftEngineFabricMod.java +++ b/client-mod/src/main/java/net/momirealms/craftengine/fabric/CraftEngineFabricMod.java @@ -3,6 +3,7 @@ package net.momirealms.craftengine.fabric; import net.fabricmc.api.ModInitializer; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.block.BlockState; +import net.minecraft.block.piston.PistonBehavior; import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; import net.minecraft.util.shape.VoxelShape; @@ -41,7 +42,8 @@ public class CraftEngineFabricMod implements ModInitializer { replacedBlockId.getPath() + "_" + i, BlockUtils.canPassThrough(blockState), BlockUtils.getShape(blockState), - BlockUtils.isTransparent(blockState) + BlockUtils.isTransparent(blockState), + BlockUtils.canPush(blockState) ); } } diff --git a/client-mod/src/main/java/net/momirealms/craftengine/fabric/util/BlockUtils.java b/client-mod/src/main/java/net/momirealms/craftengine/fabric/util/BlockUtils.java index df3e500fb..1069ca5d7 100644 --- a/client-mod/src/main/java/net/momirealms/craftengine/fabric/util/BlockUtils.java +++ b/client-mod/src/main/java/net/momirealms/craftengine/fabric/util/BlockUtils.java @@ -4,6 +4,7 @@ import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.TransparentBlock; +import net.minecraft.block.piston.PistonBehavior; import net.minecraft.util.math.BlockPos; import net.minecraft.util.shape.VoxelShape; import net.minecraft.util.shape.VoxelShapes; @@ -73,4 +74,11 @@ public class BlockUtils { } return !state.isOpaque(); } + + public static int canPush(BlockState state) { + if (state == null) return 0; + if (state.getPistonBehavior() == PistonBehavior.NORMAL) return 1; + if (state.getPistonBehavior() == PistonBehavior.PUSH_ONLY) return 2; + return 0; + } } diff --git a/client-mod/src/main/java/net/momirealms/craftengine/fabric/util/RegisterBlocks.java b/client-mod/src/main/java/net/momirealms/craftengine/fabric/util/RegisterBlocks.java index 4cd2b959b..dc971041d 100644 --- a/client-mod/src/main/java/net/momirealms/craftengine/fabric/util/RegisterBlocks.java +++ b/client-mod/src/main/java/net/momirealms/craftengine/fabric/util/RegisterBlocks.java @@ -2,6 +2,7 @@ package net.momirealms.craftengine.fabric.util; import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; +import net.minecraft.block.piston.PistonBehavior; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; import net.minecraft.registry.RegistryKey; @@ -16,8 +17,14 @@ import java.util.function.Function; public class RegisterBlocks { @SuppressWarnings("UnusedReturnValue") - public static Block register(String name, boolean canPassThrough, VoxelShape outlineShape, boolean isTransparent) { - AbstractBlock.Settings settings = Block.Settings.create().nonOpaque().strength(-1.0F, 3600000.0F); + public static Block register(String name, boolean canPassThrough, + VoxelShape outlineShape, boolean isTransparent, + int canPush) { + AbstractBlock.Settings settings = Block.Settings.create() + .nonOpaque() + .strength(canPush != 0 ? 3600000.0F : -1.0F, 3600000.0F); + if (canPush == 1) settings.pistonBehavior(PistonBehavior.NORMAL); + if (canPush == 2) settings.pistonBehavior(PistonBehavior.PUSH_ONLY); VoxelShape collisionShape; if (canPassThrough) { collisionShape = VoxelShapes.empty();