Build modernization: Kotlin DSL, Gradle 9.6.1, Java 25, Vineflower tuning - #37
Build modernization: Kotlin DSL, Gradle 9.6.1, Java 25, Vineflower tuning#37sequwi wants to merge 8 commits into
Conversation
- settings.gradle → settings.gradle.kts (Kotlin DSL) - plugin/build.gradle → plugin/build.gradle.kts (Kotlin DSL) - Add root version catalog: gradle/libs.versions.toml - Add plugin version catalog: plugin/gradle/libs.versions.toml - Add AGENTS.md and workspace files to .gitignore
- Upgrade wrapper from 8.x to 9.6.1 - Set distributionSha256Sum for integrity verification - Keep -all distribution for IDE source navigation during plugin development
- Bump JDK from 21 to 25 across all workflows - Add gradle-home-cache-cleanup for disk space management - Set cache-read-only for PR builds and ephemeral runners - Align with official Gradle CI best practices
- Set daemon idle timeout to 1 hour (was default 3 min) - Enable file system watching for faster builds - Enable parallel tooling API - Increase JVM heap to 4 GB (decompiler requirement) - Set JVM file encoding to UTF-8 - Add configuration-cache ignore paths for volatile CI directories
- Replace all @DisableCachingByDefault with @UntrackedTask(because = ...) (removed in Gradle 9.x, affects all 12 task classes and NeoFormProjectPlugin) - Add @PathSensitive on all @InputFile/@InputDirectory properties (required by validatePlugins with enableStricterValidation = true) - Add DiffPatch context(10) for more robust patches during fuzzy updates - Fix CreatePatchWorkspace import conflict between io.codechicken.diffpatch.util.Input and org.gradle.api.tasks.Input - Fix HTML entity in NeoFormExtension (& → &) - Add setReproducibleFileOrder(true) and setPreserveFileTimestamps(false) to createDataArchive for reproducible ZIP outputs
|
|
I was unable to run the full All 5 commits build successfully with Ready for review. |
Restore missing flags (--decompile-inner, --remove-bridge, --decompile-generics, --ascii-strings, --remove-synthetic, --bytecode-source-mapping, --dump-code-lines) that were dropped during Kotlin DSL migration. Remove incorrect flags (--ternary-constant-simplification, --decompile-complex-constant-dynamic, --preferred-line-length, --verify-*) that changed decompiler output and caused all 148 patches to fail. Keep --thread-count performance improvement.
…straint The original Groovy settings used 1.1. Our Kotlin DSL migration bumped it to 1.2, but Minecraft dependencies strictly require 1.1, causing resolution conflicts when compiling the workspace.
Suppresses LWJGL restricted-method warning on JDK 25.
|
Can you explain what motivates this change? |
Honestly, in my opinion the project was running on outdated tooling, so I decided to go through and update everything across the board: newer Gradle, newer Java, Kotlin DSL for better maintainability, plus some decompiler tuning to improve output quality. Partly wanted to contribute something meaningful to the project, and partly just wanted to modernize it for its own sake. |
|
The reason I ask is that this PR appears to be largely unmodified output from an LLM-based agent (with all the usual issues, such as the diff being complex for what it does, lack of rationale/explanation for many parts, no human-written PR description, etc). While we don't have a strict "no LLM" policy, contributions in this state are much less likely to be merged. |
That's fair, you're right that I used AI assistance for this. I don't write code myself, so I relied on AI tools to put this together. Understand if that makes it harder to merge as-is, but figured something is better than nothing. Let me know if there's anything specific that's a blocker and I can look into it. |
Sorry, not interested in spending time to review this. |
Unfortunately no. I am aware the current marketing around these tools is extremely misleading and you probably mean well. However, current LLM tooling does not produce maintainable code unless prompted carefully with an appropriately sized task, and that judgement requires programming experience. Maybe things will be different in a couple years, but as it stands, for large changes like this LLMs only save time if being prompted by someone who already has a rough idea of what the output should look like, and can therefore spot maintainability issues immediately. There is also at least a little bit of educational benefit when used that way, as the operator can follow along and mostly understands what is being done, and may learn some new tricks they can apply to their own manual programming (yes, that's still relevant!). By contrast, in our current scenario here, it's a waste of time for everyone involved here to play telephone with your agent via review comments, due to how slow the feedback loop would be and the limited educational value to you (as a non-programmer). TL;DR today's LLMs are not a substitute for effort and experience; they merely multiply what can be done with existing effort and experience on some narrow domains. |
Summary
This PR modernises the NeoForm build system across five logical commits:
1. Migrate build scripts to Kotlin DSL with version catalogs
settings.gradle→settings.gradle.kts(Kotlin DSL)plugin/build.gradle→plugin/build.gradle.kts(Kotlin DSL)gradle/libs.versions.tomlplugin/gradle/libs.versions.toml2. Update Gradle wrapper to 9.6.1 with SHA-256 verification
distributionSha256Sumset for integrity verification-alldistribution retained for IDE source navigation3. Update CI workflows for JDK 25 and cache optimisation
gradle-home-cache-cleanupfor disk space managementcache-read-onlyfor PRs and ephemeral runners4. Tune gradle.properties for performance
vfs.watch=true)5. Migrate task classes to Gradle 9.x API and fix minor issues
@DisableCachingByDefaultwith@UntrackedTask(because = "...")(removed in Gradle 9.x)@PathSensitiveon all@InputFile/@InputDirectoryproperties (required byvalidatePluginswithenableStricterValidation = true).context(10)for more robust patchesCreatePatchWorkspaceimport conflict (diffpatchInputvs GradleInput)NeoFormExtension(& → &)createDataArchiveTesting
:plugin:buildpasses withvalidatePlugins { enableStricterValidation = true }:checkrequires network access and ~4 GB heap (decompiler pipeline) — not run locally