From 28896df2c4ffe32f9331c2c46b0d0ff17964d75b Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Tue, 29 Oct 2019 11:06:43 +0100 Subject: [PATCH] Fix advancements not loading --- .../exopandora/worldhandler/WorldHandler.java | 5 ++ .../{CommandSyntax.java => Syntax.java} | 0 .../gui/content/impl/ContentAdvancements.java | 4 +- .../helper/AdvancementHelper.java | 52 +++++++++++++++++++ 4 files changed, 59 insertions(+), 2 deletions(-) rename src/main/java/exopandora/worldhandler/builder/{CommandSyntax.java => Syntax.java} (100%) create mode 100644 src/main/java/exopandora/worldhandler/helper/AdvancementHelper.java diff --git a/src/main/java/exopandora/worldhandler/WorldHandler.java b/src/main/java/exopandora/worldhandler/WorldHandler.java index 0e4ac21..0d00076 100644 --- a/src/main/java/exopandora/worldhandler/WorldHandler.java +++ b/src/main/java/exopandora/worldhandler/WorldHandler.java @@ -8,7 +8,10 @@ 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.helper.AdvancementHelper; import exopandora.worldhandler.helper.CommandHelper; +import net.minecraft.client.Minecraft; +import net.minecraft.resources.SimpleReloadableResourceManager; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.IEventBus; @@ -34,6 +37,8 @@ public class WorldHandler MinecraftForge.EVENT_BUS.addListener(this::serverStarting); DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> { + SimpleReloadableResourceManager manager = (SimpleReloadableResourceManager) Minecraft.getInstance().getResourceManager(); + manager.addReloadListener(AdvancementHelper.getInstance()); ModLoadingContext.get().registerConfig(Type.CLIENT, Config.CLIENT_SPEC, Main.MODID + ".toml"); modEventBus.register(Config.class); modEventBus.addListener(Content::createRegistry); diff --git a/src/main/java/exopandora/worldhandler/builder/CommandSyntax.java b/src/main/java/exopandora/worldhandler/builder/Syntax.java similarity index 100% rename from src/main/java/exopandora/worldhandler/builder/CommandSyntax.java rename to src/main/java/exopandora/worldhandler/builder/Syntax.java diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentAdvancements.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentAdvancements.java index cbc954e..fdcef4c 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentAdvancements.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentAdvancements.java @@ -21,10 +21,10 @@ import exopandora.worldhandler.gui.content.element.impl.ElementPageList; import exopandora.worldhandler.gui.logic.ILogicMapped; import exopandora.worldhandler.gui.logic.ILogicPageList; import exopandora.worldhandler.helper.ActionHelper; +import exopandora.worldhandler.helper.AdvancementHelper; import exopandora.worldhandler.helper.CommandHelper; import exopandora.worldhandler.util.ActionHandler; import net.minecraft.advancements.Advancement; -import net.minecraft.advancements.AdvancementManager; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; import net.minecraft.util.text.TextFormatting; @@ -46,7 +46,7 @@ public class ContentAdvancements extends Content @Override public void initGui(Container container, int x, int y) { - List advancements = new AdvancementManager().getAllAdvancements().stream() + List advancements = AdvancementHelper.getInstance().getAdvancements().stream() .filter(advancement -> advancement.getDisplay() != null) .collect(Collectors.toList()); diff --git a/src/main/java/exopandora/worldhandler/helper/AdvancementHelper.java b/src/main/java/exopandora/worldhandler/helper/AdvancementHelper.java new file mode 100644 index 0000000..c30b713 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/helper/AdvancementHelper.java @@ -0,0 +1,52 @@ +package exopandora.worldhandler.helper; + +import java.util.Collection; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; + +import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.AdvancementManager; +import net.minecraft.client.Minecraft; +import net.minecraft.profiler.IProfiler; +import net.minecraft.resources.IFutureReloadListener; +import net.minecraft.resources.IResourceManager; +import net.minecraft.resources.ResourcePackInfo; +import net.minecraft.resources.ResourcePackType; +import net.minecraft.resources.SimpleReloadableResourceManager; +import net.minecraft.tags.NetworkTagManager; +import net.minecraft.util.Unit; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class AdvancementHelper implements IFutureReloadListener +{ + private static final AdvancementHelper INSTANCE = new AdvancementHelper(); + private final AdvancementManager manager = new AdvancementManager(); + + @Override + public CompletableFuture reload(IStage stage, IResourceManager resourceManager, IProfiler preparationsProfiler, IProfiler reloadProfiler, Executor backgroundExecutor, Executor gameExecutor) + { + return CompletableFuture.supplyAsync(() -> + { + SimpleReloadableResourceManager serverResourceManager = new SimpleReloadableResourceManager(ResourcePackType.SERVER_DATA, Thread.currentThread()); + Minecraft.getInstance().getResourcePackList().getEnabledPacks().stream().map(ResourcePackInfo::getResourcePack).forEach(serverResourceManager::addResourcePack); + serverResourceManager.addReloadListener(new NetworkTagManager()); + serverResourceManager.addReloadListener(this.manager); + return serverResourceManager; + }).thenCompose(stage::markCompleteAwaitingOthers).thenAcceptAsync(serverResourceManager -> + { + serverResourceManager.initialReload(backgroundExecutor, gameExecutor, CompletableFuture.completedFuture(Unit.INSTANCE)); + }); + } + + public Collection getAdvancements() + { + return this.manager.getAllAdvancements(); + } + + public static AdvancementHelper getInstance() + { + return INSTANCE; + } +}