From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: violetc <58360096+s-yh-china@users.noreply.github.com> Date: Thu, 18 Aug 2022 16:31:08 +0800 Subject: [PATCH] Cache climbing check for activation This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java index 1d52da0e31a1969b99339c510924ede8851449d4..d131f76617f8fe09b1d81fad5a9c1ea58b9a0407 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1943,6 +1943,22 @@ public abstract class LivingEntity extends Entity { return this.lastClimbablePos; } + // Leaves start - cache climbing check + private boolean cachedOnClimable = false; + private BlockPos lastClimbingPosition = null; + + public boolean onClimableCached() { + if (!top.leavesmc.leaves.LeavesConfig.cacheClimbCheck) { + return this.onClimbable(); + } + if (!this.blockPosition().equals(this.lastClimbingPosition)) { + this.cachedOnClimable = this.onClimbable(); + this.lastClimbingPosition = this.blockPosition(); + } + return this.cachedOnClimable; + } + // Leaves end - cache climbing check + public boolean onClimbable() { if (this.isSpectator()) { return false; diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java index 1b42c98956342832c37f0aa266f85271daa4ba5b..b255456f7b9e154f128eace3e220e0010e3f226b 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -291,7 +291,7 @@ public class ActivationRange if ( entity instanceof LivingEntity ) { LivingEntity living = (LivingEntity) entity; - if ( living.onClimbable() || living.jumping || living.hurtTime > 0 || living.activeEffects.size() > 0 ) // Paper + if ( living.onClimableCached() || living.jumping || living.hurtTime > 0 || living.activeEffects.size() > 0 ) // Paper // Leaves - use cached { return 1; // Paper } diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java index 92f27779e8fdf827c2305c4531f478f2b179ecb9..a144420ff6a351e567c3dade9e5a7d02510a9b70 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java @@ -355,6 +355,11 @@ public final class LeavesConfig { } } + public static boolean cacheClimbCheck = true; + private static void cacheClimbCheck() { + cacheClimbCheck = getBoolean("settings.performance.cache-climb-check", cacheClimbCheck); + } + public static final class WorldConfig { public final String worldName;