tutorial:blocks
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
tutorial:blocks [2020/06/14 01:00] – fix highlighting + more comments draylar | tutorial:blocks [2022/04/20 18:08] – fixed wrong namespaces ayutac | ||
---|---|---|---|
Line 11: | Line 11: | ||
/* Declare and initialize our custom block instance. | /* Declare and initialize our custom block instance. | ||
- | We set out block material to METAL, which requires a pickaxe to efficiently break. | + | We set our block material to `METAL`, which requires a pickaxe to efficiently break. |
- | | + | |
+ | | ||
+ | | ||
+ | Stone has a hardness of 1.5f and a resistance of 6.0f, while Obsidian has a hardness of 50.0f and a resistance of 1200.0f. | ||
+ | |||
+ | You can find the stats of all vanilla blocks in the class `Blocks`, where you can also reference other blocks. | ||
*/ | */ | ||
- | public static final Block EXAMPLE_BLOCK = new Block(FabricBlockSettings.of(Material.METAL).hardness(4.0f)); | + | public static final Block EXAMPLE_BLOCK = new Block(FabricBlockSettings.of(Material.METAL).strength(4.0f)); |
| | ||
@Override | @Override | ||
Line 25: | Line 30: | ||
==== Registering your Block ==== | ==== Registering your Block ==== | ||
- | Blocks should be registered under the '' | + | Blocks should be registered under the '' |
<code java [enable_line_numbers=" | <code java [enable_line_numbers=" | ||
public class ExampleMod implements ModInitializer { | public class ExampleMod implements ModInitializer { | ||
- | | + | public static final Block EXAMPLE_BLOCK = new Block(FabricBlockSettings.of(Material.METAL).strength(4.0f)); |
- | We set out block material to METAL, which requires a pickaxe to efficiently break. | + | |
- | | + | |
- | */ | + | |
- | | + | |
| | ||
@Override | @Override | ||
Line 52: | Line 53: | ||
public class ExampleMod implements ModInitializer { | public class ExampleMod implements ModInitializer { | ||
- | | + | public static final Block EXAMPLE_BLOCK = new Block(FabricBlockSettings.of(Material.METAL).strength(4.0f)); |
- | We set out block material to METAL, which requires a pickaxe to efficiently break. | + | |
- | | + | |
- | */ | + | |
- | | + | |
| | ||
@Override | @Override | ||
public void onInitialize() { | public void onInitialize() { | ||
Registry.register(Registry.BLOCK, | Registry.register(Registry.BLOCK, | ||
- | Registry.register(Registry.ITEM, | + | Registry.register(Registry.ITEM, |
} | } | ||
} | } | ||
Line 91: | Line 88: | ||
</ | </ | ||
- | The block model file defines the shape and texture of your block. Our model will parent | + | The block model file defines the shape and texture of your block. Our model will have '' |
<code JavaScript src/ | <code JavaScript src/ | ||
Line 102: | Line 99: | ||
</ | </ | ||
- | In most cases, you will want the block to look the same in item form. You can make an item model that parents | + | In most cases, you will want the block to look the same in item form. You can make an item model that has the block model file as a parent, which makes it appear exactly like the block: |
<code JavaScript src/ | <code JavaScript src/ | ||
Line 136: | Line 133: | ||
] | ] | ||
} | } | ||
+ | </ | ||
+ | |||
+ | In minecraft 1.17, there has been a change for breaking blocks. Now, to define harvest tools and harvest levels, we need to use tags. Read about tags at: [[tutorial: | ||
+ | |||
+ | Harvest tool: src/ | ||
+ | Harvest level: src/ | ||
+ | |||
+ | <code JavaScript src/ | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ] | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <code JavaScript src/ | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ] | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | For the harvest level tags (needs_stone_tool, | ||
+ | |||
+ | |||
+ | <code java [enable_line_numbers=" | ||
+ | public static final Block EXAMPLE_BLOCK = new ExampleBlock(FabricBlockSettings.of(Material.METAL).strength(4.0f).requiresTool()); | ||
</ | </ | ||
===== Creating a Custom Block Class ===== | ===== Creating a Custom Block Class ===== | ||
- | The above approach works well for simple | + | The above approach works well for simple |
<code java [enable_line_numbers=" | <code java [enable_line_numbers=" | ||
Line 153: | Line 180: | ||
You can override methods in the block class for custom functionality. Here's an implementation of the '' | You can override methods in the block class for custom functionality. Here's an implementation of the '' | ||
- | <code java [enable_line_numbers=" | + | <code java [enable_line_numbers=" |
- | @Override | + | |
public class ExampleBlock extends Block { | public class ExampleBlock extends Block { | ||
Line 163: | Line 189: | ||
@Override | @Override | ||
public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { | public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { | ||
- | if(!world.isClient) { | + | if (!world.isClient) { |
player.sendMessage(new LiteralText(" | player.sendMessage(new LiteralText(" | ||
} | } | ||
Line 174: | Line 200: | ||
To use your custom block class, replace //new Block// with //new ExampleBlock//: | To use your custom block class, replace //new Block// with //new ExampleBlock//: | ||
- | <code java [enable_line_numbers=" | + | <code java [enable_line_numbers=" |
public class ExampleMod implements ModInitializer { | public class ExampleMod implements ModInitializer { | ||
- | | + | public static final ExampleBlock EXAMPLE_BLOCK = new ExampleBlock(FabricBlockSettings.of(Material.STONE).hardness(4.0f)); |
- | We set out block material to METAL, which requires a pickaxe to efficiently break. | + | |
- | | + | |
- | */ | + | |
- | | + | |
| | ||
@Override | @Override | ||
Line 197: | Line 219: | ||
{{: | {{: | ||
- | To fix this, we have to define the //VoxelShape// of the new block: | + | To fix this, we have to define the '' |
< | < | ||
- | @Override | + | @Override |
- | | + | |
| | ||
} | } |
tutorial/blocks.txt · Last modified: 2024/04/15 01:52 by solidblock