Jump to content

[SOLVED] Rotate and sided textured block


Nizen

Recommended Posts

First off, sorry for my bad English, I`m from Poland :P

 

I have problem with metadata block. I`d like to did block like wood, with:

1. rotate on placing

2. side textures.

Side textures is easy with normal block, but i have problem with metadata block.

Code:

Blocks.java

package rpgcraft.blocks;

import rpgcraft.lib.Reference;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;
import net.minecraft.item.ItemStack;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.item.Item;

public class blocks
{
public static void init_Blocks()
{
      
       Block RpgwoodBlock;
       RpgwoodBlock = new BlockRpgwood(500, Material.rock).setUnlocalizedName("RpgwoodBlock");
       GameRegistry.registerBlock(RpgwoodBlock, ItemRpgwoodBlock.class, Reference.MOD_ID + (RpgwoodBlock.getUnlocalizedName().substring(5)));
       LanguageRegistry.addName(new ItemStack(RpgwoodBlock, 1, 0), "Dark wood");
       LanguageRegistry.addName(new ItemStack(RpgwoodBlock, 1, 1), "Noname wood");
            
};
}

 

ItemRpgwoodBlock.java

package rpgcraft.blocks;

import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;

public class ItemRpgwoodBlock extends ItemBlock
{
       public ItemRpgwoodBlock(int par1)
       {
             super(par1);
             setHasSubtypes(true);
       }
      
       public String getUnlocalizedName(ItemStack itemstack)
       {
             String name = "";
             switch(itemstack.getItemDamage())
             {
                    case 0:
                    {
                           name = "world";
                           break;
                    }
                    case 1:
                    {
                           name = "nether";
                           break;
                    }
                    default: name = "broken";
             }
             return getUnlocalizedName() + "." + name;
       }
      
       public int getMetadata(int par1)
       {
             return par1;
       }
}

 

BlockRpgwood.java

package rpgcraft.blocks;

import java.util.List;

import rpgcraft.lib.Reference;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Icon;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class BlockRpgwood extends Block
{
       public BlockRpgwood(int id, Material material)
       {
              super(id, material);
              this.setCreativeTab(CreativeTabs.tabBlock);
       }
      
       public int damageDropped(int par1)
    {
        return par1;
    }
      
       @SideOnly(Side.CLIENT)
    private Icon[] icons;
  
    @SideOnly(Side.CLIENT)
    public void registerIcons(IconRegister par1IconRegister)
    {
        icons = new Icon[4];
        
        for(int i = 0; i < icons.length; i++)
        {
            icons[i] = par1IconRegister.registerIcon(Reference.MOD_ID + ":" + (this.getUnlocalizedName().substring(5)) + i + "_side");
        }
    }
  
    @SideOnly(Side.CLIENT)
    public Icon getIcon(int par1, int par2)
    {
        switch(par2)
        {
            case 0:
              return icons[0];
            case 1:
            {
              switch(par1)
                {
                     case 0:
                           return icons[1];
                    case 1:
                        return icons[2];
                    default:
                        return icons[3];
                }
            }
            default:
            {
              System.out.println("Invalid metadata for " + this.getUnlocalizedName());
                return icons[0];
            }
        }
    }
  
    @SideOnly(Side.CLIENT)
    public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List)
    {
          for(int i = 0; i < 2; i++)
          {
                 par3List.add(new ItemStack(par1, 1, i));
          }
    }

}

 

And i have textures with "_side" and "_top" (RpgwoodBlock0_side.png and RpgwoodBlock0_top.png for example).

Link to comment
Share on other sites

Wow, it`s easy!

I`m just replace:

public class BlockRpgwood extends Block

for this:

public class BlockRpgwood extends BlockRotatedPillar

and my block is rotating like wood :D But i still have problem with sided texture in metadata block :/

 

EDIT:

BlockRotatedPillar work with metadata 0, but when I place metadata 2 block, it just... place metadata 0 with textures. So, I still need help.

 

Actual code:

package rpgcraft.blocks;

import java.util.List;

import rpgcraft.lib.Reference;
import net.minecraft.block.Block;
import net.minecraft.block.BlockRotatedPillar;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Icon;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class BlockRpgwood extends BlockRotatedPillar
{
       public BlockRpgwood(int id, Material material)
       {
              super(id, material);
              this.setCreativeTab(CreativeTabs.tabBlock);
       }
      
       public int damageDropped(int par1)
    {
        return par1;
    }
      
       @SideOnly(Side.CLIENT)
    private Icon[] icons;
  
    @SideOnly(Side.CLIENT)
    public void registerIcons(IconRegister par1IconRegister)
    {
        icons = new Icon[4];
        
        for(int i = 0; i < icons.length; i++)
        {
            icons[i] = par1IconRegister.registerIcon(Reference.MOD_ID + ":" + (this.getUnlocalizedName().substring(5)) + i + "_side");
        }
    }
  
    @SideOnly(Side.CLIENT)
    public Icon getIcon(int par1, int par2)
    {
        switch(par2)
        {
            case 0:
              return icons[0];
            case 1:
            {
              switch(par1)
                {
                     case 0:
                        return icons[1];
                    case 1:
                        return icons[2];
                    default:
                        return icons[3];
                }
            }
            default:
            {
              System.out.println("Invalid metadata for " + this.getUnlocalizedName());
                return icons[0];
            }
        }
    }
  
    @SideOnly(Side.CLIENT)
    public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List)
    {
          for(int i = 0; i < 2; i++)
          {
                 par3List.add(new ItemStack(par1, 1, i));
          }
    }

}

Link to comment
Share on other sites

I don't think you need public Icon getIcon(int par1, int par2) . You just have to put there: protected Icon getSideIcon(int i) and return the side icon in that (the parameter is metadata of subblock (if you have any)) and than you need this: protected Icon getEndIcon(int par1) where you return the top and bottom icon (the parameter is the same as before) and I think that should work ;)

If someone helps you, click that thank you button ;)

 

EasyTessellator library: http://www.minecraftforge.net/forum/index.php/topic,14705.0.html

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.


×
×
  • Create New...

Important Information

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