Manchmal möchtest du vielleicht, dass das Aussehen von Blöcken im Spiel speziell behandelt wird. Beispielsweise können einige Blöcke transparent erscheinen, während andere eine Färbung erhalten.
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_BLOCK = Registry.register(
BuiltInRegistries.BLOCK,
Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, "waxcap"),
new Block(BlockBehaviour.Properties.of()
.noCollision()
.instabreak()
.offsetType(BlockBehaviour.OffsetType.XYZ)
.setId(WAXCAP_BLOCK_KEY)
));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. Du wirst jedoch feststellen, dass der Block nach dem Platzieren nicht richtig aussieht.

Das liegt daran, dass eine Textur mit Transparenz ein paar zusätzliche Einstellungen benötigt.
Block Aussehen manipulieren
Selbst wenn die Textur deines Blocks transparent oder durchscheinend ist, erscheint sie dennoch undurchsichtig. Um dies zu beheben, musst du die Chunk-Abschnitt-Ebene deines Blocks einstellen.
Chunk-Abschnitts-Ebenen sind Kategorien, die zum Gruppieren verschiedener Arten von Blockoberflächen für das Rendern verwendet werden. Dies erlaubt dem Spiel für jeden Typ die richtigen visuellen Effekte und Optimierungen zu verwenden.
Wir müssen unseren Block mit der richtigen Chunk-Abschnitt-Ebene registrieren. Vanilla bietet die folgenden Optionen.
SOLID: Der Standard, ein durchgehender Block ohne Transparenz.CUTOUTundCUTOUT_MIPPED: Ein Block, der Transparenz nutzt, zum Beispiel Glas oder Blumen.CUTOUT_MIPPEDwird auf Distanz besser aussehen.TRANSLUCENT: Ein Block, der durchscheinende (teilweise transparente) Pixel verwendet, zum Beispiel gefärbtes Glas oder Wasser.
Unser Beispiel hat Transparenz, daher wird es CUTOUT verwenden.
Registriere deinen Block in deinem Client Initialisierer mit der richtigen ChunkSectionLayer unter Verwendung der Fabric-API BlockRenderLayerMap.
java
BlockRenderLayerMap.putBlock(ExampleModAppearance.WAXCAP_BLOCK, ChunkSectionLayer.CUTOUT);1
Jetzt sollte dein Block die richtige Transparenz aufweisen.

Block Farb Provider
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 ColorProviderRegistry zur Verfügung, um einen Provider einer Farbquelle 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
ColorProviderRegistry.BLOCK.register((blockState, blockAndTintGetter, blockPos, i) -> {
if (blockAndTintGetter != null && blockPos != null) {
BlockState stateBelow = blockAndTintGetter.getBlockState(blockPos.below());
if (stateBelow.is(Blocks.GRASS_BLOCK)) {
return 0x98FB98; // Color code in hex format
}
}
return 0xFFDAB9; // Color code in hex format
}, ExampleModAppearance.WAXCAP_BLOCK);1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Nun wird der Block entsprechend seiner Position eingefärbt.


