tutorial:blockstate
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
tutorial:blockstate [2024/08/26 01:19] – solidblock | tutorial:blockstate [2025/04/01 09:21] (current) – [Adding models and blockstates definitions for your blockstates] solidblock | ||
---|---|---|---|
Line 2: | Line 2: | ||
====== Giving a block state ====== | ====== Giving a block state ====== | ||
- | Every type of block in Minecraft is represented by a singular '' | + | Every type of block in Minecraft is represented by a singular '' |
- | This is what '' | + | ===== Block state properties ===== |
+ | |||
+ | Each block can have zero, one or multiple **block state properties**. Each block state property can have at lease two values. Vanilla properties, can be found in '' | ||
+ | |||
+ | Several examples: | ||
+ | * [[directionalblock|Directional block]], the block state property used is '' | ||
+ | * [[waterloggable|Waterloggable block]], the block state property used is '' | ||
+ | |||
+ | ===== Custom block state property: a chargeable block as an example ===== | ||
+ | |||
+ | Say we wanted a block that can summon lightning, but only when charged up. | ||
| | ||
First we define the boolean property of the block - whether or not it is charged (careful not to import the wrong '' | First we define the boolean property of the block - whether or not it is charged (careful not to import the wrong '' | ||
- | In fact, you can also use existing properties defined in vanilla, which can be found in '' | + | If you intend to define other types of properties, you may use '' |
Create the class first: | Create the class first: | ||
Line 24: | Line 34: | ||
<code java> | <code java> | ||
public final class TutorialBlocks { | public final class TutorialBlocks { | ||
- | public static final Chargeable | + | |
+ | | ||
+ | |||
+ | // For versions since 1.21.2: | ||
+ | public static final Block CHARGEABLE_BLOCK = register(" | ||
| | ||
// [...] | // [...] | ||
Line 72: | Line 86: | ||
if (world.getBlockState(pos).get(CHARGED)){ | if (world.getBlockState(pos).get(CHARGED)){ | ||
// Summoning the Lighting Bolt at the block | // Summoning the Lighting Bolt at the block | ||
- | LightningEntity lightningEntity = EntityType.LIGHTNING_BOLT.create(world); | + | LightningEntity lightningEntity = EntityType.LIGHTNING_BOLT.create(world, SpawnReason.MOB_SUMMONED); |
lightningEntity.refreshPositionAfterTeleport(Vec3d.ofBottomCenter(pos)); | lightningEntity.refreshPositionAfterTeleport(Vec3d.ofBottomCenter(pos)); | ||
world.spawnEntity(lightningEntity); | world.spawnEntity(lightningEntity); | ||
Line 83: | Line 97: | ||
</ | </ | ||
- | ==== Adding models for your blockstates ==== | + | ==== Adding models |
- | You can also make the texture and model of your block change based on the state. This is done through a JSON file called a "blockstate JSON". All blocks need a blockstate JSON, whether they have multiple states or not, but the contents of the JSON can be as simple or complex as you like. If you want to change the textures of your block based on the state, you //will// need multiple models. | + | You can also make the texture and model of your block change based on the state. This is done through a JSON file called a "**block states definition**". All blocks need a blockstates definition, whether they have multiple states or not, but the contents of it can be as simple or complex as you like. If you want to change the textures of your block based on the state, you //will// need multiple models. |
- | Let's say you register an instance of '' | + | Let's say you register an instance of '' |
<code JavaScript resources/ | <code JavaScript resources/ | ||
Line 115: | Line 129: | ||
</ | </ | ||
- | In this JSON, there are two variants, one for each possibility of the '' | + | In this blockstates definition, there are two variants, one for each possibility of the '' |
Variants are based on possible permutations of the properties added to your block. A property can be totally ignored in the blockstate JSON if you want, like in the first blockstate JSON where we ignored the '' | Variants are based on possible permutations of the properties added to your block. A property can be totally ignored in the blockstate JSON if you want, like in the first blockstate JSON where we ignored the '' | ||
- | This is only a simple introduction to blockstate JSONs. All of the tricks you can do with blockstate and model JSONs are documented on the [[https:// | + | This is only a simple introduction to blockstates definitions. You can visit Minecraft Wiki for all of the tricks you can do with [[https:// |
==== A note about performance ==== | ==== A note about performance ==== |
tutorial/blockstate.1724635157.txt.gz · Last modified: 2024/08/26 01:19 by solidblock