71c84c8132
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 9a80d38c SPIGOT-336, SPIGOT-3366, SPIGOT-5768, SPIGOT-6409, SPIGOT-6861, PR-722: Add EntityRemoveEvent 258086d9 SPIGOT-7417, PR-967: Add Sign#getTargetSide and Sign#getAllowedEditor ffaba051 SPIGOT-7584: Add missing Tag.ITEMS_NON_FLAMMABLE_WOOD CraftBukkit Changes: 98b6c1ac7 SPIGOT-7589 Fix NullPointerException when bans expire a2736ddb0 SPIGOT-336, SPIGOT-3366, SPIGOT-5768, SPIGOT-6409, SPIGOT-6861, PR-1008: Add EntityRemoveEvent 5bf12cb89 SPIGOT-7565: Throw a more descriptive error message when a developer tries to spawn an entity from a CraftBukkit class 76d95fe7e SPIGOT-7417, PR-1343: Add Sign#getTargetSide and Sign#getAllowedEditor Spigot Changes: e9ec5485 Rebuild patches f1b62e0c Rebuild patches
155 Zeilen
7.4 KiB
Diff
155 Zeilen
7.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
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/world/entity/monster/Slime.java b/src/main/java/net/minecraft/world/entity/monster/Slime.java
|
|
index d536df2c23f8cae6bf920a5304d91f10a9902251..00dcbcbf20995ab6aca508d7ffe703bcb0d9b1a9 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/monster/Slime.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/monster/Slime.java
|
|
@@ -116,6 +116,7 @@ public class Slime extends Mob implements Enemy {
|
|
@Override
|
|
public void addAdditionalSaveData(CompoundTag nbt) {
|
|
super.addAdditionalSaveData(nbt);
|
|
+ nbt.putBoolean("Paper.canWander", this.canWander); // Paper
|
|
nbt.putInt("Size", this.getSize() - 1);
|
|
nbt.putBoolean("wasOnGround", this.wasOnGround);
|
|
}
|
|
@@ -124,6 +125,11 @@ public class Slime extends Mob implements Enemy {
|
|
public void readAdditionalSaveData(CompoundTag nbt) {
|
|
this.setSize(nbt.getInt("Size") + 1, false);
|
|
super.readAdditionalSaveData(nbt);
|
|
+ // Paper start
|
|
+ if (nbt.contains("Paper.canWander")) {
|
|
+ this.canWander = nbt.getBoolean("Paper.canWander");
|
|
+ }
|
|
+ // Paper end
|
|
this.wasOnGround = nbt.getBoolean("wasOnGround");
|
|
}
|
|
|
|
@@ -479,7 +485,7 @@ public class Slime extends Mob implements Enemy {
|
|
|
|
@Override
|
|
public boolean canUse() {
|
|
- return (this.slime.isInWater() || this.slime.isInLava()) && this.slime.getMoveControl() instanceof Slime.SlimeMoveControl;
|
|
+ return (this.slime.isInWater() || this.slime.isInLava()) && this.slime.getMoveControl() instanceof Slime.SlimeMoveControl && this.slime.canWander && new com.destroystokyo.paper.event.entity.SlimeSwimEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity()).callEvent(); // Paper - Slime pathfinder events
|
|
}
|
|
|
|
@Override
|
|
@@ -518,7 +524,15 @@ public class Slime extends Mob implements Enemy {
|
|
public boolean canUse() {
|
|
LivingEntity entityliving = this.slime.getTarget();
|
|
|
|
- return entityliving == null ? false : (!this.slime.canAttack(entityliving) ? false : this.slime.getMoveControl() instanceof Slime.SlimeMoveControl);
|
|
+ // Paper start - Slime pathfinder events
|
|
+ if (entityliving == null || !entityliving.isAlive()) {
|
|
+ return false;
|
|
+ }
|
|
+ if (!this.slime.canAttack(entityliving)) {
|
|
+ return false;
|
|
+ }
|
|
+ return this.slime.getMoveControl() instanceof Slime.SlimeMoveControl && this.slime.canWander && new com.destroystokyo.paper.event.entity.SlimeTargetLivingEntityEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity(), (org.bukkit.entity.LivingEntity) entityliving.getBukkitEntity()).callEvent();
|
|
+ // Paper end - Slime pathfinder events
|
|
}
|
|
|
|
@Override
|
|
@@ -531,7 +545,15 @@ public class Slime extends Mob implements Enemy {
|
|
public boolean canContinueToUse() {
|
|
LivingEntity entityliving = this.slime.getTarget();
|
|
|
|
- return entityliving == null ? false : (!this.slime.canAttack(entityliving) ? false : --this.growTiredTimer > 0);
|
|
+ // Paper start - Slime pathfinder events
|
|
+ if (entityliving == null || !entityliving.isAlive()) {
|
|
+ return false;
|
|
+ }
|
|
+ if (!this.slime.canAttack(entityliving)) {
|
|
+ return false;
|
|
+ }
|
|
+ return --this.growTiredTimer > 0 && this.slime.canWander && new com.destroystokyo.paper.event.entity.SlimeTargetLivingEntityEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity(), (org.bukkit.entity.LivingEntity) entityliving.getBukkitEntity()).callEvent();
|
|
+ // Paper end - Slime pathfinder events
|
|
}
|
|
|
|
@Override
|
|
@@ -556,6 +578,13 @@ public class Slime extends Mob implements Enemy {
|
|
}
|
|
|
|
}
|
|
+
|
|
+ // Paper start - Slime pathfinder events; clear timer and target when goal resets
|
|
+ public void stop() {
|
|
+ this.growTiredTimer = 0;
|
|
+ this.slime.setTarget(null);
|
|
+ }
|
|
+ // Paper end - Slime pathfinder events
|
|
}
|
|
|
|
private static class SlimeRandomDirectionGoal extends Goal {
|
|
@@ -571,7 +600,7 @@ public class Slime extends Mob implements Enemy {
|
|
|
|
@Override
|
|
public boolean canUse() {
|
|
- return this.slime.getTarget() == null && (this.slime.onGround() || this.slime.isInWater() || this.slime.isInLava() || this.slime.hasEffect(MobEffects.LEVITATION)) && this.slime.getMoveControl() instanceof Slime.SlimeMoveControl;
|
|
+ return this.slime.getTarget() == null && (this.slime.onGround() || this.slime.isInWater() || this.slime.isInLava() || this.slime.hasEffect(MobEffects.LEVITATION)) && this.slime.getMoveControl() instanceof Slime.SlimeMoveControl && this.slime.canWander; // Paper - Slime pathfinder events
|
|
}
|
|
|
|
@Override
|
|
@@ -579,6 +608,11 @@ public class Slime extends Mob implements Enemy {
|
|
if (--this.nextRandomizeTime <= 0) {
|
|
this.nextRandomizeTime = this.adjustedTickDelay(40 + this.slime.getRandom().nextInt(60));
|
|
this.chosenDegrees = (float) this.slime.getRandom().nextInt(360);
|
|
+ // Paper start - Slime pathfinder events
|
|
+ com.destroystokyo.paper.event.entity.SlimeChangeDirectionEvent event = new com.destroystokyo.paper.event.entity.SlimeChangeDirectionEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity(), this.chosenDegrees);
|
|
+ if (!this.slime.canWander || !event.callEvent()) return;
|
|
+ this.chosenDegrees = event.getNewYaw();
|
|
+ // Paper end - Slime pathfinder events
|
|
}
|
|
|
|
MoveControl controllermove = this.slime.getMoveControl();
|
|
@@ -603,7 +637,7 @@ public class Slime extends Mob implements Enemy {
|
|
|
|
@Override
|
|
public boolean canUse() {
|
|
- return !this.slime.isPassenger();
|
|
+ return !this.slime.isPassenger() && this.slime.canWander && new com.destroystokyo.paper.event.entity.SlimeWanderEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity()).callEvent(); // Paper - Slime pathfinder events
|
|
}
|
|
|
|
@Override
|
|
@@ -618,4 +652,15 @@ public class Slime extends Mob implements Enemy {
|
|
|
|
}
|
|
}
|
|
+
|
|
+ // Paper start - Slime pathfinder events
|
|
+ private boolean canWander = true;
|
|
+ public boolean canWander() {
|
|
+ return canWander;
|
|
+ }
|
|
+
|
|
+ public void setWander(boolean canWander) {
|
|
+ this.canWander = canWander;
|
|
+ }
|
|
+ // Paper end - Slime pathfinder events
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java
|
|
index 3d991d9d9388108ec6d137950913209d61d132e7..3d9b7c0e128ea05bec5600c774e9685998b71cac 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java
|
|
@@ -28,4 +28,16 @@ public class CraftSlime extends CraftMob implements Slime, CraftEnemy {
|
|
public String toString() {
|
|
return "CraftSlime";
|
|
}
|
|
+
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public boolean canWander() {
|
|
+ return getHandle().canWander();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setWander(boolean canWander) {
|
|
+ getHandle().setWander(canWander);
|
|
+ }
|
|
+ // Paper end
|
|
}
|