papermc/Spigot-Server-Patches/0384-Mob-Spawner-API-Enhancements.patch
Spottedleaf 2f782a6652 Updated Upstream (CraftBukkit)
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

CraftBukkit Changes:
17543ecf SPIGOT-5035: Error Using Virtual Merchant GUI
0fc6922b SPIGOT-5028: Villager#setVillagerExperience() doesn't work
bdbdbe44 SPIGOT-5024: Fox error - Unknown target reason
2019-06-06 16:56:51 +01:00

107 lines
4.9 KiB
Diff

From 157c419883a53d17f7b28f018802c723e1938eea 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 dbb8098d6c..e9bcb5abaa 100644
--- a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
+++ b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
@@ -46,6 +46,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();
@@ -205,6 +206,7 @@ public abstract class MobSpawnerAbstract {
}
}
+ public void resetTimer() { i(); } // Paper - OBFHELPER
private void i() {
if (this.maxSpawnDelay <= this.minSpawnDelay) {
this.spawnDelay = this.minSpawnDelay;
@@ -222,7 +224,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);
@@ -237,10 +245,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");
}
@@ -265,9 +278,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 5c4c3c70c7..e78e3804ba 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
}
--
2.21.0