9dc4d6448b
While it wasn't really "broken" before, if plugins use NMS (which they really should't be) and mess with entity management themselves, and get it wrong, they could ultimately corrupt our state expectations. I've been unable to reproduce any issues locally, but these changes are the result of me analyzing the code pretty deeply and seeing about how to make it more durable to abnormal usage. Any servers seeing oddities, please run with -Ddebug.entities=true and send me any logs triggered.
45 Zeilen
1.9 KiB
Diff
45 Zeilen
1.9 KiB
Diff
From 81263e2380923daafbda6e6c6b923716099a7043 Mon Sep 17 00:00:00 2001
|
|
From: Hugo Manrique <hugmanrique@gmail.com>
|
|
Date: Mon, 23 Jul 2018 12:57:39 +0200
|
|
Subject: [PATCH] Option to prevent armor stands from doing entity lookups
|
|
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
index 8c4ff18868..6c4cb61dc5 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
@@ -375,6 +375,11 @@ public class PaperWorldConfig {
|
|
}
|
|
}
|
|
|
|
+ public boolean armorStandEntityLookups = true;
|
|
+ private void armorStandEntityLookups() {
|
|
+ armorStandEntityLookups = getBoolean("armor-stands-do-collision-entity-lookups", true);
|
|
+ }
|
|
+
|
|
public int maxCollisionsPerEntity;
|
|
private void maxEntityCollision() {
|
|
maxCollisionsPerEntity = getInt( "max-entity-collisions", this.spigotConfig.getInt("max-entity-collisions", 8) );
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
|
index a5f4b9ad94..28fca165cd 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -1539,6 +1539,14 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc
|
|
}
|
|
}
|
|
|
|
+ // Paper start - Prevent armor stands from doing entity lookups
|
|
+ @Override
|
|
+ public boolean getCubes(@Nullable Entity entity, AxisAlignedBB axisAlignedBB) {
|
|
+ if (entity instanceof EntityArmorStand && !entity.world.paperConfig.armorStandEntityLookups) return false;
|
|
+ return GeneratorAccess.super.getCubes(entity, axisAlignedBB);
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
public boolean a(AxisAlignedBB axisalignedbb) {
|
|
int i = MathHelper.floor(axisalignedbb.minX);
|
|
int j = MathHelper.f(axisalignedbb.maxX);
|
|
--
|
|
2.21.0
|
|
|