Posted February 14, 201411 yr Hello everyone! I have added a few slabs in my Mod, but if I place one Slab onto another they don't turn into a Double slab.. What do I have to add? Source: ModBlockSlab: package com.buildingblocks.block; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.util.List; import java.util.Random; import com.buildingblocks.Main; import net.minecraft.block.BlockSlab; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; public class ModBlockSlab extends BlockSlab { public static final String[] field_150005_b = new String[] {"serpentinite", "syenite", "slate", "chrysocolla", "obsidian"}; private static final String __OBFID = "CL_00000337"; private final boolean type; public ModBlockSlab(String unlocalizedName, Material material, float hardness, float resistance, Class<? extends ItemBlock> itemBlock, boolean isDoubleSlab, boolean type) { super(isDoubleSlab, material); this.setBlockName(unlocalizedName); this.setHardness(hardness); this.setResistance(resistance); this.setCreativeTab(Main.BLOCK_TAB); this.type = type; GameRegistry.registerBlock(this, itemBlock, unlocalizedName); } /** * Gets the block's texture. Args: side, meta */ @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { if (!type) { switch (meta & 7) { case 0: return ModBlocks.Serpentinite.getBlockTextureFromSide(side); case 1: return ModBlocks.Syenite.getBlockTextureFromSide(side); case 2: return ModBlocks.Slate.getBlockTextureFromSide(side); case 3: return ModBlocks.Chrysocolla.getBlockTextureFromSide(side); case 4: return Blocks.obsidian.getBlockTextureFromSide(side); default: return Blocks.beacon.getBlockTextureFromSide(side); } } else { switch (meta & 7) { case 0: return ModBlocks.SerpentiniteBrick.getBlockTextureFromSide(side); case 1: return ModBlocks.SyeniteBrick.getBlockTextureFromSide(side); case 2: return ModBlocks.SlateBrick.getBlockTextureFromSide(side); case 3: return ModBlocks.ChrysocollaBrick.getBlockTextureFromSide(side); case 4: return ModBlocks.ObsidianBrick.getBlockTextureFromSide(side); default: return Blocks.beacon.getBlockTextureFromSide(side); } } } @Override public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) { return Item.getItemFromBlock(ModBlocks.Slab); } /** * Returns an item stack containing a single instance of the current block type. 'i' is the block's subtype/damage * and is ignored for blocks which do not support subtypes. Blocks which cannot be harvested should return null. */ @Override protected ItemStack createStackedBlock(int p_149644_1_) { return new ItemStack(Item.getItemFromBlock(ModBlocks.Slab), 2, p_149644_1_ & 7); } @Override public String func_150002_b(int p_150002_1_) { if (p_150002_1_ < 0 || p_150002_1_ >= field_150005_b.length) { p_150002_1_ = 0; } return super.getUnlocalizedName() + "." + field_150005_b[p_150002_1_]; } /** * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) */ @Override @SideOnly(Side.CLIENT) public void getSubBlocks(Item p_149666_1_, CreativeTabs p_149666_2_, List p_149666_3_) { if (p_149666_1_ != Item.getItemFromBlock(ModBlocks.DoubleSlab)) { for (int i = 0; i < field_150005_b.length; ++i) { p_149666_3_.add(new ItemStack(p_149666_1_, 1, i)); } } } @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister p_149651_1_) {} } ItemBlockSlab: package com.buildingblocks.block.itemblock; import com.buildingblocks.block.ModBlocks; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemBlockWithMetadata; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.world.World; public class ItemBlockSlab extends ItemBlockWithMetadata { public ItemBlockSlab(Block basisBlock) { super(basisBlock, basisBlock); } public ItemBlockSlab(Block basisBlock, Block extraBlock) { super(basisBlock, extraBlock); } @Override public IIcon getIconFromDamage(int meta) { if (this.getUnlocalizedName().equals("tile.slab") || this.getUnlocalizedName().equals("tile.double_slab")) { switch (meta & 7) { case 0: return ModBlocks.Serpentinite.getBlockTextureFromSide(0); case 1: return ModBlocks.Syenite.getBlockTextureFromSide(0); case 2: return ModBlocks.Slate.getBlockTextureFromSide(0); case 3: return ModBlocks.Chrysocolla.getBlockTextureFromSide(0); case 4: return Blocks.obsidian.getBlockTextureFromSide(0); default: return Blocks.beacon.getBlockTextureFromSide(0); } } else { switch (meta & 7) { case 0: return ModBlocks.SerpentiniteBrick.getBlockTextureFromSide(0); case 1: return ModBlocks.SyeniteBrick.getBlockTextureFromSide(0); case 2: return ModBlocks.SlateBrick.getBlockTextureFromSide(0); case 3: return ModBlocks.ChrysocollaBrick.getBlockTextureFromSide(0); case 4: return ModBlocks.ObsidianBrick.getBlockTextureFromSide(0); default: return Blocks.beacon.getBlockTextureFromSide(0); } } } @Override public int getMetadata(int par1) { return par1; } @Override public String getUnlocalizedName(ItemStack stack) { String name = "corrupted"; switch( stack.getItemDamage() ) { case 0: name = "serpentinite"; break; case 1: name = "syenite"; break; case 2: name = "slate"; break; case 3: name = "chrysocolla"; break; case 4: name = "obsidian"; break; } return this.getUnlocalizedName() + "." + name; } } Which methods do I have to overwrite that it works? http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
February 14, 201411 yr I suggest you look unto BlockHalfSlab. It goes into detail with the block bounds.
February 15, 201411 yr Author All the code I use is copied from Vanilla slabs. The Slabs are registered twice: one time for single- and one time for double slabs. http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
February 15, 201411 yr Author Anyone? http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
February 16, 201411 yr Author I solved it now on my own with the following Code: @Override public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) { Block block = world.getBlock(x, y, z); if (block instanceof ModBlockSlab && !((ModBlockSlab)block).isDoubleSlab()) { boolean brickBlock = false; boolean brickItem = false; if (((ModBlockSlab)block).isBrickSlab()) brickBlock = true; if (((ModBlockSlab)this.field_150939_a).isBrickSlab()) brickItem = true; int meta = world.getBlockMetadata(x, y, z) & 7; Main.logPlainText("brickBlock=" + brickBlock + "; brickItem=" + brickItem); if (brickBlock == brickItem && meta == stack.getItemDamage()) { world.setBlock(x, y, z, brickBlock ? ModBlocks.DoubleBrickSlab : ModBlocks.DoubleSlab, meta, 3); --stack.stackSize; return true; } } return super.onItemUse(stack, player, world, x, y, z, side, hitX, hitY, hitZ); } http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
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.