Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-16 03:20:07 +01:00
6745297b05
Closes #1197 While this really undoes a lot of the desired performance gains avoiding chunk lookups, we sadly have to accept this because we are seeing lots of bugs with entities.
54 Zeilen
2.6 KiB
Diff
54 Zeilen
2.6 KiB
Diff
From 427ed2e030aab48f93a55b805946fa07fba593ae Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Tue, 8 Mar 2016 23:25:45 -0500
|
|
Subject: [PATCH] Disable Scoreboards for non players by default
|
|
|
|
Entities collision is checking for scoreboards setting.
|
|
This is very heavy to do map lookups for every collision to check
|
|
this setting.
|
|
|
|
So avoid looking up scoreboards and short circuit to the "not on a team"
|
|
logic which is most likely to be true.
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
index b241c0380..a4c94845b 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
@@ -242,4 +242,9 @@ public class PaperWorldConfig {
|
|
private void disableTeleportationSuffocationCheck() {
|
|
disableTeleportationSuffocationCheck = getBoolean("disable-teleportation-suffocation-check", false);
|
|
}
|
|
+
|
|
+ public boolean nonPlayerEntitiesOnScoreboards = false;
|
|
+ private void nonPlayerEntitiesOnScoreboards() {
|
|
+ nonPlayerEntitiesOnScoreboards = getBoolean("allow-non-player-entities-on-scoreboards", false);
|
|
+ }
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/CommandScoreboard.java b/src/main/java/net/minecraft/server/CommandScoreboard.java
|
|
index ec9a87239..b08274d93 100644
|
|
--- a/src/main/java/net/minecraft/server/CommandScoreboard.java
|
|
+++ b/src/main/java/net/minecraft/server/CommandScoreboard.java
|
|
@@ -492,6 +492,7 @@ public class CommandScoreboard extends CommandAbstract {
|
|
|
|
while (iterator.hasNext()) {
|
|
Entity entity = (Entity) iterator.next();
|
|
+ if (!entity.world.paperConfig.nonPlayerEntitiesOnScoreboards && !(entity instanceof EntityHuman)) { continue; } // Paper
|
|
String s2 = f(minecraftserver, icommandlistener, entity.bn());
|
|
|
|
if (scoreboard.addPlayerToTeam(s2, s)) {
|
|
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
|
index a4c5b780c..c620667e0 100644
|
|
--- a/src/main/java/net/minecraft/server/Entity.java
|
|
+++ b/src/main/java/net/minecraft/server/Entity.java
|
|
@@ -2104,6 +2104,7 @@ public abstract class Entity implements ICommandListener, KeyedObject { // Paper
|
|
|
|
@Nullable
|
|
public ScoreboardTeamBase aY() {
|
|
+ if (!this.world.paperConfig.nonPlayerEntitiesOnScoreboards && !(this instanceof EntityHuman)) { return null; } // Paper
|
|
return this.world.getScoreboard().getPlayerTeam(this.bn());
|
|
}
|
|
|
|
--
|
|
2.18.0
|
|
|