geforkt von Mirrors/Paper
9ff01b16ab
This will be used by my next commit. But trying to get the build going since CI blew up
151 Zeilen
7.0 KiB
Diff
151 Zeilen
7.0 KiB
Diff
From eb8ba651ad60e2edc9ef0d68d7204434351acc9b Mon Sep 17 00:00:00 2001
|
|
From: Jedediah Smith <jedediah@silencegreys.com>
|
|
Date: Tue, 1 Mar 2016 14:47:52 -0600
|
|
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 8e143f7..b6aa51e 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityHuman.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
|
|
@@ -64,6 +64,7 @@ public abstract class EntityHuman extends EntityLiving {
|
|
private ItemStack bT = null;
|
|
private final ItemCooldown bU = this.l();
|
|
public EntityFishingHook hookedFish;
|
|
+ public boolean affectsSpawning = true; // Paper
|
|
|
|
// CraftBukkit start
|
|
public boolean fauxSleeping;
|
|
diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java
|
|
index fdda1ae..6ad5279 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityInsentient.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityInsentient.java
|
|
@@ -593,7 +593,7 @@ public abstract class EntityInsentient extends EntityLiving {
|
|
if (this.persistent) {
|
|
this.ticksFarFromPlayer = 0;
|
|
} else {
|
|
- EntityHuman entityhuman = this.world.findNearbyPlayer(this, -1.0D);
|
|
+ EntityHuman entityhuman = this.world.findNearbyPlayerWhoAffectsSpawning(this, -1.0D); // Paper - Affects Spawning API
|
|
|
|
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 a7903a2..2eee845 100644
|
|
--- a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
|
|
+++ b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
|
|
@@ -32,7 +32,7 @@ public abstract class MobSpawnerAbstract {
|
|
private boolean h() {
|
|
BlockPosition blockposition = this.b();
|
|
|
|
- return this.a().isPlayerNearby((double) blockposition.getX() + 0.5D, (double) blockposition.getY() + 0.5D, (double) blockposition.getZ() + 0.5D, (double) this.requiredPlayerRange);
|
|
+ return this.a().isPlayerNearbyWhoAffectsSpawning((double) blockposition.getX() + 0.5D, (double) blockposition.getY() + 0.5D, (double) blockposition.getZ() + 0.5D, (double) this.requiredPlayerRange); // Paper - Affects spawning API
|
|
}
|
|
|
|
public void c() {
|
|
diff --git a/src/main/java/net/minecraft/server/SpawnerCreature.java b/src/main/java/net/minecraft/server/SpawnerCreature.java
|
|
index 9e19dfd..b724586 100644
|
|
--- a/src/main/java/net/minecraft/server/SpawnerCreature.java
|
|
+++ b/src/main/java/net/minecraft/server/SpawnerCreature.java
|
|
@@ -50,7 +50,7 @@ public final class SpawnerCreature {
|
|
while (iterator.hasNext()) {
|
|
EntityHuman entityhuman = (EntityHuman) iterator.next();
|
|
|
|
- if (!entityhuman.isSpectator()) {
|
|
+ if (!entityhuman.isSpectator() || !entityhuman.affectsSpawning) {
|
|
int l = MathHelper.floor(entityhuman.locX / 16.0D);
|
|
|
|
j = MathHelper.floor(entityhuman.locZ / 16.0D);
|
|
@@ -160,7 +160,7 @@ public final class SpawnerCreature {
|
|
float f = (float) j3 + 0.5F;
|
|
float f1 = (float) l3 + 0.5F;
|
|
|
|
- if (!worldserver.isPlayerNearby((double) f, (double) k3, (double) f1, 24.0D) && blockposition.distanceSquared((double) f, (double) k3, (double) f1) >= 576.0D) {
|
|
+ if (!worldserver.isPlayerNearbyWhoAffectsSpawning((double) f, (double) k3, (double) f1, 24.0D) && blockposition.distanceSquared((double) f, (double) k3, (double) f1) >= 576.0D) {
|
|
if (biomebase_biomemeta == null) {
|
|
biomebase_biomemeta = worldserver.a(enumcreaturetype, (BlockPosition) blockposition_mutableblockposition);
|
|
if (biomebase_biomemeta == null) {
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
|
index 5524e43..0460dc5 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -2689,6 +2689,53 @@ public abstract class World implements IBlockAccess {
|
|
return i;
|
|
}
|
|
|
|
+ // Paper start - Modified methods for affects spawning
|
|
+ public EntityHuman findNearbyPlayerWhoAffectsSpawning(Entity entity, double d0) {
|
|
+ return this.findNearbyPlayerWhoAffectsSpawning(entity.locX, entity.locY, entity.locZ, d0);
|
|
+ }
|
|
+
|
|
+ public EntityHuman findNearbyPlayerWhoAffectsSpawning(double d0, double d1, double d2, double d3) {
|
|
+ double d4 = -1.0D;
|
|
+ EntityHuman entityhuman = null;
|
|
+
|
|
+ for (int i = 0; i < this.players.size(); ++i) {
|
|
+ EntityHuman entityhuman1 = (EntityHuman) this.players.get(i);
|
|
+ // CraftBukkit start - Fixed an NPE
|
|
+ if (entityhuman1 == null || entityhuman1.dead || !entityhuman1.affectsSpawning) {
|
|
+ continue;
|
|
+ }
|
|
+ // CraftBukkit end
|
|
+
|
|
+ if (IEntitySelector.d.apply(entityhuman1)) {
|
|
+ double d5 = entityhuman1.e(d0, d1, d2);
|
|
+
|
|
+ if ((d3 < 0.0D || d5 < d3 * d3) && (d4 == -1.0D || d5 < d4)) {
|
|
+ d4 = d5;
|
|
+ entityhuman = entityhuman1;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return entityhuman;
|
|
+ }
|
|
+
|
|
+ public boolean isPlayerNearbyWhoAffectsSpawning(double d0, double d1, double d2, double d3) {
|
|
+ for (int i = 0; i < this.players.size(); ++i) {
|
|
+ EntityHuman entityhuman = (EntityHuman) this.players.get(i);
|
|
+
|
|
+ if (IEntitySelector.d.apply(entityhuman)) {
|
|
+ double d4 = entityhuman.e(d0, d1, d2);
|
|
+
|
|
+ if (d3 < 0.0D || d4 < d3 * d3 && entityhuman.affectsSpawning) {
|
|
+ return true;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return false;
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
public EntityHuman findNearbyPlayer(Entity entity, double d0) {
|
|
return this.a(entity.locX, entity.locY, entity.locZ, d0, false);
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
index dfa5962..3203458 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
@@ -1405,6 +1405,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
|
|
}
|
|
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public boolean getAffectsSpawning() {
|
|
+ return getHandle().affectsSpawning;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setAffectsSpawning(boolean affects) {
|
|
+ getHandle().affectsSpawning = affects;
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
// Spigot start
|
|
private final Player.Spigot spigot = new Player.Spigot()
|
|
{
|
|
--
|
|
2.7.4
|
|
|