Avoid advancement reload during client startup
All checks were successful
Build / build (push) Successful in 6m30s

This commit is contained in:
Codex
2026-04-26 15:35:29 +02:00
parent bcac60fab5
commit 076f8abebd
2 changed files with 21 additions and 46 deletions

View File

@@ -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());
}
}

View File

@@ -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<Void> 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<PackResources> list = Minecraft.getInstance().getResourcePackRepository().getSelectedPacks().stream().map(Pack::open).collect(Collectors.toList());
serverResourceManager.createReload(backgroundExecutor, gameExecutor, CompletableFuture.completedFuture(Unit.INSTANCE), list);
});
}
public Collection<AdvancementHolder> 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()