mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-19 01:17:42 +01:00
Updated Upstream (Paper, Tuinity, & Airplane)
Upstream has released updates that appear to apply and compile correctly Paper Changes: 3dcbdc73b Fix force upgrade patch (#5699) dab6ec6cd List all missing hard depends not just first (#5673) aed5031e3 Fix/Optimize world and light datafixes (#5693) 719040d92 [Auto] Updated Upstream (CraftBukkit) 6c183f1ae [Auto] Updated Upstream (CraftBukkit) Tuinity Changes: f88659c8e Fix and optimise world force upgrading Airplane Changes: 7f3b09178 Move check 040fa19eb Better checking for useless move packets 5fab6a257 Improvements to fluid & profiler patches 046ae543c Improve hopper performance via bitset 4a221843f Update Upstream (Tuinity)
This commit is contained in:
@@ -10935,7 +10935,7 @@ index 1d72af9cace7aa8f1d20c7c1c5be621f533e2dad..b7399d17dd64ca8b1f1fab405cb0ac91
|
||||
worldData.addProperty("keep-spawn-loaded-range", world.paperConfig.keepLoadedRange);
|
||||
worldData.addProperty("visible-chunk-count", visibleChunks.size());
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index d69ddb0236c8553cf63c4a007dfa7b87e8f58299..38547858a415ac36d6c04070d27933a6552b1612 100644
|
||||
index 848219f43b2bcb2d79147107c68df52efd46d461..72d1c1202581abc284848000663ada5514cfcb15 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -268,6 +268,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
@@ -10946,7 +10946,7 @@ index d69ddb0236c8553cf63c4a007dfa7b87e8f58299..38547858a415ac36d6c04070d27933a6
|
||||
public java.util.Queue<Runnable> processQueue = new java.util.concurrent.ConcurrentLinkedQueue<Runnable>();
|
||||
public int autosavePeriod;
|
||||
public boolean serverAutoSave = false; // Paper
|
||||
@@ -878,10 +879,11 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
@@ -880,10 +881,11 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
org.spigotmc.WatchdogThread.doStop(); // Paper
|
||||
if (!isMainThread()) {
|
||||
MinecraftServer.LOGGER.info("Stopping main thread (Ignore any thread death message you see! - DO NOT REPORT THREAD DEATH TO PAPER)");
|
||||
@@ -10959,7 +10959,7 @@ index d69ddb0236c8553cf63c4a007dfa7b87e8f58299..38547858a415ac36d6c04070d27933a6
|
||||
} catch (InterruptedException e) {}
|
||||
}
|
||||
// We've just obliterated the main thread, this will prevent stop from dying when removing players
|
||||
@@ -1082,6 +1084,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
@@ -1084,6 +1086,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
// Paper end
|
||||
|
||||
PaperJvmChecker.checkJvm(); // Paper jvm version nag
|
||||
@@ -10967,7 +10967,7 @@ index d69ddb0236c8553cf63c4a007dfa7b87e8f58299..38547858a415ac36d6c04070d27933a6
|
||||
org.spigotmc.WatchdogThread.tick(); // Paper
|
||||
org.spigotmc.WatchdogThread.hasStarted = true; // Paper
|
||||
Arrays.fill( recentTps, 20 );
|
||||
@@ -1099,6 +1102,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
@@ -1101,6 +1104,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
this.lastOverloadTime = this.nextTick;
|
||||
}
|
||||
|
||||
@@ -10975,7 +10975,7 @@ index d69ddb0236c8553cf63c4a007dfa7b87e8f58299..38547858a415ac36d6c04070d27933a6
|
||||
if ( ++MinecraftServer.currentTick % SAMPLE_INTERVAL == 0 )
|
||||
{
|
||||
final long diff = curTime - tickSection;
|
||||
@@ -1113,7 +1117,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
@@ -1115,7 +1119,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
// Paper end
|
||||
tickSection = curTime;
|
||||
}
|
||||
@@ -10984,7 +10984,7 @@ index d69ddb0236c8553cf63c4a007dfa7b87e8f58299..38547858a415ac36d6c04070d27933a6
|
||||
// Spigot end
|
||||
|
||||
//MinecraftServer.currentTick = (int) (System.currentTimeMillis() / 50); // CraftBukkit // Paper - don't overwrite current tick time
|
||||
@@ -1206,6 +1210,76 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
@@ -1208,6 +1212,76 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
}
|
||||
// Paper end
|
||||
|
||||
@@ -11061,7 +11061,7 @@ index d69ddb0236c8553cf63c4a007dfa7b87e8f58299..38547858a415ac36d6c04070d27933a6
|
||||
private void executeModerately() {
|
||||
this.executeAll();
|
||||
java.util.concurrent.locks.LockSupport.parkNanos("executing tasks", 1000L);
|
||||
@@ -1219,22 +1293,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
@@ -1221,22 +1295,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
});
|
||||
}
|
||||
|
||||
@@ -11085,7 +11085,7 @@ index d69ddb0236c8553cf63c4a007dfa7b87e8f58299..38547858a415ac36d6c04070d27933a6
|
||||
|
||||
@Override
|
||||
public TickTask postToMainThread(Runnable runnable) {
|
||||
@@ -1261,6 +1320,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
@@ -1263,6 +1322,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
|
||||
private boolean bb() {
|
||||
if (super.executeNext()) {
|
||||
@@ -11093,7 +11093,7 @@ index d69ddb0236c8553cf63c4a007dfa7b87e8f58299..38547858a415ac36d6c04070d27933a6
|
||||
return true;
|
||||
} else {
|
||||
if (this.canSleepForTick()) {
|
||||
@@ -1328,7 +1388,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
@@ -1330,7 +1390,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
// Paper start - move oversleep into full server tick
|
||||
isOversleep = true;MinecraftTimings.serverOversleep.startTiming();
|
||||
this.awaitTasks(() -> {
|
||||
@@ -11102,7 +11102,7 @@ index d69ddb0236c8553cf63c4a007dfa7b87e8f58299..38547858a415ac36d6c04070d27933a6
|
||||
return !this.canOversleep();
|
||||
});
|
||||
isOversleep = false;MinecraftTimings.serverOversleep.stopTiming();
|
||||
@@ -1393,6 +1453,8 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
@@ -1395,6 +1455,8 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
}
|
||||
// Paper end
|
||||
|
||||
@@ -11111,7 +11111,7 @@ index d69ddb0236c8553cf63c4a007dfa7b87e8f58299..38547858a415ac36d6c04070d27933a6
|
||||
// Paper start
|
||||
long endTime = System.nanoTime();
|
||||
long remaining = (TICK_TIME - (endTime - lastTick)) - catchupTime;
|
||||
@@ -1419,16 +1481,16 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
@@ -1421,16 +1483,16 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
}
|
||||
|
||||
protected void b(BooleanSupplier booleansupplier) {
|
||||
@@ -11131,7 +11131,7 @@ index d69ddb0236c8553cf63c4a007dfa7b87e8f58299..38547858a415ac36d6c04070d27933a6
|
||||
this.methodProfiler.exitEnter("levels");
|
||||
Iterator iterator = this.getWorlds().iterator();
|
||||
|
||||
@@ -1439,7 +1501,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
@@ -1441,7 +1503,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
processQueue.remove().run();
|
||||
}
|
||||
MinecraftTimings.processQueueTimer.stopTiming(); // Spigot
|
||||
@@ -11140,7 +11140,7 @@ index d69ddb0236c8553cf63c4a007dfa7b87e8f58299..38547858a415ac36d6c04070d27933a6
|
||||
MinecraftTimings.timeUpdateTimer.startTiming(); // Spigot // Paper
|
||||
// Send time updates to everyone, it will get the right time from the world the player is in.
|
||||
// Paper start - optimize time updates
|
||||
@@ -1482,11 +1544,16 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
@@ -1484,11 +1546,16 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
this.methodProfiler.enter("tick");
|
||||
|
||||
try {
|
||||
@@ -11159,7 +11159,7 @@ index d69ddb0236c8553cf63c4a007dfa7b87e8f58299..38547858a415ac36d6c04070d27933a6
|
||||
} catch (Throwable throwable) {
|
||||
// Spigot Start
|
||||
CrashReport crashreport;
|
||||
@@ -1580,7 +1647,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
@@ -1582,7 +1649,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
}
|
||||
|
||||
public String getServerModName() {
|
||||
@@ -15395,63 +15395,8 @@ index c617b7dd5a992770fc87113987807947ae68be81..7ce5bd130441a3bc32ee5fa3630edce2
|
||||
}
|
||||
|
||||
private static JsonElement a(UserCache.UserCacheEntry usercache_usercacheentry, DateFormat dateformat) {
|
||||
diff --git a/src/main/java/net/minecraft/util/datafix/fixes/DataConverterProtoChunk.java b/src/main/java/net/minecraft/util/datafix/fixes/DataConverterProtoChunk.java
|
||||
index 3a114931cb88791bf73d08accf13993ba8842af2..81fe9111fcfd298698c2e98f453e2c42f5ce7760 100644
|
||||
--- a/src/main/java/net/minecraft/util/datafix/fixes/DataConverterProtoChunk.java
|
||||
+++ b/src/main/java/net/minecraft/util/datafix/fixes/DataConverterProtoChunk.java
|
||||
@@ -43,13 +43,21 @@ public class DataConverterProtoChunk extends DataFix {
|
||||
return dynamic.asStreamOpt().result();
|
||||
});
|
||||
Dynamic<?> dynamic = (Dynamic) typed1.get(DSL.remainderFinder());
|
||||
- boolean flag = dynamic.get("TerrainPopulated").asBoolean(false) && (!dynamic.get("LightPopulated").asNumber().result().isPresent() || dynamic.get("LightPopulated").asBoolean(false));
|
||||
-
|
||||
- dynamic = dynamic.set("Status", dynamic.createString(flag ? "mobs_spawned" : "empty"));
|
||||
+ // Tuinity start - fix incorrect status conversion
|
||||
+ // Vanilla is setting chunks to incorrect status here, they should be using at minimum carved.
|
||||
+ // for populated chunks, it should be at minimum decorated
|
||||
+ // and for lit and populated, mobs_spawned is correct (technically mobs_spawned should be for populated,
|
||||
+ // but if it's not lit then it can't be set above lit)
|
||||
+ final boolean terrainPopulated = dynamic.get("TerrainPopulated").asBoolean(false);
|
||||
+ final boolean lightPopulated = dynamic.get("LightPopulated").asBoolean(false) || dynamic.get("LightPopulated").asNumber().result().isPresent();
|
||||
+ final String newStatus = !terrainPopulated ? "carved" : (lightPopulated ? "mobs_spawned" : "decorated");
|
||||
+
|
||||
+ dynamic = dynamic.set("Status", dynamic.createString(newStatus));
|
||||
dynamic = dynamic.set("hasLegacyStructureData", dynamic.createBoolean(true));
|
||||
- Dynamic dynamic1;
|
||||
+ // Tuinity end - fix incorrect status conversion
|
||||
+ Dynamic<?> dynamic1; // Tuinity - decompile fix
|
||||
|
||||
- if (flag) {
|
||||
+ if (true) { // Tuinity - fix incorrect status conversion
|
||||
Optional<ByteBuffer> optional1 = dynamic.get("Biomes").asByteBufferOpt().result();
|
||||
|
||||
if (optional1.isPresent()) {
|
||||
@@ -70,7 +78,7 @@ public class DataConverterProtoChunk extends DataFix {
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
if (optional.isPresent()) {
|
||||
- ((Stream) optional.get()).forEach((dynamic2) -> {
|
||||
+ optional.get().forEach((dynamic2) -> { // Tuinity - decompile fix
|
||||
int j = dynamic2.get("x").asInt(0);
|
||||
int k = dynamic2.get("y").asInt(0);
|
||||
int l = dynamic2.get("z").asInt(0);
|
||||
@@ -78,11 +86,11 @@ public class DataConverterProtoChunk extends DataFix {
|
||||
|
||||
((ShortList) list.get(k >> 4)).add(short0);
|
||||
});
|
||||
+ Dynamic<?> finalDynamic = dynamic; // Tuinity - decompile fix
|
||||
dynamic = dynamic.set("ToBeTicked", dynamic.createList(list.stream().map((shortlist) -> {
|
||||
- Stream stream = shortlist.stream();
|
||||
+ Stream<Short> stream = shortlist.stream(); // Tuinity - decompile fix
|
||||
|
||||
- dynamic.getClass();
|
||||
- return dynamic.createList(stream.map(dynamic::createShort));
|
||||
+ return finalDynamic.createList(stream.map(finalDynamic::createShort));
|
||||
})));
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/util/worldupdate/WorldUpgrader.java b/src/main/java/net/minecraft/util/worldupdate/WorldUpgrader.java
|
||||
index a4970654496c52fcd02c5c055ff5ac551bd19da3..6725b31a5183d5af7f8f7566ed21eb61797ef4c9 100644
|
||||
index dca2e9e45116df22d8c95d1be8f0a7e3c2d2b6b1..cb394ec310712cc97d65afe068284b277d7f0483 100644
|
||||
--- a/src/main/java/net/minecraft/util/worldupdate/WorldUpgrader.java
|
||||
+++ b/src/main/java/net/minecraft/util/worldupdate/WorldUpgrader.java
|
||||
@@ -235,7 +235,7 @@ public class WorldUpgrader {
|
||||
@@ -17306,7 +17251,7 @@ index 03584572fa5bf0d96fc4cecece573547f9c94cea..8bc965a3b3d0d4140c6b94636f0b33b2
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java
|
||||
index 6581fe0d93a5c2e7b444a44c01726e02d4a28e63..af01f5d635eada7175b9d7fdb47a65530686a539 100644
|
||||
index f7f593a9e58b537109fa6ca1c783f6614f4bfad5..276b1f0c9c9af7db31fba9be0593ae9def540caf 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/World.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/World.java
|
||||
@@ -154,6 +154,8 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
@@ -17318,9 +17263,9 @@ index 6581fe0d93a5c2e7b444a44c01726e02d4a28e63..af01f5d635eada7175b9d7fdb47a6553
|
||||
public final co.aikar.timings.WorldTimingsHandler timings; // Paper
|
||||
public static BlockPosition lastPhysicsProblem; // Spigot
|
||||
private org.spigotmc.TickLimiter entityLimiter;
|
||||
@@ -181,10 +183,70 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
return typeKey;
|
||||
@@ -190,10 +192,70 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
}
|
||||
// Paper end - fix and optimise world upgrading
|
||||
|
||||
+ // Tuinity start - optimise checkDespawn
|
||||
+ public final List<EntityPlayer> getNearbyPlayers(@Nullable Entity source, double sourceX, double sourceY, double sourceZ, double maxRange, @Nullable Predicate<Entity> predicate) {
|
||||
@@ -17389,7 +17334,7 @@ index 6581fe0d93a5c2e7b444a44c01726e02d4a28e63..af01f5d635eada7175b9d7fdb47a6553
|
||||
this.generator = gen;
|
||||
this.world = new CraftWorld((WorldServer) this, gen, env);
|
||||
this.ticksPerAnimalSpawns = this.getServer().getTicksPerAnimalSpawns(); // CraftBukkit
|
||||
@@ -346,6 +408,15 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
@@ -355,6 +417,15 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
|
||||
@Override
|
||||
public final Chunk getChunkAt(int i, int j) { // Paper - final to help inline
|
||||
@@ -17405,7 +17350,7 @@ index 6581fe0d93a5c2e7b444a44c01726e02d4a28e63..af01f5d635eada7175b9d7fdb47a6553
|
||||
return (Chunk) this.getChunkAt(i, j, ChunkStatus.FULL, true); // Paper - avoid a method jump
|
||||
}
|
||||
|
||||
@@ -420,6 +491,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
@@ -429,6 +500,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
|
||||
@Override
|
||||
public boolean a(BlockPosition blockposition, IBlockData iblockdata, int i, int j) {
|
||||
@@ -17413,7 +17358,7 @@ index 6581fe0d93a5c2e7b444a44c01726e02d4a28e63..af01f5d635eada7175b9d7fdb47a6553
|
||||
// CraftBukkit start - tree generation
|
||||
if (this.captureTreeGeneration) {
|
||||
// Paper start
|
||||
@@ -521,6 +593,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
@@ -530,6 +602,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
|
||||
// CraftBukkit start - Split off from above in order to directly send client and physic updates
|
||||
public void notifyAndUpdatePhysics(BlockPosition blockposition, Chunk chunk, IBlockData oldBlock, IBlockData newBlock, IBlockData actualBlock, int i, int j) {
|
||||
@@ -17421,7 +17366,7 @@ index 6581fe0d93a5c2e7b444a44c01726e02d4a28e63..af01f5d635eada7175b9d7fdb47a6553
|
||||
IBlockData iblockdata = newBlock;
|
||||
IBlockData iblockdata1 = oldBlock;
|
||||
IBlockData iblockdata2 = actualBlock;
|
||||
@@ -533,7 +606,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
@@ -542,7 +615,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
this.notify(blockposition, iblockdata1, iblockdata, i);
|
||||
// Paper start - per player view distance - allow block updates for non-ticking chunks in player view distance
|
||||
// if copied from above
|
||||
@@ -17430,7 +17375,7 @@ index 6581fe0d93a5c2e7b444a44c01726e02d4a28e63..af01f5d635eada7175b9d7fdb47a6553
|
||||
((WorldServer)this).getChunkProvider().flagDirty(blockposition);
|
||||
// Paper end - per player view distance
|
||||
}
|
||||
@@ -955,6 +1028,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
@@ -964,6 +1037,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
return;
|
||||
// Paper end
|
||||
}
|
||||
@@ -17438,7 +17383,7 @@ index 6581fe0d93a5c2e7b444a44c01726e02d4a28e63..af01f5d635eada7175b9d7fdb47a6553
|
||||
}
|
||||
// Paper start - Prevent armor stands from doing entity lookups
|
||||
@Override
|
||||
@@ -1138,10 +1212,44 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
@@ -1147,10 +1221,44 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
return this.getChunkAt(i, j, ChunkStatus.FULL, false);
|
||||
}
|
||||
|
||||
@@ -17484,7 +17429,7 @@ index 6581fe0d93a5c2e7b444a44c01726e02d4a28e63..af01f5d635eada7175b9d7fdb47a6553
|
||||
int i = MathHelper.floor((axisalignedbb.minX - 2.0D) / 16.0D);
|
||||
int j = MathHelper.floor((axisalignedbb.maxX + 2.0D) / 16.0D);
|
||||
int k = MathHelper.floor((axisalignedbb.minZ - 2.0D) / 16.0D);
|
||||
@@ -1197,7 +1305,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
@@ -1206,7 +1314,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
Chunk chunk = (Chunk)this.getChunkIfLoadedImmediately(i1, j1); // Paper
|
||||
|
||||
if (chunk != null) {
|
||||
@@ -17493,7 +17438,7 @@ index 6581fe0d93a5c2e7b444a44c01726e02d4a28e63..af01f5d635eada7175b9d7fdb47a6553
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1220,7 +1328,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
@@ -1229,7 +1337,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
Chunk chunk = (Chunk)this.getChunkIfLoadedImmediately(i1, j1); // Paper
|
||||
|
||||
if (chunk != null) {
|
||||
@@ -17502,7 +17447,7 @@ index 6581fe0d93a5c2e7b444a44c01726e02d4a28e63..af01f5d635eada7175b9d7fdb47a6553
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1228,6 +1336,106 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
@@ -1237,6 +1345,106 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
return list;
|
||||
}
|
||||
|
||||
@@ -18997,7 +18942,7 @@ index 4eaf497d048324a85ce49fc1c6e9559991c20df7..ec2b238480413ba9c123d9ddeaa787d9
|
||||
|
||||
BiomeStorage biomestorage = ichunkaccess.getBiomeIndex();
|
||||
diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/IChunkLoader.java b/src/main/java/net/minecraft/world/level/chunk/storage/IChunkLoader.java
|
||||
index 890362d28ab9cb760c73fe5014e144fb08ada6b8..8c4e87b9404cfe2fedd0c345983f64cad16f32a0 100644
|
||||
index e20b9e6c46093d48d5fa5eb3006087d4e998c205..2d03f5710bcbb059e9ce4761e00349e527e937c0 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/chunk/storage/IChunkLoader.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/chunk/storage/IChunkLoader.java
|
||||
@@ -39,13 +39,14 @@ public class IChunkLoader implements AutoCloseable {
|
||||
@@ -19690,10 +19635,10 @@ index c96eac4b0b519b2807153fa5a8ebf5a020a2b140..b5c8d9b17c2d5e229db5b48448709194
|
||||
int j = 0;
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java
|
||||
index ebb0d6988f87013ea5d523ab4a1b31cb669ccc43..68cdbe184cd2e490595900d988c64f2011e47495 100644
|
||||
index 74d826853389b8e01ffe2b076cf2b179d29da216..71db36d61a02a104449f8634b2737928874190f6 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileCache.java
|
||||
@@ -22,12 +22,43 @@ public class RegionFileCache implements AutoCloseable { // Paper - no final
|
||||
@@ -22,13 +22,19 @@ public class RegionFileCache implements AutoCloseable { // Paper - no final
|
||||
public final Long2ObjectLinkedOpenHashMap<RegionFile> cache = new Long2ObjectLinkedOpenHashMap();
|
||||
private final File b;
|
||||
private final boolean c;
|
||||
@@ -19710,34 +19655,11 @@ index ebb0d6988f87013ea5d523ab4a1b31cb669ccc43..68cdbe184cd2e490595900d988c64f20
|
||||
this.c = flag;
|
||||
}
|
||||
|
||||
+ // Tuinity start
|
||||
+ public static ChunkCoordIntPair getRegionFileCoordinates(File file) {
|
||||
+ String fileName = file.getName();
|
||||
+ if (!fileName.startsWith("r.") || !fileName.endsWith(".mca")) {
|
||||
+ return null;
|
||||
+ }
|
||||
+
|
||||
+ String[] split = fileName.split("\\.");
|
||||
+
|
||||
+ if (split.length != 4) {
|
||||
+ return null;
|
||||
+ }
|
||||
+
|
||||
+ try {
|
||||
+ int x = Integer.parseInt(split[1]);
|
||||
+ int z = Integer.parseInt(split[2]);
|
||||
+
|
||||
+ return new ChunkCoordIntPair(x << 5, z << 5);
|
||||
+ } catch (NumberFormatException ex) {
|
||||
+ return null;
|
||||
+ }
|
||||
+ }
|
||||
+ // Tuinity end
|
||||
+
|
||||
|
||||
-
|
||||
// Paper start
|
||||
public synchronized RegionFile getRegionFileIfLoaded(ChunkCoordIntPair chunkcoordintpair) { // Paper - synchronize for async io
|
||||
@@ -61,9 +92,9 @@ public class RegionFileCache implements AutoCloseable { // Paper - no final
|
||||
public static ChunkCoordIntPair getRegionFileCoordinates(File file) {
|
||||
String fileName = file.getName();
|
||||
@@ -83,9 +89,9 @@ public class RegionFileCache implements AutoCloseable { // Paper - no final
|
||||
this.b.mkdirs();
|
||||
}
|
||||
|
||||
@@ -19749,7 +19671,7 @@ index ebb0d6988f87013ea5d523ab4a1b31cb669ccc43..68cdbe184cd2e490595900d988c64f20
|
||||
|
||||
this.cache.putAndMoveToFirst(i, regionfile1);
|
||||
// Paper start
|
||||
@@ -152,6 +183,13 @@ public class RegionFileCache implements AutoCloseable { // Paper - no final
|
||||
@@ -174,6 +180,13 @@ public class RegionFileCache implements AutoCloseable { // Paper - no final
|
||||
return null;
|
||||
}
|
||||
// CraftBukkit end
|
||||
@@ -19763,7 +19685,7 @@ index ebb0d6988f87013ea5d523ab4a1b31cb669ccc43..68cdbe184cd2e490595900d988c64f20
|
||||
try { // Paper
|
||||
DataInputStream datainputstream = regionfile.a(chunkcoordintpair);
|
||||
// Paper start
|
||||
@@ -167,6 +205,17 @@ public class RegionFileCache implements AutoCloseable { // Paper - no final
|
||||
@@ -189,6 +202,17 @@ public class RegionFileCache implements AutoCloseable { // Paper - no final
|
||||
try {
|
||||
if (datainputstream != null) {
|
||||
nbttagcompound = NBTCompressedStreamTools.a((DataInput) datainputstream);
|
||||
@@ -20718,7 +20640,7 @@ index e50731723d266ba65b2163df2e935afb8b013a93..a6736d15282715d920bab85eb92074cd
|
||||
}
|
||||
value.append("},");
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index c51e9b50323f5e33bad5fd25d74c572241377059..d02b8d4b7883f235894550514a6abae81651af82 100644
|
||||
index ff79c13bc7717eb9529e802b8e31a1f756b02f97..0e9819a7da160e7a5f28734c4dd3b673c8881792 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -230,7 +230,7 @@ import javax.annotation.Nullable; // Paper
|
||||
@@ -20746,7 +20668,7 @@ index c51e9b50323f5e33bad5fd25d74c572241377059..d02b8d4b7883f235894550514a6abae8
|
||||
}
|
||||
|
||||
Plugin[] pluginClone = pluginManager.getPlugins().clone(); // Paper
|
||||
@@ -1932,7 +1934,10 @@ public final class CraftServer implements Server {
|
||||
@@ -1933,7 +1935,10 @@ public final class CraftServer implements Server {
|
||||
|
||||
@Override
|
||||
public boolean isPrimaryThread() {
|
||||
@@ -20758,7 +20680,7 @@ index c51e9b50323f5e33bad5fd25d74c572241377059..d02b8d4b7883f235894550514a6abae8
|
||||
}
|
||||
|
||||
// Paper start
|
||||
@@ -2366,6 +2371,14 @@ public final class CraftServer implements Server {
|
||||
@@ -2367,6 +2372,14 @@ public final class CraftServer implements Server {
|
||||
return com.destroystokyo.paper.PaperConfig.config;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user