Veuillez noter que la langue originale de ce wiki est l'anglais et que les versions traduites peuvent ne pas être à jour en comparaison à la version anglaise.



Cet article n'est pas encore traduit en ⁨Français⁩, mais nous avons trouvé une version en ⁨Anglais⁩.

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:

{
    "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:

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