001 package net.minecraft.src; 002 003 import cpw.mods.fml.common.Side; 004 import cpw.mods.fml.common.asm.SideOnly; 005 006 public class ItemSlab extends ItemBlock 007 { 008 private final boolean field_77891_a; 009 private final BlockHalfSlab field_77889_b; 010 private final BlockHalfSlab field_77890_c; 011 012 public ItemSlab(int par1, BlockHalfSlab par2BlockHalfSlab, BlockHalfSlab par3BlockHalfSlab, boolean par4) 013 { 014 super(par1); 015 this.field_77889_b = par2BlockHalfSlab; 016 this.field_77890_c = par3BlockHalfSlab; 017 this.field_77891_a = par4; 018 this.setMaxDamage(0); 019 this.setHasSubtypes(true); 020 } 021 022 @SideOnly(Side.CLIENT) 023 024 /** 025 * Gets an icon index based on an item's damage value 026 */ 027 public int getIconFromDamage(int par1) 028 { 029 return Block.blocksList[this.shiftedIndex].getBlockTextureFromSideAndMetadata(2, par1); 030 } 031 032 /** 033 * Returns the metadata of the block which this Item (ItemBlock) can place 034 */ 035 public int getMetadata(int par1) 036 { 037 return par1; 038 } 039 040 public String getItemNameIS(ItemStack par1ItemStack) 041 { 042 return this.field_77889_b.getFullSlabName(par1ItemStack.getItemDamage()); 043 } 044 045 public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) 046 { 047 if (this.field_77891_a) 048 { 049 return super.tryPlaceIntoWorld(par1ItemStack, par2EntityPlayer, par3World, par4, par5, par6, par7, par8, par9, par10); 050 } 051 else if (par1ItemStack.stackSize == 0) 052 { 053 return false; 054 } 055 else if (!par2EntityPlayer.canPlayerEdit(par4, par5, par6)) 056 { 057 return false; 058 } 059 else 060 { 061 int var11 = par3World.getBlockId(par4, par5, par6); 062 int var12 = par3World.getBlockMetadata(par4, par5, par6); 063 int var13 = var12 & 7; 064 boolean var14 = (var12 & 8) != 0; 065 066 if ((par7 == 1 && !var14 || par7 == 0 && var14) && var11 == this.field_77889_b.blockID && var13 == par1ItemStack.getItemDamage()) 067 { 068 if (par3World.checkIfAABBIsClear(this.field_77890_c.getCollisionBoundingBoxFromPool(par3World, par4, par5, par6)) && par3World.setBlockAndMetadataWithNotify(par4, par5, par6, this.field_77890_c.blockID, var13)) 069 { 070 par3World.playSoundEffect((double)((float)par4 + 0.5F), (double)((float)par5 + 0.5F), (double)((float)par6 + 0.5F), this.field_77890_c.stepSound.getStepSound(), (this.field_77890_c.stepSound.getVolume() + 1.0F) / 2.0F, this.field_77890_c.stepSound.getPitch() * 0.8F); 071 --par1ItemStack.stackSize; 072 } 073 074 return true; 075 } 076 else 077 { 078 return this.func_77888_a(par1ItemStack, par2EntityPlayer, par3World, par4, par5, par6, par7) ? true : super.tryPlaceIntoWorld(par1ItemStack, par2EntityPlayer, par3World, par4, par5, par6, par7, par8, par9, par10); 079 } 080 } 081 } 082 083 @SideOnly(Side.CLIENT) 084 085 /** 086 * Returns true if the given ItemBlock can be placed on the given side of the given block position. 087 */ 088 public boolean canPlaceItemBlockOnSide(World par1World, int par2, int par3, int par4, int par5, EntityPlayer par6EntityPlayer, ItemStack par7ItemStack) 089 { 090 int var8 = par2; 091 int var9 = par3; 092 int var10 = par4; 093 int var11 = par1World.getBlockId(par2, par3, par4); 094 int var12 = par1World.getBlockMetadata(par2, par3, par4); 095 int var13 = var12 & 7; 096 boolean var14 = (var12 & 8) != 0; 097 098 if ((par5 == 1 && !var14 || par5 == 0 && var14) && var11 == this.field_77889_b.blockID && var13 == par7ItemStack.getItemDamage()) 099 { 100 return true; 101 } 102 else 103 { 104 if (par5 == 0) 105 { 106 --par3; 107 } 108 109 if (par5 == 1) 110 { 111 ++par3; 112 } 113 114 if (par5 == 2) 115 { 116 --par4; 117 } 118 119 if (par5 == 3) 120 { 121 ++par4; 122 } 123 124 if (par5 == 4) 125 { 126 --par2; 127 } 128 129 if (par5 == 5) 130 { 131 ++par2; 132 } 133 134 var11 = par1World.getBlockId(par2, par3, par4); 135 var12 = par1World.getBlockMetadata(par2, par3, par4); 136 var13 = var12 & 7; 137 var14 = (var12 & 8) != 0; 138 return var11 == this.field_77889_b.blockID && var13 == par7ItemStack.getItemDamage() ? true : super.canPlaceItemBlockOnSide(par1World, var8, var9, var10, par5, par6EntityPlayer, par7ItemStack); 139 } 140 } 141 142 private boolean func_77888_a(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7) 143 { 144 if (par7 == 0) 145 { 146 --par5; 147 } 148 149 if (par7 == 1) 150 { 151 ++par5; 152 } 153 154 if (par7 == 2) 155 { 156 --par6; 157 } 158 159 if (par7 == 3) 160 { 161 ++par6; 162 } 163 164 if (par7 == 4) 165 { 166 --par4; 167 } 168 169 if (par7 == 5) 170 { 171 ++par4; 172 } 173 174 int var8 = par3World.getBlockId(par4, par5, par6); 175 int var9 = par3World.getBlockMetadata(par4, par5, par6); 176 int var10 = var9 & 7; 177 178 if (var8 == this.field_77889_b.blockID && var10 == par1ItemStack.getItemDamage()) 179 { 180 if (par3World.checkIfAABBIsClear(this.field_77890_c.getCollisionBoundingBoxFromPool(par3World, par4, par5, par6)) && par3World.setBlockAndMetadataWithNotify(par4, par5, par6, this.field_77890_c.blockID, var10)) 181 { 182 par3World.playSoundEffect((double)((float)par4 + 0.5F), (double)((float)par5 + 0.5F), (double)((float)par6 + 0.5F), this.field_77890_c.stepSound.getStepSound(), (this.field_77890_c.stepSound.getVolume() + 1.0F) / 2.0F, this.field_77890_c.stepSound.getPitch() * 0.8F); 183 --par1ItemStack.stackSize; 184 } 185 186 return true; 187 } 188 else 189 { 190 return false; 191 } 192 } 193 }