diff --git a/CHANGELOG.md b/CHANGELOG.md index 4935275b..c91ba830 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,13 @@ 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). +# [2100.1.3] + +### Fixed +* Fixed adding tasks to existing quests sometimes losing the task type (leading to a '?' button appearing) +* Fixed images in the quest book not sync'ing to the client +* Fixed issue where using FTB Filter System filters would sometimes fail to find matching items for GUI display + # [2100.1.2] ### Fixed diff --git a/build.gradle b/build.gradle index bf55fcd0..724df26b 100644 --- a/build.gradle +++ b/build.gradle @@ -100,7 +100,7 @@ publishMods { // TODO: Migrate to something else def tag = providers.environmentVariable("TAG").getOrElse("release") - type = tag == "beta" ? BETA : (tag == "alpha" ? ALPHA : STABLE) + type = tag.endsWith("-beta") ? BETA : (tag.endsWith("-alpha") ? ALPHA : STABLE) def createOptions = (String projectName) -> { publishOptions { diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/api/event/CustomFilterDisplayItemsEvent.java b/common/src/main/java/dev/ftb/mods/ftbquests/api/event/CustomFilterDisplayItemsEvent.java index f8bd7991..c2727475 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/api/event/CustomFilterDisplayItemsEvent.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/api/event/CustomFilterDisplayItemsEvent.java @@ -2,11 +2,27 @@ import dev.architectury.event.Event; import dev.architectury.event.EventFactory; +import dev.ftb.mods.ftbquests.FTBQuests; import net.minecraft.world.item.ItemStack; import java.util.Collection; import java.util.function.Consumer; +/** + * This event is fired on the client to allow mods to register custom items to be displayed when filters (such as the + * Smart Filter from FTB Filter System) look for matching items for their filter. By default, only items in the creative + * search tab are checked for, so this event is useful for adding items with custom data components. + *
+ * KubeJS integration for this event is provided via FTB XMod Compat, and is the typical way for modpack makers to + * add custom display items for any filters they create. An example KubeJS snippet (to be placed in + * kubejs/client_scripts) to register an item: + *
+ *   FTBQuestsEvents.customFilterItem(event => {
+ *      event.addStack('minecraft:iron_axe {display:{Name:{text:\"Test Axe!\"}}, Damage: 50}')
+ *      event.addStack('minecraft:diamond_axe {display:{Name:{text:\"Test Axe 2!\"}}, Damage: 300}')
+ *   })
+ * 
+ */ public class CustomFilterDisplayItemsEvent { private final Consumer callback; @@ -21,6 +37,6 @@ public void add(ItemStack stack) { } public void add(Collection stacks) { - stacks.forEach(callback::accept); + stacks.forEach(callback); } } diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/client/FTBQuestsClient.java b/common/src/main/java/dev/ftb/mods/ftbquests/client/FTBQuestsClient.java index de234850..f984df83 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/client/FTBQuestsClient.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/client/FTBQuestsClient.java @@ -162,8 +162,12 @@ public static void rebuildCreativeTabs() { } } - public static Optional registryAccess() { - return Minecraft.getInstance().level == null ? Optional.empty() : Optional.of(Minecraft.getInstance().level.registryAccess()); + public static Optional creativeTabDisplayParams() { + LocalPlayer player = Minecraft.getInstance().player; + if (player != null) { + return Optional.of(new CreativeModeTab.ItemDisplayParameters(player.connection.enabledFeatures(), Minecraft.getInstance().options.operatorItemsTab().get(), player.clientLevel.registryAccess())); + } + return Optional.empty(); } public static void copyToClipboard(QuestObjectBase qo) { diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/client/GuiProviders.java b/common/src/main/java/dev/ftb/mods/ftbquests/client/GuiProviders.java index 5433124d..8f8c75ad 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/client/GuiProviders.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/client/GuiProviders.java @@ -157,7 +157,7 @@ private static void openSetupGui(Runnable gui, BiConsumer cal ConfigGroup group = new ConfigGroup(FTBQuestsAPI.MOD_ID, accepted -> { gui.run(); if (accepted) { - callback.accept(task, new CompoundTag()); + callback.accept(task, task.getType().makeExtraNBT()); } }); task.fillConfigGroup(task.createSubGroup(group)); diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/integration/item_filtering/DisplayStacksCache.java b/common/src/main/java/dev/ftb/mods/ftbquests/integration/item_filtering/DisplayStacksCache.java index 28eb5ac4..a995adda 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/integration/item_filtering/DisplayStacksCache.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/integration/item_filtering/DisplayStacksCache.java @@ -1,11 +1,11 @@ package dev.ftb.mods.ftbquests.integration.item_filtering; import com.google.common.collect.ImmutableList; +import dev.ftb.mods.ftbquests.FTBQuests; import dev.ftb.mods.ftbquests.api.ItemFilterAdapter; import dev.ftb.mods.ftbquests.api.event.CustomFilterDisplayItemsEvent; import dev.ftb.mods.ftbquests.client.FTBQuestsClient; import it.unimi.dsi.fastutil.ints.Int2ObjectLinkedOpenHashMap; -import net.minecraft.world.flag.FeatureFlags; import net.minecraft.world.item.CreativeModeTabs; import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.NotNull; @@ -34,9 +34,11 @@ public static List getCachedDisplayStacks(ItemStack filterStack, Item } private static List computeMatchingStacks(ItemFilterAdapter.Matcher matcher) { - if (CreativeModeTabs.searchTab().getSearchTabDisplayItems().isEmpty()) { - FTBQuestsClient.registryAccess().ifPresent(ra -> CreativeModeTabs.tryRebuildTabContents(FeatureFlags.DEFAULT_FLAGS, true, ra)); - } + FTBQuestsClient.creativeTabDisplayParams().ifPresent(params -> { + if (CreativeModeTabs.tryRebuildTabContents(params.enabledFeatures(), params.hasPermissions(), params.holders())) { + FTBQuests.LOGGER.debug("creative tabs rebuilt, search tab now has {} items", CreativeModeTabs.searchTab().getSearchTabDisplayItems().size()); + } + }); ImmutableList.Builder builder = ImmutableList.builder(); 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 f18521bc..a9765c84 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 @@ -836,7 +836,8 @@ public final void writeNetData(RegistryFriendlyByteBuf buffer) { public final void readNetData(RegistryFriendlyByteBuf buffer) { super.readNetData(buffer); - emergencyItems.retainAll(ItemStack.OPTIONAL_STREAM_CODEC.apply(ByteBufCodecs.list()).decode(buffer)); + emergencyItems.clear(); + emergencyItems.addAll(ItemStack.OPTIONAL_STREAM_CODEC.apply(ByteBufCodecs.list()).decode(buffer)); emergencyItemsCooldown = buffer.readVarInt(); defaultPerTeamReward = buffer.readBoolean(); defaultTeamConsumeItems = buffer.readBoolean(); diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/util/NetUtils.java b/common/src/main/java/dev/ftb/mods/ftbquests/util/NetUtils.java index 5bcc7a0b..87ee2061 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/util/NetUtils.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/util/NetUtils.java @@ -21,7 +21,8 @@ public static void write(FriendlyByteBuf buffer, Collection list, BiConsu } public static void read(FriendlyByteBuf buffer, Collection list, Function reader) { - list.retainAll(buffer.readList(reader::apply)); + list.clear(); + list.addAll(buffer.readList(reader::apply)); } public static void writeStrings(FriendlyByteBuf buffer, Collection list) { diff --git a/gradle.properties b/gradle.properties index a14baed9..95b0271e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ maven_group=dev.ftb.mods mod_author=FTB Team # Build time -mod_version=2100.1.2 +mod_version=2100.1.3 minecraft_version=1.21