Blockfärbung
Manchmal möchtest du vielleicht, dass das Aussehen von Blöcken im Spiel speziell behandelt wird. Beispielsweise wird bei einigen Blöcken, wie zum Beispiel Gras, eine Färbung angewendet.
Schauen wir uns einmal an, wie wir das Aussehen eines Blocks verändern können.
In diesem Beispiel registrieren wir einen Block. Wenn du mit diesem Vorgang nicht vertraut bist, lies bitte zuerst die Informationen zur Registrierung eines Blocks.
java
public static final Block WAXCAP = register(
"waxcap",
Block::new,
BlockBehaviour.Properties.of()
.noCollision()
.instabreak()
.offsetType(BlockBehaviour.OffsetType.XYZ),
true
);1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Stelle sicher, folgendes hinzuzufügen:
- Ein Blockzustand in
/blockstates/waxcap.json - Ein Modell in
/models/block/waxcap.json - Eine Textur in
/textures/block/waxcap.png
Wenn alles korrekt ist, kannst du den Block im Spiel sehen.

Block Farbquellen
Auch wenn unser Block im Spiel gut aussieht, ist seine Textur graustufig. Wir könnten dynamisch eine Färbung anwenden, ähnlich wie Vanilla Laub seine Farbe je nach Biom ändert.
Die Fabric API stellt BlockColorRegistry zur Verfügung, um eine Liste an BlockTintSource zu registrieren, den wir verwenden werden, um den Block dynamisch einzufärben.
Verwenden wir diese API, um eine Färbung zu registrieren, sodass unser Waxcap-Block grün aussieht, wenn er auf Gras platziert wird, und ansonsten braun.
Registriere deinen Block in deinem Client Initialisierer zusammen mit der entsprechenden Logik in der ColorProviderRegistry.
java
BlockColorRegistry.register(List.of(new BlockTintSource() {
@Override
public int colorInWorld(BlockState state, BlockAndTintGetter level, BlockPos pos) {
BlockState stateBelow = level.getBlockState(pos.below());
if (stateBelow.is(Blocks.GRASS_BLOCK)) {
return 0xFF98FB98; // Color code in hex format
}
return 0xFFFFDAB9; // Color code in hex format
}
@Override
public int color(BlockState state) {
return 0xFFFFDAB9; // Color code in hex format
}
}), ModBlocks.WAXCAP);1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Nun wird der Block entsprechend seiner Position eingefärbt.


