geforkt von Mirrors/Paper
51 Zeilen
2.9 KiB
Diff
51 Zeilen
2.9 KiB
Diff
|
From 0000000000000000000000000000000000000000 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 abbbe1786eb68af02f9d39650aad730ac44aac8a..3ac2ac3db9b1c271b3c21930bb13716669ff64d3 100644
|
||
|
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||
|
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||
|
@@ -210,4 +210,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/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
||
|
index caae8bdae592a1ae4f99861088458d7461f4c97a..bfced192c1e8fd3fa0250a0f93adfc061d7e71e5 100644
|
||
|
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
||
|
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
||
|
@@ -2289,6 +2289,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne
|
||
|
|
||
|
@Nullable
|
||
|
public ScoreboardTeamBase getScoreboardTeam() {
|
||
|
+ if (!this.world.paperConfig.nonPlayerEntitiesOnScoreboards && !(this instanceof EntityHuman)) { return null; } // Paper
|
||
|
return this.world.getScoreboard().getPlayerTeam(this.getName());
|
||
|
}
|
||
|
|
||
|
diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java
|
||
|
index 49e95369882847c90ee7417abea6270386cd622f..70211129e6ab2f7cdb975adcb532be595bc3834f 100644
|
||
|
--- a/src/main/java/net/minecraft/world/entity/EntityLiving.java
|
||
|
+++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java
|
||
|
@@ -741,6 +741,7 @@ public abstract class EntityLiving extends Entity {
|
||
|
if (nbttagcompound.hasKeyOfType("Team", 8)) {
|
||
|
String s = nbttagcompound.getString("Team");
|
||
|
ScoreboardTeam scoreboardteam = this.world.getScoreboard().getTeam(s);
|
||
|
+ if (!world.paperConfig.nonPlayerEntitiesOnScoreboards && !(this instanceof EntityHuman)) { scoreboardteam = null; } // Paper
|
||
|
boolean flag = scoreboardteam != null && this.world.getScoreboard().addPlayerToTeam(this.getUniqueIDString(), scoreboardteam);
|
||
|
|
||
|
if (!flag) {
|