From 3eb8c7a8fca3f22475d53e30f0b90a6737f313fa Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Thu, 24 May 2018 15:53:20 -0400 Subject: Initial commit --- .../fyresmodjam/entities/EntityMysteryPotion.java | 253 +++++++++++++++++++++ 1 file changed, 253 insertions(+) create mode 100755 YWD/src/main/java/fyresmodjam/entities/EntityMysteryPotion.java (limited to 'YWD/src/main/java/fyresmodjam/entities/EntityMysteryPotion.java') diff --git a/YWD/src/main/java/fyresmodjam/entities/EntityMysteryPotion.java b/YWD/src/main/java/fyresmodjam/entities/EntityMysteryPotion.java new file mode 100755 index 0000000..6c4eef5 --- /dev/null +++ b/YWD/src/main/java/fyresmodjam/entities/EntityMysteryPotion.java @@ -0,0 +1,253 @@ +package fyresmodjam.entities; + +import java.util.Iterator; +import java.util.List; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import fyresmodjam.ModjamMod; +import fyresmodjam.blessings.BlessingUtils; +import fyresmodjam.handlers.CommonTickHandler; +import fyresmodjam.handlers.NewPacketHandler; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityThrowable; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; + +public class EntityMysteryPotion extends EntityThrowable { + + public EntityMysteryPotion(World par1World) { + super(par1World); + } + + public EntityMysteryPotion(World par1World, + EntityLivingBase par2EntityLivingBase, int par3) { + this(par1World, par2EntityLivingBase, null); + } + + public EntityMysteryPotion(World par1World, + EntityLivingBase par2EntityLivingBase, + ItemStack par4ItemStack) { + super(par1World, par2EntityLivingBase); + + if (par4ItemStack != null) { + int damage = par4ItemStack.getItemDamage(); + dataWatcher.updateObject(24, damage); + if (damage % 13 < 12) { + dataWatcher.updateObject(25, + CommonTickHandler.worldData.potionDurations[damage + % 13]); + } + } + } + + @Override + public void entityInit() { + super.entityInit(); + + dataWatcher.addObject(24, 0); + dataWatcher.addObject(25, 0); + } + + @SideOnly(Side.CLIENT) + public EntityMysteryPotion(World par1World, double par2, + double par4, double par6, int par8) { + this(par1World, par2, par4, par6, + new ItemStack(Items.potionitem, 1, par8)); + } + + public EntityMysteryPotion(World par1World, double par2, + double par4, double par6, + ItemStack par4ItemStack) { + super(par1World, par2, par4, par6); + + if (par4ItemStack != null) { + int damage = par4ItemStack.getItemDamage(); + dataWatcher.updateObject(24, damage); + dataWatcher.updateObject(25, + CommonTickHandler.worldData.potionDurations[damage + % 13]); + } + } + + @Override + protected float getGravityVelocity() { + return 0.05F; + } + + @Override + protected float func_70182_d() { + return 0.5F; + } + + @Override + protected float func_70183_g() { + return -20.0F; + } + + @Override + @SuppressWarnings("rawtypes") + protected void onImpact( + MovingObjectPosition par1MovingObjectPosition) { + if (!worldObj.isRemote) { + AxisAlignedBB axisalignedbb = boundingBox + .expand(4.0D, 2.0D, 4.0D); + List list1 = worldObj.getEntitiesWithinAABB( + EntityLivingBase.class, + axisalignedbb); + + if (list1 != null && !list1.isEmpty()) { + int type = getDataWatcher() + .getWatchableObjectInt(24) + % 13; + int j = type >= 12 + ? (5 + ModjamMod.r.nextInt( + 26)) + : getDataWatcher() + .getWatchableObjectInt( + 25); + + int damage = 0; + + if (type >= 12 || (BlessingUtils + .hasBlessing(getThrower(), + "BlessingAlchemist"))) { + damage = ModjamMod.r.nextInt( + Potion.potionTypes.length); + while (Potion.potionTypes[damage] == null) { + damage = ModjamMod.r + .nextInt(Potion.potionTypes.length); + } + } else { + damage = CommonTickHandler.worldData.potionValues[type]; + } + + Iterator iterator = list1.iterator(); + + while (iterator.hasNext()) { + EntityLivingBase entitylivingbase = (EntityLivingBase) iterator + .next(); + double d0 = getDistanceSqToEntity( + entitylivingbase); + + if (d0 < 16.0D) { + if (Potion.potionTypes[damage] + .isInstant()) { + Potion.potionTypes[damage] + .affectEntity(getThrower(), + entitylivingbase, + 1, + 1); + } else { + entitylivingbase.addPotionEffect( + new PotionEffect( + damage, + j * 20, + 1, + false)); + } + } + } + + if (getThrower() instanceof EntityPlayer) { + EntityPlayer par3EntityPlayer = (EntityPlayer) getThrower(); + + if (type < 12 && (!BlessingUtils + .hasBlessing(getThrower(), + "BlessingAlchemist"))) { + if (!par3EntityPlayer + .getEntityData() + .hasKey("PotionKnowledge")) { + par3EntityPlayer.getEntityData() + .setIntArray("PotionKnowledge", + new int[] { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }); + } + + if (par3EntityPlayer + .getEntityData() + .getIntArray("PotionKnowledge")[type] == -1) { + par3EntityPlayer.getEntityData() + .getIntArray("PotionKnowledge")[type] = 1; + + NewPacketHandler.UPDATE_POTION_KNOWLEDGE + .sendToPlayer(par3EntityPlayer, + par3EntityPlayer.getEntityData() + .getIntArray("PotionKnowledge")); + + Potion potion = Potion.potionTypes[CommonTickHandler.worldData.potionValues[type]]; + String name = StatCollector + .translateToLocal( + potion.getName()) + + " Potion"; + + if (!potion.isInstant()) { + int time = CommonTickHandler.worldData.potionDurations[type]; + name += " (" + time + + " seconds)"; + } + + NewPacketHandler.SEND_MESSAGE + .sendToPlayer(par3EntityPlayer, + "\u00A7oYou learnt Mystery Potion #" + + (type + 1) + + " was a " + + name + + "!"); + } + } else { + Potion potion = Potion.potionTypes[damage]; + String name = StatCollector + .translateToLocal( + potion.getName()) + + " Potion"; + if (!potion.isInstant()) { + name += " (" + j + " seconds)"; + } + + NewPacketHandler.SEND_MESSAGE + .sendToPlayer(par3EntityPlayer, + "\u00A7oYou threw a " + + name + + "."); + } + } + } + + worldObj.playAuxSFX(2002, (int) Math.round(posX), + (int) Math.round(posY), + (int) Math.round(posZ), 1); + setDead(); + } + } + + @Override + public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) { + super.readEntityFromNBT(par1NBTTagCompound); + } + + @Override + public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) { + super.writeEntityToNBT(par1NBTTagCompound); + } +} -- cgit v1.2.3