This is for 2 reasons: 1) Ensuring our log4j is mostly loaded at OUR version. I've seen stack traces with line numbers that do not match our version. This means that some plugin has shaded in log4j and their loaded version is mixing with ours.... So by at least trying to load a bunch of log4j classes before we load plugins, we can be more sure mixed versions are not loading. 2) If the jar file is replaced while the server is runnimg class not found errors galore This will preloaod a bunch of classes commonly seen to error during shutdown due to this. The goal here is to help let the server shutdown gracefully as possible. Some plugins will still blow up here if they access a class that hadn't been loaded yet, but goal is to at least stop freezing the shutdown process as it does with JLine and Log4j errors requiring an external kill. Ideally you should not replace jars while the server is running, but it is something that happens in development for testing. Updated test server to do a copy though to avoid this happening in Paper development.
62 lines
4.3 KiB
Diff
62 lines
4.3 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/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
|
|
index 6d3b34ead9cc95dcc1152dffa8c6c4a8c7f1d58b..5cc89c0cf9e9e632212a9653391437cbe9b15031 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
|
|
@@ -125,8 +125,12 @@ public class EntityTrackerEntry {
|
|
++this.o;
|
|
i = MathHelper.d(this.tracker.yaw * 256.0F / 360.0F);
|
|
j = MathHelper.d(this.tracker.pitch * 256.0F / 360.0F);
|
|
- Vec3D vec3d = this.tracker.getPositionVector().d(PacketPlayOutEntity.a(this.xLoc, this.yLoc, this.zLoc));
|
|
- boolean flag1 = vec3d.g() >= 7.62939453125E-6D;
|
|
+ // Paper start - reduce allocation of Vec3D here
|
|
+ double vec3d_dx = this.tracker.locX() - 2.44140625E-4D*(this.xLoc);
|
|
+ double vec3d_dy = this.tracker.locY() - 2.44140625E-4D*(this.yLoc);
|
|
+ double vec3d_dz = this.tracker.locZ() - 2.44140625E-4D*(this.zLoc);
|
|
+ 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.tickCounter % 60 == 0;
|
|
boolean flag3 = Math.abs(i - this.yRot) >= 1 || Math.abs(j - this.xRot) >= 1;
|
|
@@ -143,9 +147,11 @@ public class EntityTrackerEntry {
|
|
// CraftBukkit end
|
|
|
|
if (this.tickCounter > 0 || this.tracker instanceof EntityArrow) {
|
|
- long k = PacketPlayOutEntity.a(vec3d.x);
|
|
- long l = PacketPlayOutEntity.a(vec3d.y);
|
|
- long i1 = PacketPlayOutEntity.a(vec3d.z);
|
|
+ // Paper start - remove allocation of Vec3D here
|
|
+ long k = PacketPlayOutEntity.a(vec3d_dx);
|
|
+ long l = PacketPlayOutEntity.a(vec3d_dy);
|
|
+ long i1 = PacketPlayOutEntity.a(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.o <= 400 && !this.q && this.r == this.tracker.onGround) {
|
|
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
|
index 3cd9e1238d944d77245404de0d926731d9ee4c1a..fa4e27011bde8838729c9f0a812bb68bd05a6169 100644
|
|
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
|
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
|
@@ -2131,9 +2131,14 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
|
|
public void updatePlayer(EntityPlayer entityplayer) {
|
|
org.spigotmc.AsyncCatcher.catchOp("player tracker update"); // Spigot
|
|
if (entityplayer != this.tracker) {
|
|
- Vec3D vec3d = entityplayer.getPositionVector().d(this.tracker.getPositionVector()); // 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 = entityplayer.locX() - this.tracker.locX();
|
|
+ double vec3d_dy = entityplayer.locY() - this.tracker.locY();
|
|
+ double vec3d_dz = entityplayer.locZ() - this.tracker.locZ();
|
|
+ // Paper end - remove allocation of Vec3D here
|
|
int i = Math.min(this.b(), (PlayerChunkMap.this.viewDistance - 1) * 16);
|
|
- boolean flag = vec3d.x >= (double) (-i) && vec3d.x <= (double) i && vec3d.z >= (double) (-i) && vec3d.z <= (double) i && this.tracker.a(entityplayer);
|
|
+ boolean flag = vec3d_dx >= (double) (-i) && vec3d_dx <= (double) i && vec3d_dz >= (double) (-i) && vec3d_dz <= (double) i && this.tracker.a(entityplayer); // Paper - remove allocation of Vec3D here
|
|
|
|
if (flag) {
|
|
boolean flag1 = this.tracker.attachedToPlayer;
|