From 3ca185abbc1d5454dd5a9f462c60498c2f690b39 Mon Sep 17 00:00:00 2001 From: Des Herriott Date: Thu, 29 Aug 2024 12:06:22 +0100 Subject: [PATCH 01/13] fix: resolve some Z-ordering issues in the quest gui In particular, block item icons with scaled up quests could end up rendering above gui layers that they shouldn't have... https://github.com/FTBTeam/FTB-Mods-Issues/issues/1320 --- .../mods/ftbquests/client/gui/ContextMenuBuilder.java | 2 +- .../mods/ftbquests/client/gui/quests/ChapterPanel.java | 9 ++++----- .../mods/ftbquests/client/gui/quests/QuestButton.java | 4 ++-- .../mods/ftbquests/client/gui/quests/QuestScreen.java | 9 +++++++++ 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/ContextMenuBuilder.java b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/ContextMenuBuilder.java index 7a23fb3b..02ae86db 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/ContextMenuBuilder.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/ContextMenuBuilder.java @@ -44,7 +44,7 @@ public ContextMenuBuilder insertAtBottom(Collection toAdd) { } public void openContextMenu(BaseScreen gui) { - gui.openContextMenu(build(gui)); + gui.openContextMenu(build(gui)).setExtraZlevel(QuestScreen.Z_LEVEL); } public List build(BaseScreen gui) { diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/ChapterPanel.java b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/ChapterPanel.java index 514c0a3d..9df7f371 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/ChapterPanel.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/ChapterPanel.java @@ -42,7 +42,6 @@ public class ChapterPanel extends Panel { public static final Icon ARROW_COLLAPSED = Icon.getIcon("ftbquests:textures/gui/arrow_collapsed.png"); public static final Icon ARROW_EXPANDED = Icon.getIcon("ftbquests:textures/gui/arrow_expanded.png"); - public static final int Z_LEVEL = 300; private static final Pattern NON_EMPTY_PAT = Pattern.compile("^.+$"); private final QuestScreen questScreen; @@ -140,7 +139,7 @@ public void drawBackground(GuiGraphics graphics, Theme theme, int x, int y, int @Override public void draw(GuiGraphics graphics, Theme theme, int x, int y, int w, int h) { graphics.pose().pushPose(); - graphics.pose().translate(0, 0, Z_LEVEL); + graphics.pose().translate(0, 0, QuestScreen.Z_LEVEL); RenderSystem.enableDepthTest(); super.draw(graphics, theme, x, y, w, h); graphics.pose().popPose(); @@ -209,7 +208,7 @@ public void onClicked(MouseButton button) { run(); }, b.getTitle()).atMousePosition(); overlay.setWidth(150); - overlay.setExtraZlevel(Z_LEVEL + 10); + overlay.setExtraZlevel(QuestScreen.Z_LEVEL + 10); getGui().pushModalPanel(overlay); })); @@ -226,7 +225,7 @@ public void onClicked(MouseButton button) { } }, b.getTitle()).atMousePosition(); overlay.setWidth(150); - overlay.setExtraZlevel(Z_LEVEL + 10); + overlay.setExtraZlevel(QuestScreen.Z_LEVEL + 10); getGui().pushModalPanel(overlay); })); @@ -311,7 +310,7 @@ public void onClicked(MouseButton button) { run(); }, Component.translatable("ftbquests.chapter")).atMousePosition(); overlay.setWidth(150); - overlay.setExtraZlevel(Z_LEVEL + 10); + overlay.setExtraZlevel(QuestScreen.Z_LEVEL + 10); getGui().pushModalPanel(overlay); return; diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/QuestButton.java b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/QuestButton.java index 3c7af854..aeec77e8 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/QuestButton.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/QuestButton.java @@ -402,7 +402,7 @@ public void draw(GuiGraphics graphics, Theme theme, int x, int y, int w, int h) if (!questIcon.isEmpty()) { int s = (int) (w / 8F * 3F); poseStack.pushPose(); - poseStack.translate(x + w - s, y, 0); + poseStack.translate(x + w - s, y, QuestScreen.Z_LEVEL); questIcon.draw(graphics, 0, 0, s, s); poseStack.popPose(); } @@ -410,7 +410,7 @@ public void draw(GuiGraphics graphics, Theme theme, int x, int y, int w, int h) if (!hiddenIcon.isEmpty()) { int s = (int) (w / 8F * 3F); poseStack.pushPose(); - poseStack.translate(x, y, 0); + poseStack.translate(x, y, QuestScreen.Z_LEVEL); hiddenIcon.draw(graphics, 0, 0, s, s); poseStack.popPose(); } 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 2a63c7ba..702345eb 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 @@ -42,6 +42,10 @@ import java.util.*; public class QuestScreen extends BaseScreen { + // A fairly large z-offset is needed to ensure various GUI elements render above drawn block items, + // which can extend quite some way out of the screen if the quest button is scaled up... + public static final int Z_LEVEL = 1250; + final ClientQuestFile file; double scrollWidth, scrollHeight; @@ -107,6 +111,11 @@ public boolean doesGuiPauseGame() { return ClientQuestFile.INSTANCE.isPauseGame(); } + @Override + public int getMaxZLevel() { + return Z_LEVEL + 100; + } + @Override public void addWidgets() { QuestTheme.currentObject = selectedChapter; From 34ff28ce8649d5442562a9d3b7fb07e285d8a26d Mon Sep 17 00:00:00 2001 From: Des Herriott Date: Tue, 15 Oct 2024 11:33:09 +0100 Subject: [PATCH 02/13] fix: some reworking of the reward table editor screen Related, reward table loot crate fixes https://github.com/FTBTeam/FTB-Mods-Issues/issues/1361 https://github.com/FTBTeam/FTB-Mods-Issues/issues/1345 https://github.com/FTBTeam/FTB-Mods-Issues/issues/1328 --- build.gradle | 7 ++ .../entity/LootCrateOpenerBlockEntity.java | 4 +- .../client/FTBQuestsClientEventHandler.java | 2 +- .../client/gui/EditRewardTableScreen.java | 12 ++ .../client/gui/RewardTablesScreen.java | 110 +++++++++++++----- .../gui/quests/OtherButtonsPanelBottom.java | 5 +- .../client/gui/quests/QuestScreen.java | 11 +- .../mods/ftbquests/item/LootCrateItem.java | 16 ++- .../ftbquests/net/DeleteObjectMessage.java | 5 + .../mods/ftbquests/quest/BaseQuestFile.java | 15 +-- .../mods/ftbquests/quest/loot/LootCrate.java | 13 ++- .../ftb/mods/ftbquests/registry/ModItems.java | 15 ++- .../assets/ftbquests/lang/en_us.json | 5 +- gradle.properties | 4 +- 14 files changed, 162 insertions(+), 62 deletions(-) diff --git a/build.gradle b/build.gradle index 39317fff..f473b0cc 100644 --- a/build.gradle +++ b/build.gradle @@ -13,6 +13,13 @@ subprojects { loom { silentMojangMappingsLicense() + + runs { + client { + vmArgs "-Xmx4G" + programArgs "--width", "1920", "--height", "1080" + } + } } dependencies { diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/block/entity/LootCrateOpenerBlockEntity.java b/common/src/main/java/dev/ftb/mods/ftbquests/block/entity/LootCrateOpenerBlockEntity.java index c2ef947b..b01d380d 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/block/entity/LootCrateOpenerBlockEntity.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/block/entity/LootCrateOpenerBlockEntity.java @@ -126,7 +126,7 @@ protected ItemStack _insertItem(int slot, ItemStack stack, boolean simulate) { return stack; } - LootCrate crate = LootCrateItem.getCrate(stack); + LootCrate crate = LootCrateItem.getCrate(stack, false); if (crate == null) { return stack; } @@ -160,7 +160,7 @@ protected ItemStack _insertItem(int slot, ItemStack stack, boolean simulate) { } protected boolean _isItemValid(int slot, ItemStack stack) { - return slot == 0 && LootCrateItem.getCrate(stack) != null; + return slot == 0 && LootCrateItem.getCrate(stack, level.isClientSide) != null; } protected ItemStack _extractItem(int slot, int amount, boolean simulate) { diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/client/FTBQuestsClientEventHandler.java b/common/src/main/java/dev/ftb/mods/ftbquests/client/FTBQuestsClientEventHandler.java index 3948d4b1..ae2c9d32 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/client/FTBQuestsClientEventHandler.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/client/FTBQuestsClientEventHandler.java @@ -111,7 +111,7 @@ public static BlockEntityRendererProvider taskScreenRende private void registerItemColors(Minecraft minecraft) { ColorHandlerRegistry.registerItemColors((stack, tintIndex) -> { - LootCrate crate = LootCrateItem.getCrate(stack); + LootCrate crate = LootCrateItem.getCrate(stack, true); return crate == null ? 0xFFFFFFFF : (0xFF000000 | crate.getColor().rgb()); }, ModItems.LOOTCRATE.get()); } diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/EditRewardTableScreen.java b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/EditRewardTableScreen.java index f1b3ed1f..08cc2952 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/EditRewardTableScreen.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/EditRewardTableScreen.java @@ -1,5 +1,6 @@ package dev.ftb.mods.ftbquests.client.gui; +import com.mojang.blaze3d.platform.InputConstants; import dev.ftb.mods.ftblibrary.config.ConfigGroup; import dev.ftb.mods.ftblibrary.config.DoubleConfig; import dev.ftb.mods.ftblibrary.config.ui.EditConfigScreen; @@ -100,6 +101,17 @@ protected void doAccept() { parentScreen.run(); } + public boolean keyPressed(Key key) { + if (super.keyPressed(key)) { + return true; + } else if ((key.is(InputConstants.KEY_RETURN) || key.is(InputConstants.KEY_NUMPADENTER)) && key.modifiers.shift()) { + this.doAccept(); + return true; + } else { + return false; + } + } + private class CustomTopPanel extends TopPanel { private final RewardTableSettingsButton settingsButton; private final AddWeightedRewardButton addButton; diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/RewardTablesScreen.java b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/RewardTablesScreen.java index 9e2348f8..378196e6 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/RewardTablesScreen.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/RewardTablesScreen.java @@ -14,6 +14,7 @@ import dev.ftb.mods.ftblibrary.ui.input.MouseButton; import dev.ftb.mods.ftblibrary.ui.misc.AbstractButtonListScreen; import dev.ftb.mods.ftblibrary.util.TooltipList; +import dev.ftb.mods.ftbquests.FTBQuests; import dev.ftb.mods.ftbquests.client.ClientQuestFile; import dev.ftb.mods.ftbquests.client.gui.quests.QuestScreen; import dev.ftb.mods.ftbquests.net.CreateObjectMessage; @@ -25,24 +26,31 @@ import dev.ftb.mods.ftbquests.quest.reward.RandomReward; import dev.ftb.mods.ftbquests.quest.translation.TranslationKey; import dev.ftb.mods.ftbquests.registry.ModItems; +import it.unimi.dsi.fastutil.ints.IntOpenHashSet; +import it.unimi.dsi.fastutil.ints.IntSet; import net.minecraft.ChatFormatting; import net.minecraft.Util; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.world.item.Items; import org.apache.commons.lang3.mutable.MutableInt; import org.jetbrains.annotations.NotNull; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.function.Function; import java.util.stream.Collectors; public class RewardTablesScreen extends AbstractButtonListScreen { private final QuestScreen questScreen; private final SimpleTextButton addButton; private final List rewardTablesCopy; // deep local copy of reward tables + private final IntSet editedIndexes = new IntOpenHashSet(); + private final IntSet pendingDeleteIndexes = new IntOpenHashSet(); private boolean changed = false; - private final Set editedTables = new HashSet<>(); public RewardTablesScreen(QuestScreen questScreen) { super(); @@ -79,8 +87,12 @@ public void onClicked(MouseButton button) { @Override public void addButtons(Panel panel) { - rewardTablesCopy.stream().sorted() - .forEach(table -> panel.add(new RewardTableButton(panel, table))); + List buttons = new ArrayList<>(); + for (int i = 0; i < rewardTablesCopy.size(); i++) { + RewardTable table = rewardTablesCopy.get(i); + buttons.add(new RewardTableButton(panel, table, i)); + } + panel.addAll(buttons.stream().sorted(Comparator.comparing(btn -> btn.table)).toList()); } @Override @@ -127,27 +139,46 @@ protected void doCancel() { @Override protected void doAccept() { - ClientQuestFile file = ClientQuestFile.INSTANCE; - Set toRemove = file.getRewardTables().stream().map(t -> t.id).collect(Collectors.toSet()); - - rewardTablesCopy.forEach(table -> { - if (table.getId() == 0L) { - // newly-created - CompoundTag extra = Util.make(new CompoundTag(), tag -> file.getTranslationManager().addInitialTranslation( - tag, file.getLocale(), TranslationKey.TITLE, table.getRawTitle()) - ); - NetworkManager.sendToServer(CreateObjectMessage.create(table, extra)); + IntSet toCreate = new IntOpenHashSet(); + for (int idx = 0; idx < rewardTablesCopy.size(); idx++) { + if (rewardTablesCopy.get(idx).getId() == 0L && !pendingDeleteIndexes.contains(idx)) { + toCreate.add(idx); } - toRemove.remove(table.getId()); - }); + } + editedIndexes.removeAll(pendingDeleteIndexes); - toRemove.forEach(id -> NetworkManager.sendToServer(new DeleteObjectMessage(id))); + int nAdded = sendToServer(toCreate, RewardTablesScreen::makeCreationPacket, true); + int nEdited = sendToServer(editedIndexes, EditObjectMessage::forQuestObject, false); + int nDeleted = sendToServer(pendingDeleteIndexes, DeleteObjectMessage::forQuestObject, false); - editedTables.forEach(table -> NetworkManager.sendToServer(EditObjectMessage.forQuestObject(table))); + FTBQuests.LOGGER.debug("Sent {} new, {} edited, {} deleted reward tables to server", nAdded, nEdited, nDeleted); questScreen.run(); } + private static CreateObjectMessage makeCreationPacket(RewardTable table) { + ClientQuestFile file = ClientQuestFile.INSTANCE; + CompoundTag extra = Util.make(new CompoundTag(), tag -> file.getTranslationManager().addInitialTranslation( + tag, file.getLocale(), TranslationKey.TITLE, table.getRawTitle()) + ); + return CreateObjectMessage.create(table, extra); + } + + private int sendToServer(IntSet indexes, Function func, boolean addNew) { + int sent = 0; + for (int idx : indexes) { + if (idx >= 0 && idx < rewardTablesCopy.size()) { + RewardTable table = rewardTablesCopy.get(idx); + if (addNew && table.id == 0 || !addNew && table.id != 0) { + // id == 0 means table is only locally added, no need to sync an edit/delete for it + NetworkManager.sendToServer(func.apply(table)); + sent++; + } + } + } + return sent; + } + private class CustomTopPanel extends TopPanel { @Override public void addWidgets() { @@ -169,11 +200,13 @@ public void draw(GuiGraphics graphics, Theme theme, int x, int y, int w, int h) private class RewardTableButton extends SimpleTextButton { private final RewardTable table; + private final int idx; - public RewardTableButton(Panel panel, RewardTable table) { + public RewardTableButton(Panel panel, RewardTable table, int idx) { super(panel, table.getTitle(), table.getIcon()); this.table = table; + this.idx = idx; setHeight(16); if (this.table.getLootCrate() != null) { @@ -199,7 +232,7 @@ public void onClicked(MouseButton button) { List menu = List.of( new ContextMenuItem(Component.translatable("ftbquests.gui.edit"), ItemIcon.getItemIcon(Items.FEATHER), b -> editRewardTable()), - new ContextMenuItem(Component.translatable("gui.remove"), Icons.BIN, + new ContextMenuItem(Component.translatable(pendingDeleteIndexes.contains(idx) ? "ftbquests.gui.restore" : "gui.remove"), Icons.BIN, b -> deleteRewardTable()), new ContextMenuItem(getLootCrateText(), ItemIcon.getItemIcon(ModItems.LOOTCRATE.get()), b -> toggleLootCrate()) @@ -214,25 +247,43 @@ public void drawBackground(GuiGraphics graphics, Theme theme, int x, int y, int ItemIcon.getItemIcon(ModItems.LOOTCRATE.get()).draw(graphics, x + w - 26, y + 2, 12, 12); Icons.BIN.draw(graphics, x + w - 13, y + 2, 12, 12); } + if (pendingDeleteIndexes.contains(idx)) { + Color4I.RED.withAlpha(64).draw(graphics, x, y, w, h); + } else if (rewardTablesCopy.get(idx).getId() == 0) { + Color4I.GREEN.withAlpha(64).draw(graphics, x, y, w, h); + } Color4I.GRAY.withAlpha(40).draw(graphics, x, y + h, w, 1); } + @Override + public void draw(GuiGraphics graphics, Theme theme, int x, int y, int w, int h) { + super.draw(graphics, theme, x, y, w, h); + + if (pendingDeleteIndexes.contains(idx)) { + Color4I.GRAY.draw(graphics, x + 20, y + h / 2, theme.getStringWidth(title), 1); + } else if (rewardTablesCopy.get(idx).getId() == 0) { + Icons.ADD.draw(graphics, x + 24 + theme.getStringWidth(title), y + 2, 12, 12); + } + } + private void editRewardTable() { new EditRewardTableScreen(RewardTablesScreen.this, table, editedReward -> { - rewardTablesCopy.replaceAll(t -> t.getId() == editedReward.id ? editedReward : t); + rewardTablesCopy.set(idx, editedReward); changed = true; - editedTables.add(editedReward); + editedIndexes.add(idx); editedReward.clearCachedData(); refreshWidgets(); }).openGui(); } private void deleteRewardTable() { - openYesNo(Component.translatable("delete_item", table.getTitle()), Component.empty(), () -> { - rewardTablesCopy.removeIf(t -> t == table); - changed = true; - refreshWidgets(); - }); + if (pendingDeleteIndexes.contains(idx)) { + pendingDeleteIndexes.remove(idx); + } else { + pendingDeleteIndexes.add(idx); + } + changed = true; + refreshWidgets(); } private void toggleLootCrate() { @@ -245,6 +296,7 @@ private void toggleLootCrate() { } changed = true; + editedIndexes.add(idx); refreshWidgets(); } @@ -253,7 +305,7 @@ public void addMouseOverText(TooltipList list) { super.addMouseOverText(list); if (getMouseX() > getX() + width - 13) { - list.add(Component.translatable("gui.remove")); + list.add(Component.translatable(pendingDeleteIndexes.contains(idx) ? "ftbquests.gui.restore" : "gui.remove")); } else if (getMouseX() > getX() + width - 26) { list.add(getLootCrateText()); } else { @@ -269,7 +321,7 @@ public void addMouseOverText(TooltipList list) { @NotNull private Component getLootCrateText() { - return Component.translatable("ftbquests.reward_table." + + return Component.translatable("ftbquests.reward_table." + (table.getLootCrate() != null ? "disable_loot_crate" : "enable_loot_crate")); } } diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/OtherButtonsPanelBottom.java b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/OtherButtonsPanelBottom.java index bb344429..e154f917 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/OtherButtonsPanelBottom.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/OtherButtonsPanelBottom.java @@ -18,6 +18,7 @@ import dev.ftb.mods.ftbquests.quest.task.StructureTask; import dev.ftb.mods.ftbquests.quest.theme.ThemeLoader; import dev.ftb.mods.ftbquests.quest.theme.property.ThemeProperties; +import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.network.chat.ClickEvent; import net.minecraft.network.chat.Component; @@ -118,8 +119,8 @@ public void onClicked(MouseButton button) { b -> ChangeProgressMessage.sendToServer(questScreen.file.selfTeamData, questScreen.file, progressChange -> progressChange.setReset(false))) .setYesNoText(Component.translatable("ftbquests.gui.complete_instantly_q"))); - contextMenu.add(new ContextMenuItem(Component.translatable("ftbquests.reward_tables"), ThemeProperties.REWARD_TABLE_ICON.get(), - b -> new RewardTablesScreen(questScreen).openGui())); + contextMenu.add(new TooltipContextMenuItem(Component.translatable("ftbquests.reward_tables"), ThemeProperties.REWARD_TABLE_ICON.get(), + b -> new RewardTablesScreen(questScreen).openGui(), Component.literal("[Ctrl + T]").withStyle(ChatFormatting.DARK_GRAY))); contextMenu.add(new ContextMenuItem(Component.translatable("ftbquests.gui.save_on_server"), ThemeProperties.SAVE_ICON.get(), b -> NetworkManager.sendToServer(ForceSaveMessage.INSTANCE))); contextMenu.add(new ContextMenuItem(Component.translatable("ftbquests.gui.save_as_file"), ThemeProperties.DOWNLOAD_ICON.get(), 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 702345eb..be14412b 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 @@ -18,6 +18,7 @@ import dev.ftb.mods.ftbquests.client.FTBQuestsClient; import dev.ftb.mods.ftbquests.client.gui.CustomToast; import dev.ftb.mods.ftbquests.client.gui.FTBQuestsTheme; +import dev.ftb.mods.ftbquests.client.gui.RewardTablesScreen; import dev.ftb.mods.ftbquests.client.gui.SelectQuestObjectScreen; import dev.ftb.mods.ftbquests.net.*; import dev.ftb.mods.ftbquests.quest.*; @@ -266,11 +267,11 @@ public void addObjectMenuItems(List contextMenu, Runnable gui, }; if (selectedChapter != null) { if (selectedChapter.isAutofocus(object.id)) { - contextMenu.add(new ContextMenuItem(Component.translatable("ftbquest.gui.clear_autofocused"), + contextMenu.add(new ContextMenuItem(Component.translatable("ftbquests.gui.clear_autofocused"), Icons.MARKER, b -> setAutofocusedId(0L))); } else if (object instanceof Quest || object instanceof QuestLink) { - contextMenu.add(new ContextMenuItem(Component.translatable("ftbquest.gui.set_autofocused"), + contextMenu.add(new ContextMenuItem(Component.translatable("ftbquests.gui.set_autofocused"), Icons.MARKER, b -> setAutofocusedId(object.id))); } @@ -538,6 +539,12 @@ public boolean keyPressed(Key key) { return pasteSelectedQuest(!key.modifiers.shift()); } } + case GLFW.GLFW_KEY_T -> { + if (key.modifiers.control()) { + new RewardTablesScreen(this).openGui(); + return true; + } + } } } diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/item/LootCrateItem.java b/common/src/main/java/dev/ftb/mods/ftbquests/item/LootCrateItem.java index 0b42e093..aa0d237d 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/item/LootCrateItem.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/item/LootCrateItem.java @@ -1,5 +1,6 @@ package dev.ftb.mods.ftbquests.item; +import dev.architectury.platform.Platform; import dev.ftb.mods.ftbquests.FTBQuests; import dev.ftb.mods.ftbquests.client.ClientQuestFile; import dev.ftb.mods.ftbquests.client.gui.RewardNotificationsScreen; @@ -42,16 +43,21 @@ public LootCrateItem() { } @Nullable - public static LootCrate getCrate(ItemStack stack) { + public static LootCrate getCrate(ItemStack stack, boolean isClientSide) { return FTBQuests.getComponent(stack, ModDataComponents.LOOT_CRATE) - .map(type -> LootCrate.LOOT_CRATES.get(type)) + .map(type -> LootCrate.getLootCrates(isClientSide).get(type)) .orElse(null); } + @Nullable + public static LootCrate getCrate(ItemStack stack) { + return getCrate(stack, Platform.getEnv() == EnvType.CLIENT); + } + @Override public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); - LootCrate crate = getCrate(stack); + LootCrate crate = getCrate(stack, player.level().isClientSide); if (crate == null) { return new InteractionResultHolder<>(InteractionResult.FAIL, stack); @@ -87,7 +93,7 @@ public InteractionResultHolder use(Level world, Player player, Intera @Override public boolean isFoil(ItemStack stack) { - LootCrate crate = getCrate(stack); + LootCrate crate = getCrate(stack, true); return crate != null && crate.isGlow(); } @@ -104,7 +110,7 @@ public void appendHoverText(ItemStack stack, TooltipContext context, List type() { return TYPE; diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/quest/BaseQuestFile.java b/common/src/main/java/dev/ftb/mods/ftbquests/quest/BaseQuestFile.java index a9765c84..eb1f0479 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/quest/BaseQuestFile.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/quest/BaseQuestFile.java @@ -791,22 +791,23 @@ private void handleLegacyTaskNBT(Task task, CompoundTag taskNBT) { } public void updateLootCrates() { - Set prevCrateNames = new HashSet<>(LootCrate.LOOT_CRATES.keySet()); - Collection oldStacks = LootCrate.allCrateStacks(); + Map lootCrates = LootCrate.getLootCrates(!isServerSide()); + Set prevCrateNames = new HashSet<>(lootCrates.keySet()); + Collection oldStacks = LootCrate.allCrateStacks(!isServerSide()); - LootCrate.LOOT_CRATES.clear(); + lootCrates.clear(); for (RewardTable table : rewardTables) { if (table.getLootCrate() != null) { - LootCrate.LOOT_CRATES.put(table.getLootCrate().getStringID(), table.getLootCrate()); + lootCrates.put(table.getLootCrate().getStringID(), table.getLootCrate()); } } - if (!isServerSide() && !prevCrateNames.equals(LootCrate.LOOT_CRATES.keySet())) { + if (!isServerSide() && !prevCrateNames.equals(lootCrates.keySet())) { FTBQuestsClient.rebuildCreativeTabs(); - FTBQuests.getRecipeModHelper().updateItemsDynamic(oldStacks, LootCrate.allCrateStacks()); + FTBQuests.getRecipeModHelper().updateItemsDynamic(oldStacks, LootCrate.allCrateStacks(!isServerSide())); } - FTBQuests.LOGGER.debug("Updated loot crates (was {}, now {})", prevCrateNames.size(), LootCrate.LOOT_CRATES.size()); + FTBQuests.LOGGER.debug("Updated loot crates (was {}, now {})", prevCrateNames.size(), lootCrates.size()); } public void markDirty() { diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/quest/loot/LootCrate.java b/common/src/main/java/dev/ftb/mods/ftbquests/quest/loot/LootCrate.java index 67ace2a5..6a380f07 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/quest/loot/LootCrate.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/quest/loot/LootCrate.java @@ -20,14 +20,15 @@ public final class LootCrate { private static final Pattern NON_ALPHANUM = Pattern.compile("[^a-z0-9_]"); private static final Pattern MULTI_UNDERSCORE = Pattern.compile("_{2,}"); - public static Map LOOT_CRATES = new LinkedHashMap<>(); + private static final Map LOOT_CRATES_CLIENT = new LinkedHashMap<>(); + private static final Map LOOT_CRATES_SERVER = new LinkedHashMap<>(); private final RewardTable table; private String stringID; private String itemName = ""; private Color4I color = Color4I.WHITE; private boolean glow = false; - private EntityWeight drops = new EntityWeight(); + private final EntityWeight drops = new EntityWeight(); public LootCrate(RewardTable table, boolean initFromTable) { this.table = table; @@ -39,6 +40,10 @@ public LootCrate(RewardTable table, boolean initFromTable) { } } + public static Map getLootCrates(boolean isClient) { + return isClient ? LOOT_CRATES_CLIENT : LOOT_CRATES_SERVER; + } + public void initFromTable() { stringID = buildStringID(table); Defaults def = Defaults.NAME_MAP.getNullable(stringID); @@ -142,8 +147,8 @@ public ItemStack createStack() { return stack; } - public static Collection allCrateStacks() { - return LOOT_CRATES.values().stream().map(LootCrate::createStack).toList(); + public static Collection allCrateStacks(boolean isClientSide) { + return getLootCrates(isClientSide).values().stream().map(LootCrate::createStack).toList(); } private enum Defaults { diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/registry/ModItems.java b/common/src/main/java/dev/ftb/mods/ftbquests/registry/ModItems.java index 5565fdcc..0f596e47 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/registry/ModItems.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/registry/ModItems.java @@ -8,6 +8,7 @@ import dev.ftb.mods.ftbquests.api.FTBQuestsAPI; import dev.ftb.mods.ftbquests.item.*; import dev.ftb.mods.ftbquests.item.ScreenBlockItem.ScreenSize; +import dev.ftb.mods.ftbquests.quest.loot.LootCrate; import net.minecraft.core.registries.Registries; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; @@ -16,7 +17,6 @@ import java.util.List; import java.util.function.Supplier; -import java.util.stream.Stream; public class ModItems { public static final DeferredRegister ITEMS = DeferredRegister.create(FTBQuestsAPI.MOD_ID, Registries.ITEM); @@ -68,11 +68,14 @@ public static void register() { CreativeTabRegistry.appendStack(FTBLibrary.getCreativeModeTab(), BASE_ITEMS.stream().map(item -> () -> new ItemStack(item.get()))); - Stream> lootCreates = FTBQuests.PROXY.getKnownLootCrates() - .stream() - .map(crate -> crate::createStack); - - CreativeTabRegistry.appendStack(FTBLibrary.getCreativeModeTab(), lootCreates); + CreativeTabRegistry.modify(FTBLibrary.getCreativeModeTab(), (flags, output, canUseGameMasterBlocks) -> { + var stacks = FTBQuests.PROXY.getKnownLootCrates() + .stream() + .map(LootCrate::createStack) + .filter(stack -> !stack.isEmpty()) + .toList(); + output.acceptAllAfter(BASE_ITEMS.getLast().get(), stacks); + }); } public static Item.Properties defaultProps() { 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 4a18e40f..33654d56 100644 --- a/common/src/main/resources/assets/ftbquests/lang/en_us.json +++ b/common/src/main/resources/assets/ftbquests/lang/en_us.json @@ -312,8 +312,9 @@ "ftbquests.gui.confirm_esc": "Discard Unsaved Changes?", "ftbquests.gui.key_reference.player": "General Controls\n-;Zoom out\n+;Zoom in\n0;Reset Zoom\nTab;Next Chapter\nShift + Tab;Previous Chapter\n1 - 9;Go to Chapter\nSpace;Recenter View\nCtrl + F;Search\nF1;While hovering quest, show extended info\nLeft Mouse;View Quest Details\nMouse Wheel;Scroll Up/Down\nShift + Mouse Wheel;Scroll Left/Right\nCtrl + Mouse Wheel;Zoom In/Out", "ftbquests.gui.key_reference.editor": "Editor Mode\nCtrl + Left Mouse;Toggle Selection\nMiddle Mouse;Move Selected Quest(s)\nRight Mouse;Context Menu\nMiddle Mouse: Drag;Select Quests in Drag Box\nCtrl + Middle Mouse: Drag;Toggle Selection in Box\nCtrl + A;Select All\nCtrl + D;Select None\nCtrl + Up/Down/Left/Right;Move Selected Quests\nCtrl + R;Toggle Crosshairs\nCtrl + C;Copy Selected/Hovered Object\nCtrl + V;Paste Selection\nCtrl + Shift + V;Paste Quest (no dependencies)\nCtrl + Alt + V;Paste as Quest Link\n\nQuest View Panel\nT;Edit Quest Title\nS;Edit Quest Subtitle\nD;Edit Quest Description", - "ftbquest.gui.set_autofocused": "Set as Autofocused Quest", - "ftbquest.gui.clear_autofocused": "Clear Autofocused Quest", + "ftbquests.gui.set_autofocused": "Set as Autofocused Quest", + "ftbquests.gui.clear_autofocused": "Clear Autofocused Quest", + "ftbquests.gui.restore": "Restore", "ftbquests.task": "Task", "ftbquests.tasks": "Tasks", "ftbquests.task.completed": "Task completed!", diff --git a/gradle.properties b/gradle.properties index 1837b34d..248707a5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,7 +15,7 @@ minecraft_version=1.21.1 # Cross env #forge_version=50.0.9 #forge_loader_version=49 -neoforge_version=21.1.9 +neoforge_version=21.1.69 neoforge_version_range=[21.1.0,) neoforge_loader_version=4 fabric_loader_version=0.15.11 @@ -23,7 +23,7 @@ fabric_api_version=0.100.8+1.21 fabric_api_version_range=>=0.100.1+1.21 architectury_api_version=13.0.6 -ftb_library_version=2101.1.1 +ftb_library_version=2101.1.4-SNAPSHOT ftb_teams_version=2101.1.0 # Optional deps From 8865dafe4cf506ea51db6ea9c85f8b0edd20a843 Mon Sep 17 00:00:00 2001 From: Des Herriott Date: Thu, 17 Oct 2024 09:20:09 +0100 Subject: [PATCH 03/13] fix: tweaked context menu Z-levels a bit Fixes tooltips sometimes appearing behind context menus --- .../dev/ftb/mods/ftbquests/client/gui/ContextMenuBuilder.java | 2 +- .../dev/ftb/mods/ftbquests/client/gui/quests/QuestPanel.java | 2 +- .../dev/ftb/mods/ftbquests/client/gui/quests/QuestScreen.java | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/ContextMenuBuilder.java b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/ContextMenuBuilder.java index 02ae86db..a938a54e 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/ContextMenuBuilder.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/ContextMenuBuilder.java @@ -44,7 +44,7 @@ public ContextMenuBuilder insertAtBottom(Collection toAdd) { } public void openContextMenu(BaseScreen gui) { - gui.openContextMenu(build(gui)).setExtraZlevel(QuestScreen.Z_LEVEL); + gui.openContextMenu(build(gui)).setExtraZlevel(900); } public List build(BaseScreen gui) { diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/QuestPanel.java b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/QuestPanel.java index 18cdc020..a1401e4c 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/QuestPanel.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/QuestPanel.java @@ -507,7 +507,7 @@ public boolean mousePressed(MouseButton button) { }); } - questScreen.openContextMenu(contextMenu); + questScreen.openContextMenu(contextMenu).setExtraZlevel(900); return true; } 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 be14412b..a6ff6e76 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 @@ -45,7 +45,8 @@ public class QuestScreen extends BaseScreen { // A fairly large z-offset is needed to ensure various GUI elements render above drawn block items, // which can extend quite some way out of the screen if the quest button is scaled up... - public static final int Z_LEVEL = 1250; + // Note: can't be larger than this, apparently, or tooltips end up underneath + public static final int Z_LEVEL = 900; final ClientQuestFile file; From e548fe5b8298c2291e3b232c124f6ab3d3fcf0c3 Mon Sep 17 00:00:00 2001 From: Des Herriott Date: Thu, 17 Oct 2024 09:23:08 +0100 Subject: [PATCH 04/13] build: version -> 2101.1.1, changelog updated --- CHANGELOG.md | 6 ++++++ gradle.properties | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e93e33c..c25802a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ 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). +# [2101.1.1] + +### Fixed +* Fixed context menu tooltips sometimes appearing behind the context menu +* Fixed some issues with the reward table editor GUI (changes not getting correctly sync'd to server in some cases) + # [2101.1.0] ### Changed diff --git a/gradle.properties b/gradle.properties index 248707a5..ba678b32 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ maven_group=dev.ftb.mods mod_author=FTB Team # Build time -mod_version=2101.1.0 +mod_version=2101.1.1 minecraft_version=1.21.1 # Cross env @@ -23,7 +23,7 @@ fabric_api_version=0.100.8+1.21 fabric_api_version_range=>=0.100.1+1.21 architectury_api_version=13.0.6 -ftb_library_version=2101.1.4-SNAPSHOT +ftb_library_version=2101.1.4 ftb_teams_version=2101.1.0 # Optional deps From b8a8fe722f72cacd98087cefdcc0f68f29e91a5e Mon Sep 17 00:00:00 2001 From: Des Herriott Date: Thu, 17 Oct 2024 10:08:10 +0100 Subject: [PATCH 05/13] feat: pinned quests panel now has a title https://github.com/FTBTeam/FTB-Mods-Issues/issues/1339 --- .../client/FTBQuestsClientEventHandler.java | 577 +++++++++--------- .../assets/ftbquests/lang/en_us.json | 1 + 2 files changed, 292 insertions(+), 286 deletions(-) diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/client/FTBQuestsClientEventHandler.java b/common/src/main/java/dev/ftb/mods/ftbquests/client/FTBQuestsClientEventHandler.java index ae2c9d32..4b17d8dd 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/client/FTBQuestsClientEventHandler.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/client/FTBQuestsClientEventHandler.java @@ -58,290 +58,295 @@ import static dev.ftb.mods.ftbquests.client.TaskScreenRenderer.*; public class FTBQuestsClientEventHandler { - private static final ResourceLocation QUESTS_BUTTON = FTBQuestsAPI.rl("quests"); - - static boolean creativeTabRebuildPending = false; - - private List observationTasks = null; - private ObservationTask currentlyObserving = null; - private long currentlyObservingTicks = 0L; - private final List pinnedQuestText = new ArrayList<>(); - - public static TextureAtlasSprite inputOnlySprite; - public static TextureAtlasSprite tankSprite; - public static TextureAtlasSprite feEnergyEmptySprite; - public static TextureAtlasSprite feEnergyFullSprite; - public static TextureAtlasSprite trEnergyEmptySprite; - public static TextureAtlasSprite trEnergyFullSprite; - - public void init() { - ClientLifecycleEvent.CLIENT_SETUP.register(this::registerItemColors); - ClientLifecycleEvent.CLIENT_SETUP.register(this::registerBERs); - SidebarButtonCreatedEvent.EVENT.register(this::onSidebarButtonCreated); - ClearFileCacheEvent.EVENT.register(this::onFileCacheClear); - ClientTickEvent.CLIENT_PRE.register(this::onKeyEvent); - CustomClickEvent.EVENT.register(this::onCustomClick); - ClientTickEvent.CLIENT_PRE.register(this::onClientTick); - ClientGuiEvent.RENDER_HUD.register(this::onScreenRender); - ClientPlayerEvent.CLIENT_PLAYER_JOIN.register(this::onPlayerLogin); - ClientPlayerEvent.CLIENT_PLAYER_QUIT.register(this::onPlayerLogout); - } - - // Note: Architectury doesn't have a texture stitch post event anymore, - // so this is handled by the Forge/NeoForge events, and a mixin on Fabric - public static void onTextureStitchPost(TextureAtlas textureAtlas) { - if (textureAtlas.location().equals(InventoryMenu.BLOCK_ATLAS)) { - inputOnlySprite = textureAtlas.getSprite(INPUT_ONLY_TEXTURE); - tankSprite = textureAtlas.getSprite(TANK_TEXTURE); - feEnergyEmptySprite = textureAtlas.getSprite(FE_ENERGY_EMPTY_TEXTURE); - feEnergyFullSprite = textureAtlas.getSprite(FE_ENERGY_FULL_TEXTURE); - trEnergyEmptySprite = textureAtlas.getSprite(TR_ENERGY_EMPTY_TEXTURE); - trEnergyFullSprite = textureAtlas.getSprite(TR_ENERGY_FULL_TEXTURE); - } - } - - private void registerBERs(Minecraft minecraft) { - BlockEntityRendererRegistry.register(ModBlockEntityTypes.CORE_TASK_SCREEN.get(), taskScreenRenderer()); - } - - @ExpectPlatform - public static BlockEntityRendererProvider taskScreenRenderer() { - throw new AssertionError(); - } - - private void registerItemColors(Minecraft minecraft) { - ColorHandlerRegistry.registerItemColors((stack, tintIndex) -> { - LootCrate crate = LootCrateItem.getCrate(stack, true); - return crate == null ? 0xFFFFFFFF : (0xFF000000 | crate.getColor().rgb()); - }, ModItems.LOOTCRATE.get()); - } - - private void onSidebarButtonCreated(SidebarButtonCreatedEvent event) { - if (event.getButton().getId().equals(QUESTS_BUTTON)) { - event.getButton().addOverlayRender(ButtonOverlayRender.ofSimpleString(() -> - { - if (ClientQuestFile.exists()) { - if (ClientQuestFile.INSTANCE.isDisableGui() && !ClientQuestFile.INSTANCE.canEdit()) { - return "[X]"; - } else if (ClientQuestFile.INSTANCE.selfTeamData.isLocked()) { - return "[X]"; - } else if (ClientQuestFile.INSTANCE.selfTeamData.hasUnclaimedRewards(Minecraft.getInstance().player.getUUID(), ClientQuestFile.INSTANCE)) { - return "[!]"; - } - } - - return ""; - })); - } - } - - private void onFileCacheClear(BaseQuestFile file) { - if (!file.isServerSide()) { - observationTasks = null; - } - } - - private void onKeyEvent(Minecraft mc) { - if (ClientQuestFile.exists() - && (!ClientQuestFile.INSTANCE.isDisableGui() || ClientQuestFile.INSTANCE.canEdit()) - && FTBQuestsClient.KEY_QUESTS.consumeClick()) - { - ClientQuestFile.openGui(); - } - } - - private EventResult onCustomClick(CustomClickEvent event) { - if (event.id().getNamespace().equals(FTBQuestsAPI.MOD_ID) && "open_gui".equals(event.id().getPath())) { - // to be safe, we close the current screen before opening Quests, to avoid potential gui open-close loops with other mods - // also save the cursor position and restore it after, since closing the screen will reset to the centre - double mx = Minecraft.getInstance().mouseHandler.xpos(); - double my = Minecraft.getInstance().mouseHandler.ypos(); - Minecraft.getInstance().setScreen(null); - if (ClientQuestFile.openGui() != null) { - InputConstants.grabOrReleaseMouse(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_CURSOR_NORMAL, mx, my); - } - return EventResult.interruptFalse(); - } - - return EventResult.pass(); - } - - private void onClientTick(Minecraft mc) { - if (mc.level != null && ClientQuestFile.exists() && mc.player != null) { - collectPinnedQuests(ClientQuestFile.INSTANCE); - - if (observationTasks == null) { - observationTasks = ClientQuestFile.INSTANCE.collect(ObservationTask.class); - } - - if (observationTasks.isEmpty()) { - return; - } - - currentlyObserving = null; - - TeamData selfTeamData = ClientQuestFile.INSTANCE.selfTeamData; - if (mc.hitResult != null && mc.hitResult.getType() != HitResult.Type.MISS) { - for (ObservationTask task : observationTasks) { - if (!selfTeamData.isCompleted(task) && task.observe(mc.player, mc.hitResult) - && selfTeamData.canStartTasks(task.getQuest())) { - currentlyObserving = task; - break; - } - } - } - - if (currentlyObserving != null) { - if (!mc.isPaused()) { - currentlyObservingTicks++; - } - - if (currentlyObservingTicks >= currentlyObserving.getTimer()) { - NetworkManager.sendToServer(new SubmitTaskMessage(currentlyObserving.id)); - selfTeamData.addProgress(currentlyObserving, 1L); - currentlyObserving = null; - currentlyObservingTicks = 0L; - } - } else { - currentlyObservingTicks = 0L; - } - } - } - - private void onPlayerLogin(LocalPlayer localPlayer) { - if (creativeTabRebuildPending) { - FTBQuestsClient.rebuildCreativeTabs(); - creativeTabRebuildPending = false; - } - - String locale = FTBQuestsClientConfig.EDITING_LOCALE.get(); - if (!locale.isEmpty() && !locale.equals(Minecraft.getInstance().options.languageCode)) { - NetworkManager.sendToServer(new RequestTranslationTableMessage(locale)); - } - } - - private void onPlayerLogout(@Nullable LocalPlayer localPlayer) { - StructureTask.syncKnownStructureList(List.of()); - } - - private void collectPinnedQuests(ClientQuestFile file) { - TeamData data = file.selfTeamData; - - List pinnedQuests = new ArrayList<>(); - LongSet pinnedIds = data.getPinnedQuestIds(FTBQuestsClient.getClientPlayer()); - if (!pinnedIds.isEmpty()) { - if (pinnedIds.contains(TeamData.AUTO_PIN_ID)) { - // special auto-pin value: collect all quests which can be done now - file.forAllQuests(quest -> { - if (!data.isCompleted(quest) && data.canStartTasks(quest)) { - pinnedQuests.add(quest); - } - }); - } else { - pinnedIds.longStream() - .mapToObj(file::getQuest) - .filter(Objects::nonNull) - .forEach(pinnedQuests::add); - } - } - - Minecraft mc = Minecraft.getInstance(); - - pinnedQuestText.clear(); - - for (int i = 0; i < pinnedQuests.size(); i++) { - Quest quest = pinnedQuests.get(i); - - if (i > 0) pinnedQuestText.add(FormattedCharSequence.EMPTY); // separator line between quests - - pinnedQuestText.addAll(mc.font.split(FormattedText.composite( - mc.font.getSplitter().headByWidth(quest.getTitle(), 160, Style.EMPTY.withBold(true)), - Component.literal(" ") - .withStyle(ChatFormatting.DARK_AQUA) - .append(data.getRelativeProgress(quest) + "%") - ), 500)); - - for (Task task : quest.getTasks()) { - if (!data.isCompleted(task)) { - pinnedQuestText.addAll(mc.font.split(FormattedText.composite( - mc.font.getSplitter().headByWidth(task.getMutableTitle().withStyle(ChatFormatting.GRAY), 160, Style.EMPTY.applyFormat(ChatFormatting.GRAY)), - Component.literal(" ") - .withStyle(ChatFormatting.GREEN) - .append(task.formatProgress(data, data.getProgress(task))) - .append("/") - .append(task.formatMaxProgress()) - ), 500)); - } - } - } - - } - - private void onScreenRender(GuiGraphics graphics, DeltaTracker tickDelta) { - if (!ClientQuestFile.exists()) { - return; - } - - if (currentlyObserving != null) { - renderCurrentlyObserving(Minecraft.getInstance(), graphics, tickDelta); - } - - if (!pinnedQuestText.isEmpty()) { - renderPinnedQuestPanel(Minecraft.getInstance(), graphics); - } - } - - private void renderCurrentlyObserving(Minecraft mc, GuiGraphics graphics, DeltaTracker tickDelta) { - int cx = mc.getWindow().getGuiScaledWidth() / 2; - int cy = mc.getWindow().getGuiScaledHeight() / 2; - - MutableComponent txt = currentlyObserving.getMutableTitle().withStyle(ChatFormatting.YELLOW, ChatFormatting.UNDERLINE); - int txtWidth = mc.font.width(txt); - int boxWidth = Math.max(txtWidth, 100); - - Color4I.DARK_GRAY.withAlpha(130).draw(graphics, cx - boxWidth / 2 - 3, cy - 63, boxWidth + 6, 29); - GuiHelper.drawHollowRect(graphics, cx - boxWidth / 2 - 3, cy - 63, boxWidth + 6, 29, Color4I.DARK_GRAY, false); - - graphics.drawString(mc.font, txt, cx - txtWidth / 2, cy - 60, 0xFFFFFF); - double completed = (currentlyObservingTicks + tickDelta.getGameTimeDeltaPartialTick(false)) / (double) currentlyObserving.getTimer(); - - GuiHelper.drawHollowRect(graphics, cx - boxWidth / 2, cy - 49, boxWidth, 12, Color4I.DARK_GRAY, false); - Color4I.LIGHT_BLUE.withAlpha(130).draw(graphics, cx - boxWidth / 2 + 1, cy - 48, (int) ((boxWidth - 2D) * completed), 10); - - String pctTxt = (currentlyObservingTicks * 100L / currentlyObserving.getTimer()) + "%"; - graphics.drawString(mc.font, pctTxt, cx - mc.font.width(pctTxt) / 2, cy - 47, 0xFFFFFF); - } - - private void renderPinnedQuestPanel(Minecraft mc, GuiGraphics graphics) { - int width = 0; - for (FormattedCharSequence s : pinnedQuestText) { - width = Math.max(width, (int) mc.font.getSplitter().stringWidth(s)); - } - width += 8; - int height = mc.font.lineHeight * pinnedQuestText.size() + 8; - - float scale = ThemeProperties.PINNED_QUEST_SIZE.get(ClientQuestFile.INSTANCE).floatValue(); - - int insetX = FTBQuestsClientConfig.PINNED_QUESTS_INSET_X.get(); - int insetY = FTBQuestsClientConfig.PINNED_QUESTS_INSET_Y.get(); - var pos = FTBQuestsClientConfig.PINNED_QUESTS_POS.get().getPanelPos( - mc.getWindow().getGuiScaledWidth(), mc.getWindow().getGuiScaledHeight(), - (int) (width * scale), (int) (height * scale), - insetX, insetY - ); - - graphics.pose().pushPose(); - graphics.pose().translate(pos.x(), pos.y(), 100); - graphics.pose().scale(scale, scale, 1F); - - GuiHelper.drawHollowRect(graphics, 0, 0, width, height, Color4I.BLACK.withAlpha(100), false); - Color4I.BLACK.withAlpha(100).draw(graphics, 0, 0, width, height); - - graphics.pose().translate(4, 4, 0); - for (int i = 0; i < pinnedQuestText.size(); i++) { - graphics.drawString(mc.font, pinnedQuestText.get(i), 0, i * mc.font.lineHeight, 0xFFFFFFFF); - } - - graphics.pose().popPose(); - } + private static final ResourceLocation QUESTS_BUTTON = FTBQuestsAPI.rl("quests"); + + static boolean creativeTabRebuildPending = false; + + private List observationTasks = null; + private ObservationTask currentlyObserving = null; + private long currentlyObservingTicks = 0L; + private final List pinnedQuestText = new ArrayList<>(); + + public static TextureAtlasSprite inputOnlySprite; + public static TextureAtlasSprite tankSprite; + public static TextureAtlasSprite feEnergyEmptySprite; + public static TextureAtlasSprite feEnergyFullSprite; + public static TextureAtlasSprite trEnergyEmptySprite; + public static TextureAtlasSprite trEnergyFullSprite; + + public void init() { + ClientLifecycleEvent.CLIENT_SETUP.register(this::registerItemColors); + ClientLifecycleEvent.CLIENT_SETUP.register(this::registerBERs); + SidebarButtonCreatedEvent.EVENT.register(this::onSidebarButtonCreated); + ClearFileCacheEvent.EVENT.register(this::onFileCacheClear); + ClientTickEvent.CLIENT_PRE.register(this::onKeyEvent); + CustomClickEvent.EVENT.register(this::onCustomClick); + ClientTickEvent.CLIENT_PRE.register(this::onClientTick); + ClientGuiEvent.RENDER_HUD.register(this::onScreenRender); + ClientPlayerEvent.CLIENT_PLAYER_JOIN.register(this::onPlayerLogin); + ClientPlayerEvent.CLIENT_PLAYER_QUIT.register(this::onPlayerLogout); + } + + // Note: Architectury doesn't have a texture stitch post event anymore, + // so this is handled by the Forge/NeoForge events, and a mixin on Fabric + public static void onTextureStitchPost(TextureAtlas textureAtlas) { + if (textureAtlas.location().equals(InventoryMenu.BLOCK_ATLAS)) { + inputOnlySprite = textureAtlas.getSprite(INPUT_ONLY_TEXTURE); + tankSprite = textureAtlas.getSprite(TANK_TEXTURE); + feEnergyEmptySprite = textureAtlas.getSprite(FE_ENERGY_EMPTY_TEXTURE); + feEnergyFullSprite = textureAtlas.getSprite(FE_ENERGY_FULL_TEXTURE); + trEnergyEmptySprite = textureAtlas.getSprite(TR_ENERGY_EMPTY_TEXTURE); + trEnergyFullSprite = textureAtlas.getSprite(TR_ENERGY_FULL_TEXTURE); + } + } + + private void registerBERs(Minecraft minecraft) { + BlockEntityRendererRegistry.register(ModBlockEntityTypes.CORE_TASK_SCREEN.get(), taskScreenRenderer()); + } + + @ExpectPlatform + public static BlockEntityRendererProvider taskScreenRenderer() { + throw new AssertionError(); + } + + private void registerItemColors(Minecraft minecraft) { + ColorHandlerRegistry.registerItemColors((stack, tintIndex) -> { + LootCrate crate = LootCrateItem.getCrate(stack, true); + return crate == null ? 0xFFFFFFFF : (0xFF000000 | crate.getColor().rgb()); + }, ModItems.LOOTCRATE.get()); + } + + private void onSidebarButtonCreated(SidebarButtonCreatedEvent event) { + if (event.getButton().getId().equals(QUESTS_BUTTON)) { + event.getButton().addOverlayRender(ButtonOverlayRender.ofSimpleString(() -> + { + if (ClientQuestFile.exists()) { + if (ClientQuestFile.INSTANCE.isDisableGui() && !ClientQuestFile.INSTANCE.canEdit()) { + return "[X]"; + } else if (ClientQuestFile.INSTANCE.selfTeamData.isLocked()) { + return "[X]"; + } else if (ClientQuestFile.INSTANCE.selfTeamData.hasUnclaimedRewards(Minecraft.getInstance().player.getUUID(), ClientQuestFile.INSTANCE)) { + return "[!]"; + } + } + + return ""; + })); + } + } + + private void onFileCacheClear(BaseQuestFile file) { + if (!file.isServerSide()) { + observationTasks = null; + } + } + + private void onKeyEvent(Minecraft mc) { + if (ClientQuestFile.exists() + && (!ClientQuestFile.INSTANCE.isDisableGui() || ClientQuestFile.INSTANCE.canEdit()) + && FTBQuestsClient.KEY_QUESTS.consumeClick()) { + ClientQuestFile.openGui(); + } + } + + private EventResult onCustomClick(CustomClickEvent event) { + if (event.id().getNamespace().equals(FTBQuestsAPI.MOD_ID) && "open_gui".equals(event.id().getPath())) { + // to be safe, we close the current screen before opening Quests, to avoid potential gui open-close loops with other mods + // also save the cursor position and restore it after, since closing the screen will reset to the centre + double mx = Minecraft.getInstance().mouseHandler.xpos(); + double my = Minecraft.getInstance().mouseHandler.ypos(); + Minecraft.getInstance().setScreen(null); + if (ClientQuestFile.openGui() != null) { + InputConstants.grabOrReleaseMouse(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_CURSOR_NORMAL, mx, my); + } + return EventResult.interruptFalse(); + } + + return EventResult.pass(); + } + + private void onClientTick(Minecraft mc) { + if (mc.level != null && ClientQuestFile.exists() && mc.player != null) { + collectPinnedQuests(ClientQuestFile.INSTANCE); + + if (observationTasks == null) { + observationTasks = ClientQuestFile.INSTANCE.collect(ObservationTask.class); + } + + if (observationTasks.isEmpty()) { + return; + } + + currentlyObserving = null; + + TeamData selfTeamData = ClientQuestFile.INSTANCE.selfTeamData; + if (mc.hitResult != null && mc.hitResult.getType() != HitResult.Type.MISS) { + for (ObservationTask task : observationTasks) { + if (!selfTeamData.isCompleted(task) && task.observe(mc.player, mc.hitResult) + && selfTeamData.canStartTasks(task.getQuest())) { + currentlyObserving = task; + break; + } + } + } + + if (currentlyObserving != null) { + if (!mc.isPaused()) { + currentlyObservingTicks++; + } + + if (currentlyObservingTicks >= currentlyObserving.getTimer()) { + NetworkManager.sendToServer(new SubmitTaskMessage(currentlyObserving.id)); + selfTeamData.addProgress(currentlyObserving, 1L); + currentlyObserving = null; + currentlyObservingTicks = 0L; + } + } else { + currentlyObservingTicks = 0L; + } + } + } + + private void onPlayerLogin(LocalPlayer localPlayer) { + if (creativeTabRebuildPending) { + FTBQuestsClient.rebuildCreativeTabs(); + creativeTabRebuildPending = false; + } + + String locale = FTBQuestsClientConfig.EDITING_LOCALE.get(); + if (!locale.isEmpty() && !locale.equals(Minecraft.getInstance().options.languageCode)) { + NetworkManager.sendToServer(new RequestTranslationTableMessage(locale)); + } + } + + private void onPlayerLogout(@Nullable LocalPlayer localPlayer) { + StructureTask.syncKnownStructureList(List.of()); + } + + private void collectPinnedQuests(ClientQuestFile file) { + TeamData data = file.selfTeamData; + + List pinnedQuests = new ArrayList<>(); + LongSet pinnedIds = data.getPinnedQuestIds(FTBQuestsClient.getClientPlayer()); + if (!pinnedIds.isEmpty()) { + if (pinnedIds.contains(TeamData.AUTO_PIN_ID)) { + // special auto-pin value: collect all quests which can be done now + file.forAllQuests(quest -> { + if (!data.isCompleted(quest) && data.canStartTasks(quest)) { + pinnedQuests.add(quest); + } + }); + } else { + pinnedIds.longStream() + .mapToObj(file::getQuest) + .filter(Objects::nonNull) + .forEach(pinnedQuests::add); + } + } + + Minecraft mc = Minecraft.getInstance(); + + pinnedQuestText.clear(); + + for (int i = 0; i < pinnedQuests.size(); i++) { + Quest quest = pinnedQuests.get(i); + + if (i > 0) pinnedQuestText.add(FormattedCharSequence.EMPTY); // separator line between quests + + pinnedQuestText.addAll(mc.font.split(FormattedText.composite( + mc.font.getSplitter().headByWidth(quest.getTitle(), 160, Style.EMPTY.withBold(true)), + Component.literal(" ") + .withStyle(ChatFormatting.DARK_AQUA) + .append(data.getRelativeProgress(quest) + "%") + ), 500)); + + for (Task task : quest.getTasks()) { + if (!data.isCompleted(task)) { + pinnedQuestText.addAll(mc.font.split(FormattedText.composite( + mc.font.getSplitter().headByWidth(task.getMutableTitle().withStyle(ChatFormatting.GRAY), 160, Style.EMPTY.applyFormat(ChatFormatting.GRAY)), + Component.literal(" ") + .withStyle(ChatFormatting.GREEN) + .append(task.formatProgress(data, data.getProgress(task))) + .append("/") + .append(task.formatMaxProgress()) + ), 500)); + } + } + } + + } + + private void onScreenRender(GuiGraphics graphics, DeltaTracker tickDelta) { + if (!ClientQuestFile.exists()) { + return; + } + + if (currentlyObserving != null) { + renderCurrentlyObserving(Minecraft.getInstance(), graphics, tickDelta); + } + + if (!pinnedQuestText.isEmpty()) { + renderPinnedQuestPanel(Minecraft.getInstance(), graphics); + } + } + + private void renderCurrentlyObserving(Minecraft mc, GuiGraphics graphics, DeltaTracker tickDelta) { + int cx = mc.getWindow().getGuiScaledWidth() / 2; + int cy = mc.getWindow().getGuiScaledHeight() / 2; + + MutableComponent txt = currentlyObserving.getMutableTitle().withStyle(ChatFormatting.YELLOW, ChatFormatting.UNDERLINE); + int txtWidth = mc.font.width(txt); + int boxWidth = Math.max(txtWidth, 100); + + Color4I.DARK_GRAY.withAlpha(130).draw(graphics, cx - boxWidth / 2 - 3, cy - 63, boxWidth + 6, 29); + GuiHelper.drawHollowRect(graphics, cx - boxWidth / 2 - 3, cy - 63, boxWidth + 6, 29, Color4I.DARK_GRAY, false); + + graphics.drawString(mc.font, txt, cx - txtWidth / 2, cy - 60, 0xFFFFFF); + double completed = (currentlyObservingTicks + tickDelta.getGameTimeDeltaPartialTick(false)) / (double) currentlyObserving.getTimer(); + + GuiHelper.drawHollowRect(graphics, cx - boxWidth / 2, cy - 49, boxWidth, 12, Color4I.DARK_GRAY, false); + Color4I.LIGHT_BLUE.withAlpha(130).draw(graphics, cx - boxWidth / 2 + 1, cy - 48, (int) ((boxWidth - 2D) * completed), 10); + + String pctTxt = (currentlyObservingTicks * 100L / currentlyObserving.getTimer()) + "%"; + graphics.drawString(mc.font, pctTxt, cx - mc.font.width(pctTxt) / 2, cy - 47, 0xFFFFFF); + } + + private void renderPinnedQuestPanel(Minecraft mc, GuiGraphics graphics) { + Component title = Component.translatable("ftbquests.ui.pinned_quests"); + + int titleWidth = mc.font.width(title); + int width = titleWidth; + for (FormattedCharSequence s : pinnedQuestText) { + width = Math.max(width, (int) mc.font.getSplitter().stringWidth(s)); + } + width += 8; + int height = mc.font.lineHeight * (pinnedQuestText.size() + 1) + 11; + + float scale = ThemeProperties.PINNED_QUEST_SIZE.get(ClientQuestFile.INSTANCE).floatValue(); + + int insetX = FTBQuestsClientConfig.PINNED_QUESTS_INSET_X.get(); + int insetY = FTBQuestsClientConfig.PINNED_QUESTS_INSET_Y.get(); + var pos = FTBQuestsClientConfig.PINNED_QUESTS_POS.get().getPanelPos( + mc.getWindow().getGuiScaledWidth(), mc.getWindow().getGuiScaledHeight(), + (int) (width * scale), (int) (height * scale), + insetX, insetY + ); + + graphics.pose().pushPose(); + graphics.pose().translate(pos.x(), pos.y(), 100); + graphics.pose().scale(scale, scale, 1F); + + GuiHelper.drawHollowRect(graphics, 0, 0, width, height, Color4I.BLACK.withAlpha(100), false); + Color4I.BLACK.withAlpha(100).draw(graphics, 0, 0, width, height); + Color4I.GRAY.withAlpha(50).draw(graphics, 1, 1, width - 2, mc.font.lineHeight + 4); + Color4I.BLACK.draw(graphics, 0, mc.font.lineHeight + 4, width, 1); + + graphics.pose().translate(4, 4, 0); + graphics.drawString(mc.font, title, (width - titleWidth) / 2, 0, 0xFFFFFF00); + for (int i = 0; i < pinnedQuestText.size(); i++) { + graphics.drawString(mc.font, pinnedQuestText.get(i), 0, 4 + (i + 1) * mc.font.lineHeight, 0xFFFFFFFF); + } + + graphics.pose().popPose(); + } } 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 33654d56..6546711d 100644 --- a/common/src/main/resources/assets/ftbquests/lang/en_us.json +++ b/common/src/main/resources/assets/ftbquests/lang/en_us.json @@ -530,6 +530,7 @@ "ftbquests.ui": "User Interface", "ftbquests.ui.old_scroll_wheel": "Old-style Scroll Wheel Behavior", "ftbquests.ui.old_scroll_wheel.tooltip": "When false, scroll wheel scrolls up & down: hold Shift to pan, Ctrl to zoom\nWhen true, scroll wheel only zooms (1.19 and earlier behavior)", + "ftbquests.ui.pinned_quests": "Pinned Quests", "ftbquests.ui.pinned_quests_pos": "Pinned Quests Panel Position", "ftbquests.ui.pinned_quests_inset_x": "Pinned Quests Panel X Inset", "ftbquests.ui.pinned_quests_inset_x.tooltip": "Inset is toward center of screen.\nIgnored if X pos is center.", From d655e57015dbebcafae34f548bfff7ac9d6376cc Mon Sep 17 00:00:00 2001 From: Des Herriott Date: Wed, 30 Oct 2024 15:16:26 +0000 Subject: [PATCH 06/13] chore: changelog updated --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c25802a5..5ff3687c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 # [2101.1.1] +### Added +* The pinned quests panel now has a "Pinned Quests" title for clarity + ### Fixed * Fixed context menu tooltips sometimes appearing behind the context menu * Fixed some issues with the reward table editor GUI (changes not getting correctly sync'd to server in some cases) From 65d7f6d363386ce26393cdd78797fdfa06ddffee Mon Sep 17 00:00:00 2001 From: Des Herriott Date: Wed, 30 Oct 2024 15:17:43 +0000 Subject: [PATCH 07/13] build: switch to tag-based releases --- .github/workflows/release.yml | 7 +++++-- build.gradle | 4 +++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5d42e34b..7b185c65 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,8 +1,11 @@ name: Java CI - Build Release on: - release: - types: [ published ] + push: + tags: + - 'v[0-9]+\.[0-9]+\.[0-9]+' + - 'v[0-9]+\.[0-9]+\.[0-9]+-[a-z]+' + - 'v[0-9]+\.[0-9]+\.[0-9]+-[a-z]+\.[0-9]+' jobs: build: diff --git a/build.gradle b/build.gradle index f473b0cc..f52fc6b4 100644 --- a/build.gradle +++ b/build.gradle @@ -4,6 +4,8 @@ plugins { id "me.modmuss50.mod-publish-plugin" version "0.5.1" } +apply from: 'https://raw.githubusercontent.com/FTBTeam/mods-meta/main/gradle/changelog.gradle' + architectury { minecraft = rootProject.minecraft_version } @@ -102,7 +104,7 @@ allprojects { publishMods { dryRun = providers.environmentVariable("CURSEFORGE_KEY").getOrNull() == null - changelog = providers.environmentVariable("CHANGELOG").getOrElse("No changelog provided") + changelog = createChangelog(project) version = "${mod_version}" // TODO: Migrate to something else From baad4dc85b2aff212f6f9d8a086eefae8bc26ce1 Mon Sep 17 00:00:00 2001 From: Des Herriott Date: Thu, 31 Oct 2024 15:15:54 +0000 Subject: [PATCH 08/13] fix: no canEdit() check needed in SyncTranslationMessageToClient This is coming from server, just accept the translation update! --- .../ftb/mods/ftbquests/net/SyncTranslationMessageToClient.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/net/SyncTranslationMessageToClient.java b/common/src/main/java/dev/ftb/mods/ftbquests/net/SyncTranslationMessageToClient.java index afbe3f55..0babb84c 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/net/SyncTranslationMessageToClient.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/net/SyncTranslationMessageToClient.java @@ -7,7 +7,6 @@ import dev.ftb.mods.ftbquests.client.ClientQuestFile; import dev.ftb.mods.ftbquests.quest.QuestObjectBase; import dev.ftb.mods.ftbquests.quest.translation.TranslationKey; -import dev.ftb.mods.ftbquests.util.NetUtils; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; @@ -52,7 +51,7 @@ public Type type() { public static void handle(SyncTranslationMessageToClient message, NetworkManager.PacketContext context) { context.queue(() -> { ClientQuestFile file = ClientQuestFile.INSTANCE; - if (file.isValid() && NetUtils.canEdit(context)) { + if (file.isValid()) { QuestObjectBase object = file.getBase(message.id); if (object != null) { message.val.ifLeft(str -> file.getTranslationManager().addTranslation(object, message.locale, message.subKey, str)) From 28799507afe740b6a7bc8edd277098c412ba0712 Mon Sep 17 00:00:00 2001 From: UnRealDinnerbone Date: Fri, 1 Nov 2024 07:40:22 -0500 Subject: [PATCH 09/13] Add toast option to command reward (#753) feat: Add toast message to command reward --- .../ftbquests/quest/reward/CommandReward.java | 17 +++++++++++++++++ .../resources/assets/ftbquests/lang/en_us.json | 3 +++ 2 files changed, 20 insertions(+) diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/CommandReward.java b/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/CommandReward.java index e9db2f62..eda682f2 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/CommandReward.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/CommandReward.java @@ -1,6 +1,10 @@ package dev.ftb.mods.ftbquests.quest.reward; +import dev.architectury.networking.NetworkManager; import dev.ftb.mods.ftblibrary.config.ConfigGroup; +import dev.ftb.mods.ftblibrary.icon.Color4I; +import dev.ftb.mods.ftblibrary.icon.Icon; +import dev.ftb.mods.ftbquests.net.DisplayRewardToastMessage; import dev.ftb.mods.ftbquests.quest.Quest; import dev.ftb.mods.ftbteams.api.FTBTeamsAPI; import net.fabricmc.api.EnvType; @@ -24,15 +28,18 @@ public class CommandReward extends Reward { private static final String DEFAULT_COMMAND = "/say Hi, @p!"; + private static final Icon REWARD_ICON = Icon.getIcon("minecraft:block/command_block_back"); public static final Pattern PATTERN = Pattern.compile("[{](\\w+)}"); private String command; private boolean elevatePerms; private boolean silent; + private String feedbackMessage; public CommandReward(long id, Quest quest) { super(id, quest); command = DEFAULT_COMMAND; + feedbackMessage = ""; } @Override @@ -48,6 +55,7 @@ public void writeData(CompoundTag nbt, HolderLookup.Provider provider) { nbt.putBoolean("elevate_perms", true); } if (silent) nbt.putBoolean("silent", true); + nbt.putString("feedback_message", feedbackMessage); } @Override @@ -56,6 +64,7 @@ public void readData(CompoundTag nbt, HolderLookup.Provider provider) { command = nbt.getString("command"); elevatePerms = nbt.getBoolean("elevate_perms"); silent = nbt.getBoolean("silent"); + feedbackMessage = nbt.getString("feedback_message"); } @Override @@ -64,6 +73,7 @@ public void writeNetData(RegistryFriendlyByteBuf buffer) { buffer.writeUtf(command, Short.MAX_VALUE); buffer.writeBoolean(elevatePerms); buffer.writeBoolean(silent); + buffer.writeUtf(feedbackMessage, Short.MAX_VALUE); } @Override @@ -72,6 +82,7 @@ public void readNetData(RegistryFriendlyByteBuf buffer) { command = buffer.readUtf(Short.MAX_VALUE); elevatePerms = buffer.readBoolean(); silent = buffer.readBoolean(); + feedbackMessage = buffer.readUtf(Short.MAX_VALUE); } @Override @@ -81,6 +92,7 @@ public void fillConfigGroup(ConfigGroup config) { config.addString("command", command, v -> command = v, DEFAULT_COMMAND).setNameKey("ftbquests.reward.ftbquests.command"); config.addBool("elevate", elevatePerms, v -> elevatePerms = v, false); config.addBool("silent", silent, v -> silent = v, false); + config.addString("feedback_message", feedbackMessage, v -> feedbackMessage = v, ""); } @Override @@ -113,6 +125,11 @@ public void claim(ServerPlayer player, boolean notify) { if (silent) source = source.withSuppressedOutput(); player.server.getCommands().performPrefixedCommand(source, cmd); + + if (notify) { + String key = feedbackMessage.isEmpty() ? "ftbquests.reward.ftbquests.command.success" : feedbackMessage; + NetworkManager.sendToPlayer(player, new DisplayRewardToastMessage(id, Component.translatable(key), REWARD_ICON)); + } } @Override 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 6546711d..b505b13f 100644 --- a/common/src/main/resources/assets/ftbquests/lang/en_us.json +++ b/common/src/main/resources/assets/ftbquests/lang/en_us.json @@ -442,10 +442,13 @@ "ftbquests.reward.ftbquests.xp": "XP", "ftbquests.reward.ftbquests.xp_levels": "XP Levels", "ftbquests.reward.ftbquests.command": "Command", + "ftbquests.reward.ftbquests.command.success": "Successfully claimed command reward", "ftbquests.reward.ftbquests.command.tooltip": "Vanilla substitutions, e.g. @p, are supported\nSpecial substitutions:\n{x} / {y} / {z} - player's current X/Y/Z pos\n{quest} - ID of this quest\n{chapter} - ID of this chapter\n{team} - short name of player's team", "ftbquests.reward.ftbquests.command.elevate": "Run with Elevated Permission", "ftbquests.reward.ftbquests.command.elevate.tooltip": "Run the command as if the player had permission level 2", "ftbquests.reward.ftbquests.command.silent": "Silent", + "ftbquests.reward.ftbquests.command.feedback_message": "Feedback Toast", + "ftbquests.reward.ftbquests.command.feedback_message.tooltip": "Toast message on command success", "ftbquests.reward.ftbquests.advancement": "Advancement", "ftbquests.reward.ftbquests.advancement.criterion": "Criterion", "ftbquests.reward.ftbquests.advancement.criterion.tooltip": "Optional, set if you want only one criterion to be granted", From 5061582de71249b7387fd50e66f3760f1785bd95 Mon Sep 17 00:00:00 2001 From: UnRealDinnerbone Date: Mon, 4 Nov 2024 04:00:59 -0600 Subject: [PATCH 10/13] [1.21.1] Update Icons (#751) feat: Icon updates --- .../assets/ftbquests/ftb_quests_theme.txt | 4 ++-- .../assets/ftbquests/textures/gui/alert.png | Bin 881 -> 1576 bytes .../ftbquests/textures/gui/alert.png.mcmeta | 5 ----- .../textures/gui/arrow_collapsed.png | Bin 556 -> 1500 bytes .../textures/gui/arrow_collapsed.png.mcmeta | 5 ----- .../ftbquests/textures/gui/arrow_expanded.png | Bin 616 -> 1514 bytes .../textures/gui/arrow_expanded.png.mcmeta | 5 ----- .../ftbquests/textures/gui/arrow_left.png | Bin 583 -> 1494 bytes .../textures/gui/arrow_left.png.mcmeta | 5 ----- .../ftbquests/textures/gui/arrow_right.png | Bin 579 -> 1503 bytes .../textures/gui/arrow_right.png.mcmeta | 5 ----- .../assets/ftbquests/textures/gui/burger.png | Bin 290 -> 1410 bytes .../ftbquests/textures/gui/burger.png.mcmeta | 5 ----- .../assets/ftbquests/textures/gui/close.png | Bin 788 -> 1557 bytes .../ftbquests/textures/gui/close.png.mcmeta | 5 ----- .../textures/gui/collect_rewards.png | Bin 4678 -> 2029 bytes .../textures/gui/collect_rewards.png.mcmeta | 5 ----- .../assets/ftbquests/textures/gui/editor.png | Bin 546 -> 2008 bytes .../ftbquests/textures/gui/editor.png.mcmeta | 5 ----- .../ftbquests/textures/gui/editor_white.png | Bin 0 -> 243 bytes .../textures/gui/emergency_items.png | Bin 4756 -> 1734 bytes .../textures/gui/emergency_items.png.mcmeta | 5 ----- .../assets/ftbquests/textures/gui/guide.png | Bin 5793 -> 1489 bytes .../assets/ftbquests/textures/gui/hidden.png | Bin 526 -> 1564 bytes .../ftbquests/textures/gui/hidden.png.mcmeta | 5 ----- .../assets/ftbquests/textures/gui/info.png | Bin 4010 -> 1474 bytes .../ftbquests/textures/gui/info.png.mcmeta | 5 ----- .../assets/ftbquests/textures/gui/link.png | Bin 356 -> 1640 bytes .../ftbquests/textures/gui/link.png.mcmeta | 5 ----- .../assets/ftbquests/textures/gui/pin.png | Bin 1788 -> 1494 bytes .../ftbquests/textures/gui/pin.png.mcmeta | 5 ----- .../assets/ftbquests/textures/gui/save.png | Bin 447 -> 1761 bytes .../ftbquests/textures/gui/save.png.mcmeta | 5 ----- .../assets/ftbquests/textures/gui/search.png | Bin 5500 -> 1508 bytes .../ftbquests/textures/gui/search.png.mcmeta | 5 ----- .../ftbquests/textures/gui/settings.png | Bin 3851 -> 1760 bytes .../textures/gui/settings.png.mcmeta | 5 ----- .../assets/ftbquests/textures/gui/shop.png | Bin 7230 -> 1734 bytes .../ftbquests/textures/gui/shop.png.mcmeta | 5 ----- 39 files changed, 2 insertions(+), 92 deletions(-) delete mode 100644 common/src/main/resources/assets/ftbquests/textures/gui/alert.png.mcmeta delete mode 100644 common/src/main/resources/assets/ftbquests/textures/gui/arrow_collapsed.png.mcmeta delete mode 100644 common/src/main/resources/assets/ftbquests/textures/gui/arrow_expanded.png.mcmeta delete mode 100644 common/src/main/resources/assets/ftbquests/textures/gui/arrow_left.png.mcmeta delete mode 100644 common/src/main/resources/assets/ftbquests/textures/gui/arrow_right.png.mcmeta delete mode 100644 common/src/main/resources/assets/ftbquests/textures/gui/burger.png.mcmeta delete mode 100644 common/src/main/resources/assets/ftbquests/textures/gui/close.png.mcmeta delete mode 100644 common/src/main/resources/assets/ftbquests/textures/gui/collect_rewards.png.mcmeta delete mode 100644 common/src/main/resources/assets/ftbquests/textures/gui/editor.png.mcmeta create mode 100644 common/src/main/resources/assets/ftbquests/textures/gui/editor_white.png delete mode 100644 common/src/main/resources/assets/ftbquests/textures/gui/emergency_items.png.mcmeta delete mode 100644 common/src/main/resources/assets/ftbquests/textures/gui/hidden.png.mcmeta delete mode 100644 common/src/main/resources/assets/ftbquests/textures/gui/info.png.mcmeta delete mode 100644 common/src/main/resources/assets/ftbquests/textures/gui/link.png.mcmeta delete mode 100644 common/src/main/resources/assets/ftbquests/textures/gui/pin.png.mcmeta delete mode 100644 common/src/main/resources/assets/ftbquests/textures/gui/save.png.mcmeta delete mode 100644 common/src/main/resources/assets/ftbquests/textures/gui/search.png.mcmeta delete mode 100644 common/src/main/resources/assets/ftbquests/textures/gui/settings.png.mcmeta delete mode 100644 common/src/main/resources/assets/ftbquests/textures/gui/shop.png.mcmeta diff --git a/common/src/main/resources/assets/ftbquests/ftb_quests_theme.txt b/common/src/main/resources/assets/ftbquests/ftb_quests_theme.txt index 1ebb915d..05f809f4 100644 --- a/common/src/main/resources/assets/ftbquests/ftb_quests_theme.txt +++ b/common/src/main/resources/assets/ftbquests/ftb_quests_theme.txt @@ -30,8 +30,8 @@ wiki_icon: ftbquests:textures/gui/info.png wiki_url: - pin_icon_on: ftbquests:textures/gui/pin.png; color=#F8BD1C pin_icon_off: ftbquests:textures/gui/pin.png; color=#DBDBDB -editor_icon_on: ftbquests:textures/gui/editor.png; color=#F8BD1C -editor_icon_off: ftbquests:textures/gui/editor.png; color=#DBDBDB +editor_icon_on: ftbquests:textures/gui/editor.png +editor_icon_off: ftbquests:textures/gui/editor_white.png hidden_icon: ftbquests:textures/gui/hidden.png; color=#DBDBDB link_icon: ftbquests:textures/gui/link.png; color=#DBDBDB save_icon: ftbquests:textures/gui/save.png diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/alert.png b/common/src/main/resources/assets/ftbquests/textures/gui/alert.png index 5211558673897127d2a704ea86bf1caa945c44be..69efbca800594491cc5cfd715321fe81b639d45f 100644 GIT binary patch literal 1576 zcmbVMZHN?Q93M5W%X7g9LQ7~IKa{!ix^Fj6H=Wzft+#M{9(Nm_LV3^5Ji9yG&OGDH zbMD@9gm@NikVP2e;Te4pf=Cg{4@oIm^dYjKJOb-7h%7?Rx(`Vp^~}DZaV0tM%=7kp ze*gD>ZFp#VXw5@w7={U@2lNp-uM0+J2mL>?^cSSleeS?6pJBQl2*wI#_Skxcx#zl- z9V26zL1188fF{l%p<=rf%`iQ^6&D&4h_E?SupEtBJbR8~EmPxm#xhdI?L$Rtpz5K~ z>QL6GP8h1m^*+h=Q~)Kg5rJ&QE;&A^Xk48a&~$!CNwS?2xP}H!)zb+5UUC@ zZ%C5DCR72&VLYP7!>l4HQBjJBvcgLV5bXv^gl&Et73Z0GFrufL!st%piiEg86wBqZ zP>u-LD~PhHs-mQbio#O_?@u`dR(QwX++xs?Z+MnVEbOoWBh2ARqH$E!h7Gpcrgi+L zpQy*g3UozTkOG_PK+|aB+)1xg7j7CNDj^#=#HU!fjdhEdV84j}g}Qxxn*i$DOr|Yk zSzT?ch(@+bGLWPOG=ohmKeZe*CWEMa8q!zJud!Bo3QU5iWxq#d6?$3SUaa9EHlSs7}gGy`|BL36H`rR#6+k(?p5G>nGh;G_#3^}xSd9+DA{o;+FLoTHCWVZXI zxmP!JeY9=kC*OyD*fSV^K9&r3rS3QPoFBjZXtcBA?Am1b%xjyz=~xly`s2nl zVy=+%{Ch_aA6)tKg%VfXWpnS z#umhvuj0_R(t(Fl^BqH9^_=W>0*51TWQ2r;cv?Gjd`5 p$6MZJ_J7fHE}^Yc-q9`z@(X5Q;SrEgP|?t_uyF|piHJ$bDJZFEXz%WyJbU%}&HE3Z zK7aZ8?fZ{kzyJLG$9irB1_mZ0PZ!6KinyiMUY6Z55Mg;>*k+=sSbEq`VWlvSo^siy z_3!_O*e+SwU0Rx}Uh{u_pAFBX1)B2PewJv;DFU89MzU$L#)P1yvbMQ}^=S^EufoKTI_5zQ$3zZGJC{)V&o?WE43{r! zwKJ8Td?VnpyT?^4d#1LI6;aRJ4{%&Lo5~`z;`Rv+6@$Z3oeMrNc?&kSbnL3EV-a+E zW%g4rX3_b*JQtqD-C9woZyK^=I@hLMHgnhZM4nw1;>xfq#OC~&_M66{u?(TP|BkA} zZ4q6?V6f=&nKv^oX11(tD_iz#{wm(Wt(wvS+YCNVe%`yqNK^Z1*oEy0I_`t5;HmHb|rE!me53g2=>qqJQS@WrP6{Iuj0YNA{0T^m-z^-tQH%1d0)Tx z`+xu6D$Tt*wsm}~BuQh%S$kg0+mo?nv-rQTwvNU0L@;|SlB8|lB;%0}_ilSuk~ZCO zD+}?0a~KisshILbrgpqQpe1SF{!V~NgT-Kx)m-0_f4_K11}?Saqd7-&f�%vr8c> zFU?iRQiGUO-aiHQb&w$NSd2l(Yx)uDSaOdSiFI-eWzd7f4NIO*1cC*p1PVN4z*KdG zXqo{gOcm#GK4a!z0)}Q}p_YNVp=c8*JBf@87<{r27t$)4w+{@2iJc|a<2XPNw%cvB zol$vMgSu&&P&1%mC<38GT|dSh#gBFk8Eh7j&<$dj`ygS&i@X(EvQV{egBPT)+1tEbqY&SM_c`M*%7*Y^n!zIB{b#)i6h zUMeDrXHE(;1`gQ}9aXvkgYzunt&p&plS0j1i8TQ#gbc?#tZ?2OMyfPa85lWLH^A){%MfnSqB>PJ-IO&$utLc2^)3&%l4KZ>zWSkbm*VYKSH6lHZrD4|%< z7HLk&kt|b8imQr_C(ZnXUNwxoK74O;(n>-*d{6)9`y-(%Y6~|XnkT8aBqz|U8;NLj z2PIKvuMbvD7xdBqVUnb`C6gqsjLL&!_n|$|r)}4nApMVU_hAvQ#%&z3>6-A?gYyXr z?O{@heM8_sZS39MQ?*05Xa&hKZ9-y`wlU_5-W7@__2}~RXGDWrDcaMO$#*|n(VraA zM-QBs8J+z4<16dyKfitG#na%aj~eEM{H;v6eE0bAgYRElJM!EVyng+SHUIKRSNcj> zzIp7*_p3R1%ub#PfwxN-odAy8GLX)5|Byg_pCfEw_zaw)E4^JMUcmasBb~ADd6TSNN{|?I%3xzr~q3 K``jz9o%$QyROM;_ literal 556 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 Vj|A_ospJ3v002ovPDHLkV1h2+@SFeu diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/arrow_left.png.mcmeta b/common/src/main/resources/assets/ftbquests/textures/gui/arrow_left.png.mcmeta deleted file mode 100644 index a39ce83c..00000000 --- a/common/src/main/resources/assets/ftbquests/textures/gui/arrow_left.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "texture": { - "blur": true - } -} \ No newline at end of file diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/arrow_right.png b/common/src/main/resources/assets/ftbquests/textures/gui/arrow_right.png index 18b73f6cc4f3301f741410014f70097ad064e73a..7172650a8258998f436ab76c74b1489c3db6be8f 100644 GIT binary patch literal 1503 zcmbVMO>7iZ9G?PGK#LG0q!8sXy-0Ar-t2BW&yHo?S=ddSTFaW&8?Q5OcPHJMH_W_c zr%j9r9*{&1nqZqdNz`?|W7Y-a$3?&*8qapZaKPEs5L?(IjzJBlb z|NftunLawQZSOWg5JsvMYnIPD(y?VT|L_0n4(8L=u<}MM2-{cFF?884kk zXY=+e$f3TBUAjQz#1A=I5GJRR5Ic*6fd$g=0#jW3_Phu@*A(aSwrYnZ()23J5jnOz zU2~Qf9m5r;UILQ|;sicn7$klxh*4sSU0%f3>9Hb$E`%+bVlfp6=It3!q7eaxtVxcl zLNIQ~xPS|~QFsAB73LIGS2QT8<0v2;6bNckjJb1bzcM5TyeMxz>~twE$_1}X!Xmo*5UpYsBj zcH)C~y&x85#1zx8Nt!CDMorTYG*C`Iq-sc2dr+IYUVUjjXii7D!aY!)G%jZNkzm(B zbsG7YTkQF`L6k6Ph#>PLD$y2=xL~fG-qpgkQ8kDe4jfXoOpzNcd!CC(y^ixaw;SHzptiZ}iVZ*b?TR- zIv2x?m)Z&n;56h>AcK^BQ#%qVa zoD22q<(*Z$ac9x`=rk~yW`R}7i`MaC9hfn`J{Ldey3+JC1{WNXC N)$+9U^~=Xk{RaZF;#vRz literal 579 zcmV-J0=)f+P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!2kdb!2!6DYwZ940oX}IK~#8N?VCGJ z!%z@K9Y6@N3Q9`oXxIabfmOh+prE5=39JAp0B0t7BVCbLvEO%Q>?4iFc9ooaZ7Gqw z>ifQ%Ge=?1mPJ6=vt%(fv$z$eYnPe^lZh!Jp3v!eOgob6(& z4Jo&PBy743Ii3Ng+mP!aXtoWx1PJEZkXry_stqLs2qxN4QUIgA4W$JLYTHmt0Hd-E zH3bN&+R#D(qoxh51PIOB&{_b~v<(^r2u<3cNdQy54cY_<+=j31;SSh_3%-zoRsqau z*!$pH<%Q;BbC!T+0motg=bh%3=7Hv$FQlMNz+c$=;MAXJu4!KRLJqVE82UU}Q%5ui zsGd5aK|uA?kyZklrjE1{&@^?VrT{gmBQ*u6NgXLIKxOJkX#pxzM@k4#pE^=Pfcn&t zTmnp`j^q+xDs?19fZ5cM7y-Xwn@t^w5is;eg_+cmlv@BXl{%6tz+~!3iU6~zBQXNZ zr;bb&;39QotN>T3BVz=(OC34%<|w~2!~)!XabbCNHtgB52nc(&%v?a%tpS!VkOW~x RlU@J-002ovPDHLkV1jWS>>B_8 diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/arrow_right.png.mcmeta b/common/src/main/resources/assets/ftbquests/textures/gui/arrow_right.png.mcmeta deleted file mode 100644 index a39ce83c..00000000 --- a/common/src/main/resources/assets/ftbquests/textures/gui/arrow_right.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "texture": { - "blur": true - } -} \ No newline at end of file diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/burger.png b/common/src/main/resources/assets/ftbquests/textures/gui/burger.png index 7fff6f1ae0cdcb4da4c80b220341a20f5ba4b0c8..568fbb160b2341721c385c263221f193bd0016eb 100644 GIT binary patch literal 1410 zcmbVMU2D@&7>+2SqZ@M|PQ5T>2$LPvVNFg0g*Xf{mD-wi}_wjw~>D0(YK{)Zs zH&l>THC+Z-Xyl-t7WC&AlB3cIyk`v zjj-M|?qHSFiAQ`EajceLgBoQts?ontC)@iB@YvdRV&gzxJTEa3v4w3eqaTn1(NVb_ z5Osw_v=L&mu+80^h}8seJ|u|IuuN%vkg4T?%c7o9G+mrrbA5+4qbqw(kOE@FlH#<< z8jyim)-loySI7&;W}U|6A{hqz+bLsg;%epM2a zIKp{ary)1Yy-Rn!ux(iKBZhoTN(D>eq7~P5AgJg#hq7399D-y73|%(UASdT=g;b1e zRwJ373VyyoaU)Lc;Jovn=Wm8C?=4h6GEdxbaZSLY8}V$l`z^6b?(|o6SL~JnL^v*Q zOTuwpi6ixYyGM>dkG5GOob(^*?!h8jVNDd0e3eJ*@Oo0Y_iEgUJt69!8oPUYx^@8P zqaa=;Lx_JQV~qHGc7=RMef)Xm86R-DQXyZ?J;J{_ow?(e@9s*U%jqv49-Ql(A0Pkp xHZ={N+G+w>K_wG8qcAJao|(cv`iA?e+Gy z*N!6EA0Fl8)pFi&c=kWRs33p4%##~TKs^zJN|JnGR(Od z-~5>22D`=^<~arpIng`{x5cg}*tga)FdXRrYihyQP}^|G?f@tAiET$2Hsu!beha?A e4z!-Z&Fd%A#7Sv-k#gP2Aik%opUXO@geCy@C2Rx$ diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/burger.png.mcmeta b/common/src/main/resources/assets/ftbquests/textures/gui/burger.png.mcmeta deleted file mode 100644 index a39ce83c..00000000 --- a/common/src/main/resources/assets/ftbquests/textures/gui/burger.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "texture": { - "blur": true - } -} \ No newline at end of file diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/close.png b/common/src/main/resources/assets/ftbquests/textures/gui/close.png index 1ffdc96916ed2437dda67b82b578ada83ce03020..14b8b03d0a785354baef0c1f1db8b81a843ca630 100644 GIT binary patch literal 1557 zcmbVMe`wrP9FH(Yty`_zkgX1vWt~&DBrnPJ?(%5b)u#3im$tTtZ5>MAB`du}{hGACcbNVEmyW`QZlKwaSd==5@c0V^8GECRWc-(eid)GY-v*IVG zFcZxfyP!#20a>Jog}UogG{f`{)_r7FaKsjI$?-Jq^2aAQ*0D5hy3YWHKa9&xZZW`9 zi(>_Iv0|zgH#ord*C8cvafH~qTlGR%*SH2Rr0e)tTI`4&B+6+1l&A{;^hj?tvh>B!B(m1MW(+1a1XuYuI zC+ab=j(kxPKx|V3XqgGlpAV`H;g%`lDt56Kg%m3#Siejn5|+uoP$$>d3820;j6}u_ zb#dK9L>P_irDn7oazk`jSn#npi9<3Un0RC_RdY*hjSq(dj3N>g2&uLsHPKd?mHPxq zX78VNJd4!A2d;U6brfNZi^IlCfCp+plAx@@l(HR25P&AsAeLh<{1Yleph6{c9h4@G zg(7rQuw_D<1TLZ$J1#0=(f3LmoA?n9lPU?QV5*(c(84fa-U}n-nK-X&95q^S91E%{ zmLyru@>$a^@@6Up_+rMEc*RQDW?w3evmkk|6LUTeZTr3TKi`iB4y`Rzy=9)b;^Lfu zIVYsiT4)5$v4>W0OWlTx`Biv0`NbIPF0z6cr z-nw}{iBx+ruEeGx;@@p-++9<(Z8&WO@iJ*bbd$6(?9tv8&?fckcO>qVU*+|oLU#Y* zsm*Ji1*>+Qnd=4}sm>L5=GKw#asQEV=8HSlcd!5YjZ22}`JRk^-+3c_sE7Hb_lcL! zZhmUtPF)zC{DJ9UB<0lmCzoHFvp>A@xVCh5-G+14))TMpn_DhD`NEFZPyhDts!gX~ zS$o$b2jBaq=fH*CA2{cZj=!^ZW~<+uo+Y2@gUea|(A$45eR_F-|90EpkBW2mXzju? ze;j{n;Ml;_(cU-DT)gyU#a{W*W5-6;9Di=MvVY_6`K1>xc5U3b`{1L~?v-u#UOkn0 XY3viu-f%u{_e_3dOn>*mxu^dEHeLBK literal 788 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt3( zJ+r@loG%y{m|8tu978JNp5C_g`|KdWl2FCR(9Wg0lj&6F4(97!D;6$^mT(t7`l+J+ zeyw>@x4YBinvLly`$`4noH&9fKlDkl5SBdW(q=p{@zTpLa{Knpdz!8MAg;jw)m9cs zH`#vqhfh`i#D0+3w}1YVYMaXDStbhWeEB%(d=bm+PtW(VZ}%-I00gvMCX$UbJ7Z z=X5jAYM}Fg)+J7sQ!W9@<{V?6ee3aCF+1k@OXtb)p18mwS5R>5x?FKXefRkT=_|7( zCM@h+$v)#(c*3jyEY(w%`zfE;;C24fl|&XvvCkU*$AH|9^hzTc$F`eMrytK)ZL8Mn z26Egdi+csfoZl8^8Z_}tjynDM*vAHDvH78vO+1U&oVss!Aa z|H&kQMKZ5qiu!ZGlpT*E=g9yA^J>SZCnili;>xEdALcOH)BWj6WsC2I8UMV448C4} zvLdBr-qV$NEvNLog3fWsJzbg8a%}ynpd6O-pQe~QZL&EL5Tx9r;r~%^6EIlI@AesN zvU&N~YBw;PxWsp~f7&9qa0QUfnV$9J<*B==EX(a@{Yr-?oQF1t4(n@`efNnGw37lR OS_V&7KbLh*2~7aTrd7-U diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/close.png.mcmeta b/common/src/main/resources/assets/ftbquests/textures/gui/close.png.mcmeta deleted file mode 100644 index a39ce83c..00000000 --- a/common/src/main/resources/assets/ftbquests/textures/gui/close.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "texture": { - "blur": true - } -} \ No newline at end of file diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/collect_rewards.png b/common/src/main/resources/assets/ftbquests/textures/gui/collect_rewards.png index 88132634da4056b3f71ec06a81a7690959b250a1..ac75b7e076504ec08e7560fc4f8db0249bda3c41 100644 GIT binary patch literal 2029 zcmb_dYfKzf6dt6kEwzLujX_G|IE`9TXXm}kOxRLnX?Kka1lDwokMz#W-Q9uRnPFy@ zUEqh+#Dw|`C^e$Q2fluY8vJ1+MJTPtXf(F*hiQpvq-jh;Vh|IJiPk&IvMC0nAx<(g zckX=WobR0T-FuI>wH)42UR{o1*p6^0*pA+n?!DE6p0_Vu1L(EQ3_WOLSjAcQE*aim zu^YoY&uGz@6N}t0DMs20R6~Z|T-rov46AR*nLz1+4lculrU!^$CZ`EpQv<{iAwoyY zCYaPheHQHKYl$j-U5cm@4F~Z0oP->tp#$(-I;GoEEjZ5vpLxo`I zD?lV2$CM~4o6UN&oY$}t6eEfvMY9ykk_bWCy}AQ(q;BtB@eqWzVrizM89MHI1hSEF z0tBMEoI~0yy4CGMolwQ7955-yOS?JcfvQr(nHejU53VW{Ou;nN9UEbpBGybAj$tQ_ zbzB#JuL^)_8;KNStjQ&vE{3q3<{p$rp&)Cb?P#wFsdi`^8B2l9J&5LBHycxGvLJ8_ zD{2_2l}@#-P{vuo%dq&qBbu%nS-bW+3m60r3=nSHNQNe9G0HF!D@r`KpJpVQUWP^t zRg3qohO%6g;U(TLG5jhh5{(KRupwAgq_|D5(80S=3B_U*F64Jb%1OkYYf}n_Xj0#mwW>@TkhLUkx zyJD{*dyW-^ICQNPS|MdWA16fx2&7oYbAqf0JP(8w`&LUsYYU_{?Z;hlt|p|AW}|NP z7M4T@>@JK_8lIPd1Qb`^0YY*63RR*ot*udk8_QtXZ8iy!)BkAqGR!vOP8L|OF@dVJ zv7V^)*xR6I1MZOX`5-NmexK+g{VeYzWm-^3mV+Q3m*YIGpzg27otKbE*`oe7#l7HM zNdi3q(RN7@o6qLPw76C_YpkaKF&oO=C6`4;{ab(ef7k7(sFnFCv`xFi;sJp^ibo98 zQK2k!fc#l{>nMhm+#C)zM(dt^dnlmK9;|$Fy1902*TBH^?5;yw?`*H097xK8rETxL zF~6l|=J2I0HD#UEKMxVJ%@0=%Ui#|I&~T*e!bkJiPvMIT3;jzyS8B(FmtHq_?mju> zJu~x3YJ7tF;_29)Or__umWdZ1efMNT_{912kKaA^UTpThk;bY&K7Hix_{7|=bEiB< z>-&}JYq5%8$+5xy52r4cV@uzRfZsX?Kc^OI>ZiUBzuJ1`72$!_bD47a?rzUi%g$pb z9vZt^d$s%J)AOVI2>o>M>+#382d%%JFa3D(`0vTGgJYLt-se2p;cw4O-*i{+#N1QH z`?rPmEPaVzp1I}R9S6?;Q2s*ITc<`}8$R2yxP5W4bK8ZaIN~12;pUd$2lpO*;vXnL Bp`-u+ literal 4678 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 IM6N<$g1?QJ%K!iX diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/collect_rewards.png.mcmeta b/common/src/main/resources/assets/ftbquests/textures/gui/collect_rewards.png.mcmeta deleted file mode 100644 index a39ce83c..00000000 --- a/common/src/main/resources/assets/ftbquests/textures/gui/collect_rewards.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "texture": { - "blur": true - } -} \ No newline at end of file diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/editor.png b/common/src/main/resources/assets/ftbquests/textures/gui/editor.png index e8f07cc9150d90964ad1cc88f7037bee675a570b..3a007f69125ad6a8774c6f8c24535e7775adcbc3 100644 GIT binary patch literal 2008 zcmb_dTWB0r7#;}?X_JClrKzntP9JKubDy1CvkB>L>@Id`t>gXF4;< zZla%6O|2hAgJ>3VlZh2@6K@eNhsbn9X?~R_OM*M#Cw-tb=&0gx+fFPQ;MbACNocEIq+`XYftbM=UIONw z)R+(Z$GS7-*pR7NR7X46R@SkCA`AgpE*9KCFUP5hULCKaZI&V{kZ>qYbw&osL8FIE zARm$%!_y|m38bPiKnAj?$@@rw6C{=sSze$yMVC}v5XtJGusPqd^}gg&Rb%)oPUXYU z(^k!5M~p24kL4LI;#2`zW*z4Z`-O^e%Vc2z7NHvk7|YkOULJ)g$fH}RuK!+R z0LRua>NeK(rC6++2*R!rOrsi*bw>0B;*%V&bKEM_K$c^Vu7wI> zhL?0+(_``)C@vZcgy4=~%hYY;7XfDM6hRKMo|~h{dK~oxDj**l#@>k)FAPIZyFmzC z6Q+}K3X^6W$I`Q!3L#Kqv?AMC+EgT!)-2AZp=K)rRIHdFsWtf|GKZto*5s{7o>OH} zkOf*%HIr5}Nuje6Z_$b^$&!>cH9=5n^3V7VK3kx$VLj1_i)unoIRVbrX!S_+!(-J| z!67SUpaU~1?>J>fd4(2L-FDWCz+Ev|Ra?qKtn@bNUWEn74okp?ojDw>JJ%C?EAIm^ za(mwuD9eg%nRHB4arV?G`nCvZOXaMXB*#=y1U2se^t$k{)AT>GVWV4ewaD0i*I(t|O*bk|Wn~Lr)6uftAn-@M#XuJa%Et}l z0C(kO+FvN=L)qGhfYp*U`|>kof!Lwuu%z4!wVL-bkCre_nch=Ui&4 z`3Ym+@G!>C8~a+pjJzzto6_YAkHJ^wapt3m4lj z{B`y8r^5NO4_}%7@!ErLEQxzse>q2-vN7s2`#dxI!Py_0wkNL7|1rTGn_|er;^BtW zmlJ^aXtK9uy7#{2=TDz{`dy69lh;0MTKQIfY$x;Q?=SA@o!rsd+B&$fY5tM+`Ptbc zUrc|0VaNDn?{l+wEbJ=GMRU*0(yoi|>_?lAUgn6#<6pNZuiQ@%mq$-D4J=OWk9u#q Mt2_D0fg|Jp0QaemYybcN delta 535 zcmV+y0_gqN526G!iBL{Q4GJ0x0000DNk~Le0000$0000$2nGNE0IF$m-T(jq24YJ` zL;(K){{a7>y{D6rAs2rD2XskIMF-{z4GJ9^yNZJI00056Nkl7)GBr z#KHta)TjulwzaiLngxrLY4azdLfZTQ!9rWhq{uHwWfc%&EOs@J6c!>u6s<)fvGLg4 zVpwL@k4>?2=Q-6d!@!*L-pjH(D;Z;qF~&5M7}f^^W+c6rv><fJcmez>T;I=Go{H@-1^iCeKIAT66=53K07jZ1U%DNd zGWoIy@0uzP@B@E%W_in7-tv~WyyY#QoBVcd%GvPk?VtoO~3Hp8{J=oBTYm z_JEa8fB7W5n1t>VArJW^`=uaumk9aDC(*+m!G004lb^0w;$;!?l23AP`|R`8o==CN zeSz_4fO}t+oV${=BWVPfm86LH8xa@78sPB&_r8{NCTUw&(sxPQlDgTyyDu#5Nf~2| zF~*qsa_e7Z)6ZTjlICmX)`^IZ|06(4(qT;p+=_@lgMJx0lJr?pyJqrR>Di4j#u#Hv Z88>mMzZekbEp`9^002ovPDHLkV1n&S^)CPb diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/editor.png.mcmeta b/common/src/main/resources/assets/ftbquests/textures/gui/editor.png.mcmeta deleted file mode 100644 index a39ce83c..00000000 --- a/common/src/main/resources/assets/ftbquests/textures/gui/editor.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "texture": { - "blur": true - } -} \ No newline at end of file diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/editor_white.png b/common/src/main/resources/assets/ftbquests/textures/gui/editor_white.png new file mode 100644 index 0000000000000000000000000000000000000000..8bf87184b69e3182f3ee311d8b06a9fc225c533e GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP;jZI zi(`mI@6t&Zc@Hb_xSWq&SpVmc#MJc0lQ&qeacqvUm&ypdbwxv6QKh>)J(|OFjfV>d zg9q oTKsm(B+hwmKXjrVCKkB*2e598_;sxK0MNkzopr0MxWy6#xJL literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/emergency_items.png b/common/src/main/resources/assets/ftbquests/textures/gui/emergency_items.png index c3cd9326a30dcb0b389083986c4a3ede2d9f08da..b636a940c890fa3e0bf35d3ecc2eec8459902287 100644 GIT binary patch literal 1734 zcmbVNU5MON6pmZ0?qXMqlv3Tcm+UT7cJrUiOfDVEbZ701m~q%0=vMpCJIS4yFiCDq zvO6=&LbV8`NUI2oAeKI@4}Dl4#TM&BrQ(Yq6x2ttAn1c=MYN^XoB0WC-EB()Np6zw zeCInq_vBQ$bZFbib0ZAHY%3P>bM*d9d_K9AUiV(Vjp%LIFB}OOX7tPWd~9`U^m&GP z{E}T+h!%`jph;XFS)_{jw(C+Csrm0)(ffvF4HlzeDju2?Oju*mqmhJLFx{hB9Ea*a_W|qyx4#9#^1~VkU zK<6dS6h#@NbsnWqO3_o(Ko(_H5EVg^IWY~@43rhnKUnH6uxfBF|5D!>eafFhXvTy#@&$<(?oV&HV0Tc&^=>|!qpDOO6beuG3LY>-W;lh1cKpt&`S z#K(qOTsLtMMzc#ajDA8kM2D4*kA*oLlEuKpvrAOwcpQxnX9A2O5>yCr29+ugBm-IF zB^m5HYkCyAV>S0o9_I#iV@QG%k_gBrxLYn}f?Rj8(*lDZ2@ zo5n&BdLY;`VT}YXq7mCJs$;?T>MTg|2xo{x0_vEmQ@Sb)0~Wn7LY|3>`7BF==55=8 zqE=O{DoS%mlXOn6sWOMsRm5Q_RW-FLGBr^i*yoA47?*ZnZ&CZSE=!W8nH<73i?cGS zMoA>v+L=sRk#v=|wKcGRHL&U4Le3-e#5*qT30Sa0TCGlhOU&ap`YXo<-8O*8jN3cQ znsHq*RnU8FZ;*k9i=b!UYG6uwpK|wLA*n?z6yRK)X6wQIBy6TWL`(PA{&3aXO#40k z_ek3Ni8UL@t7AGY1vZXGi04YLEW*7N>wddq1`XhJu*J({q|%3EC}WRO2Xy3q_iK5c zj_dVeK3B<{UYpO2UItHv9~W2Nx_x}TGo*J;Zhv{pu9HU&o@SlND?8r*`-xA!7nKix zD6QVQHdLBk14qC4<#q7hryuM-4{y9XJhY3MSlKzfXQFWS%$~7R=P&Hsw^m?>{@n4= z(dO={*{7E-%Hvz!oX9P!${%uW?4SIwv7c714)Y7m)!#?1@68;7Tfh48(h76##5?ksbL?vTrzy^s^6LkWo%j#<2`Bvk literal 4756 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 literal 5793 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�kcBCn2H7> zT}^W6F$;}C^6ke%0x92#l`@#XN)TSnG`5Xt_!)-bJu^&JDZ}?njzH#9S(`RMOiXX4 zuOAb^o(%+1KQF#88j@cTd>K>`Ty&dg5l*ULH4X!#Ft}thc5Ip#UlyP3`xlZ!TyQQt z-vR%-l^_^|rDNE~I0S=u#&TvPw%-QeAE7T#AK#0MMRYKh1j=2{^Mk8CSeb4qISb6V zF*AUfBs2`KlrH?7V=)Y$t$QwDt?IV{2=>q;@Z!teSj5%_V(K_8+xe2cX2r$kq64Lj z8HUn?Bv>n1Y@1`)=NL*CJ{QJ9`mTN(;6mYNx+0zdNYU;^dKdvBins9~zFfQTlroqB zC`mBMzXYX;ZJVj6wm9CZwAwCGKMlZwjLaXTyA+CnBf^+IiG(q3Rv)SFQR;&sN(j67 zW(L|QR7cFSz%b!9P(5)Bjb4&)`K*tzMAc6N@Z`+c&@b@-9upgiMh&TDxdu3fOjJu4 z24M=O=Cj5i#^|bkhCx>wc@4!{KmOt)7Kmyueq3}T=>f3BE=$sWTjaXS1Q_!CdZs~W z17wNpTk`5G8578Op=z+q7fa6M)sEw?p=I3fr+L&RZWtQKu~2$p4YC1>h?0!-DAJ_N zES5)SCNaZcAQCea-n`aL#5yC4=hEv#WRKv7YpU>K?w%z$BdW$K!hDz;7Tf>lYBNEoKq)e-rSq{&xS zYk=O1s>CvOsbZ}3;FWA9%mHlM&)DZ!J_p?z=X3{oGD~byZ6UP==)V~9rj($R3C%#e z1(Q%U**2vM$B+?DTZDE9-Q+?EAYQEjhFpUX2x`?wwFVe+wFVe+ fwFVe!O_=b1sN*)#XYEM4D%dJC%_{6#lbj@T*&G{pw>zsdwprKdNVlyIJ(HZ7i95+j zlQTOr3s$ifZLxT%N-0906cpT-f(6$iN~wLQttk2+w1Ns%i`c~nK|wv48?9E04J0|q z`Of$M-+$XXJ@sI`e|0~{aq(O>lV|T0(cO0=d#?HAPsCm^Kf5*LxSMW??(4Wiuiwsb zH(YcIGjzt>1TEr9$RoQPfRTUXR44WQB4bck+y9^l|T7lzJhj@I%h>D~}4S~7Z*5LX* zS}*LxiA79qAYWD_5NT=wZL5d#YeBVT+_q#~#V+<}$goNe>sJURVTJq)b#MDJ11z?t z*|Tv)UtG6mBBYaZOhzXlS44+}rjO-34oNMr@Z=nGb1+il!-)VRN`e9*)o!MyyDsx; zQc_fYXp7_7q#h1masp=%#fA{2O;msg^n#*5Rfh>}9Z(RE0_!s_Dz1 ztY~aR(N)2=1xqAw5mW5AsElRbD+_!tj&OohNx%#<@3fW|rU`RiNRemZT*eTXXvuMG zSkh8OwWR1Gw$h52&=ZO{qNNjJs%WXnq>hxN+E&5NXNXmcQrkUm|IhOe2M+5kRJ~@N zsN^SydgrRR$1QQF$AJ73CG%Lg%-0%@JtR)+?Bi{ztmou#l8! z9R+y2%%XMmdXky(SB|Lu0v9r~20N&v2!M4R5FKJAe9ExUem^F+&@N&kmjWZp9sa>$cA>{jux&bG6Accb@zF!cyVQJom#`Y~M#O4{Brm j`yM$G+;)*Xwrl_B;ybSv;oR`CXnyA=r!os0c0BzTh|&3l delta 515 zcmV+e0{s1)42}ddiBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^Z)<=24YJ` zL;(K){{a7>y{D6rAs2rD2XskIMF-{z4Gt(DZrB_a0004-Nkly)r{V6vxkI z6jGy5c?U`#t>FXmD{AI0OcK z(2KtB!~@_}vM1mGsE#Z6I?$K%OJD<-0_s2;XaPIIHi0YY_JOsZ20zfB-2;olD!_$; z^u#EcitLwwj%=GngCEQBX?C2#>%w1gU-o+1wj&75q5xOuL#?bB5di% z4OjuXg^Dne#2WCZAlJYaFb&jzb8!urk?cmg55Q`6B0p`%NucS?gEwI44Wgm2tpE3A zWwYA9XUyowp1(5jF`8lffAQEUvI(WDnVX{CusMDq&+VXFo-;#mv+45Y`)!e8|TYhCZrnAda zHL|=wEKfds2psGpK@d=mK{sfJ3F_K%j~9t`dJJXIgYX4go=63Pd3PF=SxkYY>I%^` z1C%TkkKr-X8ru&H%_u<4gu0<)`lw>L7xT}Ooe#qd^gv5TteHMb05!cxww`HMf--aN{Xv1XSC*d*J z#Szq1Ew!l!^hkz_7UOnLxJMvu(}0FN5m-ILMlHr!(qd1b&aNL4Abjh(nT*Hk5(Jru zgioFnW(*wiSaecbiYT0+30sT_ojfVj%%|2ws2o$wSzKeRJ&e@!P-S2gRowu4=KRoO zon-F=FQ|h#wdFKyimoY|Rnv83Sg2s`({!Y1eW=Skzp?Zv)IfR(6|IM$B56F#@l(Mb zK@AoMSXk@_xJh9YHf50c5tUh+#X_*q&g^O7x~Li^9EXHf9a|PgtG@3cQt%36X3L9=Lk>)kdRv_GMC5FP*s`-urnMJ^kSi zJ8!O>zxbl`BRY3v(){f|quKiHFYmU$ jdh6TuH&3l?bH5nLeYYpSek}KE+GVSgQ_i*5j=%E{-n!d0 literal 4010 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 Q=l}o!07*qoM6N<$f;^9j)c^nh diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/info.png.mcmeta b/common/src/main/resources/assets/ftbquests/textures/gui/info.png.mcmeta deleted file mode 100644 index a39ce83c..00000000 --- a/common/src/main/resources/assets/ftbquests/textures/gui/info.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "texture": { - "blur": true - } -} \ No newline at end of file diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/link.png b/common/src/main/resources/assets/ftbquests/textures/gui/link.png index ba1b97e0cbce2f519960a5cec8b41a7d6194ba43..dce870f263febccc6e5dd043927d4cea401fb5a5 100644 GIT binary patch literal 1640 zcmbVNZEVzJ9Ph!YCrU^(5@HZa_XQ%o_S$<{>$-7X2Y0gD=5cZ7qCl^Gc31AMPi=ej zb`S%Yg^WcL6GC7vS+Z;&CK;0XMo`g&WE!IZb(k4~ny4T|1Bui534D5Q0Y!;4Y5TPO zJ-`3|_kZhPcju<1OCDW3{9LG^KLop1A5Tx0!SyGAA%%(bn2u#^fbxVaB?l4MeShNHJxmwjw z&>OUxS&I{j7*&#V%IBpWO%hHCDde)U|au8U@a>F@(@VV~ha}%`O8C zsdGc`uf{Ofs+br~rUrgJ6#nuw?ipBp!d1Oxc46=A zA<^A+S+YnkTj>oibTIWZV(XLaMM~2R?{N3YvYTZMJpE%b$aAbmg zt@v5^VB$G@>!sam)vWfpe`2)h=<+7_$BW$CPXExnvE%qf8|)qXVE@9N2d_`gO}>-+ z;^YO*Gxu)Sne2D=^QJKM_DOE=l~1|Q;;Gh4zqIUs?Ci2ndPWaVJ>yjt4p>*PJztIQ z2)*_Fi!0tZ(EZcMWcZ9LDMVjdvny$j&%Ay){%20Oo;%?vOkwcn4PUp-MgCak{0n03 Lo#L@4x9|H4;sz!d delta 310 zcmaFC^Mq-F3O`$tx4R1i82ohJT|ZG#yq(LPit>VxTIyR+n#9Rzs%UdZ=c7SGmP6a zl&Y`Z_v#4>d-doFKj+>@cX(IDE>O9zC&M|X>ZX+W2PU`0%|dTd!YV=j^>p=fS?83{ F1OUAndBp$# diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/link.png.mcmeta b/common/src/main/resources/assets/ftbquests/textures/gui/link.png.mcmeta deleted file mode 100644 index a39ce83c..00000000 --- a/common/src/main/resources/assets/ftbquests/textures/gui/link.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "texture": { - "blur": true - } -} \ No newline at end of file diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/pin.png b/common/src/main/resources/assets/ftbquests/textures/gui/pin.png index c2ab35988144e3596cf83ca8e7d82e9bc8d5af72..7ca49323182e33b62a3ffc1c3471adb397e41721 100644 GIT binary patch literal 1494 zcmbVMO^Do798c*Y?XF#NyRM+VN#4wandHTn z?9R+$OWm8G2Nl7+h$!`<=s^@jM3Fss^k5H)2U~A?=t57Whx*=pgjTD?29mtw{oe2Y z|NXySt1mx!VD`aTMNtmas_u$--zV>V_lW01S8ovU+MiUPOBH2)N8WqhIXZtxQD%0- z#%i|eJ&k=9X(V7xstuwu<_y7xnh-L%~qF$WhfdfapSghr51i=WBbse}U4T4p#4l0aOU~7iz z>$(X_wnmDiXxYU_fvKAXq+7@^RlS4@Wo%ktazSB^2Q9qfJ~1&Sz8u)evIHa4@AtL7 zr7_+{hHcwOH<4+o0->hEI3oi!P7hBRT$=hkOtO&0Kr)ghThAOQTpeqOlAJb9Cvg%H zLj#f^L(`?E5isy`T(Zu4BjbUOXpcrT&QgIja%|FJ8B06tU#Ro#TMUTUdR}hhw!TDB zZX(T=HiV2xKyHgp8^eU66`Hbj?$f0W;pSnfCcza>Nyd1CvEDRO^{LCiJf;~Yc;rkN z2dtkSx#;tK0AE({CrtdSR?lCN7t*lQtU2KbJ-MOBS z@E*xd91B5z*Erg{scWZjF$&}|A41|IA7eBYvx|!%b>VsSPch(Luepnj@*5Z4erEnV zu&+XmOS8Y;;C$xVALqWLQ0sLszj%G;;Qq(1eW-Q|pYMKD`0dA;;oQ66$ocJ8w=31N zhn~GS2VvuzpZC79>UMPH{^ctRZ?1KBUr;Qt^~v|j<%8SXF+2McpM!60x#vIr;ohCS z^`{k*t3%}3F$y-}mc0YamrLDgJAVJ(} literal 1788 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!2kdb!2!6DYwZ9429ZfbK~#8N<(hp= zQ&$wgu@vg~kSXJ9{n)Ue0wD_s|A+#TE-GwGX$T1V2h*9c`4NLSSweJkS)h#&hM<-~ zOo+kh5au5W78SFpEs&T+hmlM{M23QHE{mcFW#`t@<^e6d_xc_@<(CldIfcOe-Sh4{ zx3BX;LqlEWG9vswXA!&r4-XG_i9{mCkaGktAR{9qU8~i8k0Iv>UVuuaQYR-Te^pde z^c|)+MbH8i3PsTJ<;&yASfkMt@F79a0umAuR*OU;KMXArbUGcU5(F(^?b@}eIJBWw zt2vb*SOHl62^fxpO9_G%kd&14A+`J`!j%NU3XsWUQXD#j3kj~izP>mV7OkzV#-&S_ z`Y&F*I0jR8S+;Chyj(69H#ax8V2Tlf6)-wFI%Y5!&MsN9#80VI#$wto&PWjSUBGNM zi$+F9+%TLHwwHroE5O~|-L0ggM89s`y3a5*Eo>@5kOIi$4;(mf1p0tYn4%3+34#;g z1{4<;vzojWCK3cCfULZ;lea=wf?x!2vGNn4BS8=XxLo;(OebO11vs>C>!55aX_f#D>e zs~l`^Z~yrkAdyI1G3~ged`EKJd1q_3~< z_lAasnp3Av{RIEW-_YAvay|K7yLN4T`SPV@@@$}e34mE~d3m`$E-sGo1fD;C4leq- zVFOx;DW{pZ@@%1f7XZsNHdgZOK?gVF20v{`Hg|z^}Oi18z!?TA|0tgfdQjidh zX-?p)?5Q{{fWU_YKFgj8CjtmuN`Qlne)sO(yp=r_&IAy+kZ|YDonJR^-kdQLlP7R~ z9De%r>BzQi+j6d4xl)ZOM#yBc(13sde++qt(+bGS%F@8fD>^zl{$yJT&^CLMv%}S^ zS527W70v|2#Kc4%Jb17kPJ8LMZry5yuP(L{f`Wp4Pn$B% zuJiKp3W0EbN=nK{AfSz{1aEKefVQ@_GrhgNe_@I@I1x}*R(3cdA|eGtf(JzOEh|>6NWvknI3-}s znl-C)a&ihWw8y-K3m016LPH5((3PN6DkG#)={p$m25SK!At7?DR{J9iJzizTGcYi4 zZNr8QD~}&PUXLk85?ozf{os;$4@2HyC4hW>m%O zrKRn`(8kcvP&Z5}87kukxPOmf+97l#SoaS;VI&|nHa2qa-o5289QS*jot@`WQ&Zy& z2E!#x(PBCYGtmgq7C@Sv;^Jb`-%~%lXg+=Vw08aa^`CTgb=}7tBc_r7y}*=DnYe(q zfWpGUlEA<~>c`a{@87>a6OOI+~cRdp1GZ)Ij?roGDY$CLt~*^$-N)wRI=o*Z(>E$-{m($X?IySy{N?(YR(-mtIq zV~RH%3V@YxudS_Z2n!2Ke)jBHcYc2UrlzJQM!Wp$fWtjt-@bj{lF7q$cn-R{_&0I# z1iJ#Vv$M0*YW1G_`g$E~cC2r4uLF}Vfw;K17`$xfC4 diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/pin.png.mcmeta b/common/src/main/resources/assets/ftbquests/textures/gui/pin.png.mcmeta deleted file mode 100644 index a39ce83c..00000000 --- a/common/src/main/resources/assets/ftbquests/textures/gui/pin.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "texture": { - "blur": true - } -} \ No newline at end of file diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/save.png b/common/src/main/resources/assets/ftbquests/textures/gui/save.png index f8a5affdfb194a3a0bc2ec806e3659f6e263820d..14100618080d0fc0eaef3b90d14e39467e31afc0 100644 GIT binary patch literal 1761 zcmbVNZD<@t7~UvNn|?r{LQ_GyY^zk0z5U+39kRADmzcxuHKYfL0ikoVb9YN_ch=p# z+~w$xDqWM-P)wY{lkwr)^#jyMzcjb7{g_E zvJv9Lja(iz=8@@e`|o8(>VOh>IEHN9tN0P9TU?75&~@@!;Mf)M~i+8>%1TB=`v(+ghDrnUE;F|BP@_=Y;ja-+XpY` z(fUy*PBdad9R`Aw5)+?VKnL}3K{c$jj5|oc73^U@jwn{@VS_S>NmM55Q1?DxVSvWg zwtF_#)Z%$P6Hz?AK;7sBWKDFGUktD?jU!SG5guQlGWR6j1Yj)0FeYK1kV-dGQ(eid ztfeHG-8bX<4yi?VU$z5hV2mv;NgFSTylCbn3CJc;l_60AqS%Jo#Bqy@|A)#zN&`*1 z0!oXF3LJv}pT@RM95cnmI?Zpv{kqQZ^VX97PsjzL3^`jX22xl`EN1aZ& zt^=T?>0(+pc+*Vlyl$w7hq|uunyyHuVW=|H)7||Uf~rYsyZarwUs2PlfhC1U1+4Q0 zSrsXhV)7c+G)FQFgrL#ge<*b6*@Bgu=1ERmQWId(jcB$OJ4fO$ez>!$xNNHo07OZ7 zTO3OAiXE==+Fc_8H|9Z`wpPZJ^cv}I!y;0QYcRy4B^s^k*ORcG`UoyuTlH+<>W z$7s9$JewKKr<+L4Ew7&J8yLRlo#M*I3m-f!i*ziXc;W14D|CEHCwte~FE3s=NBZe_ ze9O$KLiy+Oe?IjH9j}~eHb)OGolMrB>~(*;q^v%->%_&m;~SqCSXGwxe(~?2cl*Qx zr~8J_?3;ef`Zdn|7*y{qgLp@56IDDZ45xoo{S^?eDL? zza!8m2H6J+xBm3}k--CR4NW|Bthn;#d%JhNd|Oo>fv?{=_ruV)TN6e7%rCk0Esf^H R(c~wT9nWRnzVFDR{{h@GH<$nb delta 435 zcmaFJyPw&(Gr-TCmrII^fq{Y7)59eQNGpIa2OE$quB!S1q}Y|gW!U_%O_7% z6t8DsFY)wsWq-!S$IYnG7VG^Ts7y99B%;JQKQ}iuuLQ_tU~n!1(ZK& znDg@b2dkzPF$d0{x8Ly8!P%LaO+J$6n7f$!b>~p_2Sp;9Vw2}^U(h}9EICM5eWl8g zXADjYT_$TB5dDAS60@(cqGnB(%mm}V#|}(w*|Ltk!0N&2?ed40$2(-%CyHEjd diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/save.png.mcmeta b/common/src/main/resources/assets/ftbquests/textures/gui/save.png.mcmeta deleted file mode 100644 index a39ce83c..00000000 --- a/common/src/main/resources/assets/ftbquests/textures/gui/save.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "texture": { - "blur": true - } -} \ No newline at end of file diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/search.png b/common/src/main/resources/assets/ftbquests/textures/gui/search.png index b6bbee08acc5209fc69d322fa659cbcd7784715f..5ad9e08c5e3dbad8d2e6c087d28db7266b8121ce 100644 GIT binary patch literal 1508 zcmbVM+iM(E93GQW)2$IjgSnZfX`fF>JRazUAzhv%5oP=8Q8Z z*-gL)1;L1diU`*D;H5~FT72k(ELfkEzW4_;RHV@ti$qkc=tDfSm!Z{au>)t$?K|J^ z{@a+JdvZASaEjx&;nHle%;x*zF|?QcM}OIcY}yyhJ{@t~{s-c57k7GdgyZ)7R2m)Xc<$!itCPV3OntK0`J(SurO&UR#3nVXLdcrC)ejH zXnh$Ows7nyKh*+^z{3>sEzk8M&@zP%FJSBVSQhvWgf5%HbS#ixwC4E&2{CU-s)!Ut z<8y`tvoNb0*$G}#w2Z9ivZ{$n4rKB`)A`;fFma(>1LflJo-npEg$AVokmY8xDK&M8 zgmqap3`15lS<^&@5TiAp!j|Yqhx!af9HGz&s6%`{W`tF;LQR3G+O@$85?Vj%`H6W< zZoxoSB_+101GG_s3syq6Biu$ZcCm+j8ZoSzV1ovsBx;af(8c zh=|UtGBbJ(xg|QPtOZyu3@xZg_!TOpZF0Jh)Y5ym}#eXw6H8t@*@g;giA$JU`9)hV*{8+SjR9g zB0Z;xb}nO!`I=#iC_h;>paxYPW&7`o1g*rO?Z3DG=liEZht(Ez@0cg9xHu=ktP`t1^}Wsy-fkdamBXKJ9h5a16|r?12fY92zM72ks58n5Kq^cw{D+L zGSgm;E3s>c{C68WcQ;gRAI@4qyiA%9+azra`>c0`tVx}1AAglKxYMQLbS3}FJLRq6 z!Grhcr@lfjyAOT2H1_+_p7izY)YZz+!oo;icT(u}fcEP3?X=_|lu( VQ|*yQuf%=0G&5KHhJBq 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 literal 3851 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 N002ovPDHLkV1g=z?h^n2 diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/settings.png.mcmeta b/common/src/main/resources/assets/ftbquests/textures/gui/settings.png.mcmeta deleted file mode 100644 index a39ce83c..00000000 --- a/common/src/main/resources/assets/ftbquests/textures/gui/settings.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "texture": { - "blur": true - } -} \ No newline at end of file diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/shop.png b/common/src/main/resources/assets/ftbquests/textures/gui/shop.png index a8ea6921c21b08ea752eeff609e94384debbf330..88e2af77f1c8bc6ee1457270e54a9e31aae916fc 100644 GIT binary patch literal 1734 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 M07*qoM6N<$f_KG}S^xk5 diff --git a/common/src/main/resources/assets/ftbquests/textures/gui/shop.png.mcmeta b/common/src/main/resources/assets/ftbquests/textures/gui/shop.png.mcmeta deleted file mode 100644 index a39ce83c..00000000 --- a/common/src/main/resources/assets/ftbquests/textures/gui/shop.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "texture": { - "blur": true - } -} \ No newline at end of file From 6f053e62e517f5ed306ea2e57f883fb25b03e779 Mon Sep 17 00:00:00 2001 From: Des Herriott Date: Mon, 4 Nov 2024 10:12:14 +0000 Subject: [PATCH 11/13] chore: changelog updated --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ff3687c..099b43c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added * The pinned quests panel now has a "Pinned Quests" title for clarity +* Added a feedback option for command reward + * In the case where running a command produces no obvious effect, this can help notify the player that something has happened + +### Changed +* Overhauled and cleaned up many icon textures ### Fixed * Fixed context menu tooltips sometimes appearing behind the context menu From cf42f8b65e91aa06c80a5087eac34c3efe4144f3 Mon Sep 17 00:00:00 2001 From: Des Herriott Date: Mon, 4 Nov 2024 16:38:55 +0000 Subject: [PATCH 12/13] fix: make a couple of strings translatable https://github.com/FTBTeam/FTB-Mods-Issues/issues/1376 --- .../dev/ftb/mods/ftbquests/client/gui/quests/ChapterPanel.java | 2 +- common/src/main/resources/assets/ftbquests/lang/en_us.json | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/ChapterPanel.java b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/ChapterPanel.java index 9df7f371..3286331c 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/ChapterPanel.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/quests/ChapterPanel.java @@ -269,7 +269,7 @@ public void addMouseOverText(TooltipList list) { chapterPanel.questScreen.addInfoTooltip(list, chapterPanel.questScreen.file); if (getMouseX() > getX() + width - 18) { - list.string(chapterPanel.isPinned() ? "Stays open" : "Doesn't stay open"); + list.translate(chapterPanel.isPinned() ? "ftbquests.gui.stays_open" : "ftbquests.gui.does_not_stay_open"); } else if (chapterPanel.questScreen.file.canEdit() && getMouseX() > getX() + width - 34) { list.translate("gui.add"); } 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 b505b13f..de239a78 100644 --- a/common/src/main/resources/assets/ftbquests/lang/en_us.json +++ b/common/src/main/resources/assets/ftbquests/lang/en_us.json @@ -255,6 +255,8 @@ "ftbquests.gui.select_reward_table": "Select Reward Table", "ftbquests.gui.select_reward_type": "Select Reward Type", "ftbquests.gui.reset_progress": "Reset Progress", + "ftbquests.gui.stays_open": "Stays Open", + "ftbquests.gui.does_not_stay_open": "Doesn't Stay Open", "ftbquests.gui.reset_progress_q": "Reset progress for your team?", "ftbquests.gui.complete_instantly": "Complete Instantly", "ftbquests.gui.complete_instantly_q": "Complete this task instantly?", From e777df65877510fb516b9d3f0cf3ab2f309828df Mon Sep 17 00:00:00 2001 From: UnRealDinnerbone Date: Tue, 5 Nov 2024 11:09:40 -0600 Subject: [PATCH 13/13] [1.21] Disable Blur in Reward Screen (#755) * Disable blur in reward screen * Add disable blur option to reward --- .../mods/ftbquests/client/FTBQuestsNetClient.java | 8 ++++---- .../dev/ftb/mods/ftbquests/client/gui/RewardKey.java | 12 +++++++++--- .../client/gui/RewardNotificationsScreen.java | 3 +++ .../ftbquests/net/DisplayItemRewardToastMessage.java | 5 +++-- .../ftbquests/net/DisplayRewardToastMessage.java | 5 +++-- .../mods/ftbquests/quest/reward/CommandReward.java | 2 +- .../ftb/mods/ftbquests/quest/reward/ItemReward.java | 2 +- .../dev/ftb/mods/ftbquests/quest/reward/Reward.java | 8 ++++++++ .../mods/ftbquests/quest/reward/XPLevelsReward.java | 2 +- .../ftb/mods/ftbquests/quest/reward/XPReward.java | 2 +- .../main/resources/assets/ftbquests/lang/en_us.json | 1 + 11 files changed, 35 insertions(+), 15 deletions(-) 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 f6b80165..d45f1a77 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 @@ -114,11 +114,11 @@ public static void displayCompletionToast(long id) { } } - public static void displayItemRewardToast(ItemStack stack, int count) { + public static void displayItemRewardToast(ItemStack stack, int count, boolean disableBlur) { ItemStack stack1 = ItemStackHooks.copyWithCount(stack, 1); Icon icon = ItemIcon.getItemIcon(stack1); - if (!IRewardListenerScreen.add(new RewardKey(stack.getHoverName().getString(), icon, stack1), count)) { + if (!IRewardListenerScreen.add(new RewardKey(stack.getHoverName().getString(), icon, stack1, disableBlur), count)) { MutableComponent comp = count > 1 ? Component.literal(count + "x ").append(stack.getHoverName()) : stack.getHoverName().copy(); @@ -126,10 +126,10 @@ public static void displayItemRewardToast(ItemStack stack, int count) { } } - public static void displayRewardToast(long id, Component text, Icon icon) { + public static void displayRewardToast(long id, Component text, Icon icon, boolean disableBlur) { Icon i = icon.isEmpty() ? ClientQuestFile.INSTANCE.getBase(id).getIcon() : icon; - if (!IRewardListenerScreen.add(new RewardKey(text.getString(), i), 1)) { + if (!IRewardListenerScreen.add(new RewardKey(text.getString(), i, disableBlur), 1)) { Minecraft.getInstance().getToasts().addToast(new RewardToast(text, i)); } } diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/RewardKey.java b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/RewardKey.java index cbc2c0ab..02c3530c 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/RewardKey.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/RewardKey.java @@ -9,15 +9,17 @@ public class RewardKey { private final String title; private final Icon icon; private final ItemStack stack; + private final boolean disableBlur; - public RewardKey(String title, Icon icon) { - this(title, icon, ItemStack.EMPTY); + public RewardKey(String title, Icon icon, boolean disableBlur) { + this(title, icon, ItemStack.EMPTY, disableBlur); } - public RewardKey(String title, Icon icon, ItemStack stack) { + public RewardKey(String title, Icon icon, ItemStack stack, boolean disableBlur) { this.title = title; this.icon = icon; this.stack = stack; + this.disableBlur = disableBlur; } public String getTitle() { @@ -28,6 +30,10 @@ public Icon getIcon() { return icon; } + public boolean disableBlur() { + return disableBlur; + } + public int hashCode() { return stack.isEmpty() ? Objects.hash(title, icon) : ItemStack.hashItemAndComponents(stack); } diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/RewardNotificationsScreen.java b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/RewardNotificationsScreen.java index b60fc3b1..489922dc 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/RewardNotificationsScreen.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/client/gui/RewardNotificationsScreen.java @@ -42,6 +42,9 @@ public void addWidgets() { for (RewardKey key : keys) { add(new RewardNotification(this, key)); } + + boolean renderBlur = keys.stream().anyMatch(RewardKey::disableBlur); + RewardNotificationsScreen.this.setRenderBlur(!renderBlur); } @Override diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/net/DisplayItemRewardToastMessage.java b/common/src/main/java/dev/ftb/mods/ftbquests/net/DisplayItemRewardToastMessage.java index fc91eb19..488436ea 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/net/DisplayItemRewardToastMessage.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/net/DisplayItemRewardToastMessage.java @@ -9,12 +9,13 @@ import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.world.item.ItemStack; -public record DisplayItemRewardToastMessage(ItemStack stack, int count) implements CustomPacketPayload { +public record DisplayItemRewardToastMessage(ItemStack stack, int count, boolean disableBlur) implements CustomPacketPayload { public static final Type TYPE = new Type<>(FTBQuestsAPI.rl("display_item_reward_toast_message")); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( ItemStack.OPTIONAL_STREAM_CODEC, DisplayItemRewardToastMessage::stack, ByteBufCodecs.VAR_INT, DisplayItemRewardToastMessage::count, + ByteBufCodecs.BOOL, DisplayItemRewardToastMessage::disableBlur, DisplayItemRewardToastMessage::new ); @@ -24,6 +25,6 @@ public Type type() { } public static void handle(DisplayItemRewardToastMessage message, NetworkManager.PacketContext context) { - context.queue(() -> FTBQuestsNetClient.displayItemRewardToast(message.stack, message.count)); + context.queue(() -> FTBQuestsNetClient.displayItemRewardToast(message.stack, message.count, message.disableBlur)); } } \ No newline at end of file diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/net/DisplayRewardToastMessage.java b/common/src/main/java/dev/ftb/mods/ftbquests/net/DisplayRewardToastMessage.java index a310a243..e0d7cdbc 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/net/DisplayRewardToastMessage.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/net/DisplayRewardToastMessage.java @@ -11,13 +11,14 @@ import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -public record DisplayRewardToastMessage(long id, Component text, Icon icon) implements CustomPacketPayload { +public record DisplayRewardToastMessage(long id, Component text, Icon icon, boolean disableBlur) implements CustomPacketPayload { public static final Type TYPE = new Type<>(FTBQuestsAPI.rl("display_reward_toast_message")); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( ByteBufCodecs.VAR_LONG, DisplayRewardToastMessage::id, ComponentSerialization.STREAM_CODEC, DisplayRewardToastMessage::text, Icon.STREAM_CODEC, DisplayRewardToastMessage::icon, + ByteBufCodecs.BOOL, DisplayRewardToastMessage::disableBlur, DisplayRewardToastMessage::new ); @@ -27,6 +28,6 @@ public Type type() { } public static void handle(DisplayRewardToastMessage message, NetworkManager.PacketContext context) { - context.queue(() -> FTBQuestsNetClient.displayRewardToast(message.id, message.text, message.icon)); + context.queue(() -> FTBQuestsNetClient.displayRewardToast(message.id, message.text, message.icon, message.disableBlur)); } } \ No newline at end of file diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/CommandReward.java b/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/CommandReward.java index eda682f2..ce9406cd 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/CommandReward.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/CommandReward.java @@ -128,7 +128,7 @@ public void claim(ServerPlayer player, boolean notify) { if (notify) { String key = feedbackMessage.isEmpty() ? "ftbquests.reward.ftbquests.command.success" : feedbackMessage; - NetworkManager.sendToPlayer(player, new DisplayRewardToastMessage(id, Component.translatable(key), REWARD_ICON)); + NetworkManager.sendToPlayer(player, new DisplayRewardToastMessage(id, Component.translatable(key), REWARD_ICON, disableRewardScreenBlur)); } } diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/ItemReward.java b/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/ItemReward.java index 660c4563..f0e10090 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/ItemReward.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/ItemReward.java @@ -142,7 +142,7 @@ public void claim(ServerPlayer player, boolean notify) { } if (notify) { - NetworkManager.sendToPlayer(player, new DisplayItemRewardToastMessage(item, size)); + NetworkManager.sendToPlayer(player, new DisplayItemRewardToastMessage(item, size, disableRewardScreenBlur)); } } diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/Reward.java b/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/Reward.java index 11a697cf..1ea7d1ba 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/Reward.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/Reward.java @@ -38,6 +38,7 @@ public abstract class Reward extends QuestObjectBase { protected RewardAutoClaim autoclaim; private boolean excludeFromClaimAll; private boolean ignoreRewardBlocking; + protected boolean disableRewardScreenBlur; public Reward(long id, Quest q) { super(id); @@ -47,6 +48,7 @@ public Reward(long id, Quest q) { autoclaim = RewardAutoClaim.DEFAULT; excludeFromClaimAll = getType().getExcludeFromListRewards(); ignoreRewardBlocking = false; + disableRewardScreenBlur = false; } public Quest getQuest() { @@ -90,6 +92,7 @@ public void writeData(CompoundTag nbt, HolderLookup.Provider provider) { if (excludeFromClaimAll) nbt.putBoolean("exclude_from_claim_all", true); if (ignoreRewardBlocking) nbt.putBoolean("ignore_reward_blocking", true); + if (disableRewardScreenBlur) nbt.putBoolean("disable_reward_screen_blur", true); } @Override @@ -99,6 +102,7 @@ public void readData(CompoundTag nbt, HolderLookup.Provider provider) { autoclaim = RewardAutoClaim.NAME_MAP.get(nbt.getString("auto")); excludeFromClaimAll = nbt.getBoolean("exclude_from_claim_all"); ignoreRewardBlocking = nbt.getBoolean("ignore_reward_blocking"); + disableRewardScreenBlur = nbt.getBoolean("disable_reward_screen_blur"); } @Override @@ -108,6 +112,7 @@ public void writeNetData(RegistryFriendlyByteBuf buffer) { RewardAutoClaim.NAME_MAP.write(buffer, autoclaim); buffer.writeBoolean(excludeFromClaimAll); buffer.writeBoolean(ignoreRewardBlocking); + buffer.writeBoolean(disableRewardScreenBlur); } @Override @@ -117,6 +122,7 @@ public void readNetData(RegistryFriendlyByteBuf buffer) { autoclaim = RewardAutoClaim.NAME_MAP.read(buffer); excludeFromClaimAll = buffer.readBoolean(); ignoreRewardBlocking = buffer.readBoolean(); + disableRewardScreenBlur = buffer.readBoolean(); } @Override @@ -133,6 +139,8 @@ public void fillConfigGroup(ConfigGroup config) { config.addBool("ignore_reward_blocking", ignoreRewardBlocking(), v -> ignoreRewardBlocking = v, ignoreRewardBlocking) .setNameKey("ftbquests.quest.misc.ignore_reward_blocking") .setCanEdit(!isIgnoreRewardBlockingHardcoded()); + config.addBool("disable_reward_screen_blur", disableRewardScreenBlur, v -> disableRewardScreenBlur = v, false) + .setNameKey("ftbquests.reward.disable_reward_screen_blur"); } public abstract void claim(ServerPlayer player, boolean notify); diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/XPLevelsReward.java b/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/XPLevelsReward.java index 4325fb51..b3110fdb 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/XPLevelsReward.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/XPLevelsReward.java @@ -70,7 +70,7 @@ public void claim(ServerPlayer player, boolean notify) { if (notify) { Component text = Component.translatable("ftbquests.reward.ftbquests.xp_levels").append(": ") .append(Component.literal("+" + xpLevels).withStyle(ChatFormatting.GREEN)); - NetworkManager.sendToPlayer(player, new DisplayRewardToastMessage(id, text, Color4I.empty())); + NetworkManager.sendToPlayer(player, new DisplayRewardToastMessage(id, text, Color4I.empty(), disableRewardScreenBlur)); } } diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/XPReward.java b/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/XPReward.java index e08d6038..f05b2c95 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/XPReward.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/quest/reward/XPReward.java @@ -70,7 +70,7 @@ public void claim(ServerPlayer player, boolean notify) { if (notify) { Component text = Component.translatable("ftbquests.reward.ftbquests.xp").append(": ") .append(Component.literal("+" + xp).withStyle(ChatFormatting.GREEN)); - NetworkManager.sendToPlayer(player, new DisplayRewardToastMessage(id, text, Color4I.empty())); + NetworkManager.sendToPlayer(player, new DisplayRewardToastMessage(id, text, Color4I.empty(), disableRewardScreenBlur)); } } 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 de239a78..f878b772 100644 --- a/common/src/main/resources/assets/ftbquests/lang/en_us.json +++ b/common/src/main/resources/assets/ftbquests/lang/en_us.json @@ -476,6 +476,7 @@ "ftbquests.reward.ftbquests.npc_mail.items": "Items", "ftbquests.reward.ftbquests.npc_mail.time_past": "Time Past", "ftbquests.reward_table": "Reward Table", + "ftbquests.reward.disable_reward_screen_blur": "Disable Reward Screen Blur", "ftbquests.reward_table.hide_tooltip": "Hide Tooltip", "ftbquests.reward_table.use_title": "Use Title", "ftbquests.reward_table.edit": "Edit Reward Table",