Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 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
c855f74
Refactor buildscripts
IThundxr Jul 10, 2026
6eafd80
Fix accesswidener
IThundxr Jul 12, 2026
b39a633
Use typesafe project accessor for common AW path
IThundxr Jul 12, 2026
11b9d0e
Fix version fetching for headless test
IThundxr Jul 12, 2026
2eff2d4
Remove testmod
IThundxr Jul 12, 2026
8ed808c
remove deprecation annotations
IThundxr Jul 12, 2026
f66238a
fix cardinal lighting
IThundxr Jul 12, 2026
1676540
Misc fixes
IThundxr Jul 13, 2026
c5d08d1
add AT to NMT
IThundxr Jul 13, 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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ ij_json_keep_indents_on_empty_lines = false
ij_json_keep_line_breaks = true
ij_json_space_after_colon = true
ij_json_space_after_comma = true
ij_json_space_before_colon = true
ij_json_space_before_colon = false
ij_json_space_before_comma = false
ij_json_spaces_within_braces = true
ij_json_spaces_within_brackets = false
Expand Down
61 changes: 14 additions & 47 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,24 @@ name: Build

on: [ workflow_dispatch, pull_request, push ]

env:
JAVA_VERSION: 21

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Extract Versions
id: versions
run: |
echo "java=$(grep -oP '(?<=java = )".*"' gradle/libs.versions.toml | cut -d '"' -f2)" >> "$GITHUB_OUTPUT"

- name: Setup Java
run: echo "JAVA_HOME=$JAVA_HOME_${{ env.JAVA_VERSION }}_X64" >> "$GITHUB_ENV"
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: ${{ steps.versions.outputs.java }}
cache: gradle

- name: Loom Cache
uses: actions/cache@v4
Expand All @@ -30,8 +36,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 publish --no-daemon

- name: Capture Build Artifacts
uses: actions/upload-artifact@v4
Expand All @@ -41,44 +46,6 @@ jobs:
common/build/libs/
fabric/build/libs/
neoforge/build/libs/
vanillinFabric/build/libs/
vanillinNeoForge/build/libs/

test:
strategy:
fail-fast: false
matrix:
loader: [ neoforge, fabric ]
needs: build
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Download build artifact
uses: actions/download-artifact@v4
with:
name: Artifacts

- name: Setup Environment Variables
run: |
echo "MINECRAFT_VERSION=$(grep '^minecraft_version =' gradle.properties | cut -d'=' -f2 | tr -d ' ')" >> "$GITHUB_ENV"
echo "FABRIC_API_VERSION=$(grep '^fabric_api_version =' gradle.properties | cut -d'=' -f2 | tr -d ' ' | sed 's/+.*//')" >> "$GITHUB_ENV"

- name: Move Test Mod and Flywheel into run/mods
# We don't want to recreate the jar name formatting so glob everything over then remove the sources and javadoc jars
run: |
mkdir -p run/mods
cp ${{ matrix.loader }}/build/libs/*.jar run/mods
rm -f run/mods/*-sources.jar run/mods/*-javadoc.jar

# 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
with:
mc: ${{ env.MINECRAFT_VERSION }}
modloader: ${{ matrix.loader }}
regex: .*${{ matrix.loader }}.*
mc-runtime-test: none
java: ${{ env.JAVA_VERSION }}
fabric-api: ${{ matrix.loader == 'fabric' && env.FABRIC_API_VERSION || 'none' }}
vanillin/common/build/libs/
vanillin/fabric/build/libs/
vanillin/neoforge/build/libs/
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ build/
gradle-app.setting
out/
logs/
.kotlin/

## IntelliJ IDEA

Expand Down Expand Up @@ -64,5 +65,4 @@ docs/*.local
# Other
.DS_Store
mcmodsrepo
src/*/generatedPackageInfos/
*/src/*/generatedPackageInfos/
**/src/**/generatedPackageInfos/
8 changes: 3 additions & 5 deletions Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ pipeline {
}

tools {
jdk "jdk-21"
jdk "jdk-25"
}

stages {
Expand All @@ -24,8 +24,7 @@ pipeline {
sh './gradlew clean'

withCredentials([
// build_secrets is parsed in SubprojectExtension#loadSecrets
file(credentialsId: 'build_secrets', variable: 'ORG_GRADLE_PROJECT_secretFile'),
usernamePassword(credentialsId: 'maven_secrets', usernameVariable: 'MAVEN_USERNAME', passwordVariable: 'MAVEN_PASSWORD')
]) {
echo 'Building project.'
// Sometimes builds freeze, so wrap in a timeout.
Expand Down Expand Up @@ -77,8 +76,7 @@ pipeline {
sh './gradlew clean'

withCredentials([
// build_secrets is parsed in SubprojectExtension#loadSecrets
file(credentialsId: 'build_secrets', variable: 'ORG_GRADLE_PROJECT_secretFile'),
usernamePassword(credentialsId: 'maven_secrets', usernameVariable: 'MAVEN_USERNAME', passwordVariable: 'MAVEN_PASSWORD')
]) {
echo 'Building project for release.'
// Sometimes builds freeze, so wrap in a timeout.
Expand Down
22 changes: 22 additions & 0 deletions build-logic/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
plugins {
`kotlin-dsl`
}

repositories {
gradlePluginPortal()
maven("https://maven.fabricmc.net")
}

gradlePlugin {
plugins {
create("flywheelGradlePlugin") {
id = libs.plugins.flywheel.gradle.get().toString()
implementationClass = "dev.engine_room.gradle.FlywheelGradlePlugin"
}
}
}

dependencies {
implementation(libs.fabric.loom)
implementation(libs.mdg)
}
9 changes: 9 additions & 0 deletions build-logic/settings.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
rootProject.name = "build-logic"

dependencyResolutionManagement {
versionCatalogs {
create("libs") {
from(files("../gradle/libs.versions.toml"))
}
}
}
113 changes: 113 additions & 0 deletions build-logic/src/main/kotlin/configure-base.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
import dev.engine_room.gradle.getProperty
import dev.engine_room.gradle.versionOf

plugins {
java
`maven-publish`
}

val modId = parent!!.name
val modName = getProperty("${modId}_name")
val modVersion = getProperty("${modId}_version")
val modDescription = getProperty("${modId}_description")

val modLoader = project.name.split('-').last()

val buildNumber: Provider<String> = providers.environmentVariable("RELEASE")
.map { it.contentEquals("false", true) }
.flatMap { dev ->
providers.environmentVariable("BUILD_NUMBER")
.filter { dev }
}

// Only return the first 2 components of the minecraft version, ignoring the hotfix component
val artifactMinecraftVersion = versionOf("minecraft")
.split('.')
.take(2)
.joinToString(".")

val mavenBuildSuffix = buildNumber.map { "-$it" }.getOrElse("")
val semverBuildSuffix = buildNumber.map { "+build.${it}" }.getOrElse("")

ext["mod_id"] = modId
ext["mod_name"] = modName

group = "${getProperty("base_group")}.${modId}"
// ${1.0.0}-mc${26.1}${-9999}
version = "${modVersion}-mc${artifactMinecraftVersion}${mavenBuildSuffix}"

// ${1.0.0}${+build.9999 OR -9999}
val loaderModVersion = modVersion + if (modLoader == "fabric") semverBuildSuffix else mavenBuildSuffix

val authors = getProperty("mod_authors")
tasks.processResources {
fun prop(name: String) = Pair(name, getProperty(name))
fun versionProp(name: String) = Pair("${name}_version", versionOf(name))

val properties = mapOf(
"mod_id" to modId,
"mod_name" to modName,
"mod_version" to loaderModVersion,
"mod_description" to modDescription,
"mod_authors" to authors,
"mod_authors_json" to authors.formatForJson(),
prop("mod_homepage"),
prop("mod_sources"),
prop("mod_issues"),
prop("mod_license"),
versionProp("minecraft"),
versionProp("fabric_api"),
versionProp("fabric_loader"),
versionProp("neoforge"),
versionProp("java"),
prop("flywheel_maven_version_range"),
prop("flywheel_semver_version_range"),
)

inputs.properties(properties)

filesMatching(setOf("fabric.mod.json", "META-INF/neoforge.mods.toml")) {
expand(properties)
}
}

tasks.withType<Jar> {
from(rootProject.file("LICENSE.md"))
}

java {
toolchain.languageVersion = JavaLanguageVersion.of(versionOf("java"))
withSourcesJar()
}

publishing {
repositories {
val mavenUsername = providers.environmentVariable("MAVEN_USERNAME")
val mavenPassword = providers.environmentVariable("MAVEN_PASSWORD")
if (mavenUsername.isPresent && mavenPassword.isPresent) {
maven {
url = uri("https://maven.createmod.net")
credentials {
username = mavenUsername.get()
password = mavenPassword.get()
}
}
}

mavenLocal()
}

publications {
create<MavenPublication>("mavenJava") {
from(components.getByName("java"))
suppressAllPomMetadataWarnings()
}
}
}

// trick to sneak multiple entries into a single placeholder in a JSON file.
// the file must be valid even with placeholders, so we can't just do something like this: [${placeholder}]
// instead, the placeholder is expected to be in a string, like this: ["${placeholder}"]
// this takes a string in the format 'a, b, c' and adds quotes, so the end result will be like this: a", "b", "c
// when filled into the placeholder, you get a valid list: ["a", "b", "c"]
fun String.formatForJson(): String = split(", ").joinToString("\", \"")
9 changes: 9 additions & 0 deletions build-logic/src/main/kotlin/configure-common.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import dev.engine_room.gradle.libraryOf

plugins {
id("net.fabricmc.fabric-loom")
}

dependencies {
minecraft(libraryOf("minecraft"))
}
77 changes: 77 additions & 0 deletions build-logic/src/main/kotlin/configure-fabric.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import dev.engine_room.gradle.Constants
import dev.engine_room.gradle.getExt
import dev.engine_room.gradle.libraryOf
import net.fabricmc.loom.task.RenderDocRunTask
import net.fabricmc.loom.task.RenderDocRunUITask
import net.fabricmc.loom.task.RunGameTask
import net.fabricmc.loom.util.Strings

plugins {
id("net.fabricmc.fabric-loom")
}

val modId = getExt("mod_id")
val modName = getExt("mod_name")


val tracyCapturePath = providers.gradleProperty("loom.tracyCapturePath").map { File(it) }
val renderDocCliPath = providers.gradleProperty("loom.renderDocCliPath").map { File(it) }
val renderDocUiPath = providers.gradleProperty("loom.renderDocUiPath").map { File(it) }

loom {
mods.maybeCreate(modId).apply {
sourceSet(sourceSets.getByName("main"))
}

runs {
named("client") {
jvmArguments.addAll(Constants.JVM_ARGUMENTS)
systemProperties.putAll(Constants.SYSTEM_PROPERTIES)
programArguments.addAll(Constants.PROGRAM_ARGUMENTS)
}

if (tracyCapturePath.isPresent) {
create("clientTracy") {
inherit(getByName("client"))
}
}

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

configureEach {
generateRunConfig = true
preferGradleTask = true

displayName = "$modName Fabric ${Strings.capitalizeCamelCaseName(name)}"
ideConfigFolder = "Fabric"
}
}
}

tasks {
if (tracyCapturePath.isPresent) {
named<RunGameTask>("runClientTracy").configure {
tracy {
tracyCapture.set(tracyCapturePath.get())
output.set(workingDir.resolve("profile.tracy"))
}
}
}

if (renderDocCliPath.isPresent) {
withType<RenderDocRunTask>().configureEach {
renderDocExecutable.set(renderDocCliPath.get())
}
}

if (renderDocUiPath.isPresent) {
withType<RenderDocRunUITask>().configureEach {
renderDocExecutable.set(renderDocUiPath.get())
}
}
}

dependencies {
minecraft(libraryOf("minecraft"))
}
Loading
Loading