9
0
mirror of https://github.com/LeavesMC/Leaves.git synced 2025-12-22 00:19:33 +00:00
Files
LeavesMC/patches/server/0041-Cache-climbing-check-for-activation.patch
2022-11-29 18:56:19 +08:00

64 lines
2.9 KiB
Diff

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 6e569efe8c5695a875b97126bd4dcd05a86ccf1d..d82af313939322c54099b90c99c4b8fb4e93fb4c 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -1930,6 +1930,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 84bbe8d232be70c87e460b5ef28fca1b7d17f32d..70756c650b1e891569a4910590770688552e1228 100644
--- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java
+++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java
@@ -354,6 +354,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;