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.setCreativeTab(CreativeTabs.tabRedstone); 013 } 014 015 /** 016 * Callback for item usage. If the item does something special on right clicking, he will have one of those. Return 017 * True if something happen and false if it don't. This is for ITEMS, not BLOCKS 018 */ 019 public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) 020 { 021 if (par7 != 1) 022 { 023 return false; 024 } 025 else 026 { 027 ++par5; 028 Block var11; 029 030 if (this.doorMaterial == Material.wood) 031 { 032 var11 = Block.doorWood; 033 } 034 else 035 { 036 var11 = Block.doorSteel; 037 } 038 039 if (par2EntityPlayer.canPlayerEdit(par4, par5, par6) && par2EntityPlayer.canPlayerEdit(par4, par5 + 1, par6)) 040 { 041 if (!var11.canPlaceBlockAt(par3World, par4, par5, par6)) 042 { 043 return false; 044 } 045 else 046 { 047 int var12 = MathHelper.floor_double((double)((par2EntityPlayer.rotationYaw + 180.0F) * 4.0F / 360.0F) - 0.5D) & 3; 048 placeDoorBlock(par3World, par4, par5, par6, var12, var11); 049 --par1ItemStack.stackSize; 050 return true; 051 } 052 } 053 else 054 { 055 return false; 056 } 057 } 058 } 059 060 public static void placeDoorBlock(World par0World, int par1, int par2, int par3, int par4, Block par5Block) 061 { 062 byte var6 = 0; 063 byte var7 = 0; 064 065 if (par4 == 0) 066 { 067 var7 = 1; 068 } 069 070 if (par4 == 1) 071 { 072 var6 = -1; 073 } 074 075 if (par4 == 2) 076 { 077 var7 = -1; 078 } 079 080 if (par4 == 3) 081 { 082 var6 = 1; 083 } 084 085 int var8 = (par0World.isBlockNormalCube(par1 - var6, par2, par3 - var7) ? 1 : 0) + (par0World.isBlockNormalCube(par1 - var6, par2 + 1, par3 - var7) ? 1 : 0); 086 int var9 = (par0World.isBlockNormalCube(par1 + var6, par2, par3 + var7) ? 1 : 0) + (par0World.isBlockNormalCube(par1 + var6, par2 + 1, par3 + var7) ? 1 : 0); 087 boolean var10 = par0World.getBlockId(par1 - var6, par2, par3 - var7) == par5Block.blockID || par0World.getBlockId(par1 - var6, par2 + 1, par3 - var7) == par5Block.blockID; 088 boolean var11 = par0World.getBlockId(par1 + var6, par2, par3 + var7) == par5Block.blockID || par0World.getBlockId(par1 + var6, par2 + 1, par3 + var7) == par5Block.blockID; 089 boolean var12 = false; 090 091 if (var10 && !var11) 092 { 093 var12 = true; 094 } 095 else if (var9 > var8) 096 { 097 var12 = true; 098 } 099 100 par0World.editingBlocks = true; 101 par0World.setBlockAndMetadataWithNotify(par1, par2, par3, par5Block.blockID, par4); 102 par0World.setBlockAndMetadataWithNotify(par1, par2 + 1, par3, par5Block.blockID, 8 | (var12 ? 1 : 0)); 103 par0World.editingBlocks = false; 104 par0World.notifyBlocksOfNeighborChange(par1, par2, par3, par5Block.blockID); 105 par0World.notifyBlocksOfNeighborChange(par1, par2 + 1, par3, par5Block.blockID); 106 } 107 }