Fix advancements not loading

This commit is contained in:
Marcel Konrad
2019-10-29 11:06:43 +01:00
parent c2ecfaf496
commit 28896df2c4
4 changed files with 59 additions and 2 deletions

View File

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

View File

@@ -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<Advancement> advancements = new AdvancementManager().getAllAdvancements().stream()
List<Advancement> advancements = AdvancementHelper.getInstance().getAdvancements().stream()
.filter(advancement -> advancement.getDisplay() != null)
.collect(Collectors.toList());

View File

@@ -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<Void> 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<Advancement> getAdvancements()
{
return this.manager.getAllAdvancements();
}
public static AdvancementHelper getInstance()
{
return INSTANCE;
}
}