This commit is contained in:
Cryptite 2024-04-28 19:01:59 +05:00 committed by GitHub
commit fb9e895f7c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 89 additions and 0 deletions

View File

@ -0,0 +1,29 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Tue, 27 Jun 2023 12:21:30 -0500
Subject: [PATCH] Add Warden setCanDespawn
diff --git a/src/main/java/org/bukkit/entity/Warden.java b/src/main/java/org/bukkit/entity/Warden.java
index efaa45f41bc1dc8df6665c55b4e5ade343d60d4c..3daaec3a7498fd15d71d1939fb4d338ed1f717ea 100644
--- a/src/main/java/org/bukkit/entity/Warden.java
+++ b/src/main/java/org/bukkit/entity/Warden.java
@@ -111,4 +111,18 @@ public interface Warden extends Monster {
*/
ANGRY;
}
+
+ // Paper start
+ /**
+ * Prevent the Warden from ever trying to dig down when idle and then despawn.
+ *
+ * @param canDespawn Whether the Warden will ever attempt to despawn
+ */
+ void setCanDespawn(boolean canDespawn);
+
+ /**
+ * @return Whether the Warden will despawn if idle
+ */
+ boolean canDespawn();
+ // Paper end
}

View File

@ -0,0 +1,60 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Tue, 27 Jun 2023 12:21:29 -0500
Subject: [PATCH] Add Warden setCanDespawn
diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
index 97b763431bc5015448ee7a26a340635a932c950b..0f45e7e455185cec66551d1c490737cef7120f04 100644
--- a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
+++ b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
@@ -110,6 +110,7 @@ public class Warden extends Monster implements VibrationSystem {
private final VibrationSystem.User vibrationUser = new Warden.VibrationUser();
private VibrationSystem.Data vibrationData = new VibrationSystem.Data();
AngerManagement angerManagement = new AngerManagement(this::canTargetEntity, Collections.emptyList());
+ public boolean canDespawn; // Paper
public Warden(EntityType<? extends Monster> type, Level world) {
super(type, world);
diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/WardenAi.java b/src/main/java/net/minecraft/world/entity/monster/warden/WardenAi.java
index 03f16a5541de6bc95407aaa24741570c1993dc9e..0468eca241c88e82f8f36daf1d4eda3bea38e274 100644
--- a/src/main/java/net/minecraft/world/entity/monster/warden/WardenAi.java
+++ b/src/main/java/net/minecraft/world/entity/monster/warden/WardenAi.java
@@ -139,7 +139,15 @@ public class WardenAi {
public static void setDigCooldown(LivingEntity warden) {
if (warden.getBrain().hasMemoryValue(MemoryModuleType.DIG_COOLDOWN)) {
- warden.getBrain().setMemoryWithExpiry(MemoryModuleType.DIG_COOLDOWN, Unit.INSTANCE, 1200L);
+ // Paper start - Wardens despawn based off an expiring DIG_COOLDOWN memory. So, the
+ // only way to sanely prevent them despawning is to reset their cooldown memory to
+ // a non-expiring one.
+ if (warden instanceof Warden nmsWarden && !nmsWarden.canDespawn) {
+ warden.getBrain().setMemory(MemoryModuleType.DIG_COOLDOWN, Unit.INSTANCE);
+ } else {
+ warden.getBrain().setMemoryWithExpiry(MemoryModuleType.DIG_COOLDOWN, Unit.INSTANCE, 1200L);
+ }
+ // Paper end
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java
index 6ecdc4bf1f6b8f0363e667135ba463433be5c0fb..eb3e3839593c7f8cc42f845a5dead9849ce6f3a2 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java
@@ -92,4 +92,16 @@ public class CraftWarden extends CraftMonster implements org.bukkit.entity.Warde
case ANGRY -> AngerLevel.ANGRY;
};
}
+
+ // Paper start
+ @Override
+ public void setCanDespawn(boolean canDespawn) {
+ this.getHandle().canDespawn = canDespawn;
+ }
+
+ @Override
+ public boolean canDespawn() {
+ return this.getHandle().canDespawn;
+ }
+ // Paper end
}