mirror of
https://github.com/PaperMC/Paper.git
synced 2025-03-01 10:51:19 +01:00
More more more more more more more more more more more more more more more more work
This commit is contained in:
parent
70c5cb9fbb
commit
8c6927e39d
@ -17,6 +17,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
|
|
||||||
+ protected long updateCount; // Paper - correctly handle recursion
|
+ protected long updateCount; // Paper - correctly handle recursion
|
||||||
protected void updateFutures(ChunkMap chunkStorage, Executor executor) {
|
protected void updateFutures(ChunkMap chunkStorage, Executor executor) {
|
||||||
|
io.papermc.paper.util.TickThread.ensureTickThread("Async ticket level update"); // Paper
|
||||||
+ long updateCount = ++this.updateCount; // Paper - correctly handle recursion
|
+ long updateCount = ++this.updateCount; // Paper - correctly handle recursion
|
||||||
ChunkStatus chunkstatus = ChunkHolder.getStatus(this.oldTicketLevel);
|
ChunkStatus chunkstatus = ChunkHolder.getStatus(this.oldTicketLevel);
|
||||||
ChunkStatus chunkstatus1 = ChunkHolder.getStatus(this.ticketLevel);
|
ChunkStatus chunkstatus1 = ChunkHolder.getStatus(this.ticketLevel);
|
||||||
|
@ -23,8 +23,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
||||||
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
||||||
@@ -0,0 +0,0 @@ public class ServerChunkCache extends ChunkSource {
|
@@ -0,0 +0,0 @@ public class ServerChunkCache extends ChunkSource {
|
||||||
|
|
||||||
public boolean runDistanceManagerUpdates() {
|
public boolean runDistanceManagerUpdates() {
|
||||||
|
if (distanceManager.delayDistanceManagerTick) return false; // Paper - Chunk priority
|
||||||
if (this.chunkMap.unloadingPlayerChunk) { net.minecraft.server.MinecraftServer.LOGGER.fatal("Cannot tick distance manager while unloading playerchunks", new Throwable()); throw new IllegalStateException("Cannot tick distance manager while unloading playerchunks"); } // Paper
|
if (this.chunkMap.unloadingPlayerChunk) { net.minecraft.server.MinecraftServer.LOGGER.fatal("Cannot tick distance manager while unloading playerchunks", new Throwable()); throw new IllegalStateException("Cannot tick distance manager while unloading playerchunks"); } // Paper
|
||||||
+ co.aikar.timings.MinecraftTimings.distanceManagerTick.startTiming(); try { // Paper - add timings for distance manager
|
+ co.aikar.timings.MinecraftTimings.distanceManagerTick.startTiming(); try { // Paper - add timings for distance manager
|
||||||
boolean flag = this.distanceManager.runAllUpdates(this.chunkMap);
|
boolean flag = this.distanceManager.runAllUpdates(this.chunkMap);
|
||||||
|
@ -53,9 +53,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
||||||
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
||||||
@@ -0,0 +0,0 @@ public class ServerChunkCache extends ChunkSource {
|
@@ -0,0 +0,0 @@ public class ServerChunkCache extends ChunkSource {
|
||||||
}
|
|
||||||
|
|
||||||
public boolean runDistanceManagerUpdates() {
|
public boolean runDistanceManagerUpdates() {
|
||||||
|
if (distanceManager.delayDistanceManagerTick) return false; // Paper - Chunk priority
|
||||||
+ if (this.chunkMap.unloadingPlayerChunk) { net.minecraft.server.MinecraftServer.LOGGER.fatal("Cannot tick distance manager while unloading playerchunks", new Throwable()); throw new IllegalStateException("Cannot tick distance manager while unloading playerchunks"); } // Paper
|
+ if (this.chunkMap.unloadingPlayerChunk) { net.minecraft.server.MinecraftServer.LOGGER.fatal("Cannot tick distance manager while unloading playerchunks", new Throwable()); throw new IllegalStateException("Cannot tick distance manager while unloading playerchunks"); } // Paper
|
||||||
boolean flag = this.distanceManager.runAllUpdates(this.chunkMap);
|
boolean flag = this.distanceManager.runAllUpdates(this.chunkMap);
|
||||||
boolean flag1 = this.chunkMap.promoteChunkMap();
|
boolean flag1 = this.chunkMap.promoteChunkMap();
|
||||||
|
@ -21,15 +21,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
this.lastGoodX = this.awaitingPositionFromClient.x;
|
this.lastGoodX = this.awaitingPositionFromClient.x;
|
||||||
this.lastGoodY = this.awaitingPositionFromClient.y;
|
this.lastGoodY = this.awaitingPositionFromClient.y;
|
||||||
this.lastGoodZ = this.awaitingPositionFromClient.z;
|
this.lastGoodZ = this.awaitingPositionFromClient.z;
|
||||||
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
|
|
||||||
// CraftBukkit end
|
|
||||||
|
|
||||||
this.awaitingTeleportTime = this.tickCount;
|
|
||||||
- this.player.absMoveTo(d0, d1, d2, f, f1);
|
|
||||||
+ this.player.moveTo(d0, d1, d2, f, f1); // Paper - use proper setPositionRotation for teleportation
|
|
||||||
this.player.connection.send(new ClientboundPlayerPositionPacket(d0 - d3, d1 - d4, d2 - d5, f - f2, f1 - f3, set, this.awaitingTeleport, flag));
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -5286,6 +5286,25 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!playerchunk_state1.isOrAfter(playerchunk_state)) {
|
if (!playerchunk_state1.isOrAfter(playerchunk_state)) {
|
||||||
|
@@ -0,0 +0,0 @@ public class ChunkHolder {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ // Paper start
|
||||||
|
+ public final boolean isEntityTickingReady() {
|
||||||
|
+ return this.isEntityTickingReady;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public final boolean isTickingReady() {
|
||||||
|
+ return this.isTickingReady;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public final boolean isFullChunkReady() {
|
||||||
|
+ return this.isFullChunkReady;
|
||||||
|
+ }
|
||||||
|
+ // Paper end
|
||||||
|
}
|
||||||
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
|
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
|
||||||
@ -5446,6 +5465,38 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -0,0 +0,0 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||||
|
public class ChunkDistanceManager extends DistanceManager {
|
||||||
|
|
||||||
|
protected ChunkDistanceManager(Executor workerExecutor, Executor mainThreadExecutor) {
|
||||||
|
- super(workerExecutor, mainThreadExecutor);
|
||||||
|
+ super(workerExecutor, mainThreadExecutor, ChunkMap.this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
diff --git a/src/main/java/net/minecraft/server/level/DistanceManager.java b/src/main/java/net/minecraft/server/level/DistanceManager.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/server/level/DistanceManager.java
|
||||||
|
+++ b/src/main/java/net/minecraft/server/level/DistanceManager.java
|
||||||
|
@@ -0,0 +0,0 @@ public abstract class DistanceManager {
|
||||||
|
final Executor mainThreadExecutor;
|
||||||
|
private long ticketTickCounter;
|
||||||
|
private int simulationDistance = 10;
|
||||||
|
+ private final ChunkMap chunkMap; // Paper
|
||||||
|
|
||||||
|
- protected DistanceManager(Executor workerExecutor, Executor mainThreadExecutor) {
|
||||||
|
+ protected DistanceManager(Executor workerExecutor, Executor mainThreadExecutor, ChunkMap chunkMap) {
|
||||||
|
Objects.requireNonNull(mainThreadExecutor);
|
||||||
|
ProcessorHandle<Runnable> mailbox = ProcessorHandle.of("player ticket throttler", mainThreadExecutor::execute);
|
||||||
|
ChunkTaskPriorityQueueSorter chunktaskqueuesorter = new ChunkTaskPriorityQueueSorter(ImmutableList.of(mailbox), workerExecutor, 4);
|
||||||
|
@@ -0,0 +0,0 @@ public abstract class DistanceManager {
|
||||||
|
this.ticketThrottlerInput = chunktaskqueuesorter.getProcessor(mailbox, true);
|
||||||
|
this.ticketThrottlerReleaser = chunktaskqueuesorter.getReleaseProcessor(mailbox);
|
||||||
|
this.mainThreadExecutor = mainThreadExecutor;
|
||||||
|
+ this.chunkMap = chunkMap; // Paper
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void purgeStaleTickets() {
|
||||||
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
||||||
|
@ -58,4 +58,4 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+ abstract public void loadAndSaveFiles(); // Paper - moved from DedicatedPlayerList constructor
|
+ abstract public void loadAndSaveFiles(); // Paper - moved from DedicatedPlayerList constructor
|
||||||
|
|
||||||
public void placeNewPlayer(Connection connection, ServerPlayer player) {
|
public void placeNewPlayer(Connection connection, ServerPlayer player) {
|
||||||
ServerPlayer prev = pendingPlayers.put(player.getUUID(), player);// Paper
|
player.isRealPlayer = true; // Paper - Chunk priority
|
||||||
|
Loading…
Reference in New Issue
Block a user