diff --git a/CHANGELOG.md b/CHANGELOG.md index 6750bbae..69ae1e96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,15 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2001.1.5] + +### Added +* The quest view panel is now opened automatically when a new quest is created via the GUI + * Makes it easy to quickly edit title/subtitle/etc. via the "Edit" dropdown button in the view panel + +### Fixed +* Server crash while building creative mode tabs (with specific mod combinations) + ## [2001.1.4] ### Added diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/FTBQServerProxy.java b/common/src/main/java/dev/ftb/mods/ftbquests/FTBQServerProxy.java new file mode 100644 index 00000000..e7e303b0 --- /dev/null +++ b/common/src/main/java/dev/ftb/mods/ftbquests/FTBQServerProxy.java @@ -0,0 +1,20 @@ +package dev.ftb.mods.ftbquests; + +import dev.ftb.mods.ftbquests.quest.ServerQuestFile; +import dev.ftb.mods.ftbquests.quest.loot.LootCrate; +import dev.ftb.mods.ftbquests.quest.loot.RewardTable; + +import java.util.Collection; +import java.util.List; +import java.util.Objects; + +public class FTBQServerProxy implements IQuestProxy { + @Override + public Collection getKnownLootCrates() { + return ServerQuestFile.INSTANCE != null ? ServerQuestFile.INSTANCE.getRewardTables().stream() + .map(RewardTable::getLootCrate) + .filter(Objects::nonNull) + .toList() : + List.of(); + } +} diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/FTBQuests.java b/common/src/main/java/dev/ftb/mods/ftbquests/FTBQuests.java index ee516f21..1c46a77e 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/FTBQuests.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/FTBQuests.java @@ -3,6 +3,7 @@ import dev.architectury.utils.Env; import dev.architectury.utils.EnvExecutor; import dev.ftb.mods.ftbquests.api.FTBQuestsAPI; +import dev.ftb.mods.ftbquests.client.FTBQClientProxy; import dev.ftb.mods.ftbquests.client.FTBQuestsClient; import dev.ftb.mods.ftbquests.integration.RecipeModHelper; import dev.ftb.mods.ftbquests.net.FTBQuestsNetHandler; @@ -18,6 +19,8 @@ public class FTBQuests { public static FTBQuests instance; + public static IQuestProxy PROXY; + private static RecipeModHelper recipeModHelper; private static final RecipeModHelper NO_OP_HELPER = new RecipeModHelper.NoOp(); @@ -29,6 +32,8 @@ public FTBQuests() { FTBQuestsNetHandler.init(); FTBQuestsEventHandler.INSTANCE.init(); + PROXY = EnvExecutor.getEnvSpecific(() -> FTBQClientProxy::new, () -> FTBQServerProxy::new); + EnvExecutor.runInEnv(Env.CLIENT, () -> FTBQuestsClient::init); } diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/IQuestProxy.java b/common/src/main/java/dev/ftb/mods/ftbquests/IQuestProxy.java new file mode 100644 index 00000000..e19649b6 --- /dev/null +++ b/common/src/main/java/dev/ftb/mods/ftbquests/IQuestProxy.java @@ -0,0 +1,9 @@ +package dev.ftb.mods.ftbquests; + +import dev.ftb.mods.ftbquests.quest.loot.LootCrate; + +import java.util.Collection; + +public interface IQuestProxy { + Collection getKnownLootCrates(); +} diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/client/FTBQClientProxy.java b/common/src/main/java/dev/ftb/mods/ftbquests/client/FTBQClientProxy.java new file mode 100644 index 00000000..1696a09c --- /dev/null +++ b/common/src/main/java/dev/ftb/mods/ftbquests/client/FTBQClientProxy.java @@ -0,0 +1,20 @@ +package dev.ftb.mods.ftbquests.client; + +import dev.ftb.mods.ftbquests.IQuestProxy; +import dev.ftb.mods.ftbquests.quest.loot.LootCrate; +import dev.ftb.mods.ftbquests.quest.loot.RewardTable; + +import java.util.Collection; +import java.util.List; +import java.util.Objects; + +public class FTBQClientProxy implements IQuestProxy { + @Override + public Collection getKnownLootCrates() { + return ClientQuestFile.exists() ? ClientQuestFile.INSTANCE.getRewardTables().stream() + .map(RewardTable::getLootCrate) + .filter(Objects::nonNull) + .toList() : + List.of(); + } +} \ No newline at end of file diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/client/FTBQuestsNetClient.java b/common/src/main/java/dev/ftb/mods/ftbquests/client/FTBQuestsNetClient.java index a1f32cf7..e7c4ddea 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/client/FTBQuestsNetClient.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/client/FTBQuestsNetClient.java @@ -58,9 +58,9 @@ public static void createObject(long id, long parent, QuestObjectType type, Comp object.editedFromGUI(); FTBQuests.getRecipeModHelper().refreshRecipes(object); - if (object instanceof Chapter chapter) { + if (object instanceof QuestObject qo) { ClientQuestFile.INSTANCE.getQuestScreen() - .ifPresent(questScreen -> questScreen.selectChapter(chapter)); + .ifPresent(questScreen -> questScreen.open(qo, true)); } QuestObjectUpdateListener listener = ClientUtils.getCurrentGuiAs(QuestObjectUpdateListener.class); diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/QuestScreen.java b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/QuestScreen.java index 7b3db4d9..1cfdd82a 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/QuestScreen.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/QuestScreen.java @@ -571,10 +571,11 @@ public void open(@Nullable QuestObject object, boolean focus) { } } else if (object instanceof QuestLink link) { link.getQuest().ifPresent(quest -> { + selectChapter(link.getChapter()); viewQuestPanel.hidePanel = false; viewQuest(quest); if (focus) { - questPanel.scrollTo(quest.getX() + 0.5D, quest.getY() + 0.5D); + questPanel.scrollTo(link.getX() + 0.5D, link.getY() + 0.5D); } }); } else if (object instanceof Task task) { diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/ViewQuestPanel.java b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/ViewQuestPanel.java index e7259dfb..70819889 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/ViewQuestPanel.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/ViewQuestPanel.java @@ -566,6 +566,8 @@ public void keyReleased(Key key) { editDescLine0(-1, null); } else if (key.is(GLFW.GLFW_KEY_I)) { editDescLine0(-1, new ImageComponent()); + } else if (key.is(GLFW.GLFW_KEY_Q)) { + quest.onEditButtonClicked(questScreen); } } @@ -653,6 +655,12 @@ private void openEditButtonContextMenu() { Icons.ART, () -> editDescLine0(-1, new ImageComponent()))); + contextMenu.add(ContextMenuItem.SEPARATOR); + + contextMenu.add(new ContextMenuItem(Component.translatable("ftbquests.gui.edit_quest_props").append(hotkey("Q")), + Icons.SETTINGS, + () -> quest.onEditButtonClicked(questScreen))); + getGui().openContextMenu(contextMenu); } diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/item/FTBQuestsItems.java b/common/src/main/java/dev/ftb/mods/ftbquests/item/FTBQuestsItems.java index 9f79ba31..705bf80e 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/item/FTBQuestsItems.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/item/FTBQuestsItems.java @@ -4,9 +4,9 @@ import dev.architectury.registry.registries.DeferredRegister; import dev.architectury.registry.registries.RegistrarManager; import dev.architectury.registry.registries.RegistrySupplier; +import dev.ftb.mods.ftbquests.FTBQuests; import dev.ftb.mods.ftbquests.api.FTBQuestsAPI; import dev.ftb.mods.ftbquests.block.FTBQuestsBlocks; -import dev.ftb.mods.ftbquests.client.ClientQuestFile; import dev.ftb.mods.ftbquests.item.ScreenBlockItem.ScreenSize; import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; @@ -82,13 +82,7 @@ private static CreativeModeTab buildDefaultTab() { // base items, always present output.acceptAll(BASE_ITEMS.stream().map(item -> new ItemStack(item.get())).toList()); // dynamically add loot crates based on current reward tables - if (ClientQuestFile.exists()) { - ClientQuestFile.INSTANCE.getRewardTables().forEach(table -> { - if (table.getLootCrate() != null) { - output.accept(table.getLootCrate().createStack()); - } - }); - } + FTBQuests.PROXY.getKnownLootCrates().forEach(crate -> output.accept(crate.createStack())); }) ); } diff --git a/common/src/main/resources/assets/ftbquests/lang/en_us.json b/common/src/main/resources/assets/ftbquests/lang/en_us.json index 66736240..33675b78 100644 --- a/common/src/main/resources/assets/ftbquests/lang/en_us.json +++ b/common/src/main/resources/assets/ftbquests/lang/en_us.json @@ -216,6 +216,7 @@ "ftbquests.gui.line": "Add Text Line", "ftbquests.gui.image": "Add Image", "ftbquests.gui.edit": "Edit", + "ftbquests.gui.edit_quest_props": "Quest Properties", "ftbquests.gui.undo": "Undo", "ftbquests.gui.edit_linked_quest": "Edit Linked Quest", "ftbquests.gui.edit_file": "Edit File", diff --git a/gradle.properties b/gradle.properties index e870abd6..ed6fc389 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ mod_id=ftbquests archives_base_name=ftb-quests minecraft_version=1.20.1 # Build time -mod_version=2001.1.4 +mod_version=2001.1.5 maven_group=dev.ftb.mods mod_author=FTB Team # Curse release