geforkt von Mirrors/Paper
4d40e87b33
Had to drop some hunks modifying getEntities, as those methods were rewritten by Mojang in 1.17
62 Zeilen
4.5 KiB
Diff
62 Zeilen
4.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <spottedleaf@spottedleaf.dev>
|
|
Date: Mon, 27 Apr 2020 00:04:16 -0700
|
|
Subject: [PATCH] Reduce allocation of Vec3D by entity tracker
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
|
index bb00445ecf50051cf3966ee10be645e2a0d2519e..57b95c9e85d2341c00d54cacd71a8784cad3e5e7 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
|
@@ -2101,9 +2101,14 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially
|
|
public void updatePlayer(ServerPlayer player) {
|
|
org.spigotmc.AsyncCatcher.catchOp("player tracker update"); // Spigot
|
|
if (player != this.entity) {
|
|
- Vec3 vec3d = player.position().subtract(this.entity.position()); // MC-155077, SPIGOT-5113
|
|
+ // Paper start - remove allocation of Vec3D here
|
|
+ //Vec3D vec3d = entityplayer.getPositionVector().d(this.tracker.getPositionVector()); // MC-155077, SPIGOT-5113
|
|
+ double vec3d_dx = player.getX() - this.entity.getX();
|
|
+ double vec3d_dy = player.getY() - this.entity.getY();
|
|
+ double vec3d_dz = player.getZ() - this.entity.getZ();
|
|
+ // Paper end - remove allocation of Vec3D here
|
|
int i = Math.min(this.getEffectiveRange(), (ChunkMap.this.viewDistance - 1) * 16);
|
|
- boolean flag = vec3d.x >= (double) (-i) && vec3d.x <= (double) i && vec3d.z >= (double) (-i) && vec3d.z <= (double) i && this.entity.broadcastToPlayer(player);
|
|
+ boolean flag = vec3d_dx >= (double) (-i) && vec3d_dx <= (double) i && vec3d_dz >= (double) (-i) && vec3d_dz <= (double) i && this.entity.broadcastToPlayer(player); // Paper - remove allocation of Vec3D here
|
|
|
|
// CraftBukkit start - respect vanish API
|
|
if (this.entity instanceof ServerPlayer) {
|
|
diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java
|
|
index 6b492b72b177e3c58580561585609b176876acf1..8ea4209400489116823eced292d8cd9654a1c809 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ServerEntity.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ServerEntity.java
|
|
@@ -145,8 +145,12 @@ public class ServerEntity {
|
|
++this.teleportDelay;
|
|
i = Mth.floor(this.entity.getYRot() * 256.0F / 360.0F);
|
|
j = Mth.floor(this.entity.getXRot() * 256.0F / 360.0F);
|
|
- Vec3 vec3d = this.entity.position().subtract(ClientboundMoveEntityPacket.packetToEntity(this.xp, this.yp, this.zp));
|
|
- boolean flag1 = vec3d.lengthSqr() >= 7.62939453125E-6D;
|
|
+ // Paper start - reduce allocation of Vec3D here
|
|
+ double vec3d_dx = this.entity.getX() - 2.44140625E-4D*(this.xp);
|
|
+ double vec3d_dy = this.entity.getY() - 2.44140625E-4D*(this.yp);
|
|
+ double vec3d_dz = this.entity.getZ() - 2.44140625E-4D*(this.zp);
|
|
+ boolean flag1 = (vec3d_dx * vec3d_dx + vec3d_dy * vec3d_dy + vec3d_dz * vec3d_dz) >= 7.62939453125E-6D;
|
|
+ // Paper end - reduce allocation of Vec3D here
|
|
Packet<?> packet1 = null;
|
|
boolean flag2 = flag1 || this.tickCount % 60 == 0;
|
|
boolean flag3 = Math.abs(i - this.yRotp) >= 1 || Math.abs(j - this.xRotp) >= 1;
|
|
@@ -163,9 +167,11 @@ public class ServerEntity {
|
|
// CraftBukkit end
|
|
|
|
if (this.tickCount > 0 || this.entity instanceof AbstractArrow) {
|
|
- long k = ClientboundMoveEntityPacket.entityToPacket(vec3d.x);
|
|
- long l = ClientboundMoveEntityPacket.entityToPacket(vec3d.y);
|
|
- long i1 = ClientboundMoveEntityPacket.entityToPacket(vec3d.z);
|
|
+ // Paper start - remove allocation of Vec3D here
|
|
+ long k = ClientboundMoveEntityPacket.entityToPacket(vec3d_dx);
|
|
+ long l = ClientboundMoveEntityPacket.entityToPacket(vec3d_dy);
|
|
+ long i1 = ClientboundMoveEntityPacket.entityToPacket(vec3d_dz);
|
|
+ // Paper end - remove allocation of Vec3D here
|
|
boolean flag4 = k < -32768L || k > 32767L || l < -32768L || l > 32767L || i1 < -32768L || i1 > 32767L;
|
|
|
|
if (!flag4 && this.teleportDelay <= 400 && !this.wasRiding && this.wasOnGround == this.entity.isOnGround()) {
|