From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: tr7zw Date: Fri, 31 Jul 2020 21:25:13 -0500 Subject: [PATCH] Add option for only players to have collisions with diff --git a/src/main/java/dev/tr7zw/yatopia/YatopiaConfig.java b/src/main/java/dev/tr7zw/yatopia/YatopiaConfig.java index 19bea6ee83d8b25da022662253328fb6384f40d9..2cee6e02a7dcbacb5f002f9c5917a2e26bcf2c82 100644 --- a/src/main/java/dev/tr7zw/yatopia/YatopiaConfig.java +++ b/src/main/java/dev/tr7zw/yatopia/YatopiaConfig.java @@ -206,4 +206,8 @@ public class YatopiaConfig { 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 c30fee13723cef0f03eb5a87851158cf347fae3c..7ebd715dd2675e0f4fc73344f7068c6b908b59a9 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -2843,40 +2843,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 + // Yatopia 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(dev.tr7zw.yatopia.YatopiaConfig.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 + // Yatopia 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