From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Martijn Muijsers Date: Thu, 24 Nov 2022 10:31:38 +0100 Subject: [PATCH] Reduce in wall checks License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org This patch is based on the following patch: "Optimize suffocation" By: Kevin Raneri As part of: Pufferfish (https://github.com/pufferfish-gg/Pufferfish) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) * Pufferfish description * The isInWall check to determine suffocation is quite expensive, and often is completely unnecessary to check. We do two things here to improve this: 1. We only check for suffocation once per 20 ticks. The maximum no-damage ticks value means that this change should be extremely difficult, if not impossible, for players to notice. 2. We additionally execute a check to see if the player can even take damage in the first place. This check doesn't improve performance much but is so much cheaper than the suffocation check that it's worth keeping it. diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java index d17020508a1f8d6c7da630b89a11db9bf7d1748f..1fbc971f4bb2473dc67021b4cec9228109e0c43b 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -448,7 +448,10 @@ public abstract class LivingEntity extends Entity implements Attackable { if (this.isAlive()) { boolean flag = this instanceof Player; if (this.level() instanceof ServerLevel serverLevel1) { - if (this.isInWall()) { + // Gale start - Pufferfish - reduce in wall checks + long checkStuckInWallInterval = this.level().galeConfig().smallOptimizations.reducedIntervals.checkStuckInWall; + if ((checkStuckInWallInterval <= 1 || (tickCount % checkStuckInWallInterval == 0 && couldPossiblyBeHurt(1.0F))) && this.isInWall()) { + // Gale end - Pufferfish - reduce in wall checks this.hurtServer(serverLevel1, this.damageSources().inWall(), 1.0F); } else if (flag && !this.level().getWorldBorder().isWithinBounds(this.getBoundingBox())) { double d = this.level().getWorldBorder().getDistanceToBorder(this) + this.level().getWorldBorder().getDamageSafeZone(); @@ -1354,6 +1357,15 @@ public abstract class LivingEntity extends Entity implements Attackable { return this.getHealth() <= 0.0F; } + // Gale start - Pufferfish - reduce in wall checks + public boolean couldPossiblyBeHurt(float amount) { + if ((float) this.invulnerableTime > (float) this.invulnerableDuration / 2.0F && amount <= this.lastHurt) { + return false; + } + return true; + } + // Gale end - Pufferfish - reduce in wall checks + @Override public boolean hurtServer(ServerLevel level, DamageSource damageSource, float amount) { if (this.isInvulnerableTo(level, damageSource)) {