2018-09-29 22:00:55 +02:00
From 94377d65907b8bb20d19f0a357e1d37b851b68f6 Mon Sep 17 00:00:00 2001
2018-08-24 16:40:14 +02:00
From: BillyGalbreath <Blake.Galbreath@GMail.com>
Date: Fri, 24 Aug 2018 08:18:42 -0500
Subject: [PATCH] Slime Pathfinder Events
diff --git a/src/main/java/net/minecraft/server/EntitySlime.java b/src/main/java/net/minecraft/server/EntitySlime.java
2018-09-29 22:00:55 +02:00
index 238f3c792..586b9a3a6 100644
2018-08-24 16:40:14 +02:00
--- a/src/main/java/net/minecraft/server/EntitySlime.java
+++ b/src/main/java/net/minecraft/server/EntitySlime.java
@@ -57,6 +57,7 @@ public class EntitySlime extends EntityInsentient implements IMonster {
super.b(nbttagcompound);
nbttagcompound.setInt("Size", this.getSize() - 1);
nbttagcompound.setBoolean("wasOnGround", this.bD);
+ nbttagcompound.setBoolean("Paper.canWander", this.canWander); // Paper
}
public void a(NBTTagCompound nbttagcompound) {
2018-09-29 22:00:55 +02:00
@@ -69,6 +70,11 @@ public class EntitySlime extends EntityInsentient implements IMonster {
2018-08-24 16:40:14 +02:00
this.setSize(i + 1, false);
this.bD = nbttagcompound.getBoolean("wasOnGround");
2018-09-29 22:00:55 +02:00
+ // Paper start - check exists before loading or this will be loaded as false
+ if (nbttagcompound.hasKey("Paper.canWander")) {
+ this.canWander = nbttagcompound.getBoolean("Paper.canWander");
+ }
+ // Paper end
2018-08-24 16:40:14 +02:00
}
2018-08-26 20:11:49 +02:00
public boolean dy() {
2018-09-29 22:00:55 +02:00
@@ -308,7 +314,7 @@ public class EntitySlime extends EntityInsentient implements IMonster {
2018-08-24 16:40:14 +02:00
}
public boolean a() {
- return true;
+ return this.a.canWander && new com.destroystokyo.paper.event.entity.SlimeWanderEvent((org.bukkit.entity.Slime) this.a.getBukkitEntity()).callEvent(); // Paper
}
public void e() {
2018-09-29 22:00:55 +02:00
@@ -327,7 +333,7 @@ public class EntitySlime extends EntityInsentient implements IMonster {
2018-08-24 16:40:14 +02:00
}
public boolean a() {
- return this.a.isInWater() || this.a.ax();
+ return (this.a.isInWater() || this.a.ax()) && this.a.canWander && new com.destroystokyo.paper.event.entity.SlimeSwimEvent((org.bukkit.entity.Slime) this.a.getBukkitEntity()).callEvent(); // Paper
}
public void e() {
2018-09-29 22:00:55 +02:00
@@ -351,13 +357,17 @@ public class EntitySlime extends EntityInsentient implements IMonster {
2018-08-24 16:40:14 +02:00
}
public boolean a() {
- return this.a.getGoalTarget() == null && (this.a.onGround || this.a.isInWater() || this.a.ax() || this.a.hasEffect(MobEffects.LEVITATION));
+ return this.a.canWander && this.a.getGoalTarget() == null && (this.a.onGround || this.a.isInWater() || this.a.ax() || this.a.hasEffect(MobEffects.LEVITATION)); // Paper
}
public void e() {
if (--this.c <= 0) {
this.c = 40 + this.a.getRandom().nextInt(60);
- this.b = (float) this.a.getRandom().nextInt(360);
+ // Paper start
+ com.destroystokyo.paper.event.entity.SlimeChangeDirectionEvent event = new com.destroystokyo.paper.event.entity.SlimeChangeDirectionEvent((org.bukkit.entity.Slime) this.a.getBukkitEntity(), (float) this.a.getRandom().nextInt(360));
+ if (!this.a.canWander || !event.callEvent()) return;
+ this.b = event.getNewYaw();
+ // Paper end
}
((EntitySlime.ControllerMoveSlime) this.a.getControllerMove()).a(this.b, false);
2018-09-29 22:00:55 +02:00
@@ -377,7 +387,16 @@ public class EntitySlime extends EntityInsentient implements IMonster {
2018-08-24 16:40:14 +02:00
public boolean a() {
EntityLiving entityliving = this.a.getGoalTarget();
- return entityliving == null ? false : (!entityliving.isAlive() ? false : !(entityliving instanceof EntityHuman) || !((EntityHuman) entityliving).abilities.isInvulnerable);
+ // Paper start
+ if (entityliving != null && entityliving.isAlive() && (!(entityliving instanceof EntityHuman) || !((EntityHuman) entityliving).abilities.isInvulnerable)) {
+ if (this.a.canWander && new com.destroystokyo.paper.event.entity.SlimeTargetLivingEntityEvent((org.bukkit.entity.Slime) this.a.getBukkitEntity(), (org.bukkit.entity.LivingEntity) entityliving.getBukkitEntity()).callEvent()) {
+ return true;
+ }
+ this.b = 0;
+ this.a.setGoalTarget(null);
+ }
+ return false;
+ // Paper end
}
public void c() {
2018-09-29 22:00:55 +02:00
@@ -388,7 +407,16 @@ public class EntitySlime extends EntityInsentient implements IMonster {
2018-08-24 16:40:14 +02:00
public boolean b() {
EntityLiving entityliving = this.a.getGoalTarget();
- return entityliving == null ? false : (!entityliving.isAlive() ? false : (entityliving instanceof EntityHuman && ((EntityHuman) entityliving).abilities.isInvulnerable ? false : --this.b > 0));
+ // Paper start
+ if (entityliving != null && entityliving.isAlive() && (!(entityliving instanceof EntityHuman) || !((EntityHuman) entityliving).abilities.isInvulnerable)) {
+ if (this.a.canWander && new com.destroystokyo.paper.event.entity.SlimeTargetLivingEntityEvent((org.bukkit.entity.Slime) this.a.getBukkitEntity(), (org.bukkit.entity.LivingEntity) entityliving.getBukkitEntity()).callEvent()) {
+ return true;
+ }
+ this.b = 0;
+ this.a.setGoalTarget(null);
+ }
+ return false;
+ // Paper end
}
public void e() {
2018-09-29 22:00:55 +02:00
@@ -452,4 +480,15 @@ public class EntitySlime extends EntityInsentient implements IMonster {
2018-08-24 16:40:14 +02:00
}
}
}
+
+ // Paper start
+ private boolean canWander = true;
+ public boolean canWander() {
+ return canWander;
+ }
+
+ public void setWander(boolean canWander) {
+ this.canWander = canWander;
+ }
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java
2018-09-29 22:00:55 +02:00
index 18e7ef80a..8403c1e01 100644
2018-08-24 16:40:14 +02:00
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java
@@ -33,4 +33,14 @@ public class CraftSlime extends CraftMob implements Slime {
public EntityType getType() {
return EntityType.SLIME;
}
+
+ // Paper start
+ public boolean canWander() {
+ return getHandle().canWander();
+ }
+
+ public void setWander(boolean canWander) {
+ getHandle().setWander(canWander);
+ }
+ // Paper end
}
--
2018-09-27 04:35:42 +02:00
2.19.0
2018-08-24 16:40:14 +02:00