方块着色
有时,你可能希望在游戏中对方块的外观进行特殊处理。 例如,一些方块,比如草,会被应用一些着色。
我们来看看如何操控方块的外观。
在本例中,我们先来注册一个方块。 如果你不熟悉这个过程,请先阅读方块注册。
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
请务必添加:
如果一切正确,你应该能在游戏中看到这个方块。

方块着色源
我们的方块尽管在游戏中看起来不错,但纹理是灰度的。 我们可以动态地应用颜色着色,就像原版游戏中的树叶会根据生物群系变色一样。
Fabric API 提供了 BlockColorRegistry 来注册 BlockTintSource 的列表,可以用来来动态地为方块着色。
我们使用这个 API 注册一个颜色,这样当我们的 Waxcap 块放置在草地上时是绿色的,其他情况则是棕色的。
在你的客户端初始化器中,将你的代码块注册到 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
现在,方块的颜色将根据其放置的位置而变化。


