geforkt von Mirrors/Paper
18c3716c49
This enables us a fast reference to the entities current chunk instead of having to look it up by hashmap lookups. We also store counts by type to further enable other performance optimizations in later patches.
191 Zeilen
7.1 KiB
Diff
191 Zeilen
7.1 KiB
Diff
From 38c9fb6874ea9a6a93dcb74babdf31dccacb9fde Mon Sep 17 00:00:00 2001
|
|
From: Zach Brown <zach.brown@destroystokyo.com>
|
|
Date: Tue, 1 Mar 2016 22:01:19 -0600
|
|
Subject: [PATCH] Optimize TileEntity Ticking
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/TileEntityChest.java b/src/main/java/net/minecraft/server/TileEntityChest.java
|
|
index 3b5af473d..631304122 100644
|
|
--- a/src/main/java/net/minecraft/server/TileEntityChest.java
|
|
+++ b/src/main/java/net/minecraft/server/TileEntityChest.java
|
|
@@ -8,17 +8,17 @@ import org.bukkit.craftbukkit.entity.CraftHumanEntity;
|
|
import org.bukkit.entity.HumanEntity;
|
|
// CraftBukkit end
|
|
|
|
-public class TileEntityChest extends TileEntityLootable implements ITickable {
|
|
+public class TileEntityChest extends TileEntityLootable { // Paper - Remove ITickable
|
|
|
|
private NonNullList<ItemStack> items;
|
|
public boolean a;
|
|
- public TileEntityChest f;
|
|
- public TileEntityChest g;
|
|
- public TileEntityChest h;
|
|
- public TileEntityChest i;
|
|
- public float j;
|
|
+ public TileEntityChest f; // Paper - Adjacent Chest Z Neg
|
|
+ public TileEntityChest g; // Paper - Adjacent Chest X Pos
|
|
+ public TileEntityChest h; // Paper - Adjacent Chest X Neg
|
|
+ public TileEntityChest i; // Paper - Adjacent Chest Z Pos
|
|
+ public float j; // Paper - lid angle
|
|
public float k;
|
|
- public int l;
|
|
+ public int l; // Paper - Number of viewers
|
|
private int q;
|
|
private BlockChest.Type r;
|
|
|
|
@@ -190,6 +190,8 @@ public class TileEntityChest extends TileEntityLootable implements ITickable {
|
|
}
|
|
|
|
public void e() {
|
|
+ // Paper - Disable all of this, just in case this does get ticked
|
|
+ /*
|
|
this.o();
|
|
int i = this.position.getX();
|
|
int j = this.position.getY();
|
|
@@ -270,7 +272,8 @@ public class TileEntityChest extends TileEntityLootable implements ITickable {
|
|
this.j = 0.0F;
|
|
}
|
|
}
|
|
-
|
|
+ */
|
|
+ // Paper end
|
|
}
|
|
|
|
public boolean c(int i, int j) {
|
|
@@ -290,6 +293,28 @@ public class TileEntityChest extends TileEntityLootable implements ITickable {
|
|
int oldPower = Math.max(0, Math.min(15, this.l)); // CraftBukkit - Get power before new viewer is added
|
|
|
|
++this.l;
|
|
+
|
|
+ // Paper start - Move chest open sound out of the tick loop
|
|
+ this.o();
|
|
+
|
|
+ if (this.l > 0 && this.j == 0.0F && this.f == null && this.h == null) {
|
|
+ this.j = 0.7F;
|
|
+
|
|
+ double d0 = (double) this.position.getZ() + 0.5D;
|
|
+ double d1 = (double) this.position.getX() + 0.5D;
|
|
+
|
|
+ if (this.i != null) {
|
|
+ d0 += 0.5D;
|
|
+ }
|
|
+
|
|
+ if (this.g != null) {
|
|
+ d1 += 0.5D;
|
|
+ }
|
|
+
|
|
+ this.world.a((EntityHuman) null, d1, (double) this.position.getY() + 0.5D, d0, SoundEffects.ac, SoundCategory.BLOCKS, 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
if (this.world == null) return; // CraftBukkit
|
|
this.world.playBlockAction(this.position, this.getBlock(), 1, this.l);
|
|
|
|
@@ -314,6 +339,34 @@ public class TileEntityChest extends TileEntityLootable implements ITickable {
|
|
if (!entityhuman.isSpectator() && this.getBlock() instanceof BlockChest) {
|
|
int oldPower = Math.max(0, Math.min(15, this.l)); // CraftBukkit - Get power before new viewer is added
|
|
--this.l;
|
|
+
|
|
+ // Paper start - Move chest close sound out of the tick loop
|
|
+ if (this.l == 0 && this.j > 0.0F || this.l > 0 && this.j < 1.0F) {
|
|
+ float f = 0.1F;
|
|
+
|
|
+ if (this.l > 0) {
|
|
+ this.j += f;
|
|
+ } else {
|
|
+ this.j -= f;
|
|
+ }
|
|
+
|
|
+ double d0 = (double) this.getPosition().getX() + 0.5D;
|
|
+ double d2 = (double) this.getPosition().getZ() + 0.5D;
|
|
+ int yLoc = this.position.getY();
|
|
+
|
|
+ if (this.i != null) {
|
|
+ d2 += 0.5D;
|
|
+ }
|
|
+
|
|
+ if (this.g != null) {
|
|
+ d0 += 0.5D;
|
|
+ }
|
|
+
|
|
+ this.world.a((EntityHuman) null, d0, (double) yLoc + 0.5D, d2, SoundEffects.aa, SoundCategory.BLOCKS, 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
|
|
+ this.j = 0.0F;
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
this.world.playBlockAction(this.position, this.getBlock(), 1, this.l);
|
|
this.world.applyPhysics(this.position, this.getBlock(), false);
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/TileEntityEnderChest.java b/src/main/java/net/minecraft/server/TileEntityEnderChest.java
|
|
index 31585757b..1c1741c56 100644
|
|
--- a/src/main/java/net/minecraft/server/TileEntityEnderChest.java
|
|
+++ b/src/main/java/net/minecraft/server/TileEntityEnderChest.java
|
|
@@ -1,15 +1,17 @@
|
|
package net.minecraft.server;
|
|
|
|
-public class TileEntityEnderChest extends TileEntity implements ITickable {
|
|
+public class TileEntityEnderChest extends TileEntity { // Paper - Remove ITickable
|
|
|
|
- public float a;
|
|
+ public float a; // Paper - lid angle
|
|
public float f;
|
|
- public int g;
|
|
+ public int g; // Paper - Number of viewers
|
|
private int h;
|
|
|
|
public TileEntityEnderChest() {}
|
|
|
|
public void e() {
|
|
+ // Paper start - Disable all of this, just in case this does get ticked
|
|
+ /*
|
|
if (++this.h % 20 * 4 == 0) {
|
|
this.world.playBlockAction(this.position, Blocks.ENDER_CHEST, 1, this.g);
|
|
}
|
|
@@ -54,6 +56,8 @@ public class TileEntityEnderChest extends TileEntity implements ITickable {
|
|
this.a = 0.0F;
|
|
}
|
|
}
|
|
+ */
|
|
+ // Paper end
|
|
|
|
}
|
|
|
|
@@ -73,11 +77,34 @@ public class TileEntityEnderChest extends TileEntity implements ITickable {
|
|
|
|
public void a() {
|
|
++this.g;
|
|
+
|
|
+ // Paper start - Move enderchest open sounds out of the tick loop
|
|
+ if (this.g > 0 && this.a == 0.0F) {
|
|
+ this.a = 0.7F;
|
|
+
|
|
+ double d1 = (double) this.getPosition().getX() + 0.5D;
|
|
+ double d0 = (double) this.getPosition().getZ() + 0.5D;
|
|
+
|
|
+ this.world.a((EntityHuman) null, d1, (double) this.getPosition().getY() + 0.5D, d0, SoundEffects.aT, SoundCategory.BLOCKS, 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
this.world.playBlockAction(this.position, Blocks.ENDER_CHEST, 1, this.g);
|
|
}
|
|
|
|
public void f() {
|
|
--this.g;
|
|
+
|
|
+ // Paper start - Move enderchest close sounds out of the tick loop
|
|
+ if (this.g == 0 && this.a > 0.0F || this.g > 0 && this.a < 1.0F) {
|
|
+ double d0 = (double) this.getPosition().getX() + 0.5D;
|
|
+ double d2 = (double) this.getPosition().getZ() + 0.5D;
|
|
+
|
|
+ this.world.a((EntityHuman) null, d0, (double) this.getPosition().getY() + 0.5D, d2, SoundEffects.aS, SoundCategory.BLOCKS, 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
|
|
+ this.a = 0.0F;
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
this.world.playBlockAction(this.position, Blocks.ENDER_CHEST, 1, this.g);
|
|
}
|
|
|
|
--
|
|
2.18.0
|
|
|