Paper/Spigot-Server-Patches/0345-Mob-Spawner-API-Enhancements.patch
Daniel Ennis e792da723a
Updated Upstream (Bukkit/CraftBukkit/Spigot) (#4728)
Upstream has released updates that appears 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:
30885166 Update to Minecraft 1.16.4

CraftBukkit Changes:
3af81c71 Update to Minecraft 1.16.4

Spigot Changes:
f011ca24 Update to Minecraft 1.16.4

Co-authored-by: Mariell Hoversholm <proximyst@proximyst.com>
2020-11-02 20:22:15 -06:00

105 lines
5.0 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <blake.galbreath@gmail.com>
Date: Fri, 19 Apr 2019 12:41:13 -0500
Subject: [PATCH] Mob Spawner API Enhancements
diff --git a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
index c3a5db97fd85b31c6b4bce93527b9d0e16a79a45..c2e830db7aa2944a477624e149a3ba66d112b68a 100644
--- a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
+++ b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
@@ -47,6 +47,7 @@ public abstract class MobSpawnerAbstract {
this.mobs.clear(); // CraftBukkit - SPIGOT-3496, MC-92282
}
+ public boolean isActivated() { return h(); } // Paper - OBFHELPER
private boolean h() {
BlockPosition blockposition = this.b();
@@ -203,6 +204,7 @@ public abstract class MobSpawnerAbstract {
}
}
+ public void resetTimer() { i(); } // Paper - OBFHELPER
private void i() {
if (this.maxSpawnDelay <= this.minSpawnDelay) {
this.spawnDelay = this.minSpawnDelay;
@@ -220,7 +222,13 @@ public abstract class MobSpawnerAbstract {
}
public void a(NBTTagCompound nbttagcompound) {
+ // Paper start - use larger int if set
+ if (nbttagcompound.hasKey("Paper.Delay")) {
+ this.spawnDelay = nbttagcompound.getInt("Paper.Delay");
+ } else {
this.spawnDelay = nbttagcompound.getShort("Delay");
+ }
+ // Paper end
this.mobs.clear();
if (nbttagcompound.hasKeyOfType("SpawnPotentials", 9)) {
NBTTagList nbttaglist = nbttagcompound.getList("SpawnPotentials", 10);
@@ -235,10 +243,15 @@ public abstract class MobSpawnerAbstract {
} else if (!this.mobs.isEmpty()) {
this.setSpawnData((MobSpawnerData) WeightedRandom.a(this.a().random, this.mobs));
}
-
+ // Paper start - use ints if set
+ if (nbttagcompound.hasKeyOfType("Paper.MinSpawnDelay", 99)) {
+ this.minSpawnDelay = nbttagcompound.getInt("Paper.MinSpawnDelay");
+ this.maxSpawnDelay = nbttagcompound.getInt("Paper.MaxSpawnDelay");
+ this.spawnCount = nbttagcompound.getShort("SpawnCount");
+ } else // Paper end
if (nbttagcompound.hasKeyOfType("MinSpawnDelay", 99)) {
- this.minSpawnDelay = nbttagcompound.getShort("MinSpawnDelay");
- this.maxSpawnDelay = nbttagcompound.getShort("MaxSpawnDelay");
+ this.minSpawnDelay = nbttagcompound.getInt("MinSpawnDelay");
+ this.maxSpawnDelay = nbttagcompound.getInt("MaxSpawnDelay");
this.spawnCount = nbttagcompound.getShort("SpawnCount");
}
@@ -263,9 +276,20 @@ public abstract class MobSpawnerAbstract {
if (minecraftkey == null) {
return nbttagcompound;
} else {
- nbttagcompound.setShort("Delay", (short) this.spawnDelay);
- nbttagcompound.setShort("MinSpawnDelay", (short) this.minSpawnDelay);
- nbttagcompound.setShort("MaxSpawnDelay", (short) this.maxSpawnDelay);
+ // Paper start
+ if (spawnDelay > Short.MAX_VALUE) {
+ nbttagcompound.setInt("Paper.Delay", this.spawnDelay);
+ }
+ nbttagcompound.setShort("Delay", (short) Math.min(Short.MAX_VALUE, this.spawnDelay));
+
+ if (minSpawnDelay > Short.MAX_VALUE || maxSpawnDelay > Short.MAX_VALUE) {
+ nbttagcompound.setInt("Paper.MinSpawnDelay", this.minSpawnDelay);
+ nbttagcompound.setInt("Paper.MaxSpawnDelay", this.maxSpawnDelay);
+ }
+
+ nbttagcompound.setShort("MinSpawnDelay", (short) Math.min(Short.MAX_VALUE, this.minSpawnDelay));
+ nbttagcompound.setShort("MaxSpawnDelay", (short) Math.min(Short.MAX_VALUE, this.maxSpawnDelay));
+ // Paper end
nbttagcompound.setShort("SpawnCount", (short) this.spawnCount);
nbttagcompound.setShort("MaxNearbyEntities", (short) this.maxNearbyEntities);
nbttagcompound.setShort("RequiredPlayerRange", (short) this.requiredPlayerRange);
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java b/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java
index 5c4c3c70c7450a3e556d664a1bf6bcaf8e3a571c..e78e3804bad9b0b6004939cadf40465dec68fdba 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java
@@ -121,4 +121,16 @@ public class CraftCreatureSpawner extends CraftBlockEntityState<TileEntityMobSpa
public void setSpawnRange(int spawnRange) {
this.getSnapshot().getSpawner().spawnRange = spawnRange;
}
+
+ // Paper start
+ @Override
+ public boolean isActivated() {
+ return this.getSnapshot().getSpawner().isActivated();
+ }
+
+ @Override
+ public void resetTimer() {
+ this.getSnapshot().getSpawner().resetTimer();
+ }
+ // Paper end
}