mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-19 01:17:42 +01:00
Updated Upstream (Paper & Airplane)
Upstream has released updates that appear to apply and compile correctly Paper Changes: 3db3aaf39 [Auto] Updated Upstream (CraftBukkit) c953e51dd [Auto] Updated Upstream (CraftBukkit/Spigot) dc529c7a9 Fix PlayerEditBookEvent (#5463) 3fea87edb [Auto] Updated Upstream (CraftBukkit) a111b1365 Send post ChatEvent messages as MessageType.CHAT d15161114 [Auto] Updated Upstream (Spigot) e8889e96a [Auto] Updated Upstream (CraftBukkit) 3bc888ba6 [Auto] Updated Upstream (CraftBukkit) 211f8e041 Prevent light queue overfill when no players are online Airplane Changes: 3ed988c05 Use AIR library for configuration parsing
This commit is contained in:
@@ -11404,7 +11404,7 @@ index 2f8bca35508640f6b8c312fff17d55f129431599..db8532c42fcb2e96f4b3491352d1b9a2
|
||||
class b extends ChunkMap {
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
|
||||
index e542fe5fb63064e67c7fde8fad614826d6f3344c..cb83f1152c52a99d25e4e80cc8bf18c6793e8b50 100644
|
||||
index c5e54c519e1f686761faa53b5e9579c514a65332..fe040615ff03478a20cdf8376f89a6b7d100ba61 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java
|
||||
@@ -47,6 +47,12 @@ import net.minecraft.world.level.storage.WorldData;
|
||||
@@ -11800,7 +11800,7 @@ index e542fe5fb63064e67c7fde8fad614826d6f3344c..cb83f1152c52a99d25e4e80cc8bf18c6
|
||||
}
|
||||
|
||||
private void a(long i, Consumer<Chunk> consumer) {
|
||||
@@ -1026,51 +1237,19 @@ public class ChunkProviderServer extends IChunkProvider {
|
||||
@@ -1026,44 +1237,12 @@ public class ChunkProviderServer extends IChunkProvider {
|
||||
ChunkProviderServer.this.world.getMethodProfiler().c("runTask");
|
||||
super.executeTask(runnable);
|
||||
}
|
||||
@@ -11848,14 +11848,6 @@ index e542fe5fb63064e67c7fde8fad614826d6f3344c..cb83f1152c52a99d25e4e80cc8bf18c6
|
||||
// CraftBukkit start - process pending Chunk loadCallback() and unloadCallback() after each run task
|
||||
try {
|
||||
boolean execChunkTask = com.destroystokyo.paper.io.chunk.ChunkTaskManager.pollChunkWaitQueue() || ChunkProviderServer.this.world.asyncChunkTaskManager.pollNextChunkTask(); // Paper
|
||||
if (ChunkProviderServer.this.tickDistanceManager()) {
|
||||
return true;
|
||||
} else {
|
||||
- //ChunkProviderServer.this.lightEngine.queueUpdate(); // Paper - not needed
|
||||
+ ChunkProviderServer.this.lightEngine.queueUpdate(); // Paper - not needed // Tuinity - prevent queue overflow when no players are in this world
|
||||
return super.executeNext() || execChunkTask; // Paper
|
||||
}
|
||||
} finally {
|
||||
diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
||||
index 37c9b5fd712e30a9a0faccc840f738f4b2cfc723..59989db6dcf96a8ab5a75775bb588c31cec3418a 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
||||
@@ -12074,7 +12066,7 @@ index 37c9b5fd712e30a9a0faccc840f738f4b2cfc723..59989db6dcf96a8ab5a75775bb588c31
|
||||
public void broadcastCarriedItem() {
|
||||
if (!this.e) {
|
||||
diff --git a/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java
|
||||
index f65eb0168ed365e5c1b490c56ec84e3b7ff87c1d..a1512ee8422fa39a95e4f19c86fe71b77af54ca0 100644
|
||||
index 1df8fb8cb3fcf8201e1c5fa8ca13f7a9c632c379..67ca28463f5add7c18f7f16b918c3f36f8feeeda 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java
|
||||
@@ -103,6 +103,7 @@ public class EntityTrackerEntry {
|
||||
@@ -12085,7 +12077,7 @@ index f65eb0168ed365e5c1b490c56ec84e3b7ff87c1d..a1512ee8422fa39a95e4f19c86fe71b7
|
||||
List<Entity> list = this.tracker.passengers; // Paper - do not copy list
|
||||
|
||||
if (!list.equals(this.p)) {
|
||||
@@ -185,7 +186,7 @@ public class EntityTrackerEntry {
|
||||
@@ -184,7 +185,7 @@ public class EntityTrackerEntry {
|
||||
// Paper end - remove allocation of Vec3D here
|
||||
boolean flag4 = k < -32768L || k > 32767L || l < -32768L || l > 32767L || i1 < -32768L || i1 > 32767L;
|
||||
|
||||
@@ -13680,7 +13672,7 @@ index 3c804c7b20a14ea6e510810e2be10c1cc89ff5c1..3738c51b5e673c439d88a7ef7f4614f3
|
||||
return new TicketType<>(s, comparator, 0L);
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java
|
||||
index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cce5a81529 100644
|
||||
index ef9b08df58d9d28df6b8ade076d95bf7e5cb1b18..46baad407de5598ecb23fcbb9a3fb4ee82addb17 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/WorldServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/WorldServer.java
|
||||
@@ -168,12 +168,13 @@ import org.bukkit.event.server.MapInitializeEvent;
|
||||
@@ -14168,7 +14160,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
// CraftBukkit start
|
||||
@Override
|
||||
public TileEntity getTileEntity(BlockPosition pos, boolean validate) {
|
||||
@@ -432,6 +880,14 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -434,6 +882,14 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
|
||||
public void doTick(BooleanSupplier booleansupplier) {
|
||||
GameProfilerFiller gameprofilerfiller = this.getMethodProfiler();
|
||||
@@ -14183,7 +14175,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
|
||||
this.ticking = true;
|
||||
gameprofilerfiller.enter("world border");
|
||||
@@ -581,7 +1037,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -583,7 +1039,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
}
|
||||
timings.scheduledBlocks.stopTiming(); // Paper
|
||||
|
||||
@@ -14192,7 +14184,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
gameprofilerfiller.exitEnter("raid");
|
||||
this.timings.raids.startTiming(); // Paper - timings
|
||||
this.persistentRaid.a();
|
||||
@@ -590,7 +1046,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -592,7 +1048,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
timings.doSounds.startTiming(); // Spigot
|
||||
this.ak();
|
||||
timings.doSounds.stopTiming(); // Spigot
|
||||
@@ -14201,7 +14193,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
this.ticking = false;
|
||||
gameprofilerfiller.exitEnter("entities");
|
||||
boolean flag3 = true || !this.players.isEmpty() || !this.getForceLoadedChunks().isEmpty(); // CraftBukkit - this prevents entity cleanup, other issues on servers with no players
|
||||
@@ -606,13 +1062,12 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -608,13 +1064,12 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
}
|
||||
|
||||
this.tickingEntities = true;
|
||||
@@ -14217,7 +14209,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
Entity entity1 = entity.getVehicle();
|
||||
|
||||
/* CraftBukkit start - We prevent spawning in general, so this butchering is not needed
|
||||
@@ -628,6 +1083,15 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -630,6 +1085,15 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
gameprofilerfiller.enter("checkDespawn");
|
||||
if (!entity.dead) {
|
||||
entity.checkDespawn();
|
||||
@@ -14233,7 +14225,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
}
|
||||
|
||||
gameprofilerfiller.exit();
|
||||
@@ -648,14 +1112,22 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -650,14 +1114,22 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
gameprofilerfiller.enter("remove");
|
||||
if (entity.dead) {
|
||||
this.removeEntityFromChunk(entity);
|
||||
@@ -14257,7 +14249,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
this.tickingEntities = false;
|
||||
// Paper start
|
||||
for (java.lang.Runnable run : this.afterEntityTickingTasks) {
|
||||
@@ -667,7 +1139,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -669,7 +1141,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
}
|
||||
this.afterEntityTickingTasks.clear();
|
||||
// Paper end
|
||||
@@ -14266,7 +14258,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
|
||||
Entity entity2;
|
||||
|
||||
@@ -677,7 +1149,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -679,7 +1151,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
}
|
||||
|
||||
timings.tickEntities.stopTiming(); // Spigot
|
||||
@@ -14275,7 +14267,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
this.tickBlockEntities();
|
||||
}
|
||||
|
||||
@@ -724,6 +1196,9 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -726,6 +1198,9 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
private final BlockPosition.MutableBlockPosition chunkTickMutablePosition = new BlockPosition.MutableBlockPosition();
|
||||
private final com.destroystokyo.paper.util.math.ThreadUnsafeRandom randomTickRandom = new com.destroystokyo.paper.util.math.ThreadUnsafeRandom();
|
||||
// Paper end
|
||||
@@ -14285,7 +14277,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
|
||||
public void a(Chunk chunk, int i) { final int randomTickSpeed = i; // Paper
|
||||
ChunkCoordIntPair chunkcoordintpair = chunk.getPos();
|
||||
@@ -761,28 +1236,32 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -763,28 +1238,32 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
gameprofilerfiller.exitEnter("iceandsnow");
|
||||
if (!this.paperConfig.disableIceAndSnow && this.randomTickRandom.nextInt(16) == 0) { // Paper - Disable ice and snow // Paper - optimise random ticking
|
||||
// Paper start - optimise chunk ticking
|
||||
@@ -14322,16 +14314,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
chunk.getType(blockposition).getBlock().c((World) this, blockposition);
|
||||
// Paper end
|
||||
}
|
||||
@@ -828,7 +1307,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
}
|
||||
gameprofilerfiller.exit();
|
||||
timings.chunkTicksBlocks.stopTiming(); // Paper
|
||||
- getChunkProvider().getLightEngine().queueUpdate(); // Paper
|
||||
+ //getChunkProvider().getLightEngine().queueUpdate(); // Paper // Tuinity - no longer needed here, moved into task execution
|
||||
// Paper end
|
||||
}
|
||||
}
|
||||
@@ -923,7 +1402,26 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -924,7 +1403,26 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
|
||||
}
|
||||
|
||||
@@ -14358,7 +14341,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
if (!(entity instanceof EntityHuman) && !this.getChunkProvider().a(entity)) {
|
||||
this.chunkCheck(entity);
|
||||
} else {
|
||||
@@ -976,6 +1474,13 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -977,6 +1475,13 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
//} finally { timer.stopTiming(); } // Paper - timings - move up
|
||||
|
||||
}
|
||||
@@ -14372,7 +14355,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
}
|
||||
|
||||
public void a(Entity entity, Entity entity1) {
|
||||
@@ -1034,6 +1539,12 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -1035,6 +1540,12 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
int i = MathHelper.floor(entity.locX() / 16.0D);
|
||||
int j = Math.min(15, Math.max(0, MathHelper.floor(entity.locY() / 16.0D))); // Paper - stay consistent with chunk add/remove behavior
|
||||
int k = MathHelper.floor(entity.locZ() / 16.0D);
|
||||
@@ -14385,7 +14368,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
|
||||
if (!entity.inChunk || entity.chunkX != i || entity.chunkY != j || entity.chunkZ != k) {
|
||||
// Paper start - remove entity if its in a chunk more correctly.
|
||||
@@ -1043,6 +1554,12 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -1044,6 +1555,12 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
}
|
||||
// Paper end
|
||||
|
||||
@@ -14398,7 +14381,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
if (entity.inChunk && this.isChunkLoaded(entity.chunkX, entity.chunkZ)) {
|
||||
this.getChunkAt(entity.chunkX, entity.chunkZ).a(entity, entity.chunkY);
|
||||
}
|
||||
@@ -1054,8 +1571,41 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -1055,8 +1572,41 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
|
||||
entity.inChunk = false;
|
||||
} else {
|
||||
@@ -14441,7 +14424,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
}
|
||||
|
||||
this.getMethodProfiler().exit();
|
||||
@@ -1392,10 +1942,14 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -1393,10 +1943,14 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
// Spigot Start
|
||||
for (TileEntity tileentity : chunk.getTileEntities().values()) {
|
||||
if (tileentity instanceof net.minecraft.world.IInventory) {
|
||||
@@ -14457,7 +14440,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
}
|
||||
// Spigot End
|
||||
this.tileEntityListUnload.addAll(chunk.getTileEntities().values());
|
||||
@@ -1411,7 +1965,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -1412,7 +1966,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
Entity entity = (Entity) iterator.next();
|
||||
|
||||
if (!(entity instanceof EntityPlayer)) {
|
||||
@@ -14466,7 +14449,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
throw (IllegalStateException) SystemUtils.c((Throwable) (new IllegalStateException("Removing entity while ticking!")));
|
||||
}
|
||||
|
||||
@@ -1439,6 +1993,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -1440,6 +1994,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
|
||||
public void unregisterEntity(Entity entity) {
|
||||
org.spigotmc.AsyncCatcher.catchOp("entity unregister"); // Spigot
|
||||
@@ -14474,7 +14457,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
// Paper start - fix entity registration issues
|
||||
if (entity instanceof EntityComplexPart) {
|
||||
// Usually this is a no-op for complex parts, and ID's should be removed, but go ahead and remove it anyways
|
||||
@@ -1505,17 +2060,76 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -1506,17 +2061,76 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
this.getScoreboard().a(entity);
|
||||
// CraftBukkit start - SPIGOT-5278
|
||||
if (entity instanceof EntityDrowned) {
|
||||
@@ -14554,7 +14537,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
private void registerEntity(Entity entity) {
|
||||
org.spigotmc.AsyncCatcher.catchOp("entity register"); // Spigot
|
||||
// Paper start - don't double enqueue entity registration
|
||||
@@ -1526,7 +2140,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -1527,7 +2141,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
return;
|
||||
}
|
||||
// Paper end
|
||||
@@ -14563,7 +14546,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
if (!entity.isQueuedForRegister) { // Paper
|
||||
this.entitiesToAdd.add(entity);
|
||||
entity.isQueuedForRegister = true; // Paper
|
||||
@@ -1534,6 +2148,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -1535,6 +2149,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
} else {
|
||||
entity.isQueuedForRegister = false; // Paper
|
||||
this.entitiesById.put(entity.getId(), entity);
|
||||
@@ -14571,7 +14554,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
if (entity instanceof EntityEnderDragon) {
|
||||
EntityComplexPart[] aentitycomplexpart = ((EntityEnderDragon) entity).eJ();
|
||||
int i = aentitycomplexpart.length;
|
||||
@@ -1542,6 +2157,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -1543,6 +2158,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
EntityComplexPart entitycomplexpart = aentitycomplexpart[j];
|
||||
|
||||
this.entitiesById.put(entitycomplexpart.getId(), entitycomplexpart);
|
||||
@@ -14579,7 +14562,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1566,12 +2182,16 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -1567,12 +2183,16 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
// this.getChunkProvider().addEntity(entity); // Paper - moved down below valid=true
|
||||
// CraftBukkit start - SPIGOT-5278
|
||||
if (entity instanceof EntityDrowned) {
|
||||
@@ -14599,7 +14582,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
}
|
||||
entity.valid = true; // CraftBukkit
|
||||
this.getChunkProvider().addEntity(entity); // Paper - from above to be below valid=true
|
||||
@@ -1587,7 +2207,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -1588,7 +2208,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
}
|
||||
|
||||
public void removeEntity(Entity entity) {
|
||||
@@ -14608,7 +14591,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
throw (IllegalStateException) SystemUtils.c((Throwable) (new IllegalStateException("Removing entity while ticking!")));
|
||||
} else {
|
||||
this.removeEntityFromChunk(entity);
|
||||
@@ -1683,20 +2303,33 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -1684,20 +2304,33 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
|
||||
@Override
|
||||
public void notify(BlockPosition blockposition, IBlockData iblockdata, IBlockData iblockdata1, int i) {
|
||||
@@ -14644,7 +14627,7 @@ index 0a698a5a4a6502a488c9afb0ad97165e60030896..46f960b9276dced41deb8f741454b6cc
|
||||
} catch (java.util.ConcurrentModificationException ex) {
|
||||
// This can happen because the pathfinder update below may trigger a chunk load, which in turn may cause more navigators to register
|
||||
// In this case we just run the update again across all the iterators as the chunk will then be loaded
|
||||
@@ -1710,6 +2343,9 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
@@ -1711,6 +2344,9 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
||||
navigationabstract.b(blockposition);
|
||||
}
|
||||
}
|
||||
@@ -14668,7 +14651,7 @@ index 185667110cd6f566b23546728d20fc79223f3c92..dc98ef48a664d9ee2a302fff8c611fd1
|
||||
throw new IllegalStateException("Protocol error", cryptographyexception);
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||
index 4a3f6f26da0d99ee2ff6942c2ff7d0595b53b684..a5871955d487dbf6552d20e5559f2cb1427aeb3e 100644
|
||||
index e6ea84ba098b4d77bc68e99862992a10ef4585b5..40a7f69e5e14078977ef615abf3a0f1f61d76f9f 100644
|
||||
--- a/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
||||
@@ -568,7 +568,9 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -14915,10 +14898,10 @@ index 2df8e914f66176e22aeddf8b94a83af5ea921d88..499b516330f3f3a48fb64802f2e8c1b7
|
||||
return;
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/players/UserCache.java b/src/main/java/net/minecraft/server/players/UserCache.java
|
||||
index 74b024a51f6c3ee88db730cbf97a24af66fa332b..66eee0998be2210042db8e6b537fa10a016a9c8a 100644
|
||||
index e813d4dd1a46734d16b42905808caa889811afcc..ee5c038c4ede294ec5b9b9b9f705ba46b6c7ac8c 100644
|
||||
--- a/src/main/java/net/minecraft/server/players/UserCache.java
|
||||
+++ b/src/main/java/net/minecraft/server/players/UserCache.java
|
||||
@@ -51,6 +51,11 @@ public class UserCache {
|
||||
@@ -52,6 +52,11 @@ public class UserCache {
|
||||
private final File g;
|
||||
private final AtomicLong h = new AtomicLong();
|
||||
|
||||
@@ -14930,7 +14913,7 @@ index 74b024a51f6c3ee88db730cbf97a24af66fa332b..66eee0998be2210042db8e6b537fa10a
|
||||
public UserCache(GameProfileRepository gameprofilerepository, File file) {
|
||||
this.e = gameprofilerepository;
|
||||
this.g = file;
|
||||
@@ -58,6 +63,7 @@ public class UserCache {
|
||||
@@ -59,6 +64,7 @@ public class UserCache {
|
||||
}
|
||||
|
||||
private void a(UserCache.UserCacheEntry usercache_usercacheentry) {
|
||||
@@ -14938,7 +14921,7 @@ index 74b024a51f6c3ee88db730cbf97a24af66fa332b..66eee0998be2210042db8e6b537fa10a
|
||||
GameProfile gameprofile = usercache_usercacheentry.a();
|
||||
|
||||
usercache_usercacheentry.a(this.d());
|
||||
@@ -72,6 +78,7 @@ public class UserCache {
|
||||
@@ -73,6 +79,7 @@ public class UserCache {
|
||||
if (uuid != null) {
|
||||
this.d.put(uuid, usercache_usercacheentry);
|
||||
}
|
||||
@@ -14946,7 +14929,7 @@ index 74b024a51f6c3ee88db730cbf97a24af66fa332b..66eee0998be2210042db8e6b537fa10a
|
||||
|
||||
}
|
||||
|
||||
@@ -109,7 +116,7 @@ public class UserCache {
|
||||
@@ -110,7 +117,7 @@ public class UserCache {
|
||||
}
|
||||
|
||||
public void saveProfile(GameProfile gameprofile) { a(gameprofile); } // Paper - OBFHELPER
|
||||
@@ -14955,7 +14938,7 @@ index 74b024a51f6c3ee88db730cbf97a24af66fa332b..66eee0998be2210042db8e6b537fa10a
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
|
||||
calendar.setTime(new Date());
|
||||
@@ -126,8 +133,9 @@ public class UserCache {
|
||||
@@ -127,8 +134,9 @@ public class UserCache {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -14966,7 +14949,7 @@ index 74b024a51f6c3ee88db730cbf97a24af66fa332b..66eee0998be2210042db8e6b537fa10a
|
||||
UserCache.UserCacheEntry usercache_usercacheentry = (UserCache.UserCacheEntry) this.c.get(s1);
|
||||
boolean flag = false;
|
||||
|
||||
@@ -141,10 +149,14 @@ public class UserCache {
|
||||
@@ -142,10 +150,14 @@ public class UserCache {
|
||||
GameProfile gameprofile;
|
||||
|
||||
if (usercache_usercacheentry != null) {
|
||||
@@ -14981,7 +14964,7 @@ index 74b024a51f6c3ee88db730cbf97a24af66fa332b..66eee0998be2210042db8e6b537fa10a
|
||||
if (gameprofile != null) {
|
||||
this.a(gameprofile);
|
||||
flag = false;
|
||||
@@ -156,6 +168,7 @@ public class UserCache {
|
||||
@@ -157,6 +169,7 @@ public class UserCache {
|
||||
}
|
||||
|
||||
return gameprofile;
|
||||
@@ -14989,7 +14972,7 @@ index 74b024a51f6c3ee88db730cbf97a24af66fa332b..66eee0998be2210042db8e6b537fa10a
|
||||
}
|
||||
|
||||
// Paper start
|
||||
@@ -290,7 +303,9 @@ public class UserCache {
|
||||
@@ -291,7 +304,9 @@ public class UserCache {
|
||||
}
|
||||
|
||||
private Stream<UserCache.UserCacheEntry> a(int i) {
|
||||
@@ -15490,7 +15473,7 @@ index 85f571a791bce63989890f277857bc7bdeec0cb5..9e4137768c7d8966759324a4b368330c
|
||||
double deltaZ = this.locZ() - player.locZ();
|
||||
double distanceSquared = deltaX * deltaX + deltaZ * deltaZ;
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java
|
||||
index b0ee9e98d5f1e56c8d82e90dd7761c8ef79cfb1c..561905be42428855a07a2e63aca80d5dd63b22bf 100644
|
||||
index 21341eeb8148be119fbc1dd370c1beaf70a319e0..d933323d57a2a7ff283408f12d4650699f8177e7 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java
|
||||
@@ -2973,7 +2973,11 @@ public abstract class EntityLiving extends Entity {
|
||||
@@ -16914,10 +16897,10 @@ index 24771c3522ea74ac12058591137eafc21adf3762..d497006f05f79015cd791849888832bb
|
||||
} else if (worldserver.getSpawn().a((IPosition) (new Vec3D((double) blockposition_mutableblockposition.getX() + 0.5D, (double) blockposition_mutableblockposition.getY(), (double) blockposition_mutableblockposition.getZ() + 0.5D)), 24.0D)) {
|
||||
return false;
|
||||
diff --git a/src/main/java/net/minecraft/world/level/StructureManager.java b/src/main/java/net/minecraft/world/level/StructureManager.java
|
||||
index 1077f988e16688f74c9e40d6da517c954cb06ecb..acacbf9617f99b97fc7fd2ba718775e1b3e429e9 100644
|
||||
index 07dcfd56af1014ad159828dd9ee2d89c2010b9f4..43418273f00f3703c7bd86586847d469af92c18f 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/StructureManager.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/StructureManager.java
|
||||
@@ -45,8 +45,13 @@ public class StructureManager {
|
||||
@@ -46,8 +46,13 @@ public class StructureManager {
|
||||
|
||||
// Paper start - remove structure streams
|
||||
public java.util.List<StructureStart<?>> getFeatureStarts(SectionPosition sectionPosition, StructureGenerator<?> structureGenerator) {
|
||||
@@ -16932,7 +16915,7 @@ index 1077f988e16688f74c9e40d6da517c954cb06ecb..acacbf9617f99b97fc7fd2ba718775e1
|
||||
SectionPosition sectionPosition1 = SectionPosition.a(new ChunkCoordIntPair(curLong), 0);
|
||||
StructureStart<?> structurestart = a(sectionPosition1, structureGenerator, getLevel().getChunkAt(sectionPosition1.a(), sectionPosition1.c(), ChunkStatus.STRUCTURE_STARTS));
|
||||
if (structurestart != null && structurestart.e()) {
|
||||
@@ -75,8 +80,12 @@ public class StructureManager {
|
||||
@@ -76,8 +81,12 @@ public class StructureManager {
|
||||
}
|
||||
|
||||
public StructureStart<?> a(BlockPosition blockposition, boolean flag, StructureGenerator<?> structuregenerator) {
|
||||
@@ -17340,10 +17323,10 @@ index 15096a9c2719b8b4c099f62d0a1c808e56b63a8e..9bbd175f7e20591bbefdbddcb5e998e7
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBase.java b/src/main/java/net/minecraft/world/level/block/state/BlockBase.java
|
||||
index ac3709c8158d42ccafd457cfa44a16dc8c9eb949..0b852fa247c65cb1e889ad4e55886e256f89a763 100644
|
||||
index 3fdafc0ff0c4148ec844dbdc1455d17cdcb4a75a..6124b56d935386784371422960a07d518f848cf3 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/block/state/BlockBase.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/block/state/BlockBase.java
|
||||
@@ -347,21 +347,23 @@ public abstract class BlockBase {
|
||||
@@ -348,21 +348,23 @@ public abstract class BlockBase {
|
||||
|
||||
public abstract static class BlockData extends IBlockDataHolder<Block, IBlockData> {
|
||||
|
||||
@@ -17371,7 +17354,7 @@ index ac3709c8158d42ccafd457cfa44a16dc8c9eb949..0b852fa247c65cb1e889ad4e55886e25
|
||||
|
||||
protected BlockData(Block block, ImmutableMap<IBlockState<?>, Comparable<?>> immutablemap, MapCodec<IBlockData> mapcodec) {
|
||||
super(block, immutablemap, mapcodec);
|
||||
@@ -380,6 +382,7 @@ public abstract class BlockBase {
|
||||
@@ -381,6 +383,7 @@ public abstract class BlockBase {
|
||||
this.n = blockbase_info.s;
|
||||
this.o = blockbase_info.t;
|
||||
this.p = blockbase_info.u;
|
||||
@@ -17379,7 +17362,7 @@ index ac3709c8158d42ccafd457cfa44a16dc8c9eb949..0b852fa247c65cb1e889ad4e55886e25
|
||||
}
|
||||
// Paper start - impl cached craft block data, lazy load to fix issue with loading at the wrong time
|
||||
private org.bukkit.craftbukkit.block.data.CraftBlockData cachedCraftBlockData;
|
||||
@@ -395,12 +398,63 @@ public abstract class BlockBase {
|
||||
@@ -396,12 +399,63 @@ public abstract class BlockBase {
|
||||
protected Fluid fluid;
|
||||
// Paper end
|
||||
|
||||
@@ -17443,7 +17426,7 @@ index ac3709c8158d42ccafd457cfa44a16dc8c9eb949..0b852fa247c65cb1e889ad4e55886e25
|
||||
|
||||
}
|
||||
|
||||
@@ -424,10 +478,12 @@ public abstract class BlockBase {
|
||||
@@ -425,10 +479,12 @@ public abstract class BlockBase {
|
||||
return this.a != null ? this.a.g : this.getBlock().b(this.p(), iblockaccess, blockposition);
|
||||
}
|
||||
|
||||
@@ -17456,7 +17439,7 @@ index ac3709c8158d42ccafd457cfa44a16dc8c9eb949..0b852fa247c65cb1e889ad4e55886e25
|
||||
public VoxelShape a(IBlockAccess iblockaccess, BlockPosition blockposition, EnumDirection enumdirection) {
|
||||
return this.a != null && this.a.i != null ? this.a.i[enumdirection.ordinal()] : VoxelShapes.a(this.c(iblockaccess, blockposition), enumdirection);
|
||||
}
|
||||
@@ -437,7 +493,7 @@ public abstract class BlockBase {
|
||||
@@ -438,7 +494,7 @@ public abstract class BlockBase {
|
||||
}
|
||||
|
||||
public final boolean d() { // Paper
|
||||
@@ -17465,7 +17448,7 @@ index ac3709c8158d42ccafd457cfa44a16dc8c9eb949..0b852fa247c65cb1e889ad4e55886e25
|
||||
}
|
||||
|
||||
public final boolean e() { // Paper
|
||||
@@ -727,9 +783,9 @@ public abstract class BlockBase {
|
||||
@@ -728,9 +784,9 @@ public abstract class BlockBase {
|
||||
private static final int f = EnumBlockSupport.values().length;
|
||||
protected final boolean a;
|
||||
private final boolean g;
|
||||
@@ -18267,10 +18250,10 @@ index 43b8361e8ad0a8c429406cb6ff538020f670bdbd..bb63ed58e1eaeb474e99992e39d811b2
|
||||
|
||||
IBlockAccess getWorld();
|
||||
diff --git a/src/main/java/net/minecraft/world/level/chunk/NibbleArray.java b/src/main/java/net/minecraft/world/level/chunk/NibbleArray.java
|
||||
index 3a85a89be2a736e5b6b7f08032f4becd6bb39ed1..d32369d9a555fd7595df175e56f853ce8b012522 100644
|
||||
index 0fec15e141051863dbf51a2b3e1ace5028cd2fc1..d7757e60402be9939fc2d90ad79b2bb76c5249ca 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/chunk/NibbleArray.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/chunk/NibbleArray.java
|
||||
@@ -58,6 +58,7 @@ public class NibbleArray {
|
||||
@@ -59,6 +59,7 @@ public class NibbleArray {
|
||||
boolean poolSafe = false;
|
||||
public java.lang.Runnable cleaner;
|
||||
private void registerCleaner() {
|
||||
@@ -18278,7 +18261,7 @@ index 3a85a89be2a736e5b6b7f08032f4becd6bb39ed1..d32369d9a555fd7595df175e56f853ce
|
||||
if (!poolSafe) {
|
||||
cleaner = MCUtil.registerCleaner(this, this.a, NibbleArray::releaseBytes);
|
||||
} else {
|
||||
@@ -65,7 +66,7 @@ public class NibbleArray {
|
||||
@@ -66,7 +67,7 @@ public class NibbleArray {
|
||||
}
|
||||
}
|
||||
// Paper end
|
||||
@@ -18287,7 +18270,7 @@ index 3a85a89be2a736e5b6b7f08032f4becd6bb39ed1..d32369d9a555fd7595df175e56f853ce
|
||||
|
||||
|
||||
public NibbleArray() {}
|
||||
@@ -76,7 +77,7 @@ public class NibbleArray {
|
||||
@@ -77,7 +78,7 @@ public class NibbleArray {
|
||||
}
|
||||
public NibbleArray(byte[] abyte, boolean isSafe) {
|
||||
this.a = abyte;
|
||||
@@ -18296,7 +18279,7 @@ index 3a85a89be2a736e5b6b7f08032f4becd6bb39ed1..d32369d9a555fd7595df175e56f853ce
|
||||
registerCleaner();
|
||||
// Paper end
|
||||
if (abyte.length != 2048) {
|
||||
@@ -164,7 +165,7 @@ public class NibbleArray {
|
||||
@@ -165,7 +166,7 @@ public class NibbleArray {
|
||||
|
||||
public NibbleArray copy() { return this.b(); } // Paper - OBFHELPER
|
||||
public NibbleArray b() {
|
||||
@@ -18645,10 +18628,10 @@ index 890362d28ab9cb760c73fe5014e144fb08ada6b8..3c532d3996dfc734ec07181701280b60
|
||||
// Paper - nuke IOWorker
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java
|
||||
index 4999ba61fb04713ffe3d23c556f732dc4abbf0bc..0bba434d29b09d7d164f5ca4f49cd660bec66927 100644
|
||||
index 1b0535ba211904b2384cc80c02c21ed1a606e752..7cdac33e153ccba0a7e8b5aa8fbcbb58ade6a9d2 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java
|
||||
@@ -5,6 +5,7 @@ import java.io.BufferedInputStream;
|
||||
@@ -6,6 +6,7 @@ import java.io.BufferedInputStream;
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
@@ -18656,7 +18639,7 @@ index 4999ba61fb04713ffe3d23c556f732dc4abbf0bc..0bba434d29b09d7d164f5ca4f49cd660
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.File;
|
||||
@@ -35,15 +36,350 @@ public class RegionFile implements AutoCloseable {
|
||||
@@ -36,15 +37,350 @@ public class RegionFile implements AutoCloseable {
|
||||
private static final Logger LOGGER = LogManager.getLogger();
|
||||
private static final ByteBuffer c = ByteBuffer.allocateDirect(1);
|
||||
private final FileChannel dataFile;
|
||||
@@ -19011,7 +18994,7 @@ index 4999ba61fb04713ffe3d23c556f732dc4abbf0bc..0bba434d29b09d7d164f5ca4f49cd660
|
||||
public final java.util.concurrent.locks.ReentrantLock fileLock = new java.util.concurrent.locks.ReentrantLock(true); // Paper
|
||||
|
||||
// Paper start - Cache chunk status
|
||||
@@ -71,10 +407,21 @@ public class RegionFile implements AutoCloseable {
|
||||
@@ -72,10 +408,21 @@ public class RegionFile implements AutoCloseable {
|
||||
// Paper end
|
||||
|
||||
public RegionFile(File file, File file1, boolean flag) throws IOException {
|
||||
@@ -19033,7 +19016,7 @@ index 4999ba61fb04713ffe3d23c556f732dc4abbf0bc..0bba434d29b09d7d164f5ca4f49cd660
|
||||
this.g = ByteBuffer.allocateDirect(8192);
|
||||
this.file = path.toFile(); // Paper
|
||||
initOversizedState(); // Paper
|
||||
@@ -103,14 +450,16 @@ public class RegionFile implements AutoCloseable {
|
||||
@@ -104,14 +451,16 @@ public class RegionFile implements AutoCloseable {
|
||||
RegionFile.LOGGER.warn("Region file {} has truncated header: {}", path, i);
|
||||
}
|
||||
|
||||
@@ -19054,7 +19037,7 @@ index 4999ba61fb04713ffe3d23c556f732dc4abbf0bc..0bba434d29b09d7d164f5ca4f49cd660
|
||||
// Spigot start
|
||||
if (j1 == 255) {
|
||||
// We're maxed out, so we need to read the proper length from the section
|
||||
@@ -118,33 +467,105 @@ public class RegionFile implements AutoCloseable {
|
||||
@@ -119,33 +468,105 @@ public class RegionFile implements AutoCloseable {
|
||||
this.dataFile.read(realLen, i1 * 4096);
|
||||
j1 = (realLen.getInt(0) + 4) / 4096 + 1;
|
||||
}
|
||||
@@ -19166,8 +19149,8 @@ index 4999ba61fb04713ffe3d23c556f732dc4abbf0bc..0bba434d29b09d7d164f5ca4f49cd660
|
||||
@Nullable public synchronized DataInputStream getReadStream(ChunkCoordIntPair chunkCoordIntPair) throws IOException { return a(chunkCoordIntPair);} // Paper - OBFHELPER
|
||||
@Nullable
|
||||
public synchronized DataInputStream a(ChunkCoordIntPair chunkcoordintpair) throws IOException {
|
||||
@@ -169,6 +590,12 @@ public class RegionFile implements AutoCloseable {
|
||||
((java.nio.Buffer) bytebuffer).flip();
|
||||
@@ -170,6 +591,12 @@ public class RegionFile implements AutoCloseable {
|
||||
((java.nio.Buffer) bytebuffer).flip(); // CraftBukkit - decompile error
|
||||
if (bytebuffer.remaining() < 5) {
|
||||
RegionFile.LOGGER.error("Chunk {} header is truncated: expected {} but read {}", chunkcoordintpair, l, bytebuffer.remaining());
|
||||
+ // Tuinity start - recalculate header on regionfile corruption
|
||||
@@ -19179,7 +19162,7 @@ index 4999ba61fb04713ffe3d23c556f732dc4abbf0bc..0bba434d29b09d7d164f5ca4f49cd660
|
||||
return null;
|
||||
} else {
|
||||
int i1 = bytebuffer.getInt();
|
||||
@@ -176,6 +603,12 @@ public class RegionFile implements AutoCloseable {
|
||||
@@ -177,6 +604,12 @@ public class RegionFile implements AutoCloseable {
|
||||
|
||||
if (i1 == 0) {
|
||||
RegionFile.LOGGER.warn("Chunk {} is allocated, but stream is missing", chunkcoordintpair);
|
||||
@@ -19192,7 +19175,7 @@ index 4999ba61fb04713ffe3d23c556f732dc4abbf0bc..0bba434d29b09d7d164f5ca4f49cd660
|
||||
return null;
|
||||
} else {
|
||||
int j1 = i1 - 1;
|
||||
@@ -183,17 +616,49 @@ public class RegionFile implements AutoCloseable {
|
||||
@@ -184,17 +617,49 @@ public class RegionFile implements AutoCloseable {
|
||||
if (a(b0)) {
|
||||
if (j1 != 0) {
|
||||
RegionFile.LOGGER.warn("Chunk has both internal and external streams");
|
||||
@@ -19244,7 +19227,7 @@ index 4999ba61fb04713ffe3d23c556f732dc4abbf0bc..0bba434d29b09d7d164f5ca4f49cd660
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -353,10 +818,15 @@ public class RegionFile implements AutoCloseable {
|
||||
@@ -354,10 +819,15 @@ public class RegionFile implements AutoCloseable {
|
||||
}
|
||||
|
||||
private ByteBuffer b() {
|
||||
@@ -19258,16 +19241,16 @@ index 4999ba61fb04713ffe3d23c556f732dc4abbf0bc..0bba434d29b09d7d164f5ca4f49cd660
|
||||
bytebuffer.putInt(1);
|
||||
- bytebuffer.put((byte) (this.f.a() | 128));
|
||||
+ bytebuffer.put((byte) (compressionType.compressionTypeId() | 128)); // Tuinity - replace with compressionType
|
||||
((java.nio.Buffer) bytebuffer).flip();
|
||||
((java.nio.Buffer) bytebuffer).flip(); // CraftBukkit - decompile error
|
||||
return bytebuffer;
|
||||
}
|
||||
@@ -393,6 +863,7 @@ public class RegionFile implements AutoCloseable {
|
||||
@@ -394,6 +864,7 @@ public class RegionFile implements AutoCloseable {
|
||||
};
|
||||
}
|
||||
|
||||
+ private final void flushHeader() throws IOException { this.b(); } // Tuinity - OBFHELPER
|
||||
+ private final void flushHeader() throws IOException { this.c(); } // Tuinity - OBFHELPER
|
||||
private void c() throws IOException {
|
||||
((java.nio.Buffer) this.g).position(0);
|
||||
((java.nio.Buffer) this.g).position(0); // CraftBukkit - decompile error
|
||||
this.dataFile.write(this.g, 0L);
|
||||
diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileBitSet.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileBitSet.java
|
||||
index c96eac4b0b519b2807153fa5a8ebf5a020a2b140..b5c8d9b17c2d5e229db5b48448709194d1fc04f8 100644
|
||||
|
||||
Reference in New Issue
Block a user