Try   HackMD

Minecraft Fabric Modding - 方塊專欄

進階方塊

Glass Block

將原本 register 的 Block() 改為 GlassBlock(),並在 FabricBlockSettings 後加入 nonOpaque()

public static final Block TOUGHENED_GLASS = registerBlock("toughened_glass", new GlassBlock(FabricBlockSettings.of(Material.GLASS).strength(15.0f) .breakByTool(FabricToolTags.PICKAXES, 3).requiresTool().nonOpaque()));

ModBlocks 加入函數:

public static void renderGlassBlock(Block... block) { for(int i = 0 ; i < block.length ; i++) { BlockRenderLayerMap.INSTANCE.putBlock(List.of(block).get(i), RenderLayer.getCutout()); } }

Stairs & Slabs

Trap Doors & Doors

Block State

BlockState 是來用來描述擁有一些性質 (Property) 方塊,他是儲存在 World 裡,並且只能由 World 來改變。

宣告 (In Custom Block):

public static final BooleanProperty LIT = BooleanProperty.of("lit");

字串中為 LIT 的名稱,可用在 json 顯示不同 blockstates 時。

Properties:

IntProperty BooleanProperty DirectionProperty EnumProperty<T>

加入 Property

@Override protected void appendProperties(StateManager.Builder<Block, BlockState> builder) { builder.add(LIT, ...); }

初始化 Property (在建構子內初始化):

this.setDefaultState(this.getDefaultState().with(LIT, false).with()...;

修改 Property:

// check if your function has these parameters World world; BlockPos pos; BlockState state; world.setBlockState(pos, state.with(LIT, true).with()..., Block.NOTIFY_ALL);

Block.NOTIFY_ALL 代表更新後的行為,可加可不加

Voxel Shape

立體像素(Voxel),是體積像素 (Volume Pixel) 的簡稱,概念上類似二維空間的最小單位—像素,是數位資料於三維空間分割上的最小單位。

宣告與初始化變數:

private static final VoxelShape vs = Block.createCuboidShape( double minX, double minY, double minZ, double maxX, double maxY, double maxZ);

※其中的參數皆是小格數

再來我們需要 Override OutlineShape:

@Override public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { return VoxelShapes.union(VoxelShape...); }

union() 是代表將很多不同的 VoxelShape 組合起來。


tags: Minecraft Fabric Modding