9946cef8c5
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: f52c70ab Fix incorrect nullability in MultipleFacing 6af4c0b2 SPIGOT-5311: Add API to get/set item associated with throwable projectiles 97aeae56 Add set/isAware to disable Vanilla AI components of a Mob CraftBukkit Changes: fba9f487 Improve legacy conversion of some materials that changed post flattening b1ba8749 Move Bukkit.Aware loading/saving to correct location f7cdb53c SPIGOT-5311: Add API to get/set item associated with throwable projectiles 689f429c #634: Cross platform patch scripts ab85433d Add set/isAware to disable Vanilla AI components of a Mob Spigot Changes: 8faa8b45 Rebuild patches
107 lines
4.9 KiB
Diff
107 lines
4.9 KiB
Diff
From a2dc68532bf7368857fd232c64933c6c06b9692a 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 cb7cb789b8..41001b02a6 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();
|
|
|
|
@@ -207,6 +208,7 @@ public abstract class MobSpawnerAbstract {
|
|
}
|
|
}
|
|
|
|
+ public void resetTimer() { i(); } // Paper - OBFHELPER
|
|
private void i() {
|
|
if (this.maxSpawnDelay <= this.minSpawnDelay) {
|
|
this.spawnDelay = this.minSpawnDelay;
|
|
@@ -224,7 +226,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);
|
|
@@ -239,10 +247,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");
|
|
}
|
|
|
|
@@ -267,9 +280,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.25.0
|
|
|