9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-23 17:09:19 +00:00

fix(client): 修复方块被活塞推动视觉问题

This commit is contained in:
jhqwqmc
2025-03-26 10:30:46 +08:00
parent 837bdd6032
commit aa3e8f5504
3 changed files with 20 additions and 3 deletions

View File

@@ -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)
);
}
}

View File

@@ -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;
}
}

View File

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