public boolean isThrowable() { if (item instanceof ItemBow || item instanceof ItemSnowball || item instanceof ItemEgg || item instanceof ItemEnderPearl || item instanceof ItemSplashPotion || item instanceof ItemLingeringPotion || item instanceof ItemFishingRod) { return true; } return false; }
@SubscribeEvent public void cancelCertainPotionBrewing(PotionBrewEvent.Pre evt) { ItemStack modifier = evt.getItem(3); for (int i = 0; i < evt.getLength(); i++) { ItemStack stack = evt.getItem(i); if (!stack.isEmpty()) { ItemStack output = BrewingRecipeRegistry.getOutput(stack, modifier); if (output.getItem() instanceof ItemPotion) { if (!ConfigHandler.allowBrewingPotionSplash && output.getItem() instanceof ItemSplashPotion) { evt.setCanceled(true); return; } if (!ConfigHandler.allowBrewingPotionLingering && output.getItem() instanceof ItemLingeringPotion) { evt.setCanceled(true); return; } List<PotionEffect> potionEffects = PotionUtils.getEffectsFromStack(output); for (PotionEffect effect : potionEffects) { if (effect.getAmplifier() > ConfigHandler.brewingPotionMaxLevel) { evt.setCanceled(true); return; } if (!ConfigHandler.allowBrewingPotionRegen && effect.getPotion() == MobEffects.REGENERATION) { evt.setCanceled(true); return; } } } } } }
/** 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); } } } }