mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-19 15:09:25 +00:00
78 lines
3.7 KiB
Diff
78 lines
3.7 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: wling-art <wlingzhenyu@163.com>
|
|
Date: Sat, 17 May 2025 08:25:33 +0800
|
|
Subject: [PATCH] Optimize isEyeInFluid
|
|
|
|
|
|
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
|
|
index 5eb740476dff894e91c2bd779ef6b760213a78a5..64f24d3e0ecb91e0b4df6229354aeac549234f1b 100644
|
|
--- a/net/minecraft/world/entity/Entity.java
|
|
+++ b/net/minecraft/world/entity/Entity.java
|
|
@@ -262,6 +262,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
|
|
protected Object2DoubleMap<TagKey<Fluid>> fluidHeight = new Object2DoubleArrayMap<>(2);
|
|
protected boolean wasEyeInWater;
|
|
private final Set<TagKey<Fluid>> fluidOnEyes = new HashSet<>();
|
|
+ private static final int FLUID_WATER = 1; // Leaf - Optimize isEyeInFluid
|
|
+ private static final int FLUID_LAVA = 2; // Leaf - Optimize isEyeInFluid
|
|
+ private int fluidCache = 0; // Leaf - Optimize isEyeInFluid
|
|
public int invulnerableTime;
|
|
protected boolean firstTick = true;
|
|
protected final SynchedEntityData entityData;
|
|
@@ -2022,7 +2025,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
|
|
|
|
private void updateFluidOnEyes() {
|
|
this.wasEyeInWater = this.isEyeInFluid(FluidTags.WATER);
|
|
- this.fluidOnEyes.clear();
|
|
+ if (org.dreeam.leaf.config.modules.opt.EyeFluidCache.enabled) fluidCache = 0; else this.fluidOnEyes.clear(); // Leaf - Optimize isEyeInFluid
|
|
+
|
|
double eyeY = this.getEyeY();
|
|
if (!(
|
|
this.getVehicle() instanceof AbstractBoat abstractBoat
|
|
@@ -2034,7 +2038,18 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
|
|
FluidState fluidState = this.level().getFluidState(blockPos);
|
|
double d = blockPos.getY() + fluidState.getHeight(this.level(), blockPos);
|
|
if (d > eyeY) {
|
|
- this.fluidOnEyes.addAll(fluidState.getTagsAsSet()); // Leaf - Remove stream in updateFluidOnEyes
|
|
+ // Leaf start - Optimize isEyeInFluid
|
|
+ if (org.dreeam.leaf.config.modules.opt.EyeFluidCache.enabled) {
|
|
+ if (fluidState.is(FluidTags.WATER)) {
|
|
+ setFluidStatus(FluidTags.WATER, true);
|
|
+ }
|
|
+ if (fluidState.is(FluidTags.LAVA)) {
|
|
+ setFluidStatus(FluidTags.LAVA, true);
|
|
+ }
|
|
+ } else {
|
|
+ this.fluidOnEyes.addAll(fluidState.getTagsAsSet()); // Leaf - Remove stream in updateFluidOnEyes
|
|
+ }
|
|
+ // Leaf end - Optimize isEyeInFluid
|
|
}
|
|
}
|
|
}
|
|
@@ -2114,9 +2129,25 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
|
|
}
|
|
}
|
|
|
|
+ // Leaf start - Optimize isEyeInFluid
|
|
public boolean isEyeInFluid(TagKey<Fluid> fluidTag) {
|
|
- return this.fluidOnEyes.contains(fluidTag);
|
|
+ if (!org.dreeam.leaf.config.modules.opt.EyeFluidCache.enabled) {
|
|
+ return this.fluidOnEyes.contains(fluidTag);
|
|
+ }
|
|
+ return fluidTag == FluidTags.WATER ? (fluidCache & FLUID_WATER) != 0
|
|
+ : fluidTag == FluidTags.LAVA && (fluidCache & FLUID_LAVA) != 0;
|
|
+ }
|
|
+
|
|
+ public void setFluidStatus(TagKey<Fluid> fluidTag, boolean isInFluid) {
|
|
+ int bit = fluidTag == FluidTags.WATER ? FLUID_WATER
|
|
+ : fluidTag == FluidTags.LAVA ? FLUID_LAVA
|
|
+ : 0;
|
|
+
|
|
+ if (bit == 0) return;
|
|
+
|
|
+ fluidCache = isInFluid ? (fluidCache | bit) : (fluidCache & ~bit);
|
|
}
|
|
+ // Leaf end - Optimize isEyeInFluid
|
|
|
|
public boolean isInLava() {
|
|
return !this.firstTick && this.fluidHeight.getDouble(FluidTags.LAVA) > 0.0;
|