🇬🇧 English
🇬🇧 English
Appearance
🇬🇧 English
🇬🇧 English
Appearance
This page is written for version:
1.21.4
This page is written for version:
1.21.4
Een block staat is een stukje data gekoppeld aan een enkel blok in de Minecraft wereld, wat informatie bevat over het blok in de vorm van eigenschappen - hier een paar voorbeelden van eigenschappen die vanilla opslaat:
Je kunt je dus wel inbeelden waarom ze zo handig zijn - ze vermijden de noodzaak om gegevens in een blok entiteit op te slaan - wat de wereld grootte verkleint en TPS-problemen voorkomt!
Blok staat definities kunnen gevonden worden in de assets/<mod id here>/blockstates
folder.
Minecraft heeft al een paar zelfgemaakte classen die je gemakkelijk bepaalde types blok laat maken - dit voorbeeld gaat over het maken van een blok met de axis
(as) eigenschap door een "Gecondenseerde Eiken Boomstam" blok te maken.
Met de vanilla class PillarBlock
kan het blok in de X-, Y- of Z-as worden geplaatst.
public static final RegistryKey<Block> CONDENSED_OAK_LOG_KEY = RegistryKey.of(
RegistryKeys.BLOCK,
Identifier.of(FabricDocsReference.MOD_ID, "condensed_oak_log")
);
public static final Block CONDENSED_OAK_LOG = register(
new PillarBlock(
AbstractBlock.Settings.create()
.registryKey(CONDENSED_OAK_LOG_KEY)
.sounds(BlockSoundGroup.WOOD)
), CONDENSED_OAK_LOG_KEY, true
);
Pilaren hebben twee texturen, de bovenkant en de zijkant - ze maken gebruik van het block/cube_collumn
model.
Zoals gewoonlijk, met alle blok texturen, kunnen de textuurbestanden worden gevonden in assets/<mod id here>/textures/block
Omdat de pilaar twee posities heeft, horizontaal en verticaal, zullen we twee verschillende modelbestanden moeten maken:
condensed_oak_log_horizontal.json
wat het block/cube_column_horizontal
model uitbreidt.condensed_oak_log.json
wat het block/cube_column
model uitbreidt.Hier een voorbeeld van het bestand condensed_oak_log_horizontal.json
:
Not Found: /home/runner/work/fabric-docs/fabric-docs/reference/latest/src/main/resources/assets/fabric-docs-reference/models/block/condensed_oak_log_horizontal.json
INFO
Remember, blockstate files can be found in the assets/<mod id here>/blockstates
folder, the name of the blockstate file should match the block ID used when registering your block in the ModBlocks
class. For instance, if the block ID is condensed_oak_log
, the file should be named condensed_oak_log.json
.
Voor een meer diepgaande blik op alle modificaties die beschikbaar zijn in de blockstate-bestanden, ga naar de pagina Minecraft Wiki - Models (Block States).
Vervolgens zullen we een blok staat bestand moeten maken. Het blok staat bestand is waar de magie gebeurt: pilaren hebben drie assen, dus we zullen specifieke modellen gebruiken voor de volgende situaties:
axis=x
- Wanneer het blok langs de X-as wordt geplaatst, roteren we het model in de positieve X-richting.axis=y
- Wanneer het blok langs de Y-as wordt geplaatst, gebruiken we het normale verticale model.axis=z
- Wanneer het blok langs de Z-as wordt geplaatst, roteren we het model in de positieve X-richting.Not Found: /home/runner/work/fabric-docs/fabric-docs/reference/latest/src/main/resources/assets/fabric-docs-reference/blockstates/condensed_oak_log.json
Zoals altijd moet je een vertaling voor uw blok maken, en een voorwerp model dat de "parent" is van een van de twee modellen.
Aangepaste blok staten zijn geweldig als je blok unieke eigenschappen heeft - soms zul je ook zien dat je blok vanilla eigenschappen kan hergebruiken.
Dit voorbeeld creëert een unieke boolean eigenschap met de naam activated
- wanneer een speler met de rechtermuisknop op het blok klikt, gaat het blok van activated=false
naar activated=true
- waardoor de textuur net zo wordt gewijzigd.
Ten eerste moet je de eigenschap zelf maken - sinds dit een boolean is, zullen we de BooleanProperty.of
methode gebruiken.
public class PrismarineLampBlock extends Block {
public static final BooleanProperty ACTIVATED = BooleanProperty.of("activated");
}
Vervolgens moeten we de eigenschap toevoegen aan de blok staat manager in de methode appendProperties
. Je zult de methode moeten overschrijven om toegang te krijgen tot de builder:
@Override
protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
builder.add(ACTIVATED);
}
Je moet ook een standaardstaat instellen voor de eigenschap activated
in de constructor van jouw aangepaste blok.
public PrismarineLampBlock(Settings settings) {
super(settings);
// Set the default state of the block to be deactivated.
setDefaultState(getDefaultState().with(ACTIVATED, false));
}
WARNING
Vergeet niet om je blok te registreren met de zelfgemaakte class in plaats val Block
!
In dit voorbeeld wordt de boolean eigenschap activated
omgedraaid wanneer de speler interactie heeft met het blok. We kunnen hiervoor de onUse
methode overschrijven:
@Override
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
if (!player.getAbilities().allowModifyWorld) {
// Skip if the player isn't allowed to modify the world.
return ActionResult.PASS;
} else {
// Get the current value of the "activated" property
boolean activated = state.get(ACTIVATED);
// Flip the value of activated and save the new blockstate.
world.setBlockState(pos, state.with(ACTIVATED, !activated));
// Play a click sound to emphasise the interaction.
world.playSound(player, pos, SoundEvents.BLOCK_COMPARATOR_CLICK, SoundCategory.BLOCKS, 1.0F, 1.0F);
return ActionResult.SUCCESS;
}
}
Voordat je het blok staat bestand maakt, moet je texturen opgeven voor zowel de geactiveerde als de gedeactiveerde staten van het blok, evenals voor het blokmodel.
Gebruik je kennis van blokmodellen om twee modellen voor het blok te maken: één voor de geactiveerde staat en één voor de gedeactiveerde staat. Zodra je dat gedaan hebt, kun je het blok staat bestand gaan maken.
Omdat je een nieuwe eigenschap hebt gemaakt, moet je het blok staat bestand voor het blok bijwerken om rekening te houden met die eigenschap.
Als je meerdere eigenschappen hebt voor een blok, moet je met alle mogelijke combinaties rekening houden. activated
en axis
zouden bijvoorbeeld leiden tot 6 combinaties (twee mogelijke waarden voor activated
en drie mogelijke waarden voor axis
).
Omdat dit blok maar twee mogelijke varianten heeft, omdat er maar een eigenschap is (activated
), zal de blok staat JSON er ongeveer zo uitzien:
Not Found: /home/runner/work/fabric-docs/fabric-docs/reference/latest/src/main/resources/assets/fabric-docs-reference/blockstates/prismarine_lamp.json
Omdat het voorbeeldblok een lamp is, zullen we er ook voor moeten zorgen dat het licht uitstraalt als de eigenschap activated
waar is. Dit kan worden gedaan via de blokinstellingen die aan de constructor worden doorgegeven bij het registreren van het blok.
U kunt de luminance
-methode gebruiken om het lichtniveau in te stellen dat door het blok wordt uitgezonden. We kunnen een statische methode maken in de PrismarineLampBlock
class om het lichtniveau terug te geven op basis van de activated
-eigenschap, en dit doorgeven als een methodereferentie naar de luminance
-methode:
public static int getLuminance(BlockState currentBlockState) {
// Get the value of the "activated" property.
boolean activated = currentBlockState.get(PrismarineLampBlock.ACTIVATED);
// Return a light level if activated = true
return activated ? 15 : 0;
}
public static final RegistryKey<Block> PRISMARINE_LAMP_KEY = RegistryKey.of(
RegistryKeys.BLOCK,
Identifier.of(FabricDocsReference.MOD_ID, "prismarine_lamp")
);
public static final Block PRISMARINE_LAMP = register(
new PrismarineLampBlock(
AbstractBlock.Settings.create()
.registryKey(PRISMARINE_LAMP_KEY)
.sounds(BlockSoundGroup.LANTERN)
.luminance(PrismarineLampBlock::getLuminance)
), PRISMARINE_LAMP_KEY, true
);
Zodra je klaar bent met alles, zal het resultaat er ongeveer zo uitzien: