be31d62f43
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.
65 lines
2.8 KiB
Diff
65 lines
2.8 KiB
Diff
From 17ee69deb13c9e1861411aef9879ff667ed5ad25 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 e147244..cd621c4 100644
|
|
--- a/src/main/java/net/minecraft/server/Entity.java
|
|
+++ b/src/main/java/net/minecraft/server/Entity.java
|
|
@@ -1020,6 +1020,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..8f23103 100644
|
|
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
@@ -271,4 +271,10 @@ public class SpigotWorldConfig
|
|
maxBulkChunk = getInt( "max-bulk-chunks", 5 );
|
|
log( "Sending up to " + maxBulkChunk + " chunks per packet" );
|
|
}
|
|
+
|
|
+ public int maxCollisionsPerEntity = 8;
|
|
+ private void maxEntityCollision() {
|
|
+ maxCollisionsPerEntity = getInt( "max-entity-collisions", maxCollisionsPerEntity );
|
|
+ log( "Max Entity Collisions: " + maxCollisionsPerEntity );
|
|
+ }
|
|
}
|
|
--
|
|
1.8.3.2
|
|
|