From 076f8abebdebf355b33da07f1994c687710b7d88 Mon Sep 17 00:00:00 2001 From: Codex Date: Sun, 26 Apr 2026 15:35:29 +0200 Subject: [PATCH] Avoid advancement reload during client startup --- .../exopandora/worldhandler/WorldHandler.java | 23 +++------- .../worldhandler/util/AdvancementHelper.java | 44 ++++++------------- 2 files changed, 21 insertions(+), 46 deletions(-) diff --git a/src/main/java/exopandora/worldhandler/WorldHandler.java b/src/main/java/exopandora/worldhandler/WorldHandler.java index e61f3e2..fe391ea 100644 --- a/src/main/java/exopandora/worldhandler/WorldHandler.java +++ b/src/main/java/exopandora/worldhandler/WorldHandler.java @@ -7,11 +7,10 @@ import org.apache.logging.log4j.Logger; import exopandora.worldhandler.config.Config; import exopandora.worldhandler.event.ClientEventHandler; -import exopandora.worldhandler.event.KeyHandler; -import exopandora.worldhandler.gui.category.Category; -import exopandora.worldhandler.gui.content.Content; +import exopandora.worldhandler.event.KeyHandler; +import exopandora.worldhandler.gui.category.Category; +import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.usercontent.UsercontentLoader; -import exopandora.worldhandler.util.AdvancementHelper; import exopandora.worldhandler.util.CommandHelper; import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.IEventBus; @@ -20,7 +19,6 @@ import net.neoforged.fml.ModContainer; import net.neoforged.fml.common.Mod; import net.neoforged.fml.config.ModConfig.Type; import net.neoforged.neoforge.client.event.RegisterClientCommandsEvent; -import net.neoforged.neoforge.client.event.RegisterClientReloadListenersEvent; import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent; import net.neoforged.neoforge.common.NeoForge; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; @@ -42,7 +40,6 @@ public class WorldHandler modContainer.registerConfig(Type.CLIENT, Config.CLIENT_SPEC, Main.MODID + "/" + Main.MODID + ".toml"); UsercontentLoader.load(WorldHandler.USERCONTENT_PATH); modEventBus.addListener(WorldHandler.this::registerKeyMappingsEvent); - modEventBus.addListener(WorldHandler.this::registerClientReloadListeners); modEventBus.addListener(Content::createRegistry); modEventBus.addListener(Category::createRegistry); modEventBus.addListener(Content::register); @@ -75,14 +72,8 @@ public class WorldHandler } @SubscribeEvent - public void registerCommands(RegisterClientCommandsEvent event) - { - CommandHelper.registerCommands(event.getDispatcher(), event.getBuildContext()); - } - - @SubscribeEvent - public void registerClientReloadListeners(RegisterClientReloadListenersEvent event) - { - event.registerReloadListener(AdvancementHelper.getInstance()); - } + public void registerCommands(RegisterClientCommandsEvent event) + { + CommandHelper.registerCommands(event.getDispatcher(), event.getBuildContext()); + } } diff --git a/src/main/java/exopandora/worldhandler/util/AdvancementHelper.java b/src/main/java/exopandora/worldhandler/util/AdvancementHelper.java index 9be08e7..874fed2 100644 --- a/src/main/java/exopandora/worldhandler/util/AdvancementHelper.java +++ b/src/main/java/exopandora/worldhandler/util/AdvancementHelper.java @@ -1,46 +1,30 @@ package exopandora.worldhandler.util; import java.util.Collection; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executor; +import java.util.Collections; import java.util.stream.Collectors; import net.minecraft.advancements.AdvancementHolder; +import net.minecraft.advancements.AdvancementNode; import net.minecraft.client.Minecraft; -import net.minecraft.server.ServerAdvancementManager; -import net.minecraft.server.packs.PackResources; -import net.minecraft.server.packs.PackType; -import net.minecraft.server.packs.repository.Pack; -import net.minecraft.server.packs.resources.PreparableReloadListener; -import net.minecraft.server.packs.resources.ReloadableResourceManager; -import net.minecraft.server.packs.resources.ResourceManager; -import net.minecraft.util.Unit; -import net.minecraft.util.profiling.ProfilerFiller; +import net.minecraft.client.multiplayer.ClientPacketListener; -public class AdvancementHelper implements PreparableReloadListener +public class AdvancementHelper { private static final AdvancementHelper INSTANCE = new AdvancementHelper(); - private final ServerAdvancementManager manager = new ServerAdvancementManager(RegistryHelper.registryAccess()); - - @Override - public CompletableFuture reload(PreparationBarrier stage, ResourceManager resourceManager, ProfilerFiller preparationsProfiler, ProfilerFiller reloadProfiler, Executor backgroundExecutor, Executor gameExecutor) - { - return CompletableFuture.supplyAsync(() -> - { - ReloadableResourceManager serverResourceManager = new ReloadableResourceManager(PackType.SERVER_DATA); - serverResourceManager.registerReloadListener(this.manager); - return serverResourceManager; - }).thenCompose(stage::wait).thenAcceptAsync(serverResourceManager -> - { - List list = Minecraft.getInstance().getResourcePackRepository().getSelectedPacks().stream().map(Pack::open).collect(Collectors.toList()); - serverResourceManager.createReload(backgroundExecutor, gameExecutor, CompletableFuture.completedFuture(Unit.INSTANCE), list); - }); - } public Collection getAdvancements() { - return this.manager.getAllAdvancements(); + ClientPacketListener connection = Minecraft.getInstance().getConnection(); + + if(connection == null) + { + return Collections.emptyList(); + } + + return connection.getAdvancements().getTree().nodes().stream() + .map(AdvancementNode::holder) + .collect(Collectors.toList()); } public static AdvancementHelper getInstance()