Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

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

  • Author

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

  • Author

The name issue was solved now, but the texture thing is remaining. It would be nice if someone could help.

  • Author

The name issue was solved now, but the texture thing is remaining. It would be nice if someone could help.

  • Author

Thank you very much, it worked. When I read your post, all seemed that obvious to me. I then recognized that you never really add the ItemBlock to the Creative Tab etc. and then everything was clear.

  • Author

Thank you very much, it worked. When I read your post, all seemed that obvious to me. I then recognized that you never really add the ItemBlock to the Creative Tab etc. and then everything was clear.

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...

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.