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    }