001    package net.minecraft.src;
002    
003    public class ItemDoor extends Item
004    {
005        private Material doorMaterial;
006    
007        public ItemDoor(int par1, Material par2Material)
008        {
009            super(par1);
010            this.doorMaterial = par2Material;
011            this.maxStackSize = 1;
012            this.setTabToDisplayOn(CreativeTabs.tabRedstone);
013        }
014    
015        public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
016        {
017            if (par7 != 1)
018            {
019                return false;
020            }
021            else
022            {
023                ++par5;
024                Block var11;
025    
026                if (this.doorMaterial == Material.wood)
027                {
028                    var11 = Block.doorWood;
029                }
030                else
031                {
032                    var11 = Block.doorSteel;
033                }
034    
035                if (par2EntityPlayer.canPlayerEdit(par4, par5, par6) && par2EntityPlayer.canPlayerEdit(par4, par5 + 1, par6))
036                {
037                    if (!var11.canPlaceBlockAt(par3World, par4, par5, par6))
038                    {
039                        return false;
040                    }
041                    else
042                    {
043                        int var12 = MathHelper.floor_double((double)((par2EntityPlayer.rotationYaw + 180.0F) * 4.0F / 360.0F) - 0.5D) & 3;
044                        placeDoorBlock(par3World, par4, par5, par6, var12, var11);
045                        --par1ItemStack.stackSize;
046                        return true;
047                    }
048                }
049                else
050                {
051                    return false;
052                }
053            }
054        }
055    
056        public static void placeDoorBlock(World par0World, int par1, int par2, int par3, int par4, Block par5Block)
057        {
058            byte var6 = 0;
059            byte var7 = 0;
060    
061            if (par4 == 0)
062            {
063                var7 = 1;
064            }
065    
066            if (par4 == 1)
067            {
068                var6 = -1;
069            }
070    
071            if (par4 == 2)
072            {
073                var7 = -1;
074            }
075    
076            if (par4 == 3)
077            {
078                var6 = 1;
079            }
080    
081            int var8 = (par0World.isBlockNormalCube(par1 - var6, par2, par3 - var7) ? 1 : 0) + (par0World.isBlockNormalCube(par1 - var6, par2 + 1, par3 - var7) ? 1 : 0);
082            int var9 = (par0World.isBlockNormalCube(par1 + var6, par2, par3 + var7) ? 1 : 0) + (par0World.isBlockNormalCube(par1 + var6, par2 + 1, par3 + var7) ? 1 : 0);
083            boolean var10 = par0World.getBlockId(par1 - var6, par2, par3 - var7) == par5Block.blockID || par0World.getBlockId(par1 - var6, par2 + 1, par3 - var7) == par5Block.blockID;
084            boolean var11 = par0World.getBlockId(par1 + var6, par2, par3 + var7) == par5Block.blockID || par0World.getBlockId(par1 + var6, par2 + 1, par3 + var7) == par5Block.blockID;
085            boolean var12 = false;
086    
087            if (var10 && !var11)
088            {
089                var12 = true;
090            }
091            else if (var9 > var8)
092            {
093                var12 = true;
094            }
095    
096            par0World.editingBlocks = true;
097            par0World.setBlockAndMetadataWithNotify(par1, par2, par3, par5Block.blockID, par4);
098            par0World.setBlockAndMetadataWithNotify(par1, par2 + 1, par3, par5Block.blockID, 8 | (var12 ? 1 : 0));
099            par0World.editingBlocks = false;
100            par0World.notifyBlocksOfNeighborChange(par1, par2, par3, par5Block.blockID);
101            par0World.notifyBlocksOfNeighborChange(par1, par2 + 1, par3, par5Block.blockID);
102        }
103    }