mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-23 23:57:43 +01:00
d95ac585d4
EntityHangings make a somewhat extensive calculation ever 100 ticks to check if they should die (obstruction etc). This patch makes this magic number configurable, allowing server owners to pick how often they want EntityHangings (e.g. ItemFrames) to tick. Higher values may provide a performance boost for Hanging-heavy servers.
131 lines
6.3 KiB
Diff
131 lines
6.3 KiB
Diff
From 7829ffe30ea4dc9b409cd5140140b84a3372cc27 Mon Sep 17 00:00:00 2001
|
|
From: Jedediah Smith <jedediah@silencegreys.com>
|
|
Date: Fri, 8 Aug 2014 22:51:26 -0500
|
|
Subject: [PATCH] Player affects spawning API
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
|
|
index 08987f2..649e0d3 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityHuman.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
|
|
@@ -41,6 +41,7 @@ public abstract class EntityHuman extends EntityLiving implements ICommandListen
|
|
public boolean sleeping; // protected -> public
|
|
public boolean fauxSleeping;
|
|
public String spawnWorld = "";
|
|
+ public boolean affectsSpawning = true; // PaperSpigot
|
|
|
|
@Override
|
|
public CraftHumanEntity getBukkitEntity() {
|
|
diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java
|
|
index d0f7033..99664db 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityInsentient.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityInsentient.java
|
|
@@ -374,7 +374,7 @@ public abstract class EntityInsentient extends EntityLiving {
|
|
if (this.persistent) {
|
|
this.aU = 0;
|
|
} else {
|
|
- EntityHuman entityhuman = this.world.findNearbyPlayer(this, -1.0D);
|
|
+ EntityHuman entityhuman = this.world.findNearbyPlayerWhoAffectsSpawning(this, -1.0D); // PaperSpigot
|
|
|
|
if (entityhuman != null) {
|
|
double d0 = entityhuman.locX - this.locX;
|
|
diff --git a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
|
|
index 2276905..26fa93e 100644
|
|
--- a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
|
|
+++ b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
|
|
@@ -46,7 +46,7 @@ public abstract class MobSpawnerAbstract {
|
|
}
|
|
|
|
public boolean f() {
|
|
- return this.a().findNearbyPlayer((double) this.b() + 0.5D, (double) this.c() + 0.5D, (double) this.d() + 0.5D, (double) this.requiredPlayerRange) != null;
|
|
+ return this.a().findNearbyPlayerWhoAffectsSpawning((double) this.b() + 0.5D, (double) this.c() + 0.5D, (double) this.d() + 0.5D, (double) this.requiredPlayerRange) != null; // PaperSpigot
|
|
}
|
|
|
|
public void g() {
|
|
diff --git a/src/main/java/net/minecraft/server/SpawnerCreature.java b/src/main/java/net/minecraft/server/SpawnerCreature.java
|
|
index 75427b5..7b30362 100644
|
|
--- a/src/main/java/net/minecraft/server/SpawnerCreature.java
|
|
+++ b/src/main/java/net/minecraft/server/SpawnerCreature.java
|
|
@@ -55,6 +55,10 @@ public final class SpawnerCreature {
|
|
|
|
for (i = 0; i < worldserver.players.size(); ++i) {
|
|
EntityHuman entityhuman = (EntityHuman) worldserver.players.get(i);
|
|
+ // PaperSpigot start - Affects spawning API
|
|
+ if (!entityhuman.affectsSpawning)
|
|
+ continue;
|
|
+ // PaperSpigot end
|
|
int k = MathHelper.floor(entityhuman.locX / 16.0D);
|
|
|
|
j = MathHelper.floor(entityhuman.locZ / 16.0D);
|
|
@@ -154,7 +158,7 @@ public final class SpawnerCreature {
|
|
float f1 = (float) i3;
|
|
float f2 = (float) j3 + 0.5F;
|
|
|
|
- if (worldserver.findNearbyPlayer((double) f, (double) f1, (double) f2, 24.0D) == null) {
|
|
+ if (worldserver.findNearbyPlayerWhoAffectsSpawning((double) f, (double) f1, (double) f2, 24.0D) == null) { // PaperSpigot
|
|
float f3 = f - (float) chunkcoordinates.x;
|
|
float f4 = f1 - (float) chunkcoordinates.y;
|
|
float f5 = f2 - (float) chunkcoordinates.z;
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
|
index 717be3b..33c228b 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -2847,6 +2847,34 @@ public abstract class World implements IBlockAccess {
|
|
return entityhuman;
|
|
}
|
|
|
|
+ // PaperSpigot start - Find players with the spawning flag
|
|
+ public EntityHuman findNearbyPlayerWhoAffectsSpawning(Entity entity, double radius) {
|
|
+ return this.findNearbyPlayerWhoAffectsSpawning(entity.locX, entity.locY, entity.locZ, radius);
|
|
+ }
|
|
+
|
|
+ public EntityHuman findNearbyPlayerWhoAffectsSpawning(double x, double y, double z, double radius) {
|
|
+ double nearestRadius = - 1.0D;
|
|
+ EntityHuman entityHuman = null;
|
|
+
|
|
+ for (int i = 0; i < this.players.size(); ++i) {
|
|
+ EntityHuman nearestPlayer = (EntityHuman) this.players.get(i);
|
|
+
|
|
+ if (nearestPlayer == null || nearestPlayer.dead || !nearestPlayer.affectsSpawning) {
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ double distance = nearestPlayer.e(x, y, z);
|
|
+
|
|
+ if ((radius < 0.0D || distance < radius * radius) && (nearestRadius == -1.0D || distance < nearestRadius)) {
|
|
+ nearestRadius = distance;
|
|
+ entityHuman = nearestPlayer;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return entityHuman;
|
|
+ }
|
|
+ // PaperSpigot end
|
|
+
|
|
public EntityHuman a(String s) {
|
|
for (int i = 0; i < this.players.size(); ++i) {
|
|
EntityHuman entityhuman = (EntityHuman) this.players.get(i);
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
index 849b971..ddda795 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
@@ -1425,6 +1425,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
|
|
return java.util.Collections.unmodifiableSet( ret );
|
|
}
|
|
+
|
|
+ // PaperSpigot start - Add affects spawning API
|
|
+ public void setAffectsSpawning(boolean affects) {
|
|
+ getHandle().affectsSpawning = affects;
|
|
+ }
|
|
+
|
|
+ public boolean getAffectsSpawning() {
|
|
+ return getHandle().affectsSpawning;
|
|
+ }
|
|
+ // PaperSpigot end
|
|
};
|
|
|
|
public Player.Spigot spigot()
|
|
--
|
|
1.9.1
|
|
|