Godot 4.x - Major release v7.0.1
This release marks a significant milestone, as it signifies more than two years of effort to support Godot 4! Below, you will find installation instructions and a detailed overview of all merged pull requests that followed.
This release is compatible with Godot versions 4.1 through 4.3. Moving forward, we plan to provide dedicated releases for each Godot feature update. This will help reduce the need for backward compatibility trade-offs and allow us to better support each version.
Installation
Note
This release is targeted towards integration! We're actively working on improving the self-setup process,
and we are grateful for anyone willing to test the current version. Your help means a lot to us!
Godot Project Setup
Mod Loader Self Setup
Addressing class_name
With Hooks
The most glaring issue of the 4.x ModLoader is extending a file using a class_name
statement. For more info, see: #315. As a workaround, we introduce hooks—with major thanks to everyone who contributed to resolving this long-standing issue. See the fantastic PR by @KANAjetzt, @Qubus0, and @pirey0 in #408.
🚨 Breaking Changes
- Removal of
append_node_in_scene
andsave_scene
forrefresh_scene
andextend_scene
by @KANAjetzt in #378 steam_workshop_enabled
has been replaced byload_from_steam_workshop
by @KANAjetzt in #399- The
MOD_CONFIG_DIR_PATH
has been changed fromuser://configs
touser://mod_configs
by @KANAjetzt in #480 ModLoaderModManager
has been entirely removed by @KANAjetzt in #540
Key PRs
- 4.x branch update to 6.0.2 version by @MateuSai in #333
- refactor: ♻️ doc comments for all function and class descriptions by @KANAjetzt in #397
- Feat zip peeking by @Qubus0 in #416
- test: 🧪 Ported tests to 4.x @KANAjetzt in #434
- feat: ✨ support async hooks for methods using await by @KANAjetzt in #470
- refactor: ♻️ mod loading refactor by @KANAjetzt in #485
- Feat: Logging without store by @Qubus0 in #500
- refactor: ♻️ new self setup for Godot 4 by @KANAjetzt in #507
- refactor: ♻️ 4.1 support by @KANAjetzt in #508
- Doc comment standardization by @Qubus0 in #542
Enhancements
- feat: Allow both workshop and local mods to be loaded by @cgytrus in #369
- feat: ✨ added refresh_config_data() and
refresh_current_configs()
by @KANAjetzt in #374 - feat: ✨ add
has_current_config()
andhas_config()
by @KANAjetzt in #375 - feat: script extensions sorter checks load order by @KANAjetzt in #382
- feat: ✨ store the mod source in
ModData
by @KANAjetzt in #387 - feat: ✨ added
steam_id
toml_options
by @KANAjetzt in #388 - feat: ✨ added
steam_workshop_id
toModManifest
by @KANAjetzt in #393 - feat: ✨ added
is_mod_active
toModLoaderMod
by @KANAjetzt in #398 - refactor: ♻️ log the prefix on errors by @KANAjetzt in #400
- refactor: use truthy values in dictionaries used as hashsets by @Qubus0 in #422
- refactor: don't inline is_func_moddable by @Qubus0 in #423
- refactor: ♻️ updated
hook_pre_processor
reference by @KANAjetzt in #424 - style: 🔥 removed
%
from hook template string by @KANAjetzt in #428 - feat: disable hook check when not needed by @Qubus0 in #429
- feat: split off verbose hook preprocessing by @Qubus0 in #430
- test: add new gut test cases for the hook preprocessor by @Qubus0 in #432
- style: ✏️ Changed MOD_LOADER_HOOKS_START_STRING by @KANAjetzt in #433
- feat: ✨ param and return manipulation for mod hooks by @Qubus0 in #436
- feat: ✨ allow installing hooks from a file like extensions by @Qubus0 in #440
feat: ✨ param and return manipulation for mod hooks by @KANAjetzt in #469(fixes merge of #440)- fix: 🚑 remove whitespace after
_ModLoaderHooks.call_hooks
by @KANAjetzt in #474 - feat: ✨ detect and handle hooks for async methods by @Qubus0 in #475
- test: 🧪 added tests for
.process_script()
by @KANAjetzt in #476 - refactor: ♻️ use
ModLoaderOptionsProfile
instead ofDictionary
by @KANAjetzt in #532 - refactor: use GDRE for self setup by @KANAjetzt in #533
- feat: per method hooks by @Qubus0 in #534
- feat: ✨ options for game version validation by @KANAjetzt in #536
- feat: new editor-only log type for dev hints by @Qubus0 in #538
- feat: ✨ added
load_from_unpacked
option by @KANAjetzt in #541
Bug Fixes
- fix: 🐛 fixed
get_global_class_list
by @KANAjetzt in #344 - fix: non-static func call on
InheritanceSorting
by @MateuSai in #363 - fix: using static
DirAccess.get_open_error()
on null by @cgytrus in #366 - fix: dependencies not loading correctly if disabled by the user profile by @cgytrus in #367
- fix: config MD5 check by @cgytrus in #368
- fix: startup crash in log.gd by @cgytrus in #370
- fix: Fix app_id loading error by @cgytrus in #371
- fix: 🐛 fix indentation in
handle_script_extensions
by @KANAjetzt in #372 - fix: 🐛 fixed missing script parent path by @KANAjetzt in #383
- fix: 🐛 crash if no scene instance is returned by @KANAjetzt in #392
- fix: 🐛 wrong var name by @KANAjetzt in #395
- fix: broken TranslationServer when added translation fails to load by @pirey0 in #414
- fix: Use counter instead of stack in get_closing_paren_index() by @Qubus0 in #420
- fix: 🐛 fixed super fixing by @KANAjetzt in #425
- fix: proper logging of empty Array() by @Qubus0 in #431
- fix: hooks argument order, hook check by @Qubus0 in #435
- fix: 🐛 Take resource remapping into account by @KANAjetzt in #482
- fix: 🐛 fix
\
breaking function declaration by @KANAjetzt in #486 - fix: 🐛 match
\
and new line by @KANAjetzt in #492 - fix: 🐛 check if a method is already hooked by @KANAjetzt in #493
- fix: 🐛 match any character between func name and
(
by @KANAjetzt in #495 - fix: 🐛 don't remove new lines in
param_string
by @KANAjetzt in #497 - fix: 🐛 resolved parser error because of missing return value by @KANAjetzt in #498
- fix: 🐛 continue if no
func_def
is found by @KANAjetzt in #511 - fix: 🐛 return detection by @KANAjetzt in #515
- fix: 🐛 check for -> void by @KANAjetzt in #518
- fix: 🐛 moved default profile creation to
_init()
by @KANAjetzt in #530 - fix: 🐛 log spam on tool scripts by @KANAjetzt in #543
- fix: 🐛 use
reader.get_files().has()
before 4.2 by @KANAjetzt in #545
New Contributors (to the 4.x branch)
- @MateuSai made their first contribution in #333
- @cgytrus made their first contribution in #371
- @pirey0 made their first contribution in #414
Full Changelog: v6.0.2...v7.0.1