Skip to content

BetterQuesting ​

64 merged pull requests.

New Features ​

  • #248 Added ItemPatternPlaceholder and integrated it with QuestRecipeHandler in NEI support code to enable quest bookmark import functionality. - @Nana-Sakura
    • Added: ItemPatternPlaceholder item, NEI recipe overlay support, Quest bookmark import from NEI
    • Closes GTNH#26307
  • #242 Added silent completion flag to RewardQuestCompletion and updated EventHandler to respect this setting when broadcasting quest completions. - @UltraProdigy
    • Added: Silent quest completion setting
  • #241 Introduced TextEditorAction, TextEditorActionRegistry, and TextEditorSyntaxHighlighter to the API; refactored PanelTextField and GuiTextEditor to use the registry and support syntax highlighting with cached visual lines. - @ABKQPO
    • Added: TextEditorAction interface, TextEditorActionRegistry, TextEditorActionContext, TextEditorMacro interface, TextEditorSyntaxHighlighter, Syntax highlighting support
    • Fixed: Multi-line cursor navigation
  • #237 Added quest line visibility toggle to GuiQuestLines, refactored lock tray positioning, improved scroll bar scaling, and added UI logic for auto-selecting the first quest line on new games. - @Algent
    • Added: Quest line visibility toggle button, Icon for hidden view mode
    • Fixed: Scroll bar size calculation
  • #236 Modified CommonProxy to enable automatic quest book update reloading on data refresh. - @UltraProdigy
    • Added: automatic QB reload on update
  • #232 Extended FormattingTag to support quest link formatting; modified PanelTextBox to render and handle quest links; added quest link support to GuiTextEditor. - @NotKaizul
    • Added: quest link formatting tag, quest link rendering
  • #231 Added NoticeConfig holder class for notification settings; created GuiQuestNotificationSettings for player settings and quest-level overrides in GuiQuestNotificationSettings within quest editor; extended QuestInstance and NativeProps with notification properties; modified QuestNotification rendering and event handling. - @alppp
    • Added: GuiQuestNotificationSettings, NoticeConfig, notification customization properties
  • #230 Introduced PopItemList for item selection and cycling; extended PanelInteractiveItemSlot with cycling logic; refactored duplicate code from task panels into PanelTaskItemBase. - @tiffit
    • Added: PopItemList popup, ore dict item cycling UI
    • Removed: duplicate code in task panels
  • #227 Introduced IQuestContextMenuEntry interface and QuestContextMenuRegistry for external mods to register quest context menu items; modified GuiQuestLines to pick up and display registered entries. - @Eldrinn-Elantey
    • Added: QuestContextMenuRegistry, IQuestContextMenuEntry
  • #226 Extended TaskRetrieval and PanelTaskRetrieval to support a new mode requiring only one item from a group. - @NotKaizul
    • Added: single-item retrieval task type
  • #224 Added countAsQuest property (default true) to NativeProps and QuestInstance; exposed toggle in quest editor advanced settings. - @Caedis
    • Added: countAsQuest quest property
  • #223 Modified GuiQuestLines to calculate and display completion percentages; updated language files with new translation keys. - @Caedis
    • Added: completion percentage display, quest line progress tracking
  • #210 Modified PanelScrollingNBT.java to check for Shift key state on click and bypass intermediate dialogs when Shift is held. - @UltraProdigy
    • Added: Shift+Click item addition
  • #205 Added DirectionalLine.java and FactoryDirectionalLine.java for chevron rendering, extended CanvasQuestLine.java and PanelLine.java with directional rendering, added config options for arrow display and hover animation, line scaling with zoom applied. - @tiffit
    • Added: directional line rendering, arrow animation, line hover effects
    • Closes GTNH#22515
  • #201 Modified QuestInstance#setComplete to iterate through quest tasks and mark all ignored() tasks as complete when quest completion is set. - @Eldrinn-Elantey
  • #200 Extended QuestNotification.java to use GTNHLib's TitleAPI via Class.forName reflection, added QuestNotificationEvent.java, new GuiNotificationSettings.java UI, updated NetNotices.java to include title data, added title timing config (10/40/10 fade). - @alppp
    • Added: title notification display, notification settings GUI, title API integration
  • #199 Rewrote RenderUtils.java color handling, added PopColorInput.java HSV color picker with preset palette and recent colors, modified GuiTextEditor.java to include color/effect buttons, updated format parser to handle both § and & codes, new color continuation across line wraps. - @alppp
    • Added: HSV color picker popup, color formatting buttons, gradient continuation, format code parser rewrite
  • #198 Added PopContextMenuHoverSub.java for context menu rendering, extended GuiQuest.java and GuiQuestLines.java to display view dependency relationships with new language strings. - @ABKQPO
    • Added: view dependency context menu, quest dependency visualization
  • #191 Modified NetQuestSync.java to check server noRewards flag and conditionally skip reward panel rendering. - @vulcandragi
  • #189 Added new toggle setting in BQ_Settings.java, modified GuiTextToggles.java and text rendering pipeline to strip color codes when toggle is disabled, preserves formatting directives on all themes. - @UltraProdigy
    • Added: color toggle setting, monochrome rendering mode
  • #186 Added new command handler in QuestCommandComplete.java to accept an all parameter and complete all quests via iteration, with corresponding language string added. - @UltraProdigy
    • Added: complete all quests command, language string for all parameter
  • #181 Added copy button control in GuiQuest with clipboard text handling. - @Faotik
    • Added: copy quest description button in questbook
    • Closes GTNH#23084
  • #176 Integrated VmAdapter for Vending Machine 0.4.0 into QuestCache and quest UI; added quest command support for vending trades. - @cubefury
    • Added: VmAdapter integration with Vending Machine, vending machine trade support in quest cache, vending machine quest commands

