package choonster.testmod3.client.model; import choonster.testmod3.init.ModBlocks; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.color.BlockColors; import net.minecraft.client.renderer.color.IBlockColor; import net.minecraft.client.renderer.color.IItemColor; import net.minecraft.client.renderer.color.ItemColors; import net.minecraft.item.ItemBlock; import net.minecraft.world.ColorizerGrass; import net.minecraft.world.biome.BiomeColorHelper; /** * Registers {@link IBlockColor}/{@link IItemColor} handlers for this mod's blocks/items. * * @author Choonster */ public class ModColourManager { private static final Minecraft MINECRAFT = Minecraft.getMinecraft(); /** * Register the colour handlers. */ public static void registerColourHandlers() { final BlockColors blockColors = MINECRAFT.getBlockColors(); final ItemColors itemColors = MINECRAFT.getItemColors(); registerBlockColourHandlers(blockColors); registerItemColourHandlers(blockColors, itemColors); } /** * Register the {@link IBlockColor} handlers. * * @param blockColors The BlockColors instance */ private static void registerBlockColourHandlers(final BlockColors blockColors) { // Use the grass colour of the biome or the default grass colour final IBlockColor grassColourHandler = (state, blockAccess, pos, tintIndex) -> { if (blockAccess != null && pos != null) { return BiomeColorHelper.getGrassColorAtPos(blockAccess, pos); } return ColorizerGrass.getGrassColor(0.5D, 1.0D); }; blockColors.registerBlockColorHandler(grassColourHandler, ModBlocks.WATER_GRASS); } /** * Register the {@link IItemColor} handlers * * @param blockColors The BlockColors instance * @param itemColors The ItemColors instance */ private static void registerItemColourHandlers(final BlockColors blockColors, final ItemColors itemColors) { // Use the Block's colour handler for an ItemBlock final IItemColor itemBlockColourHandler = (stack, tintIndex) -> { @SuppressWarnings("deprecation") final IBlockState state = ((ItemBlock) stack.getItem()).getBlock().getStateFromMeta(stack.getMetadata()); return blockColors.colorMultiplier(state, null, null, tintIndex); }; itemColors.registerItemColorHandler(itemBlockColourHandler, ModBlocks.WATER_GRASS); } }