package net.minecraft.potion; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class PotionEffect { private static final Logger LOGGER = LogManager.getLogger(); /** ID value of the potion this effect matches. */ private int potionID; /** The duration of the potion effect */ private int duration; /** The amplifier of the potion effect */ private int amplifier; /** Whether the potion is a splash potion */ private boolean isSplashPotion; /** Whether the potion effect came from a beacon */ private boolean isAmbient; private boolean showParticles; private static final String __OBFID = "CL_00001529"; public PotionEffect(int id, int effectDuration) { this(id, effectDuration, 0); } public PotionEffect(int id, int effectDuration, int effectAmplifier) { this(id, effectDuration, effectAmplifier, false, true); } public PotionEffect(int id, int effectDuration, int effectAmplifier, boolean ambient, boolean showParticles) { this.potionID = id; this.duration = effectDuration; this.amplifier = effectAmplifier; this.isAmbient = ambient; this.showParticles = showParticles; } public PotionEffect(PotionEffect other) { this.potionID = other.potionID; this.duration = other.duration; this.amplifier = other.amplifier; this.isAmbient = other.isAmbient; this.showParticles = other.showParticles; } /** * merges the input PotionEffect into this one if this.amplifier <= tomerge.amplifier. The duration in the supplied * potion effect is assumed to be greater. */ public void combine(PotionEffect other) { if (this.potionID != other.potionID) { LOGGER.warn("This method should only be called for matching effects!"); } if (other.amplifier > this.amplifier) { this.amplifier = other.amplifier; this.duration = other.duration; } else if (other.amplifier == this.amplifier && this.duration < other.duration) { this.duration = other.duration; } else if (!other.isAmbient && this.isAmbient) { this.isAmbient = other.isAmbient; } this.showParticles = other.showParticles; } /** * Retrieve the ID of the potion this effect matches. */ public int getPotionID() { return this.potionID; } public int getDuration() { return this.duration; } public int getAmplifier() { return this.amplifier; } /** * Set whether this potion is a splash potion. */ public void setSplashPotion(boolean splashPotion) { this.isSplashPotion = splashPotion; } /** * Gets whether this potion effect originated from a beacon */ public boolean getIsAmbient() { return this.isAmbient; } public boolean func_180154_f() { return this.showParticles; } public boolean onUpdate(EntityLivingBase entityIn) { if (this.duration > 0) { if (Potion.potionTypes[this.potionID].isReady(this.duration, this.amplifier)) { this.performEffect(entityIn); } this.deincrementDuration(); } return this.duration > 0; } private int deincrementDuration() { return --this.duration; } public void performEffect(EntityLivingBase entityIn) { if (this.duration > 0) { Potion.potionTypes[this.potionID].performEffect(entityIn, this.amplifier); } } public String getEffectName() { return Potion.potionTypes[this.potionID].getName(); } public int hashCode() { return this.potionID; } public String toString() { String var1 = ""; if (this.getAmplifier() > 0) { var1 = this.getEffectName() + " x " + (this.getAmplifier() + 1) + ", Duration: " + this.getDuration(); } else { var1 = this.getEffectName() + ", Duration: " + this.getDuration(); } if (this.isSplashPotion) { var1 = var1 + ", Splash: true"; } if (!this.showParticles) { var1 = var1 + ", Particles: false"; } return Potion.potionTypes[this.potionID].isUsable() ? "(" + var1 + ")" : var1; } public boolean equals(Object p_equals_1_) { if (!(p_equals_1_ instanceof PotionEffect)) { return false; } else { PotionEffect var2 = (PotionEffect)p_equals_1_; return this.potionID == var2.potionID && this.amplifier == var2.amplifier && this.duration == var2.duration && this.isSplashPotion == var2.isSplashPotion && this.isAmbient == var2.isAmbient; } } /** * Write a custom potion effect to a potion item's NBT data. */ public NBTTagCompound writeCustomPotionEffectToNBT(NBTTagCompound nbt) { nbt.setByte("Id", (byte)this.getPotionID()); nbt.setByte("Amplifier", (byte)this.getAmplifier()); nbt.setInteger("Duration", this.getDuration()); nbt.setBoolean("Ambient", this.getIsAmbient()); nbt.setBoolean("ShowParticles", this.func_180154_f()); return nbt; } /** * Read a custom potion effect from a potion item's NBT data. */ public static PotionEffect readCustomPotionEffectFromNBT(NBTTagCompound nbt) { byte var1 = nbt.getByte("Id"); if (var1 >= 0 && var1 < Potion.potionTypes.length && Potion.potionTypes[var1] != null) { byte var2 = nbt.getByte("Amplifier"); int var3 = nbt.getInteger("Duration"); boolean var4 = nbt.getBoolean("Ambient"); boolean var5 = true; if (nbt.hasKey("ShowParticles", 1)) { var5 = nbt.getBoolean("ShowParticles"); } return new PotionEffect(var1, var3, var2, var4, var5); } else { return null; } } }