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();