diff --git a/static/blocks/blackwood_log_top.png b/static/blocks/blackwood_log_top.png new file mode 100644 index 00000000..4d409beb Binary files /dev/null and b/static/blocks/blackwood_log_top.png differ diff --git a/static/blocks/glowing_blackwood_log.png b/static/blocks/glowing_blackwood_log.png new file mode 100644 index 00000000..d888d862 Binary files /dev/null and b/static/blocks/glowing_blackwood_log.png differ diff --git a/wiki/blocks/oriented-block/en.md b/wiki/blocks/oriented-block/en.md new file mode 100644 index 00000000..92ef2555 --- /dev/null +++ b/wiki/blocks/oriented-block/en.md @@ -0,0 +1,64 @@ +--- +title: Creating an Oriented Block +index: 0 +--- + +# Creating an Oriented Block +Orientable blocks are blocks that are placed in different directions based on where you click to place said block and which direction you're facing when placing said block. + +Blocks such as Oak, Spruce and Birch logs are an example of an oriented block. The following example will show you how to make your own oriented block +with the "Glowing Blackwood Log" as an example block. + + +First off, you will want to make two block model json like the following: +The X, Y, and Z are your blockstate's axis. + +`src/main/resources/assets/example_mod/blockstates/glowing_blackwood.json`: +```json +{ + "variants": { + "axis=x": { + "model": "example_mod:block/glowing_blackwood", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "example_mod:block/glowing_blackwood" + }, + "axis=z": { + "model": "example_mod:block/glowing_blackwood", + "x": 90 + } + } +} +``` + +Then you will need to create a class file for the block you're adding. In this example, the file will be called "GlowingBlackwood.java". + +`src/main/com/example/example_mod/blocks/GlowingBlackwood.java`: +```java +public class BeamBlock extends PillarBlock { + // The following deals with block rotation + @Override + public BlockState rotate(BlockState state, BlockRotation rotation) { + return changeRotation(state, rotation); + } + + public static BlockState changeRotation(BlockState state, BlockRotation rotation) { + return switch (rotation) { + case COUNTERCLOCKWISE_90, CLOCKWISE_90 -> switch (state.get(AXIS)) { + case X -> state.with(AXIS, Direction.Axis.Z); + case Z -> state.with(AXIS, Direction.Axis.X); + default -> state; + }; + default -> state; + }; + } + + // Deals with placing the block properly in accordance to direction. + @Override + public BlockState getPlacementState(ItemPlacementContext context) { + return this.getDefaultState().with(AXIS, context.getSide().getAxis()); + } +} +```