New Content ​

  • #221 Added and updated Russian locale entries across multiple language files. - @Eldrinn-Elantey
    • Added: Russian translation entries

Changes ​

  • #233 Removed ColorUtils class, reverted QuestTranslation changes, and removed a dependency addition. - @Ranzuu
    • Removed: ColorUtils utility class, unnecessary dependency, QuestTranslation modifications
  • #217 Switched DirectionalLine to use Vector2f from lwjgl instead of JOML. - @tiffit
    • Removed: JOML dependency usage
  • #209 Added widthScale parameter to DirectionalLine.java and FactoryDirectionalLine.java initialization, updated theme JSON to expose the property. - @tiffit
    • Added: widthScale property
  • #203 Modified GuiTextEditor.java to wrap native style button text with corresponding formatting codes (e.g., wrapping with &6...&r for gold). - @sudojunior
  • #177 Updated theme name in bq_themes.json. - @Ranzuu
  • #172 Replaced RenderUtils string methods with GTNHLib equivalents in BetterQuesting core and ClientProxy; requires GTNHLib PR #169 and Angelica PR #1017. - @DeathFuel
    • Added: GTNHLib string method support
    • Fixed: compatibility with custom font rendering
  • #168 Added detailed logging in CanvasQuestSearch to help troubleshoot quest loading and search issues. - @glektarssza
    • Added: detailed error logging in quest search

Bug Fixes ​

  • #258 Corrected synchronization logic in NetQuestSync to properly handle quest completion packets across LAN sessions. - @danyadev
    • Fixed: LAN quest synchronization, Duplicate completion notifications
    • Closes GTNH#19269
  • #257 Corrected framebuffer caching logic in CanvasQuestLine, texture rendering in SimpleTexture and SlicedTexture, and scrolling viewport calculations in CanvasScrolling. - @boubou19
    • Fixed: Quest line rendering artifacts, Texture rendering glitches, Viewport rendering issues
    • Closes GTNH#26554
  • #250 Implemented TextFormattingUtils utility class for stripping text formatting, integrated it into GuiTextEditor and QuestCommandDefaults to clean file names on save. - @UltraProdigy
    • Added: TextFormattingUtils class
    • Fixed: Formatting codes in quest file names
  • #234 Stripped text formatting from items in PanelRewardChoice, PanelRewardItem, and PanelTaskItemBase to ensure consistent readability. - @UltraProdigy
    • Removed: native item formatting
    • Fixed: unreadable colored item names in certain themes
    • Closes GTNH#25108
  • #229 Replaced custom clipboard implementations with GuiScreen.setClipboardString, which is properly handled by lwjgl3ify's SDL clipboard mixin on macOS. - @danyadev
    • Removed: custom clipboard copy implementations
    • Fixed: macOS quest ID copy crash
    • Closes GTNH#24492
  • #222 Updated bq_themes.json to apply theme-appropriate colors to GUI dividers. - @Ranzuu
    • Fixed: visually jarring white/black dividers
  • #220 Updated NetTaskCheckbox and task implementations (TaskFluid, TaskRetrieval) to sync checkbox state and consume quest progress across party members. - @tiffit
    • Fixed: desynchronized quest progress in multiplayer
  • #214 Modified EventHandler.java to listen to MouseInputEvent in addition to KeyInputEvent so buffered mouse events are processed without waiting for keyboard input. - @fowdre
    • Fixed: mouse button keybind not triggering Open Quests
  • #206 Added cleanup logic to SceneController.java and GuiQuestLines.java to properly dereference resources on screen close, preventing memory accumulation. - @Alexdoru
    • Fixed: 4 client memory leaks
  • #204 Added scroll position preservation logic in CanvasItemDatabase.java when items are dynamically added to the registry during filtering. - @sudojunior
    • Fixed: scroll drift during item filtering
  • #202 Fixed GuiQuest.java reward panel initialization to ensure rectReward is properly initialized even when noRewards is enabled, preventing infinite refresh loop when vending machine trades are present. - @cubefury
    • Fixed: reward panel NPE in multiplayer with disabled rewards
    • Closes GTNH#24324
  • #197 Modified FormattingTag.java and GuiTextToggles.java to preserve underline decoration and apply fallback color for URLs when color formatting is disabled. - @UltraProdigy
    • Fixed: URL visibility and clickability in color-toggle disabled state
  • #196 Removed static server thread field initialization from BetterQuesting.java, moved server lifecycle management to CommonProxy.java and new ServerTaskScheduler.java class to use instance-based references that update per-world load. - @Alexdoru
    • Added: ServerTaskScheduler class
    • Removed: static server reference in core
    • Fixed: server thread leak on world reload
  • #192 Corrected text tag ordering in GuiTextToggles.java to properly render Note and Warn formatting. - @UltraProdigy
    • Fixed: Note and Warn text formatting
  • #190 Added null safety check in EventHandler#postPresetNotice to verify quest database is loaded before attempting to process notices. - @Alexdoru
    • Fixed: NPE in preset notice handling during initialization
    • Closes GTNH#23646
  • #188 Added null check in TaskRetrieval.java#getTextsForSearch to handle null return values safely. - @Alexdoru
    • Fixed: NPE in quest search when task returns null text
  • #187 Modified NetNotices.java to send both quest name and questId separately in notice payloads, allowing client-side translation with fallback to provided name before quest database sync. - @Eldrinn-Elantey
    • Fixed: UUID display in quest notifications on client restart, first-join popup showing quest IDs
    • Closes GTNH#23296
  • #184 Added file filtering in QuestCommandDefaults to skip non-quest files when loading quest data. - @danyadev
    • Added: file type validation in quest loading
    • Fixed: quest loading failure with unrelated files in config folder
  • #183 Updated PopChoice to apply theme text color to reward claim messages instead of forcing white. - @UltraProdigy
    • Fixed: reward claim text always white regardless of theme
  • #180 Added boss bar state clearing in PanelEntityPreview to prevent boss health bars from displaying during entity preview rendering. - @ModularityEnjoyer
    • Added: boss bar state management in entity preview
    • Fixed: boss bars appearing in entity previews (issue #22849)
    • Closes GTNH#22849
  • #179 Added proper cleanup of world references in PlayerContainerListener and QuestBook event handlers on world unload. - @Alexdoru
    • Added: world reference cleanup on unload
    • Fixed: world reference memory leak
  • #178 Added localization support to QuestTranslation and EventHandler server-side quest notifications. - @iouter
    • Added: server-side quest name localization method
    • Fixed: unlocalized quest names in server notifications
  • #175 Corrected line break logic in RenderUtils to properly handle languages without spaces between words. - @ghostflyby
    • Fixed: line break positioning for non-space-separated languages
  • #173 Added null checks in OreDictTexture and PanelButtonQuest to gracefully handle missing BigItemStack data instead of crashing. - @ah-OOG-ah
    • Added: null checks in icon rendering
    • Fixed: NullPointerException in icon display with bad quest data

Performance ​

  • #255 Implemented geometry batching through Tessellator with 4,095 quad cap, cached quest frames in display lists, added framebuffer-based icon/line caching, viewport culling, and configurable cache modes (off/low-fps/freeze) borrowed from NEI architecture. - @boubou19
    • Added: QuestFrameCache for display list caching, Viewport culling in CanvasCullingManager, Configurable cache refresh modes, Tessellator batching for dependencies, Framebuffer caching for quest icons and lines
  • #243 Added static caching of enum values arrays in FactorySlicedTexture and SlicedTexture. - @boubou19
  • #211 Modified CanvasScrolling, CanvasSearch, and related database panels to batch panel additions rather than adding individually, conditionally sort by depth only when needed, and reduced max panel-add time from 100ms to 10ms. - @tiffit
    • Fixed: UI lag when loading large item lists

Internal / Refactor ​

  • #239 Extracted text formatting logic in PanelTaskItemBase into overridable methods to enable addon reuse and customization. - @koolkrafter5
    • Added: Overridable text rendering methods
  • #215 Removed unused test classes, simplified implementations, and cleaned up duplicate code in handlers, party GUIs, and toolbox utilities. - @danyadev
    • Removed: GuiScreenTest, PanelVBarFill, PresetTexture
  • #212 Replaced hardcoded NBT key access in NetQuestEdit with encapsulated methods; refactored ToolboxToolCopy to mutate quest objects instead of NBT compounds before sending. - @danyadev
    • Added: quest action methods in NetQuestEdit
    • Fixed: potential mutation of existing quests in createQuests

Chores ​

  • #254 Updated localization string in en_US.lang from 'dependants' to 'dependents'. - @fbfnysnshnsgnwg
  • #235 Introduced ColorUtils class; updated dependencies to use correct version without shadowing; removed duplicate color definitions from QuestTranslation. - @Ranzuu
    • Added: ColorUtils utility
    • Removed: duplicate color definitions
  • #228 Migrated colors to ColorUtils from GTNHLib; removed color definitions from QuestTranslation; updated dependencies. - @Ranzuu
    • Added: ColorUtils dependency
    • Removed: color definitions from QuestTranslation

Contributors ​

Everyone who authored, reviewed or co-authored a change on this page, with how many of them:

@UltraProdigy (39), @Dream-Master (15), @Ranzuu (9), @tiffit (8), @cubefury (7), @danyadev (6), @sisyphussy (6), @Alexdoru (5), @boubou19 (5), @alppp (4), @Eldrinn-Elantey (4), @Ethryan (4), @ABKQPO (3), @Algent (3), @Caedis (3), @Nana-Sakura (2), @NotKaizul (2), @PLASMAchicken (2), @sudojunior (2), @ah-OOG-ah (1), @chrombread (1), @DeathFuel (1), @eigenraven (1), @Faotik (1), @fbfnysnshnsgnwg (1), @fowdre (1), @ghostflyby (1), @glektarssza (1), @iouter (1), @Justxs (1), @koolkrafter5 (1), @kurrycat2004 (1), @MCTBL (1), @mitchej123 (1), @ModularityEnjoyer (1), @Nikolay-Sitnikov (1), @Ruling-0 (1), @slprime (1), @vulcandragi (1), @wlhlm (1)