summaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/net/minecraft/server/MobEffect.java143
1 files changed, 143 insertions, 0 deletions
diff --git a/src/main/java/net/minecraft/server/MobEffect.java b/src/main/java/net/minecraft/server/MobEffect.java
new file mode 100644
index 00000000..726a447a
--- /dev/null
+++ b/src/main/java/net/minecraft/server/MobEffect.java
@@ -0,0 +1,143 @@
+package net.minecraft.server;
+
+public class MobEffect {
+
+ private int effectId;
+ private int duration;
+ private int amplification;
+ private boolean splash;
+ private boolean ambient;
+
+ public MobEffect(int i, int j) {
+ this(i, j, 0);
+ }
+
+ public MobEffect(int i, int j, int k) {
+ this(i, j, k, false);
+ }
+
+ public MobEffect(int i, int j, int k, boolean flag) {
+ this.effectId = i;
+ this.duration = j;
+ this.amplification = k;
+ this.ambient = flag;
+ }
+
+ public MobEffect(MobEffect mobeffect) {
+ this.effectId = mobeffect.effectId;
+ this.duration = mobeffect.duration;
+ this.amplification = mobeffect.amplification;
+ }
+
+ public void a(MobEffect mobeffect) {
+ if (this.effectId != mobeffect.effectId) {
+ System.err.println("This method should only be called for matching effects!");
+ }
+
+ if (mobeffect.amplification > this.amplification) {
+ this.amplification = mobeffect.amplification;
+ this.duration = mobeffect.duration;
+ } else if (mobeffect.amplification == this.amplification && this.duration < mobeffect.duration) {
+ this.duration = mobeffect.duration;
+ } else if (!mobeffect.ambient && this.ambient) {
+ this.ambient = mobeffect.ambient;
+ }
+ }
+
+ public int getEffectId() {
+ return this.effectId;
+ }
+
+ public int getDuration() {
+ return this.duration;
+ }
+
+ public int getAmplifier() {
+ return this.amplification;
+ }
+
+ public boolean isSplash() {
+ return this.splash;
+ }
+
+ public void setSplash(boolean flag) {
+ this.splash = flag;
+ }
+
+ public boolean isAmbient() {
+ return this.ambient;
+ }
+
+ public boolean tick(EntityLiving entityliving) {
+ if (this.duration > 0) {
+ if (MobEffectList.byId[this.effectId].a(this.duration, this.amplification)) {
+ this.b(entityliving);
+ }
+
+ this.h();
+ }
+
+ return this.duration > 0;
+ }
+
+ private int h() {
+ return --this.duration;
+ }
+
+ public void b(EntityLiving entityliving) {
+ if (this.duration > 0) {
+ MobEffectList.byId[this.effectId].tick(entityliving, this.amplification);
+ }
+ }
+
+ public String f() {
+ return MobEffectList.byId[this.effectId].a();
+ }
+
+ public int hashCode() {
+ return this.effectId;
+ }
+
+ public String toString() {
+ String s = "";
+
+ if (this.getAmplifier() > 0) {
+ s = this.f() + " x " + (this.getAmplifier() + 1) + ", Duration: " + this.getDuration();
+ } else {
+ s = this.f() + ", Duration: " + this.getDuration();
+ }
+
+ if (this.splash) {
+ s = s + ", Splash: true";
+ }
+
+ return MobEffectList.byId[this.effectId].i() ? "(" + s + ")" : s;
+ }
+
+ public boolean equals(Object object) {
+ if (!(object instanceof MobEffect)) {
+ return false;
+ } else {
+ MobEffect mobeffect = (MobEffect) object;
+
+ return this.effectId == mobeffect.effectId && this.amplification == mobeffect.amplification && this.duration == mobeffect.duration && this.splash == mobeffect.splash && this.ambient == mobeffect.ambient;
+ }
+ }
+
+ public NBTTagCompound a(NBTTagCompound nbttagcompound) {
+ nbttagcompound.setByte("Id", (byte) this.getEffectId());
+ nbttagcompound.setByte("Amplifier", (byte) this.getAmplifier());
+ nbttagcompound.setInt("Duration", this.getDuration());
+ nbttagcompound.setBoolean("Ambient", this.isAmbient());
+ return nbttagcompound;
+ }
+
+ public static MobEffect b(NBTTagCompound nbttagcompound) {
+ byte b0 = nbttagcompound.getByte("Id");
+ byte b1 = nbttagcompound.getByte("Amplifier");
+ int i = nbttagcompound.getInt("Duration");
+ boolean flag = nbttagcompound.getBoolean("Ambient");
+
+ return new MobEffect(b0, i, b1, flag);
+ }
+}