diff --git a/patches/api/0001-Tuinity-API-Changes.patch b/patches/api/0001-Tuinity-API-Changes.patch index 75c923186..35ecb54bb 100644 --- a/patches/api/0001-Tuinity-API-Changes.patch +++ b/patches/api/0001-Tuinity-API-Changes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Tuinity API Changes diff --git a/pom.xml b/pom.xml -index 06aa32269..d04593fee 100644 +index 15ce1c66462351d6d1ba55c111db13ef1c9f0789..63dfd1c647fd4d3b9b9924627d766c095d286f14 100644 --- a/pom.xml +++ b/pom.xml @@ -3,18 +3,18 @@ @@ -34,7 +34,7 @@ index 06aa32269..d04593fee 100644 diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 0653e0ffe..65a40c4a9 100644 +index 0653e0ffe96748dc971ec7e8027f8159696adf62..65a40c4a9b24fa607d284e203becba034520b75d 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -1438,6 +1438,14 @@ public interface Server extends PluginMessageRecipient { diff --git a/patches/server/0001-Tuinity-Server-Changes.patch b/patches/server/0001-Tuinity-Server-Changes.patch index d827abd63..e2781f26c 100644 --- a/patches/server/0001-Tuinity-Server-Changes.patch +++ b/patches/server/0001-Tuinity-Server-Changes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Tuinity Server Changes diff --git a/pom.xml b/pom.xml -index ef8ee637a..6fd596817 100644 +index ef8ee637a8a0e5e703922b2991c58f4f116b23fb..6fd59681784a5cc369f4903b4da0d11174b805f2 100644 --- a/pom.xml +++ b/pom.xml @@ -1,11 +1,11 @@ @@ -65,7 +65,7 @@ index ef8ee637a..6fd596817 100644 diff --git a/src/main/java/co/aikar/timings/MinecraftTimings.java b/src/main/java/co/aikar/timings/MinecraftTimings.java -index dd0722397..2966c5731 100644 +index dd07223978c9aa648673d96ba7b3db1160d43bbf..2966c5731761b125d841c8f3ea80f68bc189c162 100644 --- a/src/main/java/co/aikar/timings/MinecraftTimings.java +++ b/src/main/java/co/aikar/timings/MinecraftTimings.java @@ -43,6 +43,8 @@ public final class MinecraftTimings { @@ -78,7 +78,7 @@ index dd0722397..2966c5731 100644 private MinecraftTimings() {} diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java -index e33e889c2..5dfa06588 100644 +index e33e889c291d37a821a4fbd40d9aac7bb079de0d..5dfa0658838c4801cdf260eae8b98163f729e5af 100644 --- a/src/main/java/co/aikar/timings/TimingsExport.java +++ b/src/main/java/co/aikar/timings/TimingsExport.java @@ -229,7 +229,8 @@ public class TimingsExport extends Thread { @@ -92,7 +92,7 @@ index e33e889c2..5dfa06588 100644 new TimingsExport(listeners, parent, history).start(); diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -index 49a38c660..255bbd6e4 100644 +index 49a38c6608b652ff48ef4eaca0dd3ccb1ba570e3..255bbd6e48b95c70fad02ba692c64c7579496827 100644 --- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java @@ -24,8 +24,8 @@ public class PaperVersionFetcher implements VersionFetcher { @@ -123,7 +123,7 @@ index 49a38c660..255bbd6e4 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 0692fe33b..4263eb917 100644 +index 0692fe33bb7c4a7bb666920b10f5dd3a0e7a7689..4263eb917274ddc7acd9651caf7510a36c0558d6 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 @@ -200,7 +200,7 @@ index 0692fe33b..4263eb917 100644 diff --git a/src/main/java/com/tuinity/tuinity/chunk/SingleThreadChunkRegionManager.java b/src/main/java/com/tuinity/tuinity/chunk/SingleThreadChunkRegionManager.java new file mode 100644 -index 000000000..97c4100c5 +index 0000000000000000000000000000000000000000..97c4100c5d60de7babfc3b7b6a4352101b21aac9 --- /dev/null +++ b/src/main/java/com/tuinity/tuinity/chunk/SingleThreadChunkRegionManager.java @@ -0,0 +1,159 @@ @@ -366,10 +366,10 @@ index 000000000..97c4100c5 \ No newline at end of file diff --git a/src/main/java/com/tuinity/tuinity/config/TuinityConfig.java b/src/main/java/com/tuinity/tuinity/config/TuinityConfig.java new file mode 100644 -index 000000000..1ae1fd750 +index 0000000000000000000000000000000000000000..1c7b858ed53f853541724e8d3fdae4e0e82e5d4f --- /dev/null +++ b/src/main/java/com/tuinity/tuinity/config/TuinityConfig.java -@@ -0,0 +1,277 @@ +@@ -0,0 +1,279 @@ +package com.tuinity.tuinity.config; + +import com.destroystokyo.paper.util.SneakyThrow; @@ -632,6 +632,7 @@ index 000000000..1ae1fd750 + + public int spawnLimitMonsters; + public int spawnLimitAnimals; ++ public int spawnLimitWaterAmbient; + public int spawnLimitWaterAnimals; + public int spawnLimitAmbient; + @@ -640,6 +641,7 @@ index 000000000..1ae1fd750 + + this.spawnLimitMonsters = this.getInt(path + ".monsters", -1); + this.spawnLimitAnimals = this.getInt(path + ".animals", -1); ++ this.spawnLimitWaterAmbient = this.getInt(path + ".water-ambient", -1); + this.spawnLimitWaterAnimals = this.getInt(path + ".water-animals", -1); + this.spawnLimitAmbient = this.getInt(path + ".ambient", -1); + } @@ -650,7 +652,7 @@ index 000000000..1ae1fd750 \ No newline at end of file diff --git a/src/main/java/com/tuinity/tuinity/util/CachedLists.java b/src/main/java/com/tuinity/tuinity/util/CachedLists.java new file mode 100644 -index 000000000..a54f516ba +index 0000000000000000000000000000000000000000..a54f516ba72806c0470259436f889faa8f6e7586 --- /dev/null +++ b/src/main/java/com/tuinity/tuinity/util/CachedLists.java @@ -0,0 +1,53 @@ @@ -709,7 +711,7 @@ index 000000000..a54f516ba +} diff --git a/src/main/java/com/tuinity/tuinity/util/TickThread.java b/src/main/java/com/tuinity/tuinity/util/TickThread.java new file mode 100644 -index 000000000..08ed24325 +index 0000000000000000000000000000000000000000..08ed243259f052165c6f75aed1d1d65a14219715 --- /dev/null +++ b/src/main/java/com/tuinity/tuinity/util/TickThread.java @@ -0,0 +1,41 @@ @@ -757,7 +759,7 @@ index 000000000..08ed24325 \ No newline at end of file diff --git a/src/main/java/com/tuinity/tuinity/util/maplist/IteratorSafeOrderedReferenceSet.java b/src/main/java/com/tuinity/tuinity/util/maplist/IteratorSafeOrderedReferenceSet.java new file mode 100644 -index 000000000..e12d09645 +index 0000000000000000000000000000000000000000..e12d096456965c0f9e152a31f4c2c602184dd7fa --- /dev/null +++ b/src/main/java/com/tuinity/tuinity/util/maplist/IteratorSafeOrderedReferenceSet.java @@ -0,0 +1,265 @@ @@ -1028,7 +1030,7 @@ index 000000000..e12d09645 +} diff --git a/src/main/java/com/tuinity/tuinity/voxel/AABBVoxelShape.java b/src/main/java/com/tuinity/tuinity/voxel/AABBVoxelShape.java new file mode 100644 -index 000000000..76593df29 +index 0000000000000000000000000000000000000000..76593df295e5f462adcbc223d791316a849fffeb --- /dev/null +++ b/src/main/java/com/tuinity/tuinity/voxel/AABBVoxelShape.java @@ -0,0 +1,246 @@ @@ -1279,7 +1281,7 @@ index 000000000..76593df29 + } +} diff --git a/src/main/java/net/minecraft/server/AxisAlignedBB.java b/src/main/java/net/minecraft/server/AxisAlignedBB.java -index ed9b2f9ad..d54bf7140 100644 +index ed9b2f9adfecdc6d1b9925579ec510657adde11f..d54bf71409fe299671aa3f72315f18a188b0db9d 100644 --- a/src/main/java/net/minecraft/server/AxisAlignedBB.java +++ b/src/main/java/net/minecraft/server/AxisAlignedBB.java @@ -13,6 +13,119 @@ public class AxisAlignedBB { @@ -1427,7 +1429,7 @@ index ed9b2f9ad..d54bf7140 100644 return d0 >= this.minX && d0 < this.maxX && d1 >= this.minY && d1 < this.maxY && d2 >= this.minZ && d2 < this.maxZ; } diff --git a/src/main/java/net/minecraft/server/BaseBlockPosition.java b/src/main/java/net/minecraft/server/BaseBlockPosition.java -index 1842e6983..dab89b0c6 100644 +index 1842e69839a65e7b8d2c47fd30ec8f3179f04470..dab89b0c69ddff24d37cee06107bdc464012c6bb 100644 --- a/src/main/java/net/minecraft/server/BaseBlockPosition.java +++ b/src/main/java/net/minecraft/server/BaseBlockPosition.java @@ -16,9 +16,9 @@ public class BaseBlockPosition implements Comparable { @@ -1463,7 +1465,7 @@ index 1842e6983..dab89b0c6 100644 } diff --git a/src/main/java/net/minecraft/server/BiomeBase.java b/src/main/java/net/minecraft/server/BiomeBase.java -index db198811d..52ebdfcc0 100644 +index db198811ddecc00cbd398f3805bdf51b3239f390..52ebdfcc03ae2d8576a98566e7a99c617f87e19e 100644 --- a/src/main/java/net/minecraft/server/BiomeBase.java +++ b/src/main/java/net/minecraft/server/BiomeBase.java @@ -92,6 +92,18 @@ public class BiomeBase { @@ -1486,7 +1488,7 @@ index db198811d..52ebdfcc0 100644 if (biomebase_a.a != null && biomebase_a.b != null && biomebase_a.c != null && biomebase_a.d != null && biomebase_a.e != null && biomebase_a.f != null && biomebase_a.g != null && biomebase_a.j != null) { this.m = biomebase_a.a; diff --git a/src/main/java/net/minecraft/server/BlockBase.java b/src/main/java/net/minecraft/server/BlockBase.java -index ff770a3b0..12027ecad 100644 +index ff770a3b0e5c4fcccc498ecca51dad9863b0fe0e..12027ecad73a6aee506e0984281f485620ca6e02 100644 --- a/src/main/java/net/minecraft/server/BlockBase.java +++ b/src/main/java/net/minecraft/server/BlockBase.java @@ -176,8 +176,8 @@ public abstract class BlockBase { @@ -1609,7 +1611,7 @@ index ff770a3b0..12027ecad 100644 public SoundEffectType getStepSound() { diff --git a/src/main/java/net/minecraft/server/BlockChest.java b/src/main/java/net/minecraft/server/BlockChest.java -index 44b9bfcdc..dba774018 100644 +index 44b9bfcdc7f2cbf4dc6e28c258506d9f84783b0e..dba774018ccd88d75f3a69ceee10fd4691fcfdb6 100644 --- a/src/main/java/net/minecraft/server/BlockChest.java +++ b/src/main/java/net/minecraft/server/BlockChest.java @@ -10,7 +10,7 @@ import javax.annotation.Nullable; @@ -1631,7 +1633,7 @@ index 44b9bfcdc..dba774018 100644 if (tileentity instanceof IInventory) { InventoryUtils.dropInventory(world, blockposition, (IInventory) tileentity); diff --git a/src/main/java/net/minecraft/server/BlockPiston.java b/src/main/java/net/minecraft/server/BlockPiston.java -index c3133814f..4f10ca5ad 100644 +index c3133814f1349b2f70b12967b1b5abc88f71f98c..4f10ca5ada741b4f5ef941bb9d92a2fa6a7c44ff 100644 --- a/src/main/java/net/minecraft/server/BlockPiston.java +++ b/src/main/java/net/minecraft/server/BlockPiston.java @@ -270,7 +270,10 @@ public class BlockPiston extends BlockDirectional { @@ -1688,7 +1690,7 @@ index c3133814f..4f10ca5ad 100644 aiblockdata[j++] = iblockdata1; } diff --git a/src/main/java/net/minecraft/server/BlockPistonMoving.java b/src/main/java/net/minecraft/server/BlockPistonMoving.java -index 4bf66420f..bf76615d7 100644 +index 4bf66420f5361771aae4e07379333f3d8cfb718d..bf76615d720911fa3f31efb05fa49f2a1ec239ac 100644 --- a/src/main/java/net/minecraft/server/BlockPistonMoving.java +++ b/src/main/java/net/minecraft/server/BlockPistonMoving.java @@ -21,7 +21,12 @@ public class BlockPistonMoving extends BlockTileEntity { @@ -1706,7 +1708,7 @@ index 4bf66420f..bf76615d7 100644 @Override diff --git a/src/main/java/net/minecraft/server/BlockPosition.java b/src/main/java/net/minecraft/server/BlockPosition.java -index 8c2a4b57a..7ff4948a4 100644 +index 8c2a4b57aba17b43517f7b09c4adf65ae5904b6d..7ff4948a47be03c65c162ca04b2338cdcdafe7c4 100644 --- a/src/main/java/net/minecraft/server/BlockPosition.java +++ b/src/main/java/net/minecraft/server/BlockPosition.java @@ -386,11 +386,11 @@ public class BlockPosition extends BaseBlockPosition { @@ -1808,7 +1810,7 @@ index 8c2a4b57a..7ff4948a4 100644 @Override diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index 84dc89d96..09b8f9a3f 100644 +index 84dc89d961bde16f96dba5cf7f2ce4b85564215a..09b8f9a3f6443273aa48846c07e8a84a4bb257fa 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java @@ -375,7 +375,7 @@ public class Chunk implements IChunkAccess { @@ -1916,7 +1918,7 @@ index 84dc89d96..09b8f9a3f 100644 int j = MathHelper.floor((axisalignedbb.maxY + 2.0D) / 16.0D); diff --git a/src/main/java/net/minecraft/server/ChunkMapDistance.java b/src/main/java/net/minecraft/server/ChunkMapDistance.java -index 893c0085b..d83d3b54d 100644 +index 893c0085bca0a8d77a85dba1cc29f2dec96c56ec..d83d3b54d394bab7ee9161552cb41ed93d1c9335 100644 --- a/src/main/java/net/minecraft/server/ChunkMapDistance.java +++ b/src/main/java/net/minecraft/server/ChunkMapDistance.java @@ -31,7 +31,7 @@ public abstract class ChunkMapDistance { @@ -2085,7 +2087,7 @@ index 893c0085b..d83d3b54d 100644 for (java.util.Iterator>>> iterator = this.tickets.long2ObjectEntrySet().fastIterator(); iterator.hasNext();) { diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java -index ef980f985..0459a591a 100644 +index ef980f9859d1d7d0d5e13d0d70e998055f92135e..0459a591ac5a32de36ba37410744994377457abb 100644 --- a/src/main/java/net/minecraft/server/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java @@ -120,7 +120,7 @@ public class ChunkProviderServer extends IChunkProvider { @@ -2496,7 +2498,7 @@ index ef980f985..0459a591a 100644 try { boolean execChunkTask = com.destroystokyo.paper.io.chunk.ChunkTaskManager.pollChunkWaitQueue() || ChunkProviderServer.this.world.asyncChunkTaskManager.pollNextChunkTask(); // Paper diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java -index ac58fcb79..742c59cb0 100644 +index ac58fcb7985ebe0cfdab6e1400deb37c233ff637..742c59cb059c8a691727ae1a554743b1c059e594 100644 --- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java +++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java @@ -24,6 +24,14 @@ public class ChunkRegionLoader { @@ -2528,7 +2530,7 @@ index ac58fcb79..742c59cb0 100644 nbttagcompound1.setString("Status", ichunkaccess.getChunkStatus().d()); ChunkConverter chunkconverter = ichunkaccess.p(); diff --git a/src/main/java/net/minecraft/server/ChunkSection.java b/src/main/java/net/minecraft/server/ChunkSection.java -index 8d45588ec..4ab741985 100644 +index 8d45588ecfa33b8c7335df3db58ed6865b8c956c..4ab74198557ce7db6464ec5828a6563862d3af77 100644 --- a/src/main/java/net/minecraft/server/ChunkSection.java +++ b/src/main/java/net/minecraft/server/ChunkSection.java @@ -96,6 +96,7 @@ public class ChunkSection { @@ -2540,7 +2542,7 @@ index 8d45588ec..4ab741985 100644 return this.nonEmptyBlockCount == 0; } diff --git a/src/main/java/net/minecraft/server/ChunkStatus.java b/src/main/java/net/minecraft/server/ChunkStatus.java -index 36c265122..dd8a3dc4f 100644 +index 36c26512297430cf072b549614990b064db94152..dd8a3dc4fe978bcd25a5aa950e78ec73dfc0a9c8 100644 --- a/src/main/java/net/minecraft/server/ChunkStatus.java +++ b/src/main/java/net/minecraft/server/ChunkStatus.java @@ -109,7 +109,7 @@ public class ChunkStatus { @@ -2562,7 +2564,7 @@ index 36c265122..dd8a3dc4f 100644 } diff --git a/src/main/java/net/minecraft/server/DataBits.java b/src/main/java/net/minecraft/server/DataBits.java -index 235c9ec37..dba3c407c 100644 +index 235c9ec37c00ce8838b3e7c02284e402f9d30e38..dba3c407c10aa8c7aa6c5f76b9eac599743b56de 100644 --- a/src/main/java/net/minecraft/server/DataBits.java +++ b/src/main/java/net/minecraft/server/DataBits.java @@ -52,6 +52,7 @@ public class DataBits { @@ -2590,7 +2592,7 @@ index 235c9ec37..dba3c407c 100644 //Validate.inclusiveBetween(0L, (long) (this.e - 1), (long) i); // Paper int j = this.b(i); diff --git a/src/main/java/net/minecraft/server/DataPaletteBlock.java b/src/main/java/net/minecraft/server/DataPaletteBlock.java -index 1cb45f97b..e60ad41b2 100644 +index 1cb45f97b644347d16b66b46113b1e4455004fd3..e60ad41b22ddeeae4923a5b7b2999f2f9789e90d 100644 --- a/src/main/java/net/minecraft/server/DataPaletteBlock.java +++ b/src/main/java/net/minecraft/server/DataPaletteBlock.java @@ -163,6 +163,7 @@ public class DataPaletteBlock implements DataPaletteExpandable { @@ -2602,7 +2604,7 @@ index 1cb45f97b..e60ad41b2 100644 T t0 = this.h.a(this.a.a(i)); diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java -index 8b2755a3b..578f7809c 100644 +index 8b2755a3b95e472e884976195d1d3551fc260e39..578f7809cb09e746778d05b153e02c569f0d1d90 100644 --- a/src/main/java/net/minecraft/server/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/DedicatedServer.java @@ -170,6 +170,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer @@ -2614,7 +2616,7 @@ index 8b2755a3b..578f7809c 100644 this.setPVP(dedicatedserverproperties.pvp); this.setAllowFlight(dedicatedserverproperties.allowFlight); diff --git a/src/main/java/net/minecraft/server/EULA.java b/src/main/java/net/minecraft/server/EULA.java -index 550232cb3..229c3b0f0 100644 +index 550232cb3819138b3bae0fa1c51429485e8bc593..229c3b0f0c650b501f31147adaa17194af57fedd 100644 --- a/src/main/java/net/minecraft/server/EULA.java +++ b/src/main/java/net/minecraft/server/EULA.java @@ -70,7 +70,7 @@ public class EULA { @@ -2627,7 +2629,7 @@ index 550232cb3..229c3b0f0 100644 throwable = throwable1; throw throwable1; diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 9c4b02d77..3db19a9ba 100644 +index 9c4b02d776f8b99c6703c8dfc5d9fac0702bbe80..3db19a9bab8ffdc42f280a27c867bf7d1a1ab9e7 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -136,7 +136,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke @@ -2906,7 +2908,7 @@ index 9c4b02d77..3db19a9ba 100644 int j = MathHelper.floor(d1); int k = MathHelper.floor(d2); diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index c388999d1..4545bd371 100644 +index c388999d104682b84b5f0936efce9d270247d08c..4545bd371c460d360a65d80b31af7819d718c97a 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -2835,7 +2835,11 @@ public abstract class EntityLiving extends Entity { @@ -2933,7 +2935,7 @@ index c388999d1..4545bd371 100644 } diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java -index f75c09d44..bfb931268 100644 +index f75c09d44a19f84588f21a55ea8f0dd8ccb539b9..bfb931268d35754b415538728e081bc1a2c9f188 100644 --- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java +++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java @@ -74,6 +74,7 @@ public class EntityTrackerEntry { @@ -2945,7 +2947,7 @@ index f75c09d44..bfb931268 100644 if (!list.equals(this.p)) { diff --git a/src/main/java/net/minecraft/server/Fluid.java b/src/main/java/net/minecraft/server/Fluid.java -index 05fa52c0b..8ffc5db50 100644 +index 05fa52c0b12f159788ec3f2b769753b6bd29578c..8ffc5db509867c585e90ea12d8509dcd0b1435e0 100644 --- a/src/main/java/net/minecraft/server/Fluid.java +++ b/src/main/java/net/minecraft/server/Fluid.java @@ -9,8 +9,12 @@ public final class Fluid extends IBlockDataHolder { @@ -2971,7 +2973,7 @@ index 05fa52c0b..8ffc5db50 100644 public float getHeight(IBlockAccess iblockaccess, BlockPosition blockposition) { diff --git a/src/main/java/net/minecraft/server/HeightMap.java b/src/main/java/net/minecraft/server/HeightMap.java -index 068b92c5c..a43c4ca3e 100644 +index 068b92c5c4ae112771757626ea75694e59f3d255..a43c4ca3ea2e0dbf34a177592daed18c64bb14d3 100644 --- a/src/main/java/net/minecraft/server/HeightMap.java +++ b/src/main/java/net/minecraft/server/HeightMap.java @@ -19,7 +19,25 @@ public class HeightMap { @@ -3055,7 +3057,7 @@ index 068b92c5c..a43c4ca3e 100644 this.i = heightmap_use; this.j = predicate; diff --git a/src/main/java/net/minecraft/server/IBlockData.java b/src/main/java/net/minecraft/server/IBlockData.java -index 10a5901db..911750476 100644 +index 10a5901db1e0efe0b7d6958098bb0ae492a9e76f..9117504767834d0a798a3dfd4867a0c0bea95ed8 100644 --- a/src/main/java/net/minecraft/server/IBlockData.java +++ b/src/main/java/net/minecraft/server/IBlockData.java @@ -8,6 +8,19 @@ public class IBlockData extends BlockBase.BlockData { @@ -3079,7 +3081,7 @@ index 10a5901db..911750476 100644 super(block, immutablemap, mapcodec); } diff --git a/src/main/java/net/minecraft/server/IChunkLoader.java b/src/main/java/net/minecraft/server/IChunkLoader.java -index 582a5695b..5601088cd 100644 +index 582a5695bac7d078e3022b8ee70c512c0680d992..5601088cd5024a40e8296bab979f43de924c2b62 100644 --- a/src/main/java/net/minecraft/server/IChunkLoader.java +++ b/src/main/java/net/minecraft/server/IChunkLoader.java @@ -21,7 +21,7 @@ public class IChunkLoader implements AutoCloseable { @@ -3092,7 +3094,7 @@ index 582a5695b..5601088cd 100644 // Paper - nuke IOWorker } diff --git a/src/main/java/net/minecraft/server/ICollisionAccess.java b/src/main/java/net/minecraft/server/ICollisionAccess.java -index 1cc40b1f0..3ce2f7497 100644 +index 1cc40b1f0af9e617b2a71bcc442543e10b2dc61a..3ce2f7497a9e12082b70525ad2aaf5e0828cc068 100644 --- a/src/main/java/net/minecraft/server/ICollisionAccess.java +++ b/src/main/java/net/minecraft/server/ICollisionAccess.java @@ -46,6 +46,11 @@ public interface ICollisionAccess extends IBlockAccess { @@ -3108,7 +3110,7 @@ index 1cc40b1f0..3ce2f7497 100644 return this.d(entity, axisalignedbb, predicate).allMatch(VoxelShape::isEmpty); } finally { if (entity != null) entity.collisionLoadChunks = false; } // Paper diff --git a/src/main/java/net/minecraft/server/IEntityAccess.java b/src/main/java/net/minecraft/server/IEntityAccess.java -index 267a6baae..0edcb775e 100644 +index 267a6baae89c181eed545e6758fac7115eb3882f..0edcb775e965a3d6539d44e49480068deafab7a5 100644 --- a/src/main/java/net/minecraft/server/IEntityAccess.java +++ b/src/main/java/net/minecraft/server/IEntityAccess.java @@ -69,6 +69,7 @@ public interface IEntityAccess { @@ -3120,7 +3122,7 @@ index 267a6baae..0edcb775e 100644 return entity == null || !entity.isSameVehicle(entity1); }); diff --git a/src/main/java/net/minecraft/server/LightEngineStorage.java b/src/main/java/net/minecraft/server/LightEngineStorage.java -index b98e60772..e0bbfe142 100644 +index b98e60772bad7e06845b50fdc11e98c0ea775d3d..e0bbfe1422cbad811ecb43d7436380d86b0f8abc 100644 --- a/src/main/java/net/minecraft/server/LightEngineStorage.java +++ b/src/main/java/net/minecraft/server/LightEngineStorage.java @@ -23,7 +23,8 @@ public abstract class LightEngineStorage> e @@ -3152,7 +3154,7 @@ index b98e60772..e0bbfe142 100644 while (objectiterator.hasNext()) { entry = (Entry) objectiterator.next(); diff --git a/src/main/java/net/minecraft/server/MCUtil.java b/src/main/java/net/minecraft/server/MCUtil.java -index e9cedbc8b..a29d54c77 100644 +index e9cedbc8b62180134e774b119fb156c54f5767de..a29d54c775feb8a5d872b934aa8360cd70085b2c 100644 --- a/src/main/java/net/minecraft/server/MCUtil.java +++ b/src/main/java/net/minecraft/server/MCUtil.java @@ -48,6 +48,20 @@ public final class MCUtil { @@ -3177,7 +3179,7 @@ index e9cedbc8b..a29d54c77 100644 diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 26f230a80..eb71fa6e3 100644 +index 26f230a801bd8efa5f8b61dee53fe7b1435f906b..eb71fa6e39ecf477f18a2ae5a159d8b62ad4bfb5 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -986,7 +986,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant> { @@ -3489,7 +3491,7 @@ index d5cc2af83..327bb3e74 100644 } return true; diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java -index 8335d0033..e0ee52409 100644 +index 8335d003369d94cbad17ec6fce76d6f9d016455a..e0ee524093e63e902cc7aea3c82e226438d4deb6 100644 --- a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java +++ b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java @@ -19,7 +19,7 @@ public class PacketPlayOutMapChunk implements Packet { @@ -3659,7 +3661,7 @@ index 8335d0033..e0ee52409 100644 } } diff --git a/src/main/java/net/minecraft/server/PathfinderNormal.java b/src/main/java/net/minecraft/server/PathfinderNormal.java -index d7f0df123..ec55785af 100644 +index d7f0df123ba716ca8587cbfab2c8e94961164909..ec55785af2b432b692d3a3bf4298ffb32489bf3b 100644 --- a/src/main/java/net/minecraft/server/PathfinderNormal.java +++ b/src/main/java/net/minecraft/server/PathfinderNormal.java @@ -538,7 +538,7 @@ public class PathfinderNormal extends PathfinderAbstract { @@ -3672,7 +3674,7 @@ index d7f0df123..ec55785af 100644 return fluid.a((Tag) TagsFluid.WATER) ? PathType.WATER : (fluid.a((Tag) TagsFluid.LAVA) ? PathType.LAVA : PathType.OPEN); } diff --git a/src/main/java/net/minecraft/server/PlayerChunk.java b/src/main/java/net/minecraft/server/PlayerChunk.java -index a3bce8f13..a483ec0e2 100644 +index a3bce8f13bf278af2d6870891daa9bf692b4e267..a483ec0e2b389903cf693ac7d018fce158d740d2 100644 --- a/src/main/java/net/minecraft/server/PlayerChunk.java +++ b/src/main/java/net/minecraft/server/PlayerChunk.java @@ -494,6 +494,7 @@ public class PlayerChunk { @@ -3773,7 +3775,7 @@ index a3bce8f13..a483ec0e2 100644 if (chunk != null) { playerchunkmap.callbackExecutor.execute(() -> { diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index 5544254a6..ab751b48d 100644 +index 5544254a655485b8ef9d2883da4d722fa57c63d9..ab751b48d23e06c0d8e54c477611dd6008bb6340 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java @@ -119,31 +119,28 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { @@ -3940,7 +3942,7 @@ index 5544254a6..ab751b48d 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 cf83059fe..37f55c66b 100644 +index cf83059fec9f11df992827f0c0249243caa9ac33..37f55c66b6cbca9650b050fe08f60c101c2d35bf 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 { @@ -4045,7 +4047,7 @@ index cf83059fe..37f55c66b 100644 } else { // CraftBukkit start - fire PlayerMoveEvent diff --git a/src/main/java/net/minecraft/server/PlayerConnectionUtils.java b/src/main/java/net/minecraft/server/PlayerConnectionUtils.java -index 7ea293f38..e698dd226 100644 +index 7ea293f38dedd6066601d94adbe175a31c502e1f..e698dd22607b2b2c4068c5bfb03ac53eb5bac080 100644 --- a/src/main/java/net/minecraft/server/PlayerConnectionUtils.java +++ b/src/main/java/net/minecraft/server/PlayerConnectionUtils.java @@ -13,10 +13,30 @@ public class PlayerConnectionUtils { @@ -4093,7 +4095,7 @@ index 7ea293f38..e698dd226 100644 }); throw CancelledPacketHandleException.INSTANCE; diff --git a/src/main/java/net/minecraft/server/PlayerInteractManager.java b/src/main/java/net/minecraft/server/PlayerInteractManager.java -index 6d192b274..f5de49e3e 100644 +index 6d192b27440ddfd34555005dafefbce6bbb67236..f5de49e3e384b1d2926197e72992ace51d2967b6 100644 --- a/src/main/java/net/minecraft/server/PlayerInteractManager.java +++ b/src/main/java/net/minecraft/server/PlayerInteractManager.java @@ -21,14 +21,29 @@ public class PlayerInteractManager { @@ -4228,7 +4230,7 @@ index 6d192b274..f5de49e3e 100644 this.player.playerConnection.sendPacket(new PacketPlayOutBlockChange(this.world, blockposition)); // CraftBukkit - SPIGOT-5196 } diff --git a/src/main/java/net/minecraft/server/ProtoChunk.java b/src/main/java/net/minecraft/server/ProtoChunk.java -index 3b03c28ee..6ac9f437e 100644 +index 3b03c28ee5de1481e1f8088c0e4d388778155fad..6ac9f437e853957e19be077bb2c78eef0dbbbf01 100644 --- a/src/main/java/net/minecraft/server/ProtoChunk.java +++ b/src/main/java/net/minecraft/server/ProtoChunk.java @@ -179,14 +179,11 @@ public class ProtoChunk implements IChunkAccess { @@ -4264,7 +4266,7 @@ index 3b03c28ee..6ac9f437e 100644 } diff --git a/src/main/java/net/minecraft/server/RegionFile.java b/src/main/java/net/minecraft/server/RegionFile.java -index 93797395c..6928b1730 100644 +index 93797395c3a710d228bd790771ac18b4baa3b1e2..6928b1730fd793de78f9d24f3188ab23a09bf057 100644 --- a/src/main/java/net/minecraft/server/RegionFile.java +++ b/src/main/java/net/minecraft/server/RegionFile.java @@ -28,14 +28,349 @@ public class RegionFile implements AutoCloseable { @@ -4826,7 +4828,7 @@ index 93797395c..6928b1730 100644 ((java.nio.Buffer) this.f).position(0); this.dataFile.write(this.f, 0L); diff --git a/src/main/java/net/minecraft/server/RegionFileBitSet.java b/src/main/java/net/minecraft/server/RegionFileBitSet.java -index 1ebdf73cc..cfa3ecb03 100644 +index 1ebdf73cc927405bc536dc74a5118d2a086db0e5..cfa3ecb031b59ec677f016ecdea92d16436fb511 100644 --- a/src/main/java/net/minecraft/server/RegionFileBitSet.java +++ b/src/main/java/net/minecraft/server/RegionFileBitSet.java @@ -4,18 +4,42 @@ import java.util.BitSet; @@ -4874,7 +4876,7 @@ index 1ebdf73cc..cfa3ecb03 100644 int j = 0; diff --git a/src/main/java/net/minecraft/server/RegionFileCache.java b/src/main/java/net/minecraft/server/RegionFileCache.java -index 867dc074b..60b4171a3 100644 +index 867dc074bc57b27486de6ce742971d5db945b0fc..60b4171a3aa2a8b216aba13738c84ac9d7f3b49e 100644 --- a/src/main/java/net/minecraft/server/RegionFileCache.java +++ b/src/main/java/net/minecraft/server/RegionFileCache.java @@ -14,12 +14,43 @@ public class RegionFileCache implements AutoCloseable { // Paper - no final @@ -4965,7 +4967,7 @@ index 867dc074b..60b4171a3 100644 } diff --git a/src/main/java/net/minecraft/server/RegionFileCompression.java b/src/main/java/net/minecraft/server/RegionFileCompression.java -index 3382d678e..29137f495 100644 +index 3382d678e68e559b8d3cb9dced4fce24206cd38f..29137f495942d810e61fadc33178999ad57fdcc0 100644 --- a/src/main/java/net/minecraft/server/RegionFileCompression.java +++ b/src/main/java/net/minecraft/server/RegionFileCompression.java @@ -13,7 +13,7 @@ import javax.annotation.Nullable; @@ -4997,7 +4999,7 @@ index 3382d678e..29137f495 100644 return (InputStream) this.f.wrap(inputstream); } diff --git a/src/main/java/net/minecraft/server/Ticket.java b/src/main/java/net/minecraft/server/Ticket.java -index e41cb8613..c19ffb925 100644 +index e41cb8613efc86499dfe3be36c9130ab6dc9b89e..c19ffb925a02d123da8a5c77186e6105422dccf7 100644 --- a/src/main/java/net/minecraft/server/Ticket.java +++ b/src/main/java/net/minecraft/server/Ticket.java @@ -5,17 +5,17 @@ import java.util.Objects; @@ -5034,7 +5036,7 @@ index e41cb8613..c19ffb925 100644 return j != 0L && i - this.d > j; } diff --git a/src/main/java/net/minecraft/server/TicketType.java b/src/main/java/net/minecraft/server/TicketType.java -index 5c789b25f..4657b05a4 100644 +index 5c789b25f1df2eae8ea8ceb4ba977ba336fe6d5e..4657b05a4213c534a653aefd991645e27a6a4b3b 100644 --- a/src/main/java/net/minecraft/server/TicketType.java +++ b/src/main/java/net/minecraft/server/TicketType.java @@ -26,7 +26,8 @@ public class TicketType { @@ -5048,7 +5050,7 @@ index 5c789b25f..4657b05a4 100644 public static TicketType a(String s, Comparator comparator) { return new TicketType<>(s, comparator, 0L); diff --git a/src/main/java/net/minecraft/server/TileEntity.java b/src/main/java/net/minecraft/server/TileEntity.java -index 67fda8bd5..e1f1d6e33 100644 +index 67fda8bd5a0ad6fea2df0066c61e006c8a49980c..e1f1d6e33fd76bd11eb23e78457ba711bf9d5cde 100644 --- a/src/main/java/net/minecraft/server/TileEntity.java +++ b/src/main/java/net/minecraft/server/TileEntity.java @@ -12,7 +12,7 @@ import org.bukkit.inventory.InventoryHolder; @@ -5122,7 +5124,7 @@ index 67fda8bd5..e1f1d6e33 100644 private String tileEntityKeyString = null; private MinecraftKey tileEntityKey = null; diff --git a/src/main/java/net/minecraft/server/TileEntityBeacon.java b/src/main/java/net/minecraft/server/TileEntityBeacon.java -index 2858ea1f3..453f1301b 100644 +index 2858ea1f3eb44ea2cc6b11454b8e94bca4ab0568..453f1301b4b4ed5024a2d608d119889f7805961f 100644 --- a/src/main/java/net/minecraft/server/TileEntityBeacon.java +++ b/src/main/java/net/minecraft/server/TileEntityBeacon.java @@ -35,7 +35,7 @@ public class TileEntityBeacon extends TileEntity implements ITileInventory, ITic @@ -5173,7 +5175,7 @@ index 2858ea1f3..453f1301b 100644 public void tick() { int i = this.position.getX(); diff --git a/src/main/java/net/minecraft/server/TileEntityBeehive.java b/src/main/java/net/minecraft/server/TileEntityBeehive.java -index 6dc91d985..9da356de6 100644 +index 6dc91d985acb9c06b8c284edf3c2439fda6fac72..9da356de6b98e4b9c48ee9ea23647c2e292adea9 100644 --- a/src/main/java/net/minecraft/server/TileEntityBeehive.java +++ b/src/main/java/net/minecraft/server/TileEntityBeehive.java @@ -12,6 +12,13 @@ public class TileEntityBeehive extends TileEntity implements ITickable { @@ -5191,7 +5193,7 @@ index 6dc91d985..9da356de6 100644 super(TileEntityTypes.BEEHIVE); } diff --git a/src/main/java/net/minecraft/server/TileEntityBrewingStand.java b/src/main/java/net/minecraft/server/TileEntityBrewingStand.java -index 276eba954..e38a494d7 100644 +index 276eba954bebcf87b6d9b899f161355974bc9dc8..e38a494d7b1aa03b5644a54e9ba9139aa43eb759 100644 --- a/src/main/java/net/minecraft/server/TileEntityBrewingStand.java +++ b/src/main/java/net/minecraft/server/TileEntityBrewingStand.java @@ -24,7 +24,7 @@ public class TileEntityBrewingStand extends TileEntityContainer implements IWorl @@ -5242,7 +5244,7 @@ index 276eba954..e38a494d7 100644 protected IChatBaseComponent getContainerName() { return new ChatMessage("container.brewing"); diff --git a/src/main/java/net/minecraft/server/TileEntityChest.java b/src/main/java/net/minecraft/server/TileEntityChest.java -index f6f274389..f9a878bd0 100644 +index f6f2743892b5b933e6ba0cc25b24e0d471b305c9..f9a878bd0be1666ee68d790cdf9d71ca8cb11c24 100644 --- a/src/main/java/net/minecraft/server/TileEntityChest.java +++ b/src/main/java/net/minecraft/server/TileEntityChest.java @@ -45,6 +45,22 @@ public class TileEntityChest extends TileEntityLootable { // Paper - Remove ITic @@ -5269,7 +5271,7 @@ index f6f274389..f9a878bd0 100644 super(tileentitytypes); this.items = NonNullList.a(27, ItemStack.b); diff --git a/src/main/java/net/minecraft/server/TileEntityConduit.java b/src/main/java/net/minecraft/server/TileEntityConduit.java -index ade830122..7e9470caa 100644 +index ade830122762b2ba9a0142bdf3e13f325fc3a18a..7e9470caa568ccd5857b8f5c774b6d2651f6f96c 100644 --- a/src/main/java/net/minecraft/server/TileEntityConduit.java +++ b/src/main/java/net/minecraft/server/TileEntityConduit.java @@ -16,15 +16,32 @@ public class TileEntityConduit extends TileEntity implements ITickable { @@ -5308,7 +5310,7 @@ index ade830122..7e9470caa 100644 this(TileEntityTypes.CONDUIT); } diff --git a/src/main/java/net/minecraft/server/TileEntityFurnace.java b/src/main/java/net/minecraft/server/TileEntityFurnace.java -index f4f50fb83..59aa2f8a7 100644 +index f4f50fb8375fec3f6868bbccc50bc78a5cd81965..59aa2f8a797482c43fd47d3bce936772ad3cd6aa 100644 --- a/src/main/java/net/minecraft/server/TileEntityFurnace.java +++ b/src/main/java/net/minecraft/server/TileEntityFurnace.java @@ -32,14 +32,14 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I @@ -5356,7 +5358,7 @@ index f4f50fb83..59aa2f8a7 100644 } diff --git a/src/main/java/net/minecraft/server/TileEntityJukeBox.java b/src/main/java/net/minecraft/server/TileEntityJukeBox.java -index 33c7dc56d..75eb1b8b2 100644 +index 33c7dc56da4fa77c652dda30c5a34ce29e80e60e..75eb1b8b298e6b803cd938b80c71e20670f8df35 100644 --- a/src/main/java/net/minecraft/server/TileEntityJukeBox.java +++ b/src/main/java/net/minecraft/server/TileEntityJukeBox.java @@ -4,6 +4,13 @@ public class TileEntityJukeBox extends TileEntity implements Clearable { @@ -5374,7 +5376,7 @@ index 33c7dc56d..75eb1b8b2 100644 super(TileEntityTypes.JUKEBOX); this.a = ItemStack.b; diff --git a/src/main/java/net/minecraft/server/TileEntityLectern.java b/src/main/java/net/minecraft/server/TileEntityLectern.java -index b2ceb6c17..b955d5d66 100644 +index b2ceb6c179e925aa9b499693247ae00811a404cc..b955d5d6619d6b9c64559937df6aa619fb4c8c04 100644 --- a/src/main/java/net/minecraft/server/TileEntityLectern.java +++ b/src/main/java/net/minecraft/server/TileEntityLectern.java @@ -17,7 +17,7 @@ import org.bukkit.inventory.InventoryHolder; @@ -5451,7 +5453,7 @@ index b2ceb6c17..b955d5d66 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 e7b7e468f..38d0e841c 100644 +index e7b7e468fc874b0fbcd43f87d816a42420f9b05e..38d0e841cabfbb30b55414e8bf8e12219245fb9e 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; @@ -5580,8 +5582,100 @@ index e7b7e468f..38d0e841c 100644 return nbttagcompound; } +diff --git a/src/main/java/net/minecraft/server/UserCache.java b/src/main/java/net/minecraft/server/UserCache.java +index a038397028848edb4f43cd4f7262546666e32883..c68af75629f6f57928b219d7afb7dc6821e49b03 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 { + private final File h; + private static final TypeToken> i = new TypeToken>() { + }; ++ // Tuinity start ++ protected final java.util.concurrent.locks.ReentrantLock stateLock = new java.util.concurrent.locks.ReentrantLock(); ++ protected final java.util.concurrent.locks.ReentrantLock lookupLock = new java.util.concurrent.locks.ReentrantLock(); ++ // Tuinity end + + public UserCache(GameProfileRepository gameprofilerepository, File file) { + this.g = gameprofilerepository; +@@ -98,7 +102,7 @@ public class UserCache { + this.a(gameprofile, (Date) null); + } + +- private synchronized void a(GameProfile gameprofile, Date date) { // Paper - synchronize ++ private void a(GameProfile gameprofile, Date date) { // Paper - synchronize // Tuinity - allow better concurrency + UUID uuid = gameprofile.getId(); + + if (date == null) { +@@ -111,6 +115,7 @@ public class UserCache { + + UserCache.UserCacheEntry usercache_usercacheentry = new UserCache.UserCacheEntry(gameprofile, date); + ++ try { this.stateLock.lock(); // Tuinity - allow better concurrency + //if (this.e.containsKey(uuid)) { // Paper + UserCache.UserCacheEntry usercache_usercacheentry1 = (UserCache.UserCacheEntry) this.e.get(uuid); + if (usercache_usercacheentry1 != null) { // Paper +@@ -122,12 +127,14 @@ public class UserCache { + this.d.put(gameprofile.getName().toLowerCase(Locale.ROOT), usercache_usercacheentry); + this.e.put(uuid, usercache_usercacheentry); + this.f.addFirst(gameprofile); ++ } finally { this.stateLock.unlock(); } // Tuinity - allow better concurrency + if( !org.spigotmc.SpigotConfig.saveUserCacheOnStopOnly ) this.c(); // Spigot - skip saving if disabled + } + + @Nullable +- public synchronized GameProfile getProfile(String s) { // Paper - synchronize ++ public GameProfile getProfile(String s) { // Paper - synchronize // Tuinity start - allow better concurrency + String s1 = s.toLowerCase(Locale.ROOT); ++ boolean stateLocked = true; try { this.stateLock.lock(); // Tuinity - allow better concurrency + 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 { + gameprofile = usercache_usercacheentry.a(); + this.f.remove(gameprofile); + this.f.addFirst(gameprofile); ++ stateLocked = false; this.stateLock.unlock(); // Tuinity - allow better concurrency + } else { ++ 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 + if (gameprofile != null) { + this.a(gameprofile); + usercache_usercacheentry = (UserCache.UserCacheEntry) this.d.get(s1); +@@ -153,6 +164,7 @@ public class UserCache { + + 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 + } + + // Paper start +@@ -252,6 +264,7 @@ public class UserCache { + } + + private List a(int i) { ++ try { this.stateLock.lock(); // Tuinity - allow better concurrency + List list = Lists.newArrayList(); + List list1 = Lists.newArrayList(Iterators.limit(this.f.iterator(), i)); + Iterator iterator = list1.iterator(); +@@ -266,6 +279,7 @@ public class UserCache { + } + + return list; ++ } finally { this.stateLock.unlock(); } // Tuinity - allow better concurrency + } + + class UserCacheEntry { diff --git a/src/main/java/net/minecraft/server/Vec3D.java b/src/main/java/net/minecraft/server/Vec3D.java -index 3048ba008..84858ba39 100644 +index 3048ba008147f4647d633f59db812db9021a7c67..84858ba3923845a630d4886ecbd001c60d46131e 100644 --- a/src/main/java/net/minecraft/server/Vec3D.java +++ b/src/main/java/net/minecraft/server/Vec3D.java @@ -4,7 +4,7 @@ import java.util.EnumSet; @@ -5615,7 +5709,7 @@ index 3048ba008..84858ba39 100644 return this.x * this.x + this.y * this.y + this.z * this.z; } diff --git a/src/main/java/net/minecraft/server/VillagePlace.java b/src/main/java/net/minecraft/server/VillagePlace.java -index 303f6b095..c1e149f20 100644 +index 303f6b0953ff3c29bd31ec5e02386a92b11d114a..c1e149f204d5676091bb854dbacc564616894e4b 100644 --- a/src/main/java/net/minecraft/server/VillagePlace.java +++ b/src/main/java/net/minecraft/server/VillagePlace.java @@ -155,7 +155,7 @@ public class VillagePlace extends RegionFileSection { @@ -5628,7 +5722,7 @@ index 303f6b095..c1e149f20 100644 } // Paper end diff --git a/src/main/java/net/minecraft/server/VoxelShape.java b/src/main/java/net/minecraft/server/VoxelShape.java -index c2b8c9820..3a98e242e 100644 +index c2b8c9820663f95f58f0c3a62cd9ec99c835a82f..3a98e242e06ad3a936b9c3a110c66238d172323e 100644 --- a/src/main/java/net/minecraft/server/VoxelShape.java +++ b/src/main/java/net/minecraft/server/VoxelShape.java @@ -8,11 +8,11 @@ import javax.annotation.Nullable; @@ -5667,7 +5761,7 @@ index c2b8c9820..3a98e242e 100644 List list = Lists.newArrayList(); diff --git a/src/main/java/net/minecraft/server/VoxelShapeArray.java b/src/main/java/net/minecraft/server/VoxelShapeArray.java -index caf297fe9..8d68c783f 100644 +index caf297fe977942ca68fdb963d97dd9fc0f78d883..8d68c783f6d8c1dae62c0d3ed34e305785169579 100644 --- a/src/main/java/net/minecraft/server/VoxelShapeArray.java +++ b/src/main/java/net/minecraft/server/VoxelShapeArray.java @@ -3,6 +3,7 @@ package net.minecraft.server; @@ -5774,7 +5868,7 @@ index caf297fe9..8d68c783f 100644 + // Tuinity end - optimise multi-aabb shapes } diff --git a/src/main/java/net/minecraft/server/VoxelShapes.java b/src/main/java/net/minecraft/server/VoxelShapes.java -index 1fa7061f7..52aee91d2 100644 +index 1fa7061f7adb539b6786fa11a0090f2c188ba9f2..52aee91d2dc7c2459db45183b7f3dccf326bd515 100644 --- a/src/main/java/net/minecraft/server/VoxelShapes.java +++ b/src/main/java/net/minecraft/server/VoxelShapes.java @@ -17,18 +17,81 @@ public final class VoxelShapes { @@ -5901,7 +5995,7 @@ index 1fa7061f7..52aee91d2 100644 return voxelshape != b() && voxelshape1 != b() ? (voxelshape.isEmpty() && voxelshape1.isEmpty() ? false : !c(b(), b(voxelshape, voxelshape1, OperatorBoolean.OR), OperatorBoolean.ONLY_FIRST)) : true; } diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 5f81997db..4a956f368 100644 +index 5f81997db78c989e942351e80a0d2558f4b90fcd..4a956f36812f36ea9898cb9e0c231ddb5eaa12cd 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -94,6 +94,8 @@ public abstract class World implements GeneratorAccess, AutoCloseable { @@ -6023,7 +6117,7 @@ index 5f81997db..4a956f368 100644 int j = MathHelper.floor((axisalignedbb.maxX + 2.0D) / 16.0D); int k = MathHelper.floor((axisalignedbb.minZ - 2.0D) / 16.0D); diff --git a/src/main/java/net/minecraft/server/WorldBorder.java b/src/main/java/net/minecraft/server/WorldBorder.java -index b651eb87b..5cba3b0e6 100644 +index b651eb87bb23deeb2a3f4a1c626ddde9b11a7b9e..5cba3b0e613bb6c016c4441ebb931be9dba8db4e 100644 --- a/src/main/java/net/minecraft/server/WorldBorder.java +++ b/src/main/java/net/minecraft/server/WorldBorder.java @@ -47,11 +47,43 @@ public class WorldBorder { @@ -6095,7 +6189,7 @@ index b651eb87b..5cba3b0e6 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 3a740f566..fff694c37 100644 +index 3a740f5669876271a3f13c64e28eb6f2cb033b4c..bc3a7d1513ebdad0c11133855a8a40ead4d96c02 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 { @@ -6594,7 +6688,8 @@ index 3a740f566..fff694c37 100644 org.spigotmc.ActivationRange.activateEntities(this); // Spigot timings.entityTick.startTiming(); // Spigot - TimingHistory.entityTicks += this.entitiesById.size(); // Paper +- TimingHistory.entityTicks += this.entitiesById.size(); // Paper ++ // Tuinity - fix erroneous entity count reporting while (objectiterator.hasNext()) { - Entry entry = (Entry) objectiterator.next(); - Entity entity = (Entity) entry.getValue(); @@ -6789,7 +6884,7 @@ index 3a740f566..fff694c37 100644 this.tickingEntities = wasTicking; // Paper } diff --git a/src/main/java/net/minecraft/server/WorldUpgrader.java b/src/main/java/net/minecraft/server/WorldUpgrader.java -index 5ccdc0b87..888dae2d5 100644 +index 5ccdc0b87b922724c3dd3085860c55d4959ca0b4..888dae2d5ee8a71e83dd24e5f3c6bc8513016f9d 100644 --- a/src/main/java/net/minecraft/server/WorldUpgrader.java +++ b/src/main/java/net/minecraft/server/WorldUpgrader.java @@ -218,7 +218,7 @@ public class WorldUpgrader { @@ -6802,7 +6897,7 @@ index 5ccdc0b87..888dae2d5 100644 try { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunkSnapshot.java b/src/main/java/org/bukkit/craftbukkit/CraftChunkSnapshot.java -index 4ec53a54e..31c81b4b5 100644 +index 4ec53a54e39cccf29cbe4f21e094bf997ba4389c..31c81b4b52f79892de5c1315358ec161c5a0c204 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftChunkSnapshot.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftChunkSnapshot.java @@ -77,7 +77,7 @@ public class CraftChunkSnapshot implements ChunkSnapshot { @@ -6815,7 +6910,7 @@ index 4ec53a54e..31c81b4b5 100644 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index d8103ab0d..ba4217109 100644 +index d8103ab0d542ced4f30b88ceb4fc4c3eedd5d9a0..ba42171096b1d0be518c43f6eacc85ead935a941 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -231,7 +231,7 @@ import javax.annotation.Nullable; // Paper @@ -6871,10 +6966,10 @@ index d8103ab0d..ba4217109 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 65b36a174..b12da9e3b 100644 +index 65b36a17418ae64b6166704b3d0ecf97df1e9445..39decca9c538dd4a341d34049cf8bbecb81925e8 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -336,6 +336,13 @@ public class CraftWorld implements World { +@@ -336,6 +336,14 @@ public class CraftWorld implements World { this.generator = gen; environment = env; @@ -6882,13 +6977,14 @@ index 65b36a174..b12da9e3b 100644 + //Tuinity start - per world spawn limits + monsterSpawn = world.tuinityConfig.spawnLimitMonsters; + animalSpawn = world.tuinityConfig.spawnLimitAnimals; ++ waterAmbientSpawn = world.tuinityConfig.spawnLimitWaterAmbient; + waterAnimalSpawn = world.tuinityConfig.spawnLimitWaterAnimals; + ambientSpawn = world.tuinityConfig.spawnLimitAmbient; + //Tuinity end } @Override -@@ -402,14 +409,7 @@ public class CraftWorld implements World { +@@ -402,14 +410,7 @@ public class CraftWorld implements World { @Override public Chunk getChunkAt(int x, int z) { @@ -6904,7 +7000,7 @@ index 65b36a174..b12da9e3b 100644 } // Paper start -@@ -492,6 +492,7 @@ public class CraftWorld implements World { +@@ -492,6 +493,7 @@ public class CraftWorld implements World { org.spigotmc.AsyncCatcher.catchOp("chunk unload"); // Spigot if (isChunkLoaded(x, z)) { world.getChunkProvider().removeTicket(TicketType.PLUGIN, new ChunkCoordIntPair(x, z), 0, Unit.INSTANCE); // Paper @@ -6912,7 +7008,7 @@ index 65b36a174..b12da9e3b 100644 } return true; -@@ -2541,7 +2542,7 @@ public class CraftWorld implements World { +@@ -2541,7 +2543,7 @@ public class CraftWorld implements World { } return this.world.getChunkProvider().getChunkAtAsynchronously(x, z, gen, urgent).thenComposeAsync((either) -> { net.minecraft.server.Chunk chunk = (net.minecraft.server.Chunk) either.left().orElse(null); @@ -6922,7 +7018,7 @@ index 65b36a174..b12da9e3b 100644 }, MinecraftServer.getServer()); } diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index bac292e6d..b4e65963e 100644 +index bac292e6d8e6cdb239d8accd21eaa25022f5640f..b4e65963efdf4f192908c8433bdeca7c549708a2 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -138,6 +138,13 @@ public class Main { @@ -6949,7 +7045,7 @@ index bac292e6d..b4e65963e 100644 //Thread.sleep(TimeUnit.SECONDS.toMillis(20)); // Paper End diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java -index 9b0e868f0..ee53060b1 100644 +index 9b0e868f006a34b47ef9a48c7ea844be8122c291..ee53060b112afe0f84c2be41cad2f498e3d410a0 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java @@ -207,7 +207,7 @@ public class CraftBlock implements Block { @@ -6995,7 +7091,7 @@ index 9b0e868f0..ee53060b1 100644 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java -index 11aa2dc18..c51c43573 100644 +index 11aa2dc18c2fa76c66d89f650636eb623662717b..c51c43573faa33ca5a10e76cb0f6aa9bc301f118 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java @@ -136,7 +136,7 @@ public class CraftBlockState implements BlockState { @@ -7008,7 +7104,7 @@ index 11aa2dc18..c51c43573 100644 public void setFlag(int flag) { diff --git a/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java b/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java -index bbded5671..980890153 100644 +index bbded5671e986be34ebe3100e4c10ee0d5741764..980890153294c04502108d6852e347ca8b1ac200 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java +++ b/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java @@ -44,7 +44,7 @@ public class CraftBlockData implements BlockData { @@ -7021,7 +7117,7 @@ index bbded5671..980890153 100644 public IBlockData getState() { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index d1df4e579..6f18a7898 100644 +index d1df4e5799de4bf0a1fcc6940e2498374cd3db9d..6f18a789805163de63561569e84d9fa1b3dabb61 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -495,27 +495,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @@ -7092,7 +7188,7 @@ index d1df4e579..6f18a7898 100644 public boolean teleport(org.bukkit.entity.Entity destination) { return teleport(destination.getLocation()); diff --git a/src/main/java/org/bukkit/craftbukkit/generator/CraftChunkData.java b/src/main/java/org/bukkit/craftbukkit/generator/CraftChunkData.java -index 948a59217..ab43c97e8 100644 +index 948a59217cca0f8dfa9d3befb61e679a67bf29bc..ab43c97e8fdcb977ed6349e4163e8ba115588adf 100644 --- a/src/main/java/org/bukkit/craftbukkit/generator/CraftChunkData.java +++ b/src/main/java/org/bukkit/craftbukkit/generator/CraftChunkData.java @@ -73,7 +73,7 @@ public final class CraftChunkData implements ChunkGenerator.ChunkData { @@ -7105,7 +7201,7 @@ index 948a59217..ab43c97e8 100644 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java -index ca2be3060..2c5701376 100644 +index ca2be30609159e6ca98b363d75cbc3ac550bca31..2c5701376506f07a748e7ac75c6870320585bb4d 100644 --- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java +++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java @@ -100,9 +100,18 @@ public final class CraftScoreboardManager implements ScoreboardManager { @@ -7128,7 +7224,7 @@ index ca2be3060..2c5701376 100644 } } diff --git a/src/main/java/org/bukkit/craftbukkit/util/UnsafeList.java b/src/main/java/org/bukkit/craftbukkit/util/UnsafeList.java -index f72c13bed..50f855b93 100644 +index f72c13bedaa6fa45e26f5dcad564835bdd4af61f..50f855b931dba60754fff9c7cdf5e0e744f00fdd 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/UnsafeList.java +++ b/src/main/java/org/bukkit/craftbukkit/util/UnsafeList.java @@ -119,6 +119,32 @@ public class UnsafeList extends AbstractList implements List, RandomAcc @@ -7165,7 +7261,7 @@ index f72c13bed..50f855b93 100644 public void clear() { // Create new array to reset memory usage to initial capacity diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -index 674096cab..001b1e519 100644 +index 674096cab190d62622f9947853b056f57d43a2a5..001b1e5197eaa51bfff9031aa6c69876c9a47960 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java +++ b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java @@ -11,7 +11,7 @@ public final class Versioning { @@ -7178,7 +7274,7 @@ index 674096cab..001b1e519 100644 if (stream != null) { diff --git a/src/main/java/org/spigotmc/AsyncCatcher.java b/src/main/java/org/spigotmc/AsyncCatcher.java -index 9f7d2ef93..c3ac1a46c 100644 +index 9f7d2ef932ab41cef5d3d0736d20a7c7e4a2c888..c3ac1a46c3e06bfe06ad9ff9f4ec49c055a790b0 100644 --- a/src/main/java/org/spigotmc/AsyncCatcher.java +++ b/src/main/java/org/spigotmc/AsyncCatcher.java @@ -10,7 +10,7 @@ public class AsyncCatcher @@ -7191,7 +7287,7 @@ index 9f7d2ef93..c3ac1a46c 100644 throw new IllegalStateException( "Asynchronous " + reason + "!" ); } diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java -index 513c1041c..4d3109084 100644 +index 513c1041c34ebb3ac1775674a3f4526693759c08..4d310908489953d6d061b2358f614142edacb62e 100644 --- a/src/main/java/org/spigotmc/WatchdogThread.java +++ b/src/main/java/org/spigotmc/WatchdogThread.java @@ -61,6 +61,84 @@ public class WatchdogThread extends Thread diff --git a/patches/server/0013-MoonPhase-API.patch b/patches/server/0013-MoonPhase-API.patch index e5a8f4adb..4e564bc98 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 21bd9f14e..0c721a5fd 100644 +index 39decca9c5..94fad039f1 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2614,4 +2614,11 @@ public class CraftWorld implements World { +@@ -2615,4 +2615,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 c8d14b9fd..d6f0011c7 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 0c721a5fd..a9dfd40f1 100644 +index 94fad039f1..2577a41c92 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2620,5 +2620,10 @@ public class CraftWorld implements World { +@@ -2621,5 +2621,10 @@ public class CraftWorld implements World { public net.pl3x.purpur.MoonPhase getMoonPhase() { return net.pl3x.purpur.MoonPhase.getPhase(getFullTime() / 24000L); }