Skip to content

Conversation

@isXander
Copy link
Owner

@isXander isXander commented Jul 21, 2025

This PR allows you to configure all static modstitch properties from gradle.properties.

Closes #13

The property keys mirror that of the code path.
E.g.,

modstitch {
  minecraftVersion = "1.21.8"
}

could become

modstitch.minecraftVersion=1.21.8

Modstitch searches for values deep within the project tree, meaning it will search through parents' properties too.

Extra considerations

Cousin problem

Modstitch is commonly used with tools like Stonecutter. In Stonecutter, the project structure looks like this.

:core:1.21.8
:extra:1.21.8

This means the 1.21.8 projects are cousins, not direct parent/child. This means that when configuring :extra:1.21.8, :core:1.21.8's gradle properties are not sourced, which makes sense.

Controlify, my mod, does this exact thing, which would limit the usefulness of this PR, feedback is appreciated.

Bypass of intellisense

This makes errors a lot more tricky. If Modstitch had an update and changed/removed/renamed a property within its extension, there would be no highlighted error within the properties file, potentially leading to confusion, and tricky errors.

@isXander isXander requested a review from Copilot July 21, 2025 14:53
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR adds support for configuring Modstitch properties through gradle.properties files instead of only through the Gradle build script DSL. Properties are searched deeply through the project hierarchy, allowing parent project properties to be inherited by child projects.

Key changes:

  • Implements deep property searching through project tree hierarchy
  • Adds property assignment utilities with null-safe operations
  • Refactors extension initialization to apply properties before user configuration

Reviewed Changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
src/main/kotlin/dev/isxander/modstitch/util/ProjectUtils.kt Adds utility functions for deep gradle property searching and null-safe property assignment
src/main/kotlin/dev/isxander/modstitch/base/BaseCommonImpl.kt Implements property application logic and reorders initialization to apply properties before plugins
src/main/kotlin/dev/isxander/modstitch/base/loom/BaseLoomImpl.kt Adds Fabric-specific property application for fabricLoaderVersion
src/main/kotlin/dev/isxander/modstitch/base/moddevgradle/BaseModDevGradleImpl.kt Adds NeoForge/Forge-specific property application for version configurations
test-project/build.gradle.kts Removes hardcoded configuration, demonstrating properties-based setup
test-project/gradle.properties Adds modstitch properties for metadata and mixin configuration
test-project/fabric/gradle.properties Converts platform-specific properties to modstitch namespace
test-project/forge/gradle.properties Converts platform-specific properties to modstitch namespace
test-project/neoforge/gradle.properties Converts platform-specific properties to modstitch namespace

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support a standardised set of gradle properties for automatic configuration

2 participants