Skip to content

Commit

Permalink
Going to put this in Mantle and not Natura. It helps with deal with M…
Browse files Browse the repository at this point in the history
…etadata (Different Variants).
  • Loading branch information
Alexander committed Mar 29, 2015
1 parent ff9c829 commit 3b1b56b
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 0 deletions.
33 changes: 33 additions & 0 deletions src/mantle/blocks/abstracts/ItemBlockVariants.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package mantle.blocks.abstracts;

import mantle.blocks.iface.IBlockWithVariants;
import net.minecraft.block.Block;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;

public class ItemBlockVariants extends ItemBlock
{
private final IBlockWithVariants variantBlock;

public ItemBlockVariants(Block block)
{
super(block);

this.variantBlock = (IBlockWithVariants) block;
this.setMaxDamage(0);
this.setHasSubtypes(true);
}

@Override
public int getMetadata(int damage)
{
return damage;
}

@Override
public String getUnlocalizedName(ItemStack stack)
{
return super.getUnlocalizedName() + "." + this.variantBlock.getVariantNameFromStack(stack);
}

}
8 changes: 8 additions & 0 deletions src/mantle/blocks/iface/IBlockVariant.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package mantle.blocks.iface;

import net.minecraft.util.IStringSerializable;

public interface IBlockVariant extends IStringSerializable
{
int getMetadata();
}
8 changes: 8 additions & 0 deletions src/mantle/blocks/iface/IBlockWithVariants.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package mantle.blocks.iface;

import net.minecraft.item.ItemStack;

public interface IBlockWithVariants
{
String getVariantNameFromStack(ItemStack stack);
}
58 changes: 58 additions & 0 deletions src/mantle/client/ModelVariant.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package mantle.client;

import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.model.ModelBakery;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import mantle.blocks.iface.IBlockVariant;

@SideOnly(Side.CLIENT)
public class ModelVariant
{
private String modID;

public ModelVariant(String modId)
{
this.modID = modId;
}

public void registerItemRenderer(Block block, IBlockVariant[] variants)
{
String[] names = new String[variants.length];

for (int i = 0; i < variants.length; ++i)
{
IBlockVariant subtype = variants[i];
names[i] = (this.modID + ":") + subtype.getName();

this.registerItemRenderer(names[i], Item.getItemFromBlock(block), subtype.getMetadata());
}

ModelBakery.addVariantName(Item.getItemFromBlock(block), names);
}

public void registerItemRenderer(Block block, int meta)
{
this.registerItemRenderer(Item.getItemFromBlock(block), meta);
}

public void registerItemRenderer(Item item, int meta)
{
String name = (this.modID + ":") + item.getUnlocalizedName().substring(5);

this.registerItemRenderer(name, item, meta);
}

public void registerItemRenderer(String name, Block block, int meta)
{
this.registerItemRenderer(name, Item.getItemFromBlock(block), meta);
}

public static void registerItemRenderer(String name, Item item, int meta)
{
Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, meta, new ModelResourceLocation(name, "inventory"));
}
}

0 comments on commit 3b1b56b

Please sign in to comment.