From a06fca791a68e1cb2a810d440be1b9555fbd4a53 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Tue, 15 Aug 2023 21:18:39 -0400 Subject: [PATCH] Fix Forge experimental world suppression not working on first reopen --- .../CreateWorldScreenMixin.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/extra_experimental_screen/CreateWorldScreenMixin.java diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/extra_experimental_screen/CreateWorldScreenMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/extra_experimental_screen/CreateWorldScreenMixin.java new file mode 100644 index 00000000..a8696b54 --- /dev/null +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/extra_experimental_screen/CreateWorldScreenMixin.java @@ -0,0 +1,24 @@ +package org.embeddedt.modernfix.forge.mixin.bugfix.extra_experimental_screen; + +import com.mojang.serialization.Lifecycle; +import net.minecraft.client.gui.screens.worldselection.CreateWorldScreen; +import net.minecraft.world.level.storage.PrimaryLevelData; +import net.minecraft.world.level.storage.WorldData; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; + +@Mixin(CreateWorldScreen.class) +public class CreateWorldScreenMixin { + /** + * Fix experimental world dialog still being shown the first time you reopen a world that was created + * as experimental. + */ + @ModifyArg(method = "createNewWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/worldselection/WorldOpenFlows;createLevelFromExistingSettings(Lnet/minecraft/world/level/storage/LevelStorageSource$LevelStorageAccess;Lnet/minecraft/server/ReloadableServerResources;Lnet/minecraft/core/RegistryAccess$Frozen;Lnet/minecraft/world/level/storage/WorldData;)V"), index = 3) + private WorldData setExperimentalFlag(WorldData data) { + if(data instanceof PrimaryLevelData pld && data.worldGenSettingsLifecycle() != Lifecycle.stable()) { + pld.withConfirmedWarning(true); + } + return data; + } +}