package net.minecraftplus.mcp_shatter; import java.util.Random; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.projectile.EntityArrow; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.stats.StatList; import net.minecraft.world.World; import net.minecraftforge.event.entity.player.ArrowLooseEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftplus._api.dictionary.Sounds; public class EventHandlerShatter { @SubscribeEvent public void onArrowLoose(ArrowLooseEvent parEvent) { //Compare To: @ItemBow int j = parEvent.charge; if (j < 40) return; World worldIn = parEvent.entityPlayer.worldObj; ItemStack stack = parEvent.bow; Random itemRand = new Random(); EntityPlayer playerIn = parEvent.entityPlayer; boolean flag = playerIn.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, stack) > 0; if (flag || playerIn.inventory.hasItem(Items.arrow)) { float f = (float)j / 20.0F; f = (f * f + f * 2.0F) / 3.0F; if ((double)f < 0.1D) { return; } if (f > 1.0F) { f = 1.0F; } EntityArrow entityarrow = new EntityArrowShatter(worldIn, playerIn, f * 2.0F); entityarrow.setIsCritical(true); int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, stack); if (k > 0) { entityarrow.setDamage(entityarrow.getDamage() + (double)k * 0.5D + 0.5D); } int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, stack); if (l > 0) { entityarrow.setKnockbackStrength(l); } if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, stack) > 0) { entityarrow.setFire(100); } stack.damageItem(1, playerIn); worldIn.playSoundAtEntity(playerIn, Sounds.RANDOM_BOW, 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F); if (flag) { entityarrow.canBePickedUp = 2; } else { playerIn.inventory.consumeInventoryItem(Items.arrow); } playerIn.triggerAchievement(StatList.objectUseStats[Item.getIdFromItem(stack.getItem())]); if (!worldIn.isRemote) { worldIn.spawnEntityInWorld(entityarrow); } parEvent.setCanceled(true); } } }