aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches-Unmapped/0270-Slime-Pathfinder-Events.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Spigot-Server-Patches-Unmapped/0270-Slime-Pathfinder-Events.patch')
-rw-r--r--Spigot-Server-Patches-Unmapped/0270-Slime-Pathfinder-Events.patch167
1 files changed, 167 insertions, 0 deletions
diff --git a/Spigot-Server-Patches-Unmapped/0270-Slime-Pathfinder-Events.patch b/Spigot-Server-Patches-Unmapped/0270-Slime-Pathfinder-Events.patch
new file mode 100644
index 0000000000..c9e838ba63
--- /dev/null
+++ b/Spigot-Server-Patches-Unmapped/0270-Slime-Pathfinder-Events.patch
@@ -0,0 +1,167 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: BillyGalbreath <[email protected]>
+Date: Fri, 24 Aug 2018 08:18:42 -0500
+Subject: [PATCH] Slime Pathfinder Events
+
+
+diff --git a/src/main/java/net/minecraft/world/entity/monster/EntitySlime.java b/src/main/java/net/minecraft/world/entity/monster/EntitySlime.java
+index 01d5b0db9a34d88172e8c7c84c4e1d0b2562217c..40e39e382092b1a8f831da0cea1557a781c98600 100644
+--- a/src/main/java/net/minecraft/world/entity/monster/EntitySlime.java
++++ b/src/main/java/net/minecraft/world/entity/monster/EntitySlime.java
+@@ -45,6 +45,14 @@ import net.minecraft.world.level.levelgen.SeededRandom;
+ import net.minecraft.world.level.storage.loot.LootTables;
+ import net.minecraft.world.phys.Vec3D;
+
++// Paper start
++import com.destroystokyo.paper.event.entity.SlimeChangeDirectionEvent;
++import com.destroystokyo.paper.event.entity.SlimeSwimEvent;
++import com.destroystokyo.paper.event.entity.SlimeTargetLivingEntityEvent;
++import com.destroystokyo.paper.event.entity.SlimeWanderEvent;
++import org.bukkit.entity.LivingEntity;
++import org.bukkit.entity.Slime;
++// Paper end
+ // CraftBukkit start
+ import java.util.ArrayList;
+ import java.util.List;
+@@ -105,6 +113,7 @@ public class EntitySlime extends EntityInsentient implements IMonster {
+ @Override
+ public void saveData(NBTTagCompound nbttagcompound) {
+ super.saveData(nbttagcompound);
++ nbttagcompound.setBoolean("Paper.canWander", this.canWander); // Paper
+ nbttagcompound.setInt("Size", this.getSize() - 1);
+ nbttagcompound.setBoolean("wasOnGround", this.bp);
+ }
+@@ -119,6 +128,11 @@ public class EntitySlime extends EntityInsentient implements IMonster {
+
+ this.setSize(i + 1, false);
+ super.loadData(nbttagcompound);
++ // 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
+ this.bp = nbttagcompound.getBoolean("wasOnGround");
+ }
+
+@@ -398,7 +412,7 @@ public class EntitySlime extends EntityInsentient implements IMonster {
+
+ @Override
+ public boolean a() {
+- return !this.a.isPassenger();
++ return !this.a.isPassenger() && this.a.canWander && new SlimeWanderEvent((Slime) this.a.getBukkitEntity()).callEvent(); // Paper
+ }
+
+ @Override
+@@ -419,7 +433,7 @@ public class EntitySlime extends EntityInsentient implements IMonster {
+
+ @Override
+ public boolean a() {
+- return (this.a.isInWater() || this.a.aQ()) && this.a.getControllerMove() instanceof EntitySlime.ControllerMoveSlime;
++ return (this.a.isInWater() || this.a.aQ()) && this.a.getControllerMove() instanceof EntitySlime.ControllerMoveSlime && this.a.canWander && new SlimeSwimEvent((Slime) this.a.getBukkitEntity()).callEvent(); // Paper
+ }
+
+ @Override
+@@ -445,14 +459,18 @@ public class EntitySlime extends EntityInsentient implements IMonster {
+
+ @Override
+ public boolean a() {
+- return this.a.getGoalTarget() == null && (this.a.onGround || this.a.isInWater() || this.a.aQ() || this.a.hasEffect(MobEffects.LEVITATION)) && this.a.getControllerMove() instanceof EntitySlime.ControllerMoveSlime;
++ return this.a.getGoalTarget() == null && (this.a.onGround || this.a.isInWater() || this.a.aQ() || this.a.hasEffect(MobEffects.LEVITATION)) && this.a.getControllerMove() instanceof EntitySlime.ControllerMoveSlime && this.a.canWander; // Paper - add canWander
+ }
+
+ @Override
+ 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
++ SlimeChangeDirectionEvent event = new SlimeChangeDirectionEvent((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);
+@@ -473,7 +491,15 @@ public class EntitySlime extends EntityInsentient implements IMonster {
+ public boolean a() {
+ EntityLiving entityliving = this.a.getGoalTarget();
+
+- return entityliving == null ? false : (!entityliving.isAlive() ? false : (entityliving instanceof EntityHuman && ((EntityHuman) entityliving).abilities.isInvulnerable ? false : this.a.getControllerMove() instanceof EntitySlime.ControllerMoveSlime));
++ // Paper start
++ if (entityliving == null || !entityliving.isAlive()) {
++ return false;
++ }
++ if (entityliving instanceof EntityHuman && ((EntityHuman) entityliving).abilities.isInvulnerable) {
++ return false;
++ }
++ return this.a.getControllerMove() instanceof EntitySlime.ControllerMoveSlime && this.a.canWander && new SlimeTargetLivingEntityEvent((Slime) this.a.getBukkitEntity(), (LivingEntity) entityliving.getBukkitEntity()).callEvent();
++ // Paper end
+ }
+
+ @Override
+@@ -486,7 +512,15 @@ public class EntitySlime extends EntityInsentient implements IMonster {
+ 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()) {
++ return false;
++ }
++ if (entityliving instanceof EntityHuman && ((EntityHuman) entityliving).abilities.isInvulnerable) {
++ return false;
++ }
++ return --this.b > 0 && this.a.canWander && new SlimeTargetLivingEntityEvent((Slime) this.a.getBukkitEntity(), (LivingEntity) entityliving.getBukkitEntity()).callEvent();
++ // Paper end
+ }
+
+ @Override
+@@ -494,6 +528,13 @@ public class EntitySlime extends EntityInsentient implements IMonster {
+ this.a.a((Entity) this.a.getGoalTarget(), 10.0F, 10.0F);
+ ((EntitySlime.ControllerMoveSlime) this.a.getControllerMove()).a(this.a.yaw, this.a.eL());
+ }
++
++ // Paper start - clear timer and target when goal resets
++ public void d() {
++ this.b = 0;
++ this.a.setGoalTarget(null);
++ }
++ // Paper end
+ }
+
+ static class ControllerMoveSlime extends ControllerMove {
+@@ -552,4 +593,15 @@ public class EntitySlime extends EntityInsentient implements IMonster {
+ }
+ }
+ }
++
++ // 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
+index aa0ac8d8493dc79dda3fed2ff4d80c5b7a7e3df6..cf5c6030105e56813f526e710e5db0c59d88c99e 100644
+--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java
++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java
+@@ -35,4 +35,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
+ }