package ley.modding.dartcraft.event; import cpw.mods.fml.common.Mod.EventHandler; import ley.modding.dartcraft.Dartcraft; import ley.modding.dartcraft.item.DartItems; import ley.modding.dartcraft.util.EntityUtils; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityAgeable; import net.minecraft.entity.EntityList; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.monster.*; import net.minecraft.entity.passive.*; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraftforge.event.entity.player.EntityItemPickupEvent; import net.minecraftforge.event.entity.player.PlayerEvent; public class EntityBottleHandler { @EventHandler public void handleTaggedPickup(EntityItemPickupEvent event) { try { if (((PlayerEvent) event).entityPlayer == null || event.item == null || event.item.getEntityItem() == null) return; boolean trigger = false; if (event.item.getEntityItem().getItem() == DartItems.entitybottle) if (meshBottles( ((PlayerEvent) event).entityPlayer, event.item.getEntityItem() )) { event.setCanceled(true); trigger = true; } if (Dartcraft.proxy.isSimulating( ((Entity) ((PlayerEvent) event).entityPlayer).worldObj ) && trigger) { ((Entity) ((PlayerEvent) event).entityPlayer) .worldObj.playSoundAtEntity( (Entity) ((PlayerEvent) event).entityPlayer, "random.pop", 0.25F, EntityUtils.randomPitch() ); ((Entity) ((PlayerEvent) event).entityPlayer) .worldObj.removeEntity((Entity) event.item); } } catch (Exception e) { e.printStackTrace(); } } public static boolean meshBottles(EntityPlayer player, ItemStack item) { try { EntityLivingBase entityOne = (EntityLivingBase ) EntityList.createEntityFromNBT(item.getTagCompound(), null); if (!getHandleEntity((Entity) entityOne)) return false; String nameOne = entityOne.getClass().getCanonicalName(); ItemStack[] equipOne = new ItemStack[5]; int color = 0; boolean child = false; boolean villager = false; String owner = ""; String nameTagName = entityOne.getEntityData().getString("nameTagName"); if (entityOne instanceof EntitySheep) color = ((EntitySheep) entityOne).getFleeceColor(); if (entityOne instanceof EntityAgeable && ((EntityAgeable) entityOne).isChild()) child = true; if (entityOne instanceof EntityZombie && ((EntityZombie) entityOne).isChild()) child = true; if (entityOne instanceof EntityZombie && ((EntityZombie) entityOne).isVillager()) villager = true; if (entityOne instanceof EntityTameable) { EntityLivingBase owningEntity = ((EntityTameable) entityOne).getOwner(); owner = (owningEntity != null) ? owningEntity.getCommandSenderName() : null; } int i; for (i = 0; i < 5; i++) { equipOne[i] = entityOne.getEquipmentInSlot(i); if (equipOne[i] != null && (!(entityOne instanceof EntityPigZombie) || i != 0 || equipOne[i].getItem() != net.minecraft.init.Items.golden_sword )) return false; } for (i = 0; i < player.inventory.mainInventory.length; i++) { ItemStack invStack = player.inventory.mainInventory[i]; if (invStack != null && invStack.getItem() == DartItems.entitybottle && invStack.hasTagCompound() && invStack.stackSize < invStack.getMaxStackSize()) { EntityLivingBase entityTwo = (EntityLivingBase ) EntityList.createEntityFromNBT(invStack.getTagCompound(), null); if (nameOne.equals(entityTwo.getClass().getCanonicalName())) if (!(entityTwo instanceof EntitySheep) || ((EntitySheep) entityTwo).getFleeceColor() == color) if (!(entityTwo instanceof EntityAgeable) || ((EntityAgeable) entityTwo).isChild() == child) if (!(entityTwo instanceof EntityZombie) || ((EntityZombie) entityTwo).isChild() == child) if (!(entityTwo instanceof EntityZombie) || ((EntityZombie) entityTwo).isVillager() == villager) if (!(entityTwo instanceof EntityTameable) || ((EntityTameable) entityTwo) .getOwner() .equals(owner)) { for (int j = 0; j < 5; j++) { ItemStack checkStack = entityTwo.getEquipmentInSlot(j); if (checkStack != null && (!(entityOne instanceof EntityPigZombie) || j != 0 || checkStack.getItem() != net.minecraft.init.Items .golden_sword)) return false; } invStack.stackSize++; invStack.animationsToGo = 10; return true; } } } } catch (Exception e) {} return false; } private static boolean getHandleEntity(Entity entity) { try { String name = entity.getClass().getCanonicalName(); Class[] accepted = { EntityCow.class, EntityChicken.class, EntitySheep.class, EntityPig.class, EntityWolf.class, EntityZombie.class, EntityEnderman.class, EntityGhast.class, EntityBlaze.class, EntityPigZombie.class, EntitySkeleton.class }; for (Class check : accepted) { if (name.equals(check.getCanonicalName())) return true; } } catch (Exception e) { e.printStackTrace(); } return false; } }