Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[1.8.9][Solved] Item textures for block with meta data


Recommended Posts

Hello everybody,


I'm trying to add the textures for a block with meta data, I set the texture in the blockstate json file. The blocks self have the correct texture but the items not.




width=800 height=4497yzrri7.png?1 [/img]





  "forge_marker": 1,
    "textures": {},
    "model": "cube_all",
    "uvlock": true
  "variants": {
          "all": "transmatrics:blocks/CopperOre"
        "textures": {
          "all": "transmatrics:blocks/TinOre"
        "textures": {
          "all": "transmatrics:blocks/SilverOre"
        "textures": {
          "all": "transmatrics:blocks/LeadOre"





package at.korti.transmatrics.block;

import at.korti.transmatrics.api.Constants.TransmatricsBlock;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockState;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IStringSerializable;

import java.util.List;

* Created by Korti on 18.03.2016.
public class OreBlock extends ModBlock {

    public static final PropertyEnum<OreType> TYPE = PropertyEnum.create("type", OreType.class);

    public OreBlock() {
        super(Material.rock, TransmatricsBlock.ORE_BLOCK.getRegName());

    protected BlockState createBlockState() {
        return new BlockState(this, TYPE);

    public int getMetaFromState(IBlockState state) {
        return state.getValue(TYPE).meta;

    public IBlockState getStateFromMeta(int meta) {
        return this.getDefaultState().withProperty(TYPE, getFromMeta(meta));

    private OreType getFromMeta(int meta) {
        if (meta < 0 || meta > OreType.values().length) {
            meta = 0;

        return OreType.values()[meta];

    public enum OreType implements IStringSerializable {

        public final int meta;

        OreType() {
            meta = ordinal();

        public String getName() {
            return this.toString();



The ModBlock class is just a base class to set the creative tab, the unlocalized name and the registry name.




package at.korti.transmatrics.item.ore;

import at.korti.transmatrics.Transmatrics;
import at.korti.transmatrics.api.Constants;
import net.minecraft.block.Block;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;

* Created by Korti on 19.03.2016.
public class ItemOreBlock extends ItemBlock {

    public ItemOreBlock(Block block) {


    public String getUnlocalizedName(ItemStack stack) {
        String extension;
        switch (stack.getItemDamage()) {
            case 0:
                extension = "copper";
            case 1:
                extension = "tin";
            case 2:
                extension = "silver";
            case 3:
                extension = "lead";
                extension = "unknown";
        return super.getUnlocalizedName(stack) + "." + extension;

    public int getMetadata(int damage) {
        return damage;



Block register:


package at.korti.transmatrics.registry;

import at.korti.transmatrics.block.OreBlock;
import at.korti.transmatrics.block.crafting.Pulverizer;
import at.korti.transmatrics.block.generator.*;
import at.korti.transmatrics.block.network.Controller;
import at.korti.transmatrics.block.network.LargeSwitch;
import at.korti.transmatrics.block.network.MediumSwitch;
import at.korti.transmatrics.block.network.SmallSwitch;
import at.korti.transmatrics.item.ore.ItemOreBlock;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;

import java.util.ArrayList;
import java.util.List;

import static net.minecraftforge.fml.common.registry.GameRegistry.registerBlock;

* Created by Korti on 01.03.2016.
public final class Blocks {

    private static SolarPanel solarPanel;
    private static AdvancedSolarPanel advancedSolarPanel;
    private static LavaGenerator lavaGenerator;
    private static ThermalGenerator thermalGenerator;
    private static HydrogenGenerator hydrogenGenerator;
    private static Windmill windmill;
    private static Watermill watermill;
    private static SmallSwitch smallSwitch;
    private static MediumSwitch mediumSwitch;
    private static LargeSwitch largeSwitch;
    private static Controller controller;
    private static Pulverizer pulverizer;
    private static OreBlock oreBlock;

    public static void registerBlocks() {
        registerBlock(solarPanel = new SolarPanel());
        registerBlock(advancedSolarPanel = new AdvancedSolarPanel());
        registerBlock(lavaGenerator = new LavaGenerator());
        registerBlock(thermalGenerator = new ThermalGenerator());
        registerBlock(hydrogenGenerator = new HydrogenGenerator());
        registerBlock(windmill = new Windmill());
        registerBlock(watermill = new Watermill());
        registerBlock(smallSwitch = new SmallSwitch());
        registerBlock(mediumSwitch = new MediumSwitch());
        registerBlock(largeSwitch = new LargeSwitch());
        registerBlock(controller = new Controller());
        registerBlock(pulverizer = new Pulverizer());
        registerBlock(oreBlock = new OreBlock(), ItemOreBlock.class);

    public static void registerBlockTextures() {
        registerMetaBlockTextures(oreBlock, "copper", "tin", "silver", "lead");

    private static void registerBlockTexture(Block block) {
        Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(block), 0, new ModelResourceLocation(block.getRegistryName(), "inventory"));

    private static void registerMetaBlockTextures(Block block, String... variants) {
        Item blockItem = Item.getItemFromBlock(block);
        List<ItemStack> subItems = new ArrayList<>();
        block.getSubBlocks(blockItem, null, subItems);
        for (int i = 0; i < subItems.size(); i++) {
            Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(blockItem, subItems.get(i).getMetadata(),
                    new ModelResourceLocation(block.getRegistryName(), "type=" + variants[i]));



Link to comment
Share on other sites

This is because you need to specify models for the block item as well.

You should make a file models/item_block_name.json which points to the main block model, like this:

    "display": {
        "thirdperson": {
            "rotation": [ 10, -45, 170 ],
            "translation": [ 0, 1.5, -2.75 ],
            "scale": [ 0.375, 0.375, 0.375 ]

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • Hi, I'm one of the user who's using Custom NPCs 1.7.10. But I have one problem. I see some items are equipped to NPC rotated, not in the right position. How can I rotate the arm of NPC?
    • Hello. I decided to try to make a mod, but for some reason I stumbled at the very beginning. How do I register a block for it to appear in the inventory? It seems that I'm trying to do it according to the manual, but only the procedure for registering new blocks is described there. So I made a mod class. I registered the registration, but when I install it into the game, I do not see my block in the intent. And I will also be grateful if you give a link to some kind of detailed manual. So that step by step it was described how what can be created. Thanks.   @Mod("examplemod") public class ExampleMod { // Directly reference a log4j logger. private static final Logger LOGGER = LogManager.getLogger(); private static final String MODID = "0.1"; private static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, MODID); public static final RegistryObject<Block> MyBlock = BLOCKS.register("mysuperblockreg", () -> new SuperBlock(BlockBehaviour.Properties.of(Material.WOOD).lightLevel((s) -> { return 1; }).sound(SoundType.WOOD))); public ExampleMod() { // Register the setup method for modloading FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup); // Register the enqueueIMC method for modloading FMLJavaModLoadingContext.get().getModEventBus().addListener(this::enqueueIMC); // Register the processIMC method for modloading FMLJavaModLoadingContext.get().getModEventBus().addListener(this::processIMC); BLOCKS.register(FMLJavaModLoadingContext.get().getModEventBus()); // Register ourselves for server and other game events we are interested in MinecraftForge.EVENT_BUS.register(this); } private void setup(final FMLCommonSetupEvent event) { // some preinit code LOGGER.info("HELLO FROM PREINIT"); LOGGER.info("DIRT BLOCK >> {}", Blocks.DIRT.getRegistryName()); } private void enqueueIMC(final InterModEnqueueEvent event) { // some example code to dispatch IMC to another mod InterModComms.sendTo("examplemod", "helloworld", () -> { LOGGER.info("Hello world from the MDK"); return "Hello world"; }); } private void processIMC(final InterModProcessEvent event) { // some example code to receive and process InterModComms from other mods LOGGER.info("Got IMC {}", event.getIMCStream().map(m -> m.messageSupplier().get()).collect(Collectors.toList())); } // You can use SubscribeEvent and let the Event Bus discover methods to call @SubscribeEvent public void onServerStarting(FMLServerStartingEvent event) { // do something when the server starts LOGGER.info("HELLO from server starting"); } // You can use EventBusSubscriber to automatically subscribe events on the // contained class (this is subscribing to the MOD // Event bus for receiving Registry Events) @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) public static class RegistryEvents { @SubscribeEvent public static void onBlocksRegistry(final RegistryEvent.Register<Block> blockRegistryEvent) { // register a new block here LOGGER.info("HELLO from Register Block"); } } }  
    • I'm probably really stupid but how do I fix this error. It happens whenever I try to startup Minecraft forge 1.8.9 recommended [19:13:10 ERROR]: Gave up trying to download https://maven.minecraftforge.net/jline/jline/2.13/jline-2.13.jar for job 'Version & Libraries' [19:13:10 ERROR]: Job 'Version & Libraries' finished with 1 failure(s)! (took 0:00:13.982)   How do I fix this?
    • Override attackEntityFrom and do checks there, for example DamageSource#isProjectile. Or check how Enderman does it.
  • Topics

  • Who's Online (See full list)

  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.