Java 类net.minecraft.item.ItemFireball 实例源码

项目:AdvancedCombat    文件:BlockTrackingDispenser.java   
/** Custom dispense routines */
@Override
protected void dispense(World worldIn, BlockPos pos) {
       BlockSourceImpl src = new BlockSourceImpl(worldIn, pos);
       TileEntityDispenser tile = (TileEntityDispenser)src.getBlockTileEntity();

       if (tile != null) {
           int i = tile.getDispenseSlot();

           if (i < 0) {
               worldIn.playEvent(1001, pos, 0);
           } else {

            // get the active item from its slot
               ItemStack itemstack = tile.getStackInSlot(i);
               IBehaviorDispenseItem defaultbehavior = this.getBehavior(itemstack);

               // make sure it's not regular dropper behavior
               if (defaultbehavior != IBehaviorDispenseItem.DEFAULT_BEHAVIOR) {
                ItemStack itemstack1 = null;

                // replace vanilla behavior
                if(defaultbehavior instanceof BehaviorProjectileDispense) {
                    itemstack1 = this.dispenseProjectile((BehaviorProjectileDispense)defaultbehavior, src, itemstack);
                } else if(itemstack.getItem() instanceof ItemSplashPotion || itemstack.getItem() instanceof ItemLingeringPotion) {
                    itemstack1 = this.dispensePotion(src, itemstack);
                } else if(itemstack.getItem() instanceof ItemFireball) {
                    itemstack1 = this.dispenseFireball(src, itemstack);
                }

                // revert to vanilla on failure
                if(itemstack1 == null) {
                    itemstack1 = defaultbehavior.dispense(src, itemstack);
                }

                // update the inventory
                   tile.setInventorySlotContents(i, itemstack1.getCount() <= 0 ? ItemStack.EMPTY : itemstack1);
               }
           }
       }
   }