Color handling

This commit is contained in:
Vincent Lee committed 2016-03-18 18:59:23 -05:00
1 parent 1c608d4636
commit 3dd877e69a
23 files changed
+109 -76

No files matched your search

@@ -0,0 +1,74 @@
package vazkii.botania.client.core.handler;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemMeshDefinition;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
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.EnumDyeColor;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.common.block.BlockCamo;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.block.tile.TileCamo;
import vazkii.botania.common.item.IColorable;
import vazkii.botania.common.item.ModItems;
public final class ColorHandler {
public static void init() {
BlockColors blocks = Minecraft.getMinecraft().getBlockColors();
// 16 colors
blocks.registerBlockColorHandler(
new IBlockColor() {
@Override
public int colorMultiplier(IBlockState state, IBlockAccess p_186720_2_, BlockPos pos, int tintIndex) {
return state.getValue(BotaniaStateProps.COLOR).getMapColor().colorValue;
}
},
ModBlocks.specialFlower, ModBlocks.manaBeacon, ModBlocks.petalBlock, ModBlocks.unstableBlock);
// Platforms
blocks.registerBlockColorHandler(
new IBlockColor() {
@Override
public int colorMultiplier(IBlockState state, IBlockAccess world, BlockPos pos, int tintIndex) {
TileEntity tile = world.getTileEntity(pos);
if(tile instanceof TileCamo) {
TileCamo camo = (TileCamo) tile;
IBlockState camoState = camo.camoState;
if(camoState != null)
return camoState.getBlock() instanceof BlockCamo ? 0xFFFFFF : Minecraft.getMinecraft().getBlockColors().colorMultiplier(camoState, world, pos, tintIndex);
}
return 0xFFFFFF;
}
}, ModBlocks.platform);
ItemColors items = Minecraft.getMinecraft().getItemColors();
items.registerItemColorHandler(new IItemColor() {
@Override
public int getColorFromItemstack(ItemStack stack, int tintIndex) {
Item item = stack.getItem();
if (item instanceof IColorable) {
return ((IColorable) item).getColorFromItemStack(stack, tintIndex);
} else {
return 0xFFFFFF;
}
}
}, ModItems.dye, ModItems.petal, ModItems.manaGun, ModItems.manaMirror, ModItems.manaTablet, ModItems.signalFlare,
ModItems.spellCloth, ModItems.brewFlask, ModItems.brewVial, ModItems.incenseStick, ModItems.bloodPendant, ModItems.enderDagger,
ModItems.terraPick, ModItems.lens, Item.getItemFromBlock(ModBlocks.manaBeacon), Item.getItemFromBlock(ModBlocks.petalBlock), Item.getItemFromBlock(ModBlocks.unstableBlock));
}
private ColorHandler() {}
}
@@ -48,6 +48,7 @@ import vazkii.botania.client.core.handler.BaubleRenderHandler;
import vazkii.botania.client.core.handler.BotaniaPlayerController;
import vazkii.botania.client.core.handler.BoundTileRenderer;
import vazkii.botania.client.core.handler.ClientTickHandler;
import vazkii.botania.client.core.handler.ColorHandler;
import vazkii.botania.client.core.handler.ContributorFancinessHandler;
import vazkii.botania.client.core.handler.CorporeaAutoCompleteHandler;
import vazkii.botania.client.core.handler.DebugHandler;
@@ -180,6 +181,7 @@ public class ClientProxy extends CommonProxy {
MinecraftForge.EVENT_BUS.register(MiscellaneousIcons.INSTANCE);
ModelHandler.registerModels();
ColorHandler.init();
initRenderers();
}
@@ -89,19 +89,6 @@ public abstract class BlockCamo extends BlockMod {
return false;
}
@Override
@SideOnly(Side.CLIENT)
public int colorMultiplier(IBlockAccess par1World, BlockPos pos, int pass) {
TileEntity tile = par1World.getTileEntity(pos);
if(tile instanceof TileCamo) {
TileCamo camo = (TileCamo) tile;
IBlockState state = camo.camoState;
if(state != null)
return state.getBlock() instanceof BlockCamo ? 0xFFFFFF : state.getBlock().getRenderColor(state);
}
return 0xFFFFFF;
}
@Override
public boolean hasTileEntity(IBlockState state) {
return true;
@@ -193,11 +193,6 @@ public abstract class BlockModDoubleFlower extends BlockDoublePlant implements I
return ImmutableList.of();
}
@Override
public int colorMultiplier(IBlockAccess blockAccess, BlockPos pos, int pass) {
return 16777215;
}
@Override
public void getSubBlocks(Item p_149666_1_, CreativeTabs p_149666_2_, List<ItemStack> p_149666_3_) {
for(int i = 0; i < COUNT; ++i)
@@ -286,17 +286,6 @@ public class BlockSpecialFlower extends BlockFlower implements ISpecialFlower, I
((TileSpecialFlower) world.getTileEntity(pos)).onBlockAdded(world, pos, state);
}
@Override
public int getRenderColor(IBlockState state) {
return state.getValue(BotaniaStateProps.COLOR)
.getMapColor().colorValue;
}
@Override
public int colorMultiplier(IBlockAccess world, BlockPos pos, int pass) {
return getRenderColor(world.getBlockState(pos));
}
@Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) {
ItemStack stack = player.getCurrentEquippedItem();
@@ -98,16 +98,6 @@ public class BlockManaBeacon extends BlockMod implements ILexiconable {
return getMetaFromState(state);
}
@Override
public int getRenderColor(IBlockState state) {
return state.getValue(BotaniaStateProps.COLOR).getMapColor().colorValue;
}
@Override
public int colorMultiplier(IBlockAccess par1iBlockAccess, BlockPos pos, int pass) {
return getRenderColor(par1iBlockAccess.getBlockState(pos));
}
@Override
public LexiconEntry getEntry(World world, BlockPos pos, EntityPlayer player, ItemStack lexicon) {
return LexiconData.unstableBlocks;
@@ -78,16 +78,6 @@ public class BlockPetalBlock extends BlockMod implements ILexiconable {
return super.setUnlocalizedName(par1Str);
}
@Override
public int getRenderColor(IBlockState state) {
return state.getValue(BotaniaStateProps.COLOR).getMapColor().colorValue;
}
@Override
public int colorMultiplier(IBlockAccess world, BlockPos pos, int pass) {
return getRenderColor(world.getBlockState(pos));
}
@Override
public int damageDropped(IBlockState state) {
return getMetaFromState(state);
@@ -110,16 +110,6 @@ public class BlockUnstable extends BlockMod implements ILexiconable {
return getMetaFromState(state);
}
@Override
public int getRenderColor(IBlockState state) {
return state.getValue(BotaniaStateProps.COLOR).getMapColor().colorValue;
}
@Override
public int colorMultiplier(IBlockAccess par1iBlockAccess, BlockPos pos, int pass) {
return getRenderColor(par1iBlockAccess.getBlockState(pos));
}
@Override
public LexiconEntry getEntry(World world, BlockPos pos, EntityPlayer player, ItemStack lexicon) {
return LexiconData.unstableBlocks;
@@ -0,0 +1,7 @@
package vazkii.botania.common.item;
import net.minecraft.item.ItemStack;
public interface IColorable {
int getColorFromItemStack(ItemStack stack, int tintIndex);
}
@@ -17,7 +17,7 @@ import net.minecraft.item.EnumDyeColor;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
public class Item16Colors extends ItemMod {
public class Item16Colors extends ItemMod implements IColorable {
public Item16Colors(String name) {
super();
@@ -47,7 +47,7 @@ import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class ItemManaGun extends ItemMod implements IManaUsingItem {
public class ItemManaGun extends ItemMod implements IManaUsingItem, IColorable {
private static final String TAG_LENS = "lens";
private static final String TAG_CLIP = "clip";
@@ -33,7 +33,7 @@ import vazkii.botania.common.block.tile.mana.TilePool;
import vazkii.botania.common.core.helper.ItemNBTHelper;
import vazkii.botania.common.lib.LibItemNames;
public class ItemManaMirror extends ItemMod implements IManaItem, ICoordBoundItem, IManaTooltipDisplay {
public class ItemManaMirror extends ItemMod implements IManaItem, ICoordBoundItem, IManaTooltipDisplay, IColorable {
private static final String TAG_MANA = "mana";
private static final String TAG_MANA_BACKLOG = "manaBacklog";
@@ -26,7 +26,7 @@ import vazkii.botania.api.mana.IManaTooltipDisplay;
import vazkii.botania.common.core.helper.ItemNBTHelper;
import vazkii.botania.common.lib.LibItemNames;
public class ItemManaTablet extends ItemMod implements IManaItem, ICreativeManaProvider, IManaTooltipDisplay {
public class ItemManaTablet extends ItemMod implements IManaItem, ICreativeManaProvider, IManaTooltipDisplay, IColorable {
private static final int MAX_MANA = 500000;
@@ -36,7 +36,7 @@ import vazkii.botania.common.core.helper.ItemNBTHelper;
import vazkii.botania.common.entity.EntitySignalFlare;
import vazkii.botania.common.lib.LibItemNames;
public class ItemSignalFlare extends ItemMod {
public class ItemSignalFlare extends ItemMod implements IColorable {
private static final String TAG_COLOR = "color";
@@ -21,7 +21,7 @@ import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class ItemSpellCloth extends ItemMod {
public class ItemSpellCloth extends ItemMod implements IColorable {
public ItemSpellCloth() {
setMaxDamage(35);
@@ -1,19 +1,21 @@
package vazkii.botania.common.item.block;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.common.item.IColorable;
public class ItemBlockWithMetaNameAndColor extends ItemBlockWithMetadataAndName {
public class ItemBlockWithMetaNameAndColor extends ItemBlockWithMetadataAndName implements IColorable {
public ItemBlockWithMetaNameAndColor(Block block) {
super(block);
}
@Override
@SideOnly(Side.CLIENT)
public int getColorFromItemStack(ItemStack stack, int renderPass)
{
return this.block.getRenderColor(this.block.getStateFromMeta(stack.getMetadata()));
public int getColorFromItemStack(ItemStack stack, int renderPass) {
return Minecraft.getMinecraft().getBlockColors()
.colorMultiplier(this.block.getStateFromMeta(stack.getMetadata()), null, null, renderPass);
}
}
@@ -33,9 +33,10 @@ import vazkii.botania.client.core.handler.ClientTickHandler;
import vazkii.botania.common.achievement.IPickupAchievement;
import vazkii.botania.common.achievement.ModAchievements;
import vazkii.botania.common.core.helper.ItemNBTHelper;
import vazkii.botania.common.item.IColorable;
import vazkii.botania.common.item.ItemMod;
public abstract class ItemBrewBase extends ItemMod implements IBrewItem, IPickupAchievement {
public abstract class ItemBrewBase extends ItemMod implements IBrewItem, IPickupAchievement, IColorable {
private static final String TAG_BREW_KEY = "brewKey";
private static final String TAG_SWIGS_LEFT = "swigsLeft";
@@ -28,10 +28,11 @@ import vazkii.botania.api.brew.IBrewContainer;
import vazkii.botania.api.brew.IBrewItem;
import vazkii.botania.client.core.handler.ClientTickHandler;
import vazkii.botania.common.core.helper.ItemNBTHelper;
import vazkii.botania.common.item.IColorable;
import vazkii.botania.common.item.ItemMod;
import vazkii.botania.common.lib.LibItemNames;
public class ItemIncenseStick extends ItemMod implements IBrewItem, IBrewContainer {
public class ItemIncenseStick extends ItemMod implements IBrewItem, IBrewContainer, IColorable {
private static final String TAG_BREW_KEY = "brewKey";
public static final int TIME_MULTIPLIER = 60;
@@ -44,10 +44,11 @@ import vazkii.botania.client.core.handler.ClientTickHandler;
import vazkii.botania.client.core.handler.MiscellaneousIcons;
import vazkii.botania.client.core.helper.IconHelper;
import vazkii.botania.common.core.helper.ItemNBTHelper;
import vazkii.botania.common.item.IColorable;
import vazkii.botania.common.lib.LibItemNames;
import baubles.api.BaubleType;
public class ItemBloodPendant extends ItemBauble implements IBrewContainer, IBrewItem, IManaUsingItem, IBaubleRender {
public class ItemBloodPendant extends ItemBauble implements IBrewContainer, IBrewItem, IManaUsingItem, IBaubleRender, IColorable {
private static final String TAG_BREW_KEY = "brewKey";
@@ -21,10 +21,11 @@ import net.minecraft.item.ItemStack;
import net.minecraft.util.DamageSource;
import net.minecraft.world.World;
import vazkii.botania.api.BotaniaAPI;
import vazkii.botania.common.item.IColorable;
import vazkii.botania.common.item.equipment.tool.manasteel.ItemManasteelSword;
import vazkii.botania.common.lib.LibItemNames;
public class ItemEnderDagger extends ItemManasteelSword {
public class ItemEnderDagger extends ItemManasteelSword implements IColorable {
public ItemEnderDagger() {
super(BotaniaAPI.manasteelToolMaterial, LibItemNames.ENDER_DAGGER);
@@ -37,6 +37,7 @@ import vazkii.botania.api.mana.IManaItem;
import vazkii.botania.common.achievement.ModAchievements;
import vazkii.botania.common.core.helper.ItemNBTHelper;
import vazkii.botania.common.crafting.recipe.TerraPickTippingRecipe;
import vazkii.botania.common.item.IColorable;
import vazkii.botania.common.item.ItemTemperanceStone;
import vazkii.botania.common.item.ModItems;
import vazkii.botania.common.item.equipment.tool.ToolCommons;
@@ -48,7 +49,7 @@ import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class ItemTerraPick extends ItemManasteelPick implements IManaItem, ISequentialBreaker {
public class ItemTerraPick extends ItemManasteelPick implements IManaItem, ISequentialBreaker, IColorable {
private static final String TAG_ENABLED = "enabled";
private static final String TAG_MANA = "mana";
@@ -35,11 +35,12 @@ import vazkii.botania.common.Botania;
import vazkii.botania.common.core.helper.ItemNBTHelper;
import vazkii.botania.common.crafting.recipe.CompositeLensRecipe;
import vazkii.botania.common.crafting.recipe.LensDyeingRecipe;
import vazkii.botania.common.item.IColorable;
import vazkii.botania.common.item.ItemMod;
import vazkii.botania.common.lib.LibItemNames;
import net.minecraftforge.fml.common.registry.GameRegistry;
public class ItemLens extends ItemMod implements ILensControl, ICompositableLens, ITinyPlanetExcempt {
public class ItemLens extends ItemMod implements ILensControl, ICompositableLens, ITinyPlanetExcempt, IColorable {
public static final int SUBTYPES = 22;
@@ -36,6 +36,7 @@ import vazkii.botania.common.achievement.IPickupAchievement;
import vazkii.botania.common.achievement.ModAchievements;
import vazkii.botania.common.entity.EntityDoppleganger;
import vazkii.botania.common.entity.EntityEnderAirBottle;
import vazkii.botania.common.item.IColorable;
import vazkii.botania.common.item.ItemMod;
import vazkii.botania.common.item.equipment.tool.ToolCommons;
import vazkii.botania.common.lib.LibItemNames;
@@ -43,7 +44,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class ItemManaResource extends ItemMod implements IFlowerComponent, IElvenItem, IPickupAchievement {
public class ItemManaResource extends ItemMod implements IFlowerComponent, IElvenItem, IPickupAchievement, IColorable {
final int types = 24;