diff --git a/patches/api-unmapped/Add-EntityZapEvent.patch b/patches/api/Add-EntityZapEvent.patch similarity index 100% rename from patches/api-unmapped/Add-EntityZapEvent.patch rename to patches/api/Add-EntityZapEvent.patch diff --git a/patches/server-remapped/Chunk-registration-fixes.patch b/patches/server-remapped/Chunk-registration-fixes.patch deleted file mode 100644 index e5388e9671..0000000000 --- a/patches/server-remapped/Chunk-registration-fixes.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Aikar -Date: Wed, 21 Sep 2016 22:54:28 -0400 -Subject: [PATCH] Chunk registration fixes - -World checks and the Chunk Add logic are inconsistent on how Y > 256, < 0, is treated - -Keep them consistent - -diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/server/level/ServerLevel.java -+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -0,0 +0,0 @@ public class ServerLevel extends net.minecraft.world.level.Level implements Worl - if (entity.checkAndResetUpdateChunkPos()) { - this.getProfiler().push("chunkCheck"); - int i = Mth.floor(entity.getX() / 16.0D); -- int j = Mth.floor(entity.getY() / 16.0D); -+ int j = Math.min(15, Math.max(0, Mth.floor(entity.getY() / 16.0D))); // Paper - stay consistent with chunk add/remove behavior - int k = Mth.floor(entity.getZ() / 16.0D); - - if (!entity.inChunk || entity.xChunk != i || entity.yChunk != j || entity.zChunk != k) { diff --git a/patches/server-remapped/Fix-Double-World-Add-issues.patch b/patches/server-remapped/Fix-Double-World-Add-issues.patch deleted file mode 100644 index a1a845699f..0000000000 --- a/patches/server-remapped/Fix-Double-World-Add-issues.patch +++ /dev/null @@ -1,21 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Aikar -Date: Tue, 21 Jun 2016 22:54:34 -0400 -Subject: [PATCH] Fix Double World Add issues - -Vanilla will double add Spider Jockeys to the world, so ignore already added. - -Also add debug if something else tries to, and abort before world gets bad state - -diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/server/level/ServerLevel.java -+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -0,0 +0,0 @@ public class ServerLevel extends net.minecraft.world.level.Level implements Worl - // CraftBukkit start - private boolean addEntity0(Entity entity, CreatureSpawnEvent.SpawnReason spawnReason) { - org.spigotmc.AsyncCatcher.catchOp("entity add"); // Spigot -+ if (entity.valid) { MinecraftServer.LOGGER.error("Attempted Double World add on " + entity, new Throwable()); return true; } // Paper - if (entity.removed) { - // WorldServer.LOGGER.warn("Tried to add entity {} but it was marked as removed already", EntityTypes.getName(entity.getEntityType())); // CraftBukkit - return false; diff --git a/patches/server-remapped/Add-EntityZapEvent.patch b/patches/server/Add-EntityZapEvent.patch similarity index 88% rename from patches/server-remapped/Add-EntityZapEvent.patch rename to patches/server/Add-EntityZapEvent.patch index b71df2372f..4c2f2c9b33 100644 --- a/patches/server-remapped/Add-EntityZapEvent.patch +++ b/patches/server/Add-EntityZapEvent.patch @@ -25,7 +25,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -0,0 +0,0 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - Villager.LOGGER.info("Villager {} was struck by lightning {}.", this, lightning); + @Override + public void thunderHit(ServerLevel world, LightningBolt lightning) { + if (world.getDifficulty() != Difficulty.PEACEFUL) { +- Villager.LOGGER.info("Villager {} was struck by lightning {}.", this, lightning); ++ // Paper - move log down, event can cancel Witch entitywitch = (Witch) EntityType.WITCH.create((Level) world); + // Paper start @@ -34,7 +38,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + } + // Paper end + - entitywitch.moveTo(this.getX(), this.getY(), this.getZ(), this.yRot, this.xRot); ++ Villager.LOGGER.info("Villager {} was struck by lightning {}.", this, lightning); // Paper - move log down, event can cancel ++ + entitywitch.moveTo(this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot()); entitywitch.finalizeSpawn(world, world.getCurrentDifficultyAt(entitywitch.blockPosition()), MobSpawnType.CONVERSION, (SpawnGroupData) null, (CompoundTag) null); entitywitch.setNoAi(this.isNoAi()); diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java diff --git a/patches/server/Add-exception-reporting-event.patch b/patches/server/Add-exception-reporting-event.patch index 5ad0b531b2..7962710f99 100644 --- a/patches/server/Add-exception-reporting-event.patch +++ b/patches/server/Add-exception-reporting-event.patch @@ -167,7 +167,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 import com.google.common.collect.Sets; import com.google.common.collect.UnmodifiableIterator; @@ -0,0 +0,0 @@ public class LevelChunk implements ChunkAccess { - this.blockEntities.remove(blockposition); + this.removeBlockEntity(blockEntity.getBlockPos()); // Paper end } else { - System.out.println("Attempted to place a tile entity (" + blockEntity + ") at " + blockEntity.getBlockPos().getX() + "," + blockEntity.getBlockPos().getY() + "," + blockEntity.getBlockPos().getZ() diff --git a/patches/server-remapped/Add-setting-for-proxy-online-mode-status.patch b/patches/server/Add-setting-for-proxy-online-mode-status.patch similarity index 91% rename from patches/server-remapped/Add-setting-for-proxy-online-mode-status.patch rename to patches/server/Add-setting-for-proxy-online-mode-status.patch index 3514a5f9c6..dadae2b50c 100644 --- a/patches/server-remapped/Add-setting-for-proxy-online-mode-status.patch +++ b/patches/server/Add-setting-for-proxy-online-mode-status.patch @@ -51,7 +51,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + return com.destroystokyo.paper.PaperConfig.isProxyOnlineMode(); // Paper } - public synchronized void add(GameProfile gameprofile) { // Paper - synchronize + public synchronized void add(GameProfile profile) { // Paper - synchronize diff --git a/src/main/java/net/minecraft/server/players/OldUsersConverter.java b/src/main/java/net/minecraft/server/players/OldUsersConverter.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/server/players/OldUsersConverter.java @@ -74,9 +74,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 // Spigot Start GameProfile profile = null; // Only fetch an online UUID in online mode -- if ( getOnlineMode() || org.spigotmc.SpigotConfig.bungee ) -+ if ( getOnlineMode() -+ || com.destroystokyo.paper.PaperConfig.isProxyOnlineMode() ) // Paper - Handle via setting +- if ( this.getOnlineMode() || org.spigotmc.SpigotConfig.bungee ) ++ if ( this.getOnlineMode() || com.destroystokyo.paper.PaperConfig.isProxyOnlineMode() ) // Paper - Handle via setting { - profile = console.getProfileCache().get( name ); + profile = this.console.getProfileCache().getProfile( name ); } diff --git a/patches/server-remapped/Auto-fix-bad-Y-levels-on-player-login.patch b/patches/server/Auto-fix-bad-Y-levels-on-player-login.patch similarity index 65% rename from patches/server-remapped/Auto-fix-bad-Y-levels-on-player-login.patch rename to patches/server/Auto-fix-bad-Y-levels-on-player-login.patch index 5260bb7308..bc4c50ecb1 100644 --- a/patches/server-remapped/Auto-fix-bad-Y-levels-on-player-login.patch +++ b/patches/server/Auto-fix-bad-Y-levels-on-player-login.patch @@ -9,11 +9,11 @@ diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/ma index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -0,0 +0,0 @@ public class ServerPlayer extends Player implements ContainerListener { +@@ -0,0 +0,0 @@ public class ServerPlayer extends Player { @Override - public void readAdditionalSaveData(CompoundTag tag) { - super.readAdditionalSaveData(tag); + public void readAdditionalSaveData(CompoundTag nbt) { + super.readAdditionalSaveData(nbt); + if (this.getY() > 300) this.setPosRaw(getX(), 257, getZ()); // Paper - bring down to a saner Y level if out of world - if (tag.contains("playerGameType", 99)) { - if (this.getServer().getForceGameType()) { - this.gameMode.setGameModeForPlayer(this.getServer().getDefaultGameType(), GameType.NOT_SET); + if (nbt.contains("enteredNetherPosition", 10)) { + CompoundTag nbttagcompound1 = nbt.getCompound("enteredNetherPosition"); + diff --git a/patches/server-remapped/Configurable-flying-kick-messages.patch b/patches/server/Configurable-flying-kick-messages.patch similarity index 97% rename from patches/server-remapped/Configurable-flying-kick-messages.patch rename to patches/server/Configurable-flying-kick-messages.patch index 898c20dc27..1f514b8a6b 100644 --- a/patches/server-remapped/Configurable-flying-kick-messages.patch +++ b/patches/server/Configurable-flying-kick-messages.patch @@ -24,7 +24,7 @@ diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListener index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerGamePacketListener { +@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser if (this.clientIsFloating && !this.player.isSleeping()) { if (++this.aboveGroundTickCount > 80) { ServerGamePacketListenerImpl.LOGGER.warn("{} was kicked for floating too long!", this.player.getName().getString()); @@ -33,7 +33,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 return; } } else { -@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerGamePacketListener { +@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser if (this.clientVehicleIsFloating && this.player.getRootVehicle().getControllingPassenger() == this.player) { if (++this.aboveGroundVehicleTickCount > 80) { ServerGamePacketListenerImpl.LOGGER.warn("{} was kicked for floating a vehicle too long!", this.player.getName().getString()); diff --git a/patches/server-remapped/Configurable-packet-in-spam-threshold.patch b/patches/server/Configurable-packet-in-spam-threshold.patch similarity index 76% rename from patches/server-remapped/Configurable-packet-in-spam-threshold.patch rename to patches/server/Configurable-packet-in-spam-threshold.patch index e2ecee4ced..e55dec19fd 100644 --- a/patches/server-remapped/Configurable-packet-in-spam-threshold.patch +++ b/patches/server/Configurable-packet-in-spam-threshold.patch @@ -26,20 +26,20 @@ diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListener index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerGamePacketListener { +@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser // Spigot start - limit place/interactions private int limitedPackets; private long lastLimitedPacket = -1; + private static final int THRESHOLD = com.destroystokyo.paper.PaperConfig.packetInSpamThreshold; // Paper - Configurable threshold private boolean checkLimit(long timestamp) { -- if (lastLimitedPacket != -1 && timestamp - lastLimitedPacket < 30 && limitedPackets++ >= 4) { -+ if (lastLimitedPacket != -1 && timestamp - lastLimitedPacket < THRESHOLD && limitedPackets++ >= 8) { // Paper - Use threshold, raise packet limit to 8 +- if (this.lastLimitedPacket != -1 && timestamp - this.lastLimitedPacket < 30 && this.limitedPackets++ >= 4) { ++ if (this.lastLimitedPacket != -1 && timestamp - this.lastLimitedPacket < THRESHOLD && this.limitedPackets++ >= 8) { // Paper - Use threshold, raise packet limit to 8 return false; } -- if (lastLimitedPacket == -1 || timestamp - lastLimitedPacket >= 30) { -+ if (lastLimitedPacket == -1 || timestamp - lastLimitedPacket >= THRESHOLD) { // Paper - lastLimitedPacket = timestamp; - limitedPackets = 0; +- if (this.lastLimitedPacket == -1 || timestamp - this.lastLimitedPacket >= 30) { ++ if (this.lastLimitedPacket == -1 || timestamp - this.lastLimitedPacket >= THRESHOLD) { // Paper + this.lastLimitedPacket = timestamp; + this.limitedPackets = 0; return true; diff --git a/patches/server-remapped/Don-t-lookup-game-profiles-that-have-no-UUID-and-no-.patch b/patches/server/Don-t-lookup-game-profiles-that-have-no-UUID-and-no-.patch similarity index 79% rename from patches/server-remapped/Don-t-lookup-game-profiles-that-have-no-UUID-and-no-.patch rename to patches/server/Don-t-lookup-game-profiles-that-have-no-UUID-and-no-.patch index 7b16b2aaf2..6646a83c5b 100644 --- a/patches/server-remapped/Don-t-lookup-game-profiles-that-have-no-UUID-and-no-.patch +++ b/patches/server/Don-t-lookup-game-profiles-that-have-no-UUID-and-no-.patch @@ -12,8 +12,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 repository.findProfilesByNames(new String[]{name}, Agent.MINECRAFT, profilelookupcallback); GameProfile gameprofile = (GameProfile) atomicreference.get(); -- if (!usesAuthentication() && gameprofile == null) { -+ if (!usesAuthentication() && gameprofile == null && !org.apache.commons.lang3.StringUtils.isBlank(name)) { // Paper - Don't lookup a profile with a blank name +- if (!GameProfileCache.usesAuthentication() && gameprofile == null) { ++ if (!GameProfileCache.usesAuthentication() && gameprofile == null && !org.apache.commons.lang3.StringUtils.isBlank(name)) { // Paper - Don't lookup a profile with a blank name UUID uuid = Player.createPlayerUUID(new GameProfile((UUID) null, name)); gameprofile = new GameProfile(uuid, name); diff --git a/patches/server-remapped/Fix-Old-Sign-Conversion.patch b/patches/server/Fix-Old-Sign-Conversion.patch similarity index 72% rename from patches/server-remapped/Fix-Old-Sign-Conversion.patch rename to patches/server/Fix-Old-Sign-Conversion.patch index bfc57baef0..6e699bf64f 100644 --- a/patches/server-remapped/Fix-Old-Sign-Conversion.patch +++ b/patches/server/Fix-Old-Sign-Conversion.patch @@ -25,22 +25,14 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 --- a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java @@ -0,0 +0,0 @@ public class SignBlockEntity extends BlockEntity implements CommandSource { // C + s = "\"\""; } - try { -- MutableComponent ichatmutablecomponent = Component.Serializer.fromJson(s.isEmpty() ? "\"\"" : s); -+ //IChatMutableComponent ichatmutablecomponent = IChatBaseComponent.ChatSerializer.a(s.isEmpty() ? "\"\"" : s); // Paper - move down - the old format might throw a json error - -- if (oldSign) { -+ if (oldSign && !isLoadingStructure) { // Paper - saved structures will be in the new format, but will not have isConverted - messages[i] = org.bukkit.craftbukkit.util.CraftChatMessage.fromString(s)[0]; - continue; - } - // CraftBukkit end -+ MutableComponent ichatmutablecomponent = Component.Serializer.fromJson(s.isEmpty() ? "\"\"" : s); // Paper - after old sign - - if (this.level instanceof ServerLevel) { - try { +- if (oldSign) { ++ if (oldSign && !this.isLoadingStructure) { // Paper - saved structures will be in the new format, but will not have isConverted + this.messages[i] = org.bukkit.craftbukkit.util.CraftChatMessage.fromString(s)[0]; + continue; + } diff --git a/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java b/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java @@ -50,9 +42,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 } + tileentity.isLoadingStructure = true; // Paper - tileentity.load(definedstructure_blockinfo.state, definedstructure_blockinfo.nbt); - tileentity.mirror(placementData.getMirror()); - tileentity.rotate(placementData.getRotation()); + tileentity.load(definedstructure_blockinfo.nbt); + tileentity.isLoadingStructure = false; // Paper } } diff --git a/patches/server-remapped/Optimise-BlockState-s-hashCode-equals.patch b/patches/server/Optimise-BlockState-s-hashCode-equals.patch similarity index 79% rename from patches/server-remapped/Optimise-BlockState-s-hashCode-equals.patch rename to patches/server/Optimise-BlockState-s-hashCode-equals.patch index d783e044fc..0e4c1cd8d5 100644 --- a/patches/server-remapped/Optimise-BlockState-s-hashCode-equals.patch +++ b/patches/server/Optimise-BlockState-s-hashCode-equals.patch @@ -27,7 +27,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 --- a/src/main/java/net/minecraft/world/level/block/state/properties/EnumProperty.java +++ b/src/main/java/net/minecraft/world/level/block/state/properties/EnumProperty.java @@ -0,0 +0,0 @@ public class EnumProperty & StringRepresentable> extends Prope - return ((StringRepresentable) value).getSerializedName(); + return value.getSerializedName(); } - @Override @@ -55,30 +55,18 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 --- a/src/main/java/net/minecraft/world/level/block/state/properties/Property.java +++ b/src/main/java/net/minecraft/world/level/block/state/properties/Property.java @@ -0,0 +0,0 @@ public abstract class Property> { - } + @Override public boolean equals(Object object) { - if (this == object) { - return true; - } else if (!(object instanceof Property)) { - return false; - } else { -- Property iblockstate = (Property) object; -- -- return this.clazz.equals(iblockstate.clazz) && this.name.equals(iblockstate.name); +- Property property = (Property)object; +- return this.clazz.equals(property.clazz) && this.name.equals(property.name); - } -+ return this == object; // Paper - only one instance per configuration ++ return this == object; } -+ private static final java.util.concurrent.atomic.AtomicInteger hashId = new java.util.concurrent.atomic.AtomicInteger(1); // Paper - only one instance per configuration -+ private final int hashCode = 92821 * hashId.getAndIncrement(); // Paper - only one instance per configuration - public final int hashCode() { - if (this.hashCode == null) { - this.hashCode = this.generateHashCode(); - } - -- return this.hashCode; -+ return this.hashCode; // Paper - only one instance per configuration - } - - public int generateHashCode() { + @Override diff --git a/patches/server-remapped/Option-to-remove-corrupt-tile-entities.patch b/patches/server/Option-to-remove-corrupt-tile-entities.patch similarity index 91% rename from patches/server-remapped/Option-to-remove-corrupt-tile-entities.patch rename to patches/server/Option-to-remove-corrupt-tile-entities.patch index 1b32dbcae1..ff061abdb6 100644 --- a/patches/server-remapped/Option-to-remove-corrupt-tile-entities.patch +++ b/patches/server/Option-to-remove-corrupt-tile-entities.patch @@ -23,11 +23,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -0,0 +0,0 @@ public class LevelChunk implements ChunkAccess { - "Chunk coordinates: " + (this.chunkPos.x * 16) + "," + (this.chunkPos.z * 16)); + "Chunk coordinates: " + (this.chunkPos.x * 16) + "," + (this.chunkPos.z * 16)); e.printStackTrace(); ServerInternalException.reportInternalException(e); + -+ if (this.world.paperConfig.removeCorruptTEs) { ++ if (this.level.paperConfig.removeCorruptTEs) { + this.removeBlockEntity(blockEntity.getBlockPos()); + this.markUnsaved(); + org.bukkit.Bukkit.getLogger().info("Removing corrupt tile entity"); diff --git a/patches/server-remapped/Remove-FishingHook-reference-on-Craft-Entity-removal.patch b/patches/server/Remove-FishingHook-reference-on-Craft-Entity-removal.patch similarity index 82% rename from patches/server-remapped/Remove-FishingHook-reference-on-Craft-Entity-removal.patch rename to patches/server/Remove-FishingHook-reference-on-Craft-Entity-removal.patch index bd65afc880..9e240ca79e 100644 --- a/patches/server-remapped/Remove-FishingHook-reference-on-Craft-Entity-removal.patch +++ b/patches/server/Remove-FishingHook-reference-on-Craft-Entity-removal.patch @@ -3,6 +3,7 @@ From: Aikar Date: Thu, 16 Jun 2016 00:17:23 -0400 Subject: [PATCH] Remove FishingHook reference on Craft Entity removal +TODO 1.17 isn't this supposed to be applied to when the fish hook is removed _in general_? Not just in Bukkit api calls? diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 @@ -10,7 +11,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java @@ -0,0 +0,0 @@ public class CraftFishHook extends CraftProjectile implements FishHook { public HookState getState() { - return HookState.values()[getHandle().currentState.ordinal()]; + return HookState.values()[this.getHandle().currentState.ordinal()]; } + + // Paper start diff --git a/patches/server/Remove-invalid-mob-spawner-tile-entities.patch b/patches/server/Remove-invalid-mob-spawner-tile-entities.patch index e41771c39b..a60db033f7 100644 --- a/patches/server/Remove-invalid-mob-spawner-tile-entities.patch +++ b/patches/server/Remove-invalid-mob-spawner-tile-entities.patch @@ -27,7 +27,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 // CraftBukkit start + // Paper start - Remove invalid mob spawner tile entities + } else if (blockEntity instanceof SpawnerBlockEntity && !(getBlockState(blockposition).getBlock() instanceof SpawnerBlock)) { -+ this.blockEntities.remove(blockposition); ++ this.removeBlockEntity(blockEntity.getBlockPos()); + // Paper end } else { System.out.println("Attempted to place a tile entity (" + blockEntity + ") at " + blockEntity.getBlockPos().getX() + "," + blockEntity.getBlockPos().getY() + "," + blockEntity.getBlockPos().getZ()