diff --git a/forge/src/main/java/dev/architectury/core/fluid/forge/imitator/ArchitecturyFlowingFluid.java b/forge/src/main/java/dev/architectury/core/fluid/forge/imitator/ArchitecturyFlowingFluid.java index 902018b5..50a30567 100644 --- a/forge/src/main/java/dev/architectury/core/fluid/forge/imitator/ArchitecturyFlowingFluid.java +++ b/forge/src/main/java/dev/architectury/core/fluid/forge/imitator/ArchitecturyFlowingFluid.java @@ -42,24 +42,24 @@ import net.minecraftforge.fluids.FluidType; import net.minecraftforge.fluids.ForgeFlowingFluid; import org.jetbrains.annotations.NotNull; +import java.util.IdentityHashMap; +import java.util.Map; import java.util.Optional; -import java.util.function.Supplier; public abstract class ArchitecturyFlowingFluid extends ForgeFlowingFluid { + private static final Map FLUID_TYPE_MAP = new IdentityHashMap<>(); private final ArchitecturyFluidAttributes attributes; - private final Supplier forgeType; ArchitecturyFlowingFluid(ArchitecturyFluidAttributes attributes) { super(toForgeProperties(attributes)); this.attributes = attributes; - this.forgeType = Suppliers.memoize(() -> { - return new ArchitecturyFluidAttributesForge(FluidType.Properties.create(), this, attributes); - }); } private static Properties toForgeProperties(ArchitecturyFluidAttributes attributes) { Properties forge = new Properties(Suppliers.memoize(() -> { - return new ArchitecturyFluidAttributesForge(FluidType.Properties.create(), attributes.getSourceFluid(), attributes); + return FLUID_TYPE_MAP.computeIfAbsent(attributes, attr -> { + return new ArchitecturyFluidAttributesForge(FluidType.Properties.create(), attr.getSourceFluid(), attr); + }); }), attributes::getSourceFluid, attributes::getFlowingFluid); forge.slopeFindDistance(attributes.getSlopeFindDistance()); forge.levelDecreasePerBlock(attributes.getDropOff()); @@ -70,11 +70,6 @@ public abstract class ArchitecturyFlowingFluid extends ForgeFlowingFluid { return forge; } - @Override - public FluidType getFluidType() { - return forgeType.get(); - } - @Override public Fluid getFlowing() { return attributes.getFlowingFluid();