Commits
md_5 authored f09019bf81b
1 - | From a3990718d6c910916bbff7590a9d64b4226068b0 Mon Sep 17 00:00:00 2001 |
1 + | From 9539fba8667de25c6c2ff6b33314f7522de4d4e1 Mon Sep 17 00:00:00 2001 |
2 2 | From: Aikar <aikar@aikar.co> |
3 3 | Date: Fri, 31 Jan 2014 11:18:34 -0500 |
4 4 | Subject: [PATCH] Cap Entity Collisions |
5 5 | |
6 6 | Limit a single entity to colliding a max of configurable times per tick. |
7 7 | This will alleviate issues where living entities are hoarded in 1x1 pens. |
8 8 | |
9 9 | diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java |
10 10 | index 875dbb9..4427af9 100644 |
11 11 | --- a/src/main/java/net/minecraft/server/Entity.java |
12 12 | +++ b/src/main/java/net/minecraft/server/Entity.java |
13 13 | |
14 14 | public long activatedTick = Integer.MIN_VALUE; |
15 15 | public boolean fromMobSpawner; |
16 16 | public void inactiveTick() { } |
17 17 | + protected int numCollisions = 0; |
18 18 | // Spigot end |
19 19 | |
20 20 | public Entity(World world) { |
21 21 | diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java |
22 - | index 05a7c9a..a32e453 100644 |
22 + | index 780334f..df72e07 100644 |
23 23 | --- a/src/main/java/net/minecraft/server/EntityLiving.java |
24 24 | +++ b/src/main/java/net/minecraft/server/EntityLiving.java |
25 - | |
25 + | |
26 26 | List list = this.world.getEntities(this, this.getBoundingBox(), IEntitySelector.a(this)); |
27 27 | |
28 28 | if (!list.isEmpty()) { |
29 29 | - for (int i = 0; i < list.size(); ++i) { |
30 30 | + numCollisions = Math.max(0, numCollisions - world.spigotConfig.maxCollisionsPerEntity); // Spigot |
31 31 | + for (int i = 0; i < list.size() && numCollisions < world.spigotConfig.maxCollisionsPerEntity; ++i) { |
32 32 | Entity entity = (Entity) list.get(i); |
33 - | // TODO better check now? |
34 - | // CraftBukkit start - Only handle mob (non-player) collisions every other tick |
35 - | |
36 - | } |
37 - | // CraftBukkit end |
38 33 | |
39 - | - |
40 - | + entity.numCollisions++; // Spigot |
41 - | + numCollisions++; // Spigot |
34 + | + // Spigot start |
35 + | + entity.numCollisions++; |
36 + | + numCollisions++; |
37 + | + // Spigot end |
42 38 | this.C(entity); |
43 39 | } |
44 40 | } |
45 41 | diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java |
46 42 | index 4ea200d..0a6bbba 100644 |
47 43 | --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java |
48 44 | +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java |
49 45 | |
50 46 | enableZombiePigmenPortalSpawns = getBoolean( "enable-zombie-pigmen-portal-spawns", true ); |
51 47 | log( "Allow Zombie Pigmen to spawn from portal blocks: " + enableZombiePigmenPortalSpawns ); |