Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-16 11:30:06 +01:00
4104545b11
"It was from a different time before books were as jank as they are now. As time has gone on they've only proven to be worse and worse."
168 Zeilen
7.8 KiB
Diff
168 Zeilen
7.8 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 95fadcb0b90f4824b5c06673266ae04e73c8a219..e9d3e5eddaee0c8ae98755119b3c0734166cafa9 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/monster/Slime.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/monster/Slime.java
|
|
@@ -44,6 +44,12 @@ import net.minecraft.world.level.biome.Biomes;
|
|
import net.minecraft.world.level.levelgen.WorldgenRandom;
|
|
import net.minecraft.world.level.storage.loot.BuiltInLootTables;
|
|
import net.minecraft.world.phys.Vec3;
|
|
+// 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;
|
|
+// Paper end
|
|
// CraftBukkit start
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
@@ -108,6 +114,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);
|
|
}
|
|
@@ -116,6 +123,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 - check exists before loading or this will be loaded as false
|
|
+ if (nbt.contains("Paper.canWander")) {
|
|
+ this.canWander = nbt.getBoolean("Paper.canWander");
|
|
+ }
|
|
+ // Paper end
|
|
this.wasOnGround = nbt.getBoolean("wasOnGround");
|
|
}
|
|
|
|
@@ -453,7 +465,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 SlimeSwimEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity()).callEvent(); // Paper
|
|
}
|
|
|
|
@Override
|
|
@@ -480,7 +492,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
|
|
+ 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 SlimeTargetLivingEntityEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity(), (org.bukkit.entity.LivingEntity) entityliving.getBukkitEntity()).callEvent();
|
|
+ // Paper end
|
|
}
|
|
|
|
@Override
|
|
@@ -493,7 +513,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
|
|
+ if (entityliving == null || !entityliving.isAlive()) {
|
|
+ return false;
|
|
+ }
|
|
+ if (!this.slime.canAttack(entityliving)) {
|
|
+ return false;
|
|
+ }
|
|
+ return --this.growTiredTimer > 0 && this.slime.canWander && new SlimeTargetLivingEntityEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity(), (org.bukkit.entity.LivingEntity) entityliving.getBukkitEntity()).callEvent();
|
|
+ // Paper end
|
|
}
|
|
|
|
@Override
|
|
@@ -501,6 +529,13 @@ public class Slime extends Mob implements Enemy {
|
|
this.slime.lookAt((Entity) this.slime.getTarget(), 10.0F, 10.0F);
|
|
((Slime.SlimeMoveControl) this.slime.getMoveControl()).setDirection(this.slime.getYRot(), this.slime.isDealsDamage());
|
|
}
|
|
+
|
|
+ // Paper start - clear timer and target when goal resets
|
|
+ public void stop() {
|
|
+ this.growTiredTimer = 0;
|
|
+ this.slime.setTarget(null);
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
|
|
private static class SlimeRandomDirectionGoal extends Goal {
|
|
@@ -516,14 +551,18 @@ 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 - add canWander
|
|
}
|
|
|
|
@Override
|
|
public void tick() {
|
|
if (--this.nextRandomizeTime <= 0) {
|
|
this.nextRandomizeTime = 40 + this.slime.getRandom().nextInt(60);
|
|
- this.chosenDegrees = (float) this.slime.getRandom().nextInt(360);
|
|
+ // Paper start
|
|
+ SlimeChangeDirectionEvent event = new SlimeChangeDirectionEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity(), (float) this.slime.getRandom().nextInt(360));
|
|
+ if (!this.slime.canWander || !event.callEvent()) return;
|
|
+ this.chosenDegrees = event.getNewYaw();
|
|
+ // Paper end
|
|
}
|
|
|
|
((Slime.SlimeMoveControl) this.slime.getMoveControl()).setDirection(this.chosenDegrees, false);
|
|
@@ -541,7 +580,7 @@ public class Slime extends Mob implements Enemy {
|
|
|
|
@Override
|
|
public boolean canUse() {
|
|
- return !this.slime.isPassenger();
|
|
+ return !this.slime.isPassenger() && this.slime.canWander && new SlimeWanderEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity()).callEvent(); // Paper
|
|
}
|
|
|
|
@Override
|
|
@@ -549,4 +588,15 @@ public class Slime extends Mob implements Enemy {
|
|
((Slime.SlimeMoveControl) this.slime.getMoveControl()).setWantedMovement(1.0D);
|
|
}
|
|
}
|
|
+
|
|
+ // 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 67fc37f909639e1effe6034526990f10d575d14d..4d401403de2399919043651345eed91c11ac986f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java
|
|
@@ -34,4 +34,16 @@ public class CraftSlime extends CraftMob implements Slime {
|
|
public EntityType getType() {
|
|
return EntityType.SLIME;
|
|
}
|
|
+
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public boolean canWander() {
|
|
+ return getHandle().canWander();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setWander(boolean canWander) {
|
|
+ getHandle().setWander(canWander);
|
|
+ }
|
|
+ // Paper end
|
|
}
|