diff --git a/Paper b/Paper index eb510c404..6e7dc3f81 160000 --- a/Paper +++ b/Paper @@ -1 +1 @@ -Subproject commit eb510c404d54a954d8685bc79021a5784a2e6f8b +Subproject commit 6e7dc3f81dc14b603486787443354d4633b32ddb diff --git a/current-paper b/current-paper index f1cd84244..a6afef2ef 100644 --- a/current-paper +++ b/current-paper @@ -1 +1 @@ -1.16.1--aa445b80568b856eabaa733e9d76fa9d1e60e5d7 +1.16.1--1e64154c0c13edca7123ead9d4e83331f79beb9b diff --git a/patches/server/0001-Tuinity-Server-Changes.patch b/patches/server/0001-Tuinity-Server-Changes.patch index 630a9e804..38cfbdaf1 100644 --- a/patches/server/0001-Tuinity-Server-Changes.patch +++ b/patches/server/0001-Tuinity-Server-Changes.patch @@ -133,10 +133,10 @@ index 49a38c6608..60d6469b81 100644 switch (distance) { case -1: diff --git a/src/main/java/com/destroystokyo/paper/server/ticklist/PaperTickList.java b/src/main/java/com/destroystokyo/paper/server/ticklist/PaperTickList.java -index 0692fe33bb..4263eb9172 100644 +index e7624948ea..77df688880 100644 --- a/src/main/java/com/destroystokyo/paper/server/ticklist/PaperTickList.java +++ b/src/main/java/com/destroystokyo/paper/server/ticklist/PaperTickList.java -@@ -188,6 +188,7 @@ public final class PaperTickList extends TickListServer { // extend to avo +@@ -186,6 +186,7 @@ public final class PaperTickList extends TickListServer { // extend to avo } public void onChunkSetTicking(final int chunkX, final int chunkZ) { @@ -146,13 +146,21 @@ index 0692fe33bb..4263eb9172 100644 return; @@ -268,6 +269,7 @@ public final class PaperTickList extends TickListServer { // extend to avo + @Override + protected void nextTick() { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("async tick list tick"); // Tuinity - soft async catcher + ++this.currentTick; + if (this.currentTick != this.world.getTime()) { + if (!this.warnedAboutDesync) { +@@ -280,6 +282,7 @@ public final class PaperTickList extends TickListServer { // extend to avo + @Override public void tick() { + com.tuinity.tuinity.util.TickThread.softEnsureTickThread("async tick list tick"); // Tuinity - soft async catcher final ChunkProviderServer chunkProvider = this.world.getChunkProvider(); this.world.getMethodProfiler().enter("cleaning"); -@@ -296,6 +298,7 @@ public final class PaperTickList extends TickListServer { // extend to avo +@@ -307,6 +310,7 @@ public final class PaperTickList extends TickListServer { // extend to avo if (toTick.tickState == STATE_TICKING) { toTick.tickState = STATE_TICKED; } // else it's STATE_CANCELLED_TICK @@ -160,7 +168,7 @@ index 0692fe33bb..4263eb9172 100644 } else { // re-schedule eventually toTick.tickState = STATE_SCHEDULED; -@@ -413,6 +416,7 @@ public final class PaperTickList extends TickListServer { // extend to avo +@@ -424,6 +428,7 @@ public final class PaperTickList extends TickListServer { // extend to avo } public void schedule(final BlockPosition pos, final T data, final long targetTick, final TickListPriority priority) { @@ -168,7 +176,7 @@ index 0692fe33bb..4263eb9172 100644 final NextTickListEntry entry = new NextTickListEntry<>(pos, data, targetTick, priority); if (this.excludeFromScheduling.test(entry.getData())) { return; -@@ -468,6 +472,7 @@ public final class PaperTickList extends TickListServer { // extend to avo +@@ -479,6 +484,7 @@ public final class PaperTickList extends TickListServer { // extend to avo @Override public List> getEntriesInBoundingBox(final StructureBoundingBox structureboundingbox, final boolean removeReturned, final boolean excludeTicked) { @@ -176,7 +184,7 @@ index 0692fe33bb..4263eb9172 100644 if (structureboundingbox.getMinX() == structureboundingbox.getMaxX() || structureboundingbox.getMinZ() == structureboundingbox.getMaxZ()) { return Collections.emptyList(); // vanilla behaviour, check isBlockInSortof above } -@@ -524,6 +529,7 @@ public final class PaperTickList extends TickListServer { // extend to avo +@@ -535,6 +541,7 @@ public final class PaperTickList extends TickListServer { // extend to avo @Override public void copy(StructureBoundingBox structureboundingbox, BlockPosition blockposition) { @@ -184,7 +192,7 @@ index 0692fe33bb..4263eb9172 100644 // start copy from TickListServer // TODO check on update List> list = this.getEntriesInBoundingBox(structureboundingbox, false, false); Iterator> iterator = list.iterator(); -@@ -543,6 +549,7 @@ public final class PaperTickList extends TickListServer { // extend to avo +@@ -554,6 +561,7 @@ public final class PaperTickList extends TickListServer { // extend to avo @Override public List> getEntriesInChunk(ChunkCoordIntPair chunkPos, boolean removeReturned, boolean excludeTicked) { @@ -192,7 +200,7 @@ index 0692fe33bb..4263eb9172 100644 // Vanilla DOES get the entries 2 blocks out of the chunk too, but that doesn't matter since we ignore chunks // not at ticking status, and ticking status requires neighbours loaded // so with this method we will reduce scheduler churning -@@ -574,6 +581,7 @@ public final class PaperTickList extends TickListServer { // extend to avo +@@ -585,6 +593,7 @@ public final class PaperTickList extends TickListServer { // extend to avo @Override public NBTTagList serialize(ChunkCoordIntPair chunkcoordintpair) { @@ -200,7 +208,7 @@ index 0692fe33bb..4263eb9172 100644 // start copy from TickListServer // TODO check on update List> list = this.getEntriesInChunk(chunkcoordintpair, false, true); -@@ -583,6 +591,7 @@ public final class PaperTickList extends TickListServer { // extend to avo +@@ -594,6 +603,7 @@ public final class PaperTickList extends TickListServer { // extend to avo @Override public int getTotalScheduledEntries() { @@ -4237,7 +4245,7 @@ index ad8a00e0fb..78e7f6bc31 100644 // Paper end - optimised tracker diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 95d57c6de9..5af6140a77 100644 +index 19be6a93cf..bf603ba34f 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java @@ -322,19 +322,24 @@ public class PlayerConnection implements PacketListenerPlayIn { @@ -5748,7 +5756,7 @@ index b2ceb6c179..b955d5d661 100644 super(TileEntityTypes.LECTERN); this.book = ItemStack.b; diff --git a/src/main/java/net/minecraft/server/TileEntityPiston.java b/src/main/java/net/minecraft/server/TileEntityPiston.java -index e7b7e468fc..38d0e841ca 100644 +index e7b7e468fc..faf5e4aff0 100644 --- a/src/main/java/net/minecraft/server/TileEntityPiston.java +++ b/src/main/java/net/minecraft/server/TileEntityPiston.java @@ -5,10 +5,10 @@ import java.util.List; @@ -5801,7 +5809,7 @@ index e7b7e468fc..38d0e841ca 100644 } public boolean d() { -@@ -238,7 +253,25 @@ public class TileEntityPiston extends TileEntity implements ITickable { +@@ -238,7 +253,27 @@ public class TileEntityPiston extends TileEntity implements ITickable { iblockdata = Block.b(this.a, (GeneratorAccess) this.world, this.position); } @@ -5816,9 +5824,11 @@ index e7b7e468fc..38d0e841ca 100644 + this.world.setAir(this.position, false); + Block.dropItems(this.getBlockData(), this.world, this.position, null, null, ItemStack.NULL_ITEM); + } else { -+ // need to set to air before else the setTypeAndData call will create a new TE and override -+ // the old one -+ this.world.setTypeAndDataRaw(this.position, Blocks.AIR.getBlockData(), null); ++ if (iblockdata.getBlock() == this.getBlockData().getBlock() && this.tileEntity != null) { ++ // need to set to air before else the setTypeAndData call will create a new TE and override ++ // the old one ++ this.world.setAir(this.position, false); ++ } + this.world.setTypeAndData(this.position, iblockdata, 3, iblockdata.getBlock() == this.getBlockData().getBlock() ? this.tileEntity : null); + } + if (this.tileEntity != null && this.world.getType(this.position).getBlock() == this.getBlockData().getBlock()) { @@ -5828,7 +5838,7 @@ index e7b7e468fc..38d0e841ca 100644 this.world.a(this.position, iblockdata.getBlock(), this.position); } } -@@ -263,7 +296,12 @@ public class TileEntityPiston extends TileEntity implements ITickable { +@@ -263,7 +298,12 @@ public class TileEntityPiston extends TileEntity implements ITickable { iblockdata = (IBlockData) iblockdata.set(BlockProperties.C, false); } @@ -5842,7 +5852,7 @@ index e7b7e468fc..38d0e841ca 100644 this.world.a(this.position, iblockdata.getBlock(), this.position); } } -@@ -290,16 +328,34 @@ public class TileEntityPiston extends TileEntity implements ITickable { +@@ -290,16 +330,34 @@ public class TileEntityPiston extends TileEntity implements ITickable { this.j = this.i; this.c = nbttagcompound.getBoolean("extending"); this.g = nbttagcompound.getBoolean("source"); @@ -5878,7 +5888,7 @@ index e7b7e468fc..38d0e841ca 100644 } diff --git a/src/main/java/net/minecraft/server/UserCache.java b/src/main/java/net/minecraft/server/UserCache.java -index a038397028..c68af75629 100644 +index a038397028..2cdc6cf8ce 100644 --- a/src/main/java/net/minecraft/server/UserCache.java +++ b/src/main/java/net/minecraft/server/UserCache.java @@ -51,6 +51,10 @@ public class UserCache { @@ -5925,20 +5935,13 @@ index a038397028..c68af75629 100644 UserCache.UserCacheEntry usercache_usercacheentry = (UserCache.UserCacheEntry) this.d.get(s1); if (usercache_usercacheentry != null && (new Date()).getTime() >= usercache_usercacheentry.c.getTime()) { -@@ -135,6 +142,7 @@ public class UserCache { - this.d.remove(usercache_usercacheentry.a().getName().toLowerCase(Locale.ROOT)); - this.f.remove(usercache_usercacheentry.a()); - usercache_usercacheentry = null; -+ stateLocked = false; this.stateLock.unlock(); // Tuinity - allow better concurrency - } - - GameProfile gameprofile; -@@ -143,8 +151,11 @@ public class UserCache { +@@ -143,8 +150,12 @@ public class UserCache { gameprofile = usercache_usercacheentry.a(); this.f.remove(gameprofile); this.f.addFirst(gameprofile); + stateLocked = false; this.stateLock.unlock(); // Tuinity - allow better concurrency } else { ++ stateLocked = false; this.stateLock.unlock(); // Tuinity - allow better concurrency + try { this.lookupLock.lock(); // Tuinity - allow better concurrency gameprofile = a(this.g, s); // Spigot - use correct case for offline players + } finally { this.lookupLock.unlock(); } // Tuinity - allow better concurrency @@ -5949,7 +5952,7 @@ index a038397028..c68af75629 100644 if( !org.spigotmc.SpigotConfig.saveUserCacheOnStopOnly ) this.c(); // Spigot - skip saving if disabled return usercache_usercacheentry == null ? null : usercache_usercacheentry.a(); -+ } finally { if (stateLocked) { stateLocked = false; this.stateLock.unlock(); } } // Tuinity - allow better concurrency ++ } finally { if (stateLocked) { this.stateLock.unlock(); } } // Tuinity - allow better concurrency } // Paper start @@ -6484,7 +6487,7 @@ index b651eb87bb..5cba3b0e61 100644 return this.j.d(); } diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index d048ee2313..8388629f57 100644 +index 63c1190729..2bee2dab9f 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -55,7 +55,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { @@ -7044,7 +7047,7 @@ index d048ee2313..8388629f57 100644 this.tickBlockEntities(); } -@@ -802,7 +1251,26 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -804,7 +1253,26 @@ public class WorldServer extends World implements GeneratorAccessSeed { } @@ -7071,7 +7074,7 @@ index d048ee2313..8388629f57 100644 if (!(entity instanceof EntityHuman) && !this.getChunkProvider().a(entity)) { this.chunkCheck(entity); } else { -@@ -848,6 +1316,11 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -850,6 +1318,11 @@ public class WorldServer extends World implements GeneratorAccessSeed { } // Paper - timings } @@ -7083,7 +7086,7 @@ index d048ee2313..8388629f57 100644 } public void a(Entity entity, Entity entity1) { -@@ -891,6 +1364,12 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -893,6 +1366,12 @@ public class WorldServer extends World implements GeneratorAccessSeed { int i = MathHelper.floor(entity.locX() / 16.0D); int j = Math.min(15, Math.max(0, MathHelper.floor(entity.locY() / 16.0D))); // Paper - stay consistent with chunk add/remove behavior int k = MathHelper.floor(entity.locZ() / 16.0D); @@ -7096,7 +7099,7 @@ index d048ee2313..8388629f57 100644 if (!entity.inChunk || entity.chunkX != i || entity.chunkY != j || entity.chunkZ != k) { // Paper start - remove entity if its in a chunk more correctly. -@@ -900,6 +1379,12 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -902,6 +1381,12 @@ public class WorldServer extends World implements GeneratorAccessSeed { } // Paper end @@ -7109,7 +7112,7 @@ index d048ee2313..8388629f57 100644 if (entity.inChunk && this.isChunkLoaded(entity.chunkX, entity.chunkZ)) { this.getChunkAt(entity.chunkX, entity.chunkZ).a(entity, entity.chunkY); } -@@ -913,6 +1398,11 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -915,6 +1400,11 @@ public class WorldServer extends World implements GeneratorAccessSeed { } else { this.getChunkAt(i, k).a(entity); } @@ -7121,7 +7124,7 @@ index d048ee2313..8388629f57 100644 } this.getMethodProfiler().exit(); -@@ -1224,7 +1714,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1226,7 +1716,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { Entity entity = (Entity) iterator.next(); if (!(entity instanceof EntityPlayer)) { @@ -7130,7 +7133,7 @@ index d048ee2313..8388629f57 100644 throw (IllegalStateException) SystemUtils.c(new IllegalStateException("Removing entity while ticking!")); } -@@ -1252,6 +1742,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1254,6 +1744,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { public void unregisterEntity(Entity entity) { org.spigotmc.AsyncCatcher.catchOp("entity unregister"); // Spigot @@ -7138,7 +7141,7 @@ index d048ee2313..8388629f57 100644 // Paper start - fix entity registration issues if (entity instanceof EntityComplexPart) { // Usually this is a no-op for complex parts, and ID's should be removed, but go ahead and remove it anyways -@@ -1318,17 +1809,108 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1320,17 +1811,108 @@ public class WorldServer extends World implements GeneratorAccessSeed { this.getScoreboard().a(entity); // CraftBukkit start - SPIGOT-5278 if (entity instanceof EntityDrowned) { @@ -7250,7 +7253,7 @@ index d048ee2313..8388629f57 100644 private void registerEntity(Entity entity) { org.spigotmc.AsyncCatcher.catchOp("entity register"); // Spigot // Paper start - don't double enqueue entity registration -@@ -1339,7 +1921,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1341,7 +1923,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { return; } // Paper end @@ -7259,7 +7262,7 @@ index d048ee2313..8388629f57 100644 if (!entity.isQueuedForRegister) { // Paper this.entitiesToAdd.add(entity); entity.isQueuedForRegister = true; // Paper -@@ -1347,6 +1929,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1349,6 +1931,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { } else { entity.isQueuedForRegister = false; // Paper this.entitiesById.put(entity.getId(), entity); @@ -7267,7 +7270,7 @@ index d048ee2313..8388629f57 100644 if (entity instanceof EntityEnderDragon) { EntityComplexPart[] aentitycomplexpart = ((EntityEnderDragon) entity).eK(); int i = aentitycomplexpart.length; -@@ -1355,6 +1938,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1357,6 +1940,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { EntityComplexPart entitycomplexpart = aentitycomplexpart[j]; this.entitiesById.put(entitycomplexpart.getId(), entitycomplexpart); @@ -7275,7 +7278,7 @@ index d048ee2313..8388629f57 100644 } } -@@ -1379,12 +1963,16 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1381,12 +1965,16 @@ public class WorldServer extends World implements GeneratorAccessSeed { // this.getChunkProvider().addEntity(entity); // Paper - moved down below valid=true // CraftBukkit start - SPIGOT-5278 if (entity instanceof EntityDrowned) { @@ -7295,7 +7298,7 @@ index d048ee2313..8388629f57 100644 } entity.valid = true; // CraftBukkit this.getChunkProvider().addEntity(entity); // Paper - from above to be below valid=true -@@ -1400,7 +1988,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1402,7 +1990,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { } public void removeEntity(Entity entity) { @@ -7304,7 +7307,7 @@ index d048ee2313..8388629f57 100644 throw (IllegalStateException) SystemUtils.c(new IllegalStateException("Removing entity while ticking!")); } else { this.removeEntityFromChunk(entity); -@@ -1501,8 +2089,26 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1503,8 +2091,26 @@ public class WorldServer extends World implements GeneratorAccessSeed { VoxelShape voxelshape1 = iblockdata1.getCollisionShape(this, blockposition); if (VoxelShapes.c(voxelshape, voxelshape1, OperatorBoolean.NOT_SAME)) { @@ -7332,7 +7335,7 @@ index d048ee2313..8388629f57 100644 while (iterator.hasNext()) { NavigationAbstract navigationabstract = (NavigationAbstract) iterator.next(); -@@ -1510,7 +2116,21 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1512,7 +2118,21 @@ public class WorldServer extends World implements GeneratorAccessSeed { if (!navigationabstract.i()) { navigationabstract.b(blockposition); } @@ -7438,7 +7441,7 @@ index 6282a05ae8..d434bd93bc 100644 public void restart() { org.spigotmc.RestartCommand.restart(); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 65b36a1741..39decca9c5 100644 +index ca0ca5e407..e8bbe1545e 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -336,6 +336,14 @@ public class CraftWorld implements World { diff --git a/patches/server/0002-Rebrand.patch b/patches/server/0002-Rebrand.patch index cd6fbd94b..3cb4b40bb 100644 --- a/patches/server/0002-Rebrand.patch +++ b/patches/server/0002-Rebrand.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Rebrand diff --git a/pom.xml b/pom.xml -index 6fd596817..5b540e606 100644 +index 6fd5968178..5b540e606e 100644 --- a/pom.xml +++ b/pom.xml @@ -1,12 +1,11 @@ @@ -86,7 +86,7 @@ index 6fd596817..5b540e606 100644 diff --git a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java -index 74ed02fa9..c1280478e 100644 +index 74ed02fa92..c1280478ee 100644 --- a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java +++ b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java @@ -17,7 +17,7 @@ public final class PaperConsole extends SimpleTerminalConsole { @@ -99,7 +99,7 @@ index 74ed02fa9..c1280478e 100644 .completer(new ConsoleCommandCompleter(this.server)) ); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 0200f21cb..56020d44b 100644 +index 0200f21cbe..56020d44b7 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1505,7 +1505,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant affectsSpawning = (entity) -> { diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 5af6140a7..1e61b179f 100644 +index bf603ba34f..8b70ccb604 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java @@ -232,6 +232,12 @@ public class PlayerConnection implements PacketListenerPlayIn { @@ -205,7 +205,7 @@ index 5af6140a7..1e61b179f 100644 if (from.getX() != Double.MAX_VALUE) { Location oldTo = to.clone(); diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index 8388629f5..a1870fbd6 100644 +index 2bee2dab9f..748ace6aa6 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -862,7 +862,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { @@ -217,7 +217,7 @@ index 8388629f5..a1870fbd6 100644 })) { // CraftBukkit start long l = this.worldData.getDayTime() + 24000L; -@@ -1193,7 +1193,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1195,7 +1195,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { while (iterator.hasNext()) { EntityPlayer entityplayer = (EntityPlayer) iterator.next(); @@ -227,7 +227,7 @@ index 8388629f5..a1870fbd6 100644 } else if (entityplayer.isSleeping()) { ++j; diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 803a7ff92..d699a9168 100644 +index 803a7ff92a..d699a91685 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -1,6 +1,7 @@ @@ -255,7 +255,7 @@ index 803a7ff92..d699a9168 100644 private static void timingsSettings() { timingsUrl = getString("settings.timings.url", timingsUrl); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 361f7857e..2578a4677 100644 +index 361f7857e4..2578a4677d 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -56,4 +56,15 @@ public class PurpurWorldConfig { @@ -275,7 +275,7 @@ index 361f7857e..2578a4677 100644 + } } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 72cd52fd7..41184219e 100644 +index 72cd52fd7f..41184219ee 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -2155,4 +2155,21 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -301,7 +301,7 @@ index 72cd52fd7..41184219e 100644 + // Purpur end } diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index f78e44e05..da4c49daf 100644 +index f78e44e05f..da4c49daf4 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -207,6 +207,7 @@ public class ActivationRange diff --git a/patches/server/0013-MoonPhase-API.patch b/patches/server/0013-MoonPhase-API.patch index 4e564bc98..120fa89c5 100644 --- a/patches/server/0013-MoonPhase-API.patch +++ b/patches/server/0013-MoonPhase-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] MoonPhase API diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 39decca9c5..94fad039f1 100644 +index e8bbe1545e..f51f9c8d11 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2615,4 +2615,11 @@ public class CraftWorld implements World { +@@ -2616,4 +2616,11 @@ public class CraftWorld implements World { return spigot; } // Spigot end diff --git a/patches/server/0019-World-getPlacementBlockData.patch b/patches/server/0019-World-getPlacementBlockData.patch index d6f0011c7..9a583855c 100644 --- a/patches/server/0019-World-getPlacementBlockData.patch +++ b/patches/server/0019-World-getPlacementBlockData.patch @@ -5,10 +5,10 @@ Subject: [PATCH] World#getPlacementBlockData diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 94fad039f1..2577a41c92 100644 +index f51f9c8d11..8d70139228 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2621,5 +2621,10 @@ public class CraftWorld implements World { +@@ -2622,5 +2622,10 @@ public class CraftWorld implements World { public net.pl3x.purpur.MoonPhase getMoonPhase() { return net.pl3x.purpur.MoonPhase.getPhase(getFullTime() / 24000L); } diff --git a/patches/server/0037-Zombie-horse-naturally-spawn.patch b/patches/server/0037-Zombie-horse-naturally-spawn.patch index 54aa66f0a..cd94bfde6 100644 --- a/patches/server/0037-Zombie-horse-naturally-spawn.patch +++ b/patches/server/0037-Zombie-horse-naturally-spawn.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Zombie horse naturally spawn diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index a1870fbd6..596ef231c 100644 +index 748ace6aa6..346cbc3efd 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java -@@ -1070,12 +1070,18 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1072,12 +1072,18 @@ public class WorldServer extends World implements GeneratorAccessSeed { boolean flag1 = this.getGameRules().getBoolean(GameRules.DO_MOB_SPAWNING) && this.random.nextDouble() < (double) difficultydamagescaler.b() * paperConfig.skeleHorseSpawnChance; // Paper if (flag1) { @@ -34,7 +34,7 @@ index a1870fbd6..596ef231c 100644 EntityLightning entitylightning = (EntityLightning) EntityTypes.LIGHTNING_BOLT.a((World) this); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 70f8feffb..d0fd8f9cd 100644 +index 70f8feffb1..d0fd8f9cdf 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -138,4 +138,9 @@ public class PurpurWorldConfig { diff --git a/patches/server/0047-Cat-spawning-options.patch b/patches/server/0047-Cat-spawning-options.patch index fcbf3f80e..8e011786e 100644 --- a/patches/server/0047-Cat-spawning-options.patch +++ b/patches/server/0047-Cat-spawning-options.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Cat spawning options diff --git a/src/main/java/net/minecraft/server/IEntityAccess.java b/src/main/java/net/minecraft/server/IEntityAccess.java -index dfa8f3439..a3a073f9d 100644 +index dfa8f3439b..a3a073f9d2 100644 --- a/src/main/java/net/minecraft/server/IEntityAccess.java +++ b/src/main/java/net/minecraft/server/IEntityAccess.java @@ -45,6 +45,7 @@ public interface IEntityAccess { @@ -17,7 +17,7 @@ index dfa8f3439..a3a073f9d 100644 return this.a(oclass, axisalignedbb, IEntitySelector.g); } diff --git a/src/main/java/net/minecraft/server/MobSpawnerCat.java b/src/main/java/net/minecraft/server/MobSpawnerCat.java -index 67c20747a..68d37121f 100644 +index 67c20747a3..68d37121fd 100644 --- a/src/main/java/net/minecraft/server/MobSpawnerCat.java +++ b/src/main/java/net/minecraft/server/MobSpawnerCat.java @@ -16,7 +16,7 @@ public class MobSpawnerCat implements MobSpawner { @@ -66,7 +66,7 @@ index 67c20747a..68d37121f 100644 } diff --git a/src/main/java/net/minecraft/server/VillagePlace.java b/src/main/java/net/minecraft/server/VillagePlace.java -index c1e149f20..acc30cb0d 100644 +index c1e149f204..acc30cb0d8 100644 --- a/src/main/java/net/minecraft/server/VillagePlace.java +++ b/src/main/java/net/minecraft/server/VillagePlace.java @@ -45,6 +45,7 @@ public class VillagePlace extends RegionFileSection { @@ -78,7 +78,7 @@ index c1e149f20..acc30cb0d 100644 return this.c(predicate, blockposition, i, villageplace_occupancy).count(); } diff --git a/src/main/java/net/minecraft/server/VillagePlaceType.java b/src/main/java/net/minecraft/server/VillagePlaceType.java -index 5bd3bcc2b..5f2bb140a 100644 +index 5bd3bcc2b9..5f2bb140ae 100644 --- a/src/main/java/net/minecraft/server/VillagePlaceType.java +++ b/src/main/java/net/minecraft/server/VillagePlaceType.java @@ -44,7 +44,7 @@ public class VillagePlaceType { @@ -99,10 +99,10 @@ index 5bd3bcc2b..5f2bb140a 100644 return this.E; } diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index 596ef231c..edd76575a 100644 +index 346cbc3efd..88e807da1e 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java -@@ -2500,6 +2500,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -2502,6 +2502,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { } } @@ -111,7 +111,7 @@ index 596ef231c..edd76575a 100644 return this.getChunkProvider().j(); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index b41d4959c..55e609cc1 100644 +index b41d4959c1..55e609cc1c 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -111,6 +111,15 @@ public class PurpurWorldConfig {