geforkt von Mirrors/Paper
974b0afca9
CraftBukkit removed their implementation that caused this issue, switching to Mojang's implementation which doesn't appear to share it. I already removed the important bit in the last upstream merge, this is just unused and unnecessary now. So we remove it.
54 Zeilen
2.6 KiB
Diff
54 Zeilen
2.6 KiB
Diff
From 60f5daf8819357295a0fe9cbf2c9e6eaed5832d3 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 fa49397ea..9987a5c7a 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
@@ -244,4 +244,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 7af5d0aef..ab9aa132a 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 = e(minecraftserver, icommandlistener, entity.bf());
|
|
|
|
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 5b5e0e73c..be54c807b 100644
|
|
--- a/src/main/java/net/minecraft/server/Entity.java
|
|
+++ b/src/main/java/net/minecraft/server/Entity.java
|
|
@@ -2047,6 +2047,7 @@ public abstract class Entity implements ICommandListener {
|
|
|
|
@Nullable
|
|
public ScoreboardTeamBase aQ() {
|
|
+ if (!this.world.paperConfig.nonPlayerEntitiesOnScoreboards && !(this instanceof EntityHuman)) { return null; } // Paper
|
|
return this.world.getScoreboard().getPlayerTeam(this.bf());
|
|
}
|
|
|
|
--
|
|
2.12.2.windows.2
|
|
|