From b1bae1bfe5264b7b52084ea00ac4656798c1fc04 Mon Sep 17 00:00:00 2001 From: tr7zw Date: Mon, 23 Mar 2020 23:11:10 +0100 Subject: [PATCH] Add option for only players to have collisions with Entities --- src/main/java/de/tr7zw/yapfa/YapfaConfig.java | 6 ++ .../net/minecraft/server/EntityLiving.java | 68 ++++++++++--------- 2 files changed, 43 insertions(+), 31 deletions(-) diff --git a/src/main/java/de/tr7zw/yapfa/YapfaConfig.java b/src/main/java/de/tr7zw/yapfa/YapfaConfig.java index 9711cbc52..655c4e68f 100644 --- a/src/main/java/de/tr7zw/yapfa/YapfaConfig.java +++ b/src/main/java/de/tr7zw/yapfa/YapfaConfig.java @@ -216,4 +216,10 @@ public class YapfaConfig { disableEntityCollisionboxes = getBoolean("settings.disableEntityCollisionboxes", false); } + public static boolean onlyPlayerCollisions = false; + private static void onlyPlayerCollisions() { + onlyPlayerCollisions = getBoolean("settings.onlyPlayerCollisions", false); + } + + } \ No newline at end of file diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java index 65685734d..7a01daa57 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -2702,40 +2702,46 @@ public abstract class EntityLiving extends Entity { if (i <= 0 && world.paperConfig.maxCollisionsPerEntity <= 0) { return; } - // Paper - end don't run getEntities if we're not going to use its result + // Tuinity - end don't run getEntities if we're not going to use its result + // YAPFA start // Tuinity start - reduce memory allocation from collideNearby List list = com.tuinity.tuinity.util.CachedLists.getTempGetEntitiesList(); - this.world.getEntities(this, this.getBoundingBox(), IEntitySelector.a(this), list); try { - // Tuinity end - reduce memory allocation from collideNearby - - if (!list.isEmpty()) { - // Paper - move up - int j; - - if (i > 0 && list.size() > i - 1 && this.random.nextInt(4) == 0) { - j = 0; - - for (int k = 0; k < list.size(); ++k) { - if (!((Entity) list.get(k)).isPassenger()) { - ++j; - } - } - - if (j > i - 1) { - this.damageEntity(DamageSource.CRAMMING, 6.0F); - } - } - - numCollisions = Math.max(0, numCollisions - world.paperConfig.maxCollisionsPerEntity); // Paper - for (j = 0; j < list.size() && numCollisions < world.paperConfig.maxCollisionsPerEntity; ++j) { // Paper - Entity entity = (Entity) list.get(j); - entity.numCollisions++; // Paper - numCollisions++; // Paper - - this.C(entity); - } - } + if(de.tr7zw.yapfa.YapfaConfig.onlyPlayerCollisions) { + this.world.getEntities(this, this.getBoundingBox(), entity -> entity.getEntityType() == EntityTypes.PLAYER, list); + } else { + this.world.getEntities(this, this.getBoundingBox(), IEntitySelector.a(this), list); + } + // Tuinity end - reduce memory allocation from collideNearby + // YAPFA end + + if (!list.isEmpty()) { + // Paper - move up + int j; + + if (i > 0 && list.size() > i - 1 && this.random.nextInt(4) == 0) { + j = 0; + + for (int k = 0; k < list.size(); ++k) { + if (!((Entity) list.get(k)).isPassenger()) { + ++j; + } + } + + if (j > i - 1) { + this.damageEntity(DamageSource.CRAMMING, 6.0F); + } + } + + numCollisions = Math.max(0, numCollisions - world.paperConfig.maxCollisionsPerEntity); // Paper + for (j = 0; j < list.size() && numCollisions < world.paperConfig.maxCollisionsPerEntity; ++j) { // Paper + Entity entity = (Entity) list.get(j); + entity.numCollisions++; // Paper + numCollisions++; // Paper + + this.C(entity); + } + } } finally { // Tuinity start - reduce memory allocation from collideNearby com.tuinity.tuinity.util.CachedLists.returnTempGetEntitiesList(list); } // Tuinity end - reduce memory allocation from collideNearby -- 2.25.1.windows.1