有没有什么方法可以在代码中修改方块部分颜色(类似替换)
有没有什么方法可以在代码中修改方块部分颜色(类似替换)
最简单的BlockState
,然后是IBakeModel
最后是TESR
我出过1.14 BlockState
的视频。
@OnlyIn(Dist.CLIENT)
public class CustomBlockColor implements IBlockColor {
@Override
public int getColor(BlockState state, @Nullable ILightReader light, @Nullable BlockPos pos, int tintIndex) {
if(state.getBlock() instanceof ColorBlock) {
return ((ColorBlock)(state.getBlock())).getColorValue();
} else {
return 0x000000;
}
}
}
public class ColorBlock extends Block {
protected DyeColor color;
public ColorBlock(Properties properties, DyeColor color) {
super(properties);
this.color = color;
}
public int getColorValue() {
return color.getColorValue();
}
// default function from source code
public static Direction getFacingFromEntity(BlockPos clickedBlock, LivingEntity entity) {
Vec3d vec = entity.getPositionVec();
return Direction.getFacingFromVector(
(float) (vec.x - clickedBlock.getX()),
(float) (vec.y - clickedBlock.getY()),
(float) (vec.z - clickedBlock.getZ())
);
}
}
@SubscribeEvent
public static void onBlockColor(ColorHandlerEvent.Block event) {
LOGGER.info("Hello from onBlockColor RegistryClient");
event.getBlockColors().register(new CustomBlockColor(),
ModBlocks.OBSIDIAN_BLOCK,
ModBlocks.OBSIDIAN_BLOCK_RED
);
}
这个相当于覆盖颜色,可能不完全符合要求,但是是不是可能叠加两层贴图
没看懂你的意思。
你的代码什么意思。
这个方法就是forge官方文档中提到,IBlockColor与IItemColor方法,ColorBlock类仿照其他可以染色的方块,比如树叶什么的写的,最后需要在客户端注册这个IBlockColor类,并告诉mc,有什么方块类需要用自定义的染色方法来进行渲染,同时模型文件定义时,需要定义一个tintindex的参数。
IBlcokColor
是只能全换颜色的,如果你要部分的改变颜色要用 IBlockModel
和 TER
。