From 0000000000000000000000000000000000000000 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 diff --git a/src/main/java/de/tr7zw/yapfa/YapfaConfig.java b/src/main/java/de/tr7zw/yapfa/YapfaConfig.java index 35ac0206c9a5481191752e78f61ccf4582a86f10..071e9f9a5447c7ff4fb15d9c5a6fced4c22739b7 100644 --- a/src/main/java/de/tr7zw/yapfa/YapfaConfig.java +++ b/src/main/java/de/tr7zw/yapfa/YapfaConfig.java @@ -206,4 +206,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 4c9b82284c529088fc977e7bd55c1f0f9dc7bbc5..0170b2e877d4ef0b24a9c1e48da061e02cda2653 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -2833,40 +2833,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