From 90adb1c6275223dea92d94f9f2d2dcf7e82b8333 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sat, 1 Jul 2023 19:00:37 -0400 Subject: [PATCH] Reduce Twilight Forest structure lag Related: #147 --- forge/build.gradle | 1 + .../TFStructureStartMixin.java | 35 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/twilightforest/structure_spawn_fix/TFStructureStartMixin.java diff --git a/forge/build.gradle b/forge/build.gradle index 8f05d6a4..898c04c1 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -43,6 +43,7 @@ dependencies { modCompileOnly("curse.maven:supermartijncore-454372:4455384") modCompileOnly("vazkii.patchouli:Patchouli:1.18.2-71.1") + modCompileOnly("curse.maven:twilightforest-227639:4337390") common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive = false } diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/twilightforest/structure_spawn_fix/TFStructureStartMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/twilightforest/structure_spawn_fix/TFStructureStartMixin.java new file mode 100644 index 00000000..d1591fc3 --- /dev/null +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/twilightforest/structure_spawn_fix/TFStructureStartMixin.java @@ -0,0 +1,35 @@ +package org.embeddedt.modernfix.forge.mixin.perf.twilightforest.structure_spawn_fix; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.level.StructureFeatureManager; +import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; +import org.embeddedt.modernfix.annotation.RequiresMod; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; +import twilightforest.world.components.structures.start.TFStructureStart; + +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@Mixin(TFStructureStart.class) +@RequiresMod("twilightforest") +public class TFStructureStartMixin { + private static List legacyStructureNames; + @Redirect(method = "gatherPotentialSpawns", at = @At(value = "INVOKE", target = "Ljava/util/stream/Stream;toList()Ljava/util/List;"), remap = false) + private static List> getTFStructureFeatures(Stream> stream, StructureFeatureManager structureManager, MobCategory classification, BlockPos pos) { + if(legacyStructureNames == null) { + legacyStructureNames = stream.map(feature -> feature.feature.getRegistryName()).collect(Collectors.toList()); + } + var registry = structureManager.registryAccess().ownedRegistryOrThrow(Registry.CONFIGURED_STRUCTURE_FEATURE_REGISTRY); + return legacyStructureNames.stream() + .map(registry::get) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + } +}