Updated Upstream (Tuinity)

Upstream has released updates that appears to apply and compile correctly

    Tuinity Changes:
    8750b61 Fix entity count in timings and add water-ambient to per world spawn limits
    2d9c2c8 Improve concurrent UserCache access
This commit is contained in:
William Blake Galbreath
2020-07-11 10:45:04 -05:00
parent c4f05ee8cb
commit fb64f9a068
4 changed files with 197 additions and 101 deletions

View File

@@ -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
</configuration>
<executions>
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<T> extends TickListServer<T> { // 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<BaseBlockPosition> {
@@ -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<Entry<ArraySetSorted<Ticket<?>>>> 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<T> implements DataPaletteExpandable<T> {
@@ -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<FluidType, Fluid> {
@@ -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<M extends LightEngineStorageArray<M>> 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<TickTas
@@ -3369,7 +3371,7 @@ index 26f230a80..eb71fa6e3 100644
public CrashReport b(CrashReport crashreport) {
diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
index d5cc2af83..327bb3e74 100644
index d5cc2af83a1c08db969bfb8a832e450a71dd845e..327bb3e74421fe34479c724bb5307e65421ad13b 100644
--- a/src/main/java/net/minecraft/server/NetworkManager.java
+++ b/src/main/java/net/minecraft/server/NetworkManager.java
@@ -71,6 +71,39 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet<?>> {
@@ -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<PacketListenerPlayOut> {
@@ -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<T> {
@@ -5048,7 +5050,7 @@ index 5c789b25f..4657b05a4 100644
public static <T> TicketType<T> a(String s, Comparator<T> 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<List<UserCache.UserCacheEntry>> i = new TypeToken<List<UserCache.UserCacheEntry>>() {
};
+ // 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<UserCache.UserCacheEntry> a(int i) {
+ try { this.stateLock.lock(); // Tuinity - allow better concurrency
List<UserCache.UserCacheEntry> list = Lists.newArrayList();
List<GameProfile> 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<VillagePlaceSection> {
@@ -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<AxisAlignedBB> 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<Entity> 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<E> extends AbstractList<E> implements List<E>, 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