geforkt von Mirrors/Paper
654b792caf
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:a339310c
#755: Fix NPE when calling getInventory() for virtual EnderChests2577f9bf
Increase outdated build delay1dabfdc8
#754: Fix pre-1.16 serialized SkullMeta being broken on 1.16+, losing textures
105 Zeilen
5.0 KiB
Diff
105 Zeilen
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
|
|
}
|