fd83772302
Limit a single entity to colliding a max of configurable times per tick. This will alleviate issues where living entities are hoarded in 1x1 pens.
66 lines
2.8 KiB
Diff
66 lines
2.8 KiB
Diff
From db76c53f063cc8a9ba146d427bf2ee9562f48015 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Fri, 31 Jan 2014 11:18:34 -0500
|
|
Subject: [PATCH] Cap Entity Collisions
|
|
|
|
Limit a single entity to colliding a max of configurable times per tick.
|
|
This will alleviate issues where living entities are hoarded in 1x1 pens.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
|
index 69331ff..4d09fdb 100644
|
|
--- a/src/main/java/net/minecraft/server/Entity.java
|
|
+++ b/src/main/java/net/minecraft/server/Entity.java
|
|
@@ -1021,6 +1021,7 @@ public abstract class Entity {
|
|
|
|
public void b_(EntityHuman entityhuman) {}
|
|
|
|
+ int numCollisions = 0; // Spigot
|
|
public void collide(Entity entity) {
|
|
if (entity.passenger != this && entity.vehicle != this) {
|
|
double d0 = entity.locX - this.locX;
|
|
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
|
index 35b2f75..ab28bd3 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
|
@@ -1486,7 +1486,9 @@ public abstract class EntityLiving extends Entity {
|
|
List list = this.world.getEntities(this, this.boundingBox.grow(0.20000000298023224D, 0.0D, 0.20000000298023224D));
|
|
|
|
if (this.R() && list != null && !list.isEmpty()) { // Spigot: Add this.R() condition
|
|
+ numCollisions -= world.spigotConfig.maxCollisionsPerEntity; // Spigot
|
|
for (int i = 0; i < list.size(); ++i) {
|
|
+ if (numCollisions > world.spigotConfig.maxCollisionsPerEntity) { break; } // Spigot
|
|
Entity entity = (Entity) list.get(i);
|
|
|
|
// TODO better check now?
|
|
@@ -1497,9 +1499,12 @@ public abstract class EntityLiving extends Entity {
|
|
// CraftBukkit end
|
|
|
|
if (entity.S()) {
|
|
+ entity.numCollisions++; // Spigot
|
|
+ numCollisions++; // Spigot
|
|
this.n(entity);
|
|
}
|
|
}
|
|
+ numCollisions = 0; // Spigot
|
|
}
|
|
}
|
|
|
|
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
index 4cff009..979b315 100644
|
|
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
@@ -271,4 +271,11 @@ public class SpigotWorldConfig
|
|
maxBulkChunk = getInt( "max-bulk-chunks", 5 );
|
|
log( "Sending up to " + maxBulkChunk + " chunks per packet" );
|
|
}
|
|
+
|
|
+ public int maxCollisionsPerEntity;
|
|
+ private void maxEntityCollision()
|
|
+ {
|
|
+ maxCollisionsPerEntity = getInt( "max-entity-collisions", 8 );
|
|
+ log( "Max Entity Collisions: " + maxCollisionsPerEntity );
|
|
+ }
|
|
}
|
|
--
|
|
1.8.3.2
|
|
|