Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
2fb454e
Update dependencies for 1.21.11
IThundxr Dec 23, 2025
7a48a38
ResourceLocation -> Identifier
IThundxr Dec 23, 2025
736b9de
Update GeneratePackageInfosTask and switch to @NullMarked from jspecify
IThundxr Dec 23, 2025
260d81b
Switch from jetbrains annotations to jspecify
IThundxr Dec 23, 2025
230498a
FastColor.ARGB32 -> ARGB
IThundxr Dec 23, 2025
f9c9832
1.21.1 Porting I
IThundxr Dec 23, 2025
ab818bf
1.21.1 Porting II
IThundxr Dec 23, 2025
9976da9
Merge remote-tracking branch 'upstream/1.21.1/dev' into 1.21.11/dev
IThundxr Dec 26, 2025
dafc480
1.21.1 Porting III
IThundxr Dec 26, 2025
1fca235
1.21.1 Porting IV
IThundxr Dec 27, 2025
dd16a1e
1.21.1 Porting V
IThundxr Dec 27, 2025
83fc920
1.21.1 Porting VI
IThundxr Dec 27, 2025
74a9b78
1.21.1 Porting VII
IThundxr Dec 27, 2025
d41f008
1.21.1 Porting VIII
IThundxr Dec 28, 2025
cb51e7f
1.21.1 Porting IX
IThundxr Dec 28, 2025
843af33
Partial(lyPorted)Model
PepperCode1 Jan 8, 2026
4e9ac33
Fix accessor and sodium dependency
IThundxr Jan 8, 2026
3f18374
Remove RecyclingPoseStack
IThundxr Jan 9, 2026
d133d44
Update flywheel.impl.mixins.json
IThundxr Jan 9, 2026
4c5be61
Undo removal of flywheel.impl.neoforge.mixins.json
IThundxr Jan 16, 2026
89a0da5
Merge remote-tracking branch 'origin/1.21.11/dev' into 1.21.11/dev
IThundxr Jan 16, 2026
faf3623
Modernise MinecartVisual
AyOhEe Jan 16, 2026
606e302
Update expected exception wording of testMalformedInclude
AyOhEe Jan 23, 2026
85ce5af
Merge pull request #2 from AyOhEe/1.21.11/test-malformed-include-fix
PepperCode1 Jan 23, 2026
0edccd1
Merge pull request #1 from AyOhEe/1.21.11/minecart-visual
IThundxr Feb 3, 2026
830ba53
Disable vanillin, more porting
IThundxr Feb 3, 2026
5618a0b
Fog fixes
IThundxr Feb 14, 2026
08f24b6
Merge pull request #3
Evoloxi Feb 14, 2026
2ea52a9
Mixin fixes
IThundxr Feb 14, 2026
acb64b0
Merge remote-tracking branch 'origin/1.21.11/dev' into 1.21.11/dev
IThundxr Feb 14, 2026
5a8ce51
GLium
IThundxr Feb 18, 2026
c22c25c
GLium II
IThundxr Feb 18, 2026
1d781da
Deprecate GlShader and ShaderType, awaiting replacement with B3D vers…
IThundxr Feb 18, 2026
1ad376a
Remove GlError and GlException
IThundxr Feb 18, 2026
83f0e61
Mark more things as deprecated, should be replaced with b3d versions
IThundxr Feb 18, 2026
6e1d21f
Update OitFramebuffer to use GlStateManager and GlConst
IThundxr Feb 18, 2026
f688891
Remove GlFence and use B3D's GlFence
IThundxr Feb 23, 2026
0904492
Fix compile errors
IThundxr Feb 23, 2026
764768c
Use GlConst in NoiseTextures
IThundxr Mar 7, 2026
9f623ea
Update to 26.1
BluSpring Apr 3, 2026
1114d99
Fix mixins.json files
IThundxr Apr 8, 2026
6c65629
Merge pull request #4 from BluSpring/26.1/dev
IThundxr Apr 8, 2026
9741a84
Update java in workflow
IThundxr Apr 8, 2026
b8235b3
fix renderdoc paths
IThundxr Apr 27, 2026
d1400d3
Undo previous 26.1 port
IThundxr Apr 27, 2026
47a50d6
Initial 26.1 port
IThundxr Apr 27, 2026
df1ad8e
More fixes
IThundxr Apr 28, 2026
f02d16e
Fix gl errors and temporally comment out ModelBlockRendererMixin
IThundxr Apr 28, 2026
0cba299
Fix MinecartVisual
IThundxr Apr 29, 2026
1ddc77e
Experimental AO changes
IThundxr May 4, 2026
226f245
Fix MinecartVisual not null-checking frontPos and backPos
IThundxr May 5, 2026
c267d86
Switch to AltModelBlockRenderer and Fix normals not being included in…
IThundxr May 5, 2026
05d5868
Fix build workflow
IThundxr May 5, 2026
64889d5
Improve per part AO mixin
IThundxr May 5, 2026
5fc94bc
Fix build workflow, remove old TODOs
IThundxr May 5, 2026
6eff4e3
Fix some more TODOs
IThundxr May 5, 2026
bbbe05f
Update to 26.1.2
IThundxr May 5, 2026
837cbbc
Fix crumbling overlay being blurry
IThundxr May 7, 2026
0ae1a8a
Update to 26.1.2
IThundxr May 5, 2026
82f43b4
Enable --renderDebugLabels
IThundxr May 18, 2026
7ee795c
Merge remote-tracking branch 'origin/26.1.2/dev' into 26.1.2/dev
IThundxr May 21, 2026
74bc696
Shutdown task executors on client stop
IThundxr May 28, 2026
7c40245
Make MeshEmitter, MeshEmitterManager, BlockStateModelBufferer public …
djefrey Jun 16, 2026
d94131e
Enable enhanced hotswap
IThundxr May 22, 2026
8ac397e
Fix FlwDebugEntry
IThundxr May 22, 2026
5892742
Fix jarjar artifactId (#322)
IThundxr Jun 28, 2026
4484a54
Merge remote-tracking branch 'origin/1.21.1/dev' into 26.1.2/dev
IThundxr Jul 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: Build
on: [ workflow_dispatch, pull_request, push ]

env:
JAVA_VERSION: 21
JAVA_VERSION: 25

jobs:
build:
Expand Down Expand Up @@ -31,7 +31,7 @@ jobs:
- name: Build
# Doesn't actually publish, as no secrets are passed in, just makes sure that publishing works
# Also generate the mod jars for the test job
run: ./gradlew remapTestModJar publish --no-daemon
run: ./gradlew testModJar publish --no-daemon

- name: Capture Build Artifacts
uses: actions/upload-artifact@v4
Expand Down Expand Up @@ -74,7 +74,7 @@ jobs:

# Lock to a specific commit, it would be bad if the tag is re-pushed with unwanted changes
- name: Run the MC client
uses: 3arthqu4ke/mc-runtime-test@e72f8fe1134aabf6fc749a2a8c09bb56dd7d283e
uses: headlesshq/mc-runtime-test@9d9ea4af8ef6d82648051f750c49905f75d0c3bb
with:
mc: ${{ env.MINECRAFT_VERSION }}
modloader: ${{ matrix.loader }}
Expand Down
3 changes: 2 additions & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
plugins {
idea
java
id("dev.architectury.loom") apply false
alias(libs.plugins.loom) apply false
alias(libs.plugins.mdg) apply false
}

println("Java: ${System.getProperty("java.version")}, JVM: ${System.getProperty("java.vm.version")} (${System.getProperty("java.vendor")}), Arch: ${System.getProperty("os.arch")}")
Expand Down
17 changes: 4 additions & 13 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import java.util.Properties

plugins {
`kotlin-dsl`
idea
Expand All @@ -11,11 +9,9 @@ repositories {
maven("https://maven.neoforged.net/releases/") {
name = "NeoForged"
}
maven("https://maven.architectury.dev/") {
name = "Architectury"
maven("https://maven.fabricmc.net/") {
name = "FabricMC"
}
maven("https://repo.spongepowered.org/repository/maven-public")
maven("https://maven.parchmentmc.org")
}

idea.module {
Expand All @@ -36,12 +32,7 @@ gradlePlugin {
}
}

val properties by lazy {
Properties().apply {
load(rootDir.parentFile.resolve("gradle.properties").inputStream())
}
}

dependencies {
implementation("dev.architectury.loom:dev.architectury.loom.gradle.plugin:${properties["arch_loom_version"]}")
implementation(libs.fabric.loom)
implementation(libs.mdg)
}
8 changes: 8 additions & 0 deletions buildSrc/settings.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// https://discuss.gradle.org/t/using-version-catalog-from-buildsrc-buildlogic-xyz-common-conventions-scripts/48534
dependencyResolutionManagement {
versionCatalogs {
create("libs") {
from(files("../gradle/libs.versions.toml"))
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package dev.engine_room.gradle.jarset

import net.fabricmc.loom.task.RemapJarTask
import net.fabricmc.loom.task.RemapSourcesJarTask
import org.gradle.api.Project
import org.gradle.api.tasks.SourceSet
import org.gradle.jvm.tasks.Jar
Expand All @@ -15,11 +13,9 @@ open class JarSetExtension(private val project: Project) {

val mainSet: JarTaskSet by lazy {
val jarTask = project.tasks.named<Jar>("jar")
val remapJarTask = project.tasks.named<RemapJarTask>("remapJar")
val sourcesJarTask = project.tasks.named<Jar>("sourcesJar")
val remapSourcesJarTask = project.tasks.named<RemapSourcesJarTask>("remapSourcesJar")
val javadocJarTask = project.tasks.named<Jar>("javadocJar")

JarTaskSet(project, "main", jarTask, sourcesJarTask, javadocJarTask, remapJarTask, remapSourcesJarTask)
JarTaskSet(project, "main", jarTask, sourcesJarTask, javadocJarTask)
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
package dev.engine_room.gradle.jarset

import net.fabricmc.loom.task.AbstractRemapJarTask
import net.fabricmc.loom.task.RemapJarTask
import net.fabricmc.loom.task.RemapSourcesJarTask
import org.gradle.api.Action
import org.gradle.api.NamedDomainObjectProvider
import org.gradle.api.Project
Expand All @@ -27,42 +24,26 @@ class JarTaskSet(
val jar: TaskProvider<Jar>,
val sources: TaskProvider<Jar>,
val javadocJar: TaskProvider<Jar>,
val remapJar: TaskProvider<RemapJarTask>,
val remapSources: TaskProvider<RemapSourcesJarTask>
) {

fun publishWithRawSources(action: Action<MavenPublication>): NamedDomainObjectProvider<MavenPublication> {
return publish(sources, action)
}

fun publishWithRemappedSources(action: Action<MavenPublication>): NamedDomainObjectProvider<MavenPublication> {
return publish(remapSources, action)
}

private fun publish(
sourceJar: TaskProvider<out Jar>,
action: Action<MavenPublication>
): NamedDomainObjectProvider<MavenPublication> {
return project.the<PublishingExtension>().publications.register<MavenPublication>("${name}RemapMaven") {
artifact(remapJar)
artifact(jar)
artifact(sourceJar)
artifact(javadocJar)
action.execute(this)
}
}

fun outgoing(name: String) {
outgoingRemapJar("${name}Remap")
outgoingJar("${name}Dev")
}

fun outgoingRemapJar(name: String) {
val config = project.configurations.register(name) {
isCanBeConsumed = true
isCanBeResolved = false
}

project.artifacts.add(config.name, remapJar)
outgoingJar(name)
}

fun outgoingJar(name: String) {
Expand All @@ -75,22 +56,14 @@ class JarTaskSet(
}

/**
* Configure the assemble task to depend on the remap tasks and javadoc jar.
* Configure the assemble task to depend on the regular jar tasks and javadoc jar.
*/
fun addToAssemble() {
project.tasks.named("assemble").configure {
dependsOn(remapJar, remapSources, javadocJar)
dependsOn(jar, sources, javadocJar)
}
}

/**
* Configure the remap tasks with the given action.
*/
fun configureRemap(action: Action<AbstractRemapJarTask>) {
remapJar.configure(action)
remapSources.configure(action)
}

/**
* Configure the jar tasks with the given action.
*/
Expand All @@ -99,16 +72,6 @@ class JarTaskSet(
sources.configure(action)
}

/**
* Create a new JarTaskSet with the same base jars but new tasks for remapping.
*/
fun forkRemap(newName: String): JarTaskSet {
val remapJarTask = createRemapJar(project, newName, jar)
val remapSourcesTask = createRemapSourcesJar(project, newName, sources)

return JarTaskSet(project, newName, jar, sources, javadocJar, remapJarTask, remapSourcesTask)
}

companion object {
private const val PACKAGE_INFOS_JAVA_PATTERN = "**/package-info.java"
private const val BUILD_GROUP: String = "build"
Expand Down Expand Up @@ -138,10 +101,7 @@ class JarTaskSet(
val sourcesTask = createSourcesJar(project, name, sourceSetSet)
val javadocJarTask = createJavadocJar(project, name, sourceSetSet)

val remapJarTask = createRemapJar(project, name, jarTask)
val remapSourcesTask = createRemapSourcesJar(project, name, sourcesTask)

return JarTaskSet(project, name, jarTask, sourcesTask, javadocJarTask, remapJarTask, remapSourcesTask)
return JarTaskSet(project, name, jarTask, sourcesTask, javadocJarTask)
}

private fun createJar(
Expand Down Expand Up @@ -206,34 +166,5 @@ class JarTaskSet(
from(javadocTask.map { it.outputs })
}
}

private fun createRemapJar(
project: Project,
name: String,
jar: TaskProvider<Jar>
): TaskProvider<RemapJarTask> {
return project.tasks.register<RemapJarTask>("${name}RemapJar") {
dependsOn(jar)
group = LOOM_GROUP
destinationDirectory.set(project.layout.buildDirectory.dir("libs/${name}"))

inputFile.set(jar.flatMap { it.archiveFile })
}
}

private fun createRemapSourcesJar(
project: Project,
name: String,
jar: TaskProvider<Jar>
): TaskProvider<RemapSourcesJarTask> {
return project.tasks.register<RemapSourcesJarTask>("${name}RemapSourcesJar") {
dependsOn(jar)
group = LOOM_GROUP
destinationDirectory.set(project.layout.buildDirectory.dir("libs/${name}"))
archiveClassifier.set(SOURCES_CLASSIFIER)

inputFile.set(jar.flatMap { it.archiveFile })
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,8 @@ open class GeneratePackageInfosTask: DefaultTask() {

NioExtensions.withWriter(target.resolve("package-info.java"), closureOf<BufferedWriter> {
val packageName = relativePath.toString().replace(File.separator, ".")
write(StringGroovyMethods.stripMargin("""@ParametersAreNonnullByDefault
|@FieldsAreNonnullByDefault
|@MethodsReturnNonnullByDefault
write(StringGroovyMethods.stripMargin("""@org.jspecify.annotations.NullMarked
|package $packageName;
|
|import javax.annotation.ParametersAreNonnullByDefault;
|
|import net.minecraft.FieldsAreNonnullByDefault;
|import net.minecraft.MethodsReturnNonnullByDefault;
|"""))
})
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ open class PackageInfosExtension(private val project: Project) {
}
sourceSet.java.srcDir(task)

project.tasks.named("ideaSyncTask").configure {
project.tasks.matching { it.name == "ideaSyncTask" || it.name == "neoForgeIdeSync" }.configureEach {
finalizedBy(task)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package dev.engine_room.gradle.platform

import net.fabricmc.loom.api.LoomGradleExtensionAPI
import net.fabricmc.loom.task.RemapJarTask
import net.fabricmc.loom.task.RenderDocRunTask
import net.fabricmc.loom.task.RenderDocRunUITask
import net.neoforged.moddevgradle.dsl.ModDevExtension
import net.neoforged.moddevgradle.dsl.RunModel
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.tasks.SourceSet
Expand All @@ -10,6 +13,7 @@ import org.gradle.kotlin.dsl.assign
import org.gradle.kotlin.dsl.named
import org.gradle.kotlin.dsl.register
import org.gradle.kotlin.dsl.the
import org.gradle.kotlin.dsl.withType
import java.io.File

open class PlatformExtension(val project: Project) {
Expand All @@ -19,11 +23,21 @@ open class PlatformExtension(val project: Project) {
}
}

fun setupMdgMod(vararg sourceSets: SourceSet) {
project.the<ModDevExtension>().mods.maybeCreate("main").apply {
sourceSets.forEach(::sourceSet)
}
}

fun setupLoomRuns() {
project.the<LoomGradleExtensionAPI>().runs.apply {
named("client") {
isIdeConfigGenerated = true

// Better hotswap, only available with the JetBrains Runtime so we have to ignore invalid options aswell
jvmArguments.add("-XX:+IgnoreUnrecognizedVMOptions")
jvmArguments.add("-XX:+AllowEnhancedClassRedefinition")

// Turn on our own debug flags
property("flw.dumpShaderSource", "true")
property("flw.debugMemorySafety", "true")
Expand All @@ -32,6 +46,8 @@ open class PlatformExtension(val project: Project) {
property("mixin.debug.export", "true")
property("mixin.debug.verbose", "true")

programArgs("--renderDebugLabels")

// 720p baby!
programArgs("--width", "1280", "--height", "720")
}
Expand All @@ -42,27 +58,61 @@ open class PlatformExtension(val project: Project) {
programArgs("--nogui")
}
}


if (System.getProperty("os.name") == "Linux") {
project.tasks.withType<RenderDocRunTask> {
renderDocExecutable.set(File("/usr/bin/renderdoccmd"))
}

project.tasks.withType<RenderDocRunUITask> {
renderDocExecutable.set(File("/usr/bin/qrenderdoc"))
}
}
}

fun setupMdgRuns() {
project.the<ModDevExtension>().runs.apply {
create("client") {
client()

// Better hotswap, only available with the JetBrains Runtime so we have to ignore invalid options aswell
jvmArgument("-XX:+IgnoreUnrecognizedVMOptions")
jvmArgument("-XX:+AllowEnhancedClassRedefinition")

// Turn on our own debug flags
systemProperty("flw.dumpShaderSource", "true")
systemProperty("flw.debugMemorySafety", "true")

// Turn on mixin debug flags
systemProperty("mixin.debug.export", "true")
systemProperty("mixin.debug.verbose", "true")

// 720p baby!
programArguments.addAll("--width", "1280", "--height", "720")

// Helpful when debugging issues
programArguments.addAll("--renderDebugLabels", "--vulkanValidation")
}

// We're a client mod, but we need to make sure we correctly render when playing on a server.
create("server") {
server()

programArgument("--nogui")
}
}
}

fun setupTestMod(sourceSet: SourceSet) {
project.tasks.apply {
val testModJar = register<Jar>("testModJar") {
from(sourceSet.output)
val file = File(project.layout.buildDirectory.asFile.get(), "devlibs");
destinationDirectory.set(file)
archiveClassifier = "testmod"
}

val remapTestModJar = register<RemapJarTask>("remapTestModJar") {
dependsOn(testModJar)
inputFile.set(testModJar.get().archiveFile)
archiveClassifier = "testmod"
addNestedDependencies = false
classpath.from(sourceSet.compileClasspath)
}

named<Task>("build").configure {
dependsOn(remapTestModJar)
dependsOn(testModJar)
}
}
}
Expand Down
Loading
Loading