diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/deduplicate_climate_parameters/ParameterMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/deduplicate_climate_parameters/ParameterMixin.java new file mode 100644 index 00000000..bfa22b20 --- /dev/null +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/deduplicate_climate_parameters/ParameterMixin.java @@ -0,0 +1,15 @@ +package org.embeddedt.modernfix.common.mixin.perf.deduplicate_climate_parameters; + +import net.minecraft.world.level.biome.Climate; +import org.embeddedt.modernfix.dedup.ClimateCache; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin({ Climate.Parameter.class, Climate.ParameterPoint.class }) +public class ParameterMixin { + @Redirect(method = "*", at = @At(value = "NEW", target = "net/minecraft/world/level/biome/Climate$Parameter"), require = 0) + private static Climate.Parameter internParameterStatic(long min, long max) { + return ClimateCache.MFIX_INTERNER.intern(new Climate.Parameter(min, max)); + } +} diff --git a/common/src/main/java/org/embeddedt/modernfix/dedup/ClimateCache.java b/common/src/main/java/org/embeddedt/modernfix/dedup/ClimateCache.java new file mode 100644 index 00000000..91f54376 --- /dev/null +++ b/common/src/main/java/org/embeddedt/modernfix/dedup/ClimateCache.java @@ -0,0 +1,9 @@ +package org.embeddedt.modernfix.dedup; + +import com.google.common.collect.Interner; +import com.google.common.collect.Interners; +import net.minecraft.world.level.biome.Climate; + +public class ClimateCache { + public static final Interner MFIX_INTERNER = Interners.newStrongInterner(); +}