mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2026-01-04 15:41:40 +00:00
fix mob spawning over limit
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
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 2a1affd8b38ad3a2eb5861f03929619e3f2e3e4d..4dce68aafbccfeda82d0bee127a59f43502c6f70 100644
|
||||
--- a/net/minecraft/world/entity/Entity.java
|
||||
+++ b/net/minecraft/world/entity/Entity.java
|
||||
@@ -289,6 +289,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;
|
||||
@@ -2071,7 +2074,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
|
||||
@@ -2083,7 +2087,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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2163,9 +2178,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;
|
||||
Reference in New Issue
Block a user