Posted August 16, 20187 yr I created a Block that has Blockstates. When I use the Item to place it though, it get's placed with the default state and not the state according to the metadata of the damage value of the item. Setblock delivers me the correct blockstate though. I know it must be something really trivial that i missed, but I can't seem to find anything... Here are my ItemBlock and Block classes: Spoiler public class ItemBlockStorage extends ItemBlock { public ItemBlockStorage(Block block) { super(block); this.setHasSubtypes(true); } @Override public String getUnlocalizedName(ItemStack stack) { return super.getUnlocalizedName(stack) + "_" + BlockStorage.EnumStorageType.byMeta(stack.getMetadata()).getName(); } } Spoiler public class BlockStorage extends Block { public static final PropertyEnum<EnumStorageType> TYPE = PropertyEnum.create("type", EnumStorageType.class); public BlockStorage() { super(Material.WOOD); this.setRegistryName("storage"); this.setUnlocalizedName("storage"); this.setDefaultState(this.blockState.getBaseState().withProperty(TYPE, EnumStorageType.BASE)); this.setCreativeTab(CreativeTabs.REDSTONE); } @Override public int damageDropped(IBlockState state) { return state.getValue(TYPE).getMeta(); } @Override public void getSubBlocks(CreativeTabs itemIn, NonNullList<ItemStack> items) { for(int i = 0; i < EnumStorageType.values().length; i++) { items.add(new ItemStack(this, 1, i)); } } @Override public int getMetaFromState(IBlockState state) { return state.getValue(TYPE).getMeta(); } @Override public IBlockState getStateFromMeta(int meta) { return this.getDefaultState().withProperty(TYPE, EnumStorageType.byMeta(meta)); } @Override protected BlockStateContainer createBlockState() { return new BlockStateContainer(this, TYPE); } public enum EnumStorageType implements IStringSerializable { BASE("base", 0), SUPER("super", 1); public String name; int meta; EnumStorageType(String name, int meta) { this.name = name; this.meta = meta; } public static EnumStorageType byMeta(int meta) { for(EnumStorageType e : values()) { if(e.getMeta() == meta) { return e; } } return BASE; } public int getMeta() { return meta; } @Override public String getName() { return name; } } }
August 16, 20187 yr Author I was missing getMetadata..... ? public class ItemBlockStorage extends ItemBlock { public ItemBlockStorage(Block block) { super(block); this.setHasSubtypes(true); } @Override public int getMetadata(ItemStack stack) { return this.getMetadata(stack.getItemDamage()); } @Override public int getMetadata(int damage) { return damage; } @Override public String getUnlocalizedName(ItemStack stack) { return super.getUnlocalizedName(stack) + "_" + BlockStorage.EnumStorageType.byMeta(stack.getMetadata()).getName(); } }
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.