Avoid advancement reload during client startup
All checks were successful
Build / build (push) Successful in 6m30s
All checks were successful
Build / build (push) Successful in 6m30s
This commit is contained in:
@@ -11,7 +11,6 @@ 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);
|
||||
@@ -79,10 +76,4 @@ public class WorldHandler
|
||||
{
|
||||
CommandHelper.registerCommands(event.getDispatcher(), event.getBuildContext());
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void registerClientReloadListeners(RegisterClientReloadListenersEvent event)
|
||||
{
|
||||
event.registerReloadListener(AdvancementHelper.getInstance());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user