Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
c0c0042
Start of porting to 26.1-snapshot-1
shartte Dec 17, 2025
95b4b53
First batch of patches&rejects
shartte Dec 17, 2025
c362a85
Split based on Minecraft-Dist rather than @OnlyIn annotations.
shartte Dec 17, 2025
2898dbb
Fix RenderPipelines patch that got busted by an IntelliJ refactor.
shartte Dec 17, 2025
09a06d9
More rejects addressed
shartte Dec 17, 2025
243bb6e
Most rejects processed.
shartte Dec 17, 2025
8c2782c
Fix compilation issues.
shartte Dec 17, 2025
c9471d3
Removed LighTexture reject -> Vanilla now has equivalent functions in…
shartte Dec 17, 2025
df8a95e
Reintroduce EditBox#setFilter as a patch
shartte Dec 17, 2025
640b1be
Fix more problems resulting in rename of lightColor->lightCoords in V…
shartte Dec 17, 2025
cd9c1d3
Fixed remaining compile issues.
shartte Dec 17, 2025
73308da
Fix patch formatting issues.
shartte Dec 17, 2025
197d05b
Fix Immaculate for Java25 and apply formatting.
shartte Dec 17, 2025
8ddbeb5
Fix pack.mcmeta, ranges now require a lower bound of 15 to load.
shartte Dec 17, 2025
656b4ab
Remove retrieval of "cleaned" jars for client/server, since they're u…
shartte Dec 17, 2025
c1d7bf3
Regenerated ATs, removed ATs for villager trades.
shartte Dec 17, 2025
d234634
- Fix double generation of creative tabs content.
shartte Dec 17, 2025
87fdcba
Fix misported Patch for FlowingFluid
shartte Dec 17, 2025
6f85f36
Fix misported Patch for EnchantmentMenu
shartte Dec 17, 2025
3291bdf
Fix misported patch that double-loaded resources.
shartte Dec 17, 2025
c05f15d
Fix access transformers.
shartte Dec 17, 2025
215a7ba
Adapt the installerprofile to a post-obfuscation world.
shartte Dec 17, 2025
8010fa9
Fix launcher profile using NeoForm instead of Minecraft Client classp…
shartte Dec 17, 2025
2f8f24c
Fix quad normals overwriting the vertex position
shartte Dec 17, 2025
c508a4b
Fix PIP Depth Texture Usage Bits
shartte Dec 17, 2025
830d749
Start working on getting a mods toml into patches.
shartte Dec 18, 2025
84579fa
Bump FML to get the game to launch in prod.
shartte Dec 18, 2025
d2238be
Fix FML-detection of NF.
shartte Dec 18, 2025
add93fa
Add neoforge.mods.toml to Minecraft in userdev via source patches.
shartte Dec 18, 2025
4f981eb
Fix formatting.
shartte Dec 18, 2025
3c1dfff
Fix production client by disabling automatic generation of mod manife…
shartte Dec 18, 2025
04c31e5
Add unsafe access args to userdev.
shartte Dec 18, 2025
5ad9343
Fix creative menu search not working
shartte Dec 19, 2025
c28fd7e
Fix crash when an itemComponent is shown in a tooltip (misported patch).
shartte Dec 19, 2025
08ddebc
Allow manually tagging a release version, and make the build script u…
shartte Dec 19, 2025
5081568
Fix crash when holding Map in hand
shartte Dec 23, 2025
d465df1
Implement TypedInstance onto common types (#2888)
ApexModder Dec 23, 2025
a9c2968
Fix baked colors in quads applying incorrectly (#2875)
XFactHD Dec 15, 2025
3f5031d
Make .gradle files not CRLF to fix renovate (#2880)
shartte Dec 17, 2025
29df7e8
Update plugin org.gradle.toolchains.foojay-resolver-convention to v1 …
neoforged-renovate[bot] Dec 17, 2025
73ee82c
Add gamerule changed event (#2876)
shartte Dec 19, 2025
0bcbcd6
Remove remaining mip level reduction suppression patches (#2882)
XFactHD Dec 19, 2025
525bb6f
Separate the key modifiers for Command and Control keys on OSX (#2872)
mezz Dec 22, 2025
c7d64cc
Restore patch for RenderStateExtensions.onUpdateEntityRenderState
shartte Dec 26, 2025
e189793
Bump NeoForm version to V3
marchermans Dec 28, 2025
2be176f
Remove an existing self-test report before running the self-test.
shartte Dec 28, 2025
4eb703b
Fix StacksResourceHandler crash when changing size (#2891)
shartte Dec 26, 2025
e2adc09
New (and old) features for GameTestHelper (#2894)
shartte Dec 27, 2025
deb377c
Add resource handler utilities for moveStacking/moveFirstStacking (#2…
shartte Dec 27, 2025
25d4138
Return an empty fluid stack for empty itemstacks in FluidUtil#getFirs…
shartte Dec 28, 2025
c9ef0d0
Fix LevelChunkSection local variable name in patch
Technici4n Dec 30, 2025
f86b8f6
Update gradleutils and use the project version from compute-version.
shartte Dec 31, 2025
5de9b6e
Fix higher than expected collision count for DataComponentMap hashcodes
shartte Dec 31, 2025
811215c
Eagerly Report Mod Construction Errors (#2890)
shartte Dec 31, 2025
6b1bb27
Add a mutable quad class (#2901)
shartte Jan 4, 2026
6d950de
Fire GatherEffectScreenTooltipsEvent for all effect widgets (#2884)
sciwhiz12 Jan 2, 2026
f47aa39
New Crowdin updates (#2826)
neoforged-l10n Jan 2, 2026
4618d30
Fix DynamicFluidContainerModel to use item atlas instead of block atl…
pharuxtan Jan 3, 2026
36bfba3
Fix RenderNameTagEvent.CanRender not being posted to event bus (#2905)
huanmeng-qwq Jan 4, 2026
30062da
Remove changelog and set published tag in SCM block of POM as an inte…
huanmeng-qwq Jan 4, 2026
d5ccfc1
Expose the utility to trigger the appropriate sound and game event fo…
shartte Jan 4, 2026
988cc92
[1.21.11] Fix addToTooltip extension inconsistency (#2906)
shartte Jan 4, 2026
dcdf2c9
[1.21.x] Add tooltip support for FluidStack (#2887)
shartte Jan 4, 2026
cd9339f
Port to 26.1-snapshot-2 (#2911)
shartte Jan 7, 2026
663a48f
Fix stencil (#2910)
LovelyCane Jan 7, 2026
bc01818
Allow custom `GameRuleType`s to be defined
ApexModder Jan 12, 2026
6f4e3a5
Expose debug renderer/subscription flag registration
ApexModder Jan 5, 2026
629cbe9
Port to 26.1-snapshot-3 (#2927)
shartte Jan 19, 2026
bfba1c2
Addressed review comments of 21.6-snapshot-3 port.
shartte Jan 19, 2026
b38a28e
Add more overloads to construct ItemStackTemplate
shartte Jan 19, 2026
84d7755
Give UI lightmap the same size as the level lightmap
Technici4n Jan 20, 2026
159a9f0
Rework default data component bound event (#2933)
shartte Jan 20, 2026
2f2f785
Make next stable 26.1.0 (not 26.1), we now have 4 components
Technici4n Jan 20, 2026
a806aef
Remove ItemInstanceExtensions
Technici4n Jan 20, 2026
1e2fe63
Port to 26.1-snapshot-4 (#2936)
shartte Jan 20, 2026
f958d83
Cleanup and improve javadocs around entity related events, remove bro…
TelepathicGrunt Jan 15, 2026
aa8f76b
Enforce format compatibility for texture copies (#2803)
LovelyCane Jan 16, 2026
946199c
Component-based Language Data Generation (#2862)
shartte Jan 20, 2026
1472d4e
Add helpers for ItemStackTemplate to ItemResource (#2940)
shartte Jan 21, 2026
df4e2f9
Added capabilities for copper chests, shelves, and bundles (#2797)
thomasglasser Jan 20, 2026
af3c6e9
Defer BlockEntity attachment syncing to match the usual BE sync timin…
Technici4n Jan 21, 2026
bc9fd31
Adjust local snapshot versions to match manually released versions
Technici4n Jan 21, 2026
5aac16f
[26.1] Add more utilities to MutableQuad (#2943)
XFactHD Jan 22, 2026
2fe9b3e
Fix loading overlay becoming blurry after window handoff
XFactHD Jan 23, 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
  •  
  •  
  •  
1 change: 0 additions & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
*.bat text eol=crlf
*.patch text eol=lf
*.java text eol=lf
*.gradle text eol=crlf
*.png binary
*.gif binary
*.exe binary
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/build-prs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ jobs:
- name: Checkout repository
uses: neoforged/actions/checkout@main

- name: Setup JDK 21
- name: Setup JDK 25
uses: neoforged/actions/setup-java@main
with:
java-version: 21
java-version: 25
# Exclude minecraft sources from emitting annotation warnings since we cannot point to them anyway
warning-file-path: '(?!.+\/projects\/neoforge\/src\/)[^:]+'

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/check-local-changes.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ jobs:
- name: Checkout repository
uses: neoforged/actions/checkout@main

- name: Setup JDK 21
- name: Setup JDK 25
uses: neoforged/actions/setup-java@main
with:
java-version: 21
java-version: 25
problem-matcher: false

- name: Setup Gradle
Expand Down
7 changes: 5 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ on:
branches:
- '1.*' # Mainline release branches
- '[0-9][0-9]w14[a-z]+' # w14 April Fools Snapshots
tags:
- 'release/*' # Manual releases

permissions:
contents: read
Expand All @@ -17,10 +19,11 @@ jobs:
release:
uses: neoforged/actions/.github/workflows/gradle-publish.yml@main
with:
java: 21
java: 25
pre_gradle_tasks: setup
gradle_tasks: publish '-Pneogradle.runtime.platform.installer.debug=false'
gradle_tasks: publish
version_labels: -beta, -stable
set_project_version: true

# We only publish the main repository. This way we avoid publishing Kits
if: ${{ github.repository == 'neoforged/NeoForge' }}
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/test-prs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ jobs:
- name: Checkout repository
uses: neoforged/actions/checkout@main

- name: Setup JDK 21
- name: Setup JDK 25
uses: neoforged/actions/setup-java@main
with:
java-version: 21
java-version: 25
problem-matcher: false

- name: Setup Gradle
Expand Down
22 changes: 16 additions & 6 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,29 @@ import java.util.regex.Pattern
import net.neoforged.neodev.CheckSplitSources

plugins {
id 'net.neoforged.gradleutils' version '4.0.1'
id 'net.neoforged.gradleutils' version '5.1.0'
id 'dev.lukebemish.immaculate' version '0.1.6' apply false
id 'net.neoforged.licenser' version '0.7.5'
id 'neoforge.formatting-conventions'
id 'neoforge.versioning'
}

ext.isPreReleaseVersion = project.minecraft_version.contains('w') || project.minecraft_version.contains('-')

if (isPreReleaseVersion) {
project.version = "${project.neoforge_snapshot_next_stable}.0-alpha.${project.minecraft_version}.${(new Date()).format('yyyyMMdd.HHmmss', TimeZone.getTimeZone('UTC'))}"
// If an external version is defined, always use that
ext.isPreReleaseVersion = false

final fixedProjectVersion = project.providers.gradleProperty("version").getOrElse(null)
if (fixedProjectVersion == null) {
if (project.minecraft_version.contains('-')) {
ext.isPreReleaseVersion = true
// Match the manual snapshot release suffix (e.g. -alpha.M+snapshot-N) with M=0 and a suffixed .<timestamp>
// Separate out the -snapshot-N or -rc-N suffix
final preReleaseSuffix = project.minecraft_version.split("-", 2)[1]
project.version = "${project.neoforge_snapshot_next_stable}.0-alpha.0+${preReleaseSuffix}.${(new Date()).format('yyyyMMdd.HHmmss', TimeZone.getTimeZone('UTC'))}"
} else {
project.version = gradleutils.version.toString()
}
} else {
project.version = gradleutils.version.toString()
project.version = fixedProjectVersion
}

// Print version, generally useful to know - also appears on CI
Expand Down
2 changes: 1 addition & 1 deletion buildSrc/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ dependencies {
// ../settings.gradle sets these version properties accordingly
implementation "net.neoforged:moddev-gradle:${gradle.parent.ext.moddevgradle_plugin_version}"

implementation(platform("net.neoforged:minecraft-dependencies:${gradle.parent.ext.minecraft_dependencies_version}") {
implementation(platform("net.neoforged:minecraft-dependencies:${gradle.parent.ext.minecraft_version}") {
exclude group: 'org.ow2.asm' // The platform requests a strictly lower version of ASM and we bump it
})

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,11 @@ immaculate {
fileContents.replace('javax.annotation.Nullable', 'org.jspecify.annotations.Nullable')
fileContents.replace('org.jetbrains.annotations.Nullable', 'org.jspecify.annotations.Nullable')
}

// Bump the version of the google formatter to add Java 25 support.
steps.named { it == 'googleFixImports' }.configureEach {
it.version('1.33.0')
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,27 +12,19 @@ abstract class CreateCleanArtifacts extends CreateMinecraftArtifacts {
@OutputFile
abstract RegularFileProperty getRawClientJar();

@OutputFile
abstract RegularFileProperty getCleanClientJar();

/**
* The unmodified downloaded server jar.
*/
@OutputFile
abstract RegularFileProperty getRawServerJar();

@OutputFile
abstract RegularFileProperty getCleanServerJar();

@OutputFile
abstract RegularFileProperty getCleanJoinedJar();

@Inject
public CreateCleanArtifacts() {
getAdditionalResults().put("node.downloadClient.output.output", getRawClientJar().getAsFile());
getAdditionalResults().put("node.stripClient.output.output", getCleanClientJar().getAsFile());
getAdditionalResults().put("node.downloadServer.output.output", getRawServerJar().getAsFile());
getAdditionalResults().put("node.stripServer.output.output", getCleanServerJar().getAsFile());
getAdditionalResults().put("vanillaDeobfuscated", getCleanJoinedJar().getAsFile());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -89,11 +89,6 @@ public void writeUserDevConfig() throws IOException {
"--assetsDir", "{assets_root}");
}

Collections.addAll(args,
"--fml.mcVersion", getMinecraftVersion().get(),
"--fml.neoForgeVersion", getNeoForgeVersion().get(),
"--fml.neoFormVersion", getRawNeoFormVersion().get());

Map<String, String> systemProperties = new LinkedHashMap<>();
systemProperties.put("java.net.preferIPv6Addresses", "system");

Expand All @@ -107,6 +102,8 @@ public void writeUserDevConfig() throws IOException {
Objects.requireNonNullElse(runType.mainClass, "NONE"),
args,
List.of(
"--sun-misc-unsafe-memory-access=allow",
"--enable-native-access=ALL-UNNAMED",
"--add-opens", "java.base/java.lang.invoke=ALL-UNNAMED",
"--add-exports", "jdk.naming.dns/com.sun.jndi.dns=java.naming"),
runType == RunType.CLIENT || runType == RunType.JUNIT || runType == RunType.CLIENT_DATA,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public void exec() {
}
args("--output", getOutput().get().getAsFile().getAbsolutePath());
args("--no-dist-annotation");
args("--no-mod-manifest");
super.exec();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package net.neoforged.neodev;

import io.codechicken.diffpatch.cli.CliOperation;
import io.codechicken.diffpatch.cli.DiffOperation;
import io.codechicken.diffpatch.util.Input.MultiInput;
import io.codechicken.diffpatch.util.Output.MultiOutput;
import java.io.File;
import java.io.IOException;
import javax.inject.Inject;
import org.gradle.api.DefaultTask;
import org.gradle.api.file.DirectoryProperty;
import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.tasks.InputDirectory;
import org.gradle.api.tasks.Optional;
import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.OutputFile;
import org.gradle.api.tasks.TaskAction;

/**
* Generates patch files for all resources found in a given folder to facilitate injecting them into
* the moddev environment.
*/
abstract class GenerateResourcePatches extends DefaultTask {
@InputDirectory
public abstract DirectoryProperty getAdditionalResourcesDir();

@Optional
@OutputFile
public abstract RegularFileProperty getPatchesJar();

@Optional
@OutputDirectory
public abstract DirectoryProperty getPatchesFolder();

@Inject
public GenerateResourcePatches() {}

@TaskAction
public void generateSourcePatches() throws IOException {
var emptyFolder = new File(getTemporaryDir(), "empty");
emptyFolder.mkdir();

var builder = DiffOperation.builder()
.logTo(getLogger()::lifecycle)
.baseInput(MultiInput.folder(emptyFolder.toPath()))
.changedInput(MultiInput.folder(getAdditionalResourcesDir().get().getAsFile().toPath()))
.patchesOutput(getPatchesJar().isPresent() ? MultiOutput.detectedArchive(getPatchesJar().get().getAsFile().toPath()) : MultiOutput.folder(getPatchesFolder().getAsFile().get().toPath()))
.autoHeader(true)
.level(io.codechicken.diffpatch.util.LogLevel.WARN)
.summary(false)
.aPrefix("a/")
.bPrefix("b/")
.lineEnding("\n");

CliOperation.Result<DiffOperation.DiffSummary> result = builder.build().operate();

int exit = result.exit;
if (exit != 0 && exit != 1) {
throw new RuntimeException("DiffPatch failed with exit code: " + exit);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public void apply(Project project) {
tasks.register("setup", Sync.class, task -> {
task.setGroup(NeoDevPlugin.GROUP);
task.setDescription("Replaces the contents of the base project sources with the unpatched, decompiled Minecraft source code.");
task.from(project.zipTree(createSources.flatMap(CreateMinecraftArtifacts::getSourcesArtifact)));
task.from(project.zipTree(createSources.flatMap(CreateMinecraftArtifacts::getGameSourcesArtifact)));
task.into(project.file("src/main/java/"));
task.include("**/*.java");
});
Expand Down
Loading
Loading