From 8ee85f2c1637ea1ef365b066963aa24b2e1fdde9 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sat, 28 Mar 2026 19:31:24 -0400 Subject: [PATCH] Remove duplicate list held by DebugLevelSource --- .../DebugLevelSourceMixin.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/main/java/org/embeddedt/modernfix/common/mixin/perf/forge_registry_alloc/DebugLevelSourceMixin.java diff --git a/src/main/java/org/embeddedt/modernfix/common/mixin/perf/forge_registry_alloc/DebugLevelSourceMixin.java b/src/main/java/org/embeddedt/modernfix/common/mixin/perf/forge_registry_alloc/DebugLevelSourceMixin.java new file mode 100644 index 00000000..1c295d1e --- /dev/null +++ b/src/main/java/org/embeddedt/modernfix/common/mixin/perf/forge_registry_alloc/DebugLevelSourceMixin.java @@ -0,0 +1,38 @@ +package org.embeddedt.modernfix.common.mixin.perf.forge_registry_alloc; + +import net.minecraft.world.level.levelgen.DebugLevelSource; +import net.minecraftforge.registries.GameData; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import java.util.AbstractList; +import java.util.stream.Collector; +import java.util.stream.Stream; + +@Mixin(DebugLevelSource.class) +public class DebugLevelSourceMixin { + /** + * @author embeddedt + * @reason Reuse the existing blockstate list held by Forge instead of making a new one + */ + @Redirect(method = "initValidStates", at = @At(value = "INVOKE", target = "Ljava/util/stream/Stream;collect(Ljava/util/stream/Collector;)Ljava/lang/Object;", ordinal = 0), remap = false) + private static Object getStateList(Stream instance, Collector arCollector) { + var idMapper = GameData.getBlockStateIDMap(); + return new AbstractList<>() { + @Override + public int size() { + return idMapper.size(); + } + + @Override + public Object get(int index) { + var o = idMapper.byId(index); + if (o == null) { + throw new IndexOutOfBoundsException(); + } + return o; + } + }; + } +}