001    package net.minecraft.src;
002    
003    import net.minecraft.server.MinecraftServer;
004    
005    public class BehaviorDispenseBoat extends BehaviorDefaultDispenseItem
006    {
007        /** Reference to the BehaviorDefaultDispenseItem object. */
008        private final BehaviorDefaultDispenseItem defaultItemDispenseBehavior;
009    
010        final MinecraftServer mcServer;
011    
012        public BehaviorDispenseBoat(MinecraftServer par1MinecraftServer)
013        {
014            this.mcServer = par1MinecraftServer;
015            this.defaultItemDispenseBehavior = new BehaviorDefaultDispenseItem();
016        }
017    
018        /**
019         * Dispense the specified stack, play the dispense sound and spawn particles.
020         */
021        public ItemStack dispenseStack(IBlockSource par1IBlockSource, ItemStack par2ItemStack)
022        {
023            EnumFacing var3 = EnumFacing.func_82600_a(par1IBlockSource.func_82620_h());
024            World var4 = par1IBlockSource.getWorld();
025            double var5 = par1IBlockSource.getX() + (double)((float)var3.func_82601_c() * 1.125F);
026            double var7 = par1IBlockSource.getY();
027            double var9 = par1IBlockSource.getZ() + (double)((float)var3.func_82599_e() * 1.125F);
028            int var11 = par1IBlockSource.getXInt() + var3.func_82601_c();
029            int var12 = par1IBlockSource.getYInt();
030            int var13 = par1IBlockSource.getZInt() + var3.func_82599_e();
031            Material var14 = var4.getBlockMaterial(var11, var12, var13);
032            double var15;
033    
034            if (Material.water.equals(var14))
035            {
036                var15 = 1.0D;
037            }
038            else
039            {
040                if (!Material.air.equals(var14) || !Material.water.equals(var4.getBlockMaterial(var11, var12 - 1, var13)))
041                {
042                    return this.defaultItemDispenseBehavior.dispense(par1IBlockSource, par2ItemStack);
043                }
044    
045                var15 = 0.0D;
046            }
047    
048            EntityBoat var17 = new EntityBoat(var4, var5, var7 + var15, var9);
049            var4.spawnEntityInWorld(var17);
050            par2ItemStack.splitStack(1);
051            return par2ItemStack;
052        }
053    
054        /**
055         * Play the dispense sound from the specified block.
056         */
057        protected void playDispenseSound(IBlockSource par1IBlockSource)
058        {
059            par1IBlockSource.getWorld().playAuxSFX(1000, par1IBlockSource.getXInt(), par1IBlockSource.getYInt(), par1IBlockSource.getZInt(), 0);
060        }
061    }