mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-23 02:55:47 +01:00
4e958e229f
Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com> Co-authored-by: zml <zml@stellardrift.ca> Co-authored-by: Mariell Hoversholm <proximyst@proximyst.com>
52 lines
3.6 KiB
Diff
52 lines
3.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: lukas <lukasalt98@gmail.com>
|
|
Date: Sun, 27 Dec 2020 17:19:51 +0100
|
|
Subject: [PATCH] Optimized tick ready check
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
|
index 1c0bfeef83c3669651d9b727c4c746441f6b793c..02303f00e243748b9d1c4a37719fcf5c8d271ed9 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -794,13 +794,13 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
|
if (!tileentity.isRemoved() && tileentity.hasWorld()) {
|
|
BlockPosition blockposition = tileentity.getPosition();
|
|
|
|
- if (this.getChunkProvider().a(blockposition) && this.getWorldBorder().a(blockposition)) {
|
|
+ Chunk chunk; PlayerChunk playerChunk; if ((chunk = tileentity.getCurrentChunk()) != null && (playerChunk = chunk.playerChunk) != null && playerChunk.isTickingReady() && this.getWorldBorder().isInBounds(blockposition)) { // Paper - optimized tick ready check by inlining ChunkProviderServer.a(BlockPosition). Chunk lookup is no longer required and we can use the PlayerChunk directly available through the tile entity
|
|
try {
|
|
gameprofilerfiller.a(() -> {
|
|
return String.valueOf(TileEntityTypes.a(tileentity.getTileType()));
|
|
});
|
|
tileentity.tickTimer.startTiming(); // Spigot
|
|
- if (tileentity.getTileType().isValidBlock(this.getType(blockposition).getBlock())) {
|
|
+ if (tileentity.getTileType().isValidBlock(chunk.getType(blockposition).getBlock())) { // Paper - reuse the chunk from above, do not look it up again
|
|
((ITickable) tileentity).tick();
|
|
} else {
|
|
tileentity.w();
|
|
@@ -834,9 +834,11 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
|
this.tileEntityListTick.remove(tileTickPosition--);
|
|
// Spigot end
|
|
//this.tileEntityList.remove(tileentity); // Paper - remove unused list
|
|
- if (this.isLoaded(tileentity.getPosition())) {
|
|
- this.getChunkAtWorldCoords(tileentity.getPosition()).removeTileEntity(tileentity.getPosition());
|
|
+ // Paper - prevent double chunk lookups
|
|
+ Chunk chunk; if ((chunk = this.getChunkIfLoaded(tileentity.getPosition())) != null) { // inlined contents of this.isLoaded(BlockPosition). Reuse the returned chunk instead of looking it up again
|
|
+ chunk.removeTileEntity(tileentity.getPosition());
|
|
}
|
|
+ // Paper end
|
|
}
|
|
}
|
|
|
|
@@ -855,8 +857,8 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
|
}
|
|
// CraftBukkit end */
|
|
|
|
- if (this.isLoaded(tileentity1.getPosition())) {
|
|
- Chunk chunk = this.getChunkAtWorldCoords(tileentity1.getPosition());
|
|
+ Chunk chunk; if ((chunk = this.getChunkIfLoaded(tileentity1.getPosition())) != null) { // Paper - inlined contents of this.isLoaded(BlockPosition). Reuse the returned chunk instead of looking it up again
|
|
+ // Chunk chunk = this.getChunkAtWorldCoords(tileentity1.getPosition()); // Paper - already computed above
|
|
IBlockData iblockdata = chunk.getType(tileentity1.getPosition());
|
|
|
|
chunk.setTileEntity(tileentity1.getPosition(), tileentity1);
|