Jump to content

ItemBlock texture doesn't work and multilingual (Item)Block names


r0schm

Recommended Posts

Hey there guys,

 

I'm pretty new to Forge development and since the 1.5 update came out a very short time ago, very many tutorials aren't updated yet. So I decided to ask my question here:

I'd like to add a "Multiblock", a block with metadata and each of these has got is own custom logic, texturing etc. I got the basic block to work, but my extended ItemBlock doesn't work as I want it to. It doesn't draw the texture it should and it doesn't show the localized name it should have. Regarding the 2nd problem I think it's pretty much because I'm using the wrong key, but the first one is the major (I'm going to explain the 2nd problem first, because it's the easier one to solve).

In my language XML files I'm using a key of the form "item.MultiBlockName.SubName.name" to set the localized name of the ItemBlock. Before i decided to do the thing with metadata it also didn't show me the localized string, back then I was using "block.BlockName.name" as key, was that right? That thing with MultiBlockName is because of the way I register the sub-blocks, I basically just do

return MultiBlockName + "." + subNames[itemStack.getItemDamage()];

in getUnlocalizedName(ItemStack itemStack).

Regarding my first problem:

In the actual Block class I'm doing something like this for texture handling (The block with metadata 0 is meant to have one texture on a random site):

@Override
    @SideOnly(Side.CLIENT)
    public Icon getBlockTexture(IBlockAccess access, int x, int y, int z,
            int side) {
        switch (access.getBlockMetadata(x, y, z)) {
            case 0:
                TileEntityFossile tileEntity = (TileEntityFossile) access
                        .getBlockTileEntity(x, y, z);
                if (tileEntity != null) {
                    if (side == tileEntity.getFrontSide()) {
                        return fosFront;
                    }
                }
                break;
            case 1:
                return ammonite;
        }
        return fosSides;
    }

(The TileEntity basically just stores the side, the front should be drawn on)

This code works like a charm for the block. But now I have the problem, that an Item(Block) handles its textures differently, so there is no way (as far as I know) to do the thing with the random side (in the inventory I actually want the front to be displayed on the right side of the block). Right now I'm trying to use this part of code (The references to BlockOrePC are pointing to the icons I've loaded in the block class because I don't want to have the textures in the items and in the blocks folder):

@Override
    @SideOnly(Side.CLIENT)
    public Icon getIconFromDamage(int dmg) {
        if(dmg == 0) {
            return BlockOrePC.fosFront;
        } else {
            return BlockOrePC.ammonite;
        }
    }

This code has 2 downsides:

[*]It doesn't work :D

[*]It only supports one texture for the whole block

 

Any help would be appreciated.

Btw, I based my whole multiblock-thingy on this tutorial: http://www.minecraftforge.net/wiki/Metadata_Based_Subblocks

 

Greets

r0schm

Link to comment
Share on other sites

Hey there guys,

 

I'm pretty new to Forge development and since the 1.5 update came out a very short time ago, very many tutorials aren't updated yet. So I decided to ask my question here:

I'd like to add a "Multiblock", a block with metadata and each of these has got is own custom logic, texturing etc. I got the basic block to work, but my extended ItemBlock doesn't work as I want it to. It doesn't draw the texture it should and it doesn't show the localized name it should have. Regarding the 2nd problem I think it's pretty much because I'm using the wrong key, but the first one is the major (I'm going to explain the 2nd problem first, because it's the easier one to solve).

In my language XML files I'm using a key of the form "item.MultiBlockName.SubName.name" to set the localized name of the ItemBlock. Before i decided to do the thing with metadata it also didn't show me the localized string, back then I was using "block.BlockName.name" as key, was that right? That thing with MultiBlockName is because of the way I register the sub-blocks, I basically just do

return MultiBlockName + "." + subNames[itemStack.getItemDamage()];

in getUnlocalizedName(ItemStack itemStack).

Regarding my first problem:

In the actual Block class I'm doing something like this for texture handling (The block with metadata 0 is meant to have one texture on a random site):

@Override
    @SideOnly(Side.CLIENT)
    public Icon getBlockTexture(IBlockAccess access, int x, int y, int z,
            int side) {
        switch (access.getBlockMetadata(x, y, z)) {
            case 0:
                TileEntityFossile tileEntity = (TileEntityFossile) access
                        .getBlockTileEntity(x, y, z);
                if (tileEntity != null) {
                    if (side == tileEntity.getFrontSide()) {
                        return fosFront;
                    }
                }
                break;
            case 1:
                return ammonite;
        }
        return fosSides;
    }

(The TileEntity basically just stores the side, the front should be drawn on)

This code works like a charm for the block. But now I have the problem, that an Item(Block) handles its textures differently, so there is no way (as far as I know) to do the thing with the random side (in the inventory I actually want the front to be displayed on the right side of the block). Right now I'm trying to use this part of code (The references to BlockOrePC are pointing to the icons I've loaded in the block class because I don't want to have the textures in the items and in the blocks folder):

@Override
    @SideOnly(Side.CLIENT)
    public Icon getIconFromDamage(int dmg) {
        if(dmg == 0) {
            return BlockOrePC.fosFront;
        } else {
            return BlockOrePC.ammonite;
        }
    }

This code has 2 downsides:

[*]It doesn't work :D

[*]It only supports one texture for the whole block

 

Any help would be appreciated.

Btw, I based my whole multiblock-thingy on this tutorial: http://www.minecraftforge.net/wiki/Metadata_Based_Subblocks

 

Greets

r0schm

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
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.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.