diff --git a/src/main/java/exopandora/worldhandler/WorldHandler.java b/src/main/java/exopandora/worldhandler/WorldHandler.java index c25d434..89eadc7 100644 --- a/src/main/java/exopandora/worldhandler/WorldHandler.java +++ b/src/main/java/exopandora/worldhandler/WorldHandler.java @@ -13,7 +13,6 @@ import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.usercontent.UsercontentLoader; import exopandora.worldhandler.util.AdvancementHelper; import exopandora.worldhandler.util.CommandHelper; -import exopandora.worldhandler.util.RegistryHelper; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.RegisterClientCommandsEvent; import net.minecraftforge.client.event.RegisterClientReloadListenersEvent; @@ -29,7 +28,6 @@ import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.config.ModConfig.Type; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.fml.loading.FMLPaths; @@ -63,7 +61,6 @@ public class WorldHandler modLoadingContext.registerExtensionPoint(DisplayTest.class, () -> new DisplayTest(() -> "ANY", (remote, isServer) -> true)); modEventBus.addListener(this::clientSetup); modEventBus.addListener(this::commonSetup); - modEventBus.addListener(this::loadComplete); } @SubscribeEvent @@ -80,12 +77,6 @@ public class WorldHandler MinecraftForge.EVENT_BUS.addListener(this::registerCommands); } - @SubscribeEvent - public void loadComplete(FMLLoadCompleteEvent event) - { - RegistryHelper.init(); - } - @SubscribeEvent public void registerKeyMappingsEvent(RegisterKeyMappingsEvent event) { diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentLocate.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentLocate.java index fd83f1d..0547d61 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentLocate.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentLocate.java @@ -2,8 +2,12 @@ package exopandora.worldhandler.gui.content.impl; import java.util.ArrayList; import java.util.List; +import java.util.UUID; import java.util.stream.Collectors; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.suggestion.Suggestion; + import exopandora.worldhandler.builder.impl.LocateCommandBuilder; import exopandora.worldhandler.gui.category.Categories; import exopandora.worldhandler.gui.category.Category; @@ -17,8 +21,8 @@ import exopandora.worldhandler.gui.widget.menu.impl.MenuPageList; import exopandora.worldhandler.util.ActionHandler; import exopandora.worldhandler.util.ActionHelper; import exopandora.worldhandler.util.CommandHelper; -import exopandora.worldhandler.util.RegistryHelper; import exopandora.worldhandler.util.TranslationHelper; +import net.minecraft.client.Minecraft; import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; @@ -32,6 +36,7 @@ public class ContentLocate extends Content private final CommandPreview previewLocateBiome = new CommandPreview(this.builderLocate, LocateCommandBuilder.Label.BIOME); private final CommandPreview previewLocateStructure = new CommandPreview(this.builderLocate, LocateCommandBuilder.Label.STRUCTURE); private final CommandPreview previewLocatePoi = new CommandPreview(this.builderLocate, LocateCommandBuilder.Label.POI); + private final CachedServerResource> structures = new CachedServerResource>(); private Page page = Page.BIOME; @Override @@ -58,7 +63,7 @@ public class ContentLocate extends Content { if(Page.BIOME.equals(this.page)) { - List biomes = RegistryHelper.getLookupProvider() + List biomes = Minecraft.getInstance().getConnection().getSuggestionsProvider().registryAccess() .lookup(Registries.BIOME) .get() .listElementIds() @@ -102,47 +107,54 @@ public class ContentLocate extends Content } else if(Page.STRUCTURE.equals(this.page)) { - List structures = RegistryHelper.getLookupProvider() - .lookup(Registries.STRUCTURE) - .get() - .listElementIds() - .map(ResourceKey::location) - .collect(Collectors.toList()); - - MenuPageList list = new MenuPageList(x + 118, y, structures, 114, 20, 3, container, new ILogicPageList() + if(!this.structures.isCurrent()) { - @Override - public MutableComponent translate(ResourceLocation structure) + Minecraft.getInstance().getConnection().getSuggestionsProvider() + .customSuggestion(new CommandContext(null, "locate structure ", null, null, null, null, null, null, null, true)) + .thenAccept(structures -> this.structures.set(structures.getList().stream() + .map(Suggestion::getText) + .filter(suggestion -> !suggestion.startsWith("#")) + .map(ResourceLocation::new) + .collect(Collectors.toList()))) + .thenRun(container::init); + } + else + { + MenuPageList list = new MenuPageList(x + 118, y, this.structures.get(), 114, 20, 3, container, new ILogicPageList() { - return Component.literal(structure.toString()); - } - - @Override - public MutableComponent toTooltip(ResourceLocation structure) - { - return Component.literal(structure.toString()); - } - - @Override - public void onClick(ResourceLocation structure) - { - ContentLocate.this.builderLocate.structure().set(structure); - container.initButtons(); - } - - @Override - public GuiButtonBase onRegister(int x, int y, int width, int height, MutableComponent text, ResourceLocation structure, ActionHandler actionHandler) - { - return new GuiButtonTooltip(x, y, width, height, text, this.toTooltip(structure), actionHandler); - } - - @Override - public String getId() - { - return "structures"; - } - }); - container.addMenu(list); + @Override + public MutableComponent translate(ResourceLocation structure) + { + return Component.literal(structure.toString()); + } + + @Override + public MutableComponent toTooltip(ResourceLocation structure) + { + return Component.literal(structure.toString()); + } + + @Override + public void onClick(ResourceLocation structure) + { + ContentLocate.this.builderLocate.structure().set(structure); + container.initButtons(); + } + + @Override + public GuiButtonBase onRegister(int x, int y, int width, int height, MutableComponent text, ResourceLocation structure, ActionHandler actionHandler) + { + return new GuiButtonTooltip(x, y, width, height, text, this.toTooltip(structure), actionHandler); + } + + @Override + public String getId() + { + return "structures"; + } + }); + container.addMenu(list); + } } else if(Page.POI.equals(this.page)) { @@ -261,4 +273,31 @@ public class ContentLocate extends Content return this.label; } } + + private static class CachedServerResource + { + private UUID connectionId = null; + private T value; + + public void set(T value) + { + this.connectionId = this.getCurrentConntectionId(); + this.value = value; + } + + public T get() + { + return this.value; + } + + public boolean isCurrent() + { + return this.connectionId == this.getCurrentConntectionId(); + } + + private UUID getCurrentConntectionId() + { + return Minecraft.getInstance().getConnection().getId(); + } + } } diff --git a/src/main/java/exopandora/worldhandler/util/RegistryHelper.java b/src/main/java/exopandora/worldhandler/util/RegistryHelper.java index 66683f6..458563a 100644 --- a/src/main/java/exopandora/worldhandler/util/RegistryHelper.java +++ b/src/main/java/exopandora/worldhandler/util/RegistryHelper.java @@ -3,33 +3,13 @@ package exopandora.worldhandler.util; import java.util.function.Supplier; import exopandora.worldhandler.Main; -import net.minecraft.core.HolderLookup.Provider; import net.minecraft.core.Registry; -import net.minecraft.data.registries.VanillaRegistries; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.registries.RegisterEvent; public class RegistryHelper { - private static final RegistryHelper INSTANCE = new RegistryHelper(); - private static Provider provider; - - public static void init() - { - provider = VanillaRegistries.createLookup(); - } - - public static Provider getLookupProvider() - { - return provider; - } - - public static RegistryHelper getInstance() - { - return INSTANCE; - } - public static void register(RegisterEvent event, ResourceKey> key, String location, Supplier valueSupplier) { event.register(key, new ResourceLocation(Main.MODID, location), valueSupplier);