diff options
Diffstat (limited to 'Spigot-Server-Patches-Unmapped/0270-Slime-Pathfinder-Events.patch')
-rw-r--r-- | Spigot-Server-Patches-Unmapped/0270-Slime-Pathfinder-Events.patch | 167 |
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 + } |