diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 5fdf3fe6d6..f8af9a776f 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -2,7 +2,7 @@ name: Publish on: push: - branches: [ '1.21.11' ] + branches: [ '26.1' ] permissions: contents: read diff --git a/.gitignore b/.gitignore index 4ae87a4951..4dcbfe411a 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,4 @@ src/*/generated/**/.cache/ /*/.gitignore /*/.factorypath /*/.apt_generated/ +/fmlcore/logs/ diff --git a/build.gradle b/build.gradle index a49df84377..34c55fa107 100644 --- a/build.gradle +++ b/build.gradle @@ -7,10 +7,10 @@ plugins { id 'net.minecraftforge.gradleutils' version '[2.6.4,2.7)' id 'eclipse' id 'de.undercouch.download' version '5.4.0' - id 'net.minecraftforge.gradle.patcher' version '[6.0.46,6.2)' apply false - id 'net.minecraftforge.gradle.mcp' version '[6.0.46,6.2)' apply false + id 'net.minecraftforge.gradle.patcher' version '[6.0.51,6.2)' apply false + id 'net.minecraftforge.gradle.mcp' version '[6.0.51,6.2)' apply false id 'net.minecraftforge.gradlejarsigner' version '1.0.4' - id 'org.barfuin.gradle.taskinfo' version '2.1.0' + id 'org.barfuin.gradle.taskinfo' version '3.0.1' } Util.init() //Init all our extension methods! @@ -41,6 +41,9 @@ project(':mcp') { config MC_VERSION + '-' + MCP_VERSION pipeline = 'joined' } + repositories { + mavenLocal() + } } if (System.env.TEAMCITY_VERSION) { diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index a2961d395d..c3e2c4e2b5 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -4,8 +4,8 @@ repositories { } dependencies { - implementation 'org.ow2.asm:asm:9.8' - implementation 'org.ow2.asm:asm-tree:9.8' + implementation 'org.ow2.asm:asm:9.9.1' + implementation 'org.ow2.asm:asm-tree:9.9.1' implementation 'net.minecraftforge:srgutils:0.6.2' implementation 'net.minecraftforge:JarJarMetadata:0.3.27' implementation 'commons-io:commons-io:2.13.0' diff --git a/buildSrc/src/main/groovy/net/minecraftforge/forge/tasks/BundleList.groovy b/buildSrc/src/main/groovy/net/minecraftforge/forge/tasks/BundleList.groovy index b560c5d411..ad9bed5f55 100644 --- a/buildSrc/src/main/groovy/net/minecraftforge/forge/tasks/BundleList.groovy +++ b/buildSrc/src/main/groovy/net/minecraftforge/forge/tasks/BundleList.groovy @@ -10,13 +10,11 @@ import java.util.zip.ZipFile abstract class BundleList extends DefaultTask { @InputFiles abstract ConfigurableFileCollection getConfig() - @InputFiles abstract ConfigurableFileCollection getConfigExtra() @InputFile abstract RegularFileProperty getServerBundle() @OutputFile abstract RegularFileProperty getOutput() BundleList() { config.setFrom(project.configurations.installer) - configExtra.setFrom(project.configurations.installerextra) output.convention(project.layout.buildDirectory.file("$name/output.list")) configure { dependsOn(project.tasks.universalJar) @@ -36,13 +34,6 @@ abstract class BundleList extends DefaultTask { entries.put("$info.art.group:$info.art.name", "$dep.file.sha256\t$info.name\t$info.path") } - resolved = project.configurations.installerextra.resolvedConfiguration.resolvedArtifacts - for (def dep : resolved) { - def info = Util.getMavenInfoFromDep(dep) - //println("$dep.file.sha1\t$info.name\t$info.path") - entries.put("$info.art.group:$info.art.name", "$dep.file.sha256\t$info.name\t$info.path") - } - var packed = (AbstractArchiveTask) project.tasks.universalJar var info = Util.getMavenInfoFromTask(packed) def file = packed.archiveFile.get().asFile diff --git a/buildSrc/src/main/groovy/net/minecraftforge/forge/tasks/LauncherJson.groovy b/buildSrc/src/main/groovy/net/minecraftforge/forge/tasks/LauncherJson.groovy index fe6f810398..e9cf3a18d2 100644 --- a/buildSrc/src/main/groovy/net/minecraftforge/forge/tasks/LauncherJson.groovy +++ b/buildSrc/src/main/groovy/net/minecraftforge/forge/tasks/LauncherJson.groovy @@ -24,7 +24,6 @@ abstract class LauncherJson extends DefaultTask { dependsOn(project.tasks.universalJar) input.from(project.tasks.universalJar.archiveFile) input.from(project.configurations.installer) - input.from(project.configurations.installerextra) configure { def mc = project.rootProject.ext.MC_VERSION def forge = project.rootProject.ext.FORGE_VERSION @@ -89,7 +88,6 @@ abstract class LauncherJson extends DefaultTask { ] ]) - json.libraries.addAll(getArtifacts(project.configurations.installerextra).values()) json.libraries.addAll(getArtifacts(project.configurations.installer).values()) Files.writeString(output.get().asFile.toPath(), new JsonBuilder(json).toPrettyString()) } diff --git a/buildSrc/src/main/groovy/net/minecraftforge/forge/tasks/checks/CheckATs.groovy b/buildSrc/src/main/groovy/net/minecraftforge/forge/tasks/checks/CheckATs.groovy index 259b62d569..7e7bf20da2 100644 --- a/buildSrc/src/main/groovy/net/minecraftforge/forge/tasks/checks/CheckATs.groovy +++ b/buildSrc/src/main/groovy/net/minecraftforge/forge/tasks/checks/CheckATs.groovy @@ -17,17 +17,15 @@ abstract class CheckATs extends CheckTask { @InputFile abstract RegularFileProperty getInheritance() @InputFiles abstract ConfigurableFileCollection getAts() - @InputFile @Optional abstract RegularFileProperty getMappings() @Override void check(Reporter reporter, boolean fix) { - final IMappingFile mappings = mappings.map { RegularFile it -> IMappingFile.load(it.asFile) }.getOrNull() final inheritance = InheritanceData.parse(this.inheritance.get().asFile) ats.each { final lines = process(it, reporter, inheritance) if (fix) { - it.text = joinBack(lines, inheritance, mappings).join('\n') + it.text = joinBack(lines, inheritance).join('\n') } } } @@ -170,45 +168,18 @@ abstract class CheckATs extends CheckTask { return lines } - private static List joinBack(TreeMap lines, Map inheritance, IMappingFile mappings) { + private static List joinBack(TreeMap lines, Map inheritance) { final data = [] as List - final remapComment = { ATParser.Entry entry -> - if (!mappings || !entry || !entry.desc) return null - final comment = entry.comment?.substring(1)?.trim() - final jsonCls = inheritance.get(entry.cls.replaceAll('\\.', '/')) - final mappingsClass = mappings?.getClass(jsonCls.name) - if (mappingsClass === null) return entry.comment - final idx = entry.desc.indexOf('(') - - String mappedName = idx == -1 - ? mappingsClass.remapField(entry.desc) - : mappingsClass.remapMethod(entry.desc.substring(0, idx), entry.desc.substring(idx)) - if (!mappedName) return entry.comment - if (mappedName == '') - mappedName = 'constructor' - - if (comment?.startsWith(mappedName)) - return '# ' + comment - if (comment && comment.indexOf(' ') !== -1) { - def split = comment.split(' - ').toList() - if (split[0].indexOf(' ') !== -1) - // The first string is more than one word, so append before it - return "# ${mappedName} - ${comment}" - split.remove(0) - return "# ${mappedName} - ${String.join(' - ', split)}" - } - return '# ' + mappedName - } lines.each { key, value -> if (!value.group) { - def comment = remapComment.call(value) + def comment = null //value.comment data.add(value.modifier + ' ' + key + (comment ? ' ' + comment : '')) } else { data.add(('#group ' + value.modifier + ' ' + key + ' ' + (value.comment ?: '')).trim()) value.children.each { final line = value.modifier + ' ' + it final entry = ATParser.parseEntry(line) - final comment = remapComment(entry) + final comment = null //entry.comment data.add(line + (comment ? ' ' + comment : '')) } data.add('#endgroup') diff --git a/build_forge.gradle b/build_forge.gradle index bd5de126e9..3df89c798d 100644 --- a/build_forge.gradle +++ b/build_forge.gradle @@ -89,7 +89,7 @@ ext { final String MAVEN_PATH = ext.MAVEN_PATH final String BINPATCH_TOOL = 'net.minecraftforge:binarypatcher:1.2.0:fatjar' -final String INSTALLER_TOOLS = 'net.minecraftforge:installertools:1.4.3' +final String INSTALLER_TOOLS = 'net.minecraftforge:installertools:1.4.5' final String FART = 'net.minecraftforge:ForgeAutoRenamingTool:1.0.6' final String S2S_TOOL = 'net.minecraftforge:Srg2Source:8.2.0:fatjar' @@ -100,10 +100,6 @@ configurations { extendsFrom(bootstrap) transitive = false } - installerextra { - extendsFrom(bootstrap) - transitive = false - } api.extendsFrom(installer) } @@ -145,8 +141,6 @@ dependencies { installer(project(':mclanguage')) installer(project(':forge-transformers')) - installerextra("${MCP_ARTIFACT.group}:${MCP_ARTIFACT.name}:${MCP_ARTIFACT.version}:srg2off") - runtimeOnly(libs.bootstrap) runtimeOnly(libs.bootstrap.dev) @@ -163,6 +157,11 @@ tasks.named('applyRangeMapBase').configure { tool = S2S_TOOL } +// Disable all tests, we have GameTests not JUnit tests +test { + exclude '**/*' +} + patcher { excs.from file("$rootDir/src/main/resources/forge.exc") parent = project(':mcp') @@ -270,21 +269,6 @@ afterEvaluate { userdevJar { onlyIf = { t -> true } } - def patches = project.file('build/genPatchesForUserdev/output/') - patches.mkdirs() - def genPatchesForUserdev = tasks.register('genPatchesForUserdev', GeneratePatches){ - base = project(':mcp').setupMCP.output - modified = applyRangeMapBase.output - originalPrefix = genPatches.originalPrefix - modifiedPrefix = genPatches.modifiedPrefix - output = patches - autoHeader true - lineEnding = '\n' - } - bakePatches { - dependsOn = [] - input = genPatchesForUserdev.get().output - } } } @@ -351,7 +335,7 @@ for (def run in patcher.runs + tasks.userdevConfig.runs) { if (run.parents) continue // We already added this to the parent run config //run.property 'bsl.debug', 'true' run.args '--gameDir', '.' - run.jvmArgs '-Djava.net.preferIPv6Addresses=system' + run.jvmArgs '-Djava.net.preferIPv6Addresses=system', '-XX:+UseCompactObjectHeaders' run.client run.name.contains('client') run.main 'net.minecraftforge.bootstrap.ForgeBootstrap' } @@ -424,7 +408,8 @@ tasks.register('extractInheritance', ExtractInheritance) { } } tasks.register("findFinalizeSpawnTargets", BytecodePredicateFinder) { - jar = createClientOfficial.output + dependsOn downloadClientRaw + jar = downloadClientRaw.dest output = rootProject.file('forge-transformers/src/main/resources/coremods/finalize_spawn_targets.json') predicate = { parent, node, insn -> @@ -449,60 +434,37 @@ tasks.register("downloadServerShim", DownloadMavenArtifact) { artifact = libs.bootstrap.shim.get().toString() changing = true } -tasks.register('downloadClientMappings', net.minecraftforge.gradle.common.tasks.JarExec) { - ext.output = file('build/client_mappings.tsrg') - tool = INSTALLER_TOOLS + ':fatjar' - args = ['--task', 'DOWNLOAD_MOJMAPS', '--sanitize', '--version', MC_VERSION, '--side', 'client', '--output', output.absolutePath] - outputs.file(output) -} -tasks.register('downloadServerMappings', net.minecraftforge.gradle.common.tasks.JarExec) { - ext.output = file('build/server_mappings.tsrg') - tool = INSTALLER_TOOLS + ':fatjar' - args = ['--task', 'DOWNLOAD_MOJMAPS', '--sanitize', '--version', MC_VERSION, '--side', 'server', '--output', output.absolutePath] - outputs.file(output) -} tasks.register("createJoinedSRG", DownloadMavenArtifact) { - artifact = "net.minecraft:joined:${MC_VERSION}-${MCP_VERSION}:srg" -} -tasks.register("createClientOfficial", RenameJar) { - tool = FART + ':all' - args = ['--input', '{input}', '--output', '{output}', '--names', '{mappings}', '--ann-fix', '--ids-fix', '--src-fix', '--record-fix', '--strip-sigs', '--reverse'] - mappings = downloadClientMappings.output - dependsOn(downloadClientRaw, downloadClientMappings) - input = downloadClientRaw.dest - output = file("build/createClientOfficial/output.jar") -} -tasks.register("createServerOfficial", RenameJar) { - tool = FART + ':all' - args = ['--input', '{input}', '--output', '{output}', '--names', '{mappings}', '--ann-fix', '--ids-fix', '--src-fix', '--record-fix', '--strip-sigs', '--reverse'] - mappings = downloadServerMappings.output - dependsOn(downloadServerMappings) - input = extractServer.output - output = file("build/createServerOfficial/output.jar") + artifact = "net.minecraft:joined:${MC_VERSION}-${MCP_VERSION}" } tasks.named('genClientBinPatches').configure { + dependsOn(downloadClientRaw) tool = BINPATCH_TOOL - cleanJar = createClientOfficial.output + cleanJar = downloadClientRaw.dest dirtyJar = jar.archiveFile } tasks.named('genServerBinPatches').configure { + dependsOn(extractServer) tool = BINPATCH_TOOL - cleanJar = createServerOfficial.output + cleanJar = extractServer.output dirtyJar = jar.archiveFile } tasks.named('genJoinedBinPatches').configure { tool = BINPATCH_TOOL cleanJar = createJoinedSRG.output + dirtyJar = jar.archiveFile } tasks.register('applyClientBinPatches', ApplyBinPatches) { + dependsOn downloadClientRaw tool = BINPATCH_TOOL - clean = createClientOfficial.output + clean = downloadClientRaw.dest patch = genClientBinPatches.output args.addAll(['--data', '--unpatched']) } tasks.register('applyServerBinPatches', ApplyBinPatches) { + dependsOn extractServer tool = BINPATCH_TOOL - clean = createServerOfficial.output + clean = extractServer.output patch = genServerBinPatches.output args.addAll(['--data', '--unpatched']) } @@ -520,7 +482,7 @@ tasks.register('createServerShimConfig') { doLast { var cfg = new CleanProperties() cfg['Main-Class'] = 'net.minecraftforge.bootstrap.ForgeBootstrap' - cfg['Java-Version'] = '21' + cfg['Java-Version'] = '25' cfg['Arguments'] = '--launchTarget forge_server' cfg.store(output) } @@ -552,10 +514,9 @@ tasks.register('checkAllAndFix') { } CheckTask.registerTask(tasks, 'ATs', CheckATs) { - dependsOn extractInheritance, createSrg2Mcp + dependsOn extractInheritance ats.from patcher.accessTransformers inheritance = extractInheritance.output - mappings = createSrg2Mcp.output } CheckTask.registerTask(tasks, 'SAS', CheckSAS) { @@ -642,7 +603,8 @@ tasks.register('launcherJson', LauncherJson).configure { '--launchTarget', 'forge_client' ], jvm: [ - '-Djava.net.preferIPv6Addresses=system' + '-Djava.net.preferIPv6Addresses=system', + '-XX:+UseCompactObjectHeaders' ] ] ] as LinkedHashMap) @@ -655,15 +617,9 @@ tasks.register('installerJson', InstallerJson) { dependsOn(launcherJson) input.from(launcherJson.output) - // Download Official Mappings - dependsOn(downloadClientMappings, downloadServerMappings) - input.from(downloadClientMappings.output, downloadServerMappings.output) // Get 'base' MC jar, Client is straight download, server is extracted from the bundle dependsOn(downloadClientRaw, extractServer) input.from(downloadClientRaw.dest, extractServer.output) - // Rename MC Jar - dependsOn(createClientOfficial, createServerOfficial) - input.from(createClientOfficial.output, createServerOfficial.output) // Apply Binary patches to vanilla jar dependsOn(applyClientBinPatches, applyServerBinPatches) input.from(applyClientBinPatches.output, applyServerBinPatches.output, genClientBinPatches.toolJar) @@ -681,14 +637,6 @@ tasks.register('installerJson', InstallerJson) { minecraft: MC_VERSION, serverJarPath: '{LIBRARY_DIR}/net/minecraft/server/{MINECRAFT_VERSION}/server-{MINECRAFT_VERSION}-bundled.jar', data: [ - MOJMAPS: [ - client: "[net.minecraft:client:${MC_VERSION}:mappings@tsrg]", - server: "[net.minecraft:server:${MC_VERSION}:mappings@tsrg]" - ], - MOJMAPS_SHA: [ - client: "'${downloadClientMappings.output.sha1}'", - server: "'${downloadServerMappings.output.sha1}'" - ], MC_UNPACKED: [ client: "[net.minecraft:client:${MC_VERSION}]", server: "[net.minecraft:server:${MC_VERSION}:unpacked]" @@ -697,14 +645,6 @@ tasks.register('installerJson', InstallerJson) { client: "'${downloadClientRaw.dest.sha1}'", server: "'${extractServer.output.get().asFile.sha1}'" ], - MC_OFF: [ - client: "[net.minecraft:client:${MC_VERSION}:official]", - server: "[net.minecraft:server:${MC_VERSION}:official]" - ], - MC_OFF_SHA: [ - client: "'${createClientOfficial.output.get().asFile.sha1}'", - server: "'${createServerOfficial.output.get().asFile.sha1}'" - ], BINPATCH: [ client: '/data/client.lzma', server: '/data/server.lzma' @@ -770,50 +710,25 @@ tasks.register('installerJson', InstallerJson) { outputs: [ '{MC_UNPACKED}': '{MC_UNPACKED_SHA}' ] - ], [ - jar: INSTALLER_TOOLS, - classpath: INSTALLER_TOOLS_CLASSPATH, - args: [ - '--task', 'DOWNLOAD_MOJMAPS', - '--sanitize', - '--version', MC_VERSION, - '--side', '{SIDE}', - '--output', '{MOJMAPS}' - ], - outputs: [ - '{MOJMAPS}': '{MOJMAPS_SHA}' - ] ], [ sides: ['server'], - jar: FART, - classpath: getClasspath(project, libs, FART), - args: [ - '--input', '{MC_UNPACKED}', - '--output', '{MC_OFF}', - '--names', '{MOJMAPS}', - '--ann-fix', '--ids-fix', '--src-fix', '--record-fix', '--strip-sigs', '--reverse' - ], - outputs: [ - '{MC_OFF}': '{MC_OFF_SHA}' - ] - ], [ - sides: ['client'], - jar: FART, - classpath: getClasspath(project, libs, FART), - args: [ - '--input', '{MINECRAFT_JAR}', - '--output', '{MC_OFF}', - '--names', '{MOJMAPS}', - '--ann-fix', '--ids-fix', '--src-fix', '--record-fix', '--strip-sigs', '--reverse' - ], - outputs: [ - '{MC_OFF}': '{MC_OFF_SHA}' - ] - ], [ jar: BINPATCH_TOOL.rsplit(':', 1)[0], // remove :fatjar classpath: getClasspath(project, libs, BINPATCH_TOOL.rsplit(':', 1)[0]), args: [ - '--clean', '{MC_OFF}', + '--clean', '{MC_UNPACKED}', + '--output', '{PATCHED}', + '--apply', '{BINPATCH}', + '--data', '--unpatched' + ], + outputs: [ + '{PATCHED}': '{PATCHED_SHA}' + ] + ], [ + sides: ['client'], + jar: BINPATCH_TOOL.rsplit(':', 1)[0], // remove :fatjar + classpath: getClasspath(project, libs, BINPATCH_TOOL.rsplit(':', 1)[0]), + args: [ + '--clean', '{MINECRAFT_JAR}', '--output', '{PATCHED}', '--apply', '{BINPATCH}', '--data', '--unpatched' @@ -841,12 +756,7 @@ tasks.register('officialClassesOnly', Zip).configure { tasks.named('filterJarNew').configure { dependsOn('officialClassesOnly') input = officialClassesOnly.archiveFile -} - -tasks.register('filterJarNewSRG', FilterNewJar).configure { - input = reobfJar.output - srg = filterJarNew.srg - blacklist = filterJarNew.blacklist + filterInners = true } tasks.named('universalJar').configure { @@ -883,18 +793,8 @@ tasks.named('universalJar').configure { jarSigner.sign(it) } -tasks.register('universalJarSrg', Jar).configure { - from zipTree(filterJarNewSRG.output) - duplicatesStrategy = DuplicatesStrategy.EXCLUDE - from zipTree(universalJar.archiveFile) - destinationDirectory = file('build/libs') - archiveClassifier = 'universal-srg' - manifest.from(universalJar.manifest) - jarSigner.sign(it) -} - tasks.named('userdevConfig').configure { - universal = "$project.group:$project.name:$project.version:universal-srg@jar" + universal = "$project.group:$project.name:$project.version:universal@jar" } tasks.register('installerJar', InstallerJar) { @@ -1001,7 +901,7 @@ license { } tasks.register('genAllData') { - dependsOn 'forge_data', 'forge_test_data' + dependsOn 'forge_data', 'forge_data_test', 'forge_client_data_test' } if (project.hasProperty('UPDATE_MAPPINGS')) { @@ -1095,7 +995,6 @@ tasks.named('javadoc', Javadoc).configure { publishing { publications.register('mavenJava', MavenPublication).configure { artifact universalJar - artifact universalJarSrg artifact installerJar artifact mdkZip artifact userdevJar diff --git a/docs/README.md b/docs/README.md index 4249886fd0..aa5726b41b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -3,7 +3,7 @@ MinecraftForge ============= [![Stable Release](https://img.shields.io/badge/dynamic/json?url=https://files.minecraftforge.net/net/minecraftforge/forge/promotions_slim.json&label=Stable&prefix=1.21.11-&query=$.promos["1.21.11-recommended"]&color=brightgreen&logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBjbGFzcz0ic3ZnLWlubGluZS0tZmEgZmEtc3RhciBmYS13LTE4IiBhcmlhLWhpZGRlbj0idHJ1ZSIgZGF0YS1pY29uPSJzdGFyIiBkYXRhLXByZWZpeD0iZmFzIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCA1NzYgNTEyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNMjU5LjMgMTcuOEwxOTQgMTUwLjIgNDcuOSAxNzEuNWMtMjYuMiAzLjgtMzYuNyAzNi4xLTE3LjcgNTQuNmwxMDUuNyAxMDMtMjUgMTQ1LjVjLTQuNSAyNi4zIDIzLjIgNDYgNDYuNCAzMy43TDI4OCA0MzkuNmwxMzAuNyA2OC43YzIzLjIgMTIuMiA1MC45LTcuNCA0Ni40LTMzLjdsLTI1LTE0NS41IDEwNS43LTEwM2MxOS0xOC41IDguNS01MC44LTE3LjctNTQuNkwzODIgMTUwLjIgMzE2LjcgMTcuOGMtMTEuNy0yMy42LTQ1LjYtMjMuOS01Ny40IDB6IiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K)][Download] -[![Latest Release](https://img.shields.io/badge/dynamic/json?url=https://files.minecraftforge.net/net/minecraftforge/forge/promotions_slim.json&label=Latest&prefix=1.21.11-&query=$.promos["1.21.11-latest"]&color=blue&logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBjbGFzcz0ic3ZnLWlubGluZS0tZmEgZmEtYnVnIGZhLXctMTYiIGFyaWEtaGlkZGVuPSJ0cnVlIiBkYXRhLWljb249ImJ1ZyIgZGF0YS1wcmVmaXg9ImZhcyIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0iaW1nIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUxMS45ODggMjg4LjljLS40NzggMTcuNDMtMTUuMjE3IDMxLjEtMzIuNjUzIDMxLjFINDI0djE2YzAgMjEuODY0LTQuODgyIDQyLjU4NC0xMy42IDYxLjE0NWw2MC4yMjggNjAuMjI4YzEyLjQ5NiAxMi40OTcgMTIuNDk2IDMyLjc1OCAwIDQ1LjI1NS0xMi40OTggMTIuNDk3LTMyLjc1OSAxMi40OTYtNDUuMjU2IDBsLTU0LjczNi01NC43MzZDMzQ1Ljg4NiA0NjcuOTY1IDMxNC4zNTEgNDgwIDI4MCA0ODBWMjM2YzAtNi42MjctNS4zNzMtMTItMTItMTJoLTI0Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI0NGMtMzQuMzUxIDAtNjUuODg2LTEyLjAzNS05MC42MzYtMzIuMTA4bC01NC43MzYgNTQuNzM2Yy0xMi40OTggMTIuNDk3LTMyLjc1OSAxMi40OTYtNDUuMjU2IDAtMTIuNDk2LTEyLjQ5Ny0xMi40OTYtMzIuNzU4IDAtNDUuMjU1bDYwLjIyOC02MC4yMjhDOTIuODgyIDM3OC41ODQgODggMzU3Ljg2NCA4OCAzMzZ2LTE2SDMyLjY2NkMxNS4yMyAzMjAgLjQ5MSAzMDYuMzMuMDEzIDI4OC45LS40ODQgMjcwLjgxNiAxNC4wMjggMjU2IDMyIDI1Nmg1NnYtNTguNzQ1bC00Ni42MjgtNDYuNjI4Yy0xMi40OTYtMTIuNDk3LTEyLjQ5Ni0zMi43NTggMC00NS4yNTUgMTIuNDk4LTEyLjQ5NyAzMi43NTgtMTIuNDk3IDQ1LjI1NiAwTDE0MS4yNTUgMTYwaDIyOS40ODlsNTQuNjI3LTU0LjYyN2MxMi40OTgtMTIuNDk3IDMyLjc1OC0xMi40OTcgNDUuMjU2IDAgMTIuNDk2IDEyLjQ5NyAxMi40OTYgMzIuNzU4IDAgNDUuMjU1TDQyNCAxOTcuMjU1VjI1Nmg1NmMxNy45NzIgMCAzMi40ODQgMTQuODE2IDMxLjk4OCAzMi45ek0yNTcgMGMtNjEuODU2IDAtMTEyIDUwLjE0NC0xMTIgMTEyaDIyNEMzNjkgNTAuMTQ0IDMxOC44NTYgMCAyNTcgMHoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo= +[![Latest Release](https://img.shields.io/badge/dynamic/json?url=https://files.minecraftforge.net/net/minecraftforge/forge/promotions_slim.json&label=Latest&prefix=26.1-&query=$.promos["26.1-latest"]&color=blue&logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBjbGFzcz0ic3ZnLWlubGluZS0tZmEgZmEtYnVnIGZhLXctMTYiIGFyaWEtaGlkZGVuPSJ0cnVlIiBkYXRhLWljb249ImJ1ZyIgZGF0YS1wcmVmaXg9ImZhcyIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0iaW1nIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUxMS45ODggMjg4LjljLS40NzggMTcuNDMtMTUuMjE3IDMxLjEtMzIuNjUzIDMxLjFINDI0djE2YzAgMjEuODY0LTQuODgyIDQyLjU4NC0xMy42IDYxLjE0NWw2MC4yMjggNjAuMjI4YzEyLjQ5NiAxMi40OTcgMTIuNDk2IDMyLjc1OCAwIDQ1LjI1NS0xMi40OTggMTIuNDk3LTMyLjc1OSAxMi40OTYtNDUuMjU2IDBsLTU0LjczNi01NC43MzZDMzQ1Ljg4NiA0NjcuOTY1IDMxNC4zNTEgNDgwIDI4MCA0ODBWMjM2YzAtNi42MjctNS4zNzMtMTItMTItMTJoLTI0Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI0NGMtMzQuMzUxIDAtNjUuODg2LTEyLjAzNS05MC42MzYtMzIuMTA4bC01NC43MzYgNTQuNzM2Yy0xMi40OTggMTIuNDk3LTMyLjc1OSAxMi40OTYtNDUuMjU2IDAtMTIuNDk2LTEyLjQ5Ny0xMi40OTYtMzIuNzU4IDAtNDUuMjU1bDYwLjIyOC02MC4yMjhDOTIuODgyIDM3OC41ODQgODggMzU3Ljg2NCA4OCAzMzZ2LTE2SDMyLjY2NkMxNS4yMyAzMjAgLjQ5MSAzMDYuMzMuMDEzIDI4OC45LS40ODQgMjcwLjgxNiAxNC4wMjggMjU2IDMyIDI1Nmg1NnYtNTguNzQ1bC00Ni42MjgtNDYuNjI4Yy0xMi40OTYtMTIuNDk3LTEyLjQ5Ni0zMi43NTggMC00NS4yNTUgMTIuNDk4LTEyLjQ5NyAzMi43NTgtMTIuNDk3IDQ1LjI1NiAwTDE0MS4yNTUgMTYwaDIyOS40ODlsNTQuNjI3LTU0LjYyN2MxMi40OTgtMTIuNDk3IDMyLjc1OC0xMi40OTcgNDUuMjU2IDAgMTIuNDk2IDEyLjQ5NyAxMi40OTYgMzIuNzU4IDAgNDUuMjU1TDQyNCAxOTcuMjU1VjI1Nmg1NmMxNy45NzIgMCAzMi40ODQgMTQuODE2IDMxLjk4OCAzMi45ek0yNTcgMGMtNjEuODU2IDAtMTEyIDUwLjE0NC0xMTIgMTEyaDIyNEMzNjkgNTAuMTQ0IDMxOC44NTYgMCAyNTcgMHoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo= )][Download] [![Discord](https://img.shields.io/discord/313125603924639766.svg?color=%237289da&label=Discord&logo=discord&logoColor=%237289da)][Discord] [![Support](https://img.shields.io/badge/Patreon-Support-orange.svg?logo=Patreon)][Patreon] Forge is a free, open-source modding API all of your favourite mods use! @@ -34,12 +34,13 @@ For support and questions, visit [the Support Forum][Support-Forum] or [the Forg We require the version of Java that Minecraft requires, which is currently: -| Minecraft | Java | -|---------------|-------------------| -| 1.20.6+ | [21][Adoptium-21] | -| 1.18 - 1.20.4 | [17][Adoptium-17] | -| 1.17.1 | [16][Adoptium-16] | -| 1.16.5- | [8][Adoptium-8] | +| Minecraft | Java | +|------------------|-------------------| +| 26.1+ | [25][Adoptium-25] | +| 1.20.6 - 1.21.11 | [21][Adoptium-21] | +| 1.18 - 1.20.4 | [17][Adoptium-17] | +| 1.17.1 | [16][Adoptium-16] | +| 1.16.5- | [8][Adoptium-8] | **If you are on Windows and have difficulty using Java to launch JAR files, consider using [Jarfix by Johann Löfflmann][Jarfix].** @@ -80,6 +81,7 @@ YourKit for providing us accesss to their [YourKit Java Profiler] which helps id [Download]: https://files.minecraftforge.net/ +[Adoptium-25]: https://adoptium.net/temurin/releases/?version=25 [Adoptium-21]: https://adoptium.net/temurin/releases/?version=21 [Adoptium-17]: https://adoptium.net/temurin/releases/?version=17 [Adoptium-16]: https://adoptium.net/temurin/releases/?version=16 diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/DistExecutor.java b/fmlcore/src/main/java/net/minecraftforge/fml/DistExecutor.java deleted file mode 100644 index 0367576e5e..0000000000 --- a/fmlcore/src/main/java/net/minecraftforge/fml/DistExecutor.java +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Copyright (c) Forge Development LLC and contributors - * SPDX-License-Identifier: LGPL-2.1-only - */ - -package net.minecraftforge.fml; - -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.loading.FMLEnvironment; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import java.io.Serializable; -import java.lang.invoke.SerializedLambda; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Objects; -import java.util.concurrent.Callable; -import java.util.function.Supplier; - -/** - * Use to execute code conditionally based on sidedness. - *
    - *
  • When you want to call something on one side and return a result {@link #safeCallWhenOn(Dist, Supplier)}
  • - *
  • When you want to call one thing on one side, another thing on the other and return a result {@link #safeRunForDist(Supplier, Supplier)}
  • - *
  • When you want to run something on one side {@link #safeRunWhenOn(Dist, Supplier)}
  • - *
- * - * @deprecated Historically, this allowed for safe execution of code on the correct side by exploiting a low-level - * detail in Java 8, but in newer versions a simple if check is enough. - *
- * For example: - *
{@code
- * if (FMLEnvironment.dist.isClient()) {
- *     // client code here
- * }
- * }
- */ -@Deprecated(since = "1.21.5", forRemoval = true) -public final class DistExecutor -{ - private static final Logger LOGGER = LogManager.getLogger(); - private DistExecutor() {} - - /** - * Run the callable in the supplier only on the specified {@link Dist}. - * This method is NOT sided-safe and special care needs to be taken in code using this method that implicit class - * loading is not triggered by the Callable. - * - * This method can cause unexpected ClassNotFound exceptions. - * - * Use {@link #safeCallWhenOn(Dist, Supplier)} where possible. - * - * @param dist The dist to run on - * @param toRun A supplier of the callable to run (Supplier wrapper to ensure classloading only on the appropriate dist) - * @param The return type from the callable - * @return The callable's result - * @deprecated use {@link #safeCallWhenOn(Dist, Supplier)} instead. This remains for advanced use cases. - */ - @Deprecated - public static T callWhenOn(Dist dist, Supplier> toRun) { - return unsafeCallWhenOn(dist, toRun); - } - - public static T unsafeCallWhenOn(Dist dist, Supplier> toRun) { - if (dist == FMLEnvironment.dist) { - try - { - return toRun.get().call(); - } - catch (Exception e) - { - throw new RuntimeException(e); - } - } - return null; - } - - /** - * Call the SafeCallable when on the correct {@link Dist}. - * - * The lambda supplied here is required to be a method reference to a method defined in - * another class, otherwise an invalid SafeReferent error will be thrown - * @param dist the dist which this will run on - * @param toRun the SafeCallable to run and return the result from - * @param The type of the SafeCallable - * @return the result of the SafeCallable or null if on the wrong side - */ - public static T safeCallWhenOn(Dist dist, Supplier> toRun) { - validateSafeReferent(toRun); - return callWhenOn(dist, toRun::get); - } - - /** - * Runs the supplied Runnable on the speicified side. Same warnings apply as {@link #callWhenOn(Dist, Supplier)}. - * - * This method can cause unexpected ClassNotFound exceptions. - * - * @see #callWhenOn(Dist, Supplier) - * @param dist Dist to run this code on - * @param toRun The code to run - * @deprecated use {@link #safeRunWhenOn(Dist, Supplier)} where possible. Advanced uses only. - */ - @Deprecated - public static void runWhenOn(Dist dist, Supplier toRun) { - unsafeRunWhenOn(dist, toRun); - } - /** - * Runs the supplied Runnable on the speicified side. Same warnings apply as {@link #unsafeCallWhenOn(Dist, Supplier)}. - * - * This method can cause unexpected ClassNotFoundException problems in common scenarios. Understand the pitfalls of - * the way the class verifier works to load classes before using this. - * - * Use {@link #safeRunWhenOn(Dist, Supplier)} if you can. - * - * @see #unsafeCallWhenOn(Dist, Supplier) - * @param dist Dist to run this code on - * @param toRun The code to run - */ - public static void unsafeRunWhenOn(Dist dist, Supplier toRun) { - if (dist == FMLEnvironment.dist) { - toRun.get().run(); - } - } - - /** - * Call the supplied SafeRunnable when on the correct Dist. - * @param dist The dist to run on - * @param toRun The code to run - */ - public static void safeRunWhenOn(Dist dist, Supplier toRun) { - validateSafeReferent(toRun); - if (dist == FMLEnvironment.dist) { - toRun.get().run(); - } - } - /** - * Executes one of the two suppliers, based on which side is active. - * - *

- * Example (replacement for old SidedProxy):
- * {@code Proxy p = DistExecutor.runForDist(()->ClientProxy::new, ()->ServerProxy::new);} - * - * NOTE: the double supplier is required to avoid classloading the secondary target. - * - * @param clientTarget The supplier supplier to run when on the {@link Dist#CLIENT} - * @param serverTarget The supplier supplier to run when on the {@link Dist#DEDICATED_SERVER} - * @param The common type to return - * @return The returned instance - * @deprecated Use {@link #safeRunForDist(Supplier, Supplier)} - */ - @Deprecated - public static T runForDist(Supplier> clientTarget, Supplier> serverTarget) { - return unsafeRunForDist(clientTarget, serverTarget); - } - - /** - * Unsafe version of {@link #safeRunForDist(Supplier, Supplier)}. Use only when you know what you're doing - * and understand why the verifier can cause unexpected ClassNotFoundException crashes even when code is apparently - * not sided. Ensure you test both sides fully to be confident in using this. - * - * @param clientTarget The supplier supplier to run when on the {@link Dist#CLIENT} - * @param serverTarget The supplier supplier to run when on the {@link Dist#DEDICATED_SERVER} - * @param The common type to return - * @return The returned instance - */ - public static T unsafeRunForDist(Supplier> clientTarget, Supplier> serverTarget) { - switch (FMLEnvironment.dist) - { - case CLIENT: - return clientTarget.get().get(); - case DEDICATED_SERVER: - return serverTarget.get().get(); - default: - throw new IllegalArgumentException("UNSIDED?"); - } - } - /** - * Executes one of the two suppliers, based on which side is active. - * - *

- * Example (replacement for old SidedProxy):
- * {@code Proxy p = DistExecutor.safeRunForDist(()->ClientProxy::new, ()->ServerProxy::new);} - * - * NOTE: the double supplier is required to avoid classloading the secondary target. - * - * @param clientTarget The supplier supplier to run when on the {@link Dist#CLIENT} - * @param serverTarget The supplier supplier to run when on the {@link Dist#DEDICATED_SERVER} - * @param The common type to return - * @return The returned instance - */ - public static T safeRunForDist(Supplier> clientTarget, Supplier> serverTarget) { - validateSafeReferent(clientTarget); - validateSafeReferent(serverTarget); - switch (FMLEnvironment.dist) - { - case CLIENT: - return clientTarget.get().get(); - case DEDICATED_SERVER: - return serverTarget.get().get(); - default: - throw new IllegalArgumentException("UNSIDED?"); - } - } - - /** - * A safe referent. This will assert that it is being called via a separated class method reference. This will - * avoid the common pitfalls of {@link #callWhenOn(Dist, Supplier)} above. - * - * SafeReferents assert that they are defined as a separate method outside the scope of the calling class. - * - * Implementations need to be defined in a separate class to the referring site, with appropriate - * visibility to be accessible at the callsite (generally, avoid private methods). - * - *

- * Valid:
- * - * {@code DistExecutor.safeCallWhenOn(Dist.CLIENT, ()->AnotherClass::clientOnlyMethod);} - * - *

- * Invalid:
- * - * {@code DistExecutor.safeCallWhenOn(Dist.CLIENT, ()->()->Minecraft.getInstance().world);} - */ - public interface SafeReferent {} - - /** - * SafeCallable version of {@link SafeReferent}. - * @see SafeReferent - * @param The return type of the Callable - */ - public interface SafeCallable extends SafeReferent, Callable, Serializable {} - - /** - * SafeSupplier version of {@link SafeReferent} - * @param The return type of the Supplier - */ - public interface SafeSupplier extends SafeReferent, Supplier, Serializable {} - - /** - * SafeRunnable version of {@link SafeReferent} - */ - public interface SafeRunnable extends SafeReferent, Runnable, Serializable {} - - private static final void validateSafeReferent(Supplier safeReferentSupplier) { - if (FMLEnvironment.production) return; - final SafeReferent setter; - try { - setter = safeReferentSupplier.get(); - } catch (Exception e) { - // Typically a class cast exception, just return out, expected. - return; - } - - for (Class cl = setter.getClass(); cl != null; cl = cl.getSuperclass()) { - try { - Method m = cl.getDeclaredMethod("writeReplace"); - m.setAccessible(true); - Object replacement = m.invoke(setter); - if (!(replacement instanceof SerializedLambda)) - break;// custom interface implementation - SerializedLambda l = (SerializedLambda) replacement; - if (Objects.equals(l.getCapturingClass(), l.getImplClass())) { - LOGGER.fatal("Detected unsafe referent usage, please view the code at {}",Thread.currentThread().getStackTrace()[3]); - throw new RuntimeException("Unsafe Referent usage found in safe referent method"); - } - } catch (NoSuchMethodException e) { - } catch (IllegalAccessException | InvocationTargetException e) { - break; - } - } - } -} diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/IModLoadingState.java b/fmlcore/src/main/java/net/minecraftforge/fml/IModLoadingState.java index df2ea454e0..0d48ff0c5c 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/IModLoadingState.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/IModLoadingState.java @@ -6,13 +6,14 @@ package net.minecraftforge.fml; import net.minecraftforge.fml.loading.progress.ProgressMeter; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; -import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; -import java.util.function.Consumer; import java.util.function.Function; -import java.util.function.ToIntFunction; +import java.util.function.IntSupplier; +import java.util.function.Supplier; /** * A mod loading state. During mod loading, the mod loader transitions between states in a defined sorted list of states, @@ -20,6 +21,7 @@ import java.util.function.ToIntFunction; * * @see IModStateProvider */ +@NullMarked public interface IModLoadingState { /** * {@return the name of this state} @@ -42,19 +44,21 @@ public interface IModLoadingState { /** * {@return a function returning a human-friendly message for this state} */ - Function message(); + Supplier message(); /** * @return a function that computes the size of this transition based on the size of the modlist. * Used to compute progress. */ - ToIntFunction size(); + default IntSupplier size() { + return ModList::size; + } /** * {@return an optional runnable, which runs before starting the transition from this state to the next} * @see #buildTransition(Executor, Executor, ProgressMeter, Function, Function) */ - Optional> inlineRunnable(); + @Nullable Runnable inlineRunnable(); /** * Builds the transition task for this state with a blank pre-sync and post-sync task. @@ -65,14 +69,14 @@ public interface IModLoadingState { * @return a transition task for this state * @see #buildTransition(Executor, Executor, ProgressMeter, Function, Function) */ - default Optional> buildTransition( + default @Nullable CompletableFuture buildTransition( final Executor syncExecutor, final Executor parallelExecutor, final ProgressMeter progressBar ) { return buildTransition(syncExecutor, parallelExecutor, progressBar, - e -> CompletableFuture.completedFuture(null), - e -> CompletableFuture.completedFuture(null) + _ -> CompletableFuture.completedFuture(null), + _ -> CompletableFuture.completedFuture(null) ); } @@ -87,7 +91,7 @@ public interface IModLoadingState { * @param postSyncTask a function which returns a task to run after event post-dispatch hook * @return a transition task for this state */ - Optional> buildTransition(final Executor syncExecutor, + @Nullable CompletableFuture buildTransition(final Executor syncExecutor, final Executor parallelExecutor, final ProgressMeter progressBar, final Function> preSyncTask, diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/IModStateTransition.java b/fmlcore/src/main/java/net/minecraftforge/fml/IModStateTransition.java index c1c57db993..9eb9e25d48 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/IModStateTransition.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/IModStateTransition.java @@ -6,21 +6,16 @@ package net.minecraftforge.fml; import net.minecraftforge.fml.event.IModBusEvent; -import net.minecraftforge.fml.loading.progress.ProgressMeter; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; import java.util.function.BiFunction; import java.util.function.Function; -import java.util.function.Supplier; -import java.util.stream.Stream; +import net.minecraftforge.fml.loading.progress.ProgressMeter; import org.jetbrains.annotations.Nullable; public interface IModStateTransition { - /** Magic value to allow me to optimize the futures list by ignoring the default value without making old methods nullable. */ - BiFunction, CompletableFuture> NULL_HOOK = (e, g) -> CompletableFuture.completedFuture(null); - static IModStateTransition buildNoopTransition() { return ModStateTransitionHelper.NOOP; } @@ -40,15 +35,6 @@ public interface IModStateTransition { return ModLoadingStage::nextState; } - /** - * This used to allow you to fire multiple events during the transition. However, in doing so it would cause issues with the default - * ModContainer's event handlers causing issues such as mod classes being constructed multiple times. - */ - @Deprecated(since = "1.21.3", forRemoval = true) - default Supplier>> eventFunctionStream() { - return () -> Stream.ofNullable(eventFunction()); - } - @Nullable default EventGenerator eventFunction() { return null; @@ -57,25 +43,9 @@ public interface IModStateTransition { ThreadSelector threadSelector(); BiFunction, CompletableFuture> finalActivityGenerator(); - /** - * I think this was meant as a way to do some things for each mod container beforge/after the transition had been sent to the container. - * However, the Future returned by this was never linked to the main transition future in any way. Which means that it was run - * in parallel and couldn't guarantee the state of the ModContainer. - *

- * Plus all existing code that I could find returned a completedFuture, so I don't think anyone ever used this. - *

- * If I were to add this back it would be a CompletableFuture wrap(ModContainer, CompletableFuture) - *

- * Added magic value NULL_HOOK to allow me to optimize the futures list by ignoring the default value without making this method nullable. - */ - @Deprecated(since = "1.21.3", forRemoval = true) - default BiFunction, CompletableFuture> preDispatchHook() { return NULL_HOOK; } - @Deprecated(since = "1.21.3", forRemoval = true) - default BiFunction, CompletableFuture> postDispatchHook() { return NULL_HOOK; } - interface EventGenerator extends Function { static EventGenerator fromFunction(Function fn) { return fn::apply; } } -} \ No newline at end of file +} diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/InterModComms.java b/fmlcore/src/main/java/net/minecraftforge/fml/InterModComms.java index 92b31df72f..28cf6eab29 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/InterModComms.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/InterModComms.java @@ -5,63 +5,20 @@ package net.minecraftforge.fml; - import java.util.Iterator; import java.util.Spliterator; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.concurrent.ConcurrentMap; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.function.Supplier; import java.util.stream.Stream; import java.util.stream.StreamSupport; -public class InterModComms -{ - public record IMCMessage(String senderModId, String modId, String method, Supplier messageSupplier) { +public final class InterModComms { + public record IMCMessage(String senderModId, String modId, String method, Supplier messageSupplier) {} - /** - * Deprecated: use {@link #senderModId()} - * @return The modid of the sender. This is supplied by the caller, or by the active mod container context. - * Consider it unreliable. - */ - @Deprecated - public final String getSenderModId() { - return this.senderModId; - } - - /** - * Deprecated: use {@link #modId()} - * @return The modid being sent to. - */ - @Deprecated - public final String getModId() { - return this.modId; - } - - /** - * Deprecated: use {@link #method()} - * @return The method being sent to. - */ - @Deprecated - public final String getMethod() { - return this.method; - } - - /** - * @param The type of the message. - * @return A {@link Supplier} of the message. - * Use {@link #messageSupplier()} - */ - @SuppressWarnings("unchecked") - @Deprecated - public final Supplier getMessageSupplier() { - return (Supplier) this.messageSupplier; - } - } - - private static final ConcurrentMap> containerQueues = new ConcurrentHashMap<>(); + private static final ConcurrentHashMap> containerQueues = new ConcurrentHashMap<>(); /** * Send IMC to remote. Sender will default to the active modcontainer, or minecraft if not. @@ -72,8 +29,9 @@ public class InterModComms * @return true if the message was enqueued for sending (the target modid is loaded) */ public static boolean sendTo(final String modId, final String method, final Supplier thing) { - if (!ModList.get().isLoaded(modId)) return false; - containerQueues.computeIfAbsent(modId, k->new ConcurrentLinkedQueue<>()).add(new IMCMessage(ModLoadingContext.get().getActiveContainer().getModId(), modId, method, thing)); + if (!ModList.isLoaded(modId)) return false; + containerQueues.computeIfAbsent(modId, _ -> new ConcurrentLinkedQueue<>()) + .add(new IMCMessage(ModLoadingContext.get().getContainer().getModId(), modId, method, thing)); return true; } @@ -87,8 +45,9 @@ public class InterModComms * @return true if the message was enqueued for sending (the target modid is loaded) */ public static boolean sendTo(final String senderModId, final String modId, final String method, final Supplier thing) { - if (!ModList.get().isLoaded(modId)) return false; - containerQueues.computeIfAbsent(modId, k->new ConcurrentLinkedQueue<>()).add(new IMCMessage(senderModId, modId, method, thing)); + if (!ModList.isLoaded(modId)) return false; + containerQueues.computeIfAbsent(modId, _ -> new ConcurrentLinkedQueue<>()) + .add(new IMCMessage(senderModId, modId, method, thing)); return true; } @@ -112,7 +71,7 @@ public class InterModComms * @return All messages */ public static Stream getMessages(final String modId) { - return getMessages(modId, s->Boolean.TRUE); + return getMessages(modId, _ -> true); } private record QueueFilteringSpliterator( @@ -136,13 +95,10 @@ public class InterModComms } @Override - public boolean tryAdvance(final Consumer action) - { + public boolean tryAdvance(final Consumer action) { IMCMessage next; - do - { - if (!iterator.hasNext()) - { + do { + if (!iterator.hasNext()) { return false; } next = this.iterator.next(); @@ -157,6 +113,5 @@ public class InterModComms public Spliterator trySplit() { return null; } - } } diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/ModContainer.java b/fmlcore/src/main/java/net/minecraftforge/fml/ModContainer.java index cf6a35a3af..b4a1ea8c69 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/ModContainer.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/ModContainer.java @@ -19,7 +19,6 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.function.BiPredicate; -import java.util.function.Consumer; import java.util.function.Supplier; /** @@ -41,11 +40,6 @@ public abstract class ModContainer { protected final Map>, Supplier> extensionPoints = new IdentityHashMap<>(); protected final EnumMap configs = new EnumMap<>(ModConfig.Type.class); final Set dependencies = new HashSet<>(); - /** - * If you want to handle the event, override {@link #dispatchConfigEvent(IConfigEvent)} - */ - @Deprecated(since = "1.21.3", forRemoval = true) - protected Optional> configHandler = Optional.empty(); public ModContainer(IModInfo info) { this.modId = info.getModId(); @@ -138,12 +132,7 @@ public abstract class ModContainer { configs.put(modConfig.getType(), modConfig); } - public void dispatchConfigEvent(IConfigEvent event) { - var handler = configHandler.orElse(null); - if (handler != null) { - handler.accept(event); - } - } + public void dispatchConfigEvent(IConfigEvent event) {} /** * Does this mod match the supplied mod? diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/ModList.java b/fmlcore/src/main/java/net/minecraftforge/fml/ModList.java index 7bbfcb0ede..438609e6b6 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/ModList.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/ModList.java @@ -5,14 +5,14 @@ package net.minecraftforge.fml; +import net.minecraftforge.fml.loading.LoadingModList; import net.minecraftforge.forgespi.language.IModFileInfo; import net.minecraftforge.forgespi.language.IModInfo; import net.minecraftforge.forgespi.language.ModFileScanData; import net.minecraftforge.fml.loading.moddiscovery.ModFile; import net.minecraftforge.fml.loading.moddiscovery.ModFileInfo; -import net.minecraftforge.fml.loading.moddiscovery.ModInfo; import net.minecraftforge.forgespi.locating.IModFile; -import java.util.Collections; + import java.util.Comparator; import java.util.HashMap; import java.util.List; @@ -30,33 +30,36 @@ import java.util.stream.Stream; * Master list of all mods - game-side version. This is classloaded in the game scope and * can dispatch game level events as a result. */ -public class ModList { - private static ModList INSTANCE; - private final List modFiles; - private final List sortedList; - private final Map fileById; - private List mods; - private Map indexedMods; - private List modFileScanData; - private List sortedContainers; +public final class ModList { + private ModList() {} - private ModList(final List modFiles, final List sortedList) { - var modFileInfos = this.modFiles = modFiles.stream().map(ModFile::getModFileInfo).toList(); - this.sortedList = sortedList.stream().map(IModInfo.class::cast).toList(); + private static final List MOD_FILES; + private static final List SORTED_LIST; + private static final Map FILE_BY_ID; + private static List mods; + private static Map indexedMods; + private static List sortedContainers; + + static { + var loadingModFiles = LoadingModList.getModFiles().stream().map(ModFileInfo::getFile).toList(); + var loadingSortedList = LoadingModList.getMods(); + + var modFileInfos = MOD_FILES = loadingModFiles.stream().map(ModFile::getModFileInfo).toList(); + SORTED_LIST = loadingSortedList.stream().map(IModInfo.class::cast).toList(); var byId = new HashMap(); for (var file : modFileInfos) { for (var mod : file.getMods()) byId.put(mod.getModId(), mod.getOwningFile()); } - this.fileById = Map.copyOf(byId); - CrashReportCallables.registerCrashCallable("Mod List", this::crashReport); + FILE_BY_ID = Map.copyOf(byId); + CrashReportCallables.registerCrashCallable("Mod List", ModList::crashReport); } - private String getModContainerState(String modId) { + private static String getModContainerState(String modId) { return getModContainerById(modId).map(ModContainer::getCurrentState).map(Object::toString).orElse("NONE"); } - private String fileToLine(IModFile mf) { + private static String fileToLine(IModFile mf) { var mainMod = mf.getModInfos().getFirst(); return String.format(Locale.ENGLISH, "%-50.50s|%-30.30s|%-30.30s|%-20.20s|%-10.10s|Manifest: %s", mf.getFileName(), mainMod.getDisplayName(), @@ -66,92 +69,92 @@ public class ModList { ((ModFileInfo)mf.getModFileInfo()).getCodeSigningFingerprint().orElse("NOSIGNATURE")); } - private String crashReport() { - return "\n" + applyForEachModFile(this::fileToLine).collect(Collectors.joining("\n\t\t", "\t\t", "")); + private static String crashReport() { + return "\n" + applyForEachModFile(ModList::fileToLine).collect(Collectors.joining("\n\t\t", "\t\t", "")); } - public static ModList of(List modFiles, List sortedList) { - INSTANCE = new ModList(modFiles, sortedList); - return INSTANCE; + public static void init() {} + + public static List getModFiles() { + return MOD_FILES; } - public static ModList get() { - return INSTANCE; + public static IModFileInfo getModFileById(String modid) { + return FILE_BY_ID.get(modid); } - public List getModFiles() { - return modFiles; + static void setLoadedMods(final List modContainers) { + mods = modContainers; + sortedContainers = modContainers.stream().sorted(Comparator.comparingInt(c -> SORTED_LIST.indexOf(c.getModInfo()))).toList(); + indexedMods = modContainers.stream().collect(Collectors.toUnmodifiableMap(ModContainer::getModId, Function.identity())); } - public IModFileInfo getModFileById(String modid) { - return this.fileById.get(modid); - } - - void setLoadedMods(final List modContainers) { - this.mods = modContainers; - this.sortedContainers = modContainers.stream().sorted(Comparator.comparingInt(c -> sortedList.indexOf(c.getModInfo()))).toList(); - this.indexedMods = modContainers.stream().collect(Collectors.toMap(ModContainer::getModId, Function.identity())); + static void clearLoadedMods() { + mods = List.of(); + indexedMods = Map.of(); + sortedContainers = List.of(); } @SuppressWarnings("unchecked") - public Optional getModObjectById(String modId) { + public static Optional getModObjectById(String modId) { return getModContainerById(modId).map(ModContainer::getMod).map(o -> (T) o); } - public Optional getModContainerById(String modId) { - return Optional.ofNullable(this.indexedMods.get(modId)); + public static Optional getModContainerById(String modId) { + return Optional.ofNullable(indexedMods.get(modId)); } - public Optional getModContainerByObject(Object obj) { + public static Optional getModContainerByObject(Object obj) { return mods.stream().filter(mc -> mc.getMod() == obj).findFirst(); } - public List getMods() { - return this.sortedList; + public static List getMods() { + return SORTED_LIST; } - public boolean isLoaded(String modTarget) { - return this.indexedMods.containsKey(modTarget); + public static boolean isLoaded(String modTarget) { + return indexedMods.containsKey(modTarget); } - public int size() { + public static int size() { return mods.size(); } - public List getAllScanData() { - if (modFileScanData == null) { - modFileScanData = this.sortedList.stream(). - map(IModInfo::getOwningFile). - filter(Objects::nonNull). - map(IModFileInfo::getFile). - distinct(). - map(IModFile::getScanResult). - toList(); + public static List getAllScanData() { + final class LazyInit { + private LazyInit() {} + private static final List MOD_FILE_SCAN_DATA = SORTED_LIST.stream() + .map(IModInfo::getOwningFile) + .filter(Objects::nonNull) + .map(IModFileInfo::getFile) + .distinct() + .map(IModFile::getScanResult) + .toList(); } - return modFileScanData; + return LazyInit.MOD_FILE_SCAN_DATA; } - public void forEachModFile(Consumer fileConsumer) { - modFiles.stream().map(IModFileInfo::getFile).forEach(fileConsumer); + public static void forEachModFile(Consumer fileConsumer) { + MOD_FILES.stream().map(IModFileInfo::getFile).forEach(fileConsumer); } - public Stream applyForEachModFile(Function function) { - return modFiles.stream().map(IModFileInfo::getFile).map(function); + public static Stream applyForEachModFile(Function function) { + return MOD_FILES.stream().map(IModFileInfo::getFile).map(function); } - public void forEachModContainer(BiConsumer modContainerConsumer) { + public static void forEachModContainer(BiConsumer modContainerConsumer) { indexedMods.forEach(modContainerConsumer); } - public void forEachModInOrder(Consumer containerConsumer) { - this.sortedContainers.forEach(containerConsumer); + public static void forEachModInOrder(Consumer containerConsumer) { + sortedContainers.forEach(containerConsumer); } - public List getLoadedMods() { - return this.sortedContainers; + public static List getLoadedMods() { + return sortedContainers; } - public Stream applyForEachModContainer(Function function) { + public static Stream applyForEachModContainer(Function function) { return indexedMods.values().stream().map(function); } } diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoader.java b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoader.java index b43a761f47..e8629be1bb 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoader.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoader.java @@ -5,16 +5,11 @@ package net.minecraftforge.fml; -import com.google.common.collect.ImmutableList; import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.fml.event.IModBusEvent; -import net.minecraftforge.fml.loading.FMLEnvironment; -import net.minecraftforge.fml.loading.FMLLoader; -import net.minecraftforge.fml.loading.ImmediateWindowHandler; -import net.minecraftforge.fml.loading.LoadingModList; +import net.minecraftforge.fml.loading.*; import net.minecraftforge.fml.loading.moddiscovery.InvalidModIdentifier; import net.minecraftforge.fml.loading.moddiscovery.ModFileInfo; -import net.minecraftforge.fml.loading.moddiscovery.ModInfo; import net.minecraftforge.fml.loading.progress.ProgressMeter; import net.minecraftforge.fml.loading.progress.StartupNotificationManager; import net.minecraftforge.forgespi.language.IModInfo; @@ -71,48 +66,18 @@ import static net.minecraftforge.fml.Logging.LOADING; * and completes the mod loading sequence. * */ -public class ModLoader { +public final class ModLoader { + private ModLoader() {} + private static final Logger LOGGER = LogManager.getLogger(); - private final LoadingModList loadingModList; - - private final List loadingExceptions; - private final Set erroredModInfos; - private final List loadingWarnings; - private final ModStateManager stateManager; + private static final ArrayList LOADING_EXCEPTIONS = new ArrayList<>(); + private static final ArrayList LOADING_WARNINGS = new ArrayList<>(); + private static final Consumer STATUS_CONSUMER = StartupNotificationManager.modLoaderConsumer().orElse(_ -> {}); + private static final HashSet COMPLETED_STATES = new HashSet<>(); private static boolean loadingStateValid; - private final Consumer statusConsumer = StartupNotificationManager.modLoaderConsumer().orElse(msg -> {}); - private final Set completedStates = new HashSet<>(); - private ModList modList; - - private ModLoader() { - var loadingModList = this.loadingModList = FMLLoader.getLoadingModList(); - var loadingExceptions = this.loadingExceptions = loadingModList.getErrors().stream() - .flatMap(ModLoadingException::fromEarlyException) - .collect(Collectors.toList()); - this.loadingWarnings = loadingModList.getBrokenFiles().stream() - .map(file -> new ModLoadingWarning(null, ModLoadingStage.VALIDATE, InvalidModIdentifier.identifyJarProblem(file.getFilePath()).orElse("fml.modloading.brokenfile"), file.getFileName())) - .collect(Collectors.toList()); - if (loadingExceptions.isEmpty()) { - this.erroredModInfos = Collections.emptySet(); - } else { - this.erroredModInfos = Collections.newSetFromMap(new IdentityHashMap<>()); - this.erroredModInfos.addAll(loadingExceptions.stream().map(ModLoadingException::getModInfo).toList()); - } - loadingModList.getModFiles().stream() - .filter(ModFileInfo::missingLicense) - .filter(modFileInfo -> modFileInfo.getMods().stream().noneMatch(this.erroredModInfos::contains)) //Ignore files where any other mod already encountered an error - .map(modFileInfo -> new ModLoadingException(null, ModLoadingStage.VALIDATE, "fml.modloading.missinglicense", null, modFileInfo.getFile())) - .forEach(this.loadingExceptions::add); - this.stateManager = new ModStateManager(); - CrashReportCallables.registerCrashCallable("ModLauncher", FMLLoader::getLauncherInfo); - CrashReportCallables.registerCrashCallable("ModLauncher launch target", FMLLoader::launcherHandlerName); - CrashReportCallables.registerCrashCallable("ModLauncher naming", FMLLoader::getNaming); - CrashReportCallables.registerCrashCallable("ModLauncher services", ModLoader::computeModLauncherServiceList); - CrashReportCallables.registerCrashCallable("FML Language Providers", ModLoader::computeLanguageList); - } private static String computeLanguageList() { - return "\n" + FMLLoader.getLanguageLoadingProvider() + return "\n" + LanguageLoadingProvider .applyForEach(lp -> lp.name() + '@' + lp.getClass().getPackage().getImplementationVersion()) .collect(Collectors.joining("\n\t\t", "\t\t", "")); } @@ -126,37 +91,51 @@ public class ModLoader { collect(Collectors.joining("\n\t\t","\t\t","")); } - public static ModLoader get() { - return LazyInit.INSTANCE; - } - - private static final class LazyInit { - private static final ModLoader INSTANCE = new ModLoader(); - private LazyInit() {} - } - /** * Run on the primary starting thread by ClientModLoader and ServerModLoader * @param syncExecutor An executor to run tasks on the main thread * @param parallelExecutor An executor to run tasks on a parallel loading thread pool * @param periodicTask Optional periodic task to perform on the main thread while other activities run */ - public void gatherAndInitializeMods(final ModWorkManager.DrivenExecutor syncExecutor, final Executor parallelExecutor, final Runnable periodicTask) { + public static void gatherAndInitializeMods(final ModWorkManager.DrivenExecutor syncExecutor, final Executor parallelExecutor, final Runnable periodicTask) { + var loadingExceptions = LoadingModList.getErrors().stream() + .flatMap(ModLoadingException::fromEarlyException) + .toList(); + ModLoader.LOADING_EXCEPTIONS.addAll(loadingExceptions); + LOADING_WARNINGS.addAll(LoadingModList.getBrokenFiles().stream() + .map(file -> new ModLoadingWarning(null, ModLoadingStage.VALIDATE, InvalidModIdentifier.identifyJarProblem(file.getFilePath()).orElse("fml.modloading.brokenfile"), file.getFileName())) + .toList()); + Set erroredModInfos; + if (loadingExceptions.isEmpty()) { + erroredModInfos = Collections.emptySet(); + } else { + erroredModInfos = Collections.newSetFromMap(new IdentityHashMap<>()); + erroredModInfos.addAll(loadingExceptions.stream().map(ModLoadingException::getModInfo).toList()); + } + LoadingModList.getModFiles().stream() + .filter(ModFileInfo::missingLicense) + .filter(modFileInfo -> modFileInfo.getMods().stream().noneMatch(erroredModInfos::contains)) //Ignore files where any other mod already encountered an error + .map(modFileInfo -> new ModLoadingException(null, ModLoadingStage.VALIDATE, "fml.modloading.missinglicense", null, modFileInfo.getFile())) + .forEach(LOADING_EXCEPTIONS::add); + CrashReportCallables.registerCrashCallable("ModLauncher", FMLLoader::getLauncherInfo); + CrashReportCallables.registerCrashCallable("ModLauncher launch target", FMLLoader::launcherHandlerName); + CrashReportCallables.registerCrashCallable("ModLauncher naming", FMLLoader::getNaming); + CrashReportCallables.registerCrashCallable("ModLauncher services", ModLoader::computeModLauncherServiceList); + CrashReportCallables.registerCrashCallable("FML Language Providers", ModLoader::computeLanguageList); + ForgeFeature.registerFeature("javaVersion", ForgeFeature.VersionFeatureTest.forVersionString(IModInfo.DependencySide.BOTH, System.getProperty("java.version"))); ForgeFeature.registerFeature("openGLVersion", ForgeFeature.VersionFeatureTest.forVersionString(IModInfo.DependencySide.CLIENT, ImmediateWindowHandler.getGLVersion())); loadingStateValid = true; FMLLoader.backgroundScanHandler.waitForScanToComplete(periodicTask); - final ModList modList = ModList.of(loadingModList.getModFiles().stream().map(ModFileInfo::getFile).toList(), - loadingModList.getMods()); - if (!this.loadingExceptions.isEmpty()) { - LOGGER.fatal(CORE, "Error during pre-loading phase", loadingExceptions.getFirst()); - statusConsumer.accept("ERROR DURING MOD LOADING"); - modList.setLoadedMods(Collections.emptyList()); + if (!LOADING_EXCEPTIONS.isEmpty()) { + LOGGER.fatal(CORE, "Error during pre-loading phase", LOADING_EXCEPTIONS.getFirst()); + STATUS_CONSUMER.accept("ERROR DURING MOD LOADING"); + ModList.clearLoadedMods(); loadingStateValid = false; - throw new LoadingFailedException(loadingExceptions); + throw new LoadingFailedException(LOADING_EXCEPTIONS); } var failedBounds = new ArrayList(); - for (var mod : loadingModList.getMods()) { + for (var mod : LoadingModList.getMods()) { for (var feature : mod.getForgeFeatures()) { if (!ForgeFeature.testFeature(FMLEnvironment.dist, feature)) failedBounds.add(feature); @@ -165,8 +144,8 @@ public class ModLoader { if (!failedBounds.isEmpty()) { LOGGER.fatal(CORE, "Failed to validate feature bounds for mods: {}", failedBounds); - statusConsumer.accept("ERROR DURING MOD LOADING"); - modList.setLoadedMods(Collections.emptyList()); + STATUS_CONSUMER.accept("ERROR DURING MOD LOADING"); + ModList.clearLoadedMods(); loadingStateValid = false; throw new LoadingFailedException(failedBounds.stream() .map(fb -> new ModLoadingException(fb.modInfo(), ModLoadingStage.CONSTRUCT, "fml.modloading.feature.missing", null, fb, ForgeFeature.featureValue(fb))) @@ -174,18 +153,18 @@ public class ModLoader { } final var modContainers = new HashMap(); - for (var file : loadingModList.getModFiles()) { - var containers = this.buildMods(file.getFile()); + for (var file : LoadingModList.getModFiles()) { + var containers = buildMods(file.getFile()); for (var container : containers) modContainers.put(container.getModId(), container); } - if (!loadingExceptions.isEmpty()) { - LOGGER.fatal(CORE, "Failed to initialize mod containers", loadingExceptions.getFirst()); - statusConsumer.accept("ERROR DURING MOD LOADING"); - modList.setLoadedMods(Collections.emptyList()); + if (!LOADING_EXCEPTIONS.isEmpty()) { + LOGGER.fatal(CORE, "Failed to initialize mod containers", LOADING_EXCEPTIONS.getFirst()); + STATUS_CONSUMER.accept("ERROR DURING MOD LOADING"); + ModList.clearLoadedMods(); loadingStateValid = false; - throw new LoadingFailedException(loadingExceptions); + throw new LoadingFailedException(LOADING_EXCEPTIONS); } // Gather all dependencies, so we can make sure they have finished their transition events before we fire ours @@ -208,34 +187,33 @@ public class ModLoader { } } - modList.setLoadedMods(modContainers.values().stream().toList()); - this.modList = modList; - var stateList = stateManager.getStates(ModLoadingPhase.GATHER); - var progress = StartupMessageManager.addProgressBar("Mod Gather", stateList.stream().mapToInt(mls -> mls.size().applyAsInt(this.modList)).sum()); + ModList.setLoadedMods(modContainers.values().stream().toList()); + var stateList = ModStateManager.getStates(ModLoadingPhase.GATHER); + var progress = StartupMessageManager.addProgressBar("Mod Gather", stateList.stream().mapToInt(mls -> mls.size().getAsInt()).sum()); for (IModLoadingState mls : stateList) { dispatchAndHandleError(mls, syncExecutor, parallelExecutor, periodicTask, progress); } progress.complete(); } - public void loadMods(final ModWorkManager.DrivenExecutor syncExecutor, final Executor parallelExecutor, final Runnable periodicTask) { - var stateList = stateManager.getStates(ModLoadingPhase.LOAD); - var progress = StartupMessageManager.addProgressBar("Mod Loading", stateList.stream().mapToInt(mls -> mls.size().applyAsInt(modList)).sum()); + public static void loadMods(final ModWorkManager.DrivenExecutor syncExecutor, final Executor parallelExecutor, final Runnable periodicTask) { + var stateList = ModStateManager.getStates(ModLoadingPhase.LOAD); + var progress = StartupMessageManager.addProgressBar("Mod Loading", stateList.stream().mapToInt(mls -> mls.size().getAsInt()).sum()); for (IModLoadingState mls : stateList) { dispatchAndHandleError(mls, syncExecutor, parallelExecutor, periodicTask, progress); } progress.complete(); } - public void finishMods(final ModWorkManager.DrivenExecutor syncExecutor, final Executor parallelExecutor, final Runnable periodicTask) { - var stateList = stateManager.getStates(ModLoadingPhase.COMPLETE); - var progress = StartupMessageManager.addProgressBar("Mod Complete", stateList.stream().mapToInt(mls -> mls.size().applyAsInt(modList)).sum()); + public static void finishMods(final ModWorkManager.DrivenExecutor syncExecutor, final Executor parallelExecutor, final Runnable periodicTask) { + var stateList = ModStateManager.getStates(ModLoadingPhase.COMPLETE); + var progress = StartupMessageManager.addProgressBar("Mod Complete", stateList.stream().mapToInt(mls -> mls.size().getAsInt()).sum()); for (IModLoadingState mls : stateList) { dispatchAndHandleError(mls, syncExecutor, parallelExecutor, periodicTask, progress); } var modBusGroups = Set.of( - modList.getLoadedMods().stream() + ModList.getLoadedMods().stream() .map(ModContainer::getModBusGroup) .filter(Objects::nonNull) .toArray(BusGroup[]::new) @@ -245,11 +223,11 @@ public class ModLoader { } parallelExecutor.execute(BusGroup.DEFAULT::trim); - statusConsumer.accept("Mod loading complete - %d mods loaded".formatted(this.modList.size())); + STATUS_CONSUMER.accept("Mod loading complete - %d mods loaded".formatted(ModList.size())); progress.complete(); } - private void dispatchAndHandleError(IModLoadingState state, ModWorkManager.DrivenExecutor syncExecutor, Executor parallelExecutor, final Runnable ticker, final ProgressMeter progressBar) { + private static void dispatchAndHandleError(IModLoadingState state, ModWorkManager.DrivenExecutor syncExecutor, Executor parallelExecutor, final Runnable ticker, final ProgressMeter progressBar) { if (!isLoadingStateValid()) { LOGGER.error("Cowardly refusing to process mod state change request from {}", state); return; @@ -257,25 +235,25 @@ public class ModLoader { progressBar.label(progressBar.name() + " working"); syncExecutor.drive(ticker); - var inlineRunnable = state.inlineRunnable().orElse(null); + var inlineRunnable = state.inlineRunnable(); if (inlineRunnable != null) handleInlineTransition(inlineRunnable, state, syncExecutor, ticker); - var transition = state.buildTransition(syncExecutor, parallelExecutor, progressBar).orElse(null); + var transition = state.buildTransition(syncExecutor, parallelExecutor, progressBar); if (transition != null) waitForTransition(state, syncExecutor, ticker, transition); - completedStates.add(state); + COMPLETED_STATES.add(state); } - private void handleInlineTransition(final Consumer transition, final IModLoadingState state, final ModWorkManager.DrivenExecutor syncExecutor, final Runnable ticker) { + private static void handleInlineTransition(final Runnable transition, final IModLoadingState state, final ModWorkManager.DrivenExecutor syncExecutor, final Runnable ticker) { var pb = StartupMessageManager.addProgressBar("State transition " + state.name() + " running", 0); syncExecutor.drive(ticker); - transition.accept(this.modList); + transition.run(); syncExecutor.drive(ticker); pb.complete(); syncExecutor.drive(ticker); } - private void waitForTransition(final IModLoadingState state, final ModWorkManager.DrivenExecutor syncExecutor, final Runnable ticker, final CompletableFuture transition) { + private static void waitForTransition(final IModLoadingState state, final ModWorkManager.DrivenExecutor syncExecutor, final Runnable ticker, final CompletableFuture transition) { while (!transition.isDone()) { syncExecutor.drive(ticker); } @@ -289,7 +267,7 @@ public class ModLoader { .anyMatch(obj -> !(obj instanceof ModLoadingException)); if (hasNotModLoadingEx) { LOGGER.fatal("Encountered non-modloading exceptions!", e); - statusConsumer.accept("ERROR DURING MOD LOADING"); + STATUS_CONSUMER.accept("ERROR DURING MOD LOADING"); throw e; } @@ -298,12 +276,12 @@ public class ModLoader { .map(ModLoadingException.class::cast) .toList(); LOGGER.fatal(LOADING,"Failed to complete lifecycle event {}, {} errors found", state.name(), modLoadingExceptions.size()); - statusConsumer.accept("ERROR DURING MOD LOADING"); + STATUS_CONSUMER.accept("ERROR DURING MOD LOADING"); throw new LoadingFailedException(modLoadingExceptions); } } - private List buildMods(final IModFile modFile) { + private static List buildMods(final IModFile modFile) { final Map modInfoMap = new HashMap<>(); for (var mod : modFile.getModFileInfo().getMods()) modInfoMap.put(mod.getModId(), mod); @@ -333,14 +311,14 @@ public class ModLoader { missingMods.removeAll(modIds); LOGGER.fatal(LOADING, "The following mods are missing, but have classes in the jar: {}", missingMods); - loadingExceptions.add(new ModLoadingException(null, ModLoadingStage.CONSTRUCT, "fml.modloading.missingclasses", null, modFile.getFilePath())); + LOADING_EXCEPTIONS.add(new ModLoadingException(null, ModLoadingStage.CONSTRUCT, "fml.modloading.missingclasses", null, modFile.getFilePath())); } // remove errored mod containers return containers.stream().filter(mc -> mc.modLoadingStage != ModLoadingStage.ERROR).toList(); } - private ModContainer buildModContainerFromTOML(final IModFile modFile, final Map modInfoMap, + private static ModContainer buildModContainerFromTOML(final IModFile modFile, final Map modInfoMap, final String modId, final IModLanguageProvider.IModLanguageLoader languageLoader ) { try { @@ -352,7 +330,7 @@ public class ModLoader { return languageLoader.loadMod(info, modFile.getScanResult(), FMLLoader.getGameLayer()); } catch (ModLoadingException mle) { // exceptions are caught and added to the error list for later handling - loadingExceptions.add(mle); + LOADING_EXCEPTIONS.add(mle); // return an errored container instance here, because we tried and failed building a container. return new ErroredModContainer(); } @@ -366,15 +344,8 @@ public class ModLoader { return loadingStateValid; } - /** @deprecated Use {@link #hasCompletedState(IModLoadingState)} instead */ - @Deprecated(forRemoval = true) - public boolean hasCompletedState(final String stateName) { - IModLoadingState state = stateManager.findState(stateName); - return completedStates.contains(state); - } - - public boolean hasCompletedState(IModLoadingState state) { - return completedStates.contains(state); + public static boolean hasCompletedState(IModLoadingState state) { + return COMPLETED_STATES.contains(state); } public static void runEventGenerator(Function generator) { @@ -382,7 +353,7 @@ public class ModLoader { LOGGER.error("Cowardly refusing to send event generator to a broken mod state"); return; } - for (var mod : ModList.get().getLoadedMods()) + for (var mod : ModList.getLoadedMods()) mod.acceptEvent(generator.apply(mod)); } @@ -391,7 +362,7 @@ public class ModLoader { LOGGER.error("Cowardly refusing to send event {} to a broken mod state", e.getClass().getName()); return; } - for (var mod : ModList.get().getLoadedMods()) + for (var mod : ModList.getLoadedMods()) mod.acceptEvent(e); } @@ -400,7 +371,7 @@ public class ModLoader { LOGGER.error("Cowardly refusing to send event {} to a broken mod state", e.getClass().getName()); return e; } - for (var mod : ModList.get().getLoadedMods()) + for (var mod : ModList.getLoadedMods()) mod.acceptEvent(e); return e; } @@ -418,19 +389,19 @@ public class ModLoader { LOGGER.error("Cowardly refusing to send event {} to a broken mod state", e.getClass().getName()); return; } - for (var mod : ModList.get().getLoadedMods()) { + for (var mod : ModList.getLoadedMods()) { pre.accept(mod, e); mod.acceptEvent(e); post.accept(mod, e); } } - public List getWarnings() { - return ImmutableList.copyOf(this.loadingWarnings); + public static List getWarnings() { + return List.copyOf(LOADING_WARNINGS); } - public void addWarning(ModLoadingWarning warning) { - this.loadingWarnings.add(warning); + public static void addWarning(ModLoadingWarning warning) { + LOADING_WARNINGS.add(warning); } private static boolean runningDataGen = false; diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingContext.java b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingContext.java index 32d2ed044a..48090d9bee 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingContext.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingContext.java @@ -32,24 +32,11 @@ public class ModLoadingContext { return context.get(); } - /** - * @deprecated Going to be moved to ForgeHooks for Internal use. - */ - @Deprecated(forRemoval = true, since="1.21.1") - public void setActiveContainer(final ModContainer container) { + void setActiveContainer(final ModContainer container) { this.activeContainer = container; this.languageExtension = container == null ? null : container.contextExtension.get(); } - /** - * Going to be moved to ForgeHooks for Internal use. - * @deprecated Override/Use {@link ModLoadingContext#getContainer()} - */ - @Deprecated(forRemoval = true, since="1.21.1") - public ModContainer getActiveContainer() { - return activeContainer == null ? ModList.get().getModContainerById("minecraft").orElseThrow(()->new RuntimeException("Where is minecraft???!")) : activeContainer; - } - /** * @deprecated Going to be moved to ForgeHooks for Internal use. */ @@ -58,11 +45,10 @@ public class ModLoadingContext { return activeContainer == null ? "minecraft" : activeContainer.getNamespace(); } - /** - * @return {@link ModLoadingContext#getActiveContainer()} by default. - */ public ModContainer getContainer() { - return getActiveContainer(); + return activeContainer == null + ? ModList.getModContainerById("minecraft").orElseThrow(()->new RuntimeException("Where is minecraft???!")) + : activeContainer; } /** @@ -114,8 +100,7 @@ public class ModLoadingContext { } public void registerConfig(ModConfig.Type type, IConfigSpec spec) { - if (spec.isEmpty()) - { + if (spec.isEmpty()) { // This handles the case where a mod tries to register a config, without any options configured inside it. LOGGER.debug("Attempted to register an empty config for type {} on mod {}", type, getContainer().getModId()); return; @@ -125,8 +110,7 @@ public class ModLoadingContext { } public void registerConfig(ModConfig.Type type, IConfigSpec spec, String fileName) { - if (spec.isEmpty()) - { + if (spec.isEmpty()) { // This handles the case where a mod tries to register a config, without any options configured inside it. LOGGER.debug("Attempted to register an empty config for type {} on mod {} using file name {}", type, getContainer().getModId(), fileName); return; @@ -135,7 +119,6 @@ public class ModLoadingContext { getContainer().addConfig(new ModConfig(type, spec, getContainer(), fileName)); } - @SuppressWarnings("unchecked") public T extension() { return (T)languageExtension; diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingState.java b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingState.java index 7a2ab79a3d..ed7347c61e 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingState.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingState.java @@ -6,14 +6,15 @@ package net.minecraftforge.fml; import net.minecraftforge.fml.loading.progress.ProgressMeter; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; import java.util.Objects; -import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; -import java.util.function.Consumer; import java.util.function.Function; -import java.util.function.ToIntFunction; +import java.util.function.IntSupplier; +import java.util.function.Supplier; /** * Implementation of the {@link IModLoadingState} interface. @@ -25,27 +26,26 @@ import java.util.function.ToIntFunction; * @param inlineRunnable an optional runnable, which runs before starting the transition from this state to the next * @param transition optional state transition information */ +@NullMarked public record ModLoadingState( String name, String previous, - Function message, - ToIntFunction size, + Supplier message, + IntSupplier size, ModLoadingPhase phase, - Optional> inlineRunnable, - Optional transition + @Nullable Runnable inlineRunnable, + @Nullable IModStateTransition transition ) implements IModLoadingState { @Override - public Optional> buildTransition( + public @Nullable CompletableFuture buildTransition( final Executor syncExecutor, final Executor parallelExecutor, final ProgressMeter progressBar, final Function> preSyncTask, final Function> postSyncTask ) { - var transition = this.transition.orElse(null); - return transition == null - ? Optional.empty() - : Optional.ofNullable(transition.build(name, syncExecutor, parallelExecutor, progressBar, preSyncTask, postSyncTask)); + if (transition == null) return null; + return transition.build(name, syncExecutor, parallelExecutor, progressBar, preSyncTask, postSyncTask); } /** @@ -60,7 +60,7 @@ public record ModLoadingState( */ @Deprecated(since = "1.21.3", forRemoval = true) public static ModLoadingState empty(final String name, final String previous, final ModLoadingPhase phase) { - return new ModLoadingState(name, previous, ml -> "", ml -> 0, phase, Optional.empty(), Optional.empty()); + return new ModLoadingState(name, previous, () -> "", () -> 0, phase, null, null); } /** @@ -94,7 +94,7 @@ public record ModLoadingState( */ @Deprecated(since = "1.21.3", forRemoval = true) public static ModLoadingState withTransition(final String name, final String previous, - final Function message, final ModLoadingPhase phase, + final Supplier message, final ModLoadingPhase phase, final IModStateTransition transition) { return of(name, phase).after(previous).message(message).withTransition(transition); } @@ -113,7 +113,7 @@ public record ModLoadingState( */ @Deprecated(since = "1.21.3", forRemoval = true) public static ModLoadingState withInline(final String name, final String previous, final ModLoadingPhase phase, - final Consumer inline) { + final Runnable inline) { return of(name, phase).after(previous).withInline(inline); } @@ -126,23 +126,23 @@ public record ModLoadingState( return o instanceof ModLoadingState that && this.phase == that.phase && this.name.equals(that.name) - && Objects.equals(this.previous, that.previous); + && this.previous.equals(that.previous); } @Override public int hashCode() { int result = phase.hashCode(); result = 31 * result + name.hashCode(); - result = 31 * result + Objects.hashCode(previous); + result = 31 * result + previous.hashCode(); return result; } - public static class Builder { + public static final class Builder { private final String name; private final ModLoadingPhase phase; - private String after; - private Function message = null; - private ToIntFunction size = null; + private String after = ""; + private @Nullable Supplier message = null; + private @Nullable IntSupplier size = null; private Builder(final String name, final ModLoadingPhase phase) { this.name = name; @@ -155,28 +155,28 @@ public record ModLoadingState( return this; } - public Builder message(final String value) { return message(ml -> value); } - public Builder message(final Function value) { + public Builder message(final String value) { return message(() -> value); } + public Builder message(final Supplier value) { this.message = value; return this; } - public Builder size(final int value) { return size(ml -> value); } - public Builder size(final ToIntFunction value) { + public Builder size(final int value) { return size(() -> value); } + public Builder size(final IntSupplier value) { this.size = value; return this; } public ModLoadingState empty() { - return new ModLoadingState(name, after, message != null ? message : ml -> "", size != null ? size : ml -> 0, phase, Optional.empty(), Optional.empty()); + return new ModLoadingState(name, after, message != null ? message : () -> "", size != null ? size : () -> 0, phase, null, null); } public ModLoadingState withTransition(final IModStateTransition transition) { - return new ModLoadingState(name, after, message != null ? message : ml -> "Processing transition " + name, size != null ? size : ModList::size, phase, Optional.empty(), Optional.of(transition)); + return new ModLoadingState(name, after, message != null ? message : () -> "Processing transition " + name, size != null ? size : ModList::size, phase, null, transition); } - public ModLoadingState withInline(final Consumer inline) { - return new ModLoadingState(name, after, message != null ? message : ml -> "Processing work " + name, size != null ? size : ml -> 0, phase, Optional.of(inline), Optional.empty()); + public ModLoadingState withInline(final Runnable inline) { + return new ModLoadingState(name, after, message != null ? message : () -> "Processing work " + name, size != null ? size : () -> 0, phase, inline, null); } } -} \ No newline at end of file +} diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingWarning.java b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingWarning.java index 27fe31da27..4877e4d92c 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingWarning.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/ModLoadingWarning.java @@ -5,41 +5,27 @@ package net.minecraftforge.fml; -import com.google.common.collect.Streams; import net.minecraftforge.forgespi.language.IModInfo; -import java.util.Arrays; import java.util.List; import java.util.stream.Stream; -public class ModLoadingWarning { - /** - * Mod Info for mod with warning - */ - private final IModInfo modInfo; - /** - * The stage where this warning was encountered - */ - private final ModLoadingStage warningStage; - - /** - * I18N message to use for display - */ - private final String i18nMessage; - - /** - * Context for message display - */ - private final List context; - +/** + * @param modInfo Mod info for mod with warning + * @param warningStage The stage where this warning was encountered + * @param i18nMessage I18N message to use for display + * @param context Context for message display + */ +public record ModLoadingWarning(IModInfo modInfo, ModLoadingStage warningStage, String i18nMessage, List context) { public ModLoadingWarning(final IModInfo modInfo, final ModLoadingStage warningStage, final String i18nMessage, Object... context) { - this.modInfo = modInfo; - this.warningStage = warningStage; - this.i18nMessage = i18nMessage; - this.context = Arrays.asList(context); + this(modInfo, warningStage, i18nMessage, List.of(context)); + } + + public ModLoadingWarning { + context = List.copyOf(context); } public String formatToString() { - return Bindings.getMessageParser().get().parseMessage(i18nMessage, Streams.concat(Stream.of(modInfo, warningStage), context.stream()).toArray()); + return Bindings.getMessageParser().get().parseMessage(i18nMessage, Stream.concat(Stream.of(modInfo, warningStage), context.stream()).toArray()); } } diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/ModStateManager.java b/fmlcore/src/main/java/net/minecraftforge/fml/ModStateManager.java index 266a8874b0..a260652266 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/ModStateManager.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/ModStateManager.java @@ -15,18 +15,19 @@ import java.util.function.Function; import java.util.stream.Collectors; @SuppressWarnings("UnstableApiUsage") -public class ModStateManager { - private final EnumMap> stateMap; +public final class ModStateManager { + private ModStateManager() {} + private static final EnumMap> stateMap; - public ModStateManager() { + static { final var sp = ServiceLoader.load(FMLLoader.getGameLayer(), IModStateProvider.class); - this.stateMap = ServiceLoaderUtils.streamWithErrorHandling(sp, sce->{}) + stateMap = ServiceLoaderUtils.streamWithErrorHandling(sp, _ -> {}) .map(IModStateProvider::getAllStates) .flatMap(List::stream) - .collect(Collectors.groupingBy(IModLoadingState::phase, ()->new EnumMap<>(ModLoadingPhase.class), Collectors.toUnmodifiableList())); + .collect(Collectors.groupingBy(IModLoadingState::phase, () -> new EnumMap<>(ModLoadingPhase.class), Collectors.toUnmodifiableList())); } - public List getStates(final ModLoadingPhase phase) { + public static List getStates(final ModLoadingPhase phase) { var nodes = stateMap.get(phase); var lookup = nodes.stream().collect(Collectors.toMap(IModLoadingState::name, Function.identity())); @@ -40,7 +41,7 @@ public class ModStateManager { return TopologicalSort.topologicalSort(graph, Comparator.comparingInt(nodes::indexOf)).stream().filter(st->st!=dummy).toList(); } - public IModLoadingState findState(final String stateName) { + public static IModLoadingState findState(final String stateName) { var result = stateMap.values() .stream() .flatMap(List::stream) diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/ModStateTransitionHelper.java b/fmlcore/src/main/java/net/minecraftforge/fml/ModStateTransitionHelper.java index baea870f26..704a707113 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/ModStateTransitionHelper.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/ModStateTransitionHelper.java @@ -24,7 +24,7 @@ import net.minecraftforge.fml.event.IModBusEvent; import net.minecraftforge.fml.loading.progress.ProgressMeter; @ApiStatus.Internal -class ModStateTransitionHelper { +final class ModStateTransitionHelper { static final IModStateTransition NOOP = new NoopTransition(); record NoopTransition() implements IModStateTransition { @Override @@ -62,7 +62,30 @@ class ModStateTransitionHelper { } } - record FutureResult(V value, Throwable exception){} + /// Same as [#completableFutureFromExceptionList(List)] but specialised for a single future + static CompletionStage completableFutureFromException(FutureResult t) { + if (t.exception() == null) { + return CompletableFuture.completedFuture(null); + } else { + var exception = t.exception(); + CompletableFuture cf = new CompletableFuture<>(); + RuntimeException accumulator = new RuntimeException(); + cf.completeExceptionally(accumulator); + if (exception instanceof CompletionException) { + exception = exception.getCause(); + } + if (exception.getSuppressed().length != 0) { + for (Throwable throwable : exception.getSuppressed()) { + accumulator.addSuppressed(throwable); + } + } else { + accumulator.addSuppressed(exception); + } + return cf; + } + } + + record FutureResult(V value, Throwable exception) {} static CompletableFuture>> gather(Collection> futures) { var list = new ArrayList>(futures.size()); @@ -79,22 +102,14 @@ class ModStateTransitionHelper { return CompletableFuture.allOf(results).handle((r, th)->null).thenApply(res -> list); } - private static void addCompletableFutureTaskForModDispatch( - final IModStateTransition transition, + private static CompletableFuture addCompletableFutureTaskForModDispatch( final Executor executor, - final List> completableFutures, final ProgressMeter progressBar, final EventGenerator eventGenerator, final BiFunction nextState ) { - - @SuppressWarnings("removal") - var preDispatchHook = getHook(transition.preDispatchHook(), executor, eventGenerator); - if (preDispatchHook != null) - completableFutures.add(preDispatchHook); - var modFutures = new LinkedHashMap>(); - for (var mod : ModList.get().getLoadedMods()) { + for (var mod : ModList.getLoadedMods()) { CompletableFuture parent = null; if (mod.dependencies.isEmpty()) { @@ -129,20 +144,7 @@ class ModStateTransitionHelper { modFutures.put(mod.getModId(), dispatch); } - var dispatch = gather(modFutures.values()).thenComposeAsync(ModStateTransitionHelper::completableFutureFromExceptionList, executor); - completableFutures.add(dispatch); - - @SuppressWarnings("removal") - var postDispatchHook = getHook(transition.preDispatchHook(), executor, eventGenerator); - if (postDispatchHook != null) - completableFutures.add(postDispatchHook); - } - - private static CompletableFuture getHook(BiFunction, CompletableFuture> hook, Executor executor, EventGenerator eventGenerator) { - if (hook == null || hook == IModStateTransition.NULL_HOOK) return null; - @SuppressWarnings("unchecked") - var hookTyped = (BiFunction, CompletableFuture>)hook; - return hookTyped.apply(executor, eventGenerator); + return gather(modFutures.values()).thenComposeAsync(ModStateTransitionHelper::completableFutureFromExceptionList, executor); } static CompletableFuture build( @@ -154,31 +156,25 @@ class ModStateTransitionHelper { final Function> preSyncTask, final Function> postSyncTask ) { - List> futures = new ArrayList<>(); + CompletableFuture future; final var executor = transition.threadSelector().apply(syncExecutor, parallelExecutor); - @SuppressWarnings({ "removal", "unchecked" }) - var events = transition.eventFunctionStream().get().map(f -> (EventGenerator)f).toList(); - for (int x = 0; x < events.size(); x++) { - var gen = events.get(x); - BiFunction state = x == events.size() - 1 - ? transition.nextModLoadingStage() - : ModLoadingStage::currentState; - addCompletableFutureTaskForModDispatch(transition, executor, futures, progressBar, gen, state); + final CompletableFuture preSyncTaskCF = preSyncTask.apply(syncExecutor); + CompletableFuture postEventDispatchCF = preSyncTaskCF + .thenRunAsync(() -> progressBar.label(progressBar.name() + ": dispatching " + name), parallelExecutor); + + var eventGenerator = transition.eventFunction(); + if (eventGenerator != null) { + BiFunction state = transition.nextModLoadingStage(); + future = addCompletableFutureTaskForModDispatch(executor, progressBar, eventGenerator, state); + + final CompletableFuture eventDispatchCF = future.handle(FutureResult::new) + .thenCompose(ModStateTransitionHelper::completableFutureFromException); + postEventDispatchCF = postEventDispatchCF.thenComposeAsync(_ -> eventDispatchCF, parallelExecutor); } - final CompletableFuture preSyncTaskCF = preSyncTask.apply(syncExecutor); - final CompletableFuture eventDispatchCF = gather(futures).thenCompose(ModStateTransitionHelper::completableFutureFromExceptionList); - final CompletableFuture postEventDispatchCF = preSyncTaskCF - .thenApplyAsync(n -> { - progressBar.label(progressBar.name() + ": dispatching " + name); - return null; - }, parallelExecutor) - .thenComposeAsync(n -> eventDispatchCF, parallelExecutor) - .thenApply(r -> { - postSyncTask.apply(syncExecutor); - return null; - }); + postEventDispatchCF = postEventDispatchCF.thenRun(() -> postSyncTask.apply(syncExecutor)); + return transition.finalActivityGenerator().apply(syncExecutor, postEventDispatchCF); } } diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/ModWorkManager.java b/fmlcore/src/main/java/net/minecraftforge/fml/ModWorkManager.java index cf37948b42..90789aafd6 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/ModWorkManager.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/ModWorkManager.java @@ -14,25 +14,12 @@ import java.util.concurrent.locks.LockSupport; import static net.minecraftforge.fml.Logging.LOADING; -public class ModWorkManager { +public final class ModWorkManager { private static final Logger LOGGER = LogManager.getLogger(); private static final long PARK_TIME = TimeUnit.MILLISECONDS.toNanos(1); - public interface DrivenExecutor extends Executor { - boolean selfDriven(); - boolean driveOne(); - - default void drive(Runnable ticker) { - if (!selfDriven()) { - ticker.run(); - while (true) { - if (!driveOne()) break; - } - } else { - // park for a bit so other threads can schedule - LockSupport.parkNanos(PARK_TIME); - } - } + public sealed interface DrivenExecutor extends Executor { + void drive(Runnable ticker); } private record SyncExecutor(ConcurrentLinkedDeque tasks) implements DrivenExecutor { @@ -40,8 +27,7 @@ public class ModWorkManager { this(new ConcurrentLinkedDeque<>()); } - @Override - public boolean driveOne() { + private boolean driveOne() { final Runnable task = tasks.pollFirst(); if (task != null) { task.run(); @@ -50,31 +36,30 @@ public class ModWorkManager { } @Override - public boolean selfDriven() { - return false; + public void execute(final Runnable command) { + tasks.addLast(command); } @Override - public void execute(final Runnable command) { - tasks.addLast(command); + public void drive(Runnable ticker) { + ticker.run(); + while (true) { + if (!driveOne()) break; + } } } private record WrappingExecutor(Executor wrapped) implements DrivenExecutor { - @Override - public boolean selfDriven() { - return true; - } - - @Override - public boolean driveOne() { - return false; - } - @Override public void execute(final Runnable command) { wrapped.execute(command); } + + @Override + public void drive(Runnable ticker) { + // Park for a bit so other threads can schedule + LockSupport.parkNanos(PARK_TIME); + } } private static final SyncExecutor syncExecutor = new SyncExecutor(); diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/OptionalMod.java b/fmlcore/src/main/java/net/minecraftforge/fml/OptionalMod.java index 31a686f3b4..2683b37988 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/OptionalMod.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/OptionalMod.java @@ -43,7 +43,7 @@ public final class OptionalMod private T getValue() { if (!searched) { - this.value = ModList.get().getModObjectById(this.modId).orElse(null); + this.value = ModList.getModObjectById(this.modId).orElse(null); searched = true; } return this.value; diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/VersionChecker.java b/fmlcore/src/main/java/net/minecraftforge/fml/VersionChecker.java index 783ee8909b..88423d2955 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/VersionChecker.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/VersionChecker.java @@ -93,8 +93,8 @@ public class VersionChecker { return; } - var mc = ModList.get().getModContainerById("minecraft"); - var forge = ModList.get().getModContainerById("forge"); + var mc = ModList.getModContainerById("minecraft"); + var forge = ModList.getModContainerById("forge"); this.mcVersion = mc.get().getModInfo().getVersion().toString(); this.agent = "Java-http-client/" + System.getProperty("java.version") @@ -223,7 +223,7 @@ public class VersionChecker { // Gather a list of mods that have opted in to this update system by providing a URL. private static List gatherMods() { List ret = new LinkedList<>(); - for (IModInfo info : ModList.get().getMods()) { + for (IModInfo info : ModList.getMods()) { if (info.getUpdateURL().isPresent()) ret.add(info); } diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/config/ConfigTracker.java b/fmlcore/src/main/java/net/minecraftforge/fml/config/ConfigTracker.java index fd33c85d43..a7a63db614 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/config/ConfigTracker.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/config/ConfigTracker.java @@ -8,8 +8,7 @@ package net.minecraftforge.fml.config; import com.electronwill.nightconfig.core.CommentedConfig; import com.electronwill.nightconfig.core.file.CommentedFileConfig; import com.mojang.logging.LogUtils; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.DistExecutor; +import net.minecraftforge.fml.loading.FMLEnvironment; import net.minecraftforge.fml.loading.FMLPaths; import org.slf4j.Logger; import org.slf4j.Marker; @@ -19,57 +18,54 @@ import java.nio.file.Path; import java.util.*; import java.util.concurrent.ConcurrentHashMap; -public class ConfigTracker { +public final class ConfigTracker { + private ConfigTracker() {} + private static final Logger LOGGER = LogUtils.getLogger(); static final Marker CONFIG = MarkerFactory.getMarker("CONFIG"); - public static final ConfigTracker INSTANCE = new ConfigTracker(); - private final ConcurrentHashMap fileMap; - private final EnumMap> configSets; - private final ConcurrentHashMap> configsByMod; + private static final ConcurrentHashMap FILE_MAP = new ConcurrentHashMap<>(); + private static final Map> CONFIG_SETS = Map.of( + ModConfig.Type.CLIENT, Collections.synchronizedSet(new LinkedHashSet<>()), + ModConfig.Type.COMMON, Collections.synchronizedSet(new LinkedHashSet<>()), + ModConfig.Type.SERVER, Collections.synchronizedSet(new LinkedHashSet<>()) + ); + private static final ConcurrentHashMap> CONFIGS_BY_MOD = new ConcurrentHashMap<>(); - private ConfigTracker() { - this.fileMap = new ConcurrentHashMap<>(); - this.configSets = new EnumMap<>(ModConfig.Type.class); - this.configsByMod = new ConcurrentHashMap<>(); - this.configSets.put(ModConfig.Type.CLIENT, Collections.synchronizedSet(new LinkedHashSet<>())); - this.configSets.put(ModConfig.Type.COMMON, Collections.synchronizedSet(new LinkedHashSet<>())); -// this.configSets.put(ModConfig.Type.PLAYER, new ConcurrentSkipListSet<>()); - this.configSets.put(ModConfig.Type.SERVER, Collections.synchronizedSet(new LinkedHashSet<>())); - } - - void trackConfig(final ModConfig config) { - if (this.fileMap.containsKey(config.getFileName())) { - LOGGER.error(CONFIG,"Detected config file conflict {} between {} and {}", config.getFileName(), this.fileMap.get(config.getFileName()).getModId(), config.getModId()); + static void trackConfig(final ModConfig config) { + if (FILE_MAP.containsKey(config.getFileName())) { + LOGGER.error(CONFIG,"Detected config file conflict {} between {} and {}", config.getFileName(), FILE_MAP.get(config.getFileName()).getModId(), config.getModId()); throw new RuntimeException("Config conflict detected!"); } - this.fileMap.put(config.getFileName(), config); - this.configSets.get(config.getType()).add(config); - this.configsByMod.computeIfAbsent(config.getModId(), (k)->new EnumMap<>(ModConfig.Type.class)).put(config.getType(), config); + FILE_MAP.put(config.getFileName(), config); + CONFIG_SETS.get(config.getType()).add(config); + CONFIGS_BY_MOD.computeIfAbsent(config.getModId(), _ -> new EnumMap<>(ModConfig.Type.class)).put(config.getType(), config); LOGGER.debug(CONFIG, "Config file {} for {} tracking", config.getFileName(), config.getModId()); } - public void loadConfigs(ModConfig.Type type, Path configBasePath) { + public static void loadConfigs(ModConfig.Type type, Path configBasePath) { LOGGER.debug(CONFIG, "Loading configs type {}", type); - for (ModConfig config : this.configSets.get(type)) { + for (ModConfig config : CONFIG_SETS.get(type)) { openConfig(config, configBasePath); } } // TODO: [FML] This is only called for the server (outside of forceUnload) // rethink config implementation for eventual FML rewrite - public void unloadConfigs(ModConfig.Type type, Path configBasePath) { + public static void unloadConfigs(ModConfig.Type type, Path configBasePath) { LOGGER.debug(CONFIG, "Unloading configs type {}", type); - for (ModConfig config : this.configSets.get(type)) { + for (ModConfig config : CONFIG_SETS.get(type)) { closeConfig(config, configBasePath); } ConfigFileTypeHandler.get(type).stopWatcher(); } // If there is a better way to do this, please tell me. Because this is FUCKED - public void forceUnload() { + public static void forceUnload() { // This is how ModStateProvider handles loading configs. So we're doing the same but with unloadConfigs instead - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> this.unloadConfigs(ModConfig.Type.CLIENT, FMLPaths.CONFIGDIR.get())); - this.unloadConfigs(ModConfig.Type.COMMON, FMLPaths.CONFIGDIR.get()); + if (FMLEnvironment.dist.isClient()) + unloadConfigs(ModConfig.Type.CLIENT, FMLPaths.CONFIGDIR.get()); + + unloadConfigs(ModConfig.Type.COMMON, FMLPaths.CONFIGDIR.get()); // just in case server watcher is still alive somehow... ConfigFileTypeHandler.get(ModConfig.Type.SERVER).stopWatcher(); @@ -96,8 +92,8 @@ public class ConfigTracker { } } - public void loadDefaultServerConfigs() { - configSets.get(ModConfig.Type.SERVER).forEach(modConfig -> { + public static void loadDefaultServerConfigs() { + CONFIG_SETS.get(ModConfig.Type.SERVER).forEach(modConfig -> { final CommentedConfig commentedConfig = CommentedConfig.inMemory(); modConfig.getSpec().correct(commentedConfig); modConfig.setConfigData(commentedConfig); @@ -105,16 +101,16 @@ public class ConfigTracker { }); } - public String getConfigFileName(String modId, ModConfig.Type type) { - return Optional.ofNullable(configsByMod.getOrDefault(modId, Collections.emptyMap()).getOrDefault(type, null)). + public static String getConfigFileName(String modId, ModConfig.Type type) { + return Optional.ofNullable(CONFIGS_BY_MOD.getOrDefault(modId, Collections.emptyMap()).getOrDefault(type, null)). map(ModConfig::getFullPath).map(Object::toString).orElse(null); } - public Map> configSets() { - return configSets; + public static Map> configSets() { + return CONFIG_SETS; } - public ConcurrentHashMap fileMap() { - return fileMap; + public static ConcurrentHashMap fileMap() { + return FILE_MAP; } } diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/config/IConfigEvent.java b/fmlcore/src/main/java/net/minecraftforge/fml/config/IConfigEvent.java index 21e2060416..5db712359c 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/config/IConfigEvent.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/config/IConfigEvent.java @@ -13,6 +13,7 @@ import java.util.function.Function; import org.jetbrains.annotations.Nullable; public interface IConfigEvent { + // TODO: [FML] Get rid of this indirection somehow record ConfigConfig(Function loading, Function reloading, @Nullable Function unloading) {} ConfigConfig CONFIGCONFIG = Bindings.getConfigConfiguration().get(); diff --git a/fmlcore/src/main/java/net/minecraftforge/fml/config/ModConfig.java b/fmlcore/src/main/java/net/minecraftforge/fml/config/ModConfig.java index 7179e41120..dcce18700b 100644 --- a/fmlcore/src/main/java/net/minecraftforge/fml/config/ModConfig.java +++ b/fmlcore/src/main/java/net/minecraftforge/fml/config/ModConfig.java @@ -31,7 +31,7 @@ public class ModConfig this.fileName = fileName; this.container = container; this.configHandler = ConfigFileTypeHandler.get(type); - ConfigTracker.INSTANCE.trackConfig(this); + ConfigTracker.trackConfig(this); } public ModConfig(final Type type, final IConfigSpec spec, final ModContainer activeContainer) { @@ -40,8 +40,9 @@ public class ModConfig private static String defaultConfigName(Type type, String modId) { // config file name would be "forge-client.toml" and "forge-server.toml" - return String.format(Locale.ROOT, "%s-%s.toml", modId, type.extension()); + return modId + '-' + type.extension() + ".toml"; } + public Type getType() { return type; } diff --git a/fmlearlydisplay/src/main/java/net/minecraftforge/fml/earlydisplay/DisplayWindow.java b/fmlearlydisplay/src/main/java/net/minecraftforge/fml/earlydisplay/DisplayWindow.java index a79300826b..5c6c8dc6c7 100644 --- a/fmlearlydisplay/src/main/java/net/minecraftforge/fml/earlydisplay/DisplayWindow.java +++ b/fmlearlydisplay/src/main/java/net/minecraftforge/fml/earlydisplay/DisplayWindow.java @@ -46,8 +46,6 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.function.IntConsumer; -import java.util.function.IntSupplier; -import java.util.function.LongSupplier; import java.util.function.Supplier; import java.util.stream.Collector; import java.util.stream.Collectors; @@ -70,7 +68,7 @@ import static org.lwjgl.opengl.GL32C.*; * Based on the prior ClientVisualization, with some personal touches. */ public class DisplayWindow implements ImmediateWindowProvider { - private static final int[][] GL_VERSIONS = new int[][] {{4,6}, {4,5}, {4,4}, {4,3}, {4,2}, {4,1}, {4,0}, {3,3}, {3,2}}; + private static final int[][] GL_VERSIONS = new int[][] {{4,6}, {4,5}, {4,4}, {4,3}, {4,2}, {4,1}, {4,0}, {3,3}}; private static final Logger LOGGER = LoggerFactory.getLogger("EARLYDISPLAY"); private final AtomicBoolean animationTimerTrigger = new AtomicBoolean(true); @@ -314,17 +312,18 @@ public class DisplayWindow implements ImmediateWindowProvider { LOGGER.error("ERROR DISPLAY\n"+msgBuilder); // we show the display on a new dedicated thread Executors.newSingleThreadExecutor().submit(()-> { - var res = TinyFileDialogs.tinyfd_messageBox("Minecraft: Forge", msgBuilder.toString(), "yesno", "error", false); - if (res) { + var res = TinyFileDialogs.tinyfd_messageBox("Minecraft: Forge", msgBuilder.toString(), "yesno", "error", 0); + if (res != 0) { try { Desktop.getDesktop().browse(URI.create(ERROR_URL)); } catch (IOException ioe) { - TinyFileDialogs.tinyfd_messageBox("Minecraft: Forge", "Sadly, we couldn't open your browser.\nVisit " + ERROR_URL, "ok", "error", false); + TinyFileDialogs.tinyfd_messageBox("Minecraft: Forge", "Sadly, we couldn't open your browser.\nVisit " + ERROR_URL, "ok", "error", 0); } } System.exit(1); }); } + /** * Called to initialize the window when preparing for the Render Thread. * @@ -529,7 +528,7 @@ public class DisplayWindow implements ImmediateWindowProvider { * * @return the Window we own. */ - public long setupMinecraftWindow(final IntSupplier width, final IntSupplier height, final Supplier title, final LongSupplier monitorSupplier) { + public long setupMinecraftWindow(final int width, final int height, final String title, final long monitorSupplier, final Supplier backend) { // wait for the window to actually be initialized try { this.initializationFuture.get(30, TimeUnit.SECONDS); @@ -549,11 +548,11 @@ public class DisplayWindow implements ImmediateWindowProvider { var renderlockticket = false; do { try { - renderlockticket = renderLock.tryAcquire(100, TimeUnit.MILLISECONDS); - if (++tries > 9) { - Thread.dumpStack(); - crashElegantly("We seem to be having trouble handing off the window, tried for 1 second"); - } + renderlockticket = renderLock.tryAcquire(100, TimeUnit.MILLISECONDS); + if (++tries > 9) { + Thread.dumpStack(); + crashElegantly("We seem to be having trouble handing off the window, tried for 1 second"); + } } catch (InterruptedException e) { Thread.interrupted(); } @@ -563,7 +562,7 @@ public class DisplayWindow implements ImmediateWindowProvider { glfwMakeContextCurrent(window); // Set the title to what the game wants - glfwSetWindowTitle(window, title.get()); + glfwSetWindowTitle(window, title); glfwSwapInterval(0); // Clean up our hooks glfwSetFramebufferSizeCallback(window, null).free(); diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/common/asm/RuntimeEnumExtender.java b/fmlloader/src/main/java/net/minecraftforge/fml/common/asm/RuntimeEnumExtender.java index 78e0d15df2..e861ed43f2 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/common/asm/RuntimeEnumExtender.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/common/asm/RuntimeEnumExtender.java @@ -49,7 +49,7 @@ public class RuntimeEnumExtender implements ILaunchPluginService { private static final class LazyInit { private LazyInit() {} - private static final boolean ANY_MODS = LoadingModList.get().getMods().size() > 2; // 2: forge, minecraft + private static final boolean ANY_MODS = LoadingModList.getMods().size() > 2; // 2: forge, minecraft } @Override diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLLoader.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLLoader.java index c12fa896d5..69fad86619 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLLoader.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/FMLLoader.java @@ -30,13 +30,11 @@ import java.util.function.BiFunction; import static net.minecraftforge.fml.loading.LogMarkers.CORE; import static net.minecraftforge.fml.loading.LogMarkers.SCAN; -public class FMLLoader { +public final class FMLLoader { private static final Logger LOGGER = LogUtils.getLogger(); private static AccessTransformerService accessTransformer; - private static LanguageLoadingProvider languageLoadingProvider; private static Dist dist; private static String naming; - private static LoadingModList loadingModList; private static RuntimeDistCleaner runtimeDistCleaner; private static Path gamePath; private static final VersionInfo versionInfo = VersionInfo.detect(); @@ -151,16 +149,11 @@ public class FMLLoader { public static List completeScan(IModuleLayerManager layerManager) { moduleLayerManager = layerManager; - languageLoadingProvider = new LanguageLoadingProvider(); + LanguageLoadingProvider.reload(); backgroundScanHandler = modValidator.stage2Validation(); - loadingModList = backgroundScanHandler.getLoadingModList(); return List.of(modValidator.getModResources()); } - public static LanguageLoadingProvider getLanguageLoadingProvider() { - return languageLoadingProvider; - } - public static CommonLaunchHandler getLaunchHandler() { return commonLaunchHandler; } @@ -180,10 +173,6 @@ public class FMLLoader { progressWindowTick.run(); } - public static LoadingModList getLoadingModList() { - return loadingModList; - } - public static Path getGamePath() { return gamePath; } diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/ImmediateWindowHandler.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/ImmediateWindowHandler.java index 15cf3a3617..d6a8bff4e1 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/ImmediateWindowHandler.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/ImmediateWindowHandler.java @@ -51,8 +51,8 @@ public class ImmediateWindowHandler { earlyProgress.label("Bootstrapping Minecraft"); } - public static long setupMinecraftWindow(final IntSupplier width, final IntSupplier height, final Supplier title, final LongSupplier monitor) { - return provider.setupMinecraftWindow(width, height, title, monitor); + public static long setupMinecraftWindow(final int width, final int height, final String title, final long monitor, final Supplier backend) { + return provider.setupMinecraftWindow(width, height, title, monitor, backend); } public static boolean positionWindow(Optional monitor,IntConsumer widthSetter, IntConsumer heightSetter, IntConsumer xSetter, IntConsumer ySetter) { @@ -104,9 +104,9 @@ public class ImmediateWindowHandler { } @Override - public long setupMinecraftWindow(final IntSupplier width, final IntSupplier height, final Supplier title, final LongSupplier monitor) { + public long setupMinecraftWindow(final int width, final int height, final String title, final long monitor, final Supplier backend) { try { - var longsupplier = (LongSupplier)NV_HANDOFF.invoke(null, width, height, title, monitor); + var longsupplier = (LongSupplier)NV_HANDOFF.invoke(null, width, height, title, monitor, backend); return longsupplier.getAsLong(); } catch (Throwable e) { throw new IllegalStateException("How did you get here?", e); diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/ImmediateWindowProvider.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/ImmediateWindowProvider.java index d1b8c74058..59a9c744e9 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/ImmediateWindowProvider.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/ImmediateWindowProvider.java @@ -8,8 +8,6 @@ package net.minecraftforge.fml.loading; import java.util.Optional; import java.util.function.Consumer; import java.util.function.IntConsumer; -import java.util.function.IntSupplier; -import java.util.function.LongSupplier; import java.util.function.Supplier; /** @@ -66,7 +64,7 @@ public interface ImmediateWindowProvider { * @param monitor This is the monitor it should appear on. * @return The window id */ - long setupMinecraftWindow(final IntSupplier width, final IntSupplier height, final Supplier title, final LongSupplier monitor); + long setupMinecraftWindow(final int width, final int height, final String title, final long monitor, final Supplier backend); /** * This is called after window handoff to allow us to tell Mojang about our window's position. This might give a diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/LanguageLoadingProvider.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/LanguageLoadingProvider.java index 6ec18db624..92b17454a5 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/LanguageLoadingProvider.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/LanguageLoadingProvider.java @@ -18,7 +18,6 @@ import org.slf4j.Logger; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.ServiceConfigurationError; import java.util.ServiceLoader; import java.util.function.Consumer; @@ -28,43 +27,36 @@ import java.util.stream.Stream; import static net.minecraftforge.fml.loading.LogMarkers.CORE; import static net.minecraftforge.fml.loading.LogMarkers.LOADING; -public class LanguageLoadingProvider { - public void forEach(Consumer consumer) { +public final class LanguageLoadingProvider { + public static void forEach(Consumer consumer) { providers.forEach(consumer); } - public Stream applyForEach(Function function) { + public static Stream applyForEach(Function function) { return providers.stream().map(function); } - public void reload() { + public static void reload() { loadLanguageProviders(); } - /** This doesn't actually do anything with the argument, so just call reload(). Not sure when cpw broke that. */ - @Deprecated(forRemoval = true, since = "1.20.2") - public void addAdditionalLanguages(List modFiles) { - reload(); - } - /*==========================================================================* - * INTERNAL SHIT * + * INTERNAL * *==========================================================================*/ private static final Logger LOGGER = LogUtils.getLogger(); - private final ServiceLoader serviceLoader; - private final List providers = new ArrayList<>(); - private final Map providersByName = new HashMap<>(); + private static final ServiceLoader serviceLoader; + private static final ArrayList providers = new ArrayList<>(); + private static final HashMap providersByName = new HashMap<>(); private static final DefaultArtifactVersion IN_DEV = new DefaultArtifactVersion("0.0-dev"); private record Wrapper(ArtifactVersion version, IModLanguageProvider service) {} - LanguageLoadingProvider() { + static { var sl = Launcher.INSTANCE.environment().findModuleLayerManager().flatMap(lm -> lm.getLayer(Layer.PLUGIN)).orElseThrow(); serviceLoader = ServiceLoader.load(sl, IModLanguageProvider.class); - loadLanguageProviders(); } - private void loadLanguageProviders() { + private static void loadLanguageProviders() { providers.clear(); providersByName.clear(); @@ -97,7 +89,7 @@ public class LanguageLoadingProvider { } } - public IModLanguageProvider findLanguage(ModFile mod, String language, VersionRange versionRange) { + public static IModLanguageProvider findLanguage(ModFile mod, String language, VersionRange versionRange) { var consumer = mod.getFileName(); var wrapper = providersByName.get(language); diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/LoadingModList.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/LoadingModList.java index 2d7692e3b4..c0ac46d0b7 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/LoadingModList.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/LoadingModList.java @@ -5,118 +5,46 @@ package net.minecraftforge.fml.loading; -import net.minecraftforge.fml.loading.EarlyLoadingException.ExceptionData; -import net.minecraftforge.fml.loading.moddiscovery.BackgroundScanHandler; -import net.minecraftforge.fml.loading.moddiscovery.ModFile; import net.minecraftforge.fml.loading.moddiscovery.ModFileInfo; import net.minecraftforge.fml.loading.moddiscovery.ModInfo; import net.minecraftforge.forgespi.locating.IModFile; +import org.jetbrains.annotations.Nullable; import java.nio.file.Files; import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Collection; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import org.slf4j.Logger; - -import com.mojang.logging.LogUtils; - -/** - * Master list of all mods in the loading context. This class cannot refer outside the - * loading package - */ -public class LoadingModList { - private static final Logger LOGGER = LogUtils.getLogger(); - private static LoadingModList INSTANCE; - private final List modFiles; - private final List sortedList; - private final Map fileById; - private final List preLoadErrors; - private List brokenFiles; - - private LoadingModList(final List modFiles, final List sortedList) { - this.modFiles = modFiles.stream() - .map(ModFile::getModFileInfo) - .map(ModFileInfo.class::cast) - .toList(); - this.sortedList = sortedList.stream().toList(); - this.fileById = this.modFiles.stream() - .map(ModFileInfo::getMods) - .flatMap(Collection::stream) - .map(ModInfo.class::cast) - .collect(Collectors.toMap(ModInfo::getModId, ModInfo::getOwningFile)); - this.preLoadErrors = new ArrayList<>(); +/// Master list of all mods in the loading context +public sealed interface LoadingModList permits LoadingModListImpl { + static ModFileInfo getModFileById(String modId) { + return get().fileById().get(modId); } - public static LoadingModList of(List modFiles, List sortedList, final EarlyLoadingException earlyLoadingException) { - INSTANCE = new LoadingModList(modFiles, sortedList); - if (earlyLoadingException != null) - INSTANCE.preLoadErrors.add(earlyLoadingException); - return INSTANCE; + static List getModFiles() { + return get().getModFiles(); } - public static LoadingModList get() { - return INSTANCE; + static List getMods() { + return get().getMods(); } - public void addAccessTransformers() { - var errors = new ArrayList(); - - for (ModFileInfo modFile : modFiles) { - ModFile mod = modFile.getFile(); - for (var at : mod.getAccessTransformers()) { - if (!Files.exists(at)) { - var message = "Invalid mod file: " + modFile.getFile().getFileName() + ". Missing Access Transformer: " + at; - errors.add(new ExceptionData(message)); - LOGGER.error(message); - } else - FMLLoader.addAccessTransformer(at, mod); - } - } - - if (!errors.isEmpty()) - preLoadErrors.add(new EarlyLoadingException("Invalid Access Transformers", null, errors)); - } - - public void addForScanning(BackgroundScanHandler backgroundScanHandler) { - backgroundScanHandler.setLoadingModList(this); - modFiles.stream() - .map(ModFileInfo::getFile) - .forEach(backgroundScanHandler::submitForScanning); - } - - public List getModFiles() { - return modFiles; - } - - public Path findResource(final String className) { - for (ModFileInfo mf : modFiles) { - final Path resource = mf.getFile().findResource(className); + static @Nullable Path findResource(String className) { + for (ModFileInfo modFileInfo : get().getModFiles()) { + Path resource = modFileInfo.getFile().findResource(className); if (Files.exists(resource)) return resource; } return null; } - public ModFileInfo getModFileById(String modid) { - return this.fileById.get(modid); + static List getErrors() { + return get().getErrors(); } - public List getMods() { - return this.sortedList; + static List getBrokenFiles() { + return get().getBrokenFiles(); } - public List getErrors() { - return preLoadErrors; - } - - public void setBrokenFiles(final List brokenFiles) { - this.brokenFiles = brokenFiles; - } - - public List getBrokenFiles() { - return this.brokenFiles; + private static LoadingModListImpl get() { + return LoadingModListImpl.get(); } } diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/LoadingModListImpl.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/LoadingModListImpl.java new file mode 100644 index 0000000000..f7473ee15e --- /dev/null +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/LoadingModListImpl.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) Forge Development LLC and contributors + * SPDX-License-Identifier: LGPL-2.1-only + */ + +package net.minecraftforge.fml.loading; + +import net.minecraftforge.fml.loading.EarlyLoadingException.ExceptionData; +import net.minecraftforge.fml.loading.moddiscovery.ModFile; +import net.minecraftforge.fml.loading.moddiscovery.ModFileInfo; +import net.minecraftforge.fml.loading.moddiscovery.ModInfo; +import net.minecraftforge.forgespi.locating.IModFile; + +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import org.slf4j.Logger; + +import com.mojang.logging.LogUtils; + +/** + * Master list of all mods in the loading context. This class cannot refer outside the + * loading package + */ +record LoadingModListImpl( + List getModFiles, + List getMods, + Map fileById, + ArrayList getErrors, + ArrayList getBrokenFiles +) implements LoadingModList { + private static final Logger LOGGER = LogUtils.getLogger(); + private static ModSorter.State temp; + + LoadingModListImpl(List modFiles, List sortedList) { + var modFileInfos = modFiles.stream() + .map(ModFile::getModFileInfo) + .map(ModFileInfo.class::cast) + .toList(); + sortedList = sortedList.stream().toList(); + var fileById = modFileInfos.stream() + .map(ModFileInfo::getMods) + .flatMap(Collection::stream) + .map(ModInfo.class::cast) + .collect(Collectors.toUnmodifiableMap(ModInfo::getModId, ModInfo::getOwningFile)); + this(modFileInfos, sortedList, fileById, new ArrayList<>(), new ArrayList<>()); + } + + static LoadingModListImpl init(ModSorter.State modSorterState, EarlyLoadingException earlyLoadingException) { + temp = modSorterState; + var instance = get(); + if (earlyLoadingException != null) + instance.getErrors.add(earlyLoadingException); + temp = null; + instance.addAccessTransformers(); + return instance; + } + + static LoadingModListImpl get() { + final class LazyInit { + private LazyInit() {} + private static final LoadingModListImpl INSTANCE + = new LoadingModListImpl(LoadingModListImpl.temp.files(), LoadingModListImpl.temp.mods()); + } + return LazyInit.INSTANCE; + } + + private void addAccessTransformers() { + var errors = new ArrayList(); + + for (ModFileInfo modFile : getModFiles) { + ModFile mod = modFile.getFile(); + for (var at : mod.getAccessTransformers()) { + if (!Files.exists(at)) { + var message = "Invalid mod file: " + modFile.getFile().getFileName() + ". Missing Access Transformer: " + at; + errors.add(new ExceptionData(message)); + LOGGER.error(message); + } else + FMLLoader.addAccessTransformer(at, mod); + } + } + + if (!errors.isEmpty()) + getErrors.add(new EarlyLoadingException("Invalid Access Transformers", null, errors)); + } +} diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/ModSorter.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/ModSorter.java index 3b2cbd6cb4..697978d18d 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/ModSorter.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/ModSorter.java @@ -33,10 +33,10 @@ import java.util.stream.Stream; import static net.minecraftforge.fml.loading.LogMarkers.LOADING; -public class ModSorter { +public final class ModSorter { private static final Logger LOGGER = LogUtils.getLogger(); - private record State(List files, List mods) {} + record State(List files, List mods) {} private ModSorter() {} @@ -52,7 +52,7 @@ public class ModSorter { // Note this will never actually throw an error because the duplicate checks are done in ModDiscovererer before we get to this phase // So all this is really doing is wasting time. // But i'm leaving it here until I rewrite all of cpw's mod loading code because its such a clusterfuck. - return LoadingModList.of(systemMods.files(), systemMods.mods(), e); + return LoadingModListImpl.init(systemMods, e); } var named = new HashMap(); @@ -66,15 +66,15 @@ public class ModSorter { // if we miss one or the other, we abort now if (!failedList.isEmpty()) { - return LoadingModList.of(systemMods.files(), systemMods.mods(), new EarlyLoadingException("failure to validate mod list", null, failedList)); + return LoadingModListImpl.init(systemMods, new EarlyLoadingException("failure to validate mod list", null, failedList)); } else { // Otherwise, lets try and sort the modlist and proceed try { var sorted = sort(modFiles, named); - return LoadingModList.of(sorted.files(), sorted.mods(), null); + return LoadingModListImpl.init(sorted, null); } catch (EarlyLoadingException e) { // The only exception that can happen here is a cyclic exception, but fall back to system mods so we can display the nice screen. - return LoadingModList.of(systemMods.files(), systemMods.mods(), e); + return LoadingModListImpl.init(systemMods, e); } } } diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/RuntimeDistCleaner.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/RuntimeDistCleaner.java index 8f7412d5b1..947fa45b93 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/RuntimeDistCleaner.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/RuntimeDistCleaner.java @@ -33,7 +33,6 @@ public final class RuntimeDistCleaner implements ILaunchPluginService { private static String DIST; private static final String ONLYIN = Type.getDescriptor(OnlyIn.class); private static final String ONLYINS = Type.getDescriptor(OnlyIns.class); - private static final String MOD = "Lnet/minecraftforge/fml/common/Mod;"; @Override public String name() { @@ -45,11 +44,17 @@ public final class RuntimeDistCleaner implements ILaunchPluginService { @Override public EnumSet handlesClass(Type classType, boolean isEmpty) { - // TODO: [FML][RuntimeDistCleaner] In 26.1, only return YAY for MC classes on mod dev server if (isEmpty) return NAY; String internalName = classType.getInternalName(); + + // Only apply to MC classes when on a dedicated server in a production environment + if (FMLEnvironment.production) + return FMLEnvironment.dist.isDedicatedServer() && isMinecraftClass(internalName) ? YAY : NAY; + + // For dev time it's a bit trickier so that we can throw exceptions when someone uses @OnlyIn in their mod code, + // so that it's more obvious that the behaviour they're expecting won't work in production anymore if (internalName.startsWith("net/minecraftforge/")) return NAY; @@ -57,7 +62,7 @@ public final class RuntimeDistCleaner implements ILaunchPluginService { if (FMLEnvironment.dist.isClient() && isMinecraftClass(internalName)) return NAY; - return YAY; + return YAY; // mod classes might have @OnlyIn, so parse them in dev to find out and throw if they do } @Override @@ -66,29 +71,14 @@ public final class RuntimeDistCleaner implements ILaunchPluginService { var annotations = unpack(classNode.visibleAnnotations); var isNonMinecraftClass = !isMinecraftClass(classNode.name); - final class LazyInit { - private LazyInit() {} - private static final boolean CAN_EXPLODE = !FMLEnvironment.production && "21.6".equals(FMLLoader.versionInfo().mcVersion()); - } if (remove(annotations, DIST)) { LOGGER.error(DISTXFORM, "Attempted to load class {} for invalid dist {}", classNode.name, DIST); throw new RuntimeException("Attempted to load class " + classNode.name + " for invalid dist " + DIST); } - if (!annotations.isEmpty()) { - if (isNonMinecraftClass) { - if (LazyInit.CAN_EXPLODE) - throw new UnsupportedOperationException("Mod class " + classNode.name + " is annotated with @OnlyIn, this is no longer supported as it slowed down startup times"); - else - LOGGER.warn(DISTXFORM, "Class {} is annotated with @OnlyIn, this is deprecated and won't work in a future MC release.", classNode.name); - } - - if (!FMLEnvironment.production && hasModAnnotation(classNode.visibleAnnotations)) { - LOGGER.error(DISTXFORM, "Attempted to load class {} with @Mod and @OnlyIn/@OnlyIns annotations", classNode.name); - throw new RuntimeException("Found @OnlyIn on @Mod class " + classNode.name + " - this is not allowed as it causes crashes. Remove the OnlyIn and consider setting clientSideOnly=true in the root of your mods.toml instead"); - } - } + if (isNonMinecraftClass && !annotations.isEmpty()) + throw new UnsupportedOperationException("Mod class " + classNode.name + " is annotated with @OnlyIn, this is no longer supported as it slowed down startup times"); if (classNode.interfaces != null && !classNode.interfaces.isEmpty()) { for (var ann : annotations) { @@ -121,12 +111,8 @@ public final class RuntimeDistCleaner implements ILaunchPluginService { itr.remove(); changed = true; - if (isNonMinecraftClass) { - if (LazyInit.CAN_EXPLODE) - throw new UnsupportedOperationException("Field " + field.name + " in mod class " + classNode.name + " is annotated with @OnlyIn, this is no longer supported as it slowed down startup times"); - else - LOGGER.warn(DISTXFORM, "Field {} in class {} is annotated with @OnlyIn, this is deprecated and won't work in a future MC release.", field.name, classNode.name); - } + if (isNonMinecraftClass) + throw new UnsupportedOperationException("Field " + field.name + " in mod class " + classNode.name + " is annotated with @OnlyIn, this is no longer supported as it slowed down startup times"); } } @@ -139,12 +125,8 @@ public final class RuntimeDistCleaner implements ILaunchPluginService { lambdaGatherer.accept(method); changed = true; - if (isNonMinecraftClass) { - if (LazyInit.CAN_EXPLODE) - throw new UnsupportedOperationException("Method " + method.name + " in mod class " + classNode.name + " is annotated with @OnlyIn, this is no longer supported as it slowed down startup times"); - else - LOGGER.warn(DISTXFORM, "Method {} in class {} is annotated with @OnlyIn, this is deprecated and won't work in a future MC release.", method.name, classNode.name); - } + if (isNonMinecraftClass) + throw new UnsupportedOperationException("Method " + method.name + " in mod class " + classNode.name + " is annotated with @OnlyIn, this is no longer supported as it slowed down startup times"); } } @@ -225,18 +207,6 @@ public final class RuntimeDistCleaner implements ILaunchPluginService { return false; } - private static boolean hasModAnnotation(final List anns) { - if (anns == null || anns.isEmpty()) - return false; - - for (var ann : anns) { - if (ann.desc.equals(MOD)) - return true; - } - - return false; - } - private static boolean isMinecraftClass(final String internalName) { return internalName.startsWith("net/minecraft/") || internalName.startsWith("com/mojang/"); } @@ -250,7 +220,7 @@ public final class RuntimeDistCleaner implements ILaunchPluginService { }; } - private static class LambdaGatherer extends MethodVisitor { + private static final class LambdaGatherer extends MethodVisitor { private static final Handle META_FACTORY = new Handle(Opcodes.H_INVOKESTATIC, "java/lang/invoke/LambdaMetafactory", "metafactory", "(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;", diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/StringSubstitutor.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/StringSubstitutor.java index 21c3e625f8..ba6a549bda 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/StringSubstitutor.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/StringSubstitutor.java @@ -12,6 +12,7 @@ import java.util.Map; import org.apache.commons.lang3.text.StrLookup; import org.apache.commons.lang3.text.StrSubstitutor; +// TODO: [FML] Remove this @SuppressWarnings("deprecation") public class StringSubstitutor { private static final Map GLOBALS = Map.of( diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/UniqueModListBuilder.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/UniqueModListBuilder.java index 3e15d68bd7..dfd08a7e27 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/UniqueModListBuilder.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/UniqueModListBuilder.java @@ -115,19 +115,22 @@ public final class UniqueModListBuilder { } private static ArtifactVersion getVersion(final ModFile mf) { - if (mf.getModFileInfo() == null || mf.getModInfos() == null || mf.getModInfos().isEmpty()) { + List modInfos; + if (mf.getModFileInfo() == null || (modInfos = mf.getModInfos()) == null || modInfos.isEmpty()) { return mf.getJarVersion(); } - return mf.getModInfos().getFirst().getVersion(); + return modInfos.getFirst().getVersion(); } private static String getModId(ModFile modFile) { - if (modFile.getModFileInfo() == null || modFile.getModFileInfo().getMods().isEmpty()) { + var modFileInfo = modFile.getModFileInfo(); + List mods; + if (modFileInfo == null || (mods = modFileInfo.getMods()).isEmpty()) { return modFile.getSecureJar().name(); } - return modFile.getModFileInfo().getMods().getFirst().getModId(); + return mods.getFirst().getModId(); } public record UniqueModListData(List modFiles, Map> modFilesByFirstId) {} diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/VersionSupportMatrix.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/VersionSupportMatrix.java index d13935a811..3435993791 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/VersionSupportMatrix.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/VersionSupportMatrix.java @@ -32,15 +32,6 @@ public class VersionSupportMatrix { } } - /** - * @deprecated Use {@link #testVersionSupportMatrix(VersionRange, String, String)} instead, unwrapping your BiPredicate. - */ - @Deprecated(forRemoval = true, since = "1.21.1") - public static boolean testVersionSupportMatrix(VersionRange declaredRange, String lookupId, String type, BiPredicate standardLookup) { - if (standardLookup.test(lookupId, declaredRange)) return true; - return testVersionSupportMatrix(declaredRange, lookupId, type); - } - public static boolean testVersionSupportMatrix(VersionRange declaredRange, String lookupId, String type) { if (OVERRIDE_VERSIONS.isEmpty()) return false; List custom = OVERRIDE_VERSIONS.get(type + "." + lookupId); diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/BackgroundScanHandler.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/BackgroundScanHandler.java index a42a501904..b795a82033 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/BackgroundScanHandler.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/BackgroundScanHandler.java @@ -17,8 +17,7 @@ import java.time.Instant; import java.util.List; import java.util.concurrent.*; -public class BackgroundScanHandler -{ +public final class BackgroundScanHandler { private enum ScanStatus { NOT_STARTED, RUNNING, @@ -33,7 +32,6 @@ public class BackgroundScanHandler private final ExecutorService modContentScanner; private final List modFiles; private ScanStatus status; - private LoadingModList loadingModList; public BackgroundScanHandler(final List modFiles) { this.modFiles = modFiles; @@ -69,16 +67,6 @@ public class BackgroundScanHandler } } - public void setLoadingModList(LoadingModList loadingModList) - { - this.loadingModList = loadingModList; - } - - public LoadingModList getLoadingModList() - { - return loadingModList; - } - public void waitForScanToComplete(final Runnable ticker) { boolean timeoutActive = System.getProperty("fml.disableScanTimeout") == null; Instant deadline = Instant.now().plus(Duration.ofMinutes(10)); diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ClasspathLocator.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ClasspathLocator.java index cba72c99e7..e3e352c8d1 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ClasspathLocator.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ClasspathLocator.java @@ -45,7 +45,7 @@ public final class ClasspathLocator extends AbstractModProvider implements IModL // Find 'minecraft' during dev time this is also Forge. So skip it. // Can return null for dedicated server as Minecraft isn't on the classpath // On the client it doesn't matter as it's the vanilla jar so wouldnt have mods.toml in it. - var minecraft = getPathFromResource(cl, "net/minecraft/obfuscate/DontObfuscate.class"); + var minecraft = getPathFromResource(cl, "net/minecraft/world/item/Item.class"); var claimed = new HashSet(); var tomls = getUrls(cl, MODS_TOML); diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModDiscoverer.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModDiscoverer.java index 27227b053b..6d720e8140 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModDiscoverer.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModDiscoverer.java @@ -41,9 +41,10 @@ public final class ModDiscoverer { @SuppressWarnings("removal") public static ModValidator discoverMods(Map arguments) { - Launcher.INSTANCE.environment().computePropertyIfAbsent(Environment.Keys.MODDIRECTORYFACTORY.get(), v->ModsFolderLocator::new); - Launcher.INSTANCE.environment().computePropertyIfAbsent(Environment.Keys.PROGRESSMESSAGE.get(), v-> StartupNotificationManager.locatorConsumer().orElseGet(()-> s->{})); - final var moduleLayerManager = Launcher.INSTANCE.environment().findModuleLayerManager().orElseThrow(); + var env = Launcher.INSTANCE.environment(); + env.computePropertyIfAbsent(Environment.Keys.MODDIRECTORYFACTORY.get(), _ -> ModsFolderLocator::new); + env.computePropertyIfAbsent(Environment.Keys.PROGRESSMESSAGE.get(), _ -> StartupNotificationManager.locatorConsumer().orElse(_ -> {})); + final var moduleLayerManager = env.findModuleLayerManager().orElseThrow(); ServiceLoader modLocators = ServiceLoader.load(moduleLayerManager.getLayer(IModuleLayerManager.Layer.SERVICE).orElseThrow(), IModLocator.class); ServiceLoader dependencyLocators = ServiceLoader.load(moduleLayerManager.getLayer(IModuleLayerManager.Layer.SERVICE).orElseThrow(), IDependencyLocator.class); List modLocatorList = ServiceLoaderUtils.streamWithErrorHandling(modLocators, sce -> LOGGER.error("Failed to load mod locator list", sce)).toList(); diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFile.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFile.java index 5cd62ae2ae..e9a8cfc597 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFile.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFile.java @@ -9,6 +9,7 @@ import com.google.common.collect.ImmutableMap; import com.mojang.logging.LogUtils; import cpw.mods.jarhandling.SecureJar; import net.minecraftforge.fml.loading.FMLLoader; +import net.minecraftforge.fml.loading.LanguageLoadingProvider; import net.minecraftforge.fml.loading.LogMarkers; import net.minecraftforge.forgespi.language.IModFileInfo; import net.minecraftforge.forgespi.language.IModInfo; @@ -48,8 +49,7 @@ public class ModFile implements IModFile { private final IModFileInfo modFileInfo; private ModFileScanData fileModFileScanData; private CompletableFuture futureScanResult; - private Path accessTransformer; - private List accessTransformers = Collections.emptyList(); + private List accessTransformers = List.of(); static final Attributes.Name TYPE = new Attributes.Name("FMLModType"); private SecureJar.Status securityStatus; @@ -92,11 +92,6 @@ public class ModFile implements IModFile { return modFileInfo.getMods(); } - @Deprecated(forRemoval = true, since = "1.21.11") - public Optional getAccessTransformer() { - return Optional.ofNullable(accessTransformer); - } - public List getAccessTransformers() { return this.accessTransformers; } @@ -111,7 +106,6 @@ public class ModFile implements IModFile { if (cfg == null) { var path = findResource("META-INF", "accesstransformer.cfg"); if (Files.exists(path)) { - this.accessTransformer = path; this.accessTransformers = List.of(path); } } else if (!cfg.isEmpty()) { @@ -181,9 +175,8 @@ public class ModFile implements IModFile { public void identifyLanguage() { var lst = new ArrayList(this.modFileInfo.requiredLanguageLoaders().size()); - var services = FMLLoader.getLanguageLoadingProvider(); for (var spec : this.modFileInfo.requiredLanguageLoaders()) { - var service = services.findLanguage(this, spec.languageName(), spec.acceptedVersions()); + var service = LanguageLoadingProvider.findLanguage(this, spec.languageName(), spec.acceptedVersions()); lst.add(service); } this.loaders = List.copyOf(lst); diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModValidator.java b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModValidator.java index a000f5d680..dd616250b8 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModValidator.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModValidator.java @@ -31,7 +31,6 @@ public class ModValidator { private final List candidatePlugins; private final List candidateMods; private final List gameLibraries; - private LoadingModList loadingModList; private final List brokenFiles = new ArrayList<>(); private final List discoveryErrorData; @@ -87,7 +86,7 @@ public class ModValidator { // If any detectable error happens during the sorting process {missing deps, duplicates, // This helps prevent coremods/mixins from screwing up us displaying the error screens that the sorting/validation is trying to display. // This won't fix them all as they are still loaded and will still apply but it might help - for (var info : this.loadingModList.getModFiles()) + for (var info : LoadingModList.getModFiles()) mods.add(info.getFile().getSecureJar()); // Add any game libraries, this *may* be duplicates, depending on the state of the sorting. But until I get around to re-writing @@ -124,11 +123,12 @@ public class ModValidator { var allErrors = new ArrayList<>(errors); allErrors.addAll(this.discoveryErrorData); - loadingModList = ModSorter.sort(candidateMods, allErrors); - loadingModList.addAccessTransformers(); - loadingModList.setBrokenFiles(brokenFiles); - BackgroundScanHandler backgroundScanHandler = new BackgroundScanHandler(candidateMods); - loadingModList.addForScanning(backgroundScanHandler); + ModSorter.sort(candidateMods, allErrors); + LoadingModList.getBrokenFiles().addAll(brokenFiles); + var backgroundScanHandler = new BackgroundScanHandler(candidateMods); + LoadingModList.getModFiles().stream() + .map(ModFileInfo::getFile) + .forEach(backgroundScanHandler::submitForScanning); return backgroundScanHandler; } } diff --git a/forge-transformers/src/main/resources/coremods/finalize_spawn_targets.json b/forge-transformers/src/main/resources/coremods/finalize_spawn_targets.json index 29d45372ac..8355662f9a 100644 --- a/forge-transformers/src/main/resources/coremods/finalize_spawn_targets.json +++ b/forge-transformers/src/main/resources/coremods/finalize_spawn_targets.json @@ -100,7 +100,7 @@ { "class": "net/minecraft/world/entity/npc/villager/Villager", "methods": [ - "getBreedOffspring(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/entity/AgeableMob;)Lnet/minecraft/world/entity/npc/villager/Villager;" + ] }, { diff --git a/gradle.properties b/gradle.properties index 7190663170..7ef188b37a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,12 +4,12 @@ org.gradle.jvmargs=-Xmx6G org.gradle.daemon=false org.gradle.parallel=true -JAVA_VERSION=21 -MC_VERSION=1.21.11 -MC_NEXT_VERSION=1.22 -MCP_VERSION=20251223.124241 +JAVA_VERSION=25 +MC_VERSION=26.1 +MC_NEXT_VERSION=26.2 +MCP_VERSION=20260324.123823 MAPPING_CHANNEL=official -MAPPING_VERSION=1.21.11 +MAPPING_VERSION=26.1 # Set to true before the first build of a new MC version, so we don't do compatibility checks CHECK_COMPATIBILITY=false diff --git a/javafmllanguage/src/main/java/net/minecraftforge/fml/javafmlmod/AutomaticEventSubscriber.java b/javafmllanguage/src/main/java/net/minecraftforge/fml/javafmlmod/AutomaticEventSubscriber.java index 1e98c1acbb..5743a70a51 100644 --- a/javafmllanguage/src/main/java/net/minecraftforge/fml/javafmlmod/AutomaticEventSubscriber.java +++ b/javafmllanguage/src/main/java/net/minecraftforge/fml/javafmlmod/AutomaticEventSubscriber.java @@ -6,7 +6,6 @@ package net.minecraftforge.fml.javafmlmod; import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.eventbus.api.bus.CancellableEventBus; import net.minecraftforge.eventbus.api.bus.EventBus; @@ -52,7 +51,6 @@ public final class AutomaticEventSubscriber { private static final Logger LOGGER = LogManager.getLogger(); private static final Type AUTO_SUBSCRIBER = Type.getType(EventBusSubscriber.class); private static final Type MOD_TYPE = Type.getType(Mod.class); - private static final Type ONLY_IN_TYPE = Type.getType(OnlyIn.class); private static final List DEFAULT_SIDES = List.of(new EnumData(null, "CLIENT"), new EnumData(null, "DEDICATED_SERVER")); private static final EnumData DEFAULT_BUS = new EnumData(null, "BOTH"); @@ -64,20 +62,11 @@ public final class AutomaticEventSubscriber { .filter(data -> AUTO_SUBSCRIBER.equals(data.annotationType())) .toList(); - var onlyIns = FMLEnvironment.production ? Collections.emptySet() : scanData.getAnnotations().stream() - .filter(data -> ONLY_IN_TYPE.equals(data.annotationType())) - .map(data -> data.clazz().getClassName()) - .collect(Collectors.toSet()); - var modids = scanData.getAnnotations().stream() .filter(data -> MOD_TYPE.equals(data.annotationType())) .collect(Collectors.toMap(a -> a.clazz().getClassName(), a -> (String)a.annotationData().get("value"))); for (var data : targets) { - if (!FMLEnvironment.production && onlyIns.contains(data.clazz().getClassName())) { - throw new RuntimeException("Found @OnlyIn on @EventBusSubscriber class " + data.clazz().getClassName() + " - this is not allowed as it causes crashes. Remove the OnlyIn and set value=Dist.CLIENT in the EventBusSubscriber annotation instead"); - } - var modId = modids.getOrDefault(data.clazz().getClassName(), mod.getModId()); modId = value(data, "modid", modId); diff --git a/mdk/build.gradle b/mdk/build.gradle index 00ccccfa10..6864f526bc 100644 --- a/mdk/build.gradle +++ b/mdk/build.gradle @@ -12,8 +12,8 @@ plugins { version = '1.0.0' group = 'com.example.examplemod' -// Mojang ships Java 21 to end users in 1.20.5+, so your mod should target Java 21. -java.toolchain.languageVersion = JavaLanguageVersion.of(21) +// Mojang ships Java 25 to end users in 26.1+, so your mod should target Java 25. +java.toolchain.languageVersion = JavaLanguageVersion.of(25) // Include generated resources sourceSets.main.resources { srcDir 'src/generated/resources' } diff --git a/patches/minecraft/com/mojang/blaze3d/opengl/GlCommandEncoder.java.patch b/patches/minecraft/com/mojang/blaze3d/opengl/GlCommandEncoder.java.patch index acb6d73e19..2c728bacba 100644 --- a/patches/minecraft/com/mojang/blaze3d/opengl/GlCommandEncoder.java.patch +++ b/patches/minecraft/com/mojang/blaze3d/opengl/GlCommandEncoder.java.patch @@ -1,12 +1,12 @@ --- a/com/mojang/blaze3d/opengl/GlCommandEncoder.java +++ b/com/mojang/blaze3d/opengl/GlCommandEncoder.java -@@ -133,6 +_,9 @@ - GlStateManager._colorMask(true, true, true, true); - GlStateManager._clear(16384); - GlStateManager._glFramebufferTexture2D(36160, 36064, 3553, 0, 0); -+ // Forge: if using stencil, clear it as well (3553 = GlConst.GL_TEXTURE_2D) -+ if (p_394273_.isStencilEnabled()) -+ GlStateManager._glFramebufferTexture2D(GlConst.GL_FRAMEBUFFER, org.lwjgl.opengl.GL30.GL_STENCIL_ATTACHMENT, GlConst.GL_TEXTURE_2D, 0, 0); - GlStateManager._glBindFramebuffer(36160, 0); - } +@@ -111,6 +_,9 @@ + GlStateManager._colorMask(15); + GlStateManager._clear(16384); + GlStateManager._glFramebufferTexture2D(36160, 36064, 3553, 0, 0); ++ // Forge: if using stencil, clear it as well (3553 = GlConst.GL_TEXTURE_2D) ++ if (colorTexture.isStencilEnabled()) ++ GlStateManager._glFramebufferTexture2D(GlConst.GL_FRAMEBUFFER, org.lwjgl.opengl.GL30.GL_STENCIL_ATTACHMENT, GlConst.GL_TEXTURE_2D, 0, 0); + GlStateManager._glBindFramebuffer(36160, 0); } + diff --git a/patches/minecraft/com/mojang/blaze3d/opengl/GlConst.java.patch b/patches/minecraft/com/mojang/blaze3d/opengl/GlConst.java.patch new file mode 100644 index 0000000000..e025fc1df7 --- /dev/null +++ b/patches/minecraft/com/mojang/blaze3d/opengl/GlConst.java.patch @@ -0,0 +1,35 @@ +--- a/com/mojang/blaze3d/opengl/GlConst.java ++++ b/com/mojang/blaze3d/opengl/GlConst.java +@@ -249,6 +_,10 @@ + } + + public static int toGlInternalId(final TextureFormat textureFormat) { ++ return toGlInternalId(textureFormat, false); ++ } ++ public static int toGlInternalId(final TextureFormat textureFormat, final boolean stencil) { ++ if (stencil && textureFormat.hasDepthAspect()) return org.lwjgl.opengl.GL30.GL_DEPTH32F_STENCIL8; + return switch (textureFormat) { + case RGBA8 -> 32856; + case RED8 -> 33321; +@@ -258,6 +_,10 @@ + } + + public static int toGlExternalId(final TextureFormat textureFormat) { ++ return toGlExternalId(textureFormat, false); ++ } ++ public static int toGlExternalId(final TextureFormat textureFormat, final boolean stencil) { ++ if (stencil && textureFormat.hasDepthAspect()) return org.lwjgl.opengl.GL30.GL_DEPTH_STENCIL; + return switch (textureFormat) { + case RGBA8 -> 6408; + case RED8 -> 6403; +@@ -267,6 +_,10 @@ + } + + public static int toGlType(final TextureFormat textureFormat) { ++ return toGlType(textureFormat, false); ++ } ++ public static int toGlType(final TextureFormat textureFormat, boolean stencil) { ++ if (stencil && textureFormat.hasDepthAspect()) return org.lwjgl.opengl.GL30.GL_FLOAT_32_UNSIGNED_INT_24_8_REV; + return switch (textureFormat) { + case RGBA8 -> 5121; + case RED8 -> 5121; diff --git a/patches/minecraft/com/mojang/blaze3d/opengl/GlDebug.java.patch b/patches/minecraft/com/mojang/blaze3d/opengl/GlDebug.java.patch index 3b6b49a1d1..a284b9ecd6 100644 --- a/patches/minecraft/com/mojang/blaze3d/opengl/GlDebug.java.patch +++ b/patches/minecraft/com/mojang/blaze3d/opengl/GlDebug.java.patch @@ -1,6 +1,6 @@ --- a/com/mojang/blaze3d/opengl/GlDebug.java +++ b/com/mojang/blaze3d/opengl/GlDebug.java -@@ -24,6 +_,14 @@ +@@ -22,6 +_,14 @@ @OnlyIn(Dist.CLIENT) public class GlDebug { @@ -15,7 +15,7 @@ private static final Logger LOGGER = LogUtils.getLogger(); private static final int CIRCULAR_LOG_SIZE = 10; private final Queue MESSAGE_BUFFER = EvictingQueue.create(10); -@@ -105,6 +_,8 @@ +@@ -103,6 +_,8 @@ } LOGGER.info("OpenGL debug message: {}", gldebug$logentry); @@ -24,11 +24,21 @@ } public List getLastOpenGlDebugMessages() { -@@ -120,6 +_,7 @@ - } +@@ -126,7 +_,7 @@ + GlDebug gldebug1 = new GlDebug(); + enabledExtensions.add("GL_KHR_debug"); + GL11.glEnable(37600); +- if (debugSynchronousGlLogs) { ++ if (debugSynchronousGlLogs | PRINT_STACKTRACE_ON_ERROR) { + GL11.glEnable(33346); + } + +@@ -140,7 +_,7 @@ + } else if (glcapabilities.GL_ARB_debug_output && GlDevice.USE_GL_ARB_debug_output) { + GlDebug gldebug = new GlDebug(); + enabledExtensions.add("GL_ARB_debug_output"); +- if (debugSynchronousGlLogs) { ++ if (debugSynchronousGlLogs | PRINT_STACKTRACE_ON_ERROR) { + GL11.glEnable(33346); + } - public static @Nullable GlDebug enableDebugCallback(int p_394351_, boolean p_393026_, Set p_393339_) { -+ p_393026_ |= PRINT_STACKTRACE_ON_ERROR; - if (p_394351_ <= 0) { - return null; - } else { diff --git a/patches/minecraft/com/mojang/blaze3d/opengl/GlDevice.java.patch b/patches/minecraft/com/mojang/blaze3d/opengl/GlDevice.java.patch index 90fc76c760..9882980d67 100644 --- a/patches/minecraft/com/mojang/blaze3d/opengl/GlDevice.java.patch +++ b/patches/minecraft/com/mojang/blaze3d/opengl/GlDevice.java.patch @@ -1,74 +1,54 @@ --- a/com/mojang/blaze3d/opengl/GlDevice.java +++ b/com/mojang/blaze3d/opengl/GlDevice.java -@@ -124,8 +_,15 @@ - int p_407582_, - int p_408928_ +@@ -129,7 +_,12 @@ + final int depthOrLayers, + final int mipLevels ) { -+ return createTexture(p_397830_, p_394481_, p_394839_, p_391831_, p_395609_, p_407582_, p_408928_, false); +- return this.createTexture(this.debugLabels.exists() && label != null ? label.get() : null, usage, format, width, height, depthOrLayers, mipLevels); ++ return this.createTexture(label, usage, format, width, height, depthOrLayers, mipLevels, false); + } + + @Override -+ public GpuTexture createTexture( -+ @Nullable Supplier p_397830_, int p_394481_, TextureFormat p_394839_, int p_391831_, int p_395609_, int p_407582_, int p_408928_, boolean stencil -+ ) { - return this.createTexture( -- this.debugLabels.exists() && p_397830_ != null ? p_397830_.get() : null, p_394481_, p_394839_, p_391831_, p_395609_, p_407582_, p_408928_ -+ this.debugLabels.exists() && p_397830_ != null ? p_397830_.get() : null, p_394481_, p_394839_, p_391831_, p_395609_, p_407582_, p_408928_, stencil - ); ++ public GpuTexture createTexture(final @Nullable Supplier label, @GpuTexture.Usage final int usage, final TextureFormat format, final int width, final int height, final int depthOrLayers, final int mipLevels, final boolean stencil ) { ++ return this.createTexture(this.debugLabels.exists() && label != null ? label.get() : null, usage, format, width, height, depthOrLayers, mipLevels, stencil); } -@@ -133,6 +_,15 @@ - public GpuTexture createTexture( - @Nullable String p_394142_, @GpuTexture.Usage int p_395535_, TextureFormat p_394951_, int p_393944_, int p_392329_, int p_408015_, int p_406483_ + @Override +@@ -142,6 +_,11 @@ + final int depthOrLayers, + final int mipLevels ) { -+ return createTexture(p_394142_, p_395535_, p_394951_, p_393944_, p_392329_, p_408015_, p_406483_, false); ++ return this.createTexture(label, usage, format, width, height, depthOrLayers, mipLevels, false); + } + + @Override -+ public GpuTexture createTexture( -+ @Nullable String p_394142_, @GpuTexture.Usage int p_395535_, TextureFormat p_394951_, int p_393944_, int p_392329_, int p_408015_, int p_406483_, boolean stencil -+ ) { -+ // Forge: stencil rendering is only for depth -+ stencil &= p_394951_.hasDepthAspect(); - if (p_406483_ < 1) { - throw new IllegalArgumentException("mipLevels must be at least 1"); - } else if (p_408015_ < 1) { -@@ -183,11 +_,14 @@ - GlStateManager._texImage2D( - k, - l, -+ stencil ? org.lwjgl.opengl.GL30.GL_DEPTH32F_STENCIL8 : - GlConst.toGlInternalId(p_394951_), - p_393944_ >> l, - p_392329_ >> l, - 0, -+ stencil ? org.lwjgl.opengl.GL30.GL_DEPTH_STENCIL : - GlConst.toGlExternalId(p_394951_), -+ stencil ? org.lwjgl.opengl.GL30.GL_FLOAT_32_UNSIGNED_INT_24_8_REV : - GlConst.toGlType(p_394951_), - null - ); -@@ -198,11 +_,14 @@ ++ public GpuTexture createTexture(@Nullable String label, @GpuTexture.Usage final int usage, final TextureFormat format, final int width, final int height, final int depthOrLayers, final int mipLevels, boolean stencil) { + GlStateManager.clearGlErrors(); + int i = GlStateManager._genTexture(); + if (label == null) { +@@ -169,14 +_,14 @@ + for (int k : GlConst.CUBEMAP_TARGETS) { + for (int l = 0; l < mipLevels; l++) { GlStateManager._texImage2D( - j, - i1, -+ stencil ? org.lwjgl.opengl.GL30.GL_DEPTH32F_STENCIL8 : - GlConst.toGlInternalId(p_394951_), - p_393944_ >> i1, - p_392329_ >> i1, - 0, -+ stencil ? org.lwjgl.opengl.GL30.GL_DEPTH_STENCIL : - GlConst.toGlExternalId(p_394951_), -+ stencil ? org.lwjgl.opengl.GL30.GL_FLOAT_32_UNSIGNED_INT_24_8_REV : - GlConst.toGlType(p_394951_), - null +- k, l, GlConst.toGlInternalId(format), width >> l, height >> l, 0, GlConst.toGlExternalId(format), GlConst.toGlType(format), null ++ k, l, GlConst.toGlInternalId(format, stencil), width >> l, height >> l, 0, GlConst.toGlExternalId(format, stencil), GlConst.toGlType(format, stencil), null ); -@@ -215,7 +_,7 @@ - } else if (j1 != 0) { - throw new IllegalStateException("OpenGL error " + j1); - } else { -- GlTexture gltexture = new GlTexture(p_395535_, p_394142_, p_394951_, p_393944_, p_392329_, p_408015_, p_406483_, i); -+ GlTexture gltexture = new GlTexture(p_395535_, p_394142_, p_394951_, p_393944_, p_392329_, p_408015_, p_406483_, i, stencil); - this.debugLabels.applyLabel(gltexture); - return gltexture; + } } + } else { + for (int i1 = 0; i1 < mipLevels; i1++) { + GlStateManager._texImage2D( +- j, i1, GlConst.toGlInternalId(format), width >> i1, height >> i1, 0, GlConst.toGlExternalId(format), GlConst.toGlType(format), null ++ j, i1, GlConst.toGlInternalId(format, stencil), width >> i1, height >> i1, 0, GlConst.toGlExternalId(format, stencil), GlConst.toGlType(format, stencil), null + ); + } + } +@@ -187,7 +_,7 @@ + } else if (j1 != 0) { + throw new IllegalStateException("OpenGL error " + j1); + } else { +- GlTexture gltexture = new GlTexture(usage, label, format, width, height, depthOrLayers, mipLevels, i); ++ GlTexture gltexture = new GlTexture(usage, label, format, width, height, depthOrLayers, mipLevels, i, stencil); + this.debugLabels.applyLabel(gltexture); + return gltexture; + } diff --git a/patches/minecraft/com/mojang/blaze3d/opengl/GlStateManager.java.patch b/patches/minecraft/com/mojang/blaze3d/opengl/GlStateManager.java.patch index 68d6d7ed49..4605f091f5 100644 --- a/patches/minecraft/com/mojang/blaze3d/opengl/GlStateManager.java.patch +++ b/patches/minecraft/com/mojang/blaze3d/opengl/GlStateManager.java.patch @@ -12,7 +12,7 @@ public static void _disableBlend() { RenderSystem.assertOnRenderThread(); BLEND.mode.disable(); -@@ -371,9 +_,17 @@ +@@ -380,9 +_,17 @@ } } @@ -20,13 +20,13 @@ + public static float lastBrightnessX = 0.0f; + public static float lastBrightnessY = 0.0f; + - public static void _texParameter(int p_393876_, int p_397998_, int p_396741_) { + public static void _texParameter(final int target, final int name, final int value) { RenderSystem.assertOnRenderThread(); - GL11.glTexParameteri(p_393876_, p_397998_, p_396741_); -+ if (p_393876_ == GL13.GL_TEXTURE1) { -+ lastBrightnessX = p_397998_; -+ lastBrightnessY = p_396741_; + GL11.glTexParameteri(target, name, value); ++ if (target == GL13.GL_TEXTURE1) { ++ lastBrightnessX = name; ++ lastBrightnessY = value; + } } - public static int _getTexLevelParameter(int p_393352_, int p_397204_, int p_396319_) { + public static int _getTexLevelParameter(final int target, final int level, final int name) { diff --git a/patches/minecraft/com/mojang/blaze3d/opengl/GlTexture.java.patch b/patches/minecraft/com/mojang/blaze3d/opengl/GlTexture.java.patch index 9e16177549..0c0efb4678 100644 --- a/patches/minecraft/com/mojang/blaze3d/opengl/GlTexture.java.patch +++ b/patches/minecraft/com/mojang/blaze3d/opengl/GlTexture.java.patch @@ -1,20 +1,20 @@ --- a/com/mojang/blaze3d/opengl/GlTexture.java +++ b/com/mojang/blaze3d/opengl/GlTexture.java -@@ -21,8 +_,13 @@ - protected GlTexture( - @GpuTexture.Usage int p_394590_, String p_393950_, TextureFormat p_392837_, int p_391379_, int p_391947_, int p_396659_, int p_408255_, int p_408889_ +@@ -28,8 +_,13 @@ + final int mipLevels, + final int id ) { -+ this(p_394590_, p_393950_, p_392837_, p_391379_, p_391947_, p_396659_, p_408255_, p_408889_, false); ++ this(usage, label, format, width, height, depthOrLayers, mipLevels, id, false); + } + -+ protected GlTexture(int p_394590_, String p_393950_, TextureFormat p_392837_, int p_391379_, int p_391947_, int p_396659_, int p_408255_, int p_408889_, boolean stencil) { - super(p_394590_, p_393950_, p_392837_, p_391379_, p_391947_, p_396659_, p_408255_); - this.id = p_408889_; ++ protected GlTexture(int usage, String label, TextureFormat format, int width, int height, int depthOrLayers, int mipLevels, int id, boolean stencil) { + super(usage, label, format, width, height, depthOrLayers, mipLevels); + this.id = id; + this.stencilEnabled = stencil; } @Override -@@ -89,5 +_,12 @@ +@@ -96,5 +_,12 @@ if (this.closed && this.views == 0) { this.destroyImmediately(); } diff --git a/patches/minecraft/com/mojang/blaze3d/pipeline/RenderTarget.java.patch b/patches/minecraft/com/mojang/blaze3d/pipeline/RenderTarget.java.patch index 2e4484440d..09e7a71e25 100644 --- a/patches/minecraft/com/mojang/blaze3d/pipeline/RenderTarget.java.patch +++ b/patches/minecraft/com/mojang/blaze3d/pipeline/RenderTarget.java.patch @@ -1,15 +1,15 @@ --- a/com/mojang/blaze3d/pipeline/RenderTarget.java +++ b/com/mojang/blaze3d/pipeline/RenderTarget.java @@ -80,7 +_,7 @@ - this.width = p_83951_; - this.height = p_83952_; + this.width = width; + this.height = height; if (this.useDepth) { -- this.depthTexture = gpudevice.createTexture(() -> this.label + " / Depth", 15, TextureFormat.DEPTH32, p_83951_, p_83952_, 1, 1); -+ this.depthTexture = gpudevice.createTexture(() -> this.label + " / Depth", 15, TextureFormat.DEPTH32, p_83951_, p_83952_, 1, 1, this.stencilEnabled); +- this.depthTexture = gpudevice.createTexture(() -> this.label + " / Depth", 15, TextureFormat.DEPTH32, width, height, 1, 1); ++ this.depthTexture = gpudevice.createTexture(() -> this.label + " / Depth", 15, TextureFormat.DEPTH32, width, height, 1, 1, this.stencilEnabled); this.depthTextureView = gpudevice.createTextureView(this.depthTexture); } -@@ -126,5 +_,26 @@ +@@ -124,5 +_,26 @@ public @Nullable GpuTextureView getDepthTextureView() { return this.depthTextureView; diff --git a/patches/minecraft/com/mojang/blaze3d/platform/Window.java.patch b/patches/minecraft/com/mojang/blaze3d/platform/Window.java.patch index 98e1d80871..3625ee9afb 100644 --- a/patches/minecraft/com/mojang/blaze3d/platform/Window.java.patch +++ b/patches/minecraft/com/mojang/blaze3d/platform/Window.java.patch @@ -1,16 +1,17 @@ --- a/com/mojang/blaze3d/platform/Window.java +++ b/com/mojang/blaze3d/platform/Window.java -@@ -91,7 +_,8 @@ - GLFW.glfwWindowHint(139267, 3); - GLFW.glfwWindowHint(139272, 204801); - GLFW.glfwWindowHint(139270, 1); -- this.handle = GLFW.glfwCreateWindow(this.width, this.height, p_85376_, this.fullscreen && monitor != null ? monitor.getMonitor() : 0L, 0L); -+ this.handle = net.minecraftforge.fml.loading.ImmediateWindowHandler.setupMinecraftWindow(()->this.width, ()->this.height, ()->p_85376_, ()->this.fullscreen && monitor != null ? monitor.getMonitor() : 0L); +@@ -97,8 +_,9 @@ + Monitor monitor = this.screenManager.getMonitor(GLFW.glfwGetPrimaryMonitor()); + this.windowedWidth = this.width = allowedWindowMinSize(displayData.width()); + this.windowedHeight = this.height = allowedWindowMinSize(displayData.height()); +- this.handle = this.createWindow(backend, this.width, this.height, title, this.fullscreen && monitor != null ? monitor.getMonitor() : 0L); ++ this.handle = net.minecraftforge.fml.loading.ImmediateWindowHandler.setupMinecraftWindow(this.width, this.height, title, this.fullscreen && monitor != null ? monitor.getMonitor() : 0L, () -> backend); + this.backend = backend; + if (!net.minecraftforge.fml.loading.ImmediateWindowHandler.positionWindow(Optional.ofNullable(monitor), w->this.width = this.windowedWidth = w, h->this.height = this.windowedHeight = h, x->this.x = this.windowedX = x, y->this.y = this.windowedY = y)) { if (monitor != null) { VideoMode videomode = monitor.getPreferredVidMode(this.fullscreen ? this.preferredFullscreenVideoMode : Optional.empty()); this.windowedX = this.x = monitor.getX() + videomode.getWidth() / 2 - this.width / 2; -@@ -103,6 +_,7 @@ +@@ -110,6 +_,7 @@ this.windowedX = this.x = aint1[0]; this.windowedY = this.y = aint[0]; } @@ -18,7 +19,7 @@ this.setMode(); this.refreshFramebufferSize(); -@@ -269,6 +_,9 @@ +@@ -300,6 +_,9 @@ GLFW.glfwGetFramebufferSize(this.handle, aint, aint1); this.framebufferWidth = aint[0] > 0 ? aint[0] : 1; this.framebufferHeight = aint1[0] > 0 ? aint1[0] : 1; @@ -27,4 +28,4 @@ + } } - private void onResize(long p_85428_, int p_85429_, int p_85430_) { + private void onResize(final long handle, final int newWidth, final int newHeight) { diff --git a/patches/minecraft/com/mojang/blaze3d/systems/GpuDevice.java.patch b/patches/minecraft/com/mojang/blaze3d/systems/GpuDevice.java.patch index 8859c3ec32..4ef186d362 100644 --- a/patches/minecraft/com/mojang/blaze3d/systems/GpuDevice.java.patch +++ b/patches/minecraft/com/mojang/blaze3d/systems/GpuDevice.java.patch @@ -1,22 +1,46 @@ --- a/com/mojang/blaze3d/systems/GpuDevice.java +++ b/com/mojang/blaze3d/systems/GpuDevice.java -@@ -36,9 +_,19 @@ - int p_407070_ - ); +@@ -61,6 +_,21 @@ + return this.backend.createTexture(label, usage, format, width, height, depthOrLayers, mipLevels); + } + /** Forge: same as {@link #createTexture(Supplier, int, TextureFormat, int, int, int)} but with stencil support */ -+ default GpuTexture createTexture(@Nullable Supplier p_394357_, int p_395623_, TextureFormat p_395807_, int p_395802_, int p_396157_, int p_408810_, int p_407070_, boolean stencil) { -+ return this.createTexture(p_394357_, p_395623_, p_395807_, p_395802_, p_396157_, p_408810_, p_407070_); ++ public GpuTexture createTexture( ++ final @Nullable Supplier label, ++ @GpuTexture.Usage final int usage, ++ final TextureFormat format, ++ final int width, ++ final int height, ++ final int depthOrLayers, ++ final int mipLevels, ++ final boolean stencil ++ ) { ++ this.verifyTextureCreationArgs(usage, width, height, depthOrLayers, mipLevels); ++ return this.backend.createTexture(label, usage, format, width, height, depthOrLayers, mipLevels, stencil); + } + - GpuTexture createTexture( - @Nullable String p_391798_, @GpuTexture.Usage int p_391800_, TextureFormat p_393333_, int p_395600_, int p_394065_, int p_408732_, int p_407125_ - ); -+ -+ /** Forge: same as {@link #createTexture(String, int, TextureFormat, int, int, int)} but with stencil support */ -+ default GpuTexture createTexture(@Nullable String p_391798_, int p_391800_, TextureFormat p_393333_, int p_395600_, int p_394065_, int p_408732_, int p_407125_, boolean stencil) { -+ return this.createTexture(p_391798_, p_391800_, p_393333_, p_395600_, p_394065_, p_408732_, p_407125_); + public GpuTexture createTexture( + final @Nullable String label, + @GpuTexture.Usage final int usage, +@@ -72,6 +_,21 @@ + ) { + this.verifyTextureCreationArgs(usage, width, height, depthOrLayers, mipLevels); + return this.backend.createTexture(label, usage, format, width, height, depthOrLayers, mipLevels); + } ++ ++ /** Forge: same as {@link #createTexture(Supplier, int, TextureFormat, int, int, int)} but with stencil support */ ++ public GpuTexture createTexture( ++ final @Nullable String label, ++ @GpuTexture.Usage final int usage, ++ final TextureFormat format, ++ final int width, ++ final int height, ++ final int depthOrLayers, ++ final int mipLevels, ++ final boolean stencil ++ ) { ++ this.verifyTextureCreationArgs(usage, width, height, depthOrLayers, mipLevels); ++ return this.backend.createTexture(label, usage, format, width, height, depthOrLayers, mipLevels, stencil); + } - GpuTextureView createTextureView(GpuTexture p_409045_); - + private void verifyTextureCreationArgs(@GpuTexture.Usage final int usage, final int width, final int height, final int depthOrLayers, final int mipLevels) { diff --git a/patches/minecraft/com/mojang/blaze3d/systems/GpuDeviceBackend.java.patch b/patches/minecraft/com/mojang/blaze3d/systems/GpuDeviceBackend.java.patch new file mode 100644 index 0000000000..457ba3d3a0 --- /dev/null +++ b/patches/minecraft/com/mojang/blaze3d/systems/GpuDeviceBackend.java.patch @@ -0,0 +1,22 @@ +--- a/com/mojang/blaze3d/systems/GpuDeviceBackend.java ++++ b/com/mojang/blaze3d/systems/GpuDeviceBackend.java +@@ -30,9 +_,19 @@ + @Nullable Supplier label, @GpuTexture.Usage final int usage, TextureFormat format, int width, int height, int depthOrLayers, int mipLevels + ); + ++ /** Forge: same as {@link #createTexture(Supplier, int, TextureFormat, int, int, int)} but with stencil support */ ++ default GpuTexture createTexture(@Nullable Supplier label, @GpuTexture.Usage final int usage, TextureFormat format, int width, int height, int depthOrLayers, int mipLevels, boolean stencil) { ++ return createTexture(label, usage, format, width, height, depthOrLayers, mipLevels); ++ } ++ + GpuTexture createTexture( + @Nullable String label, @GpuTexture.Usage final int usage, TextureFormat format, int width, int height, int depthOrLayers, int mipLevels + ); ++ ++ /** Forge: same as {@link #createTexture(String, int, TextureFormat, int, int, int)} but with stencil support */ ++ default GpuTexture createTexture(@Nullable String label, @GpuTexture.Usage final int usage, TextureFormat format, int width, int height, int depthOrLayers, int mipLevels, boolean stencil) { ++ return createTexture(label, usage, format, width, height, depthOrLayers, mipLevels); ++ } + + GpuTextureView createTextureView(GpuTexture texture); + diff --git a/patches/minecraft/com/mojang/blaze3d/textures/GpuTexture.java.patch b/patches/minecraft/com/mojang/blaze3d/textures/GpuTexture.java.patch index a53ef1fc42..77b6b38a95 100644 --- a/patches/minecraft/com/mojang/blaze3d/textures/GpuTexture.java.patch +++ b/patches/minecraft/com/mojang/blaze3d/textures/GpuTexture.java.patch @@ -1,9 +1,9 @@ --- a/com/mojang/blaze3d/textures/GpuTexture.java +++ b/com/mojang/blaze3d/textures/GpuTexture.java -@@ -10,7 +_,7 @@ +@@ -8,7 +_,7 @@ + import net.minecraftforge.api.distmarker.OnlyIn; @OnlyIn(Dist.CLIENT) - @DontObfuscate -public abstract class GpuTexture implements AutoCloseable { +public abstract class GpuTexture implements AutoCloseable, net.minecraftforge.client.extensions.IForgeGpuTexture { public static final int USAGE_COPY_DST = 1; diff --git a/patches/minecraft/com/mojang/blaze3d/vertex/PoseStack.java.patch b/patches/minecraft/com/mojang/blaze3d/vertex/PoseStack.java.patch index bedbe42f21..b74e45535d 100644 --- a/patches/minecraft/com/mojang/blaze3d/vertex/PoseStack.java.patch +++ b/patches/minecraft/com/mojang/blaze3d/vertex/PoseStack.java.patch @@ -1,6 +1,6 @@ --- a/com/mojang/blaze3d/vertex/PoseStack.java +++ b/com/mojang/blaze3d/vertex/PoseStack.java -@@ -15,7 +_,7 @@ +@@ -16,7 +_,7 @@ import org.joml.Vector3fc; @OnlyIn(Dist.CLIENT) diff --git a/patches/minecraft/com/mojang/blaze3d/vertex/VertexConsumer.java.patch b/patches/minecraft/com/mojang/blaze3d/vertex/VertexConsumer.java.patch deleted file mode 100644 index 36226d81e2..0000000000 --- a/patches/minecraft/com/mojang/blaze3d/vertex/VertexConsumer.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/com/mojang/blaze3d/vertex/VertexConsumer.java -+++ b/com/mojang/blaze3d/vertex/VertexConsumer.java -@@ -14,7 +_,7 @@ - import org.joml.Vector3fc; - - @OnlyIn(Dist.CLIENT) --public interface VertexConsumer { -+public interface VertexConsumer extends net.minecraftforge.client.extensions.IForgeVertexConsumer { - VertexConsumer addVertex(float p_344294_, float p_342213_, float p_344859_); - - VertexConsumer setColor(int p_342749_, int p_344324_, int p_343336_, int p_342831_); diff --git a/patches/minecraft/com/mojang/blaze3d/vertex/VertexFormat.java.patch b/patches/minecraft/com/mojang/blaze3d/vertex/VertexFormat.java.patch index 87f3add2da..6b8eaa1d7c 100644 --- a/patches/minecraft/com/mojang/blaze3d/vertex/VertexFormat.java.patch +++ b/patches/minecraft/com/mojang/blaze3d/vertex/VertexFormat.java.patch @@ -1,36 +1,27 @@ --- a/com/mojang/blaze3d/vertex/VertexFormat.java +++ b/com/mojang/blaze3d/vertex/VertexFormat.java -@@ -20,7 +_,7 @@ - - @OnlyIn(Dist.CLIENT) - @DontObfuscate --public class VertexFormat { -+public class VertexFormat implements net.minecraftforge.client.extensions.IForgeVertexFormat { - public static final int UNKNOWN_ELEMENT = -1; - private final List elements; - private final List names; @@ -29,6 +_,7 @@ private final int[] offsetsByElement = new int[32]; private @Nullable GpuBuffer immediateDrawVertexBuffer; private @Nullable GpuBuffer immediateDrawIndexBuffer; + private final com.google.common.collect.ImmutableMap elementMapping; - VertexFormat(List p_343616_, List p_345241_, IntList p_345522_, int p_344162_) { - this.elements = p_343616_; + private VertexFormat(final List elements, final List names, final IntList offsets, final int vertexSize) { + this.elements = elements; @@ -41,6 +_,11 @@ - int j = vertexformatelement != null ? p_343616_.indexOf(vertexformatelement) : -1; - this.offsetsByElement[i] = j != -1 ? p_345522_.getInt(j) : -1; + int j = vertexformatelement != null ? elements.indexOf(vertexformatelement) : -1; + this.offsetsByElement[i] = j != -1 ? offsets.getInt(j) : -1; } + -+ ImmutableMap.Builder elements = ImmutableMap.builder(); -+ for (int i = 0; i < p_343616_.size(); i++) -+ elements.put(p_345241_.get(i), p_343616_.get(i)); -+ this.elementMapping = elements.buildOrThrow(); ++ ImmutableMap.Builder elementMapping = ImmutableMap.builder(); ++ for (int i = 0; i < elements.size(); i++) ++ elementMapping.put(names.get(i), elements.get(i)); ++ this.elementMapping = elementMapping.buildOrThrow(); } public static VertexFormat.Builder builder() { @@ -139,6 +_,9 @@ - this.immediateDrawIndexBuffer = uploadToBuffer(this.immediateDrawIndexBuffer, p_391835_, 72, () -> "Immediate index buffer for " + this); + this.immediateDrawIndexBuffer = uploadToBuffer(this.immediateDrawIndexBuffer, buffer, 72, () -> "Immediate index buffer for " + this); return this.immediateDrawIndexBuffer; } + @@ -38,4 +29,4 @@ + public int getOffset(int index) { return offsetsByElement[index]; } @OnlyIn(Dist.CLIENT) - @DontObfuscate + public static class Builder { diff --git a/patches/minecraft/com/mojang/math/Transformation.java.patch b/patches/minecraft/com/mojang/math/Transformation.java.patch index e93bfb6862..537bbf1349 100644 --- a/patches/minecraft/com/mojang/math/Transformation.java.patch +++ b/patches/minecraft/com/mojang/math/Transformation.java.patch @@ -1,17 +1,17 @@ --- a/com/mojang/math/Transformation.java +++ b/com/mojang/math/Transformation.java -@@ -16,7 +_,7 @@ +@@ -17,7 +_,7 @@ import org.joml.Vector3fc; import org.jspecify.annotations.Nullable; -public final class Transformation { +public final class Transformation implements net.minecraftforge.common.extensions.IForgeTransformation { - private final Matrix4fc matrix; - public static final Codec CODEC = RecordCodecBuilder.create( - p_269604_ -> p_269604_.group( -@@ -168,5 +_,19 @@ - this.getScale().lerp(p_175938_.getScale(), p_175939_, new Vector3f()), - this.getRightRotation().slerp(p_175938_.getRightRotation(), p_175939_, new Quaternionf()) + private static final Vector3fc ZERO_TRANSLATION = new Vector3f(); + private static final Vector3fc UNIT_SCALE = new Vector3f(1.0F, 1.0F, 1.0F); + private static final Quaternionfc ZERO_ROTATION = new Quaternionf(); +@@ -172,6 +_,20 @@ + this.scale().lerp(that.scale(), progress, new Vector3f()), + this.rightRotation().slerp(that.rightRotation(), progress, new Quaternionf()) ); + } + @@ -28,4 +28,5 @@ + normalTransform.transpose(); + } } - } + + public static Matrix4fc compose(final Matrix4fc parent, final Optional transform) { diff --git a/patches/minecraft/com/mojang/realmsclient/gui/screens/RealmsGenericErrorScreen.java.patch b/patches/minecraft/com/mojang/realmsclient/gui/screens/RealmsGenericErrorScreen.java.patch index 8c5b232669..8956112e2d 100644 --- a/patches/minecraft/com/mojang/realmsclient/gui/screens/RealmsGenericErrorScreen.java.patch +++ b/patches/minecraft/com/mojang/realmsclient/gui/screens/RealmsGenericErrorScreen.java.patch @@ -1,6 +1,6 @@ --- a/com/mojang/realmsclient/gui/screens/RealmsGenericErrorScreen.java +++ b/com/mojang/realmsclient/gui/screens/RealmsGenericErrorScreen.java -@@ -62,6 +_,15 @@ +@@ -60,6 +_,15 @@ } @Override @@ -13,6 +13,6 @@ + } + + @Override - public void render(GuiGraphics p_283497_, int p_88680_, int p_88681_, float p_88682_) { - super.render(p_283497_, p_88680_, p_88681_, p_88682_); - p_283497_.drawCenteredString(this.font, this.title, this.width / 2, 80, -1); + public void extractRenderState(final GuiGraphicsExtractor graphics, final int xm, final int ym, final float a) { + super.extractRenderState(graphics, xm, ym, a); + graphics.centeredText(this.font, this.title, this.width / 2, 80, -1); diff --git a/patches/minecraft/com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen.java.patch b/patches/minecraft/com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen.java.patch index f11de71060..fea9804e7c 100644 --- a/patches/minecraft/com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen.java.patch +++ b/patches/minecraft/com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen.java.patch @@ -1,11 +1,11 @@ --- a/com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen.java +++ b/com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen.java -@@ -263,7 +_,7 @@ +@@ -303,7 +_,7 @@ int k = this.getY(); - p_282595_.blit(RenderPipelines.GUI_TEXTURED, this.image, j + 2, k + 2, 0.0F, 0.0F, 56, 56, 56, 56, 56, 56, i); - p_282595_.blitSprite(RenderPipelines.GUI_TEXTURED, SLOT_FRAME_SPRITE, j, k, 60, 60, i); + graphics.blit(RenderPipelines.GUI_TEXTURED, this.image, j + 2, k + 2, 0.0F, 0.0F, 56, 56, 56, 56, 56, 56, i); + graphics.blitSprite(RenderPipelines.GUI_TEXTURED, SLOT_FRAME_SPRITE, j, k, 60, 60, i); - int l = flag ? -6250336 : -1; + int l = getFGColor(); - p_282595_.drawCenteredString(RealmsResetWorldScreen.this.font, this.getMessage(), j + 28, k - 14, l); + graphics.centeredText(RealmsResetWorldScreen.this.font, this.getMessage(), j + 28, k - 14, l); } } diff --git a/patches/minecraft/net/minecraft/CrashReport.java.patch b/patches/minecraft/net/minecraft/CrashReport.java.patch index 7cc8adff3a..1bc62134c6 100644 --- a/patches/minecraft/net/minecraft/CrashReport.java.patch +++ b/patches/minecraft/net/minecraft/CrashReport.java.patch @@ -2,28 +2,28 @@ +++ b/net/minecraft/CrashReport.java @@ -58,14 +_,9 @@ if (this.uncategorizedStackTrace != null && this.uncategorizedStackTrace.length > 0) { - p_127520_.append("-- Head --\n"); - p_127520_.append("Thread: ").append(Thread.currentThread().getName()).append("\n"); -- p_127520_.append("Stacktrace:\n"); + builder.append("-- Head --\n"); + builder.append("Thread: ").append(Thread.currentThread().getName()).append("\n"); +- builder.append("Stacktrace:\n"); - - for (StackTraceElement stacktraceelement : this.uncategorizedStackTrace) { -- p_127520_.append("\t").append("at ").append(stacktraceelement); -- p_127520_.append("\n"); +- builder.append("\t").append("at ").append(stacktraceelement); +- builder.append("\n"); - } - -- p_127520_.append("\n"); -+ p_127520_.append(net.minecraftforge.logging.CrashReportAnalyser.appendSuspectedMods(this.exception, this.uncategorizedStackTrace)); -+ p_127520_.append("Stacktrace:"); -+ p_127520_.append(net.minecraftforge.logging.CrashReportExtender.generateEnhancedStackTrace(this.uncategorizedStackTrace)); +- builder.append("\n"); ++ builder.append(net.minecraftforge.logging.CrashReportAnalyser.appendSuspectedMods(this.exception, this.uncategorizedStackTrace)); ++ builder.append("Stacktrace:"); ++ builder.append(net.minecraftforge.logging.CrashReportExtender.generateEnhancedStackTrace(this.uncategorizedStackTrace)); } for (CrashReportCategory crashreportcategory : this.details) { @@ -73,6 +_,7 @@ - p_127520_.append("\n\n"); + builder.append("\n\n"); } + net.minecraftforge.logging.CrashReportExtender.extendSystemReport(systemReport); - this.systemReport.appendToCrashReportString(p_127520_); + this.systemReport.appendToCrashReportString(builder); } @@ -92,18 +_,7 @@ @@ -45,4 +45,4 @@ + return net.minecraftforge.logging.CrashReportExtender.generateEnhancedStackTrace(throwable); } - public String getFriendlyReport(ReportType p_343869_, List p_342487_) { + public String getFriendlyReport(final ReportType reportType, final List extraComments) { diff --git a/patches/minecraft/net/minecraft/CrashReportCategory.java.patch b/patches/minecraft/net/minecraft/CrashReportCategory.java.patch index 3979566f0b..1ce817c8dc 100644 --- a/patches/minecraft/net/minecraft/CrashReportCategory.java.patch +++ b/patches/minecraft/net/minecraft/CrashReportCategory.java.patch @@ -1,28 +1,28 @@ --- a/net/minecraft/CrashReportCategory.java +++ b/net/minecraft/CrashReportCategory.java -@@ -116,8 +_,10 @@ +@@ -114,8 +_,10 @@ if (astacktraceelement.length <= 0) { return 0; } else { -- this.stackTrace = new StackTraceElement[astacktraceelement.length - 3 - p_128149_]; -- System.arraycopy(astacktraceelement, 3 + p_128149_, this.stackTrace, 0, this.stackTrace.length); -+ int len = astacktraceelement.length - 3 - p_128149_; +- this.stackTrace = new StackTraceElement[astacktraceelement.length - 3 - nestedOffset]; +- System.arraycopy(astacktraceelement, 3 + nestedOffset, this.stackTrace, 0, this.stackTrace.length); ++ int len = astacktraceelement.length - 3 - nestedOffset; + if (len <= 0) len = astacktraceelement.length; + this.stackTrace = new StackTraceElement[len]; + System.arraycopy(astacktraceelement, astacktraceelement.length - len, this.stackTrace, 0, this.stackTrace.length); return this.stackTrace.length; } } -@@ -164,16 +_,16 @@ +@@ -162,16 +_,16 @@ if (this.stackTrace != null && this.stackTrace.length > 0) { - p_128169_.append("\nStacktrace:"); + builder.append("\nStacktrace:"); - - for (StackTraceElement stacktraceelement : this.stackTrace) { -- p_128169_.append("\n\tat "); -- p_128169_.append(stacktraceelement); +- builder.append("\n\tat "); +- builder.append(stacktraceelement); - } -+ p_128169_.append(net.minecraftforge.logging.CrashReportExtender.generateEnhancedStackTrace(this.stackTrace)); ++ builder.append(net.minecraftforge.logging.CrashReportExtender.generateEnhancedStackTrace(this.stackTrace)); } } @@ -34,4 +34,4 @@ + this.stackTrace = t.getStackTrace(); } - public static void populateBlockDetails(CrashReportCategory p_178951_, LevelHeightAccessor p_178952_, BlockPos p_178953_, BlockState p_178954_) { + public static void populateBlockDetails( diff --git a/patches/minecraft/net/minecraft/advancements/Advancement.java.patch b/patches/minecraft/net/minecraft/advancements/Advancement.java.patch index 83c55b6745..6d5670fd12 100644 --- a/patches/minecraft/net/minecraft/advancements/Advancement.java.patch +++ b/patches/minecraft/net/minecraft/advancements/Advancement.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/advancements/Advancement.java +++ b/net/minecraft/advancements/Advancement.java -@@ -231,7 +_,11 @@ +@@ -227,7 +_,11 @@ } - public AdvancementHolder save(Consumer p_138390_, String p_138391_) { -- AdvancementHolder advancementholder = this.build(Identifier.parse(p_138391_)); -+ return save(p_138390_, Identifier.parse(p_138391_)); + public AdvancementHolder save(final Consumer output, final String name) { +- AdvancementHolder advancementholder = this.build(Identifier.parse(name)); ++ return save(output, Identifier.parse(name)); + } + -+ public AdvancementHolder save(Consumer p_138390_, Identifier id) { ++ public AdvancementHolder save(Consumer output, Identifier id) { + AdvancementHolder advancementholder = this.build(id); - p_138390_.accept(advancementholder); + output.accept(advancementholder); return advancementholder; } diff --git a/patches/minecraft/net/minecraft/advancements/AdvancementRewards.java.patch b/patches/minecraft/net/minecraft/advancements/AdvancementRewards.java.patch index 14ff7b8a36..f626d79953 100644 --- a/patches/minecraft/net/minecraft/advancements/AdvancementRewards.java.patch +++ b/patches/minecraft/net/minecraft/advancements/AdvancementRewards.java.patch @@ -2,9 +2,9 @@ +++ b/net/minecraft/advancements/AdvancementRewards.java @@ -44,6 +_,7 @@ LootParams lootparams = new LootParams.Builder(serverlevel) - .withParameter(LootContextParams.THIS_ENTITY, p_9990_) - .withParameter(LootContextParams.ORIGIN, p_9990_.position()) -+ .withLuck(p_9990_.getLuck()) + .withParameter(LootContextParams.THIS_ENTITY, player) + .withParameter(LootContextParams.ORIGIN, player.position()) ++ .withLuck(player.getLuck()) .create(LootContextParamSets.ADVANCEMENT_REWARD); boolean flag = false; diff --git a/patches/minecraft/net/minecraft/client/Camera.java.patch b/patches/minecraft/net/minecraft/client/Camera.java.patch index 577ff804ab..b32b0b843c 100644 --- a/patches/minecraft/net/minecraft/client/Camera.java.patch +++ b/patches/minecraft/net/minecraft/client/Camera.java.patch @@ -1,21 +1,38 @@ --- a/net/minecraft/client/Camera.java +++ b/net/minecraft/client/Camera.java -@@ -136,9 +_,13 @@ +@@ -217,12 +_,14 @@ + return 90.0F; + } else { + float f = this.minecraft.options.fov().get().intValue() * Mth.lerp(partialTicks, this.oldFovModifier, this.fovModifier); +- return this.modifyFovBasedOnDeathOrFluid(partialTicks, f); ++ var ret = this.modifyFovBasedOnDeathOrFluid(partialTicks, f); ++ return net.minecraftforge.client.event.ForgeEventFactoryClient.fireComputeFov(this.minecraft.gameRenderer, this, partialTicks, ret, true).getFOV(); + } } - protected void setRotation(float p_90573_, float p_90574_) { -+ setRotation(p_90573_, p_90574_, 0.0f); + private float calculateHudFov(final float partialTicks) { +- return this.modifyFovBasedOnDeathOrFluid(partialTicks, 70.0F); ++ var ret = this.modifyFovBasedOnDeathOrFluid(partialTicks, 70.0F); ++ return net.minecraftforge.client.event.ForgeEventFactoryClient.fireComputeFov(this.minecraft.gameRenderer, this, partialTicks, ret, false).getFOV(); + } + + private float modifyFovBasedOnDeathOrFluid(final float partialTicks, float fov) { +@@ -331,9 +_,13 @@ + } + + protected void setRotation(final float yRot, final float xRot) { ++ setRotation(yRot, xRot, 0.0f); + } + -+ public void setRotation(float p_90573_, float p_90574_, float z) { - this.xRot = p_90574_; - this.yRot = p_90573_; -- this.rotation.rotationYXZ((float) Math.PI - p_90573_ * (float) (Math.PI / 180.0), -p_90574_ * (float) (Math.PI / 180.0), 0.0F); -+ this.rotation.rotationYXZ((float) Math.PI - p_90573_ * (float) (Math.PI / 180.0), -p_90574_ * (float) (Math.PI / 180.0), z * (float) (Math.PI / 180.0)); ++ public void setRotation(float yRot, float xRot, float z) { + this.xRot = xRot; + this.yRot = yRot; +- this.rotation.rotationYXZ((float) Math.PI - yRot * (float) (Math.PI / 180.0), -xRot * (float) (Math.PI / 180.0), 0.0F); ++ this.rotation.rotationYXZ((float) Math.PI - yRot * (float) (Math.PI / 180.0), -xRot * (float) (Math.PI / 180.0), z * (float) (Math.PI / 180.0)); FORWARDS.rotate(this.rotation, this.forwards); UP.rotate(this.rotation, this.up); LEFT.rotate(this.rotation, this.left); -@@ -168,6 +_,13 @@ +@@ -364,6 +_,13 @@ public float yRot() { return this.yRot; diff --git a/patches/minecraft/net/minecraft/client/ClientBrandRetriever.java.patch b/patches/minecraft/net/minecraft/client/ClientBrandRetriever.java.patch index c48665e519..fd1326cdb5 100644 --- a/patches/minecraft/net/minecraft/client/ClientBrandRetriever.java.patch +++ b/patches/minecraft/net/minecraft/client/ClientBrandRetriever.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/client/ClientBrandRetriever.java +++ b/net/minecraft/client/ClientBrandRetriever.java -@@ -10,6 +_,6 @@ +@@ -8,6 +_,6 @@ + public static final String VANILLA_NAME = "vanilla"; - @DontObfuscate public static String getClientModName() { - return "vanilla"; + return net.minecraftforge.internal.BrandingControl.getBranding(); diff --git a/patches/minecraft/net/minecraft/client/DeltaTracker.java.patch b/patches/minecraft/net/minecraft/client/DeltaTracker.java.patch index 28a485d707..55a71c3c89 100644 --- a/patches/minecraft/net/minecraft/client/DeltaTracker.java.patch +++ b/patches/minecraft/net/minecraft/client/DeltaTracker.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/DeltaTracker.java +++ b/net/minecraft/client/DeltaTracker.java -@@ -87,18 +_,22 @@ +@@ -82,18 +_,22 @@ private void pause() { if (!this.paused) { @@ -22,4 +22,4 @@ + net.minecraftforge.client.ForgeHooksClient.onClientPauseChangePost(false); } - public void updateFrozenState(boolean p_344005_) { + public void updateFrozenState(final boolean frozen) { diff --git a/patches/minecraft/net/minecraft/client/KeyMapping.java.patch b/patches/minecraft/net/minecraft/client/KeyMapping.java.patch index 8b764326c0..9a4b06e8b9 100644 --- a/patches/minecraft/net/minecraft/client/KeyMapping.java.patch +++ b/patches/minecraft/net/minecraft/client/KeyMapping.java.patch @@ -15,12 +15,12 @@ @@ -39,7 +_,7 @@ } - private static void forAllKeyMappings(InputConstants.Key p_424096_, Consumer p_427756_) { -- List list = MAP.get(p_424096_); -+ List list = MAP.getAll(p_424096_); + private static void forAllKeyMappings(final InputConstants.Key key, final Consumer operation) { +- List list = MAP.get(key); ++ List list = MAP.getAll(key); if (list != null && !list.isEmpty()) { for (KeyMapping keymapping : list) { - p_427756_.accept(keymapping); + operation.accept(keymapping); @@ -106,7 +_,7 @@ } @@ -30,12 +30,12 @@ } public KeyMapping.Category getCategory() { -@@ -149,8 +_,17 @@ - ? I18n.get(this.name).compareTo(I18n.get(p_90841_.name)) - : Integer.compare(this.order, p_90841_.order); +@@ -147,8 +_,17 @@ + if (this.category == o.category) { + return this.order == o.order ? I18n.get(this.name).compareTo(I18n.get(o.name)) : Integer.compare(this.order, o.order); } else { -- return Integer.compare(KeyMapping.Category.SORT_ORDER.indexOf(this.category), KeyMapping.Category.SORT_ORDER.indexOf(p_90841_.category)); -+ return compareSort(this.category, p_90841_.category); +- return Integer.compare(KeyMapping.Category.SORT_ORDER.indexOf(this.category), KeyMapping.Category.SORT_ORDER.indexOf(o.category)); ++ return compareSort(this.category, o.category); } + } + @@ -48,17 +48,17 @@ + return o1 - o2; } - public static Supplier createNameSupplier(String p_90843_) { -@@ -159,6 +_,20 @@ + public static Supplier createNameSupplier(final String key) { +@@ -157,6 +_,20 @@ } - public boolean same(KeyMapping p_90851_) { -+ if (getKeyConflictContext().conflicts(p_90851_.getKeyConflictContext()) || p_90851_.getKeyConflictContext().conflicts(getKeyConflictContext())) { + public boolean same(final KeyMapping that) { ++ if (getKeyConflictContext().conflicts(that.getKeyConflictContext()) || that.getKeyConflictContext().conflicts(getKeyConflictContext())) { + var keyModifier = getKeyModifier(); -+ var otherKeyModifier = p_90851_.getKeyModifier(); -+ if (keyModifier.matches(p_90851_.getKey()) || otherKeyModifier.matches(getKey())) { ++ var otherKeyModifier = that.getKeyModifier(); ++ if (keyModifier.matches(that.getKey()) || otherKeyModifier.matches(getKey())) { + return true; -+ } else if (getKey().equals(p_90851_.getKey())) { ++ } else if (getKey().equals(that.getKey())) { + // IN_GAME key contexts have a conflict when at least one modifier is NONE. + // For example: If you hold shift to crouch, you can still press E to open your inventory. This means that a Shift+E hotkey is in conflict with E. + // GUI and other key contexts do not have this limitation. @@ -67,10 +67,10 @@ + (keyModifier == net.minecraftforge.client.settings.KeyModifier.NONE || otherKeyModifier == net.minecraftforge.client.settings.KeyModifier.NONE)); + } + } - return this.key.equals(p_90851_.key); + return this.key.equals(that.key); } -@@ -177,11 +_,13 @@ +@@ -175,11 +_,13 @@ } public Component getTranslatedKeyMessage() { @@ -85,16 +85,16 @@ } public String saveString() { -@@ -193,11 +_,94 @@ +@@ -191,11 +_,94 @@ } - private void registerMapping(InputConstants.Key p_423386_) { -- MAP.computeIfAbsent(p_423386_, p_420623_ -> new ArrayList<>()).add(this); -+ MAP.put(p_423386_, this); + private void registerMapping(final InputConstants.Key key) { +- MAP.computeIfAbsent(key, k -> new ArrayList<>()).add(this); ++ MAP.put(key, this); } - public static @Nullable KeyMapping get(String p_378660_) { - return ALL.get(p_378660_); + public static @Nullable KeyMapping get(final String name) { + return ALL.get(name); + } + + private net.minecraftforge.client.settings.KeyModifier keyModifierDefault = net.minecraftforge.client.settings.KeyModifier.NONE; diff --git a/patches/minecraft/net/minecraft/client/KeyboardHandler.java.patch b/patches/minecraft/net/minecraft/client/KeyboardHandler.java.patch index c69d99d906..71c954bdb0 100644 --- a/patches/minecraft/net/minecraft/client/KeyboardHandler.java.patch +++ b/patches/minecraft/net/minecraft/client/KeyboardHandler.java.patch @@ -1,37 +1,37 @@ --- a/net/minecraft/client/KeyboardHandler.java +++ b/net/minecraft/client/KeyboardHandler.java -@@ -497,7 +_,7 @@ +@@ -516,7 +_,7 @@ if (screen != null) { try { - if (p_90895_ != 1 && p_90895_ != 2) { -- if (p_90895_ == 0 && screen.keyReleased(p_423534_)) { -+ if (p_90895_ == 0 && net.minecraftforge.client.ForgeHooksClient.onScreenKeyReleased(screen, p_423534_)) { - if (options.keyDebugModifier.matches(p_423534_)) { + if (action != 1 && action != 2) { +- if (action == 0 && screen.keyReleased(event)) { ++ if (action == 0 && net.minecraftforge.client.ForgeHooksClient.onScreenKeyReleased(screen, event)) { + if (options.keyDebugModifier.matches(event)) { this.usedDebugKeyAsModifier = false; } -@@ -506,7 +_,7 @@ +@@ -525,7 +_,7 @@ } } else { screen.afterKeyboardAction(); -- if (screen.keyPressed(p_423534_)) { -+ if (net.minecraftforge.client.ForgeHooksClient.onScreenKeyPressed(screen, p_423534_)) { +- if (screen.keyPressed(event)) { ++ if (net.minecraftforge.client.ForgeHooksClient.onScreenKeyPressed(screen, event)) { if (this.minecraft.screen == null) { - InputConstants.Key inputconstants$key = InputConstants.getKey(p_423534_); + InputConstants.Key inputconstants$key = InputConstants.getKey(event); KeyMapping.set(inputconstants$key, false); -@@ -582,6 +_,7 @@ +@@ -597,6 +_,7 @@ } } } -+ net.minecraftforge.client.ForgeHooksClient.onKeyInput(p_423534_, p_90895_); ++ net.minecraftforge.client.ForgeHooksClient.onKeyInput(event, action); } } -@@ -590,7 +_,7 @@ +@@ -605,7 +_,7 @@ Screen screen = this.minecraft.screen; if (screen != null && this.minecraft.getOverlay() == null) { try { -- screen.charTyped(p_427531_); -+ net.minecraftforge.client.ForgeHooksClient.onScreenCharTyped(screen, p_427531_); +- screen.charTyped(event); ++ net.minecraftforge.client.ForgeHooksClient.onScreenCharTyped(screen, event); } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "charTyped event handler"); screen.fillCrashDetails(crashreport); diff --git a/patches/minecraft/net/minecraft/client/Minecraft.java.patch b/patches/minecraft/net/minecraft/client/Minecraft.java.patch index 931fff65d8..2901bd6cee 100644 --- a/patches/minecraft/net/minecraft/client/Minecraft.java.patch +++ b/patches/minecraft/net/minecraft/client/Minecraft.java.patch @@ -1,90 +1,85 @@ --- a/net/minecraft/client/Minecraft.java +++ b/net/minecraft/client/Minecraft.java -@@ -265,7 +_,7 @@ +@@ -272,7 +_,7 @@ import org.slf4j.Logger; @OnlyIn(Dist.CLIENT) -public class Minecraft extends ReentrantBlockableEventLoop implements WindowEventHandler { +public class Minecraft extends ReentrantBlockableEventLoop implements WindowEventHandler, net.minecraftforge.client.extensions.IForgeMinecraft { - static Minecraft instance; + private static Minecraft instance; private static final Logger LOGGER = LogUtils.getLogger(); private static final int MAX_TICKS_PER_UPDATE = 10; -@@ -431,7 +_,6 @@ +@@ -436,7 +_,6 @@ } }, Util.nonCriticalIoPool()); LOGGER.info("Setting user: {}", this.user.getName()); - LOGGER.debug("(Session ID is {})", this.user.getSessionId()); - this.demo = p_91084_.game.demo; - this.allowsMultiplayer = !p_91084_.game.disableMultiplayer; - this.allowsChat = !p_91084_.game.disableChat; -@@ -483,10 +_,9 @@ - LOGGER.error("Couldn't set icon", (Throwable)ioexception); - } - -+ // FORGE: Move mouse and keyboard handler setup further below - this.mouseHandler = new MouseHandler(this); -- this.mouseHandler.setup(this.window); - this.keyboardHandler = new KeyboardHandler(this); -- this.keyboardHandler.setup(this.window); - RenderSystem.initRenderer( - this.window.handle(), - this.options.glDebugVerbosity, -@@ -498,6 +_,7 @@ - LOGGER.info("Using optional rendering extensions: {}", String.join(", ", RenderSystem.getDevice().getEnabledExtensions())); - this.mainRenderTarget = new MainTarget(this.window.getWidth(), this.window.getHeight()); - this.resourceManager = new ReloadableResourceManager(PackType.CLIENT_RESOURCES); -+ net.minecraftforge.client.loading.ClientModLoader.begin(this, this.resourcePackRepository, this.resourceManager); - this.resourcePackRepository.reload(); - this.options.loadSelectedResourcePacks(this.resourcePackRepository); - this.languageManager = new LanguageManager(this.options.languageCode, p_340763_ -> { -@@ -585,6 +_,7 @@ - this.particleResources = new ParticleResources(); - this.resourceManager.registerReloadListener(this.particleResources); - this.particleEngine = new ParticleEngine(this.level, this.particleResources); -+ net.minecraftforge.client.ForgeHooksClient.onRegisterParticleProviders(this.particleResources); - this.particleResources.onReload(this.particleEngine::clearParticles); - this.waypointStyles = new WaypointStyleManager(); - this.resourceManager.registerReloadListener(this.waypointStyles); -@@ -596,6 +_,9 @@ - this.resourceManager.registerReloadListener(this.gpuWarnlistManager); - this.resourceManager.registerReloadListener(this.regionalCompliancies); - this.gui = new Gui(this); -+ // FORGE: Moved keyboard and mouse handler setup below ingame gui creation to prevent NPEs in them. -+ this.mouseHandler.setup(this.window); -+ this.keyboardHandler.setup(this.window); - RealmsClient realmsclient = RealmsClient.getOrCreate(this); - this.realmsDataFetcher = new RealmsDataFetcher(realmsclient); - RenderSystem.setErrorCallback(this::onFullscreenError); -@@ -628,6 +_,7 @@ + this.demo = gameConfig.game.demo; + this.allowsMultiplayer = !gameConfig.game.disableMultiplayer; + this.allowsChat = !gameConfig.game.disableChat; +@@ -522,14 +_,14 @@ + LOGGER.error("Couldn't set icon", (Throwable)ioexception); } - } -+ net.minecraftforge.client.ForgeHooksClient.initClientHooks(this, this.resourceManager); - this.window.updateVsync(this.options.enableVsync().get()); - this.window.updateRawMouseInput(this.options.rawMouseInput().get()); - this.window.setAllowCursorChanges(this.options.allowCursorChanges().get()); -@@ -651,16 +_,17 @@ - GameLoadTimesEvent.INSTANCE.beginStep(TelemetryProperty.LOAD_TIME_LOADING_OVERLAY_MS); - Minecraft.GameLoadCookie minecraft$gameloadcookie = new Minecraft.GameLoadCookie(realmsclient, p_91084_.quickPlay); - this.setOverlay( -- new LoadingOverlay( -- this, reloadinstance, p_447796_ -> Util.ifElse(p_447796_, p_296162_ -> this.rollbackResourcePacks(p_296162_, minecraft$gameloadcookie), () -> { -+ net.minecraftforge.fml.loading.ImmediateWindowHandler.loadingOverlay( -+ () -> this, () -> reloadinstance, p_296164_ -> Util.ifElse(p_296164_, p_447796_ -> this.rollbackResourcePacks(p_447796_, minecraft$gameloadcookie), () -> { ++ // FORGE: Move mouse and keyboard handler setup further below + this.mouseHandler = new MouseHandler(this); +- this.mouseHandler.setup(this.window); + this.keyboardHandler = new KeyboardHandler(this); +- this.keyboardHandler.setup(this.window); + this.options.applyGraphicsPreset(this.options.graphicsPreset().get()); + LOGGER.info("Using optional rendering extensions: {}", String.join(", ", RenderSystem.getDevice().getEnabledExtensions())); + this.mainRenderTarget = new MainTarget(this.window.getWidth(), this.window.getHeight()); + this.resourceManager = new ReloadableResourceManager(PackType.CLIENT_RESOURCES); ++ net.minecraftforge.client.loading.ClientModLoader.begin(this, this.resourcePackRepository, this.resourceManager); + this.resourcePackRepository.reload(); + this.options.loadSelectedResourcePacks(this.resourcePackRepository); + this.languageManager = new LanguageManager(this.options.languageCode, languageData -> { +@@ -617,6 +_,7 @@ + this.particleResources = new ParticleResources(); + this.resourceManager.registerReloadListener(this.particleResources); + this.particleEngine = new ParticleEngine(this.level, this.particleResources); ++ net.minecraftforge.client.ForgeHooksClient.onRegisterParticleProviders(this.particleResources); + this.particleResources.onReload(this.particleEngine::clearParticles); + this.waypointStyles = new WaypointStyleManager(); + this.resourceManager.registerReloadListener(this.waypointStyles); +@@ -638,6 +_,9 @@ + this.resourceManager.registerReloadListener(this.gpuWarnlistManager); + this.resourceManager.registerReloadListener(this.regionalCompliancies); + this.gui = new Gui(this); ++ // FORGE: Moved keyboard and mouse handler setup below ingame gui creation to prevent NPEs in them. ++ this.mouseHandler.setup(this.window); ++ this.keyboardHandler.setup(this.window); + RealmsClient realmsclient = RealmsClient.getOrCreate(this); + this.realmsDataFetcher = new RealmsDataFetcher(realmsclient); + RenderSystem.setErrorCallback(this::onFullscreenError); +@@ -669,6 +_,7 @@ + } + } + ++ net.minecraftforge.client.ForgeHooksClient.initClientHooks(this, this.resourceManager); + this.window.updateVsync(this.options.enableVsync().get()); + this.window.updateRawMouseInput(this.options.rawMouseInput().get()); + this.window.setAllowCursorChanges(this.options.allowCursorChanges().get()); +@@ -695,14 +_,16 @@ + GameLoadTimesEvent.INSTANCE.beginStep(TelemetryProperty.LOAD_TIME_LOADING_OVERLAY_MS); + Minecraft.GameLoadCookie minecraft$gameloadcookie = new Minecraft.GameLoadCookie(realmsclient, gameConfig.quickPlay); + this.setOverlay( +- new LoadingOverlay(this, reloadinstance, maybeT -> Util.ifElse(maybeT, t -> this.rollbackResourcePacks(t, minecraft$gameloadcookie), () -> { ++ net.minecraftforge.fml.loading.ImmediateWindowHandler.loadingOverlay( ++ () -> this, () -> reloadinstance, maybeT -> Util.ifElse(maybeT, t -> this.rollbackResourcePacks(t, minecraft$gameloadcookie), () -> { if (SharedConstants.IS_RUNNING_IN_IDE) { this.selfTest(); } this.reloadStateTracker.finishReload(); this.onResourceLoadFinished(minecraft$gameloadcookie); +- }), false) + net.minecraftforge.client.loading.ClientModLoader.completeModLoading(); - }), false -- ) -+ ).get() - ); - this.quickPlayLog = QuickPlayLog.of(p_91084_.quickPlay.logPath()); - this.framerateLimitTracker = new FramerateLimitTracker(this.options, this); -@@ -779,6 +_,7 @@ ++ }), false).get() + ); + this.quickPlayLog = QuickPlayLog.of(gameConfig.quickPlay.logPath()); + this.framerateLimitTracker = new FramerateLimitTracker(this.options, this); +@@ -822,6 +_,7 @@ StringBuilder stringbuilder = new StringBuilder("Minecraft"); if (checkModStatus().shouldReportAsModified()) { stringbuilder.append("*"); @@ -92,25 +87,25 @@ } stringbuilder.append(" "); -@@ -802,6 +_,8 @@ +@@ -845,6 +_,8 @@ } - private UserApiService createUserApiService(YggdrasilAuthenticationService p_193586_, GameConfig p_193587_) { -+ if ("0".equals(p_193587_.user.user.getAccessToken())) // Forge: We use "0" in dev. Short circuit to stop exception spam. + private UserApiService createUserApiService(final YggdrasilAuthenticationService authService, final GameConfig config) { ++ if ("0".equals(config.user.user.getAccessToken())) // Forge: We use "0" in dev. Short circuit to stop exception spam. + return UserApiService.OFFLINE; - return p_193587_.game.offlineDeveloperMode ? UserApiService.OFFLINE : p_193586_.createUserApiService(p_193587_.user.user.getAccessToken()); + return config.game.offlineDeveloperMode ? UserApiService.OFFLINE : authService.createUserApiService(config.user.user.getAccessToken()); } -@@ -814,7 +_,7 @@ +@@ -857,7 +_,7 @@ } - private void rollbackResourcePacks(Throwable p_91240_, Minecraft.@Nullable GameLoadCookie p_299515_) { + private void rollbackResourcePacks(final Throwable t, final Minecraft.@Nullable GameLoadCookie loadCookie) { - if (this.resourcePackRepository.getSelectedIds().size() > 1) { + if (this.resourcePackRepository.getSelectedPacks().stream().anyMatch(e -> !e.isRequired())) { //Forge: This caused infinite loop if any resource packs are forced. Such as mod resources. So check if we can disable any. - this.clearResourcePacksOnError(p_91240_, null, p_299515_); + this.clearResourcePacksOnError(t, null, loadCookie); } else { - Util.throwAsRuntime(p_91240_); -@@ -1100,12 +_,6 @@ + Util.throwAsRuntime(t); +@@ -1134,12 +_,6 @@ LOGGER.error("setScreen called from non-game thread"); } @@ -120,22 +115,22 @@ - this.setLastInputType(InputType.NONE); - } - - if (p_91153_ == null) { + if (screen == null) { if (this.clientLevelTeardownInProgress) { throw new IllegalStateException("Trying to return to in-game GUI during disconnection"); -@@ -1124,6 +_,23 @@ +@@ -1158,6 +_,23 @@ } } + net.minecraftforge.client.ForgeHooksClient.clearGuiLayers(this); + Screen old = this.screen; -+ if (p_91153_ != null) { -+ var event = net.minecraftforge.client.event.ForgeEventFactoryClient.onScreenOpening(old, p_91153_); ++ if (screen != null) { ++ var event = net.minecraftforge.client.event.ForgeEventFactoryClient.onScreenOpening(old, screen); + if (event == null) return; -+ p_91153_ = event; ++ screen = event; + } + -+ if (p_91153_ != old) { ++ if (screen != old) { + if (old != null) { + net.minecraftforge.client.event.ForgeEventFactoryClient.onScreenClose(old); + old.removed(); @@ -144,41 +139,36 @@ + } + } + - this.screen = p_91153_; + this.screen = screen; if (this.screen != null) { this.screen.added(); -@@ -1207,6 +_,7 @@ +@@ -1241,6 +_,7 @@ Util.shutdownExecutors(); RenderSystem.getSamplerCache().close(); RenderSystem.getDevice().close(); -+ net.minecraftforge.fml.config.ConfigTracker.INSTANCE.forceUnload(); ++ net.minecraftforge.fml.config.ConfigTracker.forceUnload(); } catch (Throwable throwable) { LOGGER.error("Shutdown failure!", throwable); throw throwable; -@@ -1289,7 +_,9 @@ - RenderSystem.getDevice().createCommandEncoder().clearColorAndDepthTextures(rendertarget.getColorTexture(), 0, rendertarget.getDepthTexture(), 1.0); - profilerfiller.push("gameRenderer"); - if (!this.noRender) { -+ net.minecraftforge.client.event.ForgeEventFactoryClient.onRenderTickStart(this.deltaTracker); - this.gameRenderer.render(this.deltaTracker, p_91384_); -+ net.minecraftforge.client.event.ForgeEventFactoryClient.onRenderTickEnd(this.deltaTracker); - } - - profilerfiller.popPush("blit"); -@@ -1401,10 +_,12 @@ +@@ -1352,7 +_,9 @@ + profilerfiller.popPush("gpuAsync"); + RenderSystem.executePendingTasks(); + profilerfiller.pop(); ++ net.minecraftforge.client.event.ForgeEventFactoryClient.onRenderTickStart(this.deltaTracker); + this.gameRenderer.render(this.deltaTracker, advanceGameTime); ++ net.minecraftforge.client.event.ForgeEventFactoryClient.onRenderTickEnd(this.deltaTracker); + profilerfiller.push("present"); + if (!this.gameRenderer.getGameRenderState().windowRenderState.isMinimized) { + this.mainRenderTarget.blitToScreen(); +@@ -1456,6 +_,7 @@ this.window.setGuiScale(i); if (this.screen != null) { this.screen.resize(this.window.getGuiScaledWidth(), this.window.getGuiScaledHeight()); + net.minecraftforge.client.ForgeHooksClient.resizeGuiLayers(this, this.window.getGuiScaledWidth(), this.window.getGuiScaledHeight()); } - RenderTarget rendertarget = this.getMainRenderTarget(); - rendertarget.resize(this.window.getWidth(), this.window.getHeight()); -+ if (this.gameRenderer != null) - this.gameRenderer.resize(this.window.getWidth(), this.window.getHeight()); this.mouseHandler.setIgnoreFirstMove(); - } -@@ -1542,6 +_,7 @@ +@@ -1600,6 +_,7 @@ } public void stop() { @@ -186,8 +176,8 @@ this.running = false; } -@@ -1571,10 +_,18 @@ - if (p_91387_ && this.hitResult != null && this.hitResult.getType() == HitResult.Type.BLOCK) { +@@ -1629,10 +_,18 @@ + if (down && this.hitResult != null && this.hitResult.getType() == HitResult.Type.BLOCK) { BlockHitResult blockhitresult = (BlockHitResult)this.hitResult; BlockPos blockpos = blockhitresult.getBlockPos(); - if (!this.level.getBlockState(blockpos).isAir()) { @@ -208,7 +198,7 @@ this.player.swing(InteractionHand.MAIN_HAND); } } -@@ -1611,6 +_,8 @@ +@@ -1675,6 +_,8 @@ this.player.swing(InteractionHand.MAIN_HAND); return true; } else { @@ -217,7 +207,7 @@ switch (this.hitResult.getType()) { case ENTITY: AttackRange attackrange = itemstack.get(DataComponents.ATTACK_RANGE); -@@ -1621,7 +_,7 @@ +@@ -1685,7 +_,7 @@ case BLOCK: BlockHitResult blockhitresult = (BlockHitResult)this.hitResult; BlockPos blockpos = blockhitresult.getBlockPos(); @@ -226,19 +216,18 @@ this.gameMode.startDestroyBlock(blockpos, blockhitresult.getDirection()); if (this.level.getBlockState(blockpos).isAir()) { flag = true; -@@ -1634,9 +_,10 @@ +@@ -1698,8 +_,10 @@ } this.player.resetAttackStrengthTicker(); + net.minecraftforge.event.ForgeEventFactory.onLeftClickEmpty(this.player); } -- if (!this.player.isSpectator()) { -+ if (!this.player.isSpectator() && inputEvent.shouldSwingHand()) { - this.player.swing(InteractionHand.MAIN_HAND); - } - -@@ -1655,6 +_,12 @@ ++ if (inputEvent.shouldSwingHand()) + this.player.swing(InteractionHand.MAIN_HAND); + return flag; + } +@@ -1716,6 +_,12 @@ } for (InteractionHand interactionhand : InteractionHand.values()) { @@ -251,25 +240,25 @@ ItemStack itemstack = this.player.getItemInHand(interactionhand); if (!itemstack.isItemEnabled(this.level.enabledFeatures())) { return; -@@ -1676,7 +_,7 @@ +@@ -1734,7 +_,7 @@ + && this.gameMode.interact(this.player, entity, entityhitresult, interactionhand) instanceof InteractionResult.Success interactionresult$success2 + ) + { +- if (interactionresult$success2.swingSource() == InteractionResult.SwingSource.CLIENT) { ++ if (interactionresult$success2.swingSource() == InteractionResult.SwingSource.CLIENT && inputEvent.shouldSwingHand()) { + this.player.swing(interactionhand); } - if (interactionresult instanceof InteractionResult.Success interactionresult$success2) { -- if (interactionresult$success2.swingSource() == InteractionResult.SwingSource.CLIENT) { -+ if (interactionresult$success2.swingSource() == InteractionResult.SwingSource.CLIENT && inputEvent.shouldSwingHand()) { - this.player.swing(interactionhand); - } - -@@ -1689,7 +_,7 @@ +@@ -1746,7 +_,7 @@ int i = itemstack.getCount(); - InteractionResult interactionresult1 = this.gameMode.useItemOn(this.player, interactionhand, blockhitresult); - if (interactionresult1 instanceof InteractionResult.Success interactionresult$success) { + InteractionResult interactionresult = this.gameMode.useItemOn(this.player, interactionhand, blockhitresult); + if (interactionresult instanceof InteractionResult.Success interactionresult$success) { - if (interactionresult$success.swingSource() == InteractionResult.SwingSource.CLIENT) { + if (interactionresult$success.swingSource() == InteractionResult.SwingSource.CLIENT && inputEvent.shouldSwingHand()) { this.player.swing(interactionhand); if (!itemstack.isEmpty() && (itemstack.getCount() != i || this.player.hasInfiniteMaterials())) { this.gameRenderer.itemInHandRenderer.itemUsed(interactionhand); -@@ -1705,6 +_,9 @@ +@@ -1762,6 +_,9 @@ } } @@ -279,16 +268,16 @@ if (!itemstack.isEmpty() && this.gameMode.useItem(this.player, interactionhand) instanceof InteractionResult.Success interactionresult$success1) { if (interactionresult$success1.swingSource() == InteractionResult.SwingSource.CLIENT) { -@@ -1734,6 +_,8 @@ +@@ -1791,6 +_,8 @@ } ProfilerFiller profilerfiller = Profiler.get(); + net.minecraftforge.event.ForgeEventFactory.onPreClientTick(); + profilerfiller.push("gui"); + this.textInputManager.tick(); this.chatListener.tick(); - this.gui.tick(this.pause); -@@ -1815,6 +_,7 @@ +@@ -1873,6 +_,7 @@ this.tutorial.tick(); @@ -296,7 +285,7 @@ try { this.level.tick(() -> true); } catch (Throwable throwable1) { -@@ -1828,6 +_,7 @@ +@@ -1886,6 +_,7 @@ throw new ReportedException(crashreport1); } @@ -304,7 +293,7 @@ } profilerfiller.popPush("animateTick"); -@@ -1852,6 +_,7 @@ +@@ -1910,6 +_,7 @@ profilerfiller.popPush("keyboard"); this.keyboardHandler.tick(); profilerfiller.pop(); @@ -312,15 +301,15 @@ } private boolean isLevelRunningNormally() { -@@ -2070,6 +_,7 @@ +@@ -2140,6 +_,7 @@ } - public void setLevel(ClientLevel p_91157_) { + public void setLevel(final ClientLevel level) { + if (this.level != null) net.minecraftforge.event.ForgeEventFactory.onLevelUnload(this.level); - this.level = p_91157_; - this.updateLevelInEngines(p_91157_); + this.level = level; + this.updateLevelInEngines(level); } -@@ -2131,6 +_,7 @@ +@@ -2201,6 +_,7 @@ IntegratedServer integratedserver = this.singleplayerServer; this.singleplayerServer = null; this.gameRenderer.resetData(); @@ -328,25 +317,25 @@ this.gameMode = null; this.narrator.clear(); this.clientLevelTeardownInProgress = true; -@@ -2138,6 +_,7 @@ +@@ -2208,6 +_,7 @@ try { if (this.level != null) { this.gui.onDisconnected(); + net.minecraftforge.event.ForgeEventFactory.onLevelUnload(this.level); } - if (integratedserver != null) { -@@ -2150,6 +_,7 @@ + this.level = null; +@@ -2222,6 +_,7 @@ } profilerfiller.pop(); + net.minecraftforge.client.ForgeHooksClient.handleClientLevelClosing(this.level); } - this.setScreenAndShow(p_457642_); -@@ -2292,6 +_,7 @@ + this.setScreenAndShow(screen); +@@ -2374,6 +_,7 @@ - private void pickBlock() { + private void pickBlockOrEntity() { if (this.hitResult != null && this.hitResult.getType() != HitResult.Type.MISS) { + if (net.minecraftforge.client.event.ForgeEventFactoryClient.onClickInputPickBlock(this.options.keyPickItem)) return; boolean flag = this.hasControlDown(); diff --git a/patches/minecraft/net/minecraft/client/MouseHandler.java.patch b/patches/minecraft/net/minecraft/client/MouseHandler.java.patch index 115936b269..d684bf2620 100644 --- a/patches/minecraft/net/minecraft/client/MouseHandler.java.patch +++ b/patches/minecraft/net/minecraft/client/MouseHandler.java.patch @@ -4,7 +4,7 @@ this.activeButton = null; } -+ if (net.minecraftforge.client.event.ForgeEventFactoryClient.onMouseButtonPre(mousebuttoninfo, p_423948_)) return; ++ if (net.minecraftforge.client.event.ForgeEventFactoryClient.onMouseButtonPre(mousebuttoninfo, action)) return; if (this.minecraft.getOverlay() == null) { if (this.minecraft.screen == null) { if (!this.mouseGrabbed && flag) { @@ -30,11 +30,11 @@ KeyMapping.click(inputconstants$key); } } -+ net.minecraftforge.client.event.ForgeEventFactoryClient.onMouseButtonPost(mousebuttoninfo, p_423948_); ++ net.minecraftforge.client.event.ForgeEventFactoryClient.onMouseButtonPost(mousebuttoninfo, action); } } -@@ -207,7 +_,9 @@ +@@ -202,7 +_,9 @@ if (this.minecraft.screen != null) { double d3 = this.getScaledXPos(this.minecraft.getWindow()); double d4 = this.getScaledYPos(this.minecraft.getWindow()); @@ -45,7 +45,7 @@ this.minecraft.screen.afterMouseAction(); } else if (this.minecraft.player != null) { Vector2i vector2i = this.scrollWheelHandler.onMouseScroll(d1, d2); -@@ -216,6 +_,7 @@ +@@ -211,6 +_,7 @@ } int i = vector2i.y == 0 ? -vector2i.x : vector2i.y; @@ -53,7 +53,7 @@ if (this.minecraft.player.isSpectator()) { if (this.minecraft.gui.getSpectatorGui().isMenuActive()) { this.minecraft.gui.getSpectatorGui().onMouseScrolled(-i); -@@ -324,7 +_,7 @@ +@@ -315,7 +_,7 @@ double d5 = getScaledYPos(window, this.accumulatedDY); try { @@ -62,7 +62,7 @@ } catch (Throwable throwable) { CrashReport crashreport1 = CrashReport.forThrowable(throwable, "mouseDragged event handler"); screen.fillCrashDetails(crashreport1); -@@ -411,6 +_,14 @@ +@@ -400,6 +_,14 @@ public double ypos() { return this.ypos; diff --git a/patches/minecraft/net/minecraft/client/Options.java.patch b/patches/minecraft/net/minecraft/client/Options.java.patch index 84379c7f31..69156039ac 100644 --- a/patches/minecraft/net/minecraft/client/Options.java.patch +++ b/patches/minecraft/net/minecraft/client/Options.java.patch @@ -1,45 +1,35 @@ --- a/net/minecraft/client/Options.java +++ b/net/minecraft/client/Options.java -@@ -816,7 +_,8 @@ - }, - new OptionInstance.LazyEnum<>( - () -> Stream.concat(Stream.of(""), Minecraft.getInstance().getSoundManager().getAvailableSoundDevices().stream()).toList(), -- p_232011_ -> Minecraft.getInstance().isRunning() && p_232011_ != "" && !Minecraft.getInstance().getSoundManager().getAvailableSoundDevices().contains(p_232011_) -+ // FORGE: fix incorrect string comparison - PR #8767 -+ p_232011_ -> Minecraft.getInstance().isRunning() && (p_232011_ == null || !p_232011_.isEmpty()) && !Minecraft.getInstance().getSoundManager().getAvailableSoundDevices().contains(p_232011_) - ? Optional.empty() - : Optional.of(p_232011_), - Codec.STRING -@@ -848,6 +_,7 @@ +@@ -921,6 +_,7 @@ ); public boolean syncWrites; public boolean startedCleanly = true; + private final Map unknownKeys = new java.util.HashMap<>(); - private static void operateOnLevelRenderer(Consumer p_457625_) { - LevelRenderer levelrenderer = Minecraft.getInstance().levelRenderer; -@@ -1313,6 +_,7 @@ + public static boolean isSoundDeviceDefault(final String deviceName) { + return deviceName.equals(""); +@@ -1396,6 +_,7 @@ } - public Options(Minecraft p_92138_, File p_92139_) { + public Options(final Minecraft minecraft, final File workingDirectory) { + setForgeKeybindProperties(); - this.minecraft = p_92138_; - this.optionsFile = new File(p_92139_, "options.txt"); + this.minecraft = minecraft; + this.optionsFile = new File(workingDirectory, "options.txt"); boolean flag = Runtime.getRuntime().maxMemory() >= 1000000000L; -@@ -1463,15 +_,28 @@ - this.startedCleanly = p_168428_.process("startedCleanly", this.startedCleanly); - p_168428_.process("musicToast", this.musicToast); - p_168428_.process("musicFrequency", this.musicFrequency); -+ processOptionsKeysOnly(p_168428_); -+ processOptionsEnd(p_168428_); +@@ -1548,15 +_,28 @@ + this.startedCleanly = access.process("startedCleanly", this.startedCleanly); + access.process("musicToast", this.musicToast); + access.process("musicFrequency", this.musicFrequency); ++ processOptionsKeysOnly(access); ++ processOptionsEnd(access); + } + // FORGE: split off to allow reloading keys after mod loading is done -+ private void processOptionsKeysOnly(Options.FieldAccess p_168428_) { ++ private void processOptionsKeysOnly(Options.FieldAccess access) { for (KeyMapping keymapping : this.keyMappings) { - String s = keymapping.saveString(); + String s = keymapping.saveString() + (keymapping.getKeyModifier() != net.minecraftforge.client.settings.KeyModifier.NONE ? ":" + keymapping.getKeyModifier() : ""); - String s1 = p_168428_.process("key_" + keymapping.getName(), s); + String s1 = access.process("key_" + keymapping.getName(), s); if (!s.equals(s1)) { keymapping.setKey(InputConstants.getKey(s1)); + if (s1.indexOf(':') != -1) { @@ -52,11 +42,11 @@ } + } -+ private void processOptionsEnd(Options.FieldAccess p_168428_) { ++ private void processOptionsEnd(Options.FieldAccess access) { for (SoundSource soundsource : SoundSource.values()) { - p_168428_.process("soundCategory_" + soundsource.getName(), this.soundSourceVolumes.get(soundsource)); + access.process("soundCategory_" + soundsource.getName(), this.soundSourceVolumes.get(soundsource)); } -@@ -1486,6 +_,10 @@ +@@ -1571,6 +_,10 @@ } public void load() { @@ -67,7 +57,7 @@ try { if (!this.optionsFile.exists()) { return; -@@ -1505,7 +_,8 @@ +@@ -1590,7 +_,8 @@ } final CompoundTag compoundtag1 = this.dataFix(compoundtag); @@ -75,11 +65,11 @@ + java.util.function.Consumer processor = limited ? this::processOptionsKeysOnly : this::processOptions; + processor.accept( new Options.FieldAccess() { - private @Nullable String getValue(String p_394210_) { - Tag tag = compoundtag1.get(p_394210_); -@@ -1585,6 +_,17 @@ + { + Objects.requireNonNull(Options.this); +@@ -1672,6 +_,17 @@ ); - compoundtag1.getString("fullscreenResolution").ifPresent(p_389133_ -> this.fullscreenVideoModeString = p_389133_); + compoundtag1.getString("fullscreenResolution").ifPresent(fullscreenResolution -> this.fullscreenVideoModeString = fullscreenResolution); KeyMapping.resetMapping(); + + if (limited) { @@ -95,19 +85,23 @@ } catch (Exception exception) { LOGGER.error("Failed to load options", (Throwable)exception); } -@@ -1612,9 +_,11 @@ +@@ -1699,6 +_,7 @@ public void save() { try (final PrintWriter printwriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(this.optionsFile), StandardCharsets.UTF_8))) { printwriter.println("version:" + SharedConstants.getCurrentVersion().dataVersion().version()); + var seen = new java.util.HashSet(); this.processOptions( new Options.FieldAccess() { - public void writePrefix(String p_168491_) { -+ seen.add(p_168491_); - printwriter.print(p_168491_); + { +@@ -1706,6 +_,7 @@ + } + + public void writePrefix(final String name) { ++ seen.add(name); + printwriter.print(name); printwriter.print(':'); } -@@ -1670,6 +_,12 @@ +@@ -1761,6 +_,12 @@ if (s != null) { printwriter.println("fullscreenResolution:" + s); } @@ -120,7 +114,7 @@ } catch (Exception exception) { LOGGER.error("Failed to save options", (Throwable)exception); } -@@ -1707,6 +_,7 @@ +@@ -1798,6 +_,7 @@ } public void broadcastOptions() { @@ -128,10 +122,10 @@ if (this.minecraft.player != null) { this.minecraft.player.connection.broadcastClientInformation(this.buildPlayerInformation()); } -@@ -1820,6 +_,23 @@ +@@ -1915,6 +_,23 @@ - public static Component genericValueLabel(Component p_231901_, int p_231902_) { - return genericValueLabel(p_231901_, Component.literal(Integer.toString(p_231902_))); + public static Component genericValueLabel(final Component caption, final int value) { + return genericValueLabel(caption, Component.literal(Integer.toString(value))); + } + + private void setForgeKeybindProperties() { @@ -151,4 +145,4 @@ + keySmoothCamera.setKeyConflictContext(inGame); } - public static Component genericValueOrOffLabel(Component p_345288_, int p_344826_) { + public static Component genericValueOrOffLabel(final Component caption, final int value) { diff --git a/patches/minecraft/net/minecraft/client/Screenshot.java.patch b/patches/minecraft/net/minecraft/client/Screenshot.java.patch index 00d0e36e11..4a51109d7f 100644 --- a/patches/minecraft/net/minecraft/client/Screenshot.java.patch +++ b/patches/minecraft/net/minecraft/client/Screenshot.java.patch @@ -1,32 +1,32 @@ --- a/net/minecraft/client/Screenshot.java +++ b/net/minecraft/client/Screenshot.java -@@ -43,6 +_,13 @@ - file2 = new File(file1, p_92297_); +@@ -45,6 +_,13 @@ + file2 = new File(file1, forceName); } -+ var event = new net.minecraftforge.client.event.ScreenshotEvent(p_447863_, file2); ++ var event = new net.minecraftforge.client.event.ScreenshotEvent(image, file2); + if (net.minecraftforge.client.event.ScreenshotEvent.BUS.post(event)) { -+ p_92301_.accept(event.getCancelMessage()); ++ callback.accept(event.getCancelMessage()); + return; + } -+ final File target = event.getScreenshotFile(); ++ final File outputFile = event.getScreenshotFile(); + Util.ioPool() .execute( () -> { -@@ -50,10 +_,13 @@ - NativeImage $$4x = p_447863_; +@@ -52,10 +_,13 @@ + NativeImage nativeimage = image; try { -- p_447863_.writeToFile(file2); +- image.writeToFile(file2); - Component component = Component.literal(file2.getName()) -+ p_447863_.writeToFile(target); -+ Component component = Component.literal(target.getName()) ++ image.writeToFile(outputFile); ++ Component component = Component.literal(outputFile.getName()) .withStyle(ChatFormatting.UNDERLINE) - .withStyle(p_389149_ -> p_389149_.withClickEvent(new ClickEvent.OpenFile(file2.getAbsoluteFile()))); + .withStyle(s -> s.withClickEvent(new ClickEvent.OpenFile(file2.getAbsoluteFile()))); + if (event.getResultMessage() != null) -+ p_92301_.accept(event.getResultMessage()); ++ callback.accept(event.getResultMessage()); + else - p_92301_.accept(Component.translatable("screenshot.success", component)); + callback.accept(Component.translatable("screenshot.success", component)); } catch (Throwable throwable1) { - if (p_447863_ != null) { + if (image != null) { diff --git a/patches/minecraft/net/minecraft/client/ToggleKeyMapping.java.patch b/patches/minecraft/net/minecraft/client/ToggleKeyMapping.java.patch index 698cb7c847..93c77d9a18 100644 --- a/patches/minecraft/net/minecraft/client/ToggleKeyMapping.java.patch +++ b/patches/minecraft/net/minecraft/client/ToggleKeyMapping.java.patch @@ -1,21 +1,22 @@ --- a/net/minecraft/client/ToggleKeyMapping.java +++ b/net/minecraft/client/ToggleKeyMapping.java -@@ -31,7 +_,7 @@ +@@ -38,7 +_,7 @@ @Override - public void setDown(boolean p_92534_) { + public void setDown(final boolean down) { if (this.needsToggle.getAsBoolean()) { -- if (p_92534_) { -+ if (p_92534_ && isConflictContextAndModifierActive()) { +- if (down) { ++ if (down && isConflictContextAndModifierActive()) { super.setDown(!this.isDown()); } } else { -@@ -56,5 +_,9 @@ +@@ -66,5 +_,10 @@ protected void reset() { super.setDown(false); + } + -+ @Override public boolean isDown() { ++ @Override ++ public boolean isDown() { + return this.isDown && (isConflictContextAndModifierActive() || needsToggle.getAsBoolean()); } } diff --git a/patches/minecraft/net/minecraft/client/color/block/BlockColors.java.patch b/patches/minecraft/net/minecraft/client/color/block/BlockColors.java.patch index 66cbe4f364..196aa01623 100644 --- a/patches/minecraft/net/minecraft/client/color/block/BlockColors.java.patch +++ b/patches/minecraft/net/minecraft/client/color/block/BlockColors.java.patch @@ -1,44 +1,19 @@ --- a/net/minecraft/client/color/block/BlockColors.java +++ b/net/minecraft/client/color/block/BlockColors.java -@@ -30,7 +_,8 @@ - private static final int DEFAULT = -1; - public static final int LILY_PAD_IN_WORLD = -14647248; - public static final int LILY_PAD_DEFAULT = -9321636; -- private final IdMapper blockColors = new IdMapper<>(32); -+ // Forge: Use registry delegate as non-Vanilla block ids are not constant -+ private final java.util.Map, BlockColor> blockColors = new java.util.HashMap<>(32); - private final Map>> coloringStates = Maps.newHashMap(); - - public static BlockColors createDefault() { -@@ -95,11 +_,12 @@ - }, Blocks.MELON_STEM, Blocks.PUMPKIN_STEM); - blockcolors.addColoringState(StemBlock.AGE, Blocks.MELON_STEM, Blocks.PUMPKIN_STEM); - blockcolors.register((p_92596_, p_92597_, p_92598_, p_92599_) -> p_92597_ != null && p_92598_ != null ? -14647248 : -9321636, Blocks.LILY_PAD); +@@ -45,6 +_,7 @@ + blockcolors.register(List.of(BlockTintSources.constant(-2046180)), Blocks.ATTACHED_MELON_STEM, Blocks.ATTACHED_PUMPKIN_STEM); + blockcolors.register(List.of(BlockTintSources.stem()), Blocks.MELON_STEM, Blocks.PUMPKIN_STEM); + blockcolors.register(List.of(BlockTintSources.constant(-9321636, -14647248)), Blocks.LILY_PAD); + net.minecraftforge.client.ForgeHooksClient.onBlockColorsInit(blockcolors); return blockcolors; } - public int getColor(BlockState p_92583_, Level p_92584_, BlockPos p_92585_) { -- BlockColor blockcolor = this.blockColors.byId(BuiltInRegistries.BLOCK.getId(p_92583_.getBlock())); -+ BlockColor blockcolor = this.blockColors.get(net.minecraftforge.registries.ForgeRegistries.BLOCKS.getDelegateOrThrow(p_92583_.getBlock())); - if (blockcolor != null) { - return blockcolor.getColor(p_92583_, null, null, 0); - } else { -@@ -109,13 +_,15 @@ - } - - public int getColor(BlockState p_92578_, @Nullable BlockAndTintGetter p_92579_, @Nullable BlockPos p_92580_, int p_92581_) { -- BlockColor blockcolor = this.blockColors.byId(BuiltInRegistries.BLOCK.getId(p_92578_.getBlock())); -+ BlockColor blockcolor = this.blockColors.get(net.minecraftforge.registries.ForgeRegistries.BLOCKS.getDelegateOrThrow(p_92578_.getBlock())); - return blockcolor == null ? -1 : blockcolor.getColor(p_92578_, p_92579_, p_92580_, p_92581_); +@@ -57,6 +_,8 @@ + return layer >= list.size() ? null : list.get(layer); } + /** @deprecated Register via {@link net.minecraftforge.client.event.RegisterColorHandlersEvent.Block} */ + @Deprecated - public void register(BlockColor p_92590_, Block... p_92591_) { - for (Block block : p_92591_) { -- this.blockColors.addMapping(p_92590_, BuiltInRegistries.BLOCK.getId(block)); -+ this.blockColors.put(net.minecraftforge.registries.ForgeRegistries.BLOCKS.getDelegateOrThrow(block), p_92590_); - } - } - + public void register(final List layers, final Block... blocks) { + for (Block block : blocks) { + this.sources.put(block, layers); diff --git a/patches/minecraft/net/minecraft/client/data/Main.java.patch b/patches/minecraft/net/minecraft/client/data/Main.java.patch index bcf0229d80..78a59e26e1 100644 --- a/patches/minecraft/net/minecraft/client/data/Main.java.patch +++ b/patches/minecraft/net/minecraft/client/data/Main.java.patch @@ -1,12 +1,12 @@ --- a/net/minecraft/client/data/Main.java +++ b/net/minecraft/client/data/Main.java -@@ -30,13 +_,18 @@ +@@ -28,13 +_,18 @@ OptionSpec optionspec1 = optionparser.accepts("client", "Include client generators"); OptionSpec optionspec2 = optionparser.accepts("all", "Include all generators"); OptionSpec optionspec3 = optionparser.accepts("output", "Output folder").withRequiredArg().defaultsTo("generated"); + OptionSpec inputSpec = optionparser.accepts("input", "Input folder").withRequiredArg(); + var loader = net.minecraftforge.data.loading.DatagenModLoader.setup(optionparser, true); - OptionSet optionset = optionparser.parse(p_375526_); + OptionSet optionset = optionparser.parse(args); - if (!optionset.has(optionspec) && optionset.hasOptions()) { + if (!optionset.has(optionspec) && optionset.hasOptions() && loader.hasArgs(optionset)) { + var input = optionset.valuesOf(inputSpec).stream().map(Paths::get).toList(); @@ -15,8 +15,8 @@ boolean flag1 = flag || optionset.has(optionspec1); Bootstrap.bootStrap(); ClientBootstrap.bootstrap(); -+ if (!loader.run(optionset, path, input, flag, flag1, flag, flag, true)) ++ if (!loader.run(optionset, path, input, flag, flag1, flag, flag)) + return; - DataGenerator datagenerator = new DataGenerator(path, SharedConstants.getCurrentVersion(), true); + DataGenerator datagenerator = new DataGenerator.Cached(path, SharedConstants.getCurrentVersion(), true); addClientProviders(datagenerator, flag1); datagenerator.run(); diff --git a/patches/minecraft/net/minecraft/client/data/models/ItemModelGenerators.java.patch b/patches/minecraft/net/minecraft/client/data/models/ItemModelGenerators.java.patch index 0e51e543ac..a69c0a5c8c 100644 --- a/patches/minecraft/net/minecraft/client/data/models/ItemModelGenerators.java.patch +++ b/patches/minecraft/net/minecraft/client/data/models/ItemModelGenerators.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/data/models/ItemModelGenerators.java +++ b/net/minecraft/client/data/models/ItemModelGenerators.java -@@ -912,6 +_,9 @@ +@@ -922,6 +_,9 @@ this.declareCustomModelItem(Items.COD); this.declareCustomModelItem(Items.FEATHER); this.declareCustomModelItem(Items.LEAD); diff --git a/patches/minecraft/net/minecraft/client/data/models/ModelProvider.java.patch b/patches/minecraft/net/minecraft/client/data/models/ModelProvider.java.patch index 10244c1a92..381d3e129f 100644 --- a/patches/minecraft/net/minecraft/client/data/models/ModelProvider.java.patch +++ b/patches/minecraft/net/minecraft/client/data/models/ModelProvider.java.patch @@ -1,9 +1,9 @@ --- a/net/minecraft/client/data/models/ModelProvider.java +++ b/net/minecraft/client/data/models/ModelProvider.java -@@ -45,11 +_,11 @@ +@@ -44,11 +_,11 @@ @Override - public CompletableFuture run(CachedOutput p_376268_) { + public CompletableFuture run(final CachedOutput cache) { - ModelProvider.ItemInfoCollector modelprovider$iteminfocollector = new ModelProvider.ItemInfoCollector(); - ModelProvider.BlockStateGeneratorCollector modelprovider$blockstategeneratorcollector = new ModelProvider.BlockStateGeneratorCollector(); + ModelProvider.ItemInfoCollector modelprovider$iteminfocollector = new ModelProvider.ItemInfoCollector(this::getKnownItems); @@ -16,15 +16,15 @@ modelprovider$blockstategeneratorcollector.validate(); modelprovider$iteminfocollector.finalizeAndValidate(); return CompletableFuture.allOf( -@@ -59,6 +_,22 @@ +@@ -58,6 +_,22 @@ ); } -+ protected Stream getKnownBlocks() { ++ protected java.util.stream.Stream getKnownBlocks() { + return BuiltInRegistries.BLOCK.stream().filter(block -> "minecraft".equals(block.builtInRegistryHolder().key().identifier().getNamespace())); + } + -+ protected Stream getKnownItems() { ++ protected java.util.stream.Stream getKnownItems() { + return BuiltInRegistries.ITEM.stream().filter(item -> "minecraft".equals(item.builtInRegistryHolder().key().identifier().getNamespace())); + } + @@ -39,73 +39,74 @@ @Override public final String getName() { return "Model Definitions"; -@@ -67,6 +_,15 @@ +@@ -66,6 +_,15 @@ @OnlyIn(Dist.CLIENT) public static class BlockStateGeneratorCollector implements Consumer { private final Map generators = new HashMap<>(); -+ private final Supplier> known; ++ private final Supplier> known; + + public BlockStateGeneratorCollector() { + this(() -> BuiltInRegistries.BLOCK.stream().filter(block -> "minecraft".equals(block.builtInRegistryHolder().key().identifier().getNamespace()))); + } + -+ public BlockStateGeneratorCollector(Supplier> known) { ++ public BlockStateGeneratorCollector(Supplier> known) { + this.known = known; + } - public void accept(BlockModelDefinitionGenerator p_393399_) { - Block block = p_393399_.block(); -@@ -77,7 +_,7 @@ + public void accept(final BlockModelDefinitionGenerator generator) { + Block block = generator.block(); +@@ -76,8 +_,7 @@ } public void validate() { -- Stream> stream = BuiltInRegistries.BLOCK.listElements().filter(p_376480_ -> true); -+ Stream> stream = known.get().map(Block::builtInRegistryHolder); - List list = stream.filter(p_378423_ -> !this.generators.containsKey(p_378423_.value())) - .map(p_447940_ -> p_447940_.key().identifier()) +- List list = BuiltInRegistries.BLOCK +- .listElements() ++ List list = known.get().map(Block::builtInRegistryHolder) + .filter(e -> !this.generators.containsKey(e.value())) + .map(e -> e.key().identifier()) .toList(); @@ -97,6 +_,15 @@ public static class ItemInfoCollector implements ItemModelOutput { private final Map itemInfos = new HashMap<>(); private final Map copies = new HashMap<>(); -+ private final Supplier> known; ++ private final Supplier> known; + + public ItemInfoCollector() { + this(() -> BuiltInRegistries.ITEM.stream().filter(item -> "minecraft".equals(item.builtInRegistryHolder().key().identifier().getNamespace()))); + } + -+ public ItemInfoCollector(Supplier> known) { ++ public ItemInfoCollector(Supplier> known) { + this.known = known; + } @Override - public void accept(Item p_376450_, ItemModel.Unbaked p_378513_, ClientItem.Properties p_455809_) { + public void accept(final Item item, final ItemModel.Unbaked model, final ClientItem.Properties properties) { @@ -115,7 +_,7 @@ - this.copies.put(p_376965_, p_377438_); + this.copies.put(acceptor, donor); } - public void finalizeAndValidate() { + public void generateDefaultBlockModels() { - BuiltInRegistries.ITEM.forEach(p_447944_ -> { - if (!this.copies.containsKey(p_447944_)) { - if (p_447944_ instanceof BlockItem blockitem && !this.itemInfos.containsKey(blockitem)) { + BuiltInRegistries.ITEM.forEach(item -> { + if (!this.copies.containsKey(item)) { + if (item instanceof BlockItem blockitem && !this.itemInfos.containsKey(blockitem)) { @@ -124,6 +_,8 @@ } } }); + } + public void finalizeAndValidate() { - this.copies.forEach((p_376289_, p_375718_) -> { - ClientItem clientitem = this.itemInfos.get(p_375718_); + this.copies.forEach((acceptor, donor) -> { + ClientItem clientitem = this.itemInfos.get(donor); if (clientitem == null) { @@ -132,8 +_,8 @@ - this.register(p_376289_, clientitem); + this.register(acceptor, clientitem); } }); - List list = BuiltInRegistries.ITEM - .listElements() + List list = known.get() + .map(item -> item.builtInRegistryHolder()) - .filter(p_377225_ -> !this.itemInfos.containsKey(p_377225_.value())) - .map(p_447943_ -> p_447943_.key().identifier()) + .filter(e -> !this.itemInfos.containsKey(e.value())) + .map(e -> e.key().identifier()) .toList(); diff --git a/patches/minecraft/net/minecraft/client/gui/Font.java.patch b/patches/minecraft/net/minecraft/client/gui/Font.java.patch index b1f7cfe172..55ffbfcb53 100644 --- a/patches/minecraft/net/minecraft/client/gui/Font.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/Font.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/gui/Font.java +++ b/net/minecraft/client/gui/Font.java -@@ -32,7 +_,7 @@ +@@ -33,7 +_,7 @@ import org.jspecify.annotations.Nullable; @OnlyIn(Dist.CLIENT) diff --git a/patches/minecraft/net/minecraft/client/gui/Gui.java.patch b/patches/minecraft/net/minecraft/client/gui/Gui.java.patch index 2e4041d577..0515b1e903 100644 --- a/patches/minecraft/net/minecraft/client/gui/Gui.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/Gui.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/gui/Gui.java +++ b/net/minecraft/client/gui/Gui.java -@@ -151,7 +_,7 @@ +@@ -150,7 +_,7 @@ public float vignetteBrightness = 1.0F; private int toolHighlightTimer; private ItemStack lastToolHighlight = ItemStack.EMPTY; @@ -9,63 +9,63 @@ private final SubtitleOverlay subtitleOverlay; private final SpectatorGui spectatorGui; private final PlayerTabOverlay tabList; -@@ -193,6 +_,7 @@ - () -> new JumpableVehicleBarRenderer(p_330021_) +@@ -192,6 +_,7 @@ + () -> new JumpableVehicleBarRenderer(minecraft) ); this.resetTitleTimes(); -+ net.minecraftforge.client.gui.overlay.ForgeLayeredDraw.init(this, p_330021_); ++ net.minecraftforge.client.gui.overlay.ForgeLayeredDraw.init(this, minecraft); } public void resetTitleTimes() { -@@ -203,6 +_,10 @@ +@@ -202,6 +_,10 @@ - public void render(GuiGraphics p_282884_, DeltaTracker p_342095_) { + public void extractRenderState(final GuiGraphicsExtractor graphics, final DeltaTracker deltaTracker) { if (!(this.minecraft.screen instanceof LevelLoadingScreen)) { + if (Boolean.valueOf(true)) { -+ net.minecraftforge.client.gui.overlay.ForgeLayeredDraw.beginRender(p_282884_, p_342095_); ++ net.minecraftforge.client.gui.overlay.ForgeLayeredDraw.extractRenderState(graphics, deltaTracker); + return; + } if (!this.minecraft.options.hideGui) { - this.renderCameraOverlays(p_282884_, p_342095_); - this.renderCrosshair(p_282884_, p_342095_); -@@ -386,7 +_,7 @@ + this.extractCameraOverlays(graphics, deltaTracker); + this.extractCrosshair(graphics, deltaTracker); +@@ -385,7 +_,7 @@ int i = Mth.floor(this.minecraft.mouseHandler.getScaledXPos(window)); int j = Mth.floor(this.minecraft.mouseHandler.getScaledYPos(window)); - p_329202_.nextStratum(); -- this.chat.render(p_329202_, this.getFont(), this.tickCount, i, j, false, false); -+ net.minecraftforge.client.ForgeHooksClient.onCustomizeChatEvent(p_329202_, this.chat, window, i, j, this.tickCount, this.getFont()); + graphics.nextStratum(); +- this.chat.extractRenderState(graphics, this.getFont(), this.tickCount, i, j, ChatComponent.DisplayMode.BACKGROUND, false); ++ net.minecraftforge.client.ForgeHooksClient.onCustomizeChatEvent(graphics, this.chat, window, i, j, this.tickCount, this.getFont()); } } -@@ -476,6 +_,8 @@ +@@ -475,6 +_,8 @@ for (MobEffectInstance mobeffectinstance : Ordering.natural().reverse().sortedCopy(collection)) { Holder holder = mobeffectinstance.getEffect(); + var renderer = net.minecraftforge.client.extensions.common.IClientMobEffectExtensions.of(mobeffectinstance); + if (!renderer.isVisibleInGui(mobeffectinstance)) continue; if (mobeffectinstance.showIcon()) { - int k = p_282812_.guiWidth(); + int k = graphics.guiWidth(); int l = 1; -@@ -506,6 +_,7 @@ +@@ -505,6 +_,7 @@ } } -+ if (renderer.renderGuiIcon(mobeffectinstance, this, p_282812_, k, l, 0, f)) continue; - p_282812_.blitSprite(RenderPipelines.GUI_TEXTURED, getMobEffectSprite(holder), k + 3, l + 3, 18, 18, ARGB.white(f)); ++ if (renderer.extractGuiIcon(mobeffectinstance, this, graphics, k, l, 0, f)) continue; + graphics.blitSprite(RenderPipelines.GUI_TEXTURED, getMobEffectSprite(holder), k + 3, l + 3, 18, 18, ARGB.white(f)); } } -@@ -602,6 +_,10 @@ +@@ -605,6 +_,10 @@ } - public void renderSelectedItemName(GuiGraphics p_283501_) { -+ renderSelectedItemName(p_283501_, 0); + public void extractSelectedItemName(final GuiGraphicsExtractor graphics) { ++ renderSelectedItemName(graphics, 0); + } + -+ public void renderSelectedItemName(GuiGraphics p_283501_, int yShift) { - Profiler.get().push("selectedItemName"); ++ public void renderSelectedItemName(final GuiGraphicsExtractor graphics, int yShift) { if (this.toolHighlightTimer > 0 && !this.lastToolHighlight.isEmpty()) { - MutableComponent mutablecomponent = Component.empty().append(this.lastToolHighlight.getHoverName()).withStyle(this.lastToolHighlight.getRarity().color()); -@@ -609,9 +_,13 @@ + MutableComponent mutablecomponent = Component.empty() + .append(this.lastToolHighlight.getHoverName()) +@@ -613,9 +_,13 @@ mutablecomponent.withStyle(ChatFormatting.ITALIC); } @@ -75,27 +75,29 @@ + if (font == null) + font = this.getFont(); + int i = font.width(highlightTip); - int j = (p_283501_.guiWidth() - i) / 2; -- int k = p_283501_.guiHeight() - 59; -+ int k = p_283501_.guiHeight() - Math.max(yShift, 59); + int j = (graphics.guiWidth() - i) / 2; +- int k = graphics.guiHeight() - 59; ++ int k = graphics.guiHeight() - Math.max(yShift, 59); if (!this.minecraft.gameMode.canHurtPlayer()) { k += 14; } -@@ -622,7 +_,7 @@ +@@ -626,7 +_,7 @@ } if (l > 0) { -- p_283501_.drawStringWithBackdrop(this.getFont(), mutablecomponent, j, k, i, ARGB.white(l)); -+ p_283501_.drawStringWithBackdrop(font, highlightTip, j, k, i, ARGB.white(l)); +- graphics.textWithBackdrop(this.getFont(), mutablecomponent, j, k, i, ARGB.white(l)); ++ graphics.textWithBackdrop(font, highlightTip, j, k, i, ARGB.white(l)); } } - -@@ -1148,7 +_,7 @@ - ItemStack itemstack = this.minecraft.player.getInventory().getSelectedItem(); - if (itemstack.isEmpty()) { + } +@@ -1165,7 +_,9 @@ this.toolHighlightTimer = 0; -- } else if (this.lastToolHighlight.isEmpty() || !itemstack.is(this.lastToolHighlight.getItem()) || !itemstack.getHoverName().equals(this.lastToolHighlight.getHoverName())) { -+ } else if (this.lastToolHighlight.isEmpty() || !itemstack.is(this.lastToolHighlight.getItem()) || !itemstack.getHoverName().equals(this.lastToolHighlight.getHoverName()) || !itemstack.getHighlightTip(itemstack.getHoverName()).equals(lastToolHighlight.getHighlightTip(lastToolHighlight.getHoverName()))) { + } else if (this.lastToolHighlight.isEmpty() + || !itemstack.is(this.lastToolHighlight.getItem()) +- || !itemstack.getHoverName().equals(this.lastToolHighlight.getHoverName())) { ++ || !itemstack.getHoverName().equals(this.lastToolHighlight.getHoverName()) ++ || !itemstack.getHighlightTip(itemstack.getHoverName()).equals(lastToolHighlight.getHighlightTip(lastToolHighlight.getHoverName())) ++ ) { this.toolHighlightTimer = (int)(40.0 * this.minecraft.options.notificationDisplayTime().get()); } else if (this.toolHighlightTimer > 0) { this.toolHighlightTimer--; diff --git a/patches/minecraft/net/minecraft/client/gui/GuiGraphics.java.patch b/patches/minecraft/net/minecraft/client/gui/GuiGraphics.java.patch deleted file mode 100644 index 7a27b0d1fa..0000000000 --- a/patches/minecraft/net/minecraft/client/gui/GuiGraphics.java.patch +++ /dev/null @@ -1,164 +0,0 @@ ---- a/net/minecraft/client/gui/GuiGraphics.java -+++ b/net/minecraft/client/gui/GuiGraphics.java -@@ -86,7 +_,7 @@ - import org.jspecify.annotations.Nullable; - - @OnlyIn(Dist.CLIENT) --public class GuiGraphics { -+public class GuiGraphics implements net.minecraftforge.client.extensions.IForgeGuiGraphics { - private static final int EXTRA_SPACE_AFTER_FIRST_TOOLTIP_LINE = 2; - final Minecraft minecraft; - private final Matrix3x2fStack pose; -@@ -972,6 +_,7 @@ - CrashReport crashreport = CrashReport.forThrowable(throwable, "Rendering item"); - CrashReportCategory crashreportcategory = crashreport.addCategory("Item being rendered"); - crashreportcategory.setDetail("Item Type", () -> String.valueOf(p_283653_.getItem())); -+ crashreportcategory.setDetail("Registry Name", () -> String.valueOf(net.minecraftforge.registries.ForgeRegistries.ITEMS.getKey(p_283653_.getItem()))); - crashreportcategory.setDetail("Item Components", () -> String.valueOf(p_283653_.getComponents())); - crashreportcategory.setDetail("Item Foil", () -> String.valueOf(p_283653_.hasFoil())); - throw new ReportedException(crashreport); -@@ -990,6 +_,7 @@ - this.renderItemCooldown(p_283349_, p_282641_, p_282146_); - this.renderItemCount(p_282005_, p_283349_, p_282641_, p_282146_, p_282803_); - this.pose.popMatrix(); -+ net.minecraftforge.client.ItemDecoratorHandler.of(p_283349_).render(this, p_282005_, p_283349_, p_282641_, p_282146_); - } - } - -@@ -1001,21 +_,30 @@ - this.setTooltipForNextFrame(this.minecraft.font, p_407686_, DefaultTooltipPositioner.INSTANCE, p_410475_, p_407139_, false); - } - -+ private ItemStack tooltipStack = ItemStack.EMPTY; -+ - public void setTooltipForNextFrame(Font p_408152_, ItemStack p_410145_, int p_410585_, int p_408354_) { -+ this.tooltipStack = p_410145_; - this.setTooltipForNextFrame( - p_408152_, Screen.getTooltipFromItem(this.minecraft, p_410145_), p_410145_.getTooltipImage(), p_410585_, p_408354_, p_410145_.get(DataComponents.TOOLTIP_STYLE) - ); -+ this.tooltipStack = ItemStack.EMPTY; - } - - public void setTooltipForNextFrame(Font p_407170_, List p_407123_, Optional p_409349_, int p_406573_, int p_409911_) { - this.setTooltipForNextFrame(p_407170_, p_407123_, p_409349_, p_406573_, p_409911_, null); - } - -+ public void setTooltipForNextFrame(Font font, List textComponents, Optional tooltipComponent, ItemStack stack, int mouseX, int mouseY) { -+ this.tooltipStack = stack; -+ this.setTooltipForNextFrame(font, textComponents, tooltipComponent, mouseX, mouseY, stack.get(DataComponents.TOOLTIP_STYLE)); -+ this.tooltipStack = ItemStack.EMPTY; -+ } -+ - public void setTooltipForNextFrame( - Font p_408450_, List p_405939_, Optional p_456997_, int p_409519_, int p_410392_, @Nullable Identifier p_460731_ - ) { -- List list = p_405939_.stream().map(Component::getVisualOrderText).map(ClientTooltipComponent::create).collect(Util.toMutableList()); -- p_456997_.ifPresent(p_325321_ -> list.add(list.isEmpty() ? 0 : 1, ClientTooltipComponent.create(p_325321_))); -+ List list = net.minecraftforge.client.ForgeHooksClient.gatherTooltipComponents(this.tooltipStack, p_405939_, p_456997_, p_409519_, guiWidth(), guiHeight(), p_408450_); - this.setTooltipForNextFrameInternal(p_408450_, list, p_409519_, p_410392_, DefaultTooltipPositioner.INSTANCE, p_460731_, false); - } - -@@ -1028,7 +_,22 @@ - } - - public void setComponentTooltipForNextFrame(Font p_406239_, List p_410275_, int p_410594_, int p_409343_) { -- this.setComponentTooltipForNextFrame(p_406239_, p_410275_, p_410594_, p_409343_, null); -+ List components = net.minecraftforge.client.ForgeHooksClient.gatherTooltipComponents(this.tooltipStack, p_410275_, p_410594_, guiWidth(), guiHeight(), p_406239_); -+ this.setTooltipForNextFrameInternal(p_406239_, components, p_410594_, p_409343_, DefaultTooltipPositioner.INSTANCE, null, false); -+ } -+ -+ public void renderComponentTooltip(Font font, List tooltips, int mouseX, int mouseY, ItemStack stack) { -+ this.tooltipStack = stack; -+ List components = net.minecraftforge.client.ForgeHooksClient.gatherTooltipComponents(stack, tooltips, mouseX, guiWidth(), guiHeight(), font); -+ this.setTooltipForNextFrameInternal(font, components, mouseX, mouseY, DefaultTooltipPositioner.INSTANCE, null, false); -+ this.tooltipStack = ItemStack.EMPTY; -+ } -+ -+ public void renderComponentTooltipFromElements(Font font, List> elements, int mouseX, int mouseY, ItemStack stack) { -+ this.tooltipStack = stack; -+ List components = net.minecraftforge.client.ForgeHooksClient.gatherTooltipComponentsFromElements(stack, elements, mouseX, guiWidth(), guiHeight(), font); -+ this.setTooltipForNextFrameInternal(font, components, mouseX, mouseY, DefaultTooltipPositioner.INSTANCE, null, false); -+ this.tooltipStack = ItemStack.EMPTY; - } - - public void setComponentTooltipForNextFrame(Font p_408650_, List p_407512_, int p_406019_, int p_408123_, @Nullable Identifier p_456486_) { -@@ -1073,24 +_,31 @@ - int p_407794_, - int p_408784_, - ClientTooltipPositioner p_408798_, -- @Nullable Identifier p_451079_, -+ @Nullable Identifier p_456486_, - boolean p_410618_ - ) { - if (!p_409928_.isEmpty()) { - if (this.deferredTooltip == null || p_410618_) { -- this.deferredTooltip = () -> this.renderTooltip(p_406605_, p_409928_, p_407794_, p_408784_, p_408798_, p_451079_); -+ final var stackContext = this.tooltipStack; -+ this.deferredTooltip = () -> this.renderTooltip(p_406605_, p_409928_, p_407794_, p_408784_, p_408798_, p_456486_, stackContext); - } - } -+ } -+ -+ public void renderTooltip(Font p_283128_, List p_282716_, int p_283678_, int p_281696_, ClientTooltipPositioner p_409451_, @Nullable Identifier p_456486_) { -+ renderTooltip(p_283128_, p_282716_, p_283678_, p_281696_, p_409451_, p_456486_, ItemStack.EMPTY); - } - - public void renderTooltip( -- Font p_283128_, List p_282716_, int p_283678_, int p_281696_, ClientTooltipPositioner p_409451_, @Nullable Identifier p_459396_ -+ Font p_283128_, List p_282716_, int p_283678_, int p_281696_, ClientTooltipPositioner p_409451_, @Nullable Identifier p_459396_, ItemStack itemstack - ) { -+ var preEvent = net.minecraftforge.client.ForgeHooksClient.onRenderTooltipPre(itemstack, this, p_283678_, p_281696_, guiWidth(), guiHeight(), p_282716_, p_283128_, p_409451_, p_459396_); -+ if (preEvent == null) return; - int i = 0; - int j = p_282716_.size() == 1 ? -2 : 0; - - for (ClientTooltipComponent clienttooltipcomponent : p_282716_) { -- int k = clienttooltipcomponent.getWidth(p_283128_); -+ int k = clienttooltipcomponent.getWidth(preEvent.getFont()); - if (k > i) { - i = k; - } -@@ -1100,16 +_,16 @@ - - int l1 = i; - int i2 = j; -- Vector2ic vector2ic = p_409451_.positionTooltip(this.guiWidth(), this.guiHeight(), p_283678_, p_281696_, i, j); -+ Vector2ic vector2ic = p_409451_.positionTooltip(this.guiWidth(), this.guiHeight(), preEvent.getX(), preEvent.getY(), i, j); - int l = vector2ic.x(); - int i1 = vector2ic.y(); - this.pose.pushMatrix(); -- TooltipRenderUtil.renderTooltipBackground(this, l, i1, i, j, p_459396_); -+ TooltipRenderUtil.renderTooltipBackground(this, l, i1, i, j, preEvent.getBackground()); - int j1 = i1; - - for (int k1 = 0; k1 < p_282716_.size(); k1++) { - ClientTooltipComponent clienttooltipcomponent1 = p_282716_.get(k1); -- clienttooltipcomponent1.renderText(this, p_283128_, l, j1); -+ clienttooltipcomponent1.renderText(this, preEvent.getFont(), l, j1); - j1 += clienttooltipcomponent1.getHeight(p_283128_) + (k1 == 0 ? 2 : 0); - } - -@@ -1117,7 +_,7 @@ - - for (int j2 = 0; j2 < p_282716_.size(); j2++) { - ClientTooltipComponent clienttooltipcomponent2 = p_282716_.get(j2); -- clienttooltipcomponent2.renderImage(p_283128_, l, j1, l1, i2, this); -+ clienttooltipcomponent2.renderImage(preEvent.getFont(), l, j1, l1, i2, this); - j1 += clienttooltipcomponent2.getHeight(p_283128_) + (j2 == 0 ? 2 : 0); - } - -@@ -1328,6 +_,14 @@ - - public void submitProfilerChartRenderState(List p_408565_, int p_410147_, int p_406156_, int p_407365_, int p_408180_) { - this.guiRenderState.submitPicturesInPictureState(new GuiProfilerChartRenderState(p_408565_, p_410147_, p_406156_, p_407365_, p_408180_, this.scissorStack.peek())); -+ } -+ -+ public GuiRenderState getRenderState() { -+ return this.guiRenderState; -+ } -+ -+ public GuiGraphics.ScissorStack getScissorStack() { -+ return this.scissorStack; - } - - public TextureAtlasSprite getSprite(Material p_430745_) { diff --git a/patches/minecraft/net/minecraft/client/gui/GuiGraphicsExtractor.java.patch b/patches/minecraft/net/minecraft/client/gui/GuiGraphicsExtractor.java.patch new file mode 100644 index 0000000000..3022b44b22 --- /dev/null +++ b/patches/minecraft/net/minecraft/client/gui/GuiGraphicsExtractor.java.patch @@ -0,0 +1,171 @@ +--- a/net/minecraft/client/gui/GuiGraphicsExtractor.java ++++ b/net/minecraft/client/gui/GuiGraphicsExtractor.java +@@ -88,7 +_,7 @@ + import org.jspecify.annotations.Nullable; + + @OnlyIn(Dist.CLIENT) +-public class GuiGraphicsExtractor { ++public class GuiGraphicsExtractor implements net.minecraftforge.client.extensions.IForgeGuiGraphicsExtractor { + private static final int EXTRA_SPACE_AFTER_FIRST_TOOLTIP_LINE = 2; + private final Minecraft minecraft; + private final Matrix3x2fStack pose; +@@ -867,6 +_,7 @@ + CrashReport crashreport = CrashReport.forThrowable(throwable, "Rendering item"); + CrashReportCategory crashreportcategory = crashreport.addCategory("Item being rendered"); + crashreportcategory.setDetail("Item Type", () -> String.valueOf(itemStack.getItem())); ++ crashreportcategory.setDetail("Registry Name", () -> String.valueOf(net.minecraftforge.registries.ForgeRegistries.ITEMS.getKey(itemStack.getItem()))); + crashreportcategory.setDetail("Item Components", () -> String.valueOf(itemStack.getComponents())); + crashreportcategory.setDetail("Item Foil", () -> String.valueOf(itemStack.hasFoil())); + throw new ReportedException(crashreport); +@@ -893,6 +_,7 @@ + this.itemCooldown(itemStack, x, y); + this.itemCount(font, itemStack, x, y, countText); + this.pose.popMatrix(); ++ net.minecraftforge.client.ItemDecoratorHandler.of(itemStack).render(this, font, itemStack, x, y); + } + } + +@@ -1069,16 +_,25 @@ + this.setTooltipForNextFrame(this.minecraft.font, formattedCharSequences, DefaultTooltipPositioner.INSTANCE, x, y, false); + } + ++ private ItemStack tooltipStack = ItemStack.EMPTY; + public void setTooltipForNextFrame(final Font font, final ItemStack itemStack, final int xo, final int yo) { ++ this.tooltipStack = itemStack; + this.setTooltipForNextFrame( + font, Screen.getTooltipFromItem(this.minecraft, itemStack), itemStack.getTooltipImage(), xo, yo, itemStack.get(DataComponents.TOOLTIP_STYLE) + ); ++ this.tooltipStack = ItemStack.EMPTY; + } + + public void setTooltipForNextFrame(final Font font, final List texts, final Optional optionalImage, final int xo, final int yo) { + this.setTooltipForNextFrame(font, texts, optionalImage, xo, yo, null); + } + ++ public void setTooltipForNextFrame(Font font, List texts, Optional optionalImage, ItemStack stack, int xo, int yo) { ++ this.tooltipStack = stack; ++ this.setTooltipForNextFrame(font, texts, optionalImage, xo, yo, stack.get(DataComponents.TOOLTIP_STYLE)); ++ this.tooltipStack = ItemStack.EMPTY; ++ } ++ + public void setTooltipForNextFrame( + final Font font, + final List texts, +@@ -1087,8 +_,7 @@ + final int yo, + final @Nullable Identifier style + ) { +- List list = texts.stream().map(Component::getVisualOrderText).map(ClientTooltipComponent::create).collect(Util.toMutableList()); +- optionalImage.ifPresent(image -> list.add(list.isEmpty() ? 0 : 1, ClientTooltipComponent.create(image))); ++ List list = net.minecraftforge.client.ForgeHooksClient.gatherTooltipComponents(this.tooltipStack, texts, optionalImage, xo, guiWidth(), guiHeight(), font); + this.setTooltipForNextFrameInternal(font, list, xo, yo, DefaultTooltipPositioner.INSTANCE, style, false); + } + +@@ -1116,7 +_,22 @@ + } + + public void setComponentTooltipForNextFrame(final Font font, final List lines, final int xo, final int yo) { +- this.setComponentTooltipForNextFrame(font, lines, xo, yo, null); ++ List components = net.minecraftforge.client.ForgeHooksClient.gatherTooltipComponents(this.tooltipStack, lines, xo, guiWidth(), guiHeight(), font); ++ this.setTooltipForNextFrameInternal(font, components, xo, yo, DefaultTooltipPositioner.INSTANCE, null, false); ++ } ++ ++ public void renderComponentTooltip(Font font, List lines, int xo, int yo, ItemStack stack) { ++ this.tooltipStack = stack; ++ List components = net.minecraftforge.client.ForgeHooksClient.gatherTooltipComponents(stack, lines, xo, guiWidth(), guiHeight(), font); ++ this.setTooltipForNextFrameInternal(font, components, xo, yo, DefaultTooltipPositioner.INSTANCE, null, false); ++ this.tooltipStack = ItemStack.EMPTY; ++ } ++ ++ public void renderComponentTooltipFromElements(Font font, List> lines, int xo, int yo, ItemStack stack) { ++ this.tooltipStack = stack; ++ List components = net.minecraftforge.client.ForgeHooksClient.gatherTooltipComponentsFromElements(stack, lines, xo, guiWidth(), guiHeight(), font); ++ this.setTooltipForNextFrameInternal(font, components, xo, yo, DefaultTooltipPositioner.INSTANCE, null, false); ++ this.tooltipStack = ItemStack.EMPTY; + } + + public void setComponentTooltipForNextFrame(final Font font, final List lines, final int xo, final int yo, final @Nullable Identifier style) { +@@ -1167,10 +_,16 @@ + ) { + if (!lines.isEmpty()) { + if (this.deferredTooltip == null || replaceExisting) { +- this.deferredTooltip = () -> this.tooltip(font, lines, xo, yo, positioner, style); ++ final var stackContext = this.tooltipStack; ++ this.deferredTooltip = () -> this.tooltip(font, lines, xo, yo, positioner, style, stackContext); + } + } + } ++ ++ public void tooltip(Font font, List lines, int xo, int yo, ClientTooltipPositioner positioner, @Nullable Identifier style) { ++ tooltip(font, lines, xo, yo, positioner, style, ItemStack.EMPTY); ++ } ++ + + public void tooltip( + final Font font, +@@ -1178,13 +_,16 @@ + final int xo, + final int yo, + final ClientTooltipPositioner positioner, +- final @Nullable Identifier style ++ final @Nullable Identifier style, ++ ItemStack itemstack + ) { ++ var preEvent = net.minecraftforge.client.ForgeHooksClient.onRenderTooltipPre(itemstack, this, xo, yo, guiWidth(), guiHeight(), lines, font, positioner, style); ++ if (preEvent == null) return; + int i = 0; + int j = lines.size() == 1 ? -2 : 0; + + for (ClientTooltipComponent clienttooltipcomponent : lines) { +- int k = clienttooltipcomponent.getWidth(font); ++ int k = clienttooltipcomponent.getWidth(preEvent.getFont()); + if (k > i) { + i = k; + } +@@ -1194,25 +_,25 @@ + + int l1 = i; + int i2 = j; +- Vector2ic vector2ic = positioner.positionTooltip(this.guiWidth(), this.guiHeight(), xo, yo, i, j); ++ Vector2ic vector2ic = positioner.positionTooltip(this.guiWidth(), this.guiHeight(), preEvent.getX(), preEvent.getY(), i, j); + int l = vector2ic.x(); + int i1 = vector2ic.y(); + this.pose.pushMatrix(); +- TooltipRenderUtil.extractTooltipBackground(this, l, i1, i, j, style); ++ TooltipRenderUtil.extractTooltipBackground(this, l, i1, i, j, preEvent.getBackground()); + int j1 = i1; + + for (int k1 = 0; k1 < lines.size(); k1++) { + ClientTooltipComponent clienttooltipcomponent1 = lines.get(k1); +- clienttooltipcomponent1.extractText(this, font, l, j1); +- j1 += clienttooltipcomponent1.getHeight(font) + (k1 == 0 ? 2 : 0); ++ clienttooltipcomponent1.extractText(this, preEvent.getFont(), l, j1); ++ j1 += clienttooltipcomponent1.getHeight(preEvent.getFont()) + (k1 == 0 ? 2 : 0); + } + + j1 = i1; + + for (int j2 = 0; j2 < lines.size(); j2++) { + ClientTooltipComponent clienttooltipcomponent2 = lines.get(j2); +- clienttooltipcomponent2.extractImage(font, l, j1, l1, i2, this); +- j1 += clienttooltipcomponent2.getHeight(font) + (j2 == 0 ? 2 : 0); ++ clienttooltipcomponent2.extractImage(preEvent.getFont(), l, j1, l1, i2, this); ++ j1 += clienttooltipcomponent2.getHeight(preEvent.getFont()) + (j2 == 0 ? 2 : 0); + } + + this.pose.popMatrix(); +@@ -1287,6 +_,14 @@ + + private ActiveTextCollector.Parameters createDefaultTextParameters(final float opacity) { + return new ActiveTextCollector.Parameters(new Matrix3x2f(this.pose), opacity, this.scissorStack.peek()); ++ } ++ ++ public GuiRenderState getRenderState() { ++ return this.guiRenderState; ++ } ++ ++ public GuiGraphicsExtractor.ScissorStack getScissorStack() { ++ return this.scissorStack; + } + + @OnlyIn(Dist.CLIENT) diff --git a/patches/minecraft/net/minecraft/client/gui/components/AbstractWidget.java.patch b/patches/minecraft/net/minecraft/client/gui/components/AbstractWidget.java.patch index ec5506bcfb..7fa0c6a30d 100644 --- a/patches/minecraft/net/minecraft/client/gui/components/AbstractWidget.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/components/AbstractWidget.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/client/gui/components/AbstractWidget.java +++ b/net/minecraft/client/gui/components/AbstractWidget.java @@ -221,6 +_,23 @@ - this.focused = p_93693_; + this.focused = focused; } + public static final int UNSET_FG_COLOR = -1; diff --git a/patches/minecraft/net/minecraft/client/gui/components/BossHealthOverlay.java.patch b/patches/minecraft/net/minecraft/client/gui/components/BossHealthOverlay.java.patch index 7b7dd0003d..bdd5333e13 100644 --- a/patches/minecraft/net/minecraft/client/gui/components/BossHealthOverlay.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/components/BossHealthOverlay.java.patch @@ -1,20 +1,20 @@ --- a/net/minecraft/client/gui/components/BossHealthOverlay.java +++ b/net/minecraft/client/gui/components/BossHealthOverlay.java -@@ -67,13 +_,16 @@ +@@ -68,13 +_,16 @@ for (LerpingBossEvent lerpingbossevent : this.events.values()) { int k = i / 2 - 91; -+ var event = net.minecraftforge.client.ForgeHooksClient.onCustomizeBossEventProgress(p_283175_, this.minecraft.getWindow(), lerpingbossevent, k, j, 10 + this.minecraft.font.lineHeight); ++ var event = net.minecraftforge.client.ForgeHooksClient.onCustomizeBossEventProgress(graphics, this.minecraft.getWindow(), lerpingbossevent, k, j, 10 + this.minecraft.font.lineHeight); + if (event != null) { - this.drawBar(p_283175_, k, j, lerpingbossevent); + this.extractBar(graphics, k, j, lerpingbossevent); Component component = lerpingbossevent.getName(); int l = this.minecraft.font.width(component); int i1 = i / 2 - l / 2; int j1 = j - 9; - p_283175_.drawString(this.minecraft.font, component, i1, j1, -1); + graphics.text(this.minecraft.font, component, i1, j1, -1); - j += 10 + 9; + } + j += event.getIncrement(); - if (j >= p_283175_.guiHeight() / 3) { + if (j >= graphics.guiHeight() / 3) { break; } diff --git a/patches/minecraft/net/minecraft/client/gui/components/Button.java.patch b/patches/minecraft/net/minecraft/client/gui/components/Button.java.patch index 4d0baf356f..20b60d68c4 100644 --- a/patches/minecraft/net/minecraft/client/gui/components/Button.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/components/Button.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/client/gui/components/Button.java +++ b/net/minecraft/client/gui/components/Button.java -@@ -33,6 +_,12 @@ - this.createNarration = p_259552_; +@@ -39,6 +_,12 @@ + this.createNarration = createNarration; } + // Forge (GH-9238) @@ -11,9 +11,9 @@ + } + @Override - public void onPress(InputWithModifiers p_424878_) { + public void onPress(final InputWithModifiers input) { this.onPress.onPress(this); -@@ -96,9 +_,12 @@ +@@ -102,9 +_,12 @@ } public Button build() { @@ -29,10 +29,10 @@ } } -@@ -118,6 +_,10 @@ - int p_455297_, int p_455388_, int p_459653_, int p_452847_, Component p_459347_, Button.OnPress p_453378_, Button.CreateNarration p_456163_ +@@ -130,6 +_,10 @@ + final Button.CreateNarration createNarration ) { - super(p_455297_, p_455388_, p_459653_, p_452847_, p_459347_, p_453378_, p_456163_); + super(x, y, width, height, message, onPress, createNarration); + } + + protected Plain(Builder builder) { diff --git a/patches/minecraft/net/minecraft/client/gui/components/debug/DebugEntryLookingAtEntity.java.patch b/patches/minecraft/net/minecraft/client/gui/components/debug/DebugEntryLookingAtEntity.java.patch index 5e7fbe8aa2..4021699366 100644 --- a/patches/minecraft/net/minecraft/client/gui/components/debug/DebugEntryLookingAtEntity.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/components/debug/DebugEntryLookingAtEntity.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/client/gui/components/debug/DebugEntryLookingAtEntity.java +++ b/net/minecraft/client/gui/components/debug/DebugEntryLookingAtEntity.java -@@ -25,6 +_,7 @@ +@@ -29,6 +_,7 @@ if (entity != null) { list.add(ChatFormatting.UNDERLINE + "Targeted Entity"); - list.add(String.valueOf(BuiltInRegistries.ENTITY_TYPE.getKey(entity.getType()))); + list.add(entity.typeHolder().getRegisteredName()); + entity.getType().builtInRegistryHolder().tags().forEach(t -> list.add("#" + t.location())); } - p_426755_.addToGroup(GROUP, list); + displayer.addToGroup(GROUP, list); diff --git a/patches/minecraft/net/minecraft/client/gui/components/toasts/ToastManager.java.patch b/patches/minecraft/net/minecraft/client/gui/components/toasts/ToastManager.java.patch index 7748660371..6b3471dc2e 100644 --- a/patches/minecraft/net/minecraft/client/gui/components/toasts/ToastManager.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/components/toasts/ToastManager.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/client/gui/components/toasts/ToastManager.java +++ b/net/minecraft/client/gui/components/toasts/ToastManager.java -@@ -142,6 +_,7 @@ +@@ -143,6 +_,7 @@ } - public void addToast(Toast p_360768_) { -+ if (net.minecraftforge.client.event.ForgeEventFactoryClient.onToastAdd(p_360768_)) return; - this.queued.add(p_360768_); + public void addToast(final Toast toast) { ++ if (net.minecraftforge.client.event.ForgeEventFactoryClient.onToastAdd(toast)) return; + this.queued.add(toast); } diff --git a/patches/minecraft/net/minecraft/client/gui/render/GuiRenderer.java.patch b/patches/minecraft/net/minecraft/client/gui/render/GuiRenderer.java.patch index ccc3b32802..9437099d7e 100644 --- a/patches/minecraft/net/minecraft/client/gui/render/GuiRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/render/GuiRenderer.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/client/gui/render/GuiRenderer.java +++ b/net/minecraft/client/gui/render/GuiRenderer.java -@@ -138,6 +_,7 @@ +@@ -131,6 +_,7 @@ builder.put((Class)pictureinpicturerenderer.getRenderStateClass(), pictureinpicturerenderer); } -+ net.minecraftforge.client.ForgeHooksClient.onRegisterPictureInPictureRenderers(p_410565_, p_410441_, builder); ++ net.minecraftforge.client.ForgeHooksClient.onRegisterPictureInPictureRenderers(pictureInPictureRenderers, bufferSource, builder); this.pictureInPictureRenderers = builder.buildOrThrow(); } diff --git a/patches/minecraft/net/minecraft/client/gui/screens/ChatScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/ChatScreen.java.patch index d09f7af5d3..2458106002 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/ChatScreen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/ChatScreen.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/client/gui/screens/ChatScreen.java +++ b/net/minecraft/client/gui/screens/ChatScreen.java -@@ -115,6 +_,7 @@ - } else if (p_426273_.isConfirmation()) { - this.handleChatInput(this.input.getValue(), true); - this.exitReason = ChatScreen.ExitReason.DONE; -+ if (this.minecraft.screen == this) // FORGE: Prevent closing the screen if another screen has been opened. - this.minecraft.setScreen(null); - return true; - } else { +@@ -139,6 +_,7 @@ + this.handleChatInput(this.input.getValue(), true); + if (this.closeOnSubmit) { + this.exitReason = ChatScreen.ExitReason.DONE; ++ if (this.minecraft.screen == this) // FORGE: Prevent closing the screen if another screen has been opened. + this.minecraft.setScreen(null); + } else { + this.input.setValue(""); diff --git a/patches/minecraft/net/minecraft/client/gui/screens/ConnectScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/ConnectScreen.java.patch index a25bf46104..3e3207b92d 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/ConnectScreen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/ConnectScreen.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/client/gui/screens/ConnectScreen.java +++ b/net/minecraft/client/gui/screens/ConnectScreen.java -@@ -102,6 +_,8 @@ +@@ -114,6 +_,8 @@ } if (optional.isEmpty()) { -+ ConnectScreen.LOGGER.error("Couldn't connect to server: Unknown host \"{}\"", p_249536_.getHost()); ++ ConnectScreen.LOGGER.error("Couldn't connect to server: Unknown host \"{}\"", hostAndPort.getHost()); + net.minecraftforge.network.DualStackUtils.logInitialPreferences(); - p_251955_.execute( - () -> p_251955_.setScreen(new DisconnectedScreen(ConnectScreen.this.parent, ConnectScreen.this.connectFailedTitle, ConnectScreen.UNKNOWN_HOST_MESSAGE)) - ); + minecraft.execute( + () -> minecraft.setScreen( + new DisconnectedScreen(ConnectScreen.this.parent, ConnectScreen.this.connectFailedTitle, ConnectScreen.UNKNOWN_HOST_MESSAGE) diff --git a/patches/minecraft/net/minecraft/client/gui/screens/LoadingOverlay.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/LoadingOverlay.java.patch index 02a700943b..e8ad174ffb 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/LoadingOverlay.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/LoadingOverlay.java.patch @@ -1,25 +1,25 @@ --- a/net/minecraft/client/gui/screens/LoadingOverlay.java +++ b/net/minecraft/client/gui/screens/LoadingOverlay.java -@@ -63,6 +_,8 @@ - return p_169325_ & 16777215 | p_169326_ << 24; +@@ -64,6 +_,8 @@ + return color & 16777215 | alpha << 24; } -+ protected boolean renderContents(GuiGraphics gui, float alpha) { return true; } ++ protected boolean extractContentRenderState(final GuiGraphicsExtractor graphics, float alpha) { return true; } + @Override - public void render(GuiGraphics p_281839_, int p_282704_, int p_283650_, float p_283394_) { - int i = p_281839_.guiWidth(); + public void extractRenderState(final GuiGraphicsExtractor graphics, final int mouseX, final int mouseY, final float a) { + int i = graphics.guiWidth(); @@ -103,6 +_,7 @@ f2 = 1.0F; } -+ if (renderContents(p_281839_, f2)) { - int l2 = (int)(p_281839_.guiWidth() * 0.5); - int i1 = (int)(p_281839_.guiHeight() * 0.5); - double d0 = Math.min(p_281839_.guiWidth() * 0.75, (double)p_281839_.guiHeight()) * 0.25; ++ if (extractContentRenderState(graphics, f2)) { + int k2 = (int)(graphics.guiWidth() * 0.5); + int i1 = (int)(graphics.guiHeight() * 0.5); + double d0 = Math.min(graphics.guiWidth() * 0.75, (double)graphics.guiHeight()) * 0.25; @@ -118,6 +_,7 @@ if (f < 1.0F) { - this.drawProgressBar(p_281839_, i / 2 - k1, i2 - 5, i / 2 + k1, i2 + 5, 1.0F - Mth.clamp(f, 0.0F, 1.0F)); + this.extractProgressBar(graphics, i / 2 - k1, i2 - 5, i / 2 + k1, i2 + 5, 1.0F - Mth.clamp(f, 0.0F, 1.0F)); } + } diff --git a/patches/minecraft/net/minecraft/client/gui/screens/MenuScreens.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/MenuScreens.java.patch index 0c698b161a..0c0ff84c91 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/MenuScreens.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/MenuScreens.java.patch @@ -3,17 +3,17 @@ @@ -41,11 +_,16 @@ private static final Map, MenuScreens.ScreenConstructor> SCREENS = Maps.newHashMap(); - public static void create(MenuType p_96202_, Minecraft p_96203_, int p_96204_, Component p_96205_) { -+ getScreenFactory(p_96202_, p_96203_, p_96204_, p_96205_).ifPresent(f -> f.fromPacket(p_96205_, p_96202_, p_96203_, p_96204_)); + public static void create(final MenuType type, final Minecraft minecraft, final int containerId, final Component title) { ++ getScreenFactory(type, minecraft, containerId, title).ifPresent(f -> f.fromPacket(title, type, minecraft, containerId)); + } + -+ public static java.util.Optional> getScreenFactory(@Nullable MenuType p_96202_, Minecraft p_96203_, int p_96204_, Component p_96205_) { - MenuScreens.ScreenConstructor screenconstructor = getConstructor(p_96202_); ++ public static java.util.Optional> getScreenFactory(@Nullable MenuType type, Minecraft minecraft, int containerId, Component title) { + MenuScreens.ScreenConstructor screenconstructor = getConstructor(type); if (screenconstructor == null) { - LOGGER.warn("Failed to create screen for menu type: {}", BuiltInRegistries.MENU.getKey(p_96202_)); + LOGGER.warn("Failed to create screen for menu type: {}", BuiltInRegistries.MENU.getKey(type)); + return java.util.Optional.empty(); } else { -- screenconstructor.fromPacket(p_96205_, p_96202_, p_96203_, p_96204_); +- screenconstructor.fromPacket(title, type, minecraft, containerId); + return java.util.Optional.of(screenconstructor); } } diff --git a/patches/minecraft/net/minecraft/client/gui/screens/PauseScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/PauseScreen.java.patch index 28f341ddfb..358831c2fc 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/PauseScreen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/PauseScreen.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/client/gui/screens/PauseScreen.java +++ b/net/minecraft/client/gui/screens/PauseScreen.java -@@ -102,6 +_,7 @@ +@@ -104,6 +_,7 @@ } else { gridlayout$rowhelper.addChild(this.openScreenButton(PLAYER_REPORTING, () -> new SocialInteractionsScreen(this))); } + gridlayout$rowhelper.addChild(Button.builder(Component.translatable("fml.menu.mods"), button -> this.minecraft.setScreen(new net.minecraftforge.client.gui.ModListScreen(this))).width(BUTTON_WIDTH_FULL).build(), 2); - this.disconnectButton = gridlayout$rowhelper.addChild(Button.builder(CommonComponents.disconnectButtonLabel(this.minecraft.isLocalServer()), p_280815_ -> { - p_280815_.active = false; + this.disconnectButton = gridlayout$rowhelper.addChild( + Button.builder( diff --git a/patches/minecraft/net/minecraft/client/gui/screens/Screen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/Screen.java.patch index 8aa9980d34..acf649d56d 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/Screen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/Screen.java.patch @@ -8,10 +8,10 @@ + this.minecraft.popGuiLayer(); } - protected T addRenderableWidget(T p_169406_) { + protected T addRenderableWidget(final T widget) { @@ -326,8 +_,10 @@ - this.width = p_96608_; - this.height = p_96609_; + this.width = width; + this.height = height; if (!this.initialized) { + if (!net.minecraftforge.client.event.ScreenEvent.Init.Pre.BUS.post(new net.minecraftforge.client.event.ScreenEvent.Init.Pre(this, this.children, this::addEventWidget, this::removeWidget))) this.init(); @@ -30,20 +30,20 @@ + net.minecraftforge.client.event.ScreenEvent.Init.Post.BUS.post(new net.minecraftforge.client.event.ScreenEvent.Init.Post(this, this.children, this::addEventWidget, this::removeWidget)); } - protected void fadeWidgets(float p_409453_) { + protected void fadeWidgets(final float widgetFade) { @@ -385,6 +_,8 @@ - this.renderMenuBackground(p_283688_); + this.extractMenuBackground(graphics); } -+ net.minecraftforge.client.event.ForgeEventFactoryClient.onRenderScreenBackground(this, p_283688_); ++ net.minecraftforge.client.event.ForgeEventFactoryClient.onRenderScreenBackground(this, graphics); + - this.minecraft.gui.renderDeferredSubtitles(); + this.minecraft.gui.extractDeferredSubtitles(); } -@@ -467,6 +_,19 @@ +@@ -474,6 +_,19 @@ } - public void onFilesDrop(List p_96591_) { + public void onFilesDrop(final List files) { + } + + @Nullable @@ -59,4 +59,4 @@ + this.children.add(guiEventListener); } - private void scheduleNarration(long p_169381_, boolean p_169382_) { + private void scheduleNarration(final long delay, final boolean ignoreSuppression) { diff --git a/patches/minecraft/net/minecraft/client/gui/screens/TitleScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/TitleScreen.java.patch index 69a6fe19d0..d6a50d3fc9 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/TitleScreen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/TitleScreen.java.patch @@ -25,31 +25,31 @@ l = this.createTestWorldButton(l, 24); SpriteIconButton spriteiconbutton = this.addRenderableWidget( @@ -176,7 +_,7 @@ - }).bounds(this.width / 2 - 100, i = p_96764_ + p_96765_, 200, 20).tooltip(tooltip).build()).active = flag; + }).bounds(this.width / 2 - 100, i = topPos + spacing, 200, 20).tooltip(tooltip).build()).active = flag; this.addRenderableWidget( - Button.builder(Component.translatable("menu.online"), p_325369_ -> this.minecraft.setScreen(new RealmsMainScreen(this))) -- .bounds(this.width / 2 - 100, p_96764_ = i + p_96765_, 200, 20) -+ .bounds(this.width / 2 + 2, p_96764_ = i + p_96765_, 98, 20) + Button.builder(Component.translatable("menu.online"), button -> this.minecraft.setScreen(new RealmsMainScreen(this))) +- .bounds(this.width / 2 - 100, topPos = i + spacing, 200, 20) ++ .bounds(this.width / 2 + 2, topPos = i + spacing, 98, 20) .tooltip(tooltip) .build() ) -@@ -295,9 +_,18 @@ +@@ -304,9 +_,18 @@ s = s + I18n.get("menu.modded"); } -- p_282860_.drawString(this.font, s, 2, this.height - 10, ARGB.white(f)); +- graphics.text(this.font, s, 2, this.height - 10, ARGB.white(f)); + final float f_f = f; + net.minecraftforge.internal.BrandingControl.forEachLine(true, true, (brd, brdline) -> -+ p_282860_.drawString(this.font, brd, 2, this.height - ( 10 + brdline * (this.font.lineHeight + 1)), ARGB.color(f_f, -1)) ++ graphics.text(this.font, brd, 2, this.height - ( 10 + brdline * (this.font.lineHeight + 1)), ARGB.color(f_f, -1)) + ); + + net.minecraftforge.internal.BrandingControl.forEachAboveCopyrightLine((brd, brdline) -> -+ p_282860_.drawString(this.font, brd, this.width - font.width(brd), this.height - (10 + (brdline + 1) * ( this.font.lineHeight + 1)), ARGB.color(f_f, -1)) ++ graphics.text(this.font, brd, this.width - font.width(brd), this.height - (10 + (brdline + 1) * ( this.font.lineHeight + 1)), ARGB.color(f_f, -1)) + ); + if (this.realmsNotificationsEnabled() && f >= 1.0F) { - this.realmsNotificationsScreen.render(p_282860_, p_281753_, p_283539_, p_282628_); -+ if (f >= 1.0f) this.modUpdateNotification.render(p_282860_, p_281753_, p_283539_, p_282628_); + this.realmsNotificationsScreen.extractRenderState(graphics, mouseX, mouseY, a); ++ if (f >= 1.0f) this.modUpdateNotification.extractRenderState(graphics, mouseX, mouseY, a); } } diff --git a/patches/minecraft/net/minecraft/client/gui/screens/advancements/AdvancementTab.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/advancements/AdvancementTab.java.patch index f547d3f96a..63f7d1273d 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/advancements/AdvancementTab.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/advancements/AdvancementTab.java.patch @@ -7,9 +7,9 @@ + private int page; public AdvancementTab( - Minecraft p_97145_, AdvancementsScreen p_97146_, AdvancementTabType p_97147_, int p_97148_, AdvancementNode p_297568_, DisplayInfo p_97150_ -@@ -56,6 +_,15 @@ - this.addWidget(this.root, p_297568_.holder()); + final Minecraft minecraft, +@@ -61,6 +_,15 @@ + this.addWidget(this.root, rootNode.holder()); } + public AdvancementTab(Minecraft mc, AdvancementsScreen screen, AdvancementTabType type, int index, int page, AdvancementNode adv, DisplayInfo info) { @@ -24,14 +24,14 @@ public AdvancementTabType getType() { return this.type; } -@@ -150,8 +_,8 @@ +@@ -155,8 +_,8 @@ return null; } else { for (AdvancementTabType advancementtabtype : AdvancementTabType.values()) { -- if (p_97173_ < advancementtabtype.getMax()) { -- return new AdvancementTab(p_97171_, p_97172_, advancementtabtype, p_97173_, p_299876_, optional.get()); -+ if ((p_97173_ % AdvancementTabType.MAX_TABS) < advancementtabtype.getMax()) { -+ return new AdvancementTab(p_97171_, p_97172_, advancementtabtype, p_97173_ % AdvancementTabType.MAX_TABS, p_97173_ / AdvancementTabType.MAX_TABS, p_299876_, optional.get()); +- if (index < advancementtabtype.getMax()) { +- return new AdvancementTab(minecraft, screen, advancementtabtype, index, root, optional.get()); ++ if ((index % AdvancementTabType.MAX_TABS) < advancementtabtype.getMax()) { ++ return new AdvancementTab(minecraft, screen, advancementtabtype, index % AdvancementTabType.MAX_TABS, index / AdvancementTabType.MAX_TABS, root, optional.get()); } - p_97173_ -= advancementtabtype.getMax(); + index -= advancementtabtype.getMax(); diff --git a/patches/minecraft/net/minecraft/client/gui/screens/advancements/AdvancementsScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/advancements/AdvancementsScreen.java.patch index 9de20e03fc..43a5f3f861 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/advancements/AdvancementsScreen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/advancements/AdvancementsScreen.java.patch @@ -1,14 +1,14 @@ --- a/net/minecraft/client/gui/screens/advancements/AdvancementsScreen.java +++ b/net/minecraft/client/gui/screens/advancements/AdvancementsScreen.java -@@ -52,6 +_,7 @@ +@@ -51,6 +_,7 @@ private final Map tabs = Maps.newLinkedHashMap(); private @Nullable AdvancementTab selectedTab; private boolean isScrolling; + private static int tabPage, maxPages; - public AdvancementsScreen(ClientAdvancements p_97340_) { - this(p_97340_, null); -@@ -65,6 +_,19 @@ + public AdvancementsScreen(final ClientAdvancements advancements) { + this(advancements, null); +@@ -64,6 +_,19 @@ @Override protected void init() { @@ -28,33 +28,33 @@ this.layout.addTitleHeader(TITLE, this.font); this.tabs.clear(); this.selectedTab = null; -@@ -109,7 +_,7 @@ +@@ -106,7 +_,7 @@ int j = (this.height - 140) / 2; for (AdvancementTab advancementtab : this.tabs.values()) { -- if (advancementtab.isMouseOver(i, j, p_431395_.x(), p_431395_.y())) { -+ if (advancementtab.getPage() == tabPage && advancementtab.isMouseOver(i, j, p_431395_.x(), p_431395_.y())) { +- if (advancementtab.isMouseOver(i, j, event.x(), event.y())) { ++ if (advancementtab.getPage() == tabPage && advancementtab.isMouseOver(i, j, event.x(), event.y())) { this.advancements.setSelectedTab(advancementtab.getRootNode().holder(), true); break; } -@@ -200,10 +_,12 @@ - p_283395_.blit(RenderPipelines.GUI_TEXTURED, WINDOW_LOCATION, p_281890_, p_282532_, 0.0F, 0.0F, 252, 140, 256, 256); +@@ -197,10 +_,12 @@ + graphics.blit(RenderPipelines.GUI_TEXTURED, WINDOW_LOCATION, xo, yo, 0.0F, 0.0F, 252, 140, 256, 256); if (this.tabs.size() > 1) { for (AdvancementTab advancementtab : this.tabs.values()) { + if (advancementtab.getPage() == tabPage) - advancementtab.drawTab(p_283395_, p_281890_, p_282532_, p_451461_, p_451545_, advancementtab == this.selectedTab); + advancementtab.extractTab(graphics, xo, yo, mouseX, mouseY, advancementtab == this.selectedTab); } for (AdvancementTab advancementtab1 : this.tabs.values()) { + if (advancementtab1.getPage() == tabPage) - advancementtab1.drawIcon(p_283395_, p_281890_, p_282532_); + advancementtab1.extractIcon(graphics, xo, yo); } } -@@ -222,6 +_,7 @@ +@@ -219,6 +_,7 @@ if (this.tabs.size() > 1) { for (AdvancementTab advancementtab : this.tabs.values()) { + if (advancementtab.getPage() == tabPage) - if (advancementtab.isMouseOver(p_281519_, p_283371_, p_283556_, p_282458_)) { - p_282784_.setTooltipForNextFrame(this.font, advancementtab.getTitle(), p_283556_, p_282458_); + if (advancementtab.isMouseOver(xo, yo, mouseX, mouseY)) { + graphics.setTooltipForNextFrame(this.font, advancementtab.getTitle(), mouseX, mouseY); } diff --git a/patches/minecraft/net/minecraft/client/gui/screens/inventory/AbstractContainerScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/inventory/AbstractContainerScreen.java.patch index 9e3b7bf433..6e2473bea1 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/inventory/AbstractContainerScreen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/inventory/AbstractContainerScreen.java.patch @@ -1,119 +1,121 @@ --- a/net/minecraft/client/gui/screens/inventory/AbstractContainerScreen.java +++ b/net/minecraft/client/gui/screens/inventory/AbstractContainerScreen.java -@@ -102,6 +_,7 @@ +@@ -111,6 +_,7 @@ int i = this.leftPos; int j = this.topPos; - super.render(p_409971_, p_409213_, p_408205_, p_408282_); -+ net.minecraftforge.client.event.ForgeEventFactoryClient.onContainerRenderBackground(this, p_409971_, p_409213_, p_408205_); - p_409971_.pose().pushMatrix(); - p_409971_.pose().translate(i, j); - this.renderLabels(p_409971_, p_409213_, p_408205_); -@@ -114,6 +_,8 @@ + super.extractRenderState(graphics, mouseX, mouseY, a); ++ net.minecraftforge.client.event.ForgeEventFactoryClient.onContainerRenderBackground(this, graphics, mouseX, mouseY); + graphics.pose().pushMatrix(); + graphics.pose().translate(i, j); + this.extractLabels(graphics, mouseX, mouseY); +@@ -122,6 +_,7 @@ + if (slot != null && slot != this.hoveredSlot) { this.onStopHovering(slot); } ++ net.minecraftforge.client.event.ForgeEventFactoryClient.onContainerRenderForeground(this, graphics, mouseX, mouseY); -+ net.minecraftforge.client.event.ForgeEventFactoryClient.onContainerRenderForeground(this, p_409971_, p_409213_, p_408205_); -+ - p_409971_.pose().popMatrix(); + graphics.pose().popMatrix(); } - -@@ -197,7 +_,7 @@ - ItemStack itemstack = this.hoveredSlot.getItem(); - if (this.menu.getCarried().isEmpty() || this.showTooltipWithItemInHand(itemstack)) { - p_283594_.setTooltipForNextFrame( -- this.font, this.getTooltipFromContainerItem(itemstack), itemstack.getTooltipImage(), p_282171_, p_281909_, itemstack.get(DataComponents.TOOLTIP_STYLE) -+ this.font, this.getTooltipFromContainerItem(itemstack), itemstack.getTooltipImage(), itemstack, p_282171_, p_281909_ +@@ -203,9 +_,9 @@ + this.font, + this.getTooltipFromContainerItem(itemstack), + itemstack.getTooltipImage(), ++ itemstack, + mouseX, +- mouseY, +- itemstack.get(DataComponents.TOOLTIP_STYLE) ++ mouseY ); } } -@@ -213,7 +_,8 @@ +@@ -221,7 +_,8 @@ - private void renderFloatingItem(GuiGraphics p_282567_, ItemStack p_281330_, int p_281772_, int p_281689_, @Nullable String p_282568_) { - p_282567_.renderItem(p_281330_, p_281772_, p_281689_); -- p_282567_.renderItemDecorations(this.font, p_281330_, p_281772_, p_281689_ - (this.draggingItem.isEmpty() ? 0 : 8), p_282568_); -+ var font = net.minecraftforge.client.extensions.common.IClientItemExtensions.of(p_281330_).getFont(p_281330_, net.minecraftforge.client.extensions.common.IClientItemExtensions.FontContext.ITEM_COUNT); -+ p_282567_.renderItemDecorations(font == null ? this.font : font, p_281330_, p_281772_, p_281689_ - (this.draggingItem.isEmpty() ? 0 : 8), p_282568_); + private void extractFloatingItem(final GuiGraphicsExtractor graphics, final ItemStack carried, final int x, final int y, final @Nullable String itemCount) { + graphics.item(carried, x, y); +- graphics.itemDecorations(this.font, carried, x, y - (this.draggingItem.isEmpty() ? 0 : 8), itemCount); ++ var font = net.minecraftforge.client.extensions.common.IClientItemExtensions.of(carried).getFont(carried, net.minecraftforge.client.extensions.common.IClientItemExtensions.FontContext.ITEM_COUNT); ++ graphics.itemDecorations(font == null ? this.font : font, carried, x, y - (this.draggingItem.isEmpty() ? 0 : 8), itemCount); } - protected void renderLabels(GuiGraphics p_281635_, int p_282681_, int p_283686_) { -@@ -313,7 +_,8 @@ - if (super.mouseClicked(p_427253_, p_427622_)) { + protected void extractLabels(final GuiGraphicsExtractor graphics, final int xm, final int ym) { +@@ -319,7 +_,8 @@ + if (super.mouseClicked(event, doubleClick)) { return true; } else { -- boolean flag = this.minecraft.options.keyPickItem.matchesMouse(p_427253_) && this.minecraft.player.hasInfiniteMaterials(); -+ var mouseKey = com.mojang.blaze3d.platform.InputConstants.Type.MOUSE.getOrCreate(p_427253_.button()); +- boolean flag = this.minecraft.options.keyPickItem.matchesMouse(event) && this.minecraft.player.hasInfiniteMaterials(); ++ var mouseKey = com.mojang.blaze3d.platform.InputConstants.Type.MOUSE.getOrCreate(event.button()); + boolean flag = this.minecraft.options.keyPickItem.isActiveAndMatches(mouseKey) && this.minecraft.player.hasInfiniteMaterials(); - Slot slot = this.getHoveredSlot(p_427253_.x(), p_427253_.y()); - this.doubleclick = this.lastClickSlot == slot && p_427622_; + Slot slot = this.getHoveredSlot(event.x(), event.y()); + this.doubleclick = this.lastClickSlot == slot && doubleClick; this.skipNextRelease = false; -@@ -323,6 +_,7 @@ +@@ -329,6 +_,7 @@ int i = this.leftPos; int j = this.topPos; - boolean flag1 = this.hasClickedOutside(p_427253_.x(), p_427253_.y(), i, j); + boolean flag1 = this.hasClickedOutside(event.x(), event.y(), i, j); + if (slot != null) flag1 = false; // Forge, prevent dropping of items through slots outside of GUI boundaries int k = -1; if (slot != null) { k = slot.index; -@@ -348,7 +_,7 @@ +@@ -354,7 +_,7 @@ } } else if (!this.isQuickCrafting) { if (this.menu.getCarried().isEmpty()) { - if (flag) { + if (this.minecraft.options.keyPickItem.isActiveAndMatches(mouseKey)) { - this.slotClicked(slot, k, p_427253_.button(), ClickType.CLONE); + this.slotClicked(slot, k, event.button(), ContainerInput.CLONE); } else { - boolean flag2 = k != -999 && p_427253_.hasShiftDown(); -@@ -372,7 +_,7 @@ + boolean flag2 = k != -999 && event.hasShiftDown(); +@@ -378,7 +_,7 @@ this.quickCraftingType = 0; - } else if (p_427253_.button() == 1) { + } else if (event.button() == 1) { this.quickCraftingType = 1; - } else if (flag) { + } else if (this.minecraft.options.keyPickItem.isActiveAndMatches(mouseKey)) { this.quickCraftingType = 2; } } -@@ -449,10 +_,13 @@ +@@ -448,10 +_,13 @@ @Override - public boolean mouseReleased(MouseButtonEvent p_430939_) { -+ super.mouseReleased(p_430939_); //Forge, Call parent to release buttons - Slot slot = this.getHoveredSlot(p_430939_.x(), p_430939_.y()); + public boolean mouseReleased(final MouseButtonEvent event) { ++ super.mouseReleased(event); //Forge, Call parent to release buttons + Slot slot = this.getHoveredSlot(event.x(), event.y()); int i = this.leftPos; int j = this.topPos; - boolean flag = this.hasClickedOutside(p_430939_.x(), p_430939_.y(), i, j); + boolean flag = this.hasClickedOutside(event.x(), event.y(), i, j); + if (slot != null) flag = false; // Forge, prevent dropping of items through slots outside of GUI boundaries -+ var mouseKey = com.mojang.blaze3d.platform.InputConstants.Type.MOUSE.getOrCreate(p_430939_.button()); ++ var mouseKey = com.mojang.blaze3d.platform.InputConstants.Type.MOUSE.getOrCreate(event.button()); int k = -1; if (slot != null) { k = slot.index; -@@ -469,7 +_,7 @@ - if (slot2 != null - && slot2.mayPickup(this.minecraft.player) - && slot2.hasItem() -- && slot2.container == slot.container -+ && slot2.isSameInventory(slot) - && AbstractContainerMenu.canItemQuickReplace(slot2, this.lastQuickMoved, true)) { - this.slotClicked(slot2, slot2.index, p_430939_.button(), ClickType.QUICK_MOVE); +@@ -468,7 +_,7 @@ + if (slot1 != null + && slot1.mayPickup(this.minecraft.player) + && slot1.hasItem() +- && slot1.container == slot.container ++ && slot1.isSameInventory(slot) + && AbstractContainerMenu.canItemQuickReplace(slot1, this.lastQuickMoved, true)) { + this.slotClicked(slot1, slot1.index, event.button(), ContainerInput.QUICK_MOVE); } -@@ -534,7 +_,7 @@ - - this.slotClicked(null, -999, AbstractContainerMenu.getQuickcraftMask(2, this.quickCraftingType), ClickType.QUICK_CRAFT); +@@ -527,7 +_,7 @@ + } else if (this.isQuickCrafting && !this.quickCraftSlots.isEmpty()) { + this.quickCraftToSlots(); } else if (!this.menu.getCarried().isEmpty()) { -- if (this.minecraft.options.keyPickItem.matchesMouse(p_430939_)) { +- if (this.minecraft.options.keyPickItem.matchesMouse(event)) { + if (this.minecraft.options.keyPickItem.isActiveAndMatches(mouseKey)) { - this.slotClicked(slot, k, p_430939_.button(), ClickType.CLONE); + this.slotClicked(slot, k, event.button(), ContainerInput.CLONE); } else { - boolean flag1 = k != -999 && p_430939_.hasShiftDown(); -@@ -605,7 +_,7 @@ - public boolean keyPressed(KeyEvent p_424324_) { - if (super.keyPressed(p_424324_)) { + boolean flag1 = k != -999 && event.hasShiftDown(); +@@ -598,7 +_,7 @@ + public boolean keyPressed(final KeyEvent event) { + if (super.keyPressed(event)) { return true; -- } else if (this.minecraft.options.keyInventory.matches(p_424324_)) { -+ } else if (this.minecraft.options.keyInventory.isActiveAndMatches(com.mojang.blaze3d.platform.InputConstants.getKey(p_424324_))) { +- } else if (this.minecraft.options.keyInventory.matches(event)) { ++ } else if (this.minecraft.options.keyInventory.isActiveAndMatches(com.mojang.blaze3d.platform.InputConstants.getKey(event))) { this.onClose(); return true; } else { -@@ -684,6 +_,13 @@ +@@ -696,6 +_,13 @@ super.onClose(); } @@ -126,4 +128,4 @@ + public int getYSize() { return imageHeight; } @OnlyIn(Dist.CLIENT) - record SnapbackData(ItemStack item, Vector2i start, Vector2i end, long time) { + private record SnapbackData(ItemStack item, Vector2i start, Vector2i end, long time) { diff --git a/patches/minecraft/net/minecraft/client/gui/screens/inventory/CreativeModeInventoryScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/inventory/CreativeModeInventoryScreen.java.patch index 9259e62ba1..dd485d7950 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/inventory/CreativeModeInventoryScreen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/inventory/CreativeModeInventoryScreen.java.patch @@ -1,24 +1,24 @@ --- a/net/minecraft/client/gui/screens/inventory/CreativeModeInventoryScreen.java +++ b/net/minecraft/client/gui/screens/inventory/CreativeModeInventoryScreen.java -@@ -115,6 +_,8 @@ +@@ -116,6 +_,8 @@ private final Set> visibleTags = new HashSet<>(); private final boolean displayOperatorCreativeTab; private final EffectsInInventory effects; + private final List pages = new java.util.ArrayList<>(); + private net.minecraftforge.client.gui.CreativeTabsScreenPage currentPage = new net.minecraftforge.client.gui.CreativeTabsScreenPage(new java.util.ArrayList<>()); - public CreativeModeInventoryScreen(LocalPlayer p_344408_, FeatureFlagSet p_260074_, boolean p_259569_) { - super(new CreativeModeInventoryScreen.ItemPickerMenu(p_344408_), p_344408_.getInventory(), CommonComponents.EMPTY); -@@ -163,7 +_,7 @@ - private void refreshCurrentTabContents(Collection p_261591_) { + public CreativeModeInventoryScreen(final LocalPlayer player, final FeatureFlagSet enabledFeatures, final boolean displayOperatorCreativeTab) { + super(new CreativeModeInventoryScreen.ItemPickerMenu(player), player.getInventory(), CommonComponents.EMPTY, 195, 136); +@@ -164,7 +_,7 @@ + private void refreshCurrentTabContents(final Collection displayList) { int i = this.menu.getRowIndexForScroll(this.scrollOffs); this.menu.items.clear(); - if (selectedTab.getType() == CreativeModeTab.Type.SEARCH) { + if (selectedTab.hasSearchBar()) { this.refreshSearchResults(); } else { - this.menu.items.addAll(p_261591_); -@@ -329,6 +_,36 @@ + this.menu.items.addAll(displayList); +@@ -330,6 +_,36 @@ protected void init() { if (this.minecraft.player.hasInfiniteMaterials()) { super.init(); @@ -55,8 +55,8 @@ this.searchBox = new EditBox(this.font, this.leftPos + 82, this.topPos + 6, 80, 9, Component.translatable("itemGroup.search")); this.searchBox.setMaxLength(50); this.searchBox.setBordered(false); -@@ -376,7 +_,7 @@ - public boolean charTyped(CharacterEvent p_424087_) { +@@ -377,7 +_,7 @@ + public boolean charTyped(final CharacterEvent event) { if (this.ignoreTextInput) { return false; - } else if (selectedTab.getType() != CreativeModeTab.Type.SEARCH) { @@ -64,16 +64,16 @@ return false; } else { String s = this.searchBox.getValue(); -@@ -395,7 +_,7 @@ +@@ -405,7 +_,7 @@ @Override - public boolean keyPressed(KeyEvent p_429237_) { + public boolean keyPressed(final KeyEvent event) { this.ignoreTextInput = false; - if (selectedTab.getType() != CreativeModeTab.Type.SEARCH) { + if (!selectedTab.hasSearchBar()) { - if (this.minecraft.options.keyChat.matches(p_429237_)) { + if (this.minecraft.options.keyChat.matches(event)) { this.ignoreTextInput = true; this.selectTab(CreativeModeTabs.searchTab()); -@@ -431,6 +_,7 @@ +@@ -441,6 +_,7 @@ } private void refreshSearchResults() { @@ -81,7 +81,7 @@ this.menu.items.clear(); this.visibleTags.clear(); String s = this.searchBox.getValue(); -@@ -443,10 +_,10 @@ +@@ -453,10 +_,10 @@ SearchTree searchtree; if (s.startsWith("#")) { s = s.substring(1); @@ -94,27 +94,26 @@ } this.menu.items.addAll(searchtree.search(s.toLowerCase(Locale.ROOT))); -@@ -478,7 +_,8 @@ +@@ -484,7 +_,7 @@ @Override - protected void renderLabels(GuiGraphics p_283168_, int p_281774_, int p_281466_) { + protected void extractLabels(final GuiGraphicsExtractor graphics, final int xm, final int ym) { if (selectedTab.showTitle()) { -- p_283168_.drawString(this.font, selectedTab.getDisplayName(), 8, 6, -12566464, false); -+ com.mojang.blaze3d.opengl.GlStateManager._disableBlend(); -+ p_283168_.drawString(this.font, selectedTab.getDisplayName(), 8, 6, selectedTab.getLabelColor(), false); +- graphics.text(this.font, selectedTab.getDisplayName(), 8, 6, -12566464, false); ++ graphics.text(this.font, selectedTab.getDisplayName(), 8, 6, selectedTab.getLabelColor(), false); } } -@@ -488,7 +_,7 @@ - double d0 = p_430803_.x() - this.leftPos; - double d1 = p_430803_.y() - this.topPos; +@@ -494,7 +_,7 @@ + double d0 = event.x() - this.leftPos; + double d1 = event.y() - this.topPos; - for (CreativeModeTab creativemodetab : CreativeModeTabs.tabs()) { + for (CreativeModeTab creativemodetab : currentPage.getVisibleTabs()) { if (this.checkTabClicked(creativemodetab, d0, d1)) { return true; } -@@ -510,7 +_,7 @@ - double d1 = p_423848_.y() - this.topPos; +@@ -516,7 +_,7 @@ + double d1 = event.y() - this.topPos; this.scrolling = false; - for (CreativeModeTab creativemodetab : CreativeModeTabs.tabs()) { @@ -122,7 +121,7 @@ if (this.checkTabClicked(creativemodetab, d0, d1)) { this.selectTab(creativemodetab); return true; -@@ -604,13 +_,15 @@ +@@ -610,13 +_,15 @@ this.originalSlots = null; } @@ -131,7 +130,7 @@ this.searchBox.setVisible(true); this.searchBox.setCanLoseFocus(false); this.searchBox.setFocused(true); - if (creativemodetab != p_98561_) { + if (creativemodetab != tab) { this.searchBox.setValue(""); } + this.searchBox.setWidth(selectedTab.getSearchBarWidth()); @@ -139,95 +138,95 @@ this.refreshSearchResults(); } else { -@@ -673,7 +_,14 @@ - this.effects.render(p_283000_, p_281317_, p_282770_); - super.render(p_283000_, p_281317_, p_282770_, p_281295_); +@@ -679,7 +_,14 @@ + this.effects.extractRenderState(graphics, mouseX, mouseY); + super.extractRenderState(graphics, mouseX, mouseY, a); - for (CreativeModeTab creativemodetab : CreativeModeTabs.tabs()) { + if (this.pages.size() != 1) { + Component page = Component.literal(String.format("%d / %d", this.pages.indexOf(this.currentPage) + 1, this.pages.size())); -+ p_283000_.pose().pushMatrix(); -+ p_283000_.drawString(font, page.getVisualOrderText(), leftPos + (imageWidth / 2) - (font.width(page) / 2), topPos - 44, -1); -+ p_283000_.pose().popMatrix(); ++ graphics.pose().pushMatrix(); ++ graphics.text(font, page.getVisualOrderText(), leftPos + (imageWidth / 2) - (font.width(page) / 2), topPos - 44, -1); ++ graphics.pose().popMatrix(); + } + + for (CreativeModeTab creativemodetab : currentPage.getVisibleTabs()) { - if (this.checkTabHovering(p_283000_, creativemodetab, p_281317_, p_282770_)) { + if (this.checkTabHovering(graphics, creativemodetab, mouseX, mouseY)) { break; } -@@ -697,7 +_,7 @@ - public List getTooltipFromContainerItem(ItemStack p_281769_) { +@@ -701,7 +_,7 @@ + public List getTooltipFromContainerItem(final ItemStack itemStack) { boolean flag = this.hoveredSlot != null && this.hoveredSlot instanceof CreativeModeInventoryScreen.CustomCreativeSlot; boolean flag1 = selectedTab.getType() == CreativeModeTab.Type.CATEGORY; - boolean flag2 = selectedTab.getType() == CreativeModeTab.Type.SEARCH; + boolean flag2 = selectedTab.hasSearchBar(); TooltipFlag.Default tooltipflag$default = this.minecraft.options.advancedItemTooltips ? TooltipFlag.Default.ADVANCED : TooltipFlag.Default.NORMAL; TooltipFlag tooltipflag = flag ? tooltipflag$default.asCreative() : tooltipflag$default; - List list = p_281769_.getTooltipLines(Item.TooltipContext.of(this.minecraft.level), this.minecraft.player, tooltipflag); -@@ -718,7 +_,7 @@ + List list = itemStack.getTooltipLines(Item.TooltipContext.of(this.minecraft.level), this.minecraft.player, tooltipflag); +@@ -722,7 +_,7 @@ int i = 1; for (CreativeModeTab creativemodetab : CreativeModeTabs.tabs()) { -- if (creativemodetab.getType() != CreativeModeTab.Type.SEARCH && creativemodetab.contains(p_281769_)) { -+ if (!creativemodetab.hasSearchBar() && creativemodetab.contains(p_281769_)) { +- if (creativemodetab.getType() != CreativeModeTab.Type.SEARCH && creativemodetab.contains(itemStack)) { ++ if (!creativemodetab.hasSearchBar() && creativemodetab.contains(itemStack)) { list1.add(i++, creativemodetab.getDisplayName().copy().withStyle(ChatFormatting.BLUE)); } } -@@ -729,7 +_,7 @@ +@@ -735,7 +_,7 @@ + public void extractBackground(final GuiGraphicsExtractor graphics, final int mouseX, final int mouseY, final float a) { + super.extractBackground(graphics, mouseX, mouseY, a); - @Override - protected void renderBg(GuiGraphics p_282663_, float p_282504_, int p_282089_, int p_282249_) { - for (CreativeModeTab creativemodetab : CreativeModeTabs.tabs()) { + for (CreativeModeTab creativemodetab : currentPage.getVisibleTabs()) { if (creativemodetab != selectedTab) { - this.renderTabButton(p_282663_, p_282089_, p_282249_, creativemodetab); + this.extractTabButton(graphics, mouseX, mouseY, creativemodetab); } -@@ -749,6 +_,7 @@ - p_282663_.blitSprite(RenderPipelines.GUI_TEXTURED, identifier, j, k + (int)((i - k - 17) * this.scrollOffs), 12, 15); +@@ -770,6 +_,7 @@ + graphics.blitSprite(RenderPipelines.GUI_TEXTURED, identifier, j, k + (int)((i - k - 17) * this.scrollOffs), 12, 15); } + if (currentPage.getVisibleTabs().contains(selectedTab)) //Forge: only display tab selection when the selected tab is on the current page - this.renderTabButton(p_282663_, p_282089_, p_282249_, selectedTab); + this.extractTabButton(graphics, mouseX, mouseY, selectedTab); if (selectedTab.getType() == CreativeModeTab.Type.INVENTORY) { - InventoryScreen.renderEntityInInventoryFollowsMouse( -@@ -767,7 +_,7 @@ + InventoryScreen.extractEntityInInventoryFollowsMouse( +@@ -779,7 +_,7 @@ } - private int getTabX(CreativeModeTab p_260136_) { -- int i = p_260136_.column(); -+ int i = currentPage.getColumn(p_260136_); + private int getTabX(final CreativeModeTab tab) { +- int i = tab.column(); ++ int i = currentPage.getColumn(tab); int j = 27; int k = 27 * i; - if (p_260136_.isAlignedRight()) { -@@ -779,7 +_,7 @@ + if (tab.isAlignedRight()) { +@@ -791,7 +_,7 @@ - private int getTabY(CreativeModeTab p_260181_) { + private int getTabY(final CreativeModeTab tab) { int i = 0; -- if (p_260181_.row() == CreativeModeTab.Row.TOP) { -+ if (currentPage.isTop(p_260181_)) { +- if (tab.row() == CreativeModeTab.Row.TOP) { ++ if (currentPage.isTop(tab)) { i -= 32; } else { i += this.imageHeight; -@@ -807,8 +_,8 @@ +@@ -819,8 +_,8 @@ - protected void renderTabButton(GuiGraphics p_283590_, int p_454271_, int p_455485_, CreativeModeTab p_283489_) { - boolean flag = p_283489_ == selectedTab; -- boolean flag1 = p_283489_.row() == CreativeModeTab.Row.TOP; -- int i = p_283489_.column(); -+ boolean flag1 = currentPage.isTop(p_283489_); -+ int i = currentPage.getColumn(p_283489_); - int j = this.leftPos + this.getTabX(p_283489_); + protected void extractTabButton(final GuiGraphicsExtractor graphics, final int mouseX, final int mouseY, final CreativeModeTab tab) { + boolean flag = tab == selectedTab; +- boolean flag1 = tab.row() == CreativeModeTab.Row.TOP; +- int i = tab.column(); ++ boolean flag1 = currentPage.isTop(tab); ++ int i = currentPage.getColumn(tab); + int j = this.leftPos + this.getTabX(tab); int k = this.topPos - (flag1 ? 28 : -(this.imageHeight - 4)); Identifier[] aidentifier; -@@ -822,6 +_,7 @@ - p_283590_.requestCursor(CursorTypes.POINTING_HAND); +@@ -834,6 +_,7 @@ + graphics.requestCursor(CursorTypes.POINTING_HAND); } + com.mojang.blaze3d.opengl.GlStateManager._enableBlend(); //Forge: Make sure blend is enabled else tabs show a white border. - p_283590_.blitSprite(RenderPipelines.GUI_TEXTURED, aidentifier[Mth.clamp(i, 0, aidentifier.length)], j, k, 26, 32); + graphics.blitSprite(RenderPipelines.GUI_TEXTURED, aidentifier[Mth.clamp(i, 0, aidentifier.length)], j, k, 26, 32); int l = j + 13 - 8; int i1 = k + 16 - 8 + (flag1 ? 1 : -1); -@@ -858,6 +_,14 @@ +@@ -870,6 +_,14 @@ } } @@ -240,12 +239,12 @@ + } + @OnlyIn(Dist.CLIENT) - static class CustomCreativeSlot extends Slot { - public CustomCreativeSlot(Container p_98633_, int p_98634_, int p_98635_, int p_98636_) { -@@ -1038,6 +_,22 @@ + private static class CustomCreativeSlot extends Slot { + public CustomCreativeSlot(final Container container, final int slot, final int x, final int y) { +@@ -1050,6 +_,22 @@ @Override - public boolean mayPickup(Player p_98665_) { - return this.target.mayPickup(p_98665_); + public boolean mayPickup(final Player player) { + return this.target.mayPickup(player); + } + + @Override diff --git a/patches/minecraft/net/minecraft/client/gui/screens/inventory/EffectsInInventory.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/inventory/EffectsInInventory.java.patch index ac6d20ff10..515c9a4b75 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/inventory/EffectsInInventory.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/inventory/EffectsInInventory.java.patch @@ -15,22 +15,22 @@ } + Iterable iterable = collection.stream().filter(net.minecraftforge.client.ForgeHooksClient::shouldRenderEffect).sorted().toList(); - this.renderEffects(p_456221_, collection, i, l, p_453611_, p_457243_, k); + this.extractEffects(graphics, collection, i, l, mouseX, mouseY, k); } } -@@ -66,6 +_,11 @@ +@@ -72,6 +_,11 @@ for (MobEffectInstance mobeffectinstance : iterable) { boolean flag = mobeffectinstance.isAmbient(); + var renderer = net.minecraftforge.client.extensions.common.IClientMobEffectExtensions.of(mobeffectinstance); -+ if (renderer.renderInventory(mobeffectinstance, this, p_362146_, p_370153_, i, 0)) { -+ i += p_365612_; ++ if (renderer.extractInventory(mobeffectinstance, this, graphics, x0, i, 0)) { ++ i += yStep; + continue; + } Component component = this.getEffectName(mobeffectinstance); Component component1 = MobEffectUtil.formatDuration(mobeffectinstance, 1.0F, this.minecraft.level.tickRateManager().tickrate()); - int j = this.renderBackground(p_362146_, font, component, component1, p_370153_, i, flag, p_457235_); -@@ -123,5 +_,9 @@ + int j = this.extractBackground(graphics, font, component, component1, x0, i, flag, maxWidth); +@@ -136,5 +_,9 @@ } return mutablecomponent; diff --git a/patches/minecraft/net/minecraft/client/gui/screens/inventory/EnchantmentScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/inventory/EnchantmentScreen.java.patch index 3c0b691404..f58ce6e108 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/inventory/EnchantmentScreen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/inventory/EnchantmentScreen.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/client/gui/screens/inventory/EnchantmentScreen.java +++ b/net/minecraft/client/gui/screens/inventory/EnchantmentScreen.java -@@ -108,7 +_,7 @@ +@@ -111,7 +_,7 @@ int l1 = 86 - this.font.width(s); FormattedText formattedtext = EnchantmentNames.getInstance().getRandomName(this.font, l1); int i2 = -9937334; - if ((k < l + 1 || this.minecraft.player.experienceLevel < k1) && !this.minecraft.player.hasInfiniteMaterials()) { + if (((k < l + 1 || this.minecraft.player.experienceLevel < k1) && !this.minecraft.player.hasInfiniteMaterials()) || this.menu.enchantClue[l] == -1) { // Forge: render buttons as disabled when enchantable but enchantability not met on lower levels{ - p_282430_.blitSprite(RenderPipelines.GUI_TEXTURED, ENCHANTMENT_SLOT_DISABLED_SPRITE, i1, j + 14 + 19 * l, 108, 19); - p_282430_.blitSprite(RenderPipelines.GUI_TEXTURED, DISABLED_LEVEL_SPRITES[l], i1 + 1, j + 15 + 19 * l, 16, 16); - p_282430_.drawWordWrap(this.font, formattedtext, j1, j + 16 + 19 * l, l1, ARGB.opaque((i2 & 16711422) >> 1), false); -@@ -160,13 +_,16 @@ + graphics.blitSprite(RenderPipelines.GUI_TEXTURED, ENCHANTMENT_SLOT_DISABLED_SPRITE, i1, j + 14 + 19 * l, 108, 19); + graphics.blitSprite(RenderPipelines.GUI_TEXTURED, DISABLED_LEVEL_SPRITES[l], i1 + 1, j + 15 + 19 * l, 16, 16); + graphics.textWithWordWrap(this.font, formattedtext, j1, j + 16 + 19 * l, l1, ARGB.opaque((i2 & 16711422) >> 1), false); +@@ -162,13 +_,16 @@ .registryAccess() .lookupOrThrow(Registries.ENCHANTMENT) .get(this.menu.enchantClue[j]); @@ -17,8 +17,8 @@ + { int l = this.menu.levelClue[j]; int i1 = j + 1; -- if (this.isHovering(60, 14 + 19 * j, 108, 17, p_282491_, p_281953_) && k > 0 && l >= 0) { -+ if (this.isHovering(60, 14 + 19 * j, 108, 17, (double)p_282491_, (double)p_281953_) && l >= 0) { +- if (this.isHovering(60, 14 + 19 * j, 108, 17, mouseX, mouseY) && k > 0 && l >= 0) { ++ if (this.isHovering(60, 14 + 19 * j, 108, 17, (double)mouseX, (double)mouseY) && l >= 0) { List list = Lists.newArrayList(); - list.add(Component.translatable("container.enchant.clue", Enchantment.getFullname(optional.get(), l)).withStyle(ChatFormatting.WHITE)); - if (!flag) { diff --git a/patches/minecraft/net/minecraft/client/gui/screens/inventory/HangingSignEditScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/inventory/HangingSignEditScreen.java.patch index a7c216573a..39298d9625 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/inventory/HangingSignEditScreen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/inventory/HangingSignEditScreen.java.patch @@ -7,5 +7,5 @@ - private final Identifier texture = Identifier.withDefaultNamespace("textures/gui/hanging_signs/" + this.woodType.name() + ".png"); + private final Identifier texture = Identifier.parse(this.woodType.name() + ".png").withPrefix("textures/gui/hanging_signs/"); - public HangingSignEditScreen(SignBlockEntity p_278017_, boolean p_277942_, boolean p_277778_) { - super(p_278017_, p_277942_, p_277778_, Component.translatable("hanging_sign.edit")); + public HangingSignEditScreen(final SignBlockEntity sign, final boolean isFrontText, final boolean shouldFilter) { + super(sign, isFrontText, shouldFilter, Component.translatable("hanging_sign.edit")); diff --git a/patches/minecraft/net/minecraft/client/gui/screens/inventory/MerchantScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/inventory/MerchantScreen.java.patch deleted file mode 100644 index 115fbc94d1..0000000000 --- a/patches/minecraft/net/minecraft/client/gui/screens/inventory/MerchantScreen.java.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- a/net/minecraft/client/gui/screens/inventory/MerchantScreen.java -+++ b/net/minecraft/client/gui/screens/inventory/MerchantScreen.java -@@ -236,6 +_,14 @@ - } else { - p_281357_.renderItemDecorations(this.font, p_282046_, p_282403_, p_283601_, p_282046_.getCount() == 1 ? "1" : null); - p_281357_.renderItemDecorations(this.font, p_283466_, p_282403_ + 14, p_283601_, p_283466_.getCount() == 1 ? "1" : null); -+ /* -+ // Forge: fixes Forge-8806, code for count rendering taken from GuiGraphics#renderGuiItemDecorations -+ p_281357_.pose().pushPose(); -+ p_281357_.pose().translate(0.0F, 0.0F, 200.0F); -+ String count = p_283466_.getCount() == 1 ? "1" : String.valueOf(p_283466_.getCount()); -+ font.drawInBatch(count, (float) (p_282403_ + 14) + 19 - 2 - font.width(count), (float)p_283601_ + 6 + 3, 0xFFFFFF, true, p_281357_.pose().last().pose(), p_281357_.bufferSource(), net.minecraft.client.gui.Font.DisplayMode.NORMAL, 0, 15728880, false); -+ p_281357_.pose().popPose(); -+ */ - p_281357_.blitSprite(RenderPipelines.GUI_TEXTURED, DISCOUNT_STRIKETHRUOGH_SPRITE, p_282403_ + 7, p_283601_ + 12, 9, 2); - } - } diff --git a/patches/minecraft/net/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipComponent.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipComponent.java.patch index 4fb7987094..246c28c0af 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipComponent.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipComponent.java.patch @@ -5,7 +5,7 @@ clientactiveplayerstooltip$activeplayerstooltip ); - default -> throw new IllegalArgumentException("Unknown TooltipComponent"); -+ default -> net.minecraftforge.client.gui.ClientTooltipComponentManager.createClientTooltipComponent(p_169951_); ++ default -> net.minecraftforge.client.gui.ClientTooltipComponentManager.createClientTooltipComponent(component); }); } diff --git a/patches/minecraft/net/minecraft/client/gui/screens/multiplayer/ServerSelectionList.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/multiplayer/ServerSelectionList.java.patch index 92346a5781..f7efecb938 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/multiplayer/ServerSelectionList.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/multiplayer/ServerSelectionList.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/client/gui/screens/multiplayer/ServerSelectionList.java +++ b/net/minecraft/client/gui/screens/multiplayer/ServerSelectionList.java -@@ -361,6 +_,8 @@ - p_425273_.setTooltipForNextFrame(Lists.transform(this.onlinePlayersTooltip, Component::getVisualOrderText), p_424268_, p_430737_); +@@ -371,6 +_,8 @@ + graphics.setTooltipForNextFrame(Lists.transform(this.onlinePlayersTooltip, Component::getVisualOrderText), mouseX, mouseY); } -+ net.minecraftforge.client.ForgeHooksClient.drawForgePingInfo(this.screen, serverData, p_425273_, this.getContentX(), this.getContentY(), this.getContentWidth(), p_424268_ - this.getContentX(), p_430737_ - this.getContentY()); ++ net.minecraftforge.client.ForgeHooksClient.drawForgePingInfo(this.screen, serverData, graphics, this.getContentX(), this.getContentY(), this.getContentWidth(), mouseX - this.getContentX(), mouseY - this.getContentY()); + - if (this.minecraft.options.touchscreen().get() || p_425246_) { - p_425273_.fill(this.getContentX(), this.getContentY(), this.getContentX() + 32, this.getContentY() + 32, -1601138544); - int i1 = p_424268_ - this.getContentX(); + if (this.minecraft.options.touchscreen().get() || hovered) { + graphics.fill(this.getContentX(), this.getContentY(), this.getContentX() + 32, this.getContentY() + 32, -1601138544); + int i1 = mouseX - this.getContentX(); diff --git a/patches/minecraft/net/minecraft/client/gui/screens/options/controls/KeyBindsList.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/options/controls/KeyBindsList.java.patch index 2ef27b141f..774ce5641d 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/options/controls/KeyBindsList.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/options/controls/KeyBindsList.java.patch @@ -1,27 +1,27 @@ --- a/net/minecraft/client/gui/screens/options/controls/KeyBindsList.java +++ b/net/minecraft/client/gui/screens/options/controls/KeyBindsList.java -@@ -116,9 +_,10 @@ - this.name = p_343976_; - this.changeButton = Button.builder(p_343976_, p_342196_ -> { - KeyBindsList.this.keyBindsScreen.selectedKey = p_343088_; -+ p_343088_.setKeyModifierAndCode(null, com.mojang.blaze3d.platform.InputConstants.UNKNOWN); +@@ -123,9 +_,10 @@ + this.name = name; + this.changeButton = Button.builder(name, button -> { + KeyBindsList.this.keyBindsScreen.selectedKey = key; ++ key.setKeyModifierAndCode(null, com.mojang.blaze3d.platform.InputConstants.UNKNOWN); KeyBindsList.this.resetMappingAndUpdateButtons(); }) - .bounds(0, 0, 75, 20) + .bounds(0, 0, 75 + 20 /* Forge: Add space */, 20) .createNarration( - p_342179_ -> p_343088_.isUnbound() - ? Component.translatable("narrator.controls.unbound", p_343976_) -@@ -126,7 +_,7 @@ + defaultNarrationSupplier -> key.isUnbound() + ? Component.translatable("narrator.controls.unbound", name) +@@ -133,7 +_,7 @@ ) .build(); - this.resetButton = Button.builder(RESET_BUTTON_TITLE, p_357685_ -> { -- p_343088_.setKey(p_343088_.getDefaultKey()); + this.resetButton = Button.builder(RESET_BUTTON_TITLE, button -> { +- key.setKey(key.getDefaultKey()); + this.key.setToDefault(); KeyBindsList.this.resetMappingAndUpdateButtons(); - }).bounds(0, 0, 50, 20).createNarration(p_344192_ -> Component.translatable("narrator.controls.reset", p_343976_)).build(); + }).bounds(0, 0, 50, 20).createNarration(defaultNarrationSupplier -> Component.translatable("narrator.controls.reset", name)).build(); this.refreshEntry(); -@@ -167,7 +_,8 @@ +@@ -174,7 +_,8 @@ MutableComponent mutablecomponent = Component.empty(); if (!this.key.isUnbound()) { for (KeyMapping keymapping : KeyBindsList.this.minecraft.options.keyMappings) { diff --git a/patches/minecraft/net/minecraft/client/gui/screens/options/controls/KeyBindsScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/options/controls/KeyBindsScreen.java.patch index 5bc6d38767..5a179d9cc6 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/options/controls/KeyBindsScreen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/options/controls/KeyBindsScreen.java.patch @@ -2,7 +2,7 @@ +++ b/net/minecraft/client/gui/screens/options/controls/KeyBindsScreen.java @@ -42,7 +_,7 @@ protected void addFooter() { - this.resetButton = Button.builder(Component.translatable("controls.resetAll"), p_343640_ -> { + this.resetButton = Button.builder(Component.translatable("controls.resetAll"), button -> { for (KeyMapping keymapping : this.options.keyMappings) { - keymapping.setKey(keymapping.getDefaultKey()); + keymapping.setToDefault(); @@ -10,17 +10,17 @@ this.keyBindsList.resetMappingAndUpdateButtons(); @@ -74,11 +_,12 @@ - public boolean keyPressed(KeyEvent p_424487_) { + public boolean keyPressed(final KeyEvent event) { if (this.selectedKey != null) { - if (p_424487_.isEscape()) { + if (event.isEscape()) { - this.selectedKey.setKey(InputConstants.UNKNOWN); + this.selectedKey.setKeyModifierAndCode(null, InputConstants.UNKNOWN); } else { -- this.selectedKey.setKey(InputConstants.getKey(p_424487_)); -+ this.selectedKey.setKeyModifierAndCode(null, InputConstants.getKey(p_424487_)); +- this.selectedKey.setKey(InputConstants.getKey(event)); ++ this.selectedKey.setKeyModifierAndCode(null, InputConstants.getKey(event)); } -+ if (p_424487_.isEscape() || !net.minecraftforge.client.settings.KeyModifier.isKeyCodeModifier(this.selectedKey.getKey())) ++ if (event.isEscape() || !net.minecraftforge.client.settings.KeyModifier.isKeyCodeModifier(this.selectedKey.getKey())) this.selectedKey = null; this.lastKeySelection = Util.getMillis(); this.keyBindsList.resetMappingAndUpdateButtons(); diff --git a/patches/minecraft/net/minecraft/client/gui/screens/packs/PackSelectionModel.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/packs/PackSelectionModel.java.patch index 4e595b6635..32cbf8ce37 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/packs/PackSelectionModel.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/packs/PackSelectionModel.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/gui/screens/packs/PackSelectionModel.java +++ b/net/minecraft/client/gui/screens/packs/PackSelectionModel.java -@@ -108,6 +_,10 @@ +@@ -112,6 +_,10 @@ boolean canMoveUp(); boolean canMoveDown(); @@ -11,7 +11,7 @@ } @OnlyIn(Dist.CLIENT) -@@ -207,6 +_,11 @@ +@@ -213,6 +_,11 @@ @Override public void moveDown() { this.move(1); diff --git a/patches/minecraft/net/minecraft/client/gui/screens/packs/TransferableSelectionList.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/packs/TransferableSelectionList.java.patch index b83455dd08..70dc308202 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/packs/TransferableSelectionList.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/packs/TransferableSelectionList.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/client/gui/screens/packs/TransferableSelectionList.java +++ b/net/minecraft/client/gui/screens/packs/TransferableSelectionList.java -@@ -65,7 +_,7 @@ +@@ -66,7 +_,7 @@ Component component = Component.empty().append(this.title).withStyle(ChatFormatting.UNDERLINE, ChatFormatting.BOLD); this.addEntry(new TransferableSelectionList.HeaderEntry(this.minecraft.font, component), (int)(9.0F * 1.5F)); this.setSelected(null); -- p_429245_.forEach(p_430444_ -> { -+ p_429245_.filter(PackSelectionModel.Entry::notHidden).forEach(p_430444_ -> { - TransferableSelectionList.PackEntry transferableselectionlist$packentry = new TransferableSelectionList.PackEntry(this.minecraft, this, p_430444_); +- entries.forEach(e -> { ++ entries.filter(PackSelectionModel.Entry::notHidden).forEach(e -> { + TransferableSelectionList.PackEntry transferableselectionlist$packentry = new TransferableSelectionList.PackEntry(this.minecraft, this, e); this.addEntry(transferableselectionlist$packentry); - if (p_430177_ != null && p_430177_.getId().equals(p_430444_.getId())) { + if (transferredEntry != null && transferredEntry.getId().equals(e.getId())) { diff --git a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/CreateWorldScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/CreateWorldScreen.java.patch index 4634eeafe7..950bf2b1b9 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/CreateWorldScreen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/CreateWorldScreen.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/gui/screens/worldselection/CreateWorldScreen.java +++ b/net/minecraft/client/gui/screens/worldselection/CreateWorldScreen.java -@@ -173,6 +_,7 @@ +@@ -177,6 +_,7 @@ WorldDataConfiguration worlddataconfiguration = SharedConstants.IS_RUNNING_IN_IDE ? new WorldDataConfiguration(new DataPackConfig(List.of("vanilla", "tests"), List.of()), FeatureFlags.DEFAULT_FLAGS) : WorldDataConfiguration.DEFAULT; @@ -8,16 +8,16 @@ WorldLoader.InitConfig worldloader$initconfig = createDefaultLoadConfig(packrepository, worlddataconfiguration); CompletableFuture completablefuture = WorldLoader.load( worldloader$initconfig, -@@ -472,7 +_,7 @@ - if (p_269627_) { - p_270552_.accept(this.uiState.getSettings().dataConfiguration()); +@@ -520,7 +_,7 @@ + if (retry) { + onAbort.accept(this.uiState.getSettings().dataConfiguration()); } else { -- p_270552_.accept(WorldDataConfiguration.DEFAULT); -+ p_270552_.accept(new WorldDataConfiguration(new DataPackConfig(ImmutableList.of("vanilla"), ImmutableList.of()), FeatureFlags.DEFAULT_FLAGS)); // FORGE: Revert to *actual* vanilla data +- onAbort.accept(WorldDataConfiguration.DEFAULT); ++ onAbort.accept(new WorldDataConfiguration(new DataPackConfig(ImmutableList.of("vanilla"), ImmutableList.of()), FeatureFlags.DEFAULT_FLAGS)); // FORGE: Revert to *actual* vanilla data } }, Component.translatable("dataPack.validation.failed"), -@@ -584,6 +_,7 @@ +@@ -634,6 +_,7 @@ if (path != null) { if (this.tempDataPackRepository == null) { this.tempDataPackRepository = ServerPacksSource.createPackRepository(path, this.packValidator); diff --git a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/PresetEditor.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/PresetEditor.java.patch index fe2dd36152..aa503f068e 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/PresetEditor.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/PresetEditor.java.patch @@ -10,4 +10,4 @@ + @Deprecated Map>, PresetEditor> EDITORS = Map.of( Optional.of(WorldPresets.FLAT), - (p_232974_, p_232975_) -> { + (parent, settings) -> { diff --git a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldCreationContext.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldCreationContext.java.patch index 17da7eab79..76c5581e26 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldCreationContext.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldCreationContext.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/gui/screens/worldselection/WorldCreationContext.java +++ b/net/minecraft/client/gui/screens/worldselection/WorldCreationContext.java -@@ -75,6 +_,14 @@ +@@ -98,6 +_,14 @@ ); } diff --git a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldCreationUiState.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldCreationUiState.java.patch index ab9704c50d..4d2bbafbde 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldCreationUiState.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldCreationUiState.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/gui/screens/worldselection/WorldCreationUiState.java +++ b/net/minecraft/client/gui/screens/worldselection/WorldCreationUiState.java -@@ -232,7 +_,7 @@ +@@ -234,7 +_,7 @@ public @Nullable PresetEditor getPresetEditor() { Holder holder = this.getWorldType().preset(); diff --git a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldOpenFlows.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldOpenFlows.java.patch index 7bd2834a28..212b5cbe84 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldOpenFlows.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldOpenFlows.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/client/gui/screens/worldselection/WorldOpenFlows.java +++ b/net/minecraft/client/gui/screens/worldselection/WorldOpenFlows.java -@@ -331,6 +_,8 @@ +@@ -507,6 +_,8 @@ this.minecraft.setScreenAndShow(new GenericMessageScreen(Component.translatable("selectWorld.resource_load"))); - PackRepository packrepository = ServerPacksSource.createPackRepository(p_333651_); + PackRepository packrepository = ServerPacksSource.createPackRepository(worldAccess); -+ net.minecraftforge.common.ForgeHooks.readAdditionalLevelSaveData(p_333651_, p_333651_.getLevelDirectory()); ++ net.minecraftforge.common.ForgeHooks.readAdditionalLevelSaveData(worldAccess, worldAccess.getLevelDirectory()); + WorldStem worldstem; try { - worldstem = this.loadWorldStem(p_332568_, p_334192_, packrepository); + worldstem = this.loadWorldStem(worldAccess, levelDataTag, safeMode, packrepository); diff --git a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldSelectionList.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldSelectionList.java.patch index d01d5d550e..0a0325f977 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldSelectionList.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldSelectionList.java.patch @@ -1,19 +1,19 @@ --- a/net/minecraft/client/gui/screens/worldselection/WorldSelectionList.java +++ b/net/minecraft/client/gui/screens/worldselection/WorldSelectionList.java -@@ -83,6 +_,7 @@ - static final Identifier JOIN_HIGHLIGHTED_SPRITE = Identifier.withDefaultNamespace("world_list/join_highlighted"); - static final Identifier JOIN_SPRITE = Identifier.withDefaultNamespace("world_list/join"); - static final Logger LOGGER = LogUtils.getLogger(); +@@ -84,6 +_,7 @@ + private static final Identifier JOIN_HIGHLIGHTED_SPRITE = Identifier.withDefaultNamespace("world_list/join_highlighted"); + private static final Identifier JOIN_SPRITE = Identifier.withDefaultNamespace("world_list/join"); + private static final Logger LOGGER = LogUtils.getLogger(); + private static final Identifier FORGE_EXPERIMENTAL_WARNING_ICON = Identifier.fromNamespaceAndPath("forge","textures/gui/experimental_warning.png"); - static final Component FROM_NEWER_TOOLTIP_1 = Component.translatable("selectWorld.tooltip.fromNewerVersion1").withStyle(ChatFormatting.RED); - static final Component FROM_NEWER_TOOLTIP_2 = Component.translatable("selectWorld.tooltip.fromNewerVersion2").withStyle(ChatFormatting.RED); - static final Component SNAPSHOT_TOOLTIP_1 = Component.translatable("selectWorld.tooltip.snapshot1").withStyle(ChatFormatting.GOLD); -@@ -489,6 +_,19 @@ + private static final Component FROM_NEWER_TOOLTIP_1 = Component.translatable("selectWorld.tooltip.fromNewerVersion1").withStyle(ChatFormatting.RED); + private static final Component FROM_NEWER_TOOLTIP_2 = Component.translatable("selectWorld.tooltip.fromNewerVersion2").withStyle(ChatFormatting.RED); + private static final Component SNAPSHOT_TOOLTIP_1 = Component.translatable("selectWorld.tooltip.snapshot1").withStyle(ChatFormatting.GOLD); +@@ -493,6 +_,19 @@ } } + // FORGE: Patch in experimental warning icon for worlds in the world selection screen -+ private void renderExperimentalWarning(GuiGraphics guiGraphics, int mouseX, int mouseY, int top, int left) { ++ private void renderExperimentalWarning(GuiGraphicsExtractor guiGraphics, int mouseX, int mouseY, int top, int left) { + if (this.summary.isLifecycleExperimental()) { + int leftStart = left + this.list.getRowWidth(); + guiGraphics.blit(RenderPipelines.GUI_TEXTURED, WorldSelectionList.FORGE_EXPERIMENTAL_WARNING_ICON, leftStart - 36, top, 0.0F, 0.0F, 32, 32, 32, 32); @@ -28,11 +28,11 @@ @Override public Component getNarration() { Component component = Component.translatable( -@@ -515,6 +_,7 @@ +@@ -522,6 +_,7 @@ this.infoText.setPosition(i, this.getContentY() + 9 + 9 + 3); - this.infoText.render(p_424437_, p_425443_, p_425024_, p_424775_); - p_424437_.blit(RenderPipelines.GUI_TEXTURED, this.icon.textureLocation(), this.getContentX(), this.getContentY(), 0.0F, 0.0F, 32, 32, 32, 32); -+ renderExperimentalWarning(p_424437_, p_425443_, p_425024_, this.getContentY(), this.getContentX()); - if (this.list.entryType == WorldSelectionList.EntryType.SINGLEPLAYER && (this.minecraft.options.touchscreen().get() || p_430261_)) { - p_424437_.fill(this.getContentX(), this.getContentY(), this.getContentX() + 32, this.getContentY() + 32, -1601138544); - int j = p_425443_ - this.getContentX(); + this.infoText.extractRenderState(graphics, mouseX, mouseY, a); + graphics.blit(RenderPipelines.GUI_TEXTURED, this.icon.textureLocation(), this.getContentX(), this.getContentY(), 0.0F, 0.0F, 32, 32, 32, 32); ++ renderExperimentalWarning(graphics, mouseX, mouseY, this.getContentY(), this.getContentX()); + if (this.list.entryType == WorldSelectionList.EntryType.SINGLEPLAYER && (this.minecraft.options.touchscreen().get() || hovered)) { + graphics.fill(this.getContentX(), this.getContentY(), this.getContentX() + 32, this.getContentY() + 32, -1601138544); + int j = mouseX - this.getContentX(); diff --git a/patches/minecraft/net/minecraft/client/main/Main.java.patch b/patches/minecraft/net/minecraft/client/main/Main.java.patch index 5aff77b2c4..476c04ce08 100644 --- a/patches/minecraft/net/minecraft/client/main/Main.java.patch +++ b/patches/minecraft/net/minecraft/client/main/Main.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/main/Main.java +++ b/net/minecraft/client/main/Main.java -@@ -116,8 +_,8 @@ +@@ -114,8 +_,8 @@ CrashReport.preload(); logger = LogUtils.getLogger(); s1 = "Bootstrap"; diff --git a/patches/minecraft/net/minecraft/client/model/HumanoidModel.java.patch b/patches/minecraft/net/minecraft/client/model/HumanoidModel.java.patch index 7c9ca4033e..805bd4cdf4 100644 --- a/patches/minecraft/net/minecraft/client/model/HumanoidModel.java.patch +++ b/patches/minecraft/net/minecraft/client/model/HumanoidModel.java.patch @@ -1,24 +1,24 @@ --- a/net/minecraft/client/model/HumanoidModel.java +++ b/net/minecraft/client/model/HumanoidModel.java -@@ -308,6 +_,8 @@ +@@ -387,6 +_,8 @@ break; case SPEAR: - SpearAnimations.thirdPersonHandUse(this.rightArm, this.head, true, p_362371_.getUseItemStackForArm(HumanoidArm.RIGHT), p_362371_); + SpearAnimations.thirdPersonHandUse(this.rightArm, this.head, true, state.getUseItemStackForArm(HumanoidArm.RIGHT), state); + default: -+ p_362371_.rightArmPose.applyTransform(this, p_362371_, net.minecraft.world.entity.HumanoidArm.RIGHT); ++ state.rightArmPose.applyTransform(this, state, net.minecraft.world.entity.HumanoidArm.RIGHT); } } -@@ -355,6 +_,8 @@ +@@ -432,6 +_,8 @@ break; case SPEAR: - SpearAnimations.thirdPersonHandUse(this.leftArm, this.head, false, p_363560_.getUseItemStackForArm(HumanoidArm.LEFT), p_363560_); + SpearAnimations.thirdPersonHandUse(this.leftArm, this.head, false, state.getUseItemStackForArm(HumanoidArm.LEFT), state); + default: -+ p_363560_.leftArmPose.applyTransform(this, p_363560_, net.minecraft.world.entity.HumanoidArm.LEFT); ++ state.leftArmPose.applyTransform(this, state, net.minecraft.world.entity.HumanoidArm.LEFT); } } -@@ -427,7 +_,7 @@ +@@ -493,7 +_,7 @@ } @OnlyIn(Dist.CLIENT) @@ -27,10 +27,10 @@ EMPTY(false, false), ITEM(false, false), BLOCK(false, false), -@@ -453,10 +_,29 @@ - ArmPose(final boolean p_102896_, final boolean p_456170_) { - this.twoHanded = p_102896_; - this.affectsOffhandPose = p_456170_; +@@ -519,10 +_,29 @@ + private ArmPose(final boolean twoHanded, final boolean affectsOffhandPose) { + this.twoHanded = twoHanded; + this.affectsOffhandPose = affectsOffhandPose; + this.forgeArmPose = null; } diff --git a/patches/minecraft/net/minecraft/client/model/geom/LayerDefinitions.java.patch b/patches/minecraft/net/minecraft/client/model/geom/LayerDefinitions.java.patch index cd7ef0833c..35e82948e2 100644 --- a/patches/minecraft/net/minecraft/client/model/geom/LayerDefinitions.java.patch +++ b/patches/minecraft/net/minecraft/client/model/geom/LayerDefinitions.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/client/model/geom/LayerDefinitions.java +++ b/net/minecraft/client/model/geom/LayerDefinitions.java -@@ -524,6 +_,7 @@ - builder.put(ModelLayers.createHangingSignModelName(p_374591_, hangingsignrenderer$attachmenttype), layerdefinition58); +@@ -572,6 +_,7 @@ + builder.put(ModelLayers.createHangingSignModelName(woodType, hangingsignblock$attachment), layerdefinition70); } }); + net.minecraftforge.client.ForgeHooksClient.loadLayerDefinitions(builder); ImmutableMap immutablemap = builder.build(); - List list = ModelLayers.getKnownLocations().filter(p_171117_ -> !immutablemap.containsKey(p_171117_)).toList(); + List list = ModelLayers.getKnownLocations().filter(l -> !immutablemap.containsKey(l)).toList(); if (!list.isEmpty()) { diff --git a/patches/minecraft/net/minecraft/client/model/geom/ModelLayers.java.patch b/patches/minecraft/net/minecraft/client/model/geom/ModelLayers.java.patch index d45ba84155..7407aaa41c 100644 --- a/patches/minecraft/net/minecraft/client/model/geom/ModelLayers.java.patch +++ b/patches/minecraft/net/minecraft/client/model/geom/ModelLayers.java.patch @@ -1,24 +1,24 @@ --- a/net/minecraft/client/model/geom/ModelLayers.java +++ b/net/minecraft/client/model/geom/ModelLayers.java -@@ -341,15 +_,18 @@ +@@ -324,15 +_,18 @@ } - public static ModelLayerLocation createStandingSignModelName(WoodType p_171292_) { -- return createLocation("sign/standing/" + p_171292_.name(), "main"); -+ Identifier location = Identifier.parse(p_171292_.name()); + public static ModelLayerLocation createStandingSignModelName(final WoodType type) { +- return createLocation("sign/standing/" + type.name(), "main"); ++ Identifier location = Identifier.parse(type.name()); + return new ModelLayerLocation(Identifier.fromNamespaceAndPath(location.getNamespace(), "sign/standing/" + location.getPath()), "main"); } - public static ModelLayerLocation createWallSignModelName(WoodType p_363532_) { -- return createLocation("sign/wall/" + p_363532_.name(), "main"); -+ Identifier location = Identifier.parse(p_363532_.name()); + public static ModelLayerLocation createWallSignModelName(final WoodType type) { +- return createLocation("sign/wall/" + type.name(), "main"); ++ Identifier location = Identifier.parse(type.name()); + return new ModelLayerLocation(Identifier.fromNamespaceAndPath(location.getNamespace(), "sign/wall/" + location.getPath()), "main"); } - public static ModelLayerLocation createHangingSignModelName(WoodType p_252225_, HangingSignRenderer.AttachmentType p_378070_) { -- return createLocation("hanging_sign/" + p_252225_.name() + "/" + p_378070_.getSerializedName(), "main"); -+ Identifier location = Identifier.parse(p_252225_.name()); -+ return new ModelLayerLocation(Identifier.fromNamespaceAndPath(location.getNamespace(), "hanging_sign/" + location.getPath() + "/" + p_378070_.getSerializedName()), "main"); + public static ModelLayerLocation createHangingSignModelName(final WoodType type, final HangingSignBlock.Attachment attachmentType) { +- return createLocation("hanging_sign/" + type.name() + "/" + attachmentType.getSerializedName(), "main"); ++ Identifier location = Identifier.parse(type.name()); ++ return new ModelLayerLocation(Identifier.fromNamespaceAndPath(location.getNamespace(), "hanging_sign/" + location.getPath() + "/" + attachmentType.getSerializedName()), "main"); } public static Stream getKnownLocations() { diff --git a/patches/minecraft/net/minecraft/client/multiplayer/AccountProfileKeyPairManager.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/AccountProfileKeyPairManager.java.patch index 6b8bb5b98a..a21d92e760 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/AccountProfileKeyPairManager.java.patch +++ b/patches/minecraft/net/minecraft/client/multiplayer/AccountProfileKeyPairManager.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/multiplayer/AccountProfileKeyPairManager.java +++ b/net/minecraft/client/multiplayer/AccountProfileKeyPairManager.java -@@ -74,6 +_,8 @@ +@@ -76,6 +_,8 @@ this.writeProfileKeyPair(profilekeypair); return Optional.ofNullable(profilekeypair); } catch (CryptException | MinecraftClientException | IOException ioexception) { @@ -8,4 +8,4 @@ + if (net.minecraftforge.fml.loading.FMLLoader.isProduction() || this.userApiService != UserApiService.OFFLINE) LOGGER.error("Failed to retrieve profile key pair", (Throwable)ioexception); this.writeProfileKeyPair(null); - return p_254074_; + return cachedKeyPair; diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ClientChunkCache.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ClientChunkCache.java.patch index 1769befafd..a4fce51e58 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/ClientChunkCache.java.patch +++ b/patches/minecraft/net/minecraft/client/multiplayer/ClientChunkCache.java.patch @@ -1,14 +1,14 @@ --- a/net/minecraft/client/multiplayer/ClientChunkCache.java +++ b/net/minecraft/client/multiplayer/ClientChunkCache.java -@@ -64,6 +_,7 @@ - int i = this.storage.getIndex(p_298665_.x, p_298665_.z); +@@ -65,6 +_,7 @@ + int i = this.storage.getIndex(pos.x(), pos.z()); LevelChunk levelchunk = this.storage.getChunk(i); - if (isValidChunk(levelchunk, p_298665_.x, p_298665_.z)) { + if (isValidChunk(levelchunk, pos.x(), pos.z())) { + net.minecraftforge.event.level.ChunkEvent.Unload.BUS.post(new net.minecraftforge.event.level.ChunkEvent.Unload(levelchunk)); this.storage.drop(i, levelchunk); } } -@@ -123,6 +_,7 @@ +@@ -124,6 +_,7 @@ } this.level.onChunkLoaded(chunkpos); diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ClientCommonPacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ClientCommonPacketListenerImpl.java.patch index dd4c4a84db..1038902575 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/ClientCommonPacketListenerImpl.java.patch +++ b/patches/minecraft/net/minecraft/client/multiplayer/ClientCommonPacketListenerImpl.java.patch @@ -3,8 +3,8 @@ @@ -157,6 +_,7 @@ @Override - public void handleCustomPayload(ClientboundCustomPayloadPacket p_298103_) { -+ if (net.minecraftforge.common.ForgeHooks.onCustomPayload(p_298103_.payload(), this.connection)) return; - CustomPacketPayload custompacketpayload = p_298103_.payload(); + public void handleCustomPayload(final ClientboundCustomPayloadPacket packet) { ++ if (net.minecraftforge.common.ForgeHooks.onCustomPayload(packet.payload(), this.connection)) return; + CustomPacketPayload custompacketpayload = packet.payload(); if (!(custompacketpayload instanceof DiscardedPayload)) { - PacketUtils.ensureRunningOnSameThread(p_298103_, this, this.minecraft.packetProcessor()); + PacketUtils.ensureRunningOnSameThread(packet, this, this.minecraft.packetProcessor()); diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ClientConfigurationPacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ClientConfigurationPacketListenerImpl.java.patch index f2537afe36..d12bfa070b 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/ClientConfigurationPacketListenerImpl.java.patch +++ b/patches/minecraft/net/minecraft/client/multiplayer/ClientConfigurationPacketListenerImpl.java.patch @@ -1,9 +1,9 @@ --- a/net/minecraft/client/multiplayer/ClientConfigurationPacketListenerImpl.java +++ b/net/minecraft/client/multiplayer/ClientConfigurationPacketListenerImpl.java -@@ -182,6 +_,7 @@ - return true; +@@ -148,6 +_,7 @@ + })); } - })); + } + net.minecraftforge.common.ForgeHooks.handleClientConfigurationComplete(this.connection); } diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java.patch index 8d0dfca66c..137f604874 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java.patch +++ b/patches/minecraft/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java.patch @@ -3,16 +3,16 @@ @@ -209,6 +_,7 @@ Component component = this.wasTransferredTo ? CommonComponents.TRANSFER_CONNECT_FAILED : CommonComponents.CONNECT_FAILED; if (this.serverData != null && this.serverData.isRealm()) { - this.minecraft.setScreen(new DisconnectedScreen(this.parent, component, p_342266_.reason(), CommonComponents.GUI_BACK)); -+ } else if (net.minecraftforge.client.ForgeHooksClient.onClientDisconnect(this.connection, this.minecraft, this.parent, p_342266_.reason())) { + this.minecraft.setScreen(new DisconnectedScreen(this.parent, component, details.reason(), CommonComponents.GUI_BACK)); ++ } else if (net.minecraftforge.client.ForgeHooksClient.onClientDisconnect(this.connection, this.minecraft, this.parent, details.reason())) { } else { - this.minecraft.setScreen(new DisconnectedScreen(this.parent, component, p_342266_)); + this.minecraft.setScreen(new DisconnectedScreen(this.parent, component, details)); } @@ -233,6 +_,7 @@ @Override - public void handleCustomQuery(ClientboundCustomQueryPacket p_104545_) { -+ if (net.minecraftforge.common.ForgeHooks.onCustomPayload(p_104545_, this.connection)) return; + public void handleCustomQuery(final ClientboundCustomQueryPacket packet) { ++ if (net.minecraftforge.common.ForgeHooks.onCustomPayload(packet, this.connection)) return; this.updateStatus.accept(Component.translatable("connect.negotiating")); - this.connection.send(new ServerboundCustomQueryAnswerPacket(p_104545_.transactionId(), null)); + this.connection.send(new ServerboundCustomQueryAnswerPacket(packet.transactionId(), null)); } diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ClientLevel.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ClientLevel.java.patch index a2ad588964..d7f671294c 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/ClientLevel.java.patch +++ b/patches/minecraft/net/minecraft/client/multiplayer/ClientLevel.java.patch @@ -1,94 +1,92 @@ --- a/net/minecraft/client/multiplayer/ClientLevel.java +++ b/net/minecraft/client/multiplayer/ClientLevel.java -@@ -143,6 +_,7 @@ - p_389331_.put(BiomeColors.FOLIAGE_COLOR_RESOLVER, new BlockTintCache(p_194177_ -> this.calculateBlockTint(p_194177_, BiomeColors.FOLIAGE_COLOR_RESOLVER))); - p_389331_.put(BiomeColors.DRY_FOLIAGE_COLOR_RESOLVER, new BlockTintCache(p_389335_ -> this.calculateBlockTint(p_389335_, BiomeColors.DRY_FOLIAGE_COLOR_RESOLVER))); - p_389331_.put(BiomeColors.WATER_COLOR_RESOLVER, new BlockTintCache(p_194168_ -> this.calculateBlockTint(p_194168_, BiomeColors.WATER_COLOR_RESOLVER))); -+ net.minecraftforge.client.ColorResolverManager.registerBlockTintCaches(ClientLevel.this, p_389331_); +@@ -150,6 +_,7 @@ + cache.put(BiomeColors.FOLIAGE_COLOR_RESOLVER, new BlockTintCache(pos -> this.calculateBlockTint(pos, BiomeColors.FOLIAGE_COLOR_RESOLVER))); + cache.put(BiomeColors.DRY_FOLIAGE_COLOR_RESOLVER, new BlockTintCache(pos -> this.calculateBlockTint(pos, BiomeColors.DRY_FOLIAGE_COLOR_RESOLVER))); + cache.put(BiomeColors.WATER_COLOR_RESOLVER, new BlockTintCache(pos -> this.calculateBlockTint(pos, BiomeColors.WATER_COLOR_RESOLVER))); ++ net.minecraftforge.client.ColorResolverManager.registerBlockTintCaches(ClientLevel.this, cache); }); private final ClientChunkCache chunkSource; private final Deque lightUpdateQueue = Queues.newArrayDeque(); -@@ -155,6 +_,8 @@ +@@ -161,6 +_,8 @@ + private final EnvironmentAttributeSystem environmentAttributes; private final int seaLevel; - private boolean tickDayTime; private static final Set MARKER_PARTICLE_ITEMS = Set.of(Items.BARRIER, Items.LIGHT); + private final it.unimi.dsi.fastutil.ints.Int2ObjectMap> partEntities = new it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap<>(); + private final net.minecraftforge.client.model.data.ModelDataManager modelDataManager = new net.minecraftforge.client.model.data.ModelDataManager(this); - public void handleBlockChangedAck(int p_233652_) { + public void handleBlockChangedAck(final int sequence) { if (SharedConstants.DEBUG_BLOCK_BREAK) { -@@ -240,6 +_,8 @@ - if (this.canHaveWeather()) { - this.prepareWeather(); +@@ -273,6 +_,8 @@ + + runnable.run(); } + this.gatherCapabilities(); + net.minecraftforge.event.ForgeEventFactory.onLevelLoad(this); } - private EnvironmentAttributeSystem.Builder addEnvironmentAttributeLayers(EnvironmentAttributeSystem.Builder p_450625_) { -@@ -350,6 +_,7 @@ - p_104640_.setOldPosAndRot(); - p_104640_.tickCount++; - Profiler.get().push(() -> BuiltInRegistries.ENTITY_TYPE.getKey(p_104640_.getType()).toString()); -+ if (p_104640_.canUpdate()) - p_104640_.tick(); + public @Nullable EndFlashState endFlashState() { +@@ -352,6 +_,7 @@ + entity.setOldPosAndRot(); + entity.tickCount++; + Profiler.get().push(entity.typeHolder()::getRegisteredName); ++ if (entity.canUpdate()) + entity.tick(); Profiler.get().pop(); -@@ -401,8 +_,10 @@ +@@ -412,8 +_,10 @@ } - public void addEntity(Entity p_104741_) { -+ if (net.minecraftforge.event.ForgeEventFactory.onEntityJoinLevel(p_104741_, this)) return; - this.removeEntity(p_104741_.getId(), Entity.RemovalReason.DISCARDED); - this.entityStorage.addEntity(p_104741_); -+ p_104741_.onAddedToWorld(); + public void addEntity(final Entity entity) { ++ if (net.minecraftforge.event.ForgeEventFactory.onEntityJoinLevel(entity, this)) return; + this.removeEntity(entity.getId(), Entity.RemovalReason.DISCARDED); + this.entityStorage.addEntity(entity); ++ entity.onAddedToLevel(); } - public void removeEntity(int p_171643_, Entity.RemovalReason p_171644_) { -@@ -576,6 +_,12 @@ - float p_263349_, - long p_263408_ + public void removeEntity(final int id, final Entity.RemovalReason reason) { +@@ -579,8 +_,10 @@ + final float pitch, + final long seed ) { -+ var event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtPosition(this, p_263372_, p_263404_, p_263365_, p_263335_, p_263417_, p_263416_, p_263349_); ++ var event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtPosition(this, x, y, z, sound, source, volume, pitch); + if (event == null || event.getSound() == null) return; -+ p_263335_ = event.getSound(); -+ p_263417_ = event.getSource(); -+ p_263416_ = event.getNewVolume(); -+ p_263349_ = event.getNewPitch(); - if (p_394722_ == this.minecraft.player) { - this.playSound(p_263372_, p_263404_, p_263365_, p_263335_.value(), p_263417_, p_263416_, p_263349_, false, p_263408_); + if (except == this.minecraft.player) { +- this.playSound(x, y, z, sound.value(), source, volume, pitch, false, seed); ++ this.playSound(x, y, z, event.getSound().value(), event.getSource(), event.getNewVolume(), event.getNewPitch(), false, seed); } -@@ -585,6 +_,12 @@ - public void playSeededSound( - @Nullable Entity p_263536_, Entity p_396496_, Holder p_263518_, SoundSource p_263487_, float p_263538_, float p_263524_, long p_263509_ + } + +@@ -594,8 +_,10 @@ + final float pitch, + final long seed ) { -+ var event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(this.minecraft.level, p_263536_, p_263518_, p_263487_, p_263538_, p_263524_); ++ var event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(this, except, sound, source, volume, pitch); + if (event == null || event.getSound() == null) return; -+ p_263518_ = event.getSound(); -+ p_263487_ = event.getSource(); -+ p_263538_ = event.getNewVolume(); -+ p_263524_ = event.getNewPitch(); - if (p_263536_ == this.minecraft.player) { - this.minecraft.getSoundManager().play(new EntityBoundSoundInstance(p_263518_.value(), p_263487_, p_263538_, p_263524_, p_396496_, p_263509_)); + if (except == this.minecraft.player) { +- this.minecraft.getSoundManager().play(new EntityBoundSoundInstance(sound.value(), source, volume, pitch, sourceEntity, seed)); ++ this.minecraft.getSoundManager().play(new EntityBoundSoundInstance(event.getSound().value(), event.getSource(), event.getNewVolume(), event.getNewPitch(), sourceEntity, seed)); } -@@ -954,7 +_,7 @@ + } + +@@ -951,7 +_,7 @@ @Override - public void addDestroyBlockEffect(BlockPos p_171667_, BlockState p_171668_) { -- if (!p_171668_.isAir() && p_171668_.shouldSpawnTerrainParticles()) { -+ if (!p_171668_.isAir() && !net.minecraftforge.client.extensions.common.IClientBlockExtensions.of(p_171668_).addDestroyEffects(p_171668_, this, p_171667_, this.minecraft.particleEngine)) { - VoxelShape voxelshape = p_171668_.getShape(this, p_171667_); + public void addDestroyBlockEffect(final BlockPos pos, final BlockState blockState) { +- if (!blockState.isAir() && blockState.shouldSpawnTerrainParticles()) { ++ if (!blockState.isAir() && !net.minecraftforge.client.extensions.common.IClientBlockExtensions.of(blockState).addDestroyEffects(blockState, this, pos, this.minecraft.particleEngine)) { + VoxelShape voxelshape = blockState.getShape(this, pos); double d0 = 0.25; voxelshape.forAllBoxes( -@@ -989,6 +_,7 @@ - p_171668_, - p_171667_ +@@ -978,6 +_,7 @@ + new TerrainParticle( + this, pos.getX() + d7, pos.getY() + d8, pos.getZ() + d9, d4 - 0.5, d5 - 0.5, d6 - 0.5, blockState, pos ) -+ .updateSprite(p_171668_, p_171667_) ++ .updateSprite(blockState, pos) ); } } -@@ -998,6 +_,13 @@ +@@ -987,6 +_,13 @@ } } @@ -99,20 +97,20 @@ + } + + /** @deprecated Forge - Use crack(BlockPos, BlockHitResult) as it has more context and gives more control to modders */ - public void addBreakingBlockEffect(BlockPos p_425440_, Direction p_431745_) { - BlockState blockstate = this.getBlockState(p_425440_); + public void addBreakingBlockEffect(final BlockPos pos, final Direction direction) { + BlockState blockstate = this.getBlockState(pos); if (blockstate.getRenderShape() != RenderShape.INVISIBLE && blockstate.shouldSpawnTerrainParticles()) { -@@ -1033,7 +_,7 @@ +@@ -1022,7 +_,7 @@ d0 = i + aabb.maxX + 0.1F; } -- this.minecraft.particleEngine.add(new TerrainParticle(this, d0, d1, d2, 0.0, 0.0, 0.0, blockstate, p_425440_).setPower(0.2F).scale(0.6F)); -+ this.minecraft.particleEngine.add(new TerrainParticle(this, d0, d1, d2, 0.0, 0.0, 0.0, blockstate, p_425440_).updateSprite(blockstate, p_425440_).setPower(0.2F).scale(0.6F)); +- this.minecraft.particleEngine.add(new TerrainParticle(this, d0, d1, d2, 0.0, 0.0, 0.0, blockstate, pos).setPower(0.2F).scale(0.6F)); ++ this.minecraft.particleEngine.add(new TerrainParticle(this, d0, d1, d2, 0.0, 0.0, 0.0, blockstate, pos).updateSprite(blockstate, pos).setPower(0.2F).scale(0.6F)); } } -@@ -1097,6 +_,16 @@ - this.explosionTracker.track(p_429129_, p_428744_, p_431051_, p_431683_); +@@ -1088,6 +_,16 @@ + this.explosionTracker.track(center, radius, blockCount, blockParticles); } + @Override @@ -128,38 +126,38 @@ @OnlyIn(Dist.CLIENT) public static class ClientLevelData implements WritableLevelData { private final boolean hardcore; -@@ -1178,6 +_,7 @@ +@@ -1143,6 +_,7 @@ } - public void setDifficulty(Difficulty p_104852_) { -+ net.minecraftforge.event.ForgeEventFactory.onDifficultyChange(p_104852_, this.difficulty); - this.difficulty = p_104852_; + public void setDifficulty(final Difficulty difficulty) { ++ net.minecraftforge.event.ForgeEventFactory.onDifficultyChange(difficulty, this.difficulty); + this.difficulty = difficulty; } -@@ -1220,6 +_,12 @@ +@@ -1190,6 +_,12 @@ break; default: } + -+ if (p_171712_.isMultipartEntity()) { -+ for (var part : p_171712_.getParts()) { ++ if (entity.isMultipartEntity()) { ++ for (var part : entity.getParts()) { + ClientLevel.this.partEntities.put(part.getId(), part); + } + } } - public void onTrackingEnd(Entity p_171716_) { -@@ -1232,6 +_,15 @@ + public void onTrackingEnd(final Entity entity) { +@@ -1202,6 +_,15 @@ ClientLevel.this.dragonParts.removeAll(Arrays.asList(enderdragon.getSubEntities())); break; default: + } + -+ p_171716_.onRemovedFromWorld(); -+ net.minecraftforge.event.ForgeEventFactory.onEntityLeaveLevel(p_171716_, ClientLevel.this); ++ entity.onRemovedFromLevel(); ++ net.minecraftforge.event.ForgeEventFactory.onEntityLeaveLevel(entity, ClientLevel.this); + -+ if (p_171716_.isMultipartEntity()) { -+ for (var part : p_171716_.getParts()) { ++ if (entity.isMultipartEntity()) { ++ for (var part : entity.getParts()) { + ClientLevel.this.partEntities.remove(part.getId()); + } } diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ClientPacketListener.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ClientPacketListener.java.patch index 716329dbe6..475f0c06fe 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/ClientPacketListener.java.patch +++ b/patches/minecraft/net/minecraft/client/multiplayer/ClientPacketListener.java.patch @@ -1,14 +1,14 @@ --- a/net/minecraft/client/multiplayer/ClientPacketListener.java +++ b/net/minecraft/client/multiplayer/ClientPacketListener.java -@@ -527,6 +_,7 @@ +@@ -536,6 +_,7 @@ this.debugSubscriber.clear(); this.minecraft.levelRenderer.debugRenderer.refreshRendererList(); this.minecraft.player.resetPos(); + net.minecraftforge.client.event.ForgeEventFactoryClient.firePlayerLogin(this.minecraft.gameMode, this.minecraft.player, this.minecraft.getConnection().connection); - this.minecraft.player.setId(p_105030_.playerId()); + this.minecraft.player.setId(packet.playerId()); this.level.addEntity(this.minecraft.player); this.minecraft.player.input = new KeyboardInput(this.minecraft.options); -@@ -1334,6 +_,8 @@ +@@ -1345,6 +_,8 @@ localplayer1.getAttributes().assignBaseValues(localplayer.getAttributes()); } @@ -17,35 +17,35 @@ this.level.addEntity(localplayer1); localplayer1.input = new KeyboardInput(this.minecraft.options); this.minecraft.gameMode.adjustPlayer(localplayer1); -@@ -1489,7 +_,7 @@ - ProblemReporter.ScopedCollector problemreporter$scopedcollector = new ProblemReporter.ScopedCollector(p_404890_.problemPath(), LOGGER); +@@ -1504,7 +_,7 @@ + ProblemReporter.ScopedCollector problemreporter$scopedcollector = new ProblemReporter.ScopedCollector(blockEntity.problemPath(), LOGGER); try { -- p_404890_.loadWithComponents(TagValueInput.create(problemreporter$scopedcollector, this.registryAccess, p_104976_.getTag())); -+ p_404890_.onDataPacket(connection, TagValueInput.create(problemreporter$scopedcollector, this.registryAccess, p_104976_.getTag()), this.registryAccess); +- blockEntity.loadWithComponents(TagValueInput.create(problemreporter$scopedcollector, this.registryAccess, packet.getTag())); ++ blockEntity.onDataPacket(connection, TagValueInput.create(problemreporter$scopedcollector, this.registryAccess, packet.getTag()), this.registryAccess); } catch (Throwable throwable1) { try { problemreporter$scopedcollector.close(); -@@ -1666,7 +_,9 @@ +@@ -1727,7 +_,9 @@ @Override - public void handleCommands(ClientboundCommandsPacket p_104990_) { - PacketUtils.ensureRunningOnSameThread(p_104990_, this, this.minecraft.packetProcessor()); -- this.commands = new CommandDispatcher<>(p_104990_.getRoot(CommandBuildContext.simple(this.registryAccess, this.enabledFeatures), COMMAND_NODE_BUILDER)); + public void handleCommands(final ClientboundCommandsPacket packet) { + PacketUtils.ensureRunningOnSameThread(packet, this, this.minecraft.packetProcessor()); +- this.commands = new CommandDispatcher<>(packet.getRoot(CommandBuildContext.simple(this.registryAccess, this.enabledFeatures), COMMAND_NODE_BUILDER)); + var context = CommandBuildContext.simple(this.registryAccess, this.enabledFeatures); -+ this.commands = new CommandDispatcher<>(p_104990_.getRoot(context, COMMAND_NODE_BUILDER)); ++ this.commands = new CommandDispatcher<>(packet.getRoot(context, COMMAND_NODE_BUILDER)); + this.commands = net.minecraftforge.client.ClientCommandHandler.mergeServerCommands(this.commands, context); } @Override -@@ -1767,6 +_,7 @@ +@@ -1828,6 +_,7 @@ if (this.minecraft.screen instanceof RecipeUpdateListener recipeupdatelistener) { recipeupdatelistener.recipesUpdated(); } -+ net.minecraftforge.client.event.ForgeEventFactoryClient.onRecipesUpdated(p_364029_); ++ net.minecraftforge.client.event.ForgeEventFactoryClient.onRecipesUpdated(recipeBook); } @Override -@@ -1805,6 +_,8 @@ +@@ -1872,6 +_,8 @@ this.fuelValues = FuelValues.vanillaBurnTimes(this.registryAccess, this.enabledFeatures); List list1 = List.copyOf(CreativeModeTabs.searchTab().getDisplayItems()); this.searchTrees.updateCreativeTags(list1); @@ -54,28 +54,30 @@ } @Override -@@ -2631,6 +_,8 @@ +@@ -2688,7 +_,9 @@ + } } - public void sendChat(String p_249888_) { -+ p_249888_ = net.minecraftforge.client.ForgeHooksClient.onClientSendMessage(p_249888_); -+ if (p_249888_.isEmpty()) return; +- public void sendChat(final String content) { ++ public void sendChat(String content) { ++ content = net.minecraftforge.client.ForgeHooksClient.onClientSendMessage(content); ++ if (content.isEmpty()) return; Instant instant = Instant.now(); long i = Crypt.SaltSupplier.getLong(); LastSeenMessagesTracker.Update lastseenmessagestracker$update = this.lastSeenMessages.generateAndApplyUpdate(); -@@ -2639,6 +_,7 @@ +@@ -2698,6 +_,7 @@ } - public void sendCommand(String p_250092_) { -+ if (net.minecraftforge.client.ClientCommandHandler.runCommand(p_250092_)) return; - SignableCommand signablecommand = SignableCommand.of(this.commands.parse(p_250092_, this.suggestionsProvider)); + public void sendCommand(final String command) { ++ if (net.minecraftforge.client.ClientCommandHandler.runCommand(command)) return; + SignableCommand signablecommand = SignableCommand.of(this.commands.parse(command, this.suggestionsProvider)); if (signablecommand.arguments().isEmpty()) { - this.send(new ServerboundChatCommandPacket(p_250092_)); -@@ -2655,6 +_,7 @@ + this.send(new ServerboundChatCommandPacket(command)); +@@ -2714,6 +_,7 @@ } - public void sendUnattendedCommand(String p_407213_, @Nullable Screen p_406262_) { -+ if (net.minecraftforge.client.ClientCommandHandler.runCommand(p_407213_)) return; - switch (this.verifyCommand(p_407213_)) { + public void sendUnattendedCommand(final String command, final @Nullable Screen screenAfterCommand) { ++ if (net.minecraftforge.client.ClientCommandHandler.runCommand(command)) return; + switch (this.verifyCommand(command)) { case NO_ISSUES: - this.send(new ServerboundChatCommandPacket(p_407213_)); + this.send(new ServerboundChatCommandPacket(command)); diff --git a/patches/minecraft/net/minecraft/client/multiplayer/MultiPlayerGameMode.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/MultiPlayerGameMode.java.patch index 3edc8e15d7..5b6a49eda1 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/MultiPlayerGameMode.java.patch +++ b/patches/minecraft/net/minecraft/client/multiplayer/MultiPlayerGameMode.java.patch @@ -1,115 +1,115 @@ --- a/net/minecraft/client/multiplayer/MultiPlayerGameMode.java +++ b/net/minecraft/client/multiplayer/MultiPlayerGameMode.java -@@ -112,6 +_,7 @@ +@@ -114,6 +_,7 @@ } - public boolean destroyBlock(BlockPos p_105268_) { -+ if (minecraft.player.getMainHandItem().onBlockStartBreak(p_105268_, minecraft.player)) return false; - if (this.minecraft.player.blockActionRestricted(this.minecraft.level, p_105268_, this.localPlayerMode)) { + public boolean destroyBlock(final BlockPos pos) { ++ if (minecraft.player.getMainHandItem().onBlockStartBreak(pos, minecraft.player)) return false; + if (this.minecraft.player.blockActionRestricted(this.minecraft.level, pos, this.localPlayerMode)) { return false; } else { -@@ -126,9 +_,8 @@ +@@ -128,9 +_,8 @@ } else if (blockstate.isAir()) { return false; } else { -- block.playerWillDestroy(level, p_105268_, blockstate, this.minecraft.player); - FluidState fluidstate = level.getFluidState(p_105268_); -- boolean flag = level.setBlock(p_105268_, fluidstate.createLegacyBlock(), 11); -+ boolean flag = blockstate.onDestroyedByPlayer(level, p_105268_, minecraft.player, false, fluidstate); +- block.playerWillDestroy(level, pos, blockstate, this.minecraft.player); + FluidState fluidstate = level.getFluidState(pos); +- boolean flag = level.setBlock(pos, fluidstate.createLegacyBlock(), 11); ++ boolean flag = blockstate.onDestroyedByPlayer(level, pos, minecraft.player, false, fluidstate); if (flag) { - block.destroy(level, p_105268_, blockstate); + block.destroy(level, pos, blockstate); } -@@ -157,6 +_,7 @@ +@@ -159,6 +_,7 @@ } - this.startPrediction(this.minecraft.level, p_233757_ -> { -+ if (!net.minecraftforge.event.ForgeEventFactory.isLeftClickBlockCancelled(this.minecraft.player, p_105270_, p_105271_, ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK)) - this.destroyBlock(p_105270_); - return new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK, p_105270_, p_105271_, p_233757_); + this.startPrediction(this.minecraft.level, sequence -> { ++ if (!net.minecraftforge.event.ForgeEventFactory.isLeftClickBlockCancelled(this.minecraft.player, pos, direction, ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK)) + this.destroyBlock(pos); + return new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK, pos, direction, sequence); }); -@@ -170,6 +_,7 @@ +@@ -172,6 +_,7 @@ this.connection - .send(new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.ABORT_DESTROY_BLOCK, this.destroyBlockPos, p_105271_)); + .send(new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.ABORT_DESTROY_BLOCK, this.destroyBlockPos, direction)); } -+ var event = net.minecraftforge.event.ForgeEventFactory.onLeftClickBlock(this.minecraft.player, p_105270_, p_105271_, ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK); ++ var event = net.minecraftforge.event.ForgeEventFactory.onLeftClickBlock(this.minecraft.player, pos, direction, ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK); - BlockState blockstate1 = this.minecraft.level.getBlockState(p_105270_); - this.minecraft.getTutorial().onDestroyBlock(this.minecraft.level, p_105270_, blockstate1, 0.0F); -@@ -180,9 +_,11 @@ - this.startPrediction(this.minecraft.level, p_233728_ -> { + BlockState blockstate1 = this.minecraft.level.getBlockState(pos); + this.minecraft.getTutorial().onDestroyBlock(this.minecraft.level, pos, blockstate1, 0.0F); +@@ -182,9 +_,11 @@ + this.startPrediction(this.minecraft.level, sequence -> { boolean flag = !blockstate1.isAir(); if (flag && this.destroyProgress == 0.0F) { + if (event != null && !event.getUseBlock().isDenied()) - blockstate1.attack(this.minecraft.level, p_105270_, this.minecraft.player); + blockstate1.attack(this.minecraft.level, pos, this.minecraft.player); } + if (event != null && !event.getUseItem().isDenied()) { - if (flag && blockstate1.getDestroyProgress(this.minecraft.player, this.minecraft.player.level(), p_105270_) >= 1.0F) { - this.destroyBlock(p_105270_); + if (flag && blockstate1.getDestroyProgress(this.minecraft.player, this.minecraft.player.level(), pos) >= 1.0F) { + this.destroyBlock(pos); } else { -@@ -193,6 +_,7 @@ +@@ -195,6 +_,7 @@ this.destroyTicks = 0.0F; this.minecraft.level.destroyBlockProgress(this.minecraft.player.getId(), this.destroyBlockPos, this.getDestroyStage()); } + } - return new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK, p_105270_, p_105271_, p_233728_); + return new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK, pos, direction, sequence); }); -@@ -233,6 +_,7 @@ +@@ -235,6 +_,7 @@ } - this.startPrediction(this.minecraft.level, p_233753_ -> { -+ if (!net.minecraftforge.event.ForgeEventFactory.isLeftClickBlockCancelled(this.minecraft.player, p_105284_, p_105285_, ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK)) - this.destroyBlock(p_105284_); - return new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK, p_105284_, p_105285_, p_233753_); + this.startPrediction(this.minecraft.level, sequence -> { ++ if (!net.minecraftforge.event.ForgeEventFactory.isLeftClickBlockCancelled(this.minecraft.player, pos, direction, ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK)) + this.destroyBlock(pos); + return new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK, pos, direction, sequence); }); -@@ -245,7 +_,7 @@ +@@ -247,7 +_,7 @@ } else { - this.destroyProgress = this.destroyProgress + blockstate.getDestroyProgress(this.minecraft.player, this.minecraft.player.level(), p_105284_); + this.destroyProgress = this.destroyProgress + blockstate.getDestroyProgress(this.minecraft.player, this.minecraft.player.level(), pos); if (this.destroyTicks % 4.0F == 0.0F) { - SoundType soundtype = blockstate.getSoundType(); -+ SoundType soundtype = blockstate.getSoundType(this.minecraft.level, p_105284_, this.minecraft.player); ++ SoundType soundtype = blockstate.getSoundType(this.minecraft.level, pos, this.minecraft.player); this.minecraft .getSoundManager() .play( -@@ -262,6 +_,7 @@ +@@ -264,6 +_,7 @@ this.destroyTicks++; - this.minecraft.getTutorial().onDestroyBlock(this.minecraft.level, p_105284_, blockstate, Mth.clamp(this.destroyProgress, 0.0F, 1.0F)); -+ if (net.minecraftforge.event.ForgeEventFactory.onLeftClickBlockHold(this.minecraft.player, p_105284_, p_105285_).getUseItem().isDenied()) return true; + this.minecraft.getTutorial().onDestroyBlock(this.minecraft.level, pos, blockstate, Mth.clamp(this.destroyProgress, 0.0F, 1.0F)); ++ if (net.minecraftforge.event.ForgeEventFactory.onLeftClickBlockHold(this.minecraft.player, pos, direction).getUseItem().isDenied()) return true; if (this.destroyProgress >= 1.0F) { this.isDestroying = false; if (SharedConstants.DEBUG_BLOCK_BREAK) { -@@ -304,7 +_,7 @@ +@@ -306,7 +_,7 @@ - private boolean sameDestroyTarget(BlockPos p_105282_) { + private boolean sameDestroyTarget(final BlockPos pos) { ItemStack itemstack = this.minecraft.player.getMainHandItem(); -- return p_105282_.equals(this.destroyBlockPos) && ItemStack.isSameItemSameComponents(itemstack, this.destroyingItem); -+ return p_105282_.equals(this.destroyBlockPos) && !destroyingItem.shouldCauseBlockBreakReset(itemstack); +- return pos.equals(this.destroyBlockPos) && ItemStack.isSameItemSameComponents(itemstack, this.destroyingItem); ++ return pos.equals(this.destroyBlockPos) && !destroyingItem.shouldCauseBlockBreakReset(itemstack); } private void ensureHasSentCarriedItem() { -@@ -332,12 +_,23 @@ - private InteractionResult performUseItemOn(LocalPlayer p_233747_, InteractionHand p_233748_, BlockHitResult p_233749_) { - BlockPos blockpos = p_233749_.getBlockPos(); - ItemStack itemstack = p_233747_.getItemInHand(p_233748_); -+ var event = new net.minecraftforge.event.entity.player.PlayerInteractEvent.RightClickBlock(p_233747_, p_233748_, blockpos, p_233749_); +@@ -334,12 +_,23 @@ + private InteractionResult performUseItemOn(final LocalPlayer player, final InteractionHand hand, final BlockHitResult blockHit) { + BlockPos blockpos = blockHit.getBlockPos(); + ItemStack itemstack = player.getItemInHand(hand); ++ var event = new net.minecraftforge.event.entity.player.PlayerInteractEvent.RightClickBlock(player, hand, blockpos, blockHit); + if (net.minecraftforge.event.entity.player.PlayerInteractEvent.RightClickBlock.BUS.post(event)) { + return event.getCancellationResult(); + } if (this.localPlayerMode == GameType.SPECTATOR) { return InteractionResult.CONSUME; } else { -- boolean flag = !p_233747_.getMainHandItem().isEmpty() || !p_233747_.getOffhandItem().isEmpty(); -+ UseOnContext useoncontext = new UseOnContext(p_233747_, p_233748_, p_233749_); +- boolean flag = !player.getMainHandItem().isEmpty() || !player.getOffhandItem().isEmpty(); ++ UseOnContext useoncontext = new UseOnContext(player, hand, blockHit); + if (!event.getUseItem().isDenied()) { + InteractionResult result = itemstack.onItemUseFirst(useoncontext); + if (result != InteractionResult.PASS) { + return result; + } + } -+ boolean flag = !p_233747_.getMainHandItem().doesSneakBypassUse(p_233747_.level(), blockpos, p_233747_) || !p_233747_.getOffhandItem().doesSneakBypassUse(p_233747_.level(), blockpos, p_233747_); - boolean flag1 = p_233747_.isSecondaryUseActive() && flag; ++ boolean flag = !player.getMainHandItem().doesSneakBypassUse(player.level(), blockpos, player) || !player.getOffhandItem().doesSneakBypassUse(player.level(), blockpos, player); + boolean flag1 = player.isSecondaryUseActive() && flag; - if (!flag1) { + if (event.getUseBlock().isAllowed() || (!event.getUseBlock().isDenied() && !flag1)) { BlockState blockstate = this.minecraft.level.getBlockState(blockpos); @@ -119,56 +119,45 @@ } } -- if (!itemstack.isEmpty() && !p_233747_.getCooldowns().isOnCooldown(itemstack)) { -- UseOnContext useoncontext = new UseOnContext(p_233747_, p_233748_, p_233749_); +- if (!itemstack.isEmpty() && !player.getCooldowns().isOnCooldown(itemstack)) { +- UseOnContext useoncontext = new UseOnContext(player, hand, blockHit); + if (event.getUseItem().isDenied()) { + return InteractionResult.PASS; + } -+ if (event.getUseItem().isAllowed() || (!itemstack.isEmpty() && !p_233747_.getCooldowns().isOnCooldown(itemstack))) { ++ if (event.getUseItem().isAllowed() || (!itemstack.isEmpty() && !player.getCooldowns().isOnCooldown(itemstack))) { InteractionResult interactionresult2; - if (p_233747_.hasInfiniteMaterials()) { + if (player.hasInfiniteMaterials()) { int i = itemstack.getCount(); -@@ -393,6 +_,11 @@ - mutableobject.setValue(InteractionResult.PASS); - return serverbounduseitempacket; - } else { -+ var event = new net.minecraftforge.event.entity.player.PlayerInteractEvent.RightClickItem(p_233722_, p_233723_); -+ if (net.minecraftforge.event.entity.player.PlayerInteractEvent.RightClickItem.BUS.post(event)) { -+ mutableobject.setValue(event.getCancellationResult()); -+ return serverbounduseitempacket; +@@ -389,6 +_,11 @@ + mutableobject.setValue(InteractionResult.PASS); + return serverbounduseitempacket; + } else { ++ var event = new net.minecraftforge.event.entity.player.PlayerInteractEvent.RightClickItem(player, hand); ++ if (net.minecraftforge.event.entity.player.PlayerInteractEvent.RightClickItem.BUS.post(event)) { ++ mutableobject.setValue(event.getCancellationResult()); ++ return serverbounduseitempacket; ++ } + InteractionResult interactionresult = itemstack.use(this.minecraft.level, player, hand); + ItemStack itemstack1; + if (interactionresult instanceof InteractionResult.Success interactionresult$success) { +@@ -399,6 +_,9 @@ + + if (itemstack1 != itemstack) { + player.setItemInHand(hand, itemstack1); ++ if (itemstack1.isEmpty()) { ++ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(player, itemstack, hand); + } - InteractionResult interactionresult = itemstack.use(this.minecraft.level, p_233722_, p_233723_); - ItemStack itemstack1; - if (interactionresult instanceof InteractionResult.Success interactionresult$success) { -@@ -403,6 +_,9 @@ + } - if (itemstack1 != itemstack) { - p_233722_.setItemInHand(p_233723_, itemstack1); -+ if (itemstack1.isEmpty()) { -+ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(p_233722_, itemstack, p_233723_); -+ } - } - - mutableobject.setValue(interactionresult); + mutableobject.setValue(interactionresult); @@ -434,6 +_,10 @@ - public InteractionResult interact(Player p_105227_, Entity p_105228_, InteractionHand p_105229_) { this.ensureHasSentCarriedItem(); - this.connection.send(ServerboundInteractPacket.createInteractionPacket(p_105228_, p_105227_.isShiftKeyDown(), p_105229_)); + Vec3 vec3 = hitResult.getLocation().subtract(entity.getX(), entity.getY(), entity.getZ()); + this.connection.send(new ServerboundInteractPacket(entity.getId(), hand, vec3, player.isShiftKeyDown())); + if (this.localPlayerMode != GameType.SPECTATOR) { -+ var event = new net.minecraftforge.event.entity.player.PlayerInteractEvent.EntityInteract(p_105227_, p_105229_, p_105228_); -+ if (net.minecraftforge.event.entity.player.PlayerInteractEvent.EntityInteract.BUS.post(event)) return event.getCancellationResult(); -+ } - return (InteractionResult)(this.localPlayerMode == GameType.SPECTATOR ? InteractionResult.PASS : p_105227_.interactOn(p_105228_, p_105229_)); - } - -@@ -441,6 +_,10 @@ - this.ensureHasSentCarriedItem(); - Vec3 vec3 = p_105233_.getLocation().subtract(p_105232_.getX(), p_105232_.getY(), p_105232_.getZ()); - this.connection.send(ServerboundInteractPacket.createInteractionPacket(p_105232_, p_105231_.isShiftKeyDown(), p_105234_, vec3)); -+ if (this.localPlayerMode != GameType.SPECTATOR) { -+ var event = new net.minecraftforge.event.entity.player.PlayerInteractEvent.EntityInteractSpecific(p_105231_, p_105234_, p_105232_, vec3); ++ var event = new net.minecraftforge.event.entity.player.PlayerInteractEvent.EntityInteractSpecific(player, hand, entity, vec3); + if (net.minecraftforge.event.entity.player.PlayerInteractEvent.EntityInteractSpecific.BUS.post(event)) return event.getCancellationResult(); + } - return (InteractionResult)(this.localPlayerMode == GameType.SPECTATOR ? InteractionResult.PASS : p_105232_.interactAt(p_105231_, vec3, p_105234_)); + return (InteractionResult)(this.localPlayerMode == GameType.SPECTATOR ? InteractionResult.PASS : player.interactOn(entity, hand, vec3)); } diff --git a/patches/minecraft/net/minecraft/client/multiplayer/PlayerInfo.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/PlayerInfo.java.patch index 2c606bc9ac..09c2535550 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/PlayerInfo.java.patch +++ b/patches/minecraft/net/minecraft/client/multiplayer/PlayerInfo.java.patch @@ -3,8 +3,8 @@ @@ -72,6 +_,7 @@ } - protected void setGameMode(GameType p_105318_) { -+ net.minecraftforge.client.ForgeHooksClient.onClientChangeGameType(this, this.gameMode, p_105318_); - this.gameMode = p_105318_; + protected void setGameMode(final GameType gameMode) { ++ net.minecraftforge.client.ForgeHooksClient.onClientChangeGameType(this, this.gameMode, gameMode); + this.gameMode = gameMode; } diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ServerData.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ServerData.java.patch index eb8bfd36b0..1028693e19 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/ServerData.java.patch +++ b/patches/minecraft/net/minecraft/client/multiplayer/ServerData.java.patch @@ -6,5 +6,5 @@ private ServerData.State state = ServerData.State.INITIAL; + public net.minecraftforge.client.ExtendedServerListData forgeData = null; - public ServerData(String p_105375_, String p_105376_, ServerData.Type p_297678_) { - this.name = p_105375_; + public ServerData(final String name, final String ip, final ServerData.Type type) { + this.name = name; diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ServerStatusPinger.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ServerStatusPinger.java.patch index d8f717c01a..b0e87ba8f2 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/ServerStatusPinger.java.patch +++ b/patches/minecraft/net/minecraft/client/multiplayer/ServerStatusPinger.java.patch @@ -1,19 +1,19 @@ --- a/net/minecraft/client/multiplayer/ServerStatusPinger.java +++ b/net/minecraft/client/multiplayer/ServerStatusPinger.java -@@ -107,6 +_,7 @@ - p_105461_.run(); +@@ -124,6 +_,7 @@ + onPersistentDataChange.run(); } }); -+ net.minecraftforge.client.ForgeHooksClient.processForgeListPingData(serverstatus, p_105460_); ++ net.minecraftforge.client.ForgeHooksClient.processForgeListPingData(serverstatus, data); this.pingStart = Util.getMillis(); connection.send(new ServerboundPingRequestPacket(this.pingStart)); this.success = true; -@@ -152,7 +_,7 @@ - } - - void pingLegacyServer(InetSocketAddress p_171812_, final ServerAddress p_300887_, final ServerData p_171813_, EventLoopGroupHolder p_457463_) { -- new Bootstrap().group(p_457463_.eventLoopGroup()).handler(new ChannelInitializer() { -+ new Bootstrap().group(p_457463_.eventLoopGroup(true)).handler(new ChannelInitializer() { - @Override - protected void initChannel(Channel p_105498_) { - try { +@@ -180,7 +_,7 @@ + private void pingLegacyServer( + final InetSocketAddress resolvedAddress, final ServerAddress rawAddress, final ServerData data, final EventLoopGroupHolder eventLoopGroupHolder + ) { +- new Bootstrap().group(eventLoopGroupHolder.eventLoopGroup()).handler(new ChannelInitializer() { ++ new Bootstrap().group(eventLoopGroupHolder.eventLoopGroup(true)).handler(new ChannelInitializer() { + { + Objects.requireNonNull(ServerStatusPinger.this); + } diff --git a/patches/minecraft/net/minecraft/client/multiplayer/SessionSearchTrees.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/SessionSearchTrees.java.patch index 67f10605e1..5cd36219b3 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/SessionSearchTrees.java.patch +++ b/patches/minecraft/net/minecraft/client/multiplayer/SessionSearchTrees.java.patch @@ -14,7 +14,7 @@ @@ -90,44 +_,52 @@ } - public void updateCreativeTags(List p_344581_) { + public void updateCreativeTags(final List items) { + for (var entry : net.minecraftforge.client.CreativeModeTabSearchRegistry.getTagSearchKeys().entrySet()) this.register( - CREATIVE_TAGS, @@ -22,12 +22,12 @@ () -> { - CompletableFuture completablefuture = this.creativeByTagSearch; - this.creativeByTagSearch = CompletableFuture.supplyAsync( -- () -> new IdSearchTree<>(p_342206_ -> p_342206_.getTags().map(TagKey::location), p_344581_), Util.backgroundExecutor() +- () -> new IdSearchTree<>(itemStack -> itemStack.tags().map(TagKey::location), items), Util.backgroundExecutor() - ); -+ var items = entry.getKey() == net.minecraft.world.item.CreativeModeTabs.searchTab() ? p_344581_ : List.copyOf(entry.getKey().getDisplayItems()); ++ var tabItems = entry.getKey() == net.minecraft.world.item.CreativeModeTabs.searchTab() ? items : List.copyOf(entry.getKey().getDisplayItems()); + CompletableFuture completablefuture = this.creativeSearch.getOrDefault(entry.getValue(), EMPTY); + this.creativeSearch.put(entry.getValue(), CompletableFuture.supplyAsync( -+ () -> new IdSearchTree<>(p_342206_ -> p_342206_.getTags().map(TagKey::location), items), Util.backgroundExecutor() ++ () -> new IdSearchTree<>(itemStack -> itemStack.tags().map(TagKey::location), tabItems), Util.backgroundExecutor() + )); completablefuture.cancel(true); } @@ -39,23 +39,23 @@ + return this.getSearchTree(CREATIVE_TAGS); } - public void updateCreativeTooltips(HolderLookup.Provider p_343364_, List p_342500_) { + public void updateCreativeTooltips(final HolderLookup.Provider registries, final List itemStacks) { + for (var entry : net.minecraftforge.client.CreativeModeTabSearchRegistry.getNameSearchKeys().entrySet()) this.register( - CREATIVE_NAMES, + entry.getValue(), () -> { -+ var items = entry.getKey() == net.minecraft.world.item.CreativeModeTabs.searchTab() ? p_342500_ : List.copyOf(entry.getKey().getDisplayItems()); - Item.TooltipContext item$tooltipcontext = Item.TooltipContext.of(p_343364_); ++ var items = entry.getKey() == net.minecraft.world.item.CreativeModeTabs.searchTab() ? itemStacks : List.copyOf(entry.getKey().getDisplayItems()); + Item.TooltipContext item$tooltipcontext = Item.TooltipContext.of(registries); TooltipFlag tooltipflag = TooltipFlag.Default.NORMAL.asCreative(); - CompletableFuture completablefuture = this.creativeByNameSearch; - this.creativeByNameSearch = CompletableFuture.supplyAsync( + CompletableFuture completablefuture = this.creativeSearch.getOrDefault(entry.getValue(), EMPTY); + this.creativeSearch.put(entry.getValue(), CompletableFuture.supplyAsync( () -> new FullTextSearchTree<>( - p_345254_ -> getTooltipLines(Stream.of(p_345254_), item$tooltipcontext, tooltipflag), - p_344415_ -> p_344415_.getItemHolder().unwrapKey().map(ResourceKey::identifier).stream(), -- p_342500_ + itemStack -> getTooltipLines(Stream.of(itemStack), item$tooltipcontext, tooltipflag), + itemStack -> itemStack.typeHolder().unwrapKey().map(ResourceKey::identifier).stream(), +- itemStacks + items ), Util.backgroundExecutor() diff --git a/patches/minecraft/net/minecraft/client/multiplayer/chat/ChatListener.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/chat/ChatListener.java.patch index bcc66ef5e3..85168444ee 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/chat/ChatListener.java.patch +++ b/patches/minecraft/net/minecraft/client/multiplayer/chat/ChatListener.java.patch @@ -1,41 +1,44 @@ --- a/net/minecraft/client/multiplayer/chat/ChatListener.java +++ b/net/minecraft/client/multiplayer/chat/ChatListener.java -@@ -133,7 +_,9 @@ - Instant instant = Instant.now(); - this.handleMessage(null, () -> { - Component component = p_251256_.decorate(p_250375_); -- this.minecraft.gui.getChat().addMessage(component); -+ Component forgeComponent = net.minecraftforge.client.ForgeHooksClient.onClientChat(p_251256_, component, Util.NIL_UUID); -+ if (forgeComponent == null) return false; -+ this.minecraft.gui.getChat().addMessage(forgeComponent); - this.narrateChatMessage(p_251256_, p_250375_); - this.logSystemMessage(component, instant); - this.previousMessageTime = Util.getMillis(); -@@ -152,12 +_,16 @@ - MessageSignature messagesignature = p_249430_.signature(); - FilterMask filtermask = p_249430_.filterMask(); - if (filtermask.isEmpty()) { -- this.minecraft.gui.getChat().addMessage(p_249231_, messagesignature, guimessagetag); -+ Component forgeComponent = net.minecraftforge.client.ForgeHooksClient.onClientPlayerChat(p_251766_, p_249231_, p_249430_, p_249430_.sender()); -+ if (forgeComponent == null) return false; -+ this.minecraft.gui.getChat().addMessage(forgeComponent, messagesignature, guimessagetag); - this.narrateChatMessage(p_251766_, p_249430_.decoratedContent()); - } else { - Component component = filtermask.applyWithFormatting(p_249430_.signedContent()); - if (component != null) { -- this.minecraft.gui.getChat().addMessage(p_251766_.decorate(component), messagesignature, guimessagetag); -+ Component forgeComponent = net.minecraftforge.client.ForgeHooksClient.onClientPlayerChat(p_251766_, p_251766_.decorate(component), p_249430_, p_249430_.sender()); +@@ -140,6 +_,8 @@ + LocalPlayer localplayer = this.minecraft.player; + if (localplayer != null && localplayer.chatAbilities().canReceivePlayerMessages()) { + Component component = boundChatType.decorate(message); ++ component = net.minecraftforge.client.ForgeHooksClient.onClientChat(boundChatType, component, Util.NIL_UUID); ++ if (component == null) return false; + this.minecraft.gui.getChat().addPlayerMessage(component, null, GuiMessageTag.system()); + this.narrateChatMessage(boundChatType, message); + this.logSystemMessage(component, instant); +@@ -169,12 +_,16 @@ + MessageSignature messagesignature = message.signature(); + FilterMask filtermask = message.filterMask(); + if (filtermask.isEmpty()) { +- this.minecraft.gui.getChat().addPlayerMessage(decoratedMessage, messagesignature, guimessagetag); ++ Component forgeComponent = net.minecraftforge.client.ForgeHooksClient.onClientPlayerChat(boundChatType, decoratedMessage, message, message.sender()); + if (forgeComponent == null) return false; -+ this.minecraft.gui.getChat().addMessage(forgeComponent, messagesignature, guimessagetag); - this.narrateChatMessage(p_251766_, component); ++ this.minecraft.gui.getChat().addPlayerMessage(forgeComponent, messagesignature, guimessagetag); + this.narrateChatMessage(boundChatType, message.decoratedContent()); + } else { + Component component = filtermask.applyWithFormatting(message.signedContent()); + if (component != null) { +- this.minecraft.gui.getChat().addPlayerMessage(boundChatType.decorate(component), messagesignature, guimessagetag); ++ Component forgeComponent = net.minecraftforge.client.ForgeHooksClient.onClientPlayerChat(boundChatType, boundChatType.decorate(component), message, message.sender()); ++ if (forgeComponent == null) return false; ++ this.minecraft.gui.getChat().addPlayerMessage(forgeComponent, messagesignature, guimessagetag); + this.narrateChatMessage(boundChatType, component); + } } - } -@@ -190,6 +_,8 @@ +@@ -208,10 +_,12 @@ + chatlog.push(LoggedChatMessage.system(message, timeStamp)); + } - public void handleSystemMessage(Component p_240522_, boolean p_240642_) { - if (!this.minecraft.options.hideMatchedNames().get() || !this.minecraft.isBlocked(this.guessChatUUID(p_240522_))) { -+ p_240522_ = net.minecraftforge.client.ForgeHooksClient.onClientSystemMessage(p_240522_, p_240642_); -+ if (p_240522_ == null) return; - if (p_240642_) { - this.minecraft.gui.setOverlayMessage(p_240522_, false); - this.minecraft.getNarrator().saySystemQueued(p_240522_); +- public void handleSystemMessage(final Component message, final boolean remote) { ++ public void handleSystemMessage(Component message, final boolean remote) { + if (!this.minecraft.options.hideMatchedNames().get() || !this.minecraft.isBlocked(this.guessChatUUID(message))) { + LocalPlayer localplayer = this.minecraft.player; + if (localplayer != null && localplayer.chatAbilities().canReceiveSystemMessages()) { ++ message = net.minecraftforge.client.ForgeHooksClient.onClientSystemMessage(message, remote); ++ if (message == null) return; + if (remote) { + this.minecraft.gui.getChat().addServerSystemMessage(message); + this.logSystemMessage(message, Instant.now()); diff --git a/patches/minecraft/net/minecraft/client/multiplayer/resolver/AddressCheck.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/resolver/AddressCheck.java.patch index 877930652d..8c79125e4f 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/resolver/AddressCheck.java.patch +++ b/patches/minecraft/net/minecraft/client/multiplayer/resolver/AddressCheck.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/client/multiplayer/resolver/AddressCheck.java +++ b/net/minecraft/client/multiplayer/resolver/AddressCheck.java @@ -16,7 +_,7 @@ - boolean isAllowed(ServerAddress p_171830_); + boolean isAllowed(ServerAddress address); static AddressCheck createFromService() { - final ImmutableList> immutablelist = Streams.stream(ServiceLoader.load(BlockListSupplier.class)) diff --git a/patches/minecraft/net/minecraft/client/particle/BlockMarker.java.patch b/patches/minecraft/net/minecraft/client/particle/BlockMarker.java.patch new file mode 100644 index 0000000000..aa886c931d --- /dev/null +++ b/patches/minecraft/net/minecraft/client/particle/BlockMarker.java.patch @@ -0,0 +1,11 @@ +--- a/net/minecraft/client/particle/BlockMarker.java ++++ b/net/minecraft/client/particle/BlockMarker.java +@@ -13,7 +_,7 @@ + private final SingleQuadParticle.Layer layer; + + private BlockMarker(final ClientLevel level, final double x, final double y, final double z, final BlockState state) { +- super(level, x, y, z, Minecraft.getInstance().getModelManager().getBlockStateModelSet().getParticleMaterial(state).sprite()); ++ super(level, x, y, z, Minecraft.getInstance().getModelManager().getBlockStateModelSet().get(state).particleMaterial(level.getModelDataManager().getAtOrEmpty(x, y, z)).sprite()); + this.gravity = 0.0F; + this.lifetime = 80; + this.hasPhysics = false; diff --git a/patches/minecraft/net/minecraft/client/particle/FireworkParticles.java.patch b/patches/minecraft/net/minecraft/client/particle/FireworkParticles.java.patch index ea28f7412e..2b192da3fc 100644 --- a/patches/minecraft/net/minecraft/client/particle/FireworkParticles.java.patch +++ b/patches/minecraft/net/minecraft/client/particle/FireworkParticles.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/particle/FireworkParticles.java +++ b/net/minecraft/client/particle/FireworkParticles.java -@@ -268,6 +_,10 @@ +@@ -256,6 +_,10 @@ intlist = IntList.of(DyeColor.BLACK.getFireworkColor()); } diff --git a/patches/minecraft/net/minecraft/client/particle/FlyTowardsPositionParticle.java.patch b/patches/minecraft/net/minecraft/client/particle/FlyTowardsPositionParticle.java.patch index 39f12380da..1ce295bf48 100644 --- a/patches/minecraft/net/minecraft/client/particle/FlyTowardsPositionParticle.java.patch +++ b/patches/minecraft/net/minecraft/client/particle/FlyTowardsPositionParticle.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/particle/FlyTowardsPositionParticle.java +++ b/net/minecraft/client/particle/FlyTowardsPositionParticle.java -@@ -114,6 +_,7 @@ +@@ -107,6 +_,7 @@ this.x = this.xStart + this.xd * f; this.y = this.yStart + this.yd * f - f1 * 1.2F; this.z = this.zStart + this.zd * f; diff --git a/patches/minecraft/net/minecraft/client/particle/Particle.java.patch b/patches/minecraft/net/minecraft/client/particle/Particle.java.patch index 5eab6734d0..0c38eaf21f 100644 --- a/patches/minecraft/net/minecraft/client/particle/Particle.java.patch +++ b/patches/minecraft/net/minecraft/client/particle/Particle.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/particle/Particle.java +++ b/net/minecraft/client/particle/Particle.java -@@ -207,6 +_,10 @@ +@@ -205,6 +_,10 @@ return Optional.empty(); } diff --git a/patches/minecraft/net/minecraft/client/particle/ParticleEngine.java.patch b/patches/minecraft/net/minecraft/client/particle/ParticleEngine.java.patch index 3934a84305..8300437bbb 100644 --- a/patches/minecraft/net/minecraft/client/particle/ParticleEngine.java.patch +++ b/patches/minecraft/net/minecraft/client/particle/ParticleEngine.java.patch @@ -1,25 +1,26 @@ --- a/net/minecraft/client/particle/ParticleEngine.java +++ b/net/minecraft/client/particle/ParticleEngine.java -@@ -61,7 +_,7 @@ - private @Nullable Particle makeParticle( - T p_107396_, double p_107397_, double p_107398_, double p_107399_, double p_107400_, double p_107401_, double p_107402_ +@@ -64,8 +_,7 @@ + final T options, final double x, final double y, final double z, final double xa, final double ya, final double za ) { -- ParticleProvider particleprovider = (ParticleProvider)this.resourceManager.getProviders().get(BuiltInRegistries.PARTICLE_TYPE.getId(p_107396_.getType())); -+ ParticleProvider particleprovider = (ParticleProvider)this.resourceManager.getProvider(p_107396_.getType()); - return particleprovider == null - ? null - : particleprovider.createParticle(p_107396_, this.level, p_107397_, p_107398_, p_107399_, p_107400_, p_107401_, p_107402_, this.random); -@@ -111,6 +_,8 @@ + ParticleProvider particleprovider = (ParticleProvider)this.resourceManager +- .getProviders() +- .get(BuiltInRegistries.PARTICLE_TYPE.getId(options.getType())); ++ .getProvider(options.getType()); + return particleprovider == null ? null : particleprovider.createParticle(options, this.level, x, y, z, xa, ya, za, this.random); + } + +@@ -113,6 +_,8 @@ return new ItemPickupParticleGroup(this); - } else if (p_428647_ == ParticleRenderType.ELDER_GUARDIANS) { + } else if (type == ParticleRenderType.ELDER_GUARDIANS) { return new ElderGuardianParticleGroup(this); -+ } else if (factories.containsKey(p_428647_)) { -+ return factories.get(p_428647_).apply(this); ++ } else if (factories.containsKey(type)) { ++ return factories.get(type).apply(this); } else { - return (ParticleGroup)(p_428647_ == ParticleRenderType.NO_RENDER ? new NoRenderParticleGroup(this) : new QuadParticleGroup(this, p_428647_)); + return (ParticleGroup)(type == ParticleRenderType.NO_RENDER ? new NoRenderParticleGroup(this) : new QuadParticleGroup(this, type)); } -@@ -120,8 +_,20 @@ - this.trackedParticleCounts.addTo(p_423291_, p_172283_); +@@ -122,8 +_,20 @@ + this.trackedParticleCounts.addTo(limit, change); } + @@ -34,9 +35,9 @@ + particleRenderOrder.add(type); + } + - public void extract(ParticlesRenderState p_423938_, Frustum p_424803_, Camera p_430521_, float p_426823_) { + public void extract(final ParticlesRenderState particlesRenderState, final Frustum frustum, final Camera camera, final float partialTickTime) { - for (ParticleRenderType particlerendertype : RENDER_ORDER) { + for (ParticleRenderType particlerendertype : particleRenderOrder) { // Forge: allow custom ParticleRenderType's ParticleGroup particlegroup = this.particles.get(particlerendertype); if (particlegroup != null && !particlegroup.isEmpty()) { - p_423938_.add(particlegroup.extractRenderState(p_424803_, p_430521_, p_426823_)); + particlesRenderState.add(particlegroup.extractRenderState(frustum, camera, partialTickTime)); diff --git a/patches/minecraft/net/minecraft/client/particle/ParticleResources.java.patch b/patches/minecraft/net/minecraft/client/particle/ParticleResources.java.patch index 4549237bda..01848d5f0a 100644 --- a/patches/minecraft/net/minecraft/client/particle/ParticleResources.java.patch +++ b/patches/minecraft/net/minecraft/client/particle/ParticleResources.java.patch @@ -8,26 +8,26 @@ private @Nullable Runnable onReload; public ParticleResources() { -@@ -173,14 +_,17 @@ +@@ -175,14 +_,17 @@ this.register(ParticleTypes.FIREFLY, FireflyParticle.FireflyProvider::new); } + /** @deprecated Register via {@link net.minecraftforge.client.event.RegisterParticleProvidersEvent} */ - public void register(ParticleType p_427222_, ParticleProvider p_423729_) { - this.providers.put(BuiltInRegistries.PARTICLE_TYPE.getId(p_427222_), p_423729_); -+ this.providersByName.put(BuiltInRegistries.PARTICLE_TYPE.getKey(p_427222_), p_423729_); + public void register(final ParticleType type, final ParticleProvider provider) { + this.providers.put(BuiltInRegistries.PARTICLE_TYPE.getId(type), provider); ++ this.providersByName.put(BuiltInRegistries.PARTICLE_TYPE.getKey(type), provider); } + /** @deprecated Register via {@link net.minecraftforge.client.event.RegisterParticleProvidersEvent} */ - public void register(ParticleType p_427223_, ParticleResources.SpriteParticleRegistration p_423156_) { + public void register(final ParticleType type, final ParticleResources.SpriteParticleRegistration provider) { ParticleResources.MutableSpriteSet particleresources$mutablespriteset = new ParticleResources.MutableSpriteSet(); - this.spriteSets.put(BuiltInRegistries.PARTICLE_TYPE.getKey(p_427223_), particleresources$mutablespriteset); -- this.providers.put(BuiltInRegistries.PARTICLE_TYPE.getId(p_427223_), p_423156_.create(particleresources$mutablespriteset)); -+ register(p_427223_, p_423156_.create(particleresources$mutablespriteset)); + this.spriteSets.put(BuiltInRegistries.PARTICLE_TYPE.getKey(type), particleresources$mutablespriteset); +- this.providers.put(BuiltInRegistries.PARTICLE_TYPE.getId(type), provider.create(particleresources$mutablespriteset)); ++ register(type, provider.create(particleresources$mutablespriteset)); } @Override -@@ -265,8 +_,13 @@ +@@ -278,8 +_,13 @@ } } diff --git a/patches/minecraft/net/minecraft/client/particle/PortalParticle.java.patch b/patches/minecraft/net/minecraft/client/particle/PortalParticle.java.patch index ccff6769f1..6e013dc2fe 100644 --- a/patches/minecraft/net/minecraft/client/particle/PortalParticle.java.patch +++ b/patches/minecraft/net/minecraft/client/particle/PortalParticle.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/particle/PortalParticle.java +++ b/net/minecraft/client/particle/PortalParticle.java -@@ -91,6 +_,7 @@ +@@ -84,6 +_,7 @@ this.x = this.xStart + this.xd * f2; this.y = this.yStart + this.yd * f2 + (1.0F - f); this.z = this.zStart + this.zd * f2; diff --git a/patches/minecraft/net/minecraft/client/particle/TerrainParticle.java.patch b/patches/minecraft/net/minecraft/client/particle/TerrainParticle.java.patch index 175cec886b..b3314754fe 100644 --- a/patches/minecraft/net/minecraft/client/particle/TerrainParticle.java.patch +++ b/patches/minecraft/net/minecraft/client/particle/TerrainParticle.java.patch @@ -1,26 +1,26 @@ --- a/net/minecraft/client/particle/TerrainParticle.java +++ b/net/minecraft/client/particle/TerrainParticle.java @@ -43,7 +_,7 @@ - this.rCol = 0.6F; this.gCol = 0.6F; this.bCol = 0.6F; -- if (!p_172458_.is(Blocks.GRASS_BLOCK)) { -+ if (net.minecraftforge.client.extensions.common.IClientBlockExtensions.of(p_172458_).areBreakingParticlesTinted(p_172458_, p_172451_, p_172459_)) { - int i = Minecraft.getInstance().getBlockColors().getColor(p_172458_, p_172451_, p_172459_, 0); + BlockTintSource blocktintsource = Minecraft.getInstance().getBlockColors().getTintSource(blockState, 0); +- if (blocktintsource != null) { ++ if (blocktintsource != null && net.minecraftforge.client.extensions.common.IClientBlockExtensions.of(blockState).areBreakingParticlesTinted(blockState, level, pos)) { + int i = blocktintsource.colorAsTerrainParticle(blockState, level, pos); this.rCol *= (i >> 16 & 0xFF) / 255.0F; this.gCol *= (i >> 8 & 0xFF) / 255.0F; -@@ -99,8 +_,14 @@ +@@ -93,8 +_,14 @@ ) { - BlockState blockstate = p_331600_.getState(); + BlockState blockstate = options.getState(); return !blockstate.isAir() && !blockstate.is(Blocks.MOVING_PISTON) && blockstate.shouldSpawnTerrainParticles() -- ? new TerrainParticle(p_334810_, p_328897_, p_329583_, p_331123_, p_333546_, p_335782_, p_335068_, blockstate) -+ ? (TerrainParticle)new TerrainParticle(p_334810_, p_328897_, p_329583_, p_331123_, p_333546_, p_335782_, p_335068_, blockstate).updateSprite(blockstate, p_331600_.getPos()) +- ? new TerrainParticle(level, x, y, z, xAux, yAux, zAux, blockstate) ++ ? (TerrainParticle)new TerrainParticle(level, x, y, z, xAux, yAux, zAux, blockstate).updateSprite(blockstate, options.getPos()) : null; + } + + public Particle updateSprite(BlockState state, BlockPos pos) { //FORGE: we cannot assume that the x y z of the particles match the block pos of the block. + if (pos != null) // There are cases where we are not able to obtain the correct source pos, and need to fallback to the non-model data version -+ this.setSprite(Minecraft.getInstance().getBlockRenderer().getBlockModelShaper().getParticleIcon(state, level, pos)); ++ this.setSprite(Minecraft.getInstance().getModelManager().getBlockStateModelSet().get(state).particleMaterial(level.getModelDataManager().getAt(pos)).sprite()); + return this; } diff --git a/patches/minecraft/net/minecraft/client/particle/VibrationSignalParticle.java.patch b/patches/minecraft/net/minecraft/client/particle/VibrationSignalParticle.java.patch index b8a6f0704d..61cfafc590 100644 --- a/patches/minecraft/net/minecraft/client/particle/VibrationSignalParticle.java.patch +++ b/patches/minecraft/net/minecraft/client/particle/VibrationSignalParticle.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/particle/VibrationSignalParticle.java +++ b/net/minecraft/client/particle/VibrationSignalParticle.java -@@ -80,6 +_,7 @@ +@@ -87,6 +_,7 @@ this.x = Mth.lerp(d0, this.x, vec3.x()); this.y = Mth.lerp(d0, this.y, vec3.y()); this.z = Mth.lerp(d0, this.z, vec3.z()); diff --git a/patches/minecraft/net/minecraft/client/player/AbstractClientPlayer.java.patch b/patches/minecraft/net/minecraft/client/player/AbstractClientPlayer.java.patch index 702677d22b..c4db09489e 100644 --- a/patches/minecraft/net/minecraft/client/player/AbstractClientPlayer.java.patch +++ b/patches/minecraft/net/minecraft/client/player/AbstractClientPlayer.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/client/player/AbstractClientPlayer.java +++ b/net/minecraft/client/player/AbstractClientPlayer.java -@@ -133,7 +_,7 @@ +@@ -113,7 +_,7 @@ } } -- return Mth.lerp(p_362521_, 1.0F, f); -+ return net.minecraftforge.client.event.ForgeEventFactoryClient.fireFovModifierEvent(this, f, p_362521_).getNewFovModifier(); +- return Mth.lerp(effectScale, 1.0F, f); ++ return net.minecraftforge.client.event.ForgeEventFactoryClient.fireFovModifierEvent(this, f, effectScale).getNewFovModifier(); } @Override diff --git a/patches/minecraft/net/minecraft/client/player/LocalPlayer.java.patch b/patches/minecraft/net/minecraft/client/player/LocalPlayer.java.patch index 53c7a40455..500c4d65e5 100644 --- a/patches/minecraft/net/minecraft/client/player/LocalPlayer.java.patch +++ b/patches/minecraft/net/minecraft/client/player/LocalPlayer.java.patch @@ -1,27 +1,26 @@ --- a/net/minecraft/client/player/LocalPlayer.java +++ b/net/minecraft/client/player/LocalPlayer.java -@@ -310,6 +_,7 @@ - ServerboundPlayerActionPacket.Action serverboundplayeractionpacket$action = p_108701_ +@@ -324,6 +_,7 @@ + ServerboundPlayerActionPacket.Action serverboundplayeractionpacket$action = all ? ServerboundPlayerActionPacket.Action.DROP_ALL_ITEMS : ServerboundPlayerActionPacket.Action.DROP_ITEM; -+ if (isUsingItem() && getUsedItemHand() == InteractionHand.MAIN_HAND && (p_108701_ || getUseItem().getCount() == 1)) stopUsingItem(); // Forge: fix MC-231097 on the clientside - ItemStack itemstack = this.getInventory().removeFromSelected(p_108701_); ++ if (isUsingItem() && getUsedItemHand() == InteractionHand.MAIN_HAND && (all || getUseItem().getCount() == 1)) stopUsingItem(); // Forge: fix MC-231097 on the clientside + ItemStack itemstack = this.getInventory().removeFromSelected(all); this.connection.send(new ServerboundPlayerActionPacket(serverboundplayeractionpacket$action, BlockPos.ZERO, Direction.DOWN)); return !itemstack.isEmpty(); -@@ -521,7 +_,11 @@ +@@ -551,7 +_,10 @@ @Override - public void playSound(SoundEvent p_108651_, float p_108652_, float p_108653_) { -- this.level().playLocalSound(this.getX(), this.getY(), this.getZ(), p_108651_, this.getSoundSource(), p_108652_, p_108653_, false); -+ var holder = net.minecraft.core.registries.BuiltInRegistries.SOUND_EVENT.wrapAsHolder(p_108651_); -+ var event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(this.level(), this, holder, this.getSoundSource(), p_108652_, p_108653_); + public void playSound(final SoundEvent sound, final float volume, final float pitch) { +- this.level().playLocalSound(this.getX(), this.getY(), this.getZ(), sound, this.getSoundSource(), volume, pitch, false); ++ var holder = net.minecraft.core.registries.BuiltInRegistries.SOUND_EVENT.wrapAsHolder(sound); ++ var event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(this.level(), this, holder, this.getSoundSource(), volume, pitch); + if (event == null || event.getSound() == null) return; + this.level().playLocalSound(this.getX(), this.getY(), this.getZ(), event.getSound().get(), event.getSource(), event.getNewVolume(), event.getNewPitch(), false); -+ } @Override -@@ -761,6 +_,7 @@ +@@ -793,6 +_,7 @@ && this.canPlayerFitWithinBlocksAndEntitiesWhen(Pose.CROUCHING) && (this.isShiftKeyDown() || !this.isSleeping() && !this.canPlayerFitWithinBlocksAndEntitiesWhen(Pose.STANDING)); this.input.tick(); @@ -29,7 +28,7 @@ this.minecraft.getTutorial().onInput(this.input); boolean flag3 = false; if (this.autoJumpTime > 0) { -@@ -833,8 +_,9 @@ +@@ -865,8 +_,9 @@ } this.wasFallFlying = this.isFallFlying(); @@ -41,7 +40,7 @@ } if (this.isEyeInFluid(FluidTags.WATER)) { -@@ -900,7 +_,7 @@ +@@ -934,7 +_,7 @@ } private boolean shouldStopSwimSprinting() { @@ -50,7 +49,7 @@ } public Portal.Transition getActivePortalLocalTransition() { -@@ -943,6 +_,8 @@ +@@ -979,6 +_,8 @@ @Override public void rideTick() { super.rideTick(); @@ -59,7 +58,7 @@ this.handsBusy = false; if (this.getControlledVehicle() instanceof AbstractBoat abstractboat) { abstractboat.setInput( -@@ -1120,7 +_,7 @@ +@@ -1154,7 +_,7 @@ && this.isSprintingPossible(this.getAbilities().flying) && !this.isSlowDueToUsingItem() && (!this.isFallFlying() || this.isUnderWater()) @@ -67,8 +66,8 @@ + && (!this.isMovingSlowly() || this.isUnderWater() || this.canStartSwimming()); } - private boolean vehicleCanSprint(Entity p_265184_) { -@@ -1195,6 +_,17 @@ + private boolean vehicleCanSprint(final Entity vehicle) { +@@ -1230,6 +_,17 @@ @Override public float getVisualRotationYInDegrees() { return this.getYRot(); diff --git a/patches/minecraft/net/minecraft/client/renderer/GameRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/GameRenderer.java.patch index 793442238f..d0058d90b1 100644 --- a/patches/minecraft/net/minecraft/client/renderer/GameRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/GameRenderer.java.patch @@ -1,16 +1,16 @@ --- a/net/minecraft/client/renderer/GameRenderer.java +++ b/net/minecraft/client/renderer/GameRenderer.java -@@ -242,6 +_,9 @@ +@@ -235,6 +_,9 @@ case null: default: this.clearPostEffect(); -+ var rl = p_109107_ == null ? null : net.minecraftforge.client.EntitySpectatorShaderManager.get(p_109107_.getType()); ++ var rl = cameraEntity == null ? null : net.minecraftforge.client.EntitySpectatorShaderManager.get(cameraEntity.getType()); + if (rl != null) + this.setPostEffect(rl); } } -@@ -253,7 +_,13 @@ +@@ -246,7 +_,13 @@ public void processBlurEffect() { PostChain postchain = this.minecraft.getShaderManager().getPostChain(BLUR_POST_CHAIN_ID, LevelTargetBundle.MAIN_TARGETS); if (postchain != null) { @@ -24,28 +24,19 @@ } } -@@ -377,7 +_,7 @@ - f *= Mth.lerp(f2, 1.0F, 0.85714287F); - } +@@ -507,7 +_,7 @@ + profilerfiller.push("screen"); -- return f; -+ return net.minecraftforge.client.event.ForgeEventFactoryClient.fireComputeFov(this, p_109142_, p_109143_, f, p_109144_).getFOV(); - } - } - -@@ -530,7 +_,7 @@ - } - } else if (flag && this.minecraft.screen != null) { - try { -- this.minecraft.screen.renderWithTooltipAndSubtitles(guigraphics, i, j, p_343467_.getGameTimeDeltaTicks()); -+ net.minecraftforge.client.ForgeHooksClient.drawScreen(this.minecraft.screen, guigraphics, i, j, p_343467_.getRealtimeDeltaTicks()); - } catch (Throwable throwable1) { - CrashReport crashreport1 = CrashReport.forThrowable(throwable1, "Rendering screen"); - CrashReportCategory crashreportcategory1 = crashreport1.addCategory("Screen render details"); -@@ -696,6 +_,10 @@ - BlockInWorld blockinworld = new BlockInWorld(this.minecraft.level, blockpos, false); + try { +- this.minecraft.screen.extractRenderStateWithTooltipAndSubtitles(guigraphicsextractor, i, j, deltaTracker.getGameTimeDeltaTicks()); ++ net.minecraftforge.client.ForgeHooksClient.drawScreen(this.minecraft.screen, guigraphicsextractor, i, j, deltaTracker.getRealtimeDeltaTicks()); + } catch (Throwable throwable) { + CrashReport crashreport1 = CrashReport.forThrowable(throwable, "Rendering screen"); + CrashReportCategory crashreportcategory1 = crashreport1.addCategory("Screen render details"); +@@ -672,6 +_,10 @@ Registry registry = this.minecraft.level.registryAccess().lookupOrThrow(Registries.BLOCK); - flag = !itemstack.isEmpty() && (itemstack.canBreakBlockInAdventureMode(blockinworld) || itemstack.canPlaceOnBlockInAdventureMode(blockinworld)); + flag = !itemstack.isEmpty() + && (itemstack.canBreakBlockInAdventureMode(blockinworld) || itemstack.canPlaceOnBlockInAdventureMode(blockinworld)); + if (!flag && blockstate.hasBlockEntity()) { + var blockEntity = this.minecraft.level.getBlockEntity(blockpos); + flag = blockEntity != null && blockEntity.hasCustomOutlineRendering(); @@ -53,13 +44,13 @@ } } } -@@ -736,6 +_,9 @@ - if (this.minecraft.options.bobView().get()) { - this.bobView(posestack, this.mainCamera.getPartialTickTime()); +@@ -696,6 +_,9 @@ + if (optionsrenderstate.bobView) { + this.bobView(camerarenderstate, posestack); } + + var cameraSetup = net.minecraftforge.client.event.ForgeEventFactoryClient.fireComputeCameraAngles(this, this.mainCamera, f); + this.mainCamera.setRotation(cameraSetup.getYaw(), cameraSetup.getPitch(), cameraSetup.getRoll()); matrix4f.mul(posestack.last().pose()); - float f2 = this.minecraft.options.screenEffectScale().get().floatValue(); + float f2 = optionsrenderstate.screenEffectScale; diff --git a/patches/minecraft/net/minecraft/client/renderer/ItemBlockRenderTypes.java.patch b/patches/minecraft/net/minecraft/client/renderer/ItemBlockRenderTypes.java.patch deleted file mode 100644 index ad3708e390..0000000000 --- a/patches/minecraft/net/minecraft/client/renderer/ItemBlockRenderTypes.java.patch +++ /dev/null @@ -1,115 +0,0 @@ ---- a/net/minecraft/client/renderer/ItemBlockRenderTypes.java -+++ b/net/minecraft/client/renderer/ItemBlockRenderTypes.java -@@ -19,6 +_,7 @@ - - @OnlyIn(Dist.CLIENT) - public class ItemBlockRenderTypes { -+ @Deprecated - private static final Map TYPE_BY_BLOCK = Util.make(Maps.newHashMap(), p_448152_ -> { - ChunkSectionLayer chunksectionlayer = ChunkSectionLayer.TRIPWIRE; - p_448152_.put(Blocks.TRIPWIRE, chunksectionlayer); -@@ -356,12 +_,15 @@ - p_448152_.put(Blocks.BUBBLE_COLUMN, chunksectionlayer2); - p_448152_.put(Blocks.TINTED_GLASS, chunksectionlayer2); - }); -+ @Deprecated - private static final Map LAYER_BY_FLUID = Util.make(Maps.newHashMap(), p_404902_ -> { - p_404902_.put(Fluids.FLOWING_WATER, ChunkSectionLayer.TRANSLUCENT); - p_404902_.put(Fluids.WATER, ChunkSectionLayer.TRANSLUCENT); - }); - private static boolean cutoutLeaves; - -+ /** @deprecated Forge: Use {@link net.minecraft.client.resources.model.BakedModel#getRenderTypes(BlockState, net.minecraft.util.RandomSource, net.minecraftforge.client.model.data.ModelData)}. */ -+ @Deprecated // Note: this method does NOT support model-based render types - public static ChunkSectionLayer getChunkRenderType(BlockState p_109283_) { - Block block = p_109283_.getBlock(); - if (block instanceof LeavesBlock) { -@@ -372,6 +_,8 @@ - } - } - -+ /** @deprecated Forge: Use {@link net.minecraftforge.client.RenderTypeHelper#getMovingBlockRenderType(ChunkSectionLayer)} while iterating through {@link net.minecraft.client.resources.model.BakedModel#getRenderTypes(BlockState, net.minecraft.util.RandomSource, net.minecraftforge.client.model.data.ModelData)}. */ -+ @Deprecated // Note: this method does NOT support model-based render types - public static RenderType getMovingBlockRenderType(BlockState p_109294_) { - Block block = p_109294_.getBlock(); - if (block instanceof LeavesBlock) { -@@ -391,17 +_,78 @@ - } - } - -+ /** @deprecated Forge: Use {@link net.minecraftforge.client.RenderTypeHelper#getEntityRenderType(ChunkSectionLayer)} while iterating through {@link net.minecraft.client.resources.model.BakedModel#getRenderTypes(BlockState, net.minecraft.util.RandomSource, net.minecraftforge.client.model.data.ModelData)}. */ -+ @Deprecated // Note: this method does NOT support model-based render types - public static RenderType getRenderType(BlockState p_364446_) { - ChunkSectionLayer chunksectionlayer = getChunkRenderType(p_364446_); - return chunksectionlayer == ChunkSectionLayer.TRANSLUCENT ? Sheets.translucentBlockItemSheet() : Sheets.cutoutBlockSheet(); - } - -+ // Note: this method does NOT support model-based render types - public static ChunkSectionLayer getRenderLayer(FluidState p_109288_) { -- ChunkSectionLayer chunksectionlayer = LAYER_BY_FLUID.get(p_109288_.getType()); -+ var chunksectionlayer = FLUID_RENDER_TYPES.get(net.minecraftforge.registries.ForgeRegistries.FLUIDS.getDelegateOrThrow(p_109288_.getType())); - return chunksectionlayer != null ? chunksectionlayer : ChunkSectionLayer.SOLID; - } - - public static void setCutoutLeaves(boolean p_454762_) { - cutoutLeaves = p_454762_; -+ } -+ -+ /** Forge: Check if we are running in {@linkplain net.minecraft.client.Minecraft#useFancyGraphics() fancy graphics} to account for fast graphics render types */ -+ public static boolean isFancy() { -+ return cutoutLeaves; -+ } -+ -+ private static final java.util.Collection CUTOUT_MIPPED = java.util.EnumSet.of(ChunkSectionLayer.CUTOUT); -+ private static final java.util.Collection SOLID = java.util.EnumSet.of(ChunkSectionLayer.SOLID); -+ private static final Map, java.util.Collection> BLOCK_RENDER_TYPES = Util.make(new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>(TYPE_BY_BLOCK.size(), 0.5F), map -> { -+ map.defaultReturnValue(SOLID); -+ for(Map.Entry entry : TYPE_BY_BLOCK.entrySet()) -+ map.put(net.minecraftforge.registries.ForgeRegistries.BLOCKS.getDelegateOrThrow(entry.getKey()), java.util.EnumSet.of(entry.getValue())); -+ }); -+ private static final Map, ChunkSectionLayer> FLUID_RENDER_TYPES = Util.make(new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>(LAYER_BY_FLUID.size(), 0.5F), map -> { -+ map.defaultReturnValue(ChunkSectionLayer.SOLID); -+ for(var entry : LAYER_BY_FLUID.entrySet()) -+ map.put(net.minecraftforge.registries.ForgeRegistries.FLUIDS.getDelegateOrThrow(entry.getKey()), entry.getValue()); -+ }); -+ -+ /** @deprecated Use {@link net.minecraft.client.resources.model.BakedModel#getRenderTypes(BlockState, net.minecraft.util.RandomSource, net.minecraftforge.client.model.data.ModelData)}. */ -+ public static java.util.Collection getRenderLayers(BlockState state) { -+ Block block = state.getBlock(); -+ if (block instanceof LeavesBlock) { -+ return cutoutLeaves ? CUTOUT_MIPPED : SOLID; -+ } else { -+ return BLOCK_RENDER_TYPES.get(net.minecraftforge.registries.ForgeRegistries.BLOCKS.getDelegateOrThrow(block)); -+ } -+ } -+ -+ /** -+ * It is recommended to set your render type in your block model's JSON (eg. {@code "render_type": "cutout"}) so that it can be data driven. -+ * But if you want to set it in code feel free to set it here like vanilla does. -+ */ -+ public static void setRenderLayer(Block block, ChunkSectionLayer type) { -+ checkClientLoading(); -+ BLOCK_RENDER_TYPES.put(net.minecraftforge.registries.ForgeRegistries.BLOCKS.getDelegateOrThrow(block), java.util.EnumSet.of(type)); -+ } -+ -+ /** -+ * It is recommended to set your render type in your block model's JSON (eg. {@code "render_type": "cutout"}) so that it can be data driven. -+ * But if you want to set it in code feel free to set it here like vanilla does. -+ */ -+ public static synchronized void setRenderLayer(Block block, ChunkSectionLayer first, ChunkSectionLayer... others) { -+ checkClientLoading(); -+ BLOCK_RENDER_TYPES.put(net.minecraftforge.registries.ForgeRegistries.BLOCKS.getDelegateOrThrow(block), java.util.EnumSet.of(first, others)); -+ } -+ -+ public static synchronized void setRenderLayer(Fluid fluid, ChunkSectionLayer type) { -+ checkClientLoading(); -+ FLUID_RENDER_TYPES.put(net.minecraftforge.registries.ForgeRegistries.FLUIDS.getDelegateOrThrow(fluid), type); -+ } -+ -+ private static void checkClientLoading() { -+ com.google.common.base.Preconditions.checkState(net.minecraftforge.client.loading.ClientModLoader.isLoading(), -+ "Render layers can only be set during client loading! " + -+ "This might ideally be done from `FMLClientSetupEvent`." -+ ); - } - } diff --git a/patches/minecraft/net/minecraft/client/renderer/ItemInHandRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/ItemInHandRenderer.java.patch index a9de77348a..7253bbc9cf 100644 --- a/patches/minecraft/net/minecraft/client/renderer/ItemInHandRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/ItemInHandRenderer.java.patch @@ -1,38 +1,38 @@ --- a/net/minecraft/client/renderer/ItemInHandRenderer.java +++ b/net/minecraft/client/renderer/ItemInHandRenderer.java -@@ -329,12 +_,14 @@ +@@ -366,12 +_,14 @@ if (iteminhandrenderer$handrenderselection.renderMainHand) { float f4 = interactionhand == InteractionHand.MAIN_HAND ? f : 0.0F; - float f5 = this.itemModelResolver.swapAnimationScale(this.mainHandItem) * (1.0F - Mth.lerp(p_109315_, this.oMainHandHeight, this.mainHandHeight)); -+ if (!net.minecraftforge.client.ForgeHooksClient.renderSpecificFirstPersonHand(InteractionHand.MAIN_HAND, p_109316_, p_424174_, p_109319_, p_109315_, f1, f4, f5, this.mainHandItem)) - this.renderArmWithItem(p_109318_, p_109315_, f1, InteractionHand.MAIN_HAND, f4, this.mainHandItem, f5, p_109316_, p_424174_, p_109319_); + float f5 = this.itemModelResolver.swapAnimationScale(this.mainHandItem) * (1.0F - Mth.lerp(frameInterp, this.oMainHandHeight, this.mainHandHeight)); ++ if (!net.minecraftforge.client.ForgeHooksClient.renderSpecificFirstPersonHand(InteractionHand.MAIN_HAND, poseStack, submitNodeCollector, lightCoords, frameInterp, f1, f4, f5, this.mainHandItem)) + this.renderArmWithItem(player, frameInterp, f1, InteractionHand.MAIN_HAND, f4, this.mainHandItem, f5, poseStack, submitNodeCollector, lightCoords); } if (iteminhandrenderer$handrenderselection.renderOffHand) { float f6 = interactionhand == InteractionHand.OFF_HAND ? f : 0.0F; - float f7 = this.itemModelResolver.swapAnimationScale(this.offHandItem) * (1.0F - Mth.lerp(p_109315_, this.oOffHandHeight, this.offHandHeight)); -+ if (!net.minecraftforge.client.ForgeHooksClient.renderSpecificFirstPersonHand(InteractionHand.OFF_HAND, p_109316_, p_424174_, p_109319_, p_109315_, f1, f6, f7, this.offHandItem)) - this.renderArmWithItem(p_109318_, p_109315_, f1, InteractionHand.OFF_HAND, f6, this.offHandItem, f7, p_109316_, p_424174_, p_109319_); + float f7 = this.itemModelResolver.swapAnimationScale(this.offHandItem) * (1.0F - Mth.lerp(frameInterp, this.oOffHandHeight, this.offHandHeight)); ++ if (!net.minecraftforge.client.ForgeHooksClient.renderSpecificFirstPersonHand(InteractionHand.OFF_HAND, poseStack, submitNodeCollector, lightCoords, frameInterp, f1, f6, f7, this.offHandItem)) + this.renderArmWithItem(player, frameInterp, f1, InteractionHand.OFF_HAND, f6, this.offHandItem, f7, poseStack, submitNodeCollector, lightCoords); } -@@ -401,7 +_,7 @@ +@@ -438,7 +_,7 @@ } else { - this.renderOneHandedMap(p_109379_, p_425151_, p_109381_, p_109378_, humanoidarm, p_109376_, p_109377_); + this.renderOneHandedMap(poseStack, submitNodeCollector, lightCoords, inverseArmHeight, humanoidarm, attack, itemStack); } -- } else if (p_109377_.is(Items.CROSSBOW)) { -+ } else if (p_109377_.getItem() instanceof CrossbowItem) { - this.applyItemArmTransform(p_109379_, humanoidarm, p_109378_); - boolean flag1 = CrossbowItem.isCharged(p_109377_); +- } else if (itemStack.is(Items.CROSSBOW)) { ++ } else if (itemStack.getItem() instanceof CrossbowItem) { + this.applyItemArmTransform(poseStack, humanoidarm, inverseArmHeight); + boolean flag1 = CrossbowItem.isCharged(itemStack); boolean flag2 = humanoidarm == HumanoidArm.RIGHT; -@@ -446,6 +_,7 @@ +@@ -483,6 +_,7 @@ } else { boolean flag3 = humanoidarm == HumanoidArm.RIGHT; int j = flag3 ? 1 : -1; -+ if (!net.minecraftforge.client.extensions.common.IClientItemExtensions.of(p_109377_).applyForgeHandTransform(p_109379_, minecraft.player, humanoidarm, p_109377_, p_109373_, p_109378_, p_109376_)) // FORGE: Allow items to define custom arm animation - if (p_109372_.isUsingItem() && p_109372_.getUseItemRemainingTicks() > 0 && p_109372_.getUsedItemHand() == p_109375_) { - ItemUseAnimation itemuseanimation = p_109377_.getUseAnimation(); ++ if (!net.minecraftforge.client.extensions.common.IClientItemExtensions.of(itemStack).applyForgeHandTransform(poseStack, minecraft.player, humanoidarm, itemStack, frameInterp, inverseArmHeight, attack)) // FORGE: Allow items to define custom arm animation + if (player.isUsingItem() && player.getUseItemRemainingTicks() > 0 && player.getUsedItemHand() == hand) { + ItemUseAnimation itemuseanimation = itemStack.getUseAnimation(); if (!itemuseanimation.hasCustomArmTransform()) { -@@ -589,8 +_,18 @@ +@@ -628,8 +_,18 @@ this.offHandHeight = Mth.clamp(this.offHandHeight - 0.4F, 0.0F, 1.0F); } else { float f = localplayer.getItemSwapScale(1.0F); diff --git a/patches/minecraft/net/minecraft/client/renderer/LevelEventHandler.java.patch b/patches/minecraft/net/minecraft/client/renderer/LevelEventHandler.java.patch index cc326d9f0b..786f314f5d 100644 --- a/patches/minecraft/net/minecraft/client/renderer/LevelEventHandler.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/LevelEventHandler.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/client/renderer/LevelEventHandler.java +++ b/net/minecraft/client/renderer/LevelEventHandler.java -@@ -325,7 +_,7 @@ +@@ -384,7 +_,7 @@ case 2001: - BlockState blockstate1 = Block.stateById(p_368262_); + BlockState blockstate1 = Block.stateById(data); if (!blockstate1.isAir()) { - SoundType soundtype = blockstate1.getSoundType(); -+ SoundType soundtype = blockstate1.getSoundType(this.level, p_362689_, null); ++ SoundType soundtype = blockstate1.getSoundType(this.level, pos, null); this.level .playLocalSound( - p_362689_, soundtype.getBreakSound(), SoundSource.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F, false + pos, soundtype.getBreakSound(), SoundSource.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F, false diff --git a/patches/minecraft/net/minecraft/client/renderer/LevelRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/LevelRenderer.java.patch index 3fb670e20b..ac4e502fcf 100644 --- a/patches/minecraft/net/minecraft/client/renderer/LevelRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/LevelRenderer.java.patch @@ -1,44 +1,51 @@ --- a/net/minecraft/client/renderer/LevelRenderer.java +++ b/net/minecraft/client/renderer/LevelRenderer.java -@@ -184,6 +_,7 @@ - this.submitNodeStorage = p_427160_.getSubmitNodeStorage(); - this.levelRenderState = p_429507_; - this.featureRenderDispatcher = p_427160_; +@@ -189,6 +_,7 @@ + this.optionsRenderState = gameRenderState.optionsRenderState; + this.levelRenderState = gameRenderState.levelRenderState; + this.featureRenderDispatcher = featureRenderDispatcher; + net.minecraftforge.client.event.ForgeEventFactoryClient.onInitLevelRenderer(); } @Override -@@ -485,9 +_,10 @@ - profilerfiller.push("entities"); - this.extractVisibleEntities(p_109604_, frustum, p_342180_, this.levelRenderState); - profilerfiller.popPush("blockEntities"); -- this.extractVisibleBlockEntities(p_109604_, f, this.levelRenderState); -+ this.extractVisibleBlockEntities(p_109604_, f, this.levelRenderState, frustum); - profilerfiller.popPush("blockOutline"); -- this.extractBlockOutline(p_109604_, this.levelRenderState); -+ this.extractBlockOutline(p_109604_, this.levelRenderState, p_109603_); -+ p_109603_ = this.levelRenderState.blockOutlineRenderState != null; - profilerfiller.popPush("blockBreaking"); - this.extractBlockDestroyAnimation(p_109604_, this.levelRenderState); - profilerfiller.popPush("weather"); -@@ -561,6 +_,7 @@ +@@ -515,8 +_,9 @@ + this.addSkyPass(framegraphbuilder, cameraState, terrainFog); } - this.addLateDebugPass(framegraphbuilder, this.levelRenderState.cameraRenderState, p_407881_, p_254120_); ++ var hasCustomOutline = this.levelRenderState.blockOutlineRenderState != null && this.levelRenderState.blockOutlineRenderState.customRenderer() != null; + this.addMainPass( +- framegraphbuilder, frustum, modelViewMatrix, terrainFog, renderOutline, this.levelRenderState, deltaTracker, profilerfiller, chunkSectionsToRender ++ framegraphbuilder, frustum, modelViewMatrix, terrainFog, renderOutline | hasCustomOutline, this.levelRenderState, deltaTracker, profilerfiller, chunkSectionsToRender + ); + PostChain postchain1 = this.minecraft.getShaderManager().getPostChain(ENTITY_OUTLINE_POST_CHAIN_ID, LevelTargetBundle.OUTLINE_TARGETS); + if (this.levelRenderState.haveGlowingEntities && postchain1 != null) { +@@ -543,6 +_,7 @@ + } + + this.addLateDebugPass(framegraphbuilder, this.levelRenderState.cameraRenderState, terrainFog, modelViewMatrix); + net.minecraftforge.client.FramePassManager.insertForgePasses(framegraphbuilder, targets, this.levelRenderState); // Forge: Modded passes are inserted here. profilerfiller.popPush("executeFrameGraph"); - framegraphbuilder.execute(p_367325_, new FrameGraphBuilder.Inspector() { - @Override -@@ -841,7 +_,7 @@ + framegraphbuilder.execute(resourceAllocator, new FrameGraphBuilder.Inspector() { + { +@@ -580,7 +_,7 @@ + profilerfiller.popPush("entities"); + this.extractVisibleEntities(camera, frustum, deltaTracker, this.levelRenderState); + profilerfiller.popPush("blockEntities"); +- this.extractVisibleBlockEntities(camera, deltaPartialTick, this.levelRenderState); ++ this.extractVisibleBlockEntities(camera, deltaPartialTick, this.levelRenderState, frustum); + profilerfiller.popPush("blockOutline"); + this.extractBlockOutline(camera, this.levelRenderState); + profilerfiller.popPush("blockBreaking"); +@@ -863,7 +_,7 @@ } } -- private void extractVisibleBlockEntities(Camera p_427254_, float p_426770_, LevelRenderState p_428920_) { -+ private void extractVisibleBlockEntities(Camera p_427254_, float p_426770_, LevelRenderState p_428920_, Frustum frustum) { - Vec3 vec3 = p_427254_.position(); +- private void extractVisibleBlockEntities(final Camera camera, final float deltaPartialTick, final LevelRenderState levelRenderState) { ++ private void extractVisibleBlockEntities(final Camera camera, final float deltaPartialTick, final LevelRenderState levelRenderState, final Frustum frustum) { + Vec3 vec3 = camera.position(); double d0 = vec3.x(); double d1 = vec3.y(); -@@ -852,6 +_,7 @@ +@@ -874,6 +_,7 @@ List list = sectionrenderdispatcher$rendersection.getSectionMesh().getRenderableBlockEntities(); if (!list.isEmpty() && !(sectionrenderdispatcher$rendersection.getVisibility(Util.getMillis()) < 0.3F)) { for (BlockEntity blockentity : list) { @@ -46,59 +53,57 @@ BlockPos blockpos = blockentity.getBlockPos(); SortedSet sortedset = this.destructionProgress.get(blockpos.asLong()); ModelFeatureRenderer.CrumblingOverlay modelfeaturerenderer$crumblingoverlay; -@@ -879,6 +_,7 @@ +@@ -902,6 +_,7 @@ if (blockentity1.isRemoved()) { iterator.remove(); } else { + if (!frustum.isVisible(blockentity1.getRenderBoundingBox())) continue; - BlockEntityRenderState blockentityrenderstate1 = this.blockEntityRenderDispatcher.tryExtractRenderState(blockentity1, p_426770_, null); + BlockEntityRenderState blockentityrenderstate1 = this.blockEntityRenderDispatcher.tryExtractRenderState(blockentity1, deltaPartialTick, null); if (blockentityrenderstate1 != null) { - p_428920_.blockEntityRenderStates.add(blockentityrenderstate1); -@@ -935,13 +_,21 @@ - VertexConsumer vertexconsumer = new SheetedDecalTextureGenerator( - p_365998_.getBuffer(ModelBakery.DESTROY_TYPES.get(blockbreakingrenderstate.progress)), posestack$pose, 1.0F - ); -- this.minecraft.getBlockRenderer().renderBreakingTexture(blockbreakingrenderstate.blockState, blockpos, blockbreakingrenderstate, p_366956_, vertexconsumer); -+ this.minecraft.getBlockRenderer().renderBreakingTexture(blockbreakingrenderstate.blockState, blockpos, blockbreakingrenderstate, p_366956_, vertexconsumer, level.getModelDataManager().getAtOrEmpty(blockpos)); - p_366956_.popPose(); + levelRenderState.blockEntityRenderStates.add(blockentityrenderstate1); +@@ -938,7 +_,7 @@ + SortedSet sortedset = entry.getValue(); + if (sortedset != null && !sortedset.isEmpty()) { + int i = sortedset.last().getProgress(); +- levelRenderState.blockBreakingRenderStates.add(new BlockBreakingRenderState(blockpos, this.level.getBlockState(blockpos), i)); ++ levelRenderState.blockBreakingRenderStates.add(new BlockBreakingRenderState(blockpos, this.level.getBlockState(blockpos), i, this.level.getModelDataManager().getAtOrEmpty(blockpos))); + } + } } - } +@@ -966,6 +_,12 @@ -- private void extractBlockOutline(Camera p_428965_, LevelRenderState p_424419_) { -+ private void extractBlockOutline(Camera p_428965_, LevelRenderState p_424419_, boolean shouldRender) { - p_424419_.blockOutlineRenderState = null; -+ var custom = net.minecraftforge.client.ForgeHooksClient.onExtractBlockOutline(this, p_428965_, p_424419_, this.minecraft.hitResult); + private void extractBlockOutline(final Camera camera, final LevelRenderState levelRenderState) { + levelRenderState.blockOutlineRenderState = null; ++ var custom = net.minecraftforge.client.ForgeHooksClient.onExtractBlockOutline(this, camera, levelRenderState, this.minecraft.hitResult); + if (custom != null) { -+ p_424419_.blockOutlineRenderState = new BlockOutlineRenderState(BlockPos.ZERO, false, false, net.minecraft.world.phys.shapes.Shapes.empty(), null, null, null, custom); -+ return; -+ } else if (!shouldRender) { ++ levelRenderState.blockOutlineRenderState = new BlockOutlineRenderState(BlockPos.ZERO, false, false, net.minecraft.world.phys.shapes.Shapes.empty(), null, null, null, custom); + return; + } + if (this.minecraft.hitResult instanceof BlockHitResult blockhitresult) { if (blockhitresult.getType() != HitResult.Type.MISS) { BlockPos blockpos = blockhitresult.getBlockPos(); -@@ -967,6 +_,10 @@ - private void renderBlockOutline(MultiBufferSource.BufferSource p_367206_, PoseStack p_365062_, boolean p_368189_, LevelRenderState p_422597_) { - BlockOutlineRenderState blockoutlinerenderstate = p_422597_.blockOutlineRenderState; +@@ -999,6 +_,10 @@ + ) { + BlockOutlineRenderState blockoutlinerenderstate = levelRenderState.blockOutlineRenderState; if (blockoutlinerenderstate != null) { + if (blockoutlinerenderstate.customRenderer() != null) { -+ blockoutlinerenderstate.customRenderer().render(p_367206_, p_365062_, p_368189_, p_422597_); ++ blockoutlinerenderstate.customRenderer().render(bufferSource, poseStack, onlyTranslucentBlocks, levelRenderState); + return; + } - if (blockoutlinerenderstate.isTranslucent() == p_368189_) { - Vec3 vec3 = p_422597_.cameraRenderState.pos; + if (blockoutlinerenderstate.isTranslucent() == onlyTranslucentBlocks) { + Vec3 vec3 = levelRenderState.cameraRenderState.pos; if (blockoutlinerenderstate.highContrast()) { -@@ -1435,7 +_,7 @@ +@@ -1491,7 +_,7 @@ } else { - int i = p_398213_.packedBrightness(p_109538_, p_109540_); - int j = LightTexture.block(i); -- int k = p_109539_.getLightEmission(); -+ int k = p_109539_.getLightEmission(p_109538_, p_109540_); - if (j < k) { - int l = LightTexture.sky(i); - return LightTexture.pack(k, l); -@@ -1492,6 +_,18 @@ + int i = brightnessGetter.packedBrightness(level, pos); + int j = LightCoordsUtil.block(i); +- int k = state.getLightEmission(); ++ int k = state.getLightEmission(level, pos); + return j < k ? LightCoordsUtil.withBlock(i, k) : i; + } + } +@@ -1539,6 +_,18 @@ public CloudRenderer getCloudRenderer() { return this.cloudRenderer; diff --git a/patches/minecraft/net/minecraft/client/renderer/LightTexture.java.patch b/patches/minecraft/net/minecraft/client/renderer/LightTexture.java.patch deleted file mode 100644 index c74d3334bd..0000000000 --- a/patches/minecraft/net/minecraft/client/renderer/LightTexture.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/minecraft/client/renderer/LightTexture.java -+++ b/net/minecraft/client/renderer/LightTexture.java -@@ -171,7 +_,7 @@ - } - - public static int block(int p_109884_) { -- return p_109884_ >>> 4 & 15; -+ return (p_109884_ & 0xFFFF) >> 4; // Forge: Fix fullbright quads showing dark artifacts. Reported as MC-169806 - } - - public static int sky(int p_109895_) { diff --git a/patches/minecraft/net/minecraft/client/renderer/OrderedSubmitNodeCollector.java.patch b/patches/minecraft/net/minecraft/client/renderer/OrderedSubmitNodeCollector.java.patch new file mode 100644 index 0000000000..ec1d208644 --- /dev/null +++ b/patches/minecraft/net/minecraft/client/renderer/OrderedSubmitNodeCollector.java.patch @@ -0,0 +1,13 @@ +--- a/net/minecraft/client/renderer/OrderedSubmitNodeCollector.java ++++ b/net/minecraft/client/renderer/OrderedSubmitNodeCollector.java +@@ -183,6 +_,10 @@ + + void submitBreakingBlockModel(PoseStack poseStack, BlockStateModel model, long seed, int progress); + ++ default void submitBreakingBlockModel(PoseStack poseStack, BlockStateModel model, long seed, int progress, net.minecraftforge.client.model.data.ModelData data) { ++ submitBreakingBlockModel(poseStack, model, seed, progress); ++ } ++ + void submitItem( + PoseStack poseStack, + ItemDisplayContext displayContext, diff --git a/patches/minecraft/net/minecraft/client/renderer/ScreenEffectRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/ScreenEffectRenderer.java.patch index a165897504..1ce73125ff 100644 --- a/patches/minecraft/net/minecraft/client/renderer/ScreenEffectRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/ScreenEffectRenderer.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/client/renderer/ScreenEffectRenderer.java +++ b/net/minecraft/client/renderer/ScreenEffectRenderer.java -@@ -59,19 +_,25 @@ +@@ -62,19 +_,25 @@ Player player = this.minecraft.player; - if (this.minecraft.options.getCameraType().isFirstPerson() && !p_409640_) { + if (isFirstPerson && !isSleeping) { if (!player.noPhysics) { - BlockState blockstate = getViewBlockingState(player); + var overlay = getOverlayBlock(player); + BlockState blockstate = overlay == null ? null : overlay.getLeft(); if (blockstate != null) { + if (!net.minecraftforge.client.ForgeHooksClient.renderBlockOverlay(player, posestack, net.minecraftforge.client.event.RenderBlockScreenEffectEvent.OverlayType.BLOCK, overlay.getLeft(), overlay.getRight())) - renderTex(this.minecraft.getBlockRenderer().getBlockModelShaper().getParticleIcon(blockstate), posestack, this.bufferSource); + renderTex(this.minecraft.getModelManager().getBlockStateModelSet().getParticleMaterial(blockstate).sprite(), posestack, this.bufferSource); } } @@ -22,49 +22,49 @@ } if (this.minecraft.player.isOnFire()) { - TextureAtlasSprite textureatlassprite = this.materials.get(ModelBakery.FIRE_1); + TextureAtlasSprite textureatlassprite = this.sprites.get(ModelBakery.FIRE_1); + if (!net.minecraftforge.client.ForgeHooksClient.renderFireOverlay(player, posestack)) renderFire(posestack, this.bufferSource, textureatlassprite); } } -@@ -120,6 +_,11 @@ +@@ -126,6 +_,11 @@ } - private static @Nullable BlockState getViewBlockingState(Player p_110717_) { -+ var ret = getOverlayBlock(p_110717_); + private static @Nullable BlockState getViewBlockingState(final Player player) { ++ var ret = getOverlayBlock(player); + return ret == null ? null : ret.getLeft(); + } + -+ private static org.apache.commons.lang3.tuple.@Nullable Pair getOverlayBlock(Player p_110717_) { ++ private static org.apache.commons.lang3.tuple.@Nullable Pair getOverlayBlock(Player player) { BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); for (int i = 0; i < 8; i++) { -@@ -129,7 +_,7 @@ +@@ -135,7 +_,7 @@ blockpos$mutableblockpos.set(d0, d1, d2); - BlockState blockstate = p_110717_.level().getBlockState(blockpos$mutableblockpos); - if (blockstate.getRenderShape() != RenderShape.INVISIBLE && blockstate.isViewBlocking(p_110717_.level(), blockpos$mutableblockpos)) { + BlockState blockstate = player.level().getBlockState(blockpos$mutableblockpos); + if (blockstate.getRenderShape() != RenderShape.INVISIBLE && blockstate.isViewBlocking(player.level(), blockpos$mutableblockpos)) { - return blockstate; + return org.apache.commons.lang3.tuple.Pair.of(blockstate, blockpos$mutableblockpos.immutable()); } } -@@ -157,6 +_,10 @@ +@@ -163,6 +_,10 @@ } - private static void renderWater(Minecraft p_110726_, PoseStack p_110727_, MultiBufferSource p_376402_) { -+ renderFluid(p_110726_, p_110727_, p_376402_, UNDERWATER_LOCATION); + private static void renderWater(final Minecraft minecraft, final PoseStack poseStack, final MultiBufferSource bufferSource) { ++ renderFluid(minecraft, poseStack, bufferSource, UNDERWATER_LOCATION); + } + -+ public static void renderFluid(Minecraft p_110726_, PoseStack p_110727_, MultiBufferSource p_376402_, Identifier texture) { - BlockPos blockpos = BlockPos.containing(p_110726_.player.getX(), p_110726_.player.getEyeY(), p_110726_.player.getZ()); - float f = LightTexture.getBrightness(p_110726_.player.level().dimensionType(), p_110726_.player.level().getMaxLocalRawBrightness(blockpos)); ++ public static void renderFluid(Minecraft minecraft, PoseStack poseStack, MultiBufferSource bufferSource, Identifier texture) { + BlockPos blockpos = BlockPos.containing(minecraft.player.getX(), minecraft.player.getEyeY(), minecraft.player.getZ()); + float f = Lightmap.getBrightness(minecraft.player.level().dimensionType(), minecraft.player.level().getMaxLocalRawBrightness(blockpos)); int i = ARGB.colorFromFloat(0.1F, f, f, f); -@@ -169,7 +_,7 @@ - float f7 = -p_110726_.player.getYRot() / 64.0F; - float f8 = p_110726_.player.getXRot() / 64.0F; - Matrix4f matrix4f = p_110727_.last().pose(); -- VertexConsumer vertexconsumer = p_376402_.getBuffer(RenderTypes.blockScreenEffect(UNDERWATER_LOCATION)); -+ VertexConsumer vertexconsumer = p_376402_.getBuffer(RenderTypes.blockScreenEffect(texture)); +@@ -175,7 +_,7 @@ + float f7 = -minecraft.player.getYRot() / 64.0F; + float f8 = minecraft.player.getXRot() / 64.0F; + Matrix4f matrix4f = poseStack.last().pose(); +- VertexConsumer vertexconsumer = bufferSource.getBuffer(RenderTypes.blockScreenEffect(UNDERWATER_LOCATION)); ++ VertexConsumer vertexconsumer = bufferSource.getBuffer(RenderTypes.blockScreenEffect(texture)); vertexconsumer.addVertex(matrix4f, -1.0F, -1.0F, -0.5F).setUv(4.0F + f7, 4.0F + f8).setColor(i); vertexconsumer.addVertex(matrix4f, 1.0F, -1.0F, -0.5F).setUv(0.0F + f7, 4.0F + f8).setColor(i); vertexconsumer.addVertex(matrix4f, 1.0F, 1.0F, -0.5F).setUv(0.0F + f7, 0.0F + f8).setColor(i); diff --git a/patches/minecraft/net/minecraft/client/renderer/Sheets.java.patch b/patches/minecraft/net/minecraft/client/renderer/Sheets.java.patch index 88f845440e..71ea5a8683 100644 --- a/patches/minecraft/net/minecraft/client/renderer/Sheets.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/Sheets.java.patch @@ -1,40 +1,39 @@ --- a/net/minecraft/client/renderer/Sheets.java +++ b/net/minecraft/client/renderer/Sheets.java -@@ -179,11 +_,11 @@ +@@ -146,11 +_,11 @@ } - private static Material createSignMaterial(WoodType p_173386_) { -- return SIGN_MAPPER.defaultNamespaceApply(p_173386_.name()); -+ return SIGN_MAPPER.apply(Identifier.parse(p_173386_.name())); + private static SpriteId createSignSprite(final WoodType type) { +- return SIGN_MAPPER.defaultNamespaceApply(type.name()); ++ return SIGN_MAPPER.apply(Identifier.parse(type.name())); } - private static Material createHangingSignMaterial(WoodType p_251735_) { -- return HANGING_SIGN_MAPPER.defaultNamespaceApply(p_251735_.name()); -+ return HANGING_SIGN_MAPPER.apply(Identifier.parse(p_251735_.name())); + private static SpriteId createHangingSignSprite(final WoodType type) { +- return HANGING_SIGN_MAPPER.defaultNamespaceApply(type.name()); ++ return HANGING_SIGN_MAPPER.apply(Identifier.parse(type.name())); } - public static Material getSignMaterial(WoodType p_173382_) { -@@ -228,6 +_,23 @@ - case SINGLE: - default: - return p_110773_; -+ } + public static SpriteId getSignSprite(final WoodType type) { +@@ -184,5 +_,22 @@ + case COPPER_WEATHERED -> (SpriteId)CHEST_COPPER_WEATHERED.select(type); + case COPPER_OXIDIZED -> (SpriteId)CHEST_COPPER_OXIDIZED.select(type); + }; + } + + /** + * Not thread-safe. Enqueue it in client setup. + */ + public static void addWoodType(WoodType woodType) { -+ SIGN_MATERIALS.put(woodType, createSignMaterial(woodType)); -+ HANGING_SIGN_MATERIALS.put(woodType, createHangingSignMaterial(woodType)); ++ SIGN_SPRITES.put(woodType, createSignSprite(woodType)); ++ HANGING_SIGN_SPRITES.put(woodType, createHangingSignSprite(woodType)); + } + + static { -+ if (net.minecraftforge.fml.ModLoader.isLoadingStateValid() && !net.minecraftforge.fml.ModLoader.get().hasCompletedState(net.minecraftforge.common.ForgeStatesProvider.LOAD_REGISTRIES)) { ++ if (net.minecraftforge.fml.ModLoader.isLoadingStateValid() && !net.minecraftforge.fml.ModLoader.hasCompletedState(net.minecraftforge.common.ForgeStatesProvider.LOAD_REGISTRIES)) { + com.mojang.logging.LogUtils.getLogger().error( + "net.minecraft.client.renderer.Sheets loaded too early, modded registry-based materials may not work correctly", + new IllegalStateException("net.minecraft.client.renderer.Sheets loaded too early") + ); - } ++ } } } diff --git a/patches/minecraft/net/minecraft/client/renderer/SpriteCoordinateExpander.java.patch b/patches/minecraft/net/minecraft/client/renderer/SpriteCoordinateExpander.java.patch index 2127ec9e0e..0cbf08ef66 100644 --- a/patches/minecraft/net/minecraft/client/renderer/SpriteCoordinateExpander.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/SpriteCoordinateExpander.java.patch @@ -3,16 +3,16 @@ @@ -17,12 +_,14 @@ @Override - public VertexConsumer addVertex(float p_342932_, float p_342886_, float p_342696_) { -- return this.delegate.addVertex(p_342932_, p_342886_, p_342696_); -+ this.delegate.addVertex(p_342932_, p_342886_, p_342696_); + public VertexConsumer addVertex(final float x, final float y, final float z) { +- return this.delegate.addVertex(x, y, z); ++ this.delegate.addVertex(x, y, z); + return this; // Forge: Fix MC-263524 not working with chained methods } @Override - public VertexConsumer setColor(int p_344589_, int p_342555_, int p_344320_, int p_345258_) { -- return this.delegate.setColor(p_344589_, p_342555_, p_344320_, p_345258_); -+ this.delegate.setColor(p_344589_, p_342555_, p_344320_, p_345258_); + public VertexConsumer setColor(final int r, final int g, final int b, final int a) { +- return this.delegate.setColor(r, g, b, a); ++ this.delegate.setColor(r, g, b, a); + return this; // Forge: Fix MC-263524 not working with chained methods } @@ -20,30 +20,30 @@ @@ -32,22 +_,26 @@ @Override - public VertexConsumer setUv(float p_343856_, float p_344420_) { -- return this.delegate.setUv(this.sprite.getU(p_343856_), this.sprite.getV(p_344420_)); -+ this.delegate.setUv(this.sprite.getU(p_343856_), this.sprite.getV(p_344420_)); + public VertexConsumer setUv(final float u, final float v) { +- return this.delegate.setUv(this.sprite.getU(u), this.sprite.getV(v)); ++ this.delegate.setUv(this.sprite.getU(u), this.sprite.getV(v)); + return this; // Forge: Fix MC-263524 not working with chained methods } @Override - public VertexConsumer setUv1(int p_343784_, int p_344827_) { -- return this.delegate.setUv1(p_343784_, p_344827_); -+ this.delegate.setUv1(p_343784_, p_344827_); + public VertexConsumer setUv1(final int u, final int v) { +- return this.delegate.setUv1(u, v); ++ this.delegate.setUv1(u, v); + return this; // Forge: Fix MC-263524 not working with chained methods } @Override - public VertexConsumer setUv2(int p_345257_, int p_344124_) { -- return this.delegate.setUv2(p_345257_, p_344124_); -+ this.delegate.setUv2(p_345257_, p_344124_); + public VertexConsumer setUv2(final int u, final int v) { +- return this.delegate.setUv2(u, v); ++ this.delegate.setUv2(u, v); + return this; // Forge: Fix MC-263524 not working with chained methods } @Override - public VertexConsumer setNormal(float p_342779_, float p_342534_, float p_344783_) { -- return this.delegate.setNormal(p_342779_, p_342534_, p_344783_); -+ this.delegate.setNormal(p_342779_, p_342534_, p_344783_); + public VertexConsumer setNormal(final float x, final float y, final float z) { +- return this.delegate.setNormal(x, y, z); ++ this.delegate.setNormal(x, y, z); + return this; // Forge: Fix MC-263524 not working with chained methods } diff --git a/patches/minecraft/net/minecraft/client/renderer/SubmitNodeCollection.java.patch b/patches/minecraft/net/minecraft/client/renderer/SubmitNodeCollection.java.patch new file mode 100644 index 0000000000..8fa5f0d8c5 --- /dev/null +++ b/patches/minecraft/net/minecraft/client/renderer/SubmitNodeCollection.java.patch @@ -0,0 +1,15 @@ +--- a/net/minecraft/client/renderer/SubmitNodeCollection.java ++++ b/net/minecraft/client/renderer/SubmitNodeCollection.java +@@ -179,6 +_,12 @@ + } + + @Override ++ public void submitBreakingBlockModel(final PoseStack poseStack, final BlockStateModel model, final long seed, final int progress, final net.minecraftforge.client.model.data.ModelData data) { ++ this.wasUsed = true; ++ this.breakingBlockModelSubmits.add(new SubmitNodeStorage.BreakingBlockModelSubmit(poseStack.last().copy(), model, seed, progress, data)); ++ } ++ ++ @Override + public void submitItem( + final PoseStack poseStack, + final ItemDisplayContext displayContext, diff --git a/patches/minecraft/net/minecraft/client/renderer/SubmitNodeStorage.java.patch b/patches/minecraft/net/minecraft/client/renderer/SubmitNodeStorage.java.patch new file mode 100644 index 0000000000..0b2d317ec6 --- /dev/null +++ b/patches/minecraft/net/minecraft/client/renderer/SubmitNodeStorage.java.patch @@ -0,0 +1,26 @@ +--- a/net/minecraft/client/renderer/SubmitNodeStorage.java ++++ b/net/minecraft/client/renderer/SubmitNodeStorage.java +@@ -141,6 +_,11 @@ + } + + @Override ++ public void submitBreakingBlockModel(final PoseStack poseStack, final BlockStateModel model, final long seed, final int progress, final net.minecraftforge.client.model.data.ModelData data) { ++ this.order(0).submitBreakingBlockModel(poseStack, model, seed, progress, data); ++ } ++ ++ @Override + public void submitItem( + final PoseStack poseStack, + final ItemDisplayContext displayContext, +@@ -192,7 +_,10 @@ + } + + @OnlyIn(Dist.CLIENT) +- public record BreakingBlockModelSubmit(PoseStack.Pose pose, BlockStateModel model, long seed, int progress) { ++ public record BreakingBlockModelSubmit(PoseStack.Pose pose, BlockStateModel model, long seed, int progress, net.minecraftforge.client.model.data.ModelData data) { ++ public BreakingBlockModelSubmit(PoseStack.Pose pose, BlockStateModel model, long seed, int progress) { ++ this(pose, model, seed, progress, net.minecraftforge.client.model.data.ModelData.EMPTY); ++ } + } + + @OnlyIn(Dist.CLIENT) diff --git a/patches/minecraft/net/minecraft/client/renderer/block/BlockModelShaper.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/BlockModelShaper.java.patch deleted file mode 100644 index 83e6e44400..0000000000 --- a/patches/minecraft/net/minecraft/client/renderer/block/BlockModelShaper.java.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- a/net/minecraft/client/renderer/block/BlockModelShaper.java -+++ b/net/minecraft/client/renderer/block/BlockModelShaper.java -@@ -17,8 +_,13 @@ - this.modelManager = p_110880_; - } - -+ /** @deprecated Forge: Use {@link #getParticleIcon(BlockState, net.minecraft.world.level.Level, net.minecraft.core.BlockPos) getParticleIcon(BlockState, Level, Pos)} */ - public TextureAtlasSprite getParticleIcon(BlockState p_110883_) { -- return this.getBlockModel(p_110883_).particleIcon(); -+ return this.getBlockModel(p_110883_).particleIcon(net.minecraftforge.client.model.data.ModelData.EMPTY); -+ } -+ -+ public TextureAtlasSprite getParticleIcon(BlockState p_110883_, net.minecraft.world.level.Level level, net.minecraft.core.BlockPos pos) { -+ return this.getBlockModel(p_110883_).particleIcon(level.getModelDataManager().getAt(pos)); - } - - public BlockStateModel getBlockModel(BlockState p_110894_) { diff --git a/patches/minecraft/net/minecraft/client/renderer/block/BlockRenderDispatcher.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/BlockRenderDispatcher.java.patch deleted file mode 100644 index d8ed39f4d7..0000000000 --- a/patches/minecraft/net/minecraft/client/renderer/block/BlockRenderDispatcher.java.patch +++ /dev/null @@ -1,45 +0,0 @@ ---- a/net/minecraft/client/renderer/block/BlockRenderDispatcher.java -+++ b/net/minecraft/client/renderer/block/BlockRenderDispatcher.java -@@ -48,12 +_,17 @@ - return this.blockModelShaper; - } - -+ @Deprecated //Forge: Model data parameter - public void renderBreakingTexture(BlockState p_110919_, BlockPos p_110920_, BlockAndTintGetter p_110921_, PoseStack p_110922_, VertexConsumer p_110923_) { -+ renderBreakingTexture(p_110919_, p_110920_, p_110921_, p_110922_, p_110923_, net.minecraftforge.client.model.data.ModelData.EMPTY); -+ } -+ -+ public void renderBreakingTexture(BlockState p_110919_, BlockPos p_110920_, BlockAndTintGetter p_110921_, PoseStack p_110922_, VertexConsumer p_110923_, net.minecraftforge.client.model.data.ModelData modelData) { - if (p_110919_.getRenderShape() == RenderShape.MODEL) { - BlockStateModel blockstatemodel = this.blockModelShaper.getBlockModel(p_110919_); - this.singleThreadRandom.setSeed(p_110919_.getSeed(p_110920_)); - this.singleThreadPartList.clear(); -- blockstatemodel.collectParts(this.singleThreadRandom, this.singleThreadPartList); -+ blockstatemodel.collectParts(this.singleThreadRandom, this.singleThreadPartList, modelData, null); - this.modelRenderer.tesselateBlock(p_110921_, this.singleThreadPartList, p_110919_, p_110920_, p_110922_, p_110923_, true, OverlayTexture.NO_OVERLAY); - } - } -@@ -96,7 +_,12 @@ - return this.blockModelShaper.getBlockModel(p_110911_); - } - -+ @Deprecated //Forge: Model data and render type parameter - public void renderSingleBlock(BlockState p_110913_, PoseStack p_110914_, MultiBufferSource p_110915_, int p_110916_, int p_110917_) { -+ renderSingleBlock(p_110913_, p_110914_, p_110915_, p_110916_, p_110917_, net.minecraftforge.client.model.data.ModelData.EMPTY, null); -+ } -+ -+ public void renderSingleBlock(BlockState p_110913_, PoseStack p_110914_, MultiBufferSource p_110915_, int p_110916_, int p_110917_, net.minecraftforge.client.model.data.ModelData modelData, net.minecraft.client.renderer.rendertype.@Nullable RenderType renderType) { - RenderShape rendershape = p_110913_.getRenderShape(); - if (rendershape != RenderShape.INVISIBLE) { - BlockStateModel blockstatemodel = this.getBlockModel(p_110913_); -@@ -104,8 +_,9 @@ - float f = (i >> 16 & 0xFF) / 255.0F; - float f1 = (i >> 8 & 0xFF) / 255.0F; - float f2 = (i & 0xFF) / 255.0F; -+ for (var rt : blockstatemodel.getRenderTypes(p_110913_, RandomSource.create(42), modelData)) - ModelBlockRenderer.renderModel( -- p_110914_.last(), p_110915_.getBuffer(ItemBlockRenderTypes.getRenderType(p_110913_)), blockstatemodel, f, f1, f2, p_110916_, p_110917_ -+ p_110914_.last(), p_110915_.getBuffer(renderType != null ? renderType : net.minecraftforge.client.RenderTypeHelper.getEntityRenderType(rt)), blockstatemodel, f, f1, f2, p_110916_, p_110917_, modelData, rt - ); - } - } diff --git a/patches/minecraft/net/minecraft/client/renderer/block/FluidRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/FluidRenderer.java.patch new file mode 100644 index 0000000000..7923bbe67d --- /dev/null +++ b/patches/minecraft/net/minecraft/client/renderer/block/FluidRenderer.java.patch @@ -0,0 +1,23 @@ +--- a/net/minecraft/client/renderer/block/FluidRenderer.java ++++ b/net/minecraft/client/renderer/block/FluidRenderer.java +@@ -87,8 +_,10 @@ + boolean flag5 = shouldRenderFace(fluidState, blockState, Direction.EAST, fluidstate5); + if (flag || flag1 || flag5 || flag4 || flag2 || flag3) { + FluidModel fluidmodel = this.fluidModels.get(fluidState); ++ var fluidExt = net.minecraftforge.client.extensions.common.IClientFluidTypeExtensions.of(fluidState); ++ fluidmodel = fluidExt.getModel(fluidState, level, pos, fluidmodel); + VertexConsumer vertexconsumer = output.getBuilder(fluidmodel.layer()); +- int i = fluidmodel.tintSource() != null ? fluidmodel.tintSource().colorInWorld(blockState, level, pos) : -1; ++ int i = fluidmodel.tintSource() != null ? fluidmodel.tintSource().colorInWorld(blockState, level, pos) : fluidExt.getTintColor(); + CardinalLighting cardinallighting = level.cardinalLighting(); + Fluid fluid = fluidState.getType(); + float f4 = this.getHeight(level, fluid, pos, blockState, fluidState); +@@ -284,7 +_,7 @@ + boolean flag7 = false; + if (fluidmodel.overlayMaterial() != null) { + Block block = blockstate6.getBlock(); +- if (block instanceof HalfTransparentBlock || block instanceof LeavesBlock) { ++ if (blockstate6.shouldDisplayFluidOverlay(level, pos.relative(direction), fluidState)) { + textureatlassprite3 = fluidmodel.overlayMaterial().sprite(); + flag7 = true; + } diff --git a/patches/minecraft/net/minecraft/client/renderer/block/LiquidBlockRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/LiquidBlockRenderer.java.patch deleted file mode 100644 index e3cf8f2d86..0000000000 --- a/patches/minecraft/net/minecraft/client/renderer/block/LiquidBlockRenderer.java.patch +++ /dev/null @@ -1,109 +0,0 @@ ---- a/net/minecraft/client/renderer/block/LiquidBlockRenderer.java -+++ b/net/minecraft/client/renderer/block/LiquidBlockRenderer.java -@@ -71,9 +_,12 @@ - - public void tesselate(BlockAndTintGetter p_234370_, BlockPos p_234371_, VertexConsumer p_234372_, BlockState p_234373_, FluidState p_234374_) { - boolean flag = p_234374_.is(FluidTags.LAVA); -- TextureAtlasSprite textureatlassprite = flag ? this.lavaStill : this.waterStill; -- TextureAtlasSprite textureatlassprite1 = flag ? this.lavaFlowing : this.waterFlowing; -- int i = flag ? 16777215 : BiomeColors.getAverageWaterColor(p_234370_, p_234371_); -+ var sprites = net.minecraftforge.client.ForgeHooksClient.getFluidSprites(p_234370_, p_234371_, p_234374_); -+ TextureAtlasSprite textureatlassprite = sprites[0]; -+ TextureAtlasSprite textureatlassprite1 = sprites[1]; -+ int i = net.minecraftforge.client.extensions.common.IClientFluidTypeExtensions.of(p_234374_).getTintColor(p_234374_, p_234370_, p_234371_); -+ float alpha = (float)(i >> 24 & 255) / 255.0F; -+ - float f = (i >> 16 & 0xFF) / 255.0F; - float f1 = (i >> 8 & 0xFF) / 255.0F; - float f2 = (i & 0xFF) / 255.0F; -@@ -169,15 +_,15 @@ - float f54 = f4 * f; - float f55 = f4 * f1; - float f56 = f4 * f2; -- this.vertex(p_234372_, f37 + 0.0F, f38 + f8, f39 + 0.0F, f54, f55, f56, f17, f21, l); -- this.vertex(p_234372_, f37 + 0.0F, f38 + f10, f39 + 1.0F, f54, f55, f56, f18, f22, l); -- this.vertex(p_234372_, f37 + 1.0F, f38 + f9, f39 + 1.0F, f54, f55, f56, f19, f23, l); -- this.vertex(p_234372_, f37 + 1.0F, f38 + f7, f39 + 0.0F, f54, f55, f56, f20, f24, l); -+ this.vertex(p_234372_, f37 + 0.0F, f38 + f8, f39 + 0.0F, f54, f55, f56, f17, f21, l, alpha); -+ this.vertex(p_234372_, f37 + 0.0F, f38 + f10, f39 + 1.0F, f54, f55, f56, f18, f22, l, alpha); -+ this.vertex(p_234372_, f37 + 1.0F, f38 + f9, f39 + 1.0F, f54, f55, f56, f19, f23, l, alpha); -+ this.vertex(p_234372_, f37 + 1.0F, f38 + f7, f39 + 0.0F, f54, f55, f56, f20, f24, l, alpha); - if (p_234374_.shouldRenderBackwardUpFace(p_234370_, p_234371_.above())) { -- this.vertex(p_234372_, f37 + 0.0F, f38 + f8, f39 + 0.0F, f54, f55, f56, f17, f21, l); -- this.vertex(p_234372_, f37 + 1.0F, f38 + f7, f39 + 0.0F, f54, f55, f56, f20, f24, l); -- this.vertex(p_234372_, f37 + 1.0F, f38 + f9, f39 + 1.0F, f54, f55, f56, f19, f23, l); -- this.vertex(p_234372_, f37 + 0.0F, f38 + f10, f39 + 1.0F, f54, f55, f56, f18, f22, l); -+ this.vertex(p_234372_, f37 + 0.0F, f38 + f8, f39 + 0.0F, f54, f55, f56, f17, f21, l, alpha); -+ this.vertex(p_234372_, f37 + 1.0F, f38 + f7, f39 + 0.0F, f54, f55, f56, f20, f24, l, alpha); -+ this.vertex(p_234372_, f37 + 1.0F, f38 + f9, f39 + 1.0F, f54, f55, f56, f19, f23, l, alpha); -+ this.vertex(p_234372_, f37 + 0.0F, f38 + f10, f39 + 1.0F, f54, f55, f56, f18, f22, l, alpha); - } - } - -@@ -190,10 +_,10 @@ - float f47 = f3 * f; - float f49 = f3 * f1; - float f51 = f3 * f2; -- this.vertex(p_234372_, f37, f38 + f16, f39 + 1.0F, f47, f49, f51, f41, f44, k); -- this.vertex(p_234372_, f37, f38 + f16, f39, f47, f49, f51, f41, f43, k); -- this.vertex(p_234372_, f37 + 1.0F, f38 + f16, f39, f47, f49, f51, f42, f43, k); -- this.vertex(p_234372_, f37 + 1.0F, f38 + f16, f39 + 1.0F, f47, f49, f51, f42, f44, k); -+ this.vertex(p_234372_, f37, f38 + f16, f39 + 1.0F, f47, f49, f51, f41, f44, k, alpha); -+ this.vertex(p_234372_, f37, f38 + f16, f39, f47, f49, f51, f41, f43, k, alpha); -+ this.vertex(p_234372_, f37 + 1.0F, f38 + f16, f39, f47, f49, f51, f42, f43, k, alpha); -+ this.vertex(p_234372_, f37 + 1.0F, f38 + f16, f39 + 1.0F, f47, f49, f51, f42, f44, k, alpha); - } - - int j = this.getLightColor(p_234370_, p_234371_); -@@ -247,10 +_,9 @@ - if (flag7 && !isFaceOccludedByNeighbor(direction, Math.max(f45, f46), p_234370_.getBlockState(p_234371_.relative(direction)))) { - BlockPos blockpos = p_234371_.relative(direction); - TextureAtlasSprite textureatlassprite2 = textureatlassprite1; -- if (!flag) { -- Block block = p_234370_.getBlockState(blockpos).getBlock(); -- if (block instanceof HalfTransparentBlock || block instanceof LeavesBlock) { -- textureatlassprite2 = this.waterOverlay; -+ if (sprites[2] != null) { -+ if (p_234370_.getBlockState(blockpos).shouldDisplayFluidOverlay(p_234370_, blockpos, p_234374_)) { -+ textureatlassprite2 = sprites[2]; - } - } - -@@ -263,15 +_,15 @@ - float f34 = f4 * f33 * f; - float f35 = f4 * f33 * f1; - float f36 = f4 * f33 * f2; -- this.vertex(p_234372_, f48, f38 + f45, f50, f34, f35, f36, f57, f30, j); -- this.vertex(p_234372_, f52, f38 + f46, f53, f34, f35, f36, f29, f31, j); -- this.vertex(p_234372_, f52, f38 + f16, f53, f34, f35, f36, f29, f32, j); -- this.vertex(p_234372_, f48, f38 + f16, f50, f34, f35, f36, f57, f32, j); -+ this.vertex(p_234372_, f48, f38 + f45, f50, f34, f35, f36, f57, f30, j, alpha); -+ this.vertex(p_234372_, f52, f38 + f46, f53, f34, f35, f36, f29, f31, j, alpha); -+ this.vertex(p_234372_, f52, f38 + f16, f53, f34, f35, f36, f29, f32, j, alpha); -+ this.vertex(p_234372_, f48, f38 + f16, f50, f34, f35, f36, f57, f32, j, alpha); - if (textureatlassprite2 != this.waterOverlay) { -- this.vertex(p_234372_, f48, f38 + f16, f50, f34, f35, f36, f57, f32, j); -- this.vertex(p_234372_, f52, f38 + f16, f53, f34, f35, f36, f29, f32, j); -- this.vertex(p_234372_, f52, f38 + f46, f53, f34, f35, f36, f29, f31, j); -- this.vertex(p_234372_, f48, f38 + f45, f50, f34, f35, f36, f57, f30, j); -+ this.vertex(p_234372_, f48, f38 + f16, f50, f34, f35, f36, f57, f32, j, alpha); -+ this.vertex(p_234372_, f52, f38 + f16, f53, f34, f35, f36, f29, f32, j, alpha); -+ this.vertex(p_234372_, f52, f38 + f46, f53, f34, f35, f36, f29, f31, j, alpha); -+ this.vertex(p_234372_, f48, f38 + f45, f50, f34, f35, f36, f57, f30, j, alpha); - } - } - } -@@ -333,10 +_,11 @@ - float p_343128_, - float p_344448_, - float p_344284_, -- int p_110994_ -+ int p_110994_, -+ float alpha - ) { - p_110985_.addVertex(p_110989_, p_110990_, p_110991_) -- .setColor(p_110992_, p_110993_, p_343128_, 1.0F) -+ .setColor(p_110992_, p_110993_, p_343128_, alpha) - .setUv(p_344448_, p_344284_) - .setLight(p_110994_) - .setNormal(0.0F, 1.0F, 0.0F); diff --git a/patches/minecraft/net/minecraft/client/renderer/block/ModelBlockRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/ModelBlockRenderer.java.patch index 6f55593942..676b261c60 100644 --- a/patches/minecraft/net/minecraft/client/renderer/block/ModelBlockRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/block/ModelBlockRenderer.java.patch @@ -1,37 +1,34 @@ --- a/net/minecraft/client/renderer/block/ModelBlockRenderer.java +++ b/net/minecraft/client/renderer/block/ModelBlockRenderer.java -@@ -49,7 +_,7 @@ - int p_234389_ - ) { - if (!p_393688_.isEmpty()) { -- boolean flag = Minecraft.useAmbientOcclusion() && p_234382_.getLightEmission() == 0 && p_393688_.getFirst().useAmbientOcclusion(); -+ boolean flag = Minecraft.useAmbientOcclusion() && p_234382_.getLightEmission(p_234380_, p_234383_) == 0 && p_393688_.getFirst().useAmbientOcclusion(); - p_234384_.translate(p_234382_.getOffset(p_234383_)); - - try { -@@ -319,6 +_,11 @@ - } +@@ -49,6 +_,12 @@ + return !cutoutLeaves && blockState.getBlock() instanceof LeavesBlock; } -+ @Deprecated //Forge: Model data and render type parameter -+ public static void renderModel(PoseStack.Pose p_111068_, VertexConsumer p_111069_, BlockStateModel p_111070_, float p_111072_, float p_111073_, float p_111074_, int p_111075_, int p_111076_) { -+ renderModel(p_111068_, p_111069_, p_111070_, p_111072_, p_111073_, p_111074_, p_111075_, p_111076_, net.minecraftforge.client.model.data.ModelData.EMPTY, null); ++ ++ /** @deprecated Use ModelData variant */ ++ public void tesselateBlock(final BlockQuadOutput output, final float x, final float y, final float z, final BlockAndTintGetter level, final BlockPos pos, final BlockState blockState, final BlockStateModel model, final long seed) { ++ tesselateBlock(output, x, y, z, level, pos, blockState, model, seed, net.minecraftforge.client.model.data.ModelData.EMPTY); + } + - public static void renderModel( - PoseStack.Pose p_111068_, - VertexConsumer p_111069_, -@@ -327,9 +_,11 @@ - float p_111073_, - float p_111074_, - int p_111075_, -- int p_111076_ -+ int p_111076_, -+ net.minecraftforge.client.model.data.ModelData modelData, -+ @org.jetbrains.annotations.Nullable net.minecraft.client.renderer.chunk.ChunkSectionLayer renderType + public void tesselateBlock( + final BlockQuadOutput output, + final float x, +@@ -58,14 +_,15 @@ + final BlockPos pos, + final BlockState blockState, + final BlockStateModel model, +- final long seed ++ final long seed, ++ net.minecraftforge.client.model.data.ModelData modelData ) { -- for (BlockModelPart blockmodelpart : p_397754_.collectParts(RandomSource.create(42L))) { -+ for (BlockModelPart blockmodelpart : p_397754_.collectParts(RandomSource.create(42L), modelData, renderType)) { - for (Direction direction : DIRECTIONS) { - renderQuadList(p_111068_, p_111069_, p_111072_, p_111073_, p_111074_, blockmodelpart.getQuads(direction), p_111075_, p_111076_); - } + this.random.setSeed(seed); +- model.collectParts(this.random, this.parts); ++ model.collectParts(this.random, this.parts, modelData); + if (!this.parts.isEmpty()) { + try { + Vec3 vec3 = blockState.getOffset(pos); +- if (this.ambientOcclusion && blockState.getLightEmission() == 0 && this.parts.getFirst().useAmbientOcclusion()) { ++ if (this.ambientOcclusion && blockState.getLightEmission(level, pos) == 0 && this.parts.getFirst().useAmbientOcclusion()) { + this.tesselateAmbientOcclusion(output, x + (float)vec3.x, y + (float)vec3.y, z + (float)vec3.z, this.parts, level, blockState, pos); + } else { + this.tesselateFlat(output, x + (float)vec3.x, y + (float)vec3.y, z + (float)vec3.z, this.parts, level, blockState, pos); diff --git a/patches/minecraft/net/minecraft/client/renderer/block/dispatch/BlockStateModel.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/dispatch/BlockStateModel.java.patch new file mode 100644 index 0000000000..35eb5a4d6e --- /dev/null +++ b/patches/minecraft/net/minecraft/client/renderer/block/dispatch/BlockStateModel.java.patch @@ -0,0 +1,15 @@ +--- a/net/minecraft/client/renderer/block/dispatch/BlockStateModel.java ++++ b/net/minecraft/client/renderer/block/dispatch/BlockStateModel.java +@@ -22,9 +_,11 @@ + import net.minecraftforge.api.distmarker.OnlyIn; + + @OnlyIn(Dist.CLIENT) +-public interface BlockStateModel { ++public interface BlockStateModel extends net.minecraftforge.client.extensions.IForgeBlockStateModel { ++ /**@deprecated Forge: Use {@link net.minecraftforge.client.extensions.IForgeBlockStateModel#collectParts(RandomSource, List, net.minecraftforge.client.model.data.ModelData)}*/ + void collectParts(RandomSource random, List output); + ++ /**@deprecated Forge: Use {@link net.minecraftforge.client.extensions.IForgeBlockStateModel#particleMaterial(net.minecraftforge.client.model.data.ModelData)}*/ + Material.Baked particleMaterial(); + + @BakedQuad.MaterialFlags diff --git a/patches/minecraft/net/minecraft/client/renderer/block/dispatch/WeightedVariants.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/dispatch/WeightedVariants.java.patch new file mode 100644 index 0000000000..0b9c85bb8d --- /dev/null +++ b/patches/minecraft/net/minecraft/client/renderer/block/dispatch/WeightedVariants.java.patch @@ -0,0 +1,40 @@ +--- a/net/minecraft/client/renderer/block/dispatch/WeightedVariants.java ++++ b/net/minecraft/client/renderer/block/dispatch/WeightedVariants.java +@@ -17,11 +_,13 @@ + private final Material.Baked particleMaterial; + @BakedQuad.MaterialFlags + private final int materialFlags; ++ private final BlockStateModel first; + + public WeightedVariants(final WeightedList list) { + this.list = list; + BlockStateModel blockstatemodel = list.unwrap().getFirst().value(); + this.particleMaterial = blockstatemodel.particleMaterial(); ++ this.first = blockstatemodel; + this.materialFlags = computeMaterialFlags(list); + } + +@@ -41,6 +_,11 @@ + return this.particleMaterial; + } + ++ @Override ++ public Material.Baked particleMaterial(net.minecraftforge.client.model.data.ModelData data) { ++ return this.first.particleMaterial(data); ++ } ++ + @BakedQuad.MaterialFlags + @Override + public int materialFlags() { +@@ -50,6 +_,11 @@ + @Override + public void collectParts(final RandomSource random, final List output) { + this.list.getRandomOrThrow(random).collectParts(random, output); ++ } ++ ++ @Override ++ public void collectParts(final RandomSource random, final List output, net.minecraftforge.client.model.data.ModelData data) { ++ this.list.getRandomOrThrow(random).collectParts(random, output, data); + } + + @OnlyIn(Dist.CLIENT) diff --git a/patches/minecraft/net/minecraft/client/renderer/block/dispatch/multipart/MultiPartModel.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/dispatch/multipart/MultiPartModel.java.patch new file mode 100644 index 0000000000..d221d7c5b3 --- /dev/null +++ b/patches/minecraft/net/minecraft/client/renderer/block/dispatch/multipart/MultiPartModel.java.patch @@ -0,0 +1,37 @@ +--- a/net/minecraft/client/renderer/block/dispatch/multipart/MultiPartModel.java ++++ b/net/minecraft/client/renderer/block/dispatch/multipart/MultiPartModel.java +@@ -38,6 +_,13 @@ + return this.shared.particleMaterial; + } + ++ @Override ++ public Material.Baked particleMaterial(net.minecraftforge.client.model.data.ModelData data) { ++ if (this.models == null) ++ this.models = this.shared.selectModels(this.blockState); ++ return this.models.getFirst().particleMaterial(data); ++ } ++ + @BakedQuad.MaterialFlags + @Override + public int materialFlags() { +@@ -46,6 +_,11 @@ + + @Override + public void collectParts(final RandomSource random, final List output) { ++ collectParts(random, output, net.minecraftforge.client.model.data.ModelData.EMPTY); ++ } ++ ++ @Override ++ public void collectParts(final RandomSource random, final List output, net.minecraftforge.client.model.data.ModelData data) { + if (this.models == null) { + this.models = this.shared.selectModels(this.blockState); + } +@@ -54,7 +_,7 @@ + + for (BlockStateModel blockstatemodel : this.models) { + random.setSeed(i); +- blockstatemodel.collectParts(random, output); ++ blockstatemodel.collectParts(random, output, data); + } + } + diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/BakedQuad.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/model/BakedQuad.java.patch deleted file mode 100644 index 441e567ab0..0000000000 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/BakedQuad.java.patch +++ /dev/null @@ -1,21 +0,0 @@ ---- a/net/minecraft/client/renderer/block/model/BakedQuad.java -+++ b/net/minecraft/client/renderer/block/model/BakedQuad.java -@@ -20,9 +_,17 @@ - Direction direction, - TextureAtlasSprite sprite, - boolean shade, -- int lightEmission -+ int lightEmission, -+ boolean ambientOcclusion - ) { - public static final int VERTEX_COUNT = 4; -+ -+ public BakedQuad( -+ Vector3fc position0, Vector3fc position1, Vector3fc position2, Vector3fc position3, -+ long packedUV0, long packedUV1, long packedUV2, long packedUV3, -+ int tintIndex, Direction direction, TextureAtlasSprite sprite, boolean shade, int lightEmission) { -+ this(position0, position1, position2, position3, packedUV0, packedUV1, packedUV2, packedUV3, tintIndex, direction, sprite, shade, lightEmission, true); -+ } - - public boolean isTinted() { - return this.tintIndex != -1; diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/BlockElementFace.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/model/BlockElementFace.java.patch deleted file mode 100644 index 5246327b28..0000000000 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/BlockElementFace.java.patch +++ /dev/null @@ -1,31 +0,0 @@ ---- a/net/minecraft/client/renderer/block/model/BlockElementFace.java -+++ b/net/minecraft/client/renderer/block/model/BlockElementFace.java -@@ -15,9 +_,18 @@ - import org.jspecify.annotations.Nullable; - - @OnlyIn(Dist.CLIENT) --public record BlockElementFace(@Nullable Direction cullForDirection, int tintIndex, String texture, BlockElementFace.@Nullable UVs uvs, Quadrant rotation) { -+public record BlockElementFace(@Nullable Direction cullForDirection, int tintIndex, String texture, BlockElementFace.@Nullable UVs uvs, Quadrant rotation, net.minecraftforge.client.model.@Nullable ForgeFaceData data) { - public static final int NO_TINT = -1; - -+ public BlockElementFace(@Nullable Direction cullForDirection, int tintIndex, String texture, BlockElementFace.@Nullable UVs uvs, Quadrant rotation) { -+ this(cullForDirection, tintIndex, texture, uvs, rotation, null); -+ } -+ -+ @Override -+ public net.minecraftforge.client.model.ForgeFaceData data() { -+ return this.data == null ? net.minecraftforge.client.model.ForgeFaceData.DEFAULT : this.data; -+ } -+ - public static float getU(BlockElementFace.UVs p_396140_, Quadrant p_396737_, int p_395337_) { - return p_396140_.getVertexU(p_396737_.rotateVertexIndex(p_395337_)) / 16.0F; - } -@@ -38,7 +_,7 @@ - String s = getTexture(jsonobject); - BlockElementFace.UVs blockelementface$uvs = getUVs(jsonobject); - Quadrant quadrant = getRotation(jsonobject); -- return new BlockElementFace(direction, i, s, blockelementface$uvs, quadrant); -+ return new BlockElementFace(direction, i, s, blockelementface$uvs, quadrant, net.minecraftforge.client.model.ForgeFaceData.read(jsonobject.get("forge_data"), null)); - } - - private static int getTintIndex(JsonObject p_111369_) { diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/BlockModelPart.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/model/BlockModelPart.java.patch deleted file mode 100644 index e9be8b4949..0000000000 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/BlockModelPart.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/minecraft/client/renderer/block/model/BlockModelPart.java -+++ b/net/minecraft/client/renderer/block/model/BlockModelPart.java -@@ -10,7 +_,7 @@ - import org.jspecify.annotations.Nullable; - - @OnlyIn(Dist.CLIENT) --public interface BlockModelPart { -+public interface BlockModelPart extends net.minecraftforge.client.extensions.IForgeBlockModelPart { - List getQuads(@Nullable Direction p_395320_); - - boolean useAmbientOcclusion(); diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/BlockStateModel.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/model/BlockStateModel.java.patch deleted file mode 100644 index 98f0c8f968..0000000000 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/BlockStateModel.java.patch +++ /dev/null @@ -1,26 +0,0 @@ ---- a/net/minecraft/client/renderer/block/model/BlockStateModel.java -+++ b/net/minecraft/client/renderer/block/model/BlockStateModel.java -@@ -22,15 +_,21 @@ - import net.minecraftforge.api.distmarker.OnlyIn; - - @OnlyIn(Dist.CLIENT) --public interface BlockStateModel { -+public interface BlockStateModel extends net.minecraftforge.client.extensions.IForgeBlockStateModel { -+ /**@deprecated Forge: Use {@link net.minecraftforge.client.extensions.IForgeBlockStateModel#collectParts(RandomSource, List, net.minecraftforge.client.model.data.ModelData, net.minecraft.client.renderer.RenderType)}*/ -+ @Deprecated - void collectParts(RandomSource p_397689_, List p_394710_); - -+ /**@deprecated Forge: Use {@link net.minecraftforge.client.extensions.IForgeBlockStateModel#collectParts(RandomSource, net.minecraftforge.client.model.data.ModelData, net.minecraft.client.renderer.RenderType)}*/ -+ @Deprecated - default List collectParts(RandomSource p_392713_) { - List list = new ObjectArrayList<>(); -- this.collectParts(p_392713_, list); -+ this.collectParts(p_392713_, list, net.minecraftforge.client.model.data.ModelData.EMPTY, null); - return list; - } - -+ /**@deprecated Forge: Use {@link net.minecraftforge.client.extensions.IForgeBlockStateModel#particleIcon(net.minecraftforge.client.model.data.ModelData)}*/ -+ @Deprecated - TextureAtlasSprite particleIcon(); - - @OnlyIn(Dist.CLIENT) diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/FaceBakery.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/model/FaceBakery.java.patch deleted file mode 100644 index 7c241afd8a..0000000000 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/FaceBakery.java.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- a/net/minecraft/client/renderer/block/model/FaceBakery.java -+++ b/net/minecraft/client/renderer/block/model/FaceBakery.java -@@ -93,7 +_,8 @@ - Objects.requireNonNullElse(direction, Direction.UP), - p_111604_, - p_111608_, -- p_364904_ -+ p_364904_, -+ p_111603_.data().ambientOcclusion() - ); - } - diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/SimpleModelWrapper.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/model/SimpleModelWrapper.java.patch deleted file mode 100644 index 877aa5978a..0000000000 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/SimpleModelWrapper.java.patch +++ /dev/null @@ -1,26 +0,0 @@ ---- a/net/minecraft/client/renderer/block/model/SimpleModelWrapper.java -+++ b/net/minecraft/client/renderer/block/model/SimpleModelWrapper.java -@@ -18,7 +_,7 @@ - import org.slf4j.Logger; - - @OnlyIn(Dist.CLIENT) --public record SimpleModelWrapper(QuadCollection quads, boolean useAmbientOcclusion, TextureAtlasSprite particleIcon) implements BlockModelPart { -+public record SimpleModelWrapper(QuadCollection quads, boolean useAmbientOcclusion, TextureAtlasSprite particleIcon, net.minecraft.client.renderer.chunk.ChunkSectionLayer layer, net.minecraft.client.renderer.chunk.ChunkSectionLayer layerFast) implements BlockModelPart { - private static final Logger LOGGER = LogUtils.getLogger(); - - public static BlockModelPart bake(ModelBaker p_395631_, Identifier p_457297_, ModelState p_396899_) { -@@ -44,8 +_,13 @@ - LOGGER.warn("Rejecting block model {}, since it contains sprites from outside of supported atlas: {}", p_457297_, multimap); - return p_395631_.missingBlockModelPart(); - } else { -- return new SimpleModelWrapper(quadcollection, flag, textureatlassprite); -+ var ctx = resolvedmodel.getContext(); -+ return new SimpleModelWrapper(quadcollection, flag, textureatlassprite, ctx.getRenderType().block(), ctx.getRenderTypeFast().block()); - } -+ } -+ -+ public SimpleModelWrapper(QuadCollection quadcollection, boolean useAmbientOcclusion, TextureAtlasSprite particleIcon) { -+ this(quadcollection, useAmbientOcclusion, particleIcon, null, null); - } - - @Override diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/SingleVariant.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/model/SingleVariant.java.patch deleted file mode 100644 index 738a4fe743..0000000000 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/SingleVariant.java.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- a/net/minecraft/client/renderer/block/model/SingleVariant.java -+++ b/net/minecraft/client/renderer/block/model/SingleVariant.java -@@ -12,9 +_,13 @@ - @OnlyIn(Dist.CLIENT) - public class SingleVariant implements BlockStateModel { - private final BlockModelPart model; -+ private final java.util.Collection layer; -+ private final java.util.Collection layerFast; - - public SingleVariant(BlockModelPart p_394592_) { - this.model = p_394592_; -+ this.layer = this.model.layer() == null ? null : java.util.EnumSet.of(this.model.layer()); -+ this.layerFast = this.model.layerFast() == null ? null : java.util.EnumSet.of(this.model.layerFast()); - } - - @Override -@@ -25,6 +_,12 @@ - @Override - public TextureAtlasSprite particleIcon() { - return this.model.particleIcon(); -+ } -+ -+ @Override -+ public java.util.Collection getRenderTypes(net.minecraft.world.level.block.state.BlockState state, RandomSource rand, net.minecraftforge.client.model.data.ModelData data) { -+ var type = net.minecraft.client.renderer.ItemBlockRenderTypes.isFancy() ? layer : layerFast; -+ return type != null ? type : BlockStateModel.super.getRenderTypes(state, rand, data); - } - - @OnlyIn(Dist.CLIENT) diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/multipart/MultiPartModel.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/model/multipart/MultiPartModel.java.patch deleted file mode 100644 index 03dbedf447..0000000000 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/multipart/MultiPartModel.java.patch +++ /dev/null @@ -1,76 +0,0 @@ ---- a/net/minecraft/client/renderer/block/model/multipart/MultiPartModel.java -+++ b/net/minecraft/client/renderer/block/model/multipart/MultiPartModel.java -@@ -25,6 +_,8 @@ - private final MultiPartModel.SharedBakedState shared; - private final BlockState blockState; - private @Nullable List models; -+ private boolean cacheKey = false; -+ private java.util.@Nullable Collection cache; - - MultiPartModel(MultiPartModel.SharedBakedState p_391554_, BlockState p_397918_) { - this.shared = p_391554_; -@@ -37,6 +_,11 @@ - } - - @Override -+ public TextureAtlasSprite particleIcon(net.minecraftforge.client.model.data.ModelData data) { -+ return this.shared.firstModel.particleIcon(data); -+ } -+ -+ @Override - public void collectParts(RandomSource p_391247_, List p_397207_) { - if (this.models == null) { - this.models = this.shared.selectModels(this.blockState); -@@ -50,6 +_,33 @@ - } - } - -+ @Override -+ public void collectParts(RandomSource rand, List dest, net.minecraftforge.client.model.data.ModelData extraData, net.minecraft.client.renderer.chunk.ChunkSectionLayer renderType) { -+ if (this.models == null) { -+ this.models = this.shared.selectModels(this.blockState); -+ } -+ -+ long i = rand.nextLong(); -+ -+ for (BlockStateModel blockstatemodel : this.models) { -+ rand.setSeed(i); -+ blockstatemodel.collectParts(rand, dest, extraData, renderType); -+ } -+ } -+ -+ @Override -+ public java.util.Collection getRenderTypes(BlockState state, RandomSource rand, net.minecraftforge.client.model.data.ModelData data) { -+ if (this.models == null) -+ this.models = this.shared.selectModels(this.blockState); -+ if (this.cache == null || this.cacheKey != net.minecraft.client.renderer.ItemBlockRenderTypes.isFancy()) { -+ var tmp = java.util.EnumSet.noneOf(net.minecraft.client.renderer.chunk.ChunkSectionLayer.class); -+ for (var model : this.models) -+ tmp.addAll(model.getRenderTypes(state, rand, data)); -+ this.cache = tmp; -+ } -+ return !this.cache.isEmpty() ? this.cache : BlockStateModel.super.getRenderTypes(state, rand, data); -+ } -+ - @OnlyIn(Dist.CLIENT) - public record Selector(Predicate condition, T model) { - public MultiPartModel.Selector with(S p_393772_) { -@@ -61,6 +_,7 @@ - static final class SharedBakedState { - private final List> selectors; - final TextureAtlasSprite particleIcon; -+ final BlockStateModel firstModel; - private final Map> subsets = new ConcurrentHashMap<>(); - - private static BlockStateModel getFirstModel(List> p_392132_) { -@@ -73,8 +_,8 @@ - - public SharedBakedState(List> p_393647_) { - this.selectors = p_393647_; -- BlockStateModel blockstatemodel = getFirstModel(p_393647_); -- this.particleIcon = blockstatemodel.particleIcon(); -+ this.firstModel = getFirstModel(p_393647_); -+ this.particleIcon = firstModel.particleIcon(); - } - - public List selectModels(BlockState p_392405_) { diff --git a/patches/minecraft/net/minecraft/client/renderer/blockentity/BlockEntityRenderers.java.patch b/patches/minecraft/net/minecraft/client/renderer/blockentity/BlockEntityRenderers.java.patch index ab526d9673..b4d5cf9d3e 100644 --- a/patches/minecraft/net/minecraft/client/renderer/blockentity/BlockEntityRenderers.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/blockentity/BlockEntityRenderers.java.patch @@ -8,4 +8,4 @@ + private static final Map, BlockEntityRendererProvider> PROVIDERS = new java.util.concurrent.ConcurrentHashMap<>(); public static void register( - BlockEntityType p_173591_, BlockEntityRendererProvider p_173592_ + final BlockEntityType type, final BlockEntityRendererProvider renderer diff --git a/patches/minecraft/net/minecraft/client/renderer/blockentity/SkullBlockRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/blockentity/SkullBlockRenderer.java.patch index 3cfc89f09f..499a66c7a0 100644 --- a/patches/minecraft/net/minecraft/client/renderer/blockentity/SkullBlockRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/blockentity/SkullBlockRenderer.java.patch @@ -1,21 +1,21 @@ --- a/net/minecraft/client/renderer/blockentity/SkullBlockRenderer.java +++ b/net/minecraft/client/renderer/blockentity/SkullBlockRenderer.java -@@ -37,6 +_,7 @@ - - @OnlyIn(Dist.CLIENT) - public class SkullBlockRenderer implements BlockEntityRenderer { +@@ -44,6 +_,7 @@ + public static final WallAndGroundTransformations TRANSFORMATIONS = new WallAndGroundTransformations<>( + SkullBlockRenderer::createWallTransformation, SkullBlockRenderer::createGroundTransformation, 16 + ); + private static Map> customModels; private final Function modelByType; - public static final Map SKIN_BY_TYPE = Util.make(Maps.newHashMap(), p_340906_ -> { - p_340906_.put(SkullBlock.Types.SKELETON, Identifier.withDefaultNamespace("textures/entity/skeleton/skeleton.png")); -@@ -61,7 +_,9 @@ - case PIGLIN -> new PiglinHeadModel(p_376421_.bakeLayer(ModelLayers.PIGLIN_HEAD)); + public static final Map SKIN_BY_TYPE = Util.make(Maps.newHashMap(), map -> { + map.put(SkullBlock.Types.SKELETON, Identifier.withDefaultNamespace("textures/entity/skeleton/skeleton.png")); +@@ -68,7 +_,9 @@ + case PIGLIN -> new PiglinHeadModel(modelSet.bakeLayer(ModelLayers.PIGLIN_HEAD)); }); } else { - return null; + if (customModels == null) + customModels = net.minecraftforge.client.event.ForgeEventFactoryClient.onCreateSkullModels(); -+ return customModels.getOrDefault(p_377655_, k -> null).apply(p_376421_); ++ return customModels.getOrDefault(type, k -> null).apply(modelSet); } } diff --git a/patches/minecraft/net/minecraft/client/renderer/chunk/RenderSectionRegion.java.patch b/patches/minecraft/net/minecraft/client/renderer/chunk/RenderSectionRegion.java.patch index eda7b21805..31ff3a1d98 100644 --- a/patches/minecraft/net/minecraft/client/renderer/chunk/RenderSectionRegion.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/chunk/RenderSectionRegion.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/client/renderer/chunk/RenderSectionRegion.java +++ b/net/minecraft/client/renderer/chunk/RenderSectionRegion.java -@@ -89,4 +_,9 @@ - public static int index(int p_409495_, int p_409337_, int p_407713_, int p_409077_, int p_406510_, int p_408332_) { - return p_409077_ - p_409495_ + (p_406510_ - p_409337_) * 3 + (p_408332_ - p_407713_) * 3 * 3; +@@ -93,4 +_,9 @@ + public static int index(final int minSectionX, final int minSectionY, final int minSectionZ, final int sectionX, final int sectionY, final int sectionZ) { + return sectionX - minSectionX + (sectionY - minSectionY) * 3 + (sectionZ - minSectionZ) * 3 * 3; } + + @Override diff --git a/patches/minecraft/net/minecraft/client/renderer/chunk/SectionCompiler.java.patch b/patches/minecraft/net/minecraft/client/renderer/chunk/SectionCompiler.java.patch index c6cae53317..48c6a97f1c 100644 --- a/patches/minecraft/net/minecraft/client/renderer/chunk/SectionCompiler.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/chunk/SectionCompiler.java.patch @@ -1,35 +1,20 @@ --- a/net/minecraft/client/renderer/chunk/SectionCompiler.java +++ b/net/minecraft/client/renderer/chunk/SectionCompiler.java -@@ -42,6 +_,7 @@ - } - - public SectionCompiler.Results compile(SectionPos p_344383_, RenderSectionRegion p_409909_, VertexSorting p_342522_, SectionBufferBuilderPack p_343546_) { -+ var modelDataMap = net.minecraft.client.Minecraft.getInstance().level.getModelDataManager().getAt(p_344383_); +@@ -63,6 +_,7 @@ + public SectionCompiler.Results compile( + final SectionPos sectionPos, final RenderSectionRegion region, final VertexSorting vertexSorting, final SectionBufferBuilderPack builders + ) { ++ var modelDataMap = net.minecraft.client.Minecraft.getInstance().level.getModelDataManager().getAt(sectionPos); SectionCompiler.Results sectioncompiler$results = new SectionCompiler.Results(); - BlockPos blockpos = p_344383_.origin(); + BlockPos blockpos = sectionPos.origin(); BlockPos blockpos1 = blockpos.offset(15, 15, 15); -@@ -73,10 +_,14 @@ - } - - if (blockstate.getRenderShape() == RenderShape.MODEL) { -- ChunkSectionLayer chunksectionlayer2 = ItemBlockRenderTypes.getChunkRenderType(blockstate); -+ var model = this.blockRenderer.getBlockModel(blockstate); -+ var data = modelDataMap.getOrDefault(blockpos2, net.minecraftforge.client.model.data.ModelData.EMPTY); -+ data = model.getModelData(p_409909_, blockpos2, blockstate, data); -+ randomsource.setSeed(blockstate.getSeed(blockpos2)); // Forge: We set this on purpose twice so that getRenderTypes can have the same RNG as collectParts -+ for (ChunkSectionLayer chunksectionlayer2 : model.getRenderTypes(blockstate, randomsource, data)) { - BufferBuilder bufferbuilder1 = this.getOrBeginLayer(map, p_343546_, chunksectionlayer2); - randomsource.setSeed(blockstate.getSeed(blockpos2)); -- this.blockRenderer.getBlockModel(blockstate).collectParts(randomsource, list); -+ model.collectParts(randomsource, list, data, chunksectionlayer2); - posestack.pushPose(); - posestack.translate( - SectionPos.sectionRelative(blockpos2.getX()), SectionPos.sectionRelative(blockpos2.getY()), SectionPos.sectionRelative(blockpos2.getZ()) -@@ -84,6 +_,7 @@ - this.blockRenderer.renderBatched(blockstate, blockpos2, p_409909_, posestack, bufferbuilder1, true, list); - posestack.popPose(); - list.clear(); -+ } - } - } - +@@ -111,7 +_,8 @@ + blockpos2, + blockstate, + this.blockModelSet.get(blockstate), +- blockstate.getSeed(blockpos2) ++ blockstate.getSeed(blockpos2), ++ modelDataMap.getOrDefault(blockpos2, net.minecraftforge.client.model.data.ModelData.EMPTY) + ); + } + } catch (Throwable throwable) { diff --git a/patches/minecraft/net/minecraft/client/renderer/culling/Frustum.java.patch b/patches/minecraft/net/minecraft/client/renderer/culling/Frustum.java.patch index 56c8e797d6..4112c208bd 100644 --- a/patches/minecraft/net/minecraft/client/renderer/culling/Frustum.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/culling/Frustum.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/client/renderer/culling/Frustum.java +++ b/net/minecraft/client/renderer/culling/Frustum.java -@@ -78,6 +_,8 @@ +@@ -83,6 +_,8 @@ } - public boolean isVisible(AABB p_113030_) { + public boolean isVisible(final AABB bb) { + // Forge: exit early for infinite bounds, these would otherwise fail in the intersection test at certain camera angles (GH-9321) -+ if (p_113030_.equals(net.minecraftforge.common.extensions.IForgeBlockEntity.INFINITE_EXTENT_AABB)) return true; - int i = this.cubeInFrustum(p_113030_.minX, p_113030_.minY, p_113030_.minZ, p_113030_.maxX, p_113030_.maxY, p_113030_.maxZ); ++ if (bb.equals(net.minecraftforge.common.extensions.IForgeBlockEntity.INFINITE_EXTENT_AABB)) return true; + int i = this.cubeInFrustum(bb.minX, bb.minY, bb.minZ, bb.maxX, bb.maxY, bb.maxZ); return i == -2 || i == -1; } diff --git a/patches/minecraft/net/minecraft/client/renderer/debug/EntityHitboxDebugRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/debug/EntityHitboxDebugRenderer.java.patch index 952a23e3c4..84d27d0637 100644 --- a/patches/minecraft/net/minecraft/client/renderer/debug/EntityHitboxDebugRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/debug/EntityHitboxDebugRenderer.java.patch @@ -1,13 +1,13 @@ --- a/net/minecraft/client/renderer/debug/EntityHitboxDebugRenderer.java +++ b/net/minecraft/client/renderer/debug/EntityHitboxDebugRenderer.java -@@ -100,8 +_,8 @@ +@@ -93,8 +_,8 @@ ); } -- if (p_450643_ instanceof EnderDragon enderdragon) { +- if (entity instanceof EnderDragon enderdragon) { - for (EnderDragonPart enderdragonpart : enderdragon.getSubEntities()) { -+ if (p_450643_.isMultipartEntity()) { -+ for (var enderdragonpart : p_450643_.getParts()) { ++ if (entity.isMultipartEntity()) { ++ for (var enderdragonpart : entity.getParts()) { Vec3 vec34 = enderdragonpart.position(); - Vec3 vec35 = enderdragonpart.getPosition(p_456396_); + Vec3 vec35 = enderdragonpart.getPosition(partialTicks); Vec3 vec36 = vec35.subtract(vec34); diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/EntityRenderDispatcher.java.patch b/patches/minecraft/net/minecraft/client/renderer/entity/EntityRenderDispatcher.java.patch index 470f778b86..022b06d41b 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/EntityRenderDispatcher.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/entity/EntityRenderDispatcher.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/renderer/entity/EntityRenderDispatcher.java +++ b/net/minecraft/client/renderer/entity/EntityRenderDispatcher.java -@@ -201,6 +_,14 @@ +@@ -209,6 +_,14 @@ return this.itemInHandRenderer; } @@ -13,9 +13,9 @@ + } + @Override - public void onResourceManagerReload(ResourceManager p_174004_) { + public void onResourceManagerReload(final ResourceManager resourceManager) { EntityRendererProvider.Context entityrendererprovider$context = new EntityRendererProvider.Context( -@@ -218,5 +_,6 @@ +@@ -226,5 +_,6 @@ this.renderers = EntityRenderers.createEntityRenderers(entityrendererprovider$context); this.playerRenderers = EntityRenderers.createAvatarRenderers(entityrendererprovider$context); this.mannequinRenderers = EntityRenderers.createAvatarRenderers(entityrendererprovider$context); diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/EntityRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/entity/EntityRenderer.java.patch index 1e2c38dba6..444d0bfebb 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/EntityRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/entity/EntityRenderer.java.patch @@ -1,24 +1,33 @@ --- a/net/minecraft/client/renderer/entity/EntityRenderer.java +++ b/net/minecraft/client/renderer/entity/EntityRenderer.java -@@ -125,9 +_,10 @@ - } +@@ -126,16 +_,17 @@ + final S state, final PoseStack poseStack, final SubmitNodeCollector submitNodeCollector, final CameraRenderState camera, final int offset + ) { + poseStack.pushPose(); +- if (state.scoreText != null) { ++ var event = net.minecraftforge.client.event.ForgeEventFactoryClient.fireRenderNameTagEvent(state, this, poseStack, submitNodeCollector, camera); ++ if (event.getScoreContent() != null) { + submitNodeCollector.submitNameTag( +- poseStack, state.nameTagAttachment, offset, state.scoreText, !state.isDiscrete, state.lightCoords, state.distanceToCameraSq, camera ++ poseStack, state.nameTagAttachment, offset, event.getScoreContent(), !state.isDiscrete, state.lightCoords, state.distanceToCameraSq, camera + ); + poseStack.translate(0.0F, 9.0F * 1.15F * 0.025F, 0.0F); + } - protected void submitNameTag(S p_429896_, PoseStack p_428845_, SubmitNodeCollector p_426439_, CameraRenderState p_428408_) { -- if (p_429896_.nameTag != null) { -+ var event = net.minecraftforge.client.event.ForgeEventFactoryClient.fireRenderNameTagEvent(p_429896_, p_429896_.nameTag, this, p_428845_, p_426439_, p_428408_); -+ if (!event.getResult().isDenied() && (event.getResult().isAllowed() || p_429896_.nameTag != null)) { - p_426439_.submitNameTag( -- p_428845_, p_429896_.nameTagAttachment, 0, p_429896_.nameTag, !p_429896_.isDiscrete, p_429896_.lightCoords, p_429896_.distanceToCameraSq, p_428408_ -+ p_428845_, p_429896_.nameTagAttachment, 0, event.getContent(), !p_429896_.isDiscrete, p_429896_.lightCoords, p_429896_.distanceToCameraSq, p_428408_ +- if (state.nameTag != null) { ++ if (event.getContent() != null) { + submitNodeCollector.submitNameTag( +- poseStack, state.nameTagAttachment, offset, state.nameTag, !state.isDiscrete, state.lightCoords, state.distanceToCameraSq, camera ++ poseStack, state.nameTagAttachment, offset, event.getContent(), !state.isDiscrete, state.lightCoords, state.distanceToCameraSq, camera ); } - } -@@ -177,7 +_,7 @@ + +@@ -187,7 +_,7 @@ if (this.entityRenderDispatcher.camera != null) { - p_367427_.distanceToCameraSq = this.entityRenderDispatcher.distanceToSqr(p_367571_); -- boolean flag1 = p_367427_.distanceToCameraSq < 4096.0 && this.shouldShowName(p_367571_, p_367427_.distanceToCameraSq); -+ boolean flag1 = net.minecraftforge.client.ForgeHooksClient.isNameplateInRenderDistance(p_367571_, p_367427_.distanceToCameraSq) && this.shouldShowName(p_367571_, p_367427_.distanceToCameraSq); + state.distanceToCameraSq = this.entityRenderDispatcher.distanceToSqr(entity); +- boolean flag1 = state.distanceToCameraSq < 4096.0 && this.shouldShowName(entity, state.distanceToCameraSq); ++ boolean flag1 = net.minecraftforge.client.ForgeHooksClient.isNameplateInRenderDistance(entity, state.distanceToCameraSq) && this.shouldShowName(entity, state.distanceToCameraSq); if (flag1) { - p_367427_.nameTag = this.getNameTag(p_367571_); - p_367427_.nameTagAttachment = p_367571_.getAttachments().getNullable(EntityAttachment.NAME_TAG, 0, p_367571_.getYRot(p_363243_)); + state.nameTag = this.getNameTag(entity); + state.nameTagAttachment = entity.getAttachments().getNullable(EntityAttachment.NAME_TAG, 0, entity.getYRot(partialTicks)); diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/HumanoidMobRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/entity/HumanoidMobRenderer.java.patch index bccb9fca61..b44ff59f15 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/HumanoidMobRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/entity/HumanoidMobRenderer.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/client/renderer/entity/HumanoidMobRenderer.java +++ b/net/minecraft/client/renderer/entity/HumanoidMobRenderer.java -@@ -61,7 +_,7 @@ - p_369040_.isCrouching = p_362179_.isCrouching(); - p_369040_.isFallFlying = p_362179_.isFallFlying(); - p_369040_.isVisuallySwimming = p_362179_.isVisuallySwimming(); -- p_369040_.isPassenger = p_362179_.isPassenger(); -+ p_369040_.isPassenger = p_362179_.isPassenger() && (p_362179_.getVehicle() != null && p_362179_.getVehicle().shouldRiderSit());; - p_369040_.speedValue = 1.0F; - if (p_369040_.isFallFlying) { - p_369040_.speedValue = (float)p_362179_.getDeltaMovement().lengthSqr(); +@@ -69,7 +_,7 @@ + state.isCrouching = entity.isCrouching(); + state.isFallFlying = entity.isFallFlying(); + state.isVisuallySwimming = entity.isVisuallySwimming(); +- state.isPassenger = entity.isPassenger(); ++ state.isPassenger = entity.isPassenger() && (entity.getVehicle() != null && entity.getVehicle().shouldRiderSit()); + state.speedValue = 1.0F; + if (state.isFallFlying) { + state.speedValue = (float)entity.getDeltaMovement().lengthSqr(); diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/ItemFrameRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/entity/ItemFrameRenderer.java.patch index 6d263bb72f..3e7cdc88f0 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/ItemFrameRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/entity/ItemFrameRenderer.java.patch @@ -1,18 +1,18 @@ --- a/net/minecraft/client/renderer/entity/ItemFrameRenderer.java +++ b/net/minecraft/client/renderer/entity/ItemFrameRenderer.java -@@ -95,6 +_,7 @@ - if (p_430553_.mapId != null) { - int j = p_430553_.rotation % 4 * 2; - p_431616_.mulPose(Axis.ZP.rotationDegrees(j * 360.0F / 8.0F)); -+ if (!net.minecraftforge.client.event.ForgeEventFactoryClient.onRenderItemInFrame(p_430553_, this, p_431616_, p_423714_, p_430553_.lightCoords)) { - p_431616_.mulPose(Axis.ZP.rotationDegrees(180.0F)); +@@ -82,6 +_,7 @@ + if (state.mapId != null) { + int i = state.rotation % 4 * 2; + poseStack.mulPose(Axis.ZP.rotationDegrees(i * 360.0F / 8.0F)); ++ if (!net.minecraftforge.client.event.ForgeEventFactoryClient.onRenderItemInFrame(state, this, poseStack, submitNodeCollector, state.lightCoords)) { + poseStack.mulPose(Axis.ZP.rotationDegrees(180.0F)); float f2 = 0.0078125F; - p_431616_.scale(0.0078125F, 0.0078125F, 0.0078125F); -@@ -102,6 +_,7 @@ - p_431616_.translate(0.0F, 0.0F, -1.0F); - int i = this.getLightCoords(p_430553_.isGlowFrame, 15728850, p_430553_.lightCoords); - this.mapRenderer.render(p_430553_.mapRenderState, p_431616_, p_423714_, true, i); + poseStack.scale(0.0078125F, 0.0078125F, 0.0078125F); +@@ -89,6 +_,7 @@ + poseStack.translate(0.0F, 0.0F, -1.0F); + int j = this.getLightCoords(state.isGlowFrame, 15728850, state.lightCoords); + this.mapRenderer.render(state.mapRenderState, poseStack, submitNodeCollector, true, j); + } - } else if (!p_430553_.item.isEmpty()) { - p_431616_.mulPose(Axis.ZP.rotationDegrees(p_430553_.rotation * 360.0F / 8.0F)); - int k = this.getLightCoords(p_430553_.isGlowFrame, 15728880, p_430553_.lightCoords); + } else if (!state.item.isEmpty()) { + poseStack.mulPose(Axis.ZP.rotationDegrees(state.rotation * 360.0F / 8.0F)); + int k = this.getLightCoords(state.isGlowFrame, 15728880, state.lightCoords); diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/LivingEntityRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/entity/LivingEntityRenderer.java.patch index c79a00fe21..357e2023ec 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/LivingEntityRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/entity/LivingEntityRenderer.java.patch @@ -3,24 +3,25 @@ @@ -72,6 +_,7 @@ } - public void submit(S p_427824_, PoseStack p_423787_, SubmitNodeCollector p_424901_, CameraRenderState p_422963_) { -+ if (net.minecraftforge.client.event.ForgeEventFactoryClient.onRenderLivingPre(p_427824_, this, p_423787_, p_424901_, p_422963_)) return; - p_423787_.pushPose(); - if (p_427824_.hasPose(Pose.SLEEPING)) { - Direction direction = p_427824_.bedOrientation; + public void submit(final S state, final PoseStack poseStack, final SubmitNodeCollector submitNodeCollector, final CameraRenderState camera) { ++ if (net.minecraftforge.client.event.ForgeEventFactoryClient.onRenderLivingPre(state, this, poseStack, submitNodeCollector, camera)) return; + poseStack.pushPose(); + if (state.hasPose(Pose.SLEEPING)) { + Direction direction = state.bedOrientation; @@ -107,6 +_,7 @@ - p_423787_.popPose(); - super.submit(p_427824_, p_423787_, p_424901_, p_422963_); -+ net.minecraftforge.client.event.ForgeEventFactoryClient.onRenderLivingPost(p_427824_, this, p_423787_, p_424901_, p_422963_); + poseStack.popPose(); + super.submit(state, poseStack, submitNodeCollector, camera); ++ net.minecraftforge.client.event.ForgeEventFactoryClient.onRenderLivingPost(state, this, poseStack, submitNodeCollector, camera); } - protected boolean shouldRenderLayers(S p_360804_) { -@@ -284,6 +_,7 @@ - p_363057_.isFullyFrozen = p_368665_.isFullyFrozen(); - p_363057_.isBaby = p_368665_.isBaby(); - p_363057_.isInWater = p_368665_.isInWater(); -+ p_363057_.isInWater = p_368665_.isInWaterOrSwimmable(); - p_363057_.isAutoSpinAttack = p_368665_.isAutoSpinAttack(); - p_363057_.ticksSinceKineticHitFeedback = p_368665_.getTicksSinceLastKineticHitFeedback(p_364497_); - p_363057_.hasRedOverlay = p_368665_.hurtTime > 0 || p_368665_.deathTime > 0; + protected boolean shouldRenderLayers(final S state) { +@@ -283,7 +_,7 @@ + + state.isFullyFrozen = entity.isFullyFrozen(); + state.isBaby = entity.isBaby(); +- state.isInWater = entity.isInWater(); ++ state.isInWater = entity.isInWaterOrSwimmable(); + state.isAutoSpinAttack = entity.isAutoSpinAttack(); + state.ticksSinceKineticHitFeedback = entity.getTicksSinceLastKineticHitFeedback(partialTicks); + state.hasRedOverlay = entity.hurtTime > 0 || entity.deathTime > 0; diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/layers/HumanoidArmorLayer.java.patch b/patches/minecraft/net/minecraft/client/renderer/entity/layers/HumanoidArmorLayer.java.patch index 4ed5219f12..db416febd6 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/layers/HumanoidArmorLayer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/entity/layers/HumanoidArmorLayer.java.patch @@ -1,26 +1,26 @@ --- a/net/minecraft/client/renderer/entity/layers/HumanoidArmorLayer.java +++ b/net/minecraft/client/renderer/entity/layers/HumanoidArmorLayer.java -@@ -51,6 +_,7 @@ - Equippable equippable = p_366444_.get(DataComponents.EQUIPPABLE); - if (equippable != null && shouldRender(equippable, p_117122_)) { - A a = this.getArmorModel(p_423438_, p_117122_); -+ var model = this.getArmorModel(p_423438_, p_117122_, p_366444_, a); - EquipmentClientInfo.LayerType equipmentclientinfo$layertype = this.usesInnerModel(p_117122_) - ? EquipmentClientInfo.LayerType.HUMANOID_LEGGINGS - : EquipmentClientInfo.LayerType.HUMANOID; -@@ -58,7 +_,7 @@ +@@ -66,6 +_,7 @@ + Equippable equippable = itemStack.get(DataComponents.EQUIPPABLE); + if (equippable != null && shouldRender(equippable, slot)) { + A a = this.getArmorModel(state, slot); ++ var model = this.getArmorModel(state, slot, itemStack, a); + EquipmentClientInfo.LayerType equipmentclientinfo$layertype = state.isBaby && state.entityType != EntityType.ARMOR_STAND + ? EquipmentClientInfo.LayerType.HUMANOID_BABY + : (this.usesInnerModel(slot) ? EquipmentClientInfo.LayerType.HUMANOID_LEGGINGS : EquipmentClientInfo.LayerType.HUMANOID); +@@ -73,7 +_,7 @@ .renderLayers( equipmentclientinfo$layertype, equippable.assetId().orElseThrow(), - a, + model, - p_423438_, - p_366444_, - p_117119_, -@@ -75,5 +_,12 @@ + state, + itemStack, + poseStack, +@@ -90,5 +_,12 @@ - private boolean usesInnerModel(EquipmentSlot p_117129_) { - return p_117129_ == EquipmentSlot.LEGS; + private boolean usesInnerModel(final EquipmentSlot slot) { + return slot == EquipmentSlot.LEGS; + } + + /** diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/layers/WingsLayer.java.patch b/patches/minecraft/net/minecraft/client/renderer/entity/layers/WingsLayer.java.patch index 17f3d4ba89..36e65971d9 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/layers/WingsLayer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/entity/layers/WingsLayer.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/client/renderer/entity/layers/WingsLayer.java +++ b/net/minecraft/client/renderer/entity/layers/WingsLayer.java -@@ -58,7 +_,7 @@ +@@ -60,7 +_,7 @@ } } -- protected static @Nullable Identifier getPlayerElytraTexture(HumanoidRenderState p_364125_) { -+ protected @Nullable Identifier getPlayerElytraTexture(HumanoidRenderState p_364125_) { - if (p_364125_ instanceof AvatarRenderState avatarrenderstate) { +- protected static @Nullable Identifier getPlayerElytraTexture(final HumanoidRenderState state) { ++ protected @Nullable Identifier getPlayerElytraTexture(final HumanoidRenderState state) { + if (state instanceof AvatarRenderState avatarrenderstate) { PlayerSkin playerskin = avatarrenderstate.skin; if (playerskin.elytra() != null) { diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/player/AvatarRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/entity/player/AvatarRenderer.java.patch index 325552266b..7fb5516fd1 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/player/AvatarRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/entity/player/AvatarRenderer.java.patch @@ -1,55 +1,44 @@ --- a/net/minecraft/client/renderer/entity/player/AvatarRenderer.java +++ b/net/minecraft/client/renderer/entity/player/AvatarRenderer.java @@ -96,7 +_,7 @@ - private static HumanoidModel.ArmPose getArmPose(Avatar p_422497_, ItemStack p_429700_, InteractionHand p_430481_) { - if (p_429700_.isEmpty()) { + private static HumanoidModel.ArmPose getArmPose(final Avatar avatar, final ItemStack itemInHand, final InteractionHand hand) { + if (itemInHand.isEmpty()) { return HumanoidModel.ArmPose.EMPTY; -- } else if (!p_422497_.swinging && p_429700_.is(Items.CROSSBOW) && CrossbowItem.isCharged(p_429700_)) { -+ } else if (!p_422497_.swinging && p_429700_.getItem() instanceof CrossbowItem && CrossbowItem.isCharged(p_429700_)) { +- } else if (!avatar.swinging && itemInHand.is(Items.CROSSBOW) && CrossbowItem.isCharged(itemInHand)) { ++ } else if (!avatar.swinging && itemInHand.getItem() instanceof CrossbowItem && CrossbowItem.isCharged(itemInHand)) { return HumanoidModel.ArmPose.CROSSBOW_HOLD; } else { - if (p_422497_.getUsedItemHand() == p_430481_ && p_422497_.getUseItemRemainingTicks() > 0) { + if (avatar.getUsedItemHand() == hand && avatar.getUseItemRemainingTicks() > 0) { @@ -138,7 +_,9 @@ - if (swinganimation != null && swinganimation.type() == SwingAnimationType.STAB && p_422497_.swinging) { + if (swinganimation != null && swinganimation.type() == SwingAnimationType.STAB && avatar.swinging) { return HumanoidModel.ArmPose.SPEAR; } else { -- return p_429700_.is(ItemTags.SPEARS) ? HumanoidModel.ArmPose.SPEAR : HumanoidModel.ArmPose.ITEM; -+ if (p_429700_.is(ItemTags.SPEARS)) return HumanoidModel.ArmPose.SPEAR; -+ var pose = net.minecraftforge.client.extensions.common.IClientItemExtensions.of(p_429700_).getArmPose(p_422497_, p_430481_, p_429700_); +- return itemInHand.is(ItemTags.SPEARS) ? HumanoidModel.ArmPose.SPEAR : HumanoidModel.ArmPose.ITEM; ++ if (itemInHand.is(ItemTags.SPEARS)) return HumanoidModel.ArmPose.SPEAR; ++ var pose = net.minecraftforge.client.extensions.common.IClientItemExtensions.of(itemInHand).getArmPose(avatar, hand, itemInHand); + return pose == null ? HumanoidModel.ArmPose.ITEM : pose; } } } -@@ -162,9 +_,10 @@ - p_423892_.translate(0.0F, 9.0F * 1.15F * 0.025F, 0.0F); - } - -- if (p_425306_.nameTag != null) { -+ var event = net.minecraftforge.client.event.ForgeEventFactoryClient.fireRenderNameTagEvent(p_425306_, p_425306_.nameTag, this, p_423892_, p_428344_, p_426061_); -+ if (!event.getResult().isDenied() && (event.getResult().isAllowed() || p_425306_.nameTag != null)) { - p_428344_.submitNameTag( -- p_423892_, p_425306_.nameTagAttachment, i, p_425306_.nameTag, !p_425306_.isDiscrete, p_425306_.lightCoords, p_425306_.distanceToCameraSq, p_426061_ -+ p_423892_, p_425306_.nameTagAttachment, i, event.getContent(), !p_425306_.isDiscrete, p_425306_.lightCoords, p_425306_.distanceToCameraSq, p_426061_ - ); - } - -@@ -252,10 +_,12 @@ +@@ -239,12 +_,14 @@ + public void renderRightHand( + final PoseStack poseStack, final SubmitNodeCollector submitNodeCollector, final int lightCoords, final Identifier skinTexture, final boolean hasSleeve + ) { ++ if (!net.minecraftforge.client.event.ForgeEventFactoryClient.onRenderArm(poseStack, submitNodeCollector, lightCoords, HumanoidArm.RIGHT)) + this.renderHand(poseStack, submitNodeCollector, lightCoords, skinTexture, this.model.rightArm, hasSleeve); } - public void renderRightHand(PoseStack p_428282_, SubmitNodeCollector p_424928_, int p_427204_, Identifier p_450403_, boolean p_431039_) { -+ if (!net.minecraftforge.client.event.ForgeEventFactoryClient.onRenderArm(p_428282_, p_424928_, p_427204_, HumanoidArm.RIGHT)) - this.renderHand(p_428282_, p_424928_, p_427204_, p_450403_, this.model.rightArm, p_431039_); + public void renderLeftHand( + final PoseStack poseStack, final SubmitNodeCollector submitNodeCollector, final int lightCoords, final Identifier skinTexture, final boolean hasSleeve + ) { ++ if (!net.minecraftforge.client.event.ForgeEventFactoryClient.onRenderArm(poseStack, submitNodeCollector, lightCoords, HumanoidArm.LEFT)) + this.renderHand(poseStack, submitNodeCollector, lightCoords, skinTexture, this.model.leftArm, hasSleeve); } - public void renderLeftHand(PoseStack p_424615_, SubmitNodeCollector p_425532_, int p_427068_, Identifier p_458705_, boolean p_423290_) { -+ if (!net.minecraftforge.client.event.ForgeEventFactoryClient.onRenderArm(p_424615_, p_425532_, p_427068_, HumanoidArm.LEFT)) - this.renderHand(p_424615_, p_425532_, p_427068_, p_458705_, this.model.leftArm, p_423290_); - } +@@ -302,5 +_,12 @@ -@@ -306,5 +_,12 @@ - - public static boolean isPlayerUpsideDown(Player p_424650_) { - return isUpsideDownName(p_424650_.getGameProfile().name()); + public static boolean isPlayerUpsideDown(final Player player) { + return isUpsideDownName(player.getGameProfile().name()); + } + + @Override diff --git a/patches/minecraft/net/minecraft/client/renderer/feature/BlockFeatureRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/feature/BlockFeatureRenderer.java.patch new file mode 100644 index 0000000000..9b2cc91f11 --- /dev/null +++ b/patches/minecraft/net/minecraft/client/renderer/feature/BlockFeatureRenderer.java.patch @@ -0,0 +1,11 @@ +--- a/net/minecraft/client/renderer/feature/BlockFeatureRenderer.java ++++ b/net/minecraft/client/renderer/feature/BlockFeatureRenderer.java +@@ -164,7 +_,7 @@ + this.random.setSeed(submitnodestorage$breakingblockmodelsubmit.seed()); + + try { +- submitnodestorage$breakingblockmodelsubmit.model().collectParts(this.random, this.parts); ++ submitnodestorage$breakingblockmodelsubmit.model().collectParts(this.random, this.parts, submitnodestorage$breakingblockmodelsubmit.data()); + + for (BlockStateModelPart blockstatemodelpart : this.parts) { + putPartQuads(blockstatemodelpart, submitnodestorage$breakingblockmodelsubmit.pose(), this.quadInstance, NO_TINT, vertexconsumer, null); diff --git a/patches/minecraft/net/minecraft/client/renderer/fog/FogRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/fog/FogRenderer.java.patch index 511847fab9..688160ecff 100644 --- a/patches/minecraft/net/minecraft/client/renderer/fog/FogRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/fog/FogRenderer.java.patch @@ -1,24 +1,23 @@ --- a/net/minecraft/client/renderer/fog/FogRenderer.java +++ b/net/minecraft/client/renderer/fog/FogRenderer.java -@@ -151,6 +_,13 @@ +@@ -153,6 +_,12 @@ f2 = Mth.lerp(f6, f2, f2 * f7); } -+ -+ var fogColor = net.minecraftforge.client.ForgeHooksClient.getFogColor(p_407993_, p_409359_, p_409862_, p_409400_, p_406105_, f5, f1, f2); ++ var fogColor = net.minecraftforge.client.ForgeHooksClient.getFogColor(camera, partialTicks, level, renderDistance, darkenWorldAmount, f5, f1, f2); + + f5 = fogColor.x(); + f1 = fogColor.y(); + f2 = fogColor.z(); + - return new Vector4f(f5, f1, f2, 1.0F); + dest.set(f5, f1, f2, 1.0F); } } -@@ -177,6 +_,7 @@ +@@ -181,6 +_,7 @@ float f2 = Mth.clamp(f1 / 10.0F, 4.0F, 64.0F); fogdata.renderDistanceStart = f1 - f2; fogdata.renderDistanceEnd = f1; -+ vector4f = net.minecraftforge.client.ForgeHooksClient.setupFog(fogtype, p_407701_, p_406871_, fogdata, vector4f); ++ fogdata.color = net.minecraftforge.client.ForgeHooksClient.setupFog(fogtype, camera, deltaTracker, fogdata, fogdata.color); + return fogdata; + } - try (GpuBuffer.MappedView gpubuffer$mappedview = RenderSystem.getDevice().createCommandEncoder().mapBuffer(this.regularBuffer.currentBuffer(), false, true)) { - this.updateBuffer( diff --git a/patches/minecraft/net/minecraft/client/renderer/rendertype/RenderSetup.java.patch b/patches/minecraft/net/minecraft/client/renderer/rendertype/RenderSetup.java.patch index df8809c429..b8a7a9c88e 100644 --- a/patches/minecraft/net/minecraft/client/renderer/rendertype/RenderSetup.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/rendertype/RenderSetup.java.patch @@ -6,27 +6,27 @@ final LayeringTransform layeringTransform; + final Map texturesWithSamplers; - RenderSetup( - RenderPipeline p_455545_, + private RenderSetup( + final RenderPipeline pipeline, @@ -44,7 +_,8 @@ - RenderSetup.OutlineProperty p_454071_, - boolean p_455910_, - boolean p_450946_, -- int p_453755_ -+ int p_453755_, + final RenderSetup.OutlineProperty outlineProperty, + final boolean affectsCrumbling, + final boolean sortOnUpload, +- final int bufferSize ++ final int bufferSize, + Map texturesWithSamplers ) { - this.pipeline = p_455545_; - this.textures = p_455652_; + this.pipeline = pipeline; + this.textures = textures; @@ -57,6 +_,7 @@ - this.affectsCrumbling = p_455910_; - this.sortOnUpload = p_450946_; - this.bufferSize = p_453755_; + this.affectsCrumbling = affectsCrumbling; + this.sortOnUpload = sortOnUpload; + this.bufferSize = bufferSize; + this.texturesWithSamplers = texturesWithSamplers; } @Override -@@ -114,6 +_,8 @@ +@@ -115,6 +_,8 @@ ); } @@ -35,15 +35,15 @@ return map; } } -@@ -149,6 +_,7 @@ +@@ -150,6 +_,7 @@ private int bufferSize = 1536; private RenderSetup.OutlineProperty outlineProperty = RenderSetup.OutlineProperty.NONE; private final Map textures = new HashMap<>(); + private final Map texturesWithSamplers = new HashMap<>(); - RenderSetupBuilder(RenderPipeline p_453804_) { - this.pipeline = p_453804_; -@@ -164,6 +_,11 @@ + private RenderSetupBuilder(final RenderPipeline pipeline) { + this.pipeline = pipeline; +@@ -165,6 +_,11 @@ return this; } @@ -55,7 +55,7 @@ public RenderSetup.RenderSetupBuilder useLightmap() { this.useLightmap = true; return this; -@@ -221,7 +_,8 @@ +@@ -222,7 +_,8 @@ this.outlineProperty, this.affectsCrumbling, this.sortOnUpload, diff --git a/patches/minecraft/net/minecraft/client/renderer/rendertype/RenderTypes.java.patch b/patches/minecraft/net/minecraft/client/renderer/rendertype/RenderTypes.java.patch index d56743099a..6297ab501f 100644 --- a/patches/minecraft/net/minecraft/client/renderer/rendertype/RenderTypes.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/rendertype/RenderTypes.java.patch @@ -1,44 +1,44 @@ --- a/net/minecraft/client/renderer/rendertype/RenderTypes.java +++ b/net/minecraft/client/renderer/rendertype/RenderTypes.java -@@ -542,7 +_,7 @@ +@@ -574,7 +_,7 @@ } - public static RenderType text(Identifier p_456274_) { -- return TEXT.apply(p_456274_); -+ return net.minecraftforge.client.ForgeRenderTypes.getText(p_456274_); + public static RenderType text(final Identifier texture) { +- return TEXT.apply(texture); ++ return net.minecraftforge.client.ForgeRenderTypes.getText(texture); } public static RenderType textBackground() { -@@ -550,19 +_,19 @@ +@@ -582,19 +_,19 @@ } - public static RenderType textIntensity(Identifier p_460070_) { -- return TEXT_INTENSITY.apply(p_460070_); -+ return net.minecraftforge.client.ForgeRenderTypes.getTextIntensity(p_460070_); + public static RenderType textIntensity(final Identifier texture) { +- return TEXT_INTENSITY.apply(texture); ++ return net.minecraftforge.client.ForgeRenderTypes.getTextIntensity(texture); } - public static RenderType textPolygonOffset(Identifier p_450888_) { -- return TEXT_POLYGON_OFFSET.apply(p_450888_); -+ return net.minecraftforge.client.ForgeRenderTypes.getTextPolygonOffset(p_450888_); + public static RenderType textPolygonOffset(final Identifier texture) { +- return TEXT_POLYGON_OFFSET.apply(texture); ++ return net.minecraftforge.client.ForgeRenderTypes.getTextPolygonOffset(texture); } - public static RenderType textIntensityPolygonOffset(Identifier p_457059_) { -- return TEXT_INTENSITY_POLYGON_OFFSET.apply(p_457059_); -+ return net.minecraftforge.client.ForgeRenderTypes.getTextIntensityPolygonOffset(p_457059_); + public static RenderType textIntensityPolygonOffset(final Identifier texture) { +- return TEXT_INTENSITY_POLYGON_OFFSET.apply(texture); ++ return net.minecraftforge.client.ForgeRenderTypes.getTextIntensityPolygonOffset(texture); } - public static RenderType textSeeThrough(Identifier p_452096_) { -- return TEXT_SEE_THROUGH.apply(p_452096_); -+ return net.minecraftforge.client.ForgeRenderTypes.getTextSeeThrough(p_452096_); + public static RenderType textSeeThrough(final Identifier texture) { +- return TEXT_SEE_THROUGH.apply(texture); ++ return net.minecraftforge.client.ForgeRenderTypes.getTextSeeThrough(texture); } public static RenderType textBackgroundSeeThrough() { -@@ -570,7 +_,7 @@ +@@ -602,7 +_,7 @@ } - public static RenderType textIntensitySeeThrough(Identifier p_453978_) { -- return TEXT_INTENSITY_SEE_THROUGH.apply(p_453978_); -+ return net.minecraftforge.client.ForgeRenderTypes.getTextIntensitySeeThrough(p_453978_); + public static RenderType textIntensitySeeThrough(final Identifier texture) { +- return TEXT_INTENSITY_SEE_THROUGH.apply(texture); ++ return net.minecraftforge.client.ForgeRenderTypes.getTextIntensitySeeThrough(texture); } public static RenderType lightning() { diff --git a/patches/minecraft/net/minecraft/client/renderer/special/SpecialModelRenderers.java.patch b/patches/minecraft/net/minecraft/client/renderer/special/SpecialModelRenderers.java.patch deleted file mode 100644 index ff3ba08284..0000000000 --- a/patches/minecraft/net/minecraft/client/renderer/special/SpecialModelRenderers.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/minecraft/client/renderer/special/SpecialModelRenderers.java -+++ b/net/minecraft/client/renderer/special/SpecialModelRenderers.java -@@ -199,6 +_,8 @@ - map.put(Blocks.TRAPPED_CHEST, GIFT_CHEST); - } - -+ net.minecraftforge.client.event.ForgeEventFactoryClient.onCreateSpecialBlockRenderers(map); -+ - Builder> builder = ImmutableMap.builder(); - map.forEach((p_421033_, p_421034_) -> { - SpecialModelRenderer specialmodelrenderer = p_421034_.bake(p_431302_); diff --git a/patches/minecraft/net/minecraft/client/renderer/state/level/BlockBreakingRenderState.java.patch b/patches/minecraft/net/minecraft/client/renderer/state/level/BlockBreakingRenderState.java.patch new file mode 100644 index 0000000000..ad1b85d66f --- /dev/null +++ b/patches/minecraft/net/minecraft/client/renderer/state/level/BlockBreakingRenderState.java.patch @@ -0,0 +1,12 @@ +--- a/net/minecraft/client/renderer/state/level/BlockBreakingRenderState.java ++++ b/net/minecraft/client/renderer/state/level/BlockBreakingRenderState.java +@@ -6,5 +_,8 @@ + import net.minecraftforge.api.distmarker.OnlyIn; + + @OnlyIn(Dist.CLIENT) +-public record BlockBreakingRenderState(BlockPos blockPos, BlockState blockState, int progress) { ++public record BlockBreakingRenderState(BlockPos blockPos, BlockState blockState, int progress, net.minecraftforge.client.model.data.ModelData data) { ++ public BlockBreakingRenderState(BlockPos blockPos, BlockState blockState, int progress) { ++ this(blockPos, blockState, progress, net.minecraftforge.client.model.data.ModelData.EMPTY); ++ } + } diff --git a/patches/minecraft/net/minecraft/client/renderer/state/BlockOutlineRenderState.java.patch b/patches/minecraft/net/minecraft/client/renderer/state/level/BlockOutlineRenderState.java.patch similarity index 64% rename from patches/minecraft/net/minecraft/client/renderer/state/BlockOutlineRenderState.java.patch rename to patches/minecraft/net/minecraft/client/renderer/state/level/BlockOutlineRenderState.java.patch index f3a240d193..097e9e5c88 100644 --- a/patches/minecraft/net/minecraft/client/renderer/state/BlockOutlineRenderState.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/state/level/BlockOutlineRenderState.java.patch @@ -1,5 +1,5 @@ ---- a/net/minecraft/client/renderer/state/BlockOutlineRenderState.java -+++ b/net/minecraft/client/renderer/state/BlockOutlineRenderState.java +--- a/net/minecraft/client/renderer/state/level/BlockOutlineRenderState.java ++++ b/net/minecraft/client/renderer/state/level/BlockOutlineRenderState.java @@ -14,9 +_,14 @@ VoxelShape shape, @Nullable VoxelShape collisionShape, @@ -8,8 +8,8 @@ + @Nullable VoxelShape interactionShape, + net.minecraftforge.client.event.RenderHighlightEvent.@Nullable Callback customRenderer ) { - public BlockOutlineRenderState(BlockPos p_425529_, boolean p_426298_, boolean p_426881_, VoxelShape p_424013_) { - this(p_425529_, p_426298_, p_426881_, p_424013_, null, null, null); + public BlockOutlineRenderState(final BlockPos pos, final boolean isTranslucent, final boolean highContrast, final VoxelShape shape) { + this(pos, isTranslucent, highContrast, shape, null, null, null); + } + + public BlockOutlineRenderState(BlockPos pos, boolean isTranslucent, boolean highContrast, VoxelShape shape, @Nullable VoxelShape collisionShape, @Nullable VoxelShape occlusionShape, @Nullable VoxelShape interactionShape) { diff --git a/patches/minecraft/net/minecraft/client/renderer/texture/MipmapGenerator.java.patch b/patches/minecraft/net/minecraft/client/renderer/texture/MipmapGenerator.java.patch index 21aed2a1a7..3239ef2fb1 100644 --- a/patches/minecraft/net/minecraft/client/renderer/texture/MipmapGenerator.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/texture/MipmapGenerator.java.patch @@ -1,13 +1,13 @@ --- a/net/minecraft/client/renderer/texture/MipmapGenerator.java +++ b/net/minecraft/client/renderer/texture/MipmapGenerator.java -@@ -112,12 +_,16 @@ - float f = p_450366_ == MipmapStrategy.STRICT_CUTOUT ? 0.3F : 0.5F; - float f1 = flag ? alphaTestCoverage(p_251300_[0], f, 1.0F) : 0.0F; +@@ -122,12 +_,16 @@ + float f = mipmapStrategy == MipmapStrategy.STRICT_CUTOUT ? 0.3F : 0.5F; + float f1 = flag ? alphaTestCoverage(currentMips[0], f, 1.0F) : 0.0F; + int maxMipmapLevel = net.minecraftforge.client.ForgeHooksClient.getMaxMipmapLevel(anativeimage[0].getWidth(), anativeimage[0].getHeight()); - for (int i = 1; i <= p_252326_; i++) { - if (i < p_251300_.length) { - anativeimage[i] = p_251300_[i]; + for (int i = 1; i <= newMipLevel; i++) { + if (i < currentMips.length) { + anativeimage[i] = currentMips[i]; } else { NativeImage nativeimage = anativeimage[i - 1]; - NativeImage nativeimage1 = new NativeImage(nativeimage.getWidth() >> 1, nativeimage.getHeight() >> 1, false); @@ -18,7 +18,7 @@ int j = nativeimage1.getWidth(); int k = nativeimage1.getHeight(); -@@ -136,6 +_,7 @@ +@@ -146,6 +_,7 @@ nativeimage1.setPixel(l, i1, j2); } diff --git a/patches/minecraft/net/minecraft/client/renderer/texture/SpriteContents.java.patch b/patches/minecraft/net/minecraft/client/renderer/texture/SpriteContents.java.patch index b415440690..4d9df3b939 100644 --- a/patches/minecraft/net/minecraft/client/renderer/texture/SpriteContents.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/texture/SpriteContents.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/renderer/texture/SpriteContents.java +++ b/net/minecraft/client/renderer/texture/SpriteContents.java -@@ -168,6 +_,10 @@ +@@ -183,6 +_,14 @@ return this.name; } @@ -8,6 +8,10 @@ + return this.originalImage; + } + - public IntStream getUniqueFrames() { - return this.animatedTexture != null ? this.animatedTexture.getUniqueFrames() : IntStream.of(1); ++ public int getMipLevel() { ++ return this.byMipLevel.length - 1; ++ } ++ + public IntList getUniqueFrames() { + return this.animatedTexture != null ? this.animatedTexture.getUniqueFrames() : IntList.of(1); } diff --git a/patches/minecraft/net/minecraft/client/renderer/texture/SpriteLoader.java.patch b/patches/minecraft/net/minecraft/client/renderer/texture/SpriteLoader.java.patch index 76fbbceb4c..c8a1dd5a2a 100644 --- a/patches/minecraft/net/minecraft/client/renderer/texture/SpriteLoader.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/texture/SpriteLoader.java.patch @@ -4,36 +4,27 @@ int j1 = Math.min(j, k); int k1 = Mth.log2(j1); int l1; -- if (k1 < p_261919_) { -+ if (k1 < p_261919_ && net.minecraftforge.common.ForgeConfig.CLIENT.allowMipmapLowering()) { // Forge: Do not lower the mipmap level - LOGGER.warn("{}: dropping miplevel from {} to {}, because of minimum power of two: {}", this.location, p_261919_, k1, j1); +- if (k1 < maxMipmapLevels) { ++ if (k1 < maxMipmapLevels && net.minecraftforge.common.ForgeConfig.CLIENT.allowMipmapLowering()) { // Forge: Do not lower the mipmap level + LOGGER.warn("{}: dropping miplevel from {} to {}, because of minimum power of two: {}", this.location, maxMipmapLevels, k1, j1); l1 = k1; } else { -@@ -126,7 +_,8 @@ - public CompletableFuture loadAndStitch( - ResourceManager p_262108_, Identifier p_459205_, int p_262104_, Executor p_261687_, Set> p_430900_ +@@ -130,7 +_,8 @@ + final Executor taskExecutor, + final Set> additionalMetadata ) { -- SpriteResourceLoader spriteresourceloader = SpriteResourceLoader.create(p_430900_); -+ var sections = net.minecraftforge.client.ForgeHooksClient.getAtlastMetadataSections(p_459205_, p_430900_); +- SpriteResourceLoader spriteresourceloader = SpriteResourceLoader.create(additionalMetadata); ++ var sections = net.minecraftforge.client.ForgeHooksClient.getAtlastMetadataSections(atlasInfoLocation, additionalMetadata); + SpriteResourceLoader spriteresourceloader = SpriteResourceLoader.create(sections); - return CompletableFuture.>supplyAsync(() -> SpriteSourceList.load(p_262108_, p_459205_).list(p_262108_), p_261687_) - .thenCompose(p_296297_ -> runSpriteSuppliers(spriteresourceloader, (List)p_296297_, p_261687_)) - .thenApply(p_261393_ -> this.stitch((List)p_261393_, p_262104_, p_261687_)); -@@ -135,9 +_,14 @@ - private Map getStitchedSprites(Stitcher p_276117_, int p_276111_, int p_276112_) { + return CompletableFuture.>supplyAsync(() -> SpriteSourceList.load(manager, atlasInfoLocation).list(manager), taskExecutor) + .thenCompose(sprites -> runSpriteSuppliers(spriteresourceloader, (List)sprites, taskExecutor)) + .thenApply(resources -> this.stitch((List)resources, maxMipmapLevels, taskExecutor)); +@@ -139,7 +_,7 @@ + private Map getStitchedSprites(final Stitcher stitcher, final int atlasWidth, final int atlasHeight) { Map map = new HashMap<>(); - p_276117_.gatherSprites( -- (p_448383_, p_448384_, p_448385_, p_448386_) -> map.put( -- p_448383_.name(), new TextureAtlasSprite(this.location, p_448383_, p_276111_, p_276112_, p_448384_, p_448385_, p_448386_) -- ) -+ (p_448383_, p_448384_, p_448385_, p_448386_) -> { -+ TextureAtlasSprite sprite = net.minecraftforge.client.ForgeHooksClient.loadTextureAtlasSprite(this.location, p_448383_, p_276111_, p_276112_, p_448384_, p_448385_, p_448386_, p_448383_.byMipLevel.length - 1); -+ if (sprite != null) { -+ map.put(p_448383_.name(), sprite); -+ return; -+ } -+ map.put(p_448383_.name(), new TextureAtlasSprite(this.location, p_448383_, p_276111_, p_276112_, p_448384_, p_448385_, p_448386_)); -+ } + stitcher.gatherSprites( +- (contents, x, y, padding) -> map.put(contents.name(), new TextureAtlasSprite(this.location, contents, atlasWidth, atlasHeight, x, y, padding)) ++ (contents, x, y, padding) -> map.put(contents.name(), net.minecraftforge.client.ForgeHooksClient.loadTextureAtlasSprite(this.location, contents, atlasWidth, atlasHeight, x, y, padding)) ); return map; } diff --git a/patches/minecraft/net/minecraft/client/renderer/texture/Stitcher.java.patch b/patches/minecraft/net/minecraft/client/renderer/texture/Stitcher.java.patch index 1187eac0bd..bd353204e2 100644 --- a/patches/minecraft/net/minecraft/client/renderer/texture/Stitcher.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/texture/Stitcher.java.patch @@ -5,9 +5,9 @@ @OnlyIn(Dist.CLIENT) public class Stitcher { + private static final org.slf4j.Logger LOGGER = com.mojang.logging.LogUtils.getLogger(); - private static final Comparator> HOLDER_COMPARATOR = Comparator., Integer>comparing(p_118201_ -> -p_118201_.height) - .thenComparing(p_118199_ -> -p_118199_.width) - .thenComparing(p_448389_ -> p_448389_.entry.name()); + private static final Comparator> HOLDER_COMPARATOR = Comparator., Integer>comparing(h -> -h.height) + .thenComparing(h -> -h.width) + .thenComparing(h -> h.entry.name()); @@ -54,6 +_,14 @@ for (Stitcher.Holder holder : list) { @@ -20,7 +20,7 @@ + list.forEach(h -> sb.append("\t").append(h).append("\n")); + LOGGER.info(sb.toString()); + } - throw new StitcherException(holder.entry, list.stream().map(p_247946_ -> p_247946_.entry).collect(ImmutableList.toImmutableList())); + throw new StitcherException(holder.entry, list.stream().map(h -> h.entry).collect(ImmutableList.toImmutableList())); } } @@ -93,7 +_,7 @@ diff --git a/patches/minecraft/net/minecraft/client/renderer/texture/TextureAtlasSprite.java.patch b/patches/minecraft/net/minecraft/client/renderer/texture/TextureAtlasSprite.java.patch index 14ee31eb43..1d4983188c 100644 --- a/patches/minecraft/net/minecraft/client/renderer/texture/TextureAtlasSprite.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/texture/TextureAtlasSprite.java.patch @@ -1,16 +1,26 @@ --- a/net/minecraft/client/renderer/texture/TextureAtlasSprite.java +++ b/net/minecraft/client/renderer/texture/TextureAtlasSprite.java -@@ -129,4 +_,13 @@ +@@ -26,7 +_,7 @@ + private final float v1; + private final int padding; + +- protected TextureAtlasSprite( ++ public TextureAtlasSprite( + final Identifier atlasLocation, final SpriteContents contents, final int atlasWidth, final int atlasHeight, final int x, final int y, final int padding + ) { + this.atlasLocation = atlasLocation; +@@ -127,5 +_,14 @@ + @Override public void close() { this.contents.close(); - } ++ } + + public int getPixelRGBA(int frameIndex, int x, int y) { + if (this.contents.animatedTexture != null) { -+ x += this.contents.animatedTexture.getFrameX(frameIndex) * this.contents.width; -+ y += this.contents.animatedTexture.getFrameY(frameIndex) * this.contents.height; ++ x += this.contents.animatedTexture.getFrameX(frameIndex) * this.contents.width(); ++ y += this.contents.animatedTexture.getFrameY(frameIndex) * this.contents.height(); + } + + return this.contents.getOriginalImage().getPixel(x, y); -+ } + } } diff --git a/patches/minecraft/net/minecraft/client/renderer/texture/atlas/SpriteResourceLoader.java.patch b/patches/minecraft/net/minecraft/client/renderer/texture/atlas/SpriteResourceLoader.java.patch index 4d4defe5dc..dec5805bd8 100644 --- a/patches/minecraft/net/minecraft/client/renderer/texture/atlas/SpriteResourceLoader.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/texture/atlas/SpriteResourceLoader.java.patch @@ -4,9 +4,9 @@ framesize = new FrameSize(nativeimage.getWidth(), nativeimage.getHeight()); } -+ SpriteContents contents = net.minecraftforge.client.ForgeHooksClient.loadSpriteContents(p_448404_, p_448405_, framesize, nativeimage, list); ++ SpriteContents contents = net.minecraftforge.client.ForgeHooksClient.loadSpriteContents(spriteLocation, resource, framesize, nativeimage, list); + if (contents != null) return contents; + - return new SpriteContents(p_448404_, framesize, nativeimage, optional, list, optional1); + return new SpriteContents(spriteLocation, framesize, nativeimage, optional, list, optional1); }; } diff --git a/patches/minecraft/net/minecraft/client/resources/language/ClientLanguage.java.patch b/patches/minecraft/net/minecraft/client/resources/language/ClientLanguage.java.patch index ffc20a35c0..276fcda0e3 100644 --- a/patches/minecraft/net/minecraft/client/resources/language/ClientLanguage.java.patch +++ b/patches/minecraft/net/minecraft/client/resources/language/ClientLanguage.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/client/resources/language/ClientLanguage.java +++ b/net/minecraft/client/resources/language/ClientLanguage.java @@ -78,4 +_,9 @@ - public FormattedCharSequence getVisualOrder(FormattedText p_118925_) { - return FormattedBidiReorder.reorder(p_118925_, this.defaultRightToLeft); + public FormattedCharSequence getVisualOrder(final FormattedText logicalOrderText) { + return FormattedBidiReorder.reorder(logicalOrderText, this.defaultRightToLeft); } + + @Override diff --git a/patches/minecraft/net/minecraft/client/resources/language/I18n.java.patch b/patches/minecraft/net/minecraft/client/resources/language/I18n.java.patch index dfddf474e1..1bf7bb8c3e 100644 --- a/patches/minecraft/net/minecraft/client/resources/language/I18n.java.patch +++ b/patches/minecraft/net/minecraft/client/resources/language/I18n.java.patch @@ -2,9 +2,9 @@ +++ b/net/minecraft/client/resources/language/I18n.java @@ -15,6 +_,7 @@ - static void setLanguage(Language p_118942_) { - language = p_118942_; -+ net.minecraftforge.common.ForgeI18n.loadLanguageData(p_118942_.getLanguageData()); + static void setLanguage(final Language locale) { + language = locale; ++ net.minecraftforge.common.ForgeI18n.loadLanguageData(locale.getLanguageData()); } - public static String get(String p_118939_, Object... p_118940_) { + public static String get(final String id, final Object... args) { diff --git a/patches/minecraft/net/minecraft/client/resources/language/LanguageManager.java.patch b/patches/minecraft/net/minecraft/client/resources/language/LanguageManager.java.patch index a9534fcf06..e951131a98 100644 --- a/patches/minecraft/net/minecraft/client/resources/language/LanguageManager.java.patch +++ b/patches/minecraft/net/minecraft/client/resources/language/LanguageManager.java.patch @@ -1,24 +1,24 @@ --- a/net/minecraft/client/resources/language/LanguageManager.java +++ b/net/minecraft/client/resources/language/LanguageManager.java -@@ -30,8 +_,8 @@ +@@ -29,8 +_,8 @@ private final Consumer reloadCallback; - public LanguageManager(String p_118971_, Consumer p_342376_) { -- this.currentCode = p_118971_; - this.reloadCallback = p_342376_; -+ setSelected(p_118971_); + public LanguageManager(final String languageCode, final Consumer reloadCallback) { +- this.currentCode = languageCode; + this.reloadCallback = reloadCallback; ++ setSelected(languageCode); } - private static Map extractLanguages(Stream p_118982_) { -@@ -69,8 +_,12 @@ + private static Map extractLanguages(final Stream resourcePacks) { +@@ -68,8 +_,12 @@ this.reloadCallback.accept(clientlanguage); } + private java.util.Locale javaLocale; // Forge: add locale information for modders + public java.util.Locale getJavaLocale() { return javaLocale; } - public void setSelected(String p_265224_) { - this.currentCode = p_265224_; -+ final String[] langSplit = p_265224_.split("_", 2); + public void setSelected(final String code) { + this.currentCode = code; ++ final String[] langSplit = code.split("_", 2); + this.javaLocale = langSplit.length == 1 ? java.util.Locale.of(langSplit[0]) : java.util.Locale.of(langSplit[0], langSplit[1]); } diff --git a/patches/minecraft/net/minecraft/client/resources/model/ModelBaker.java.patch b/patches/minecraft/net/minecraft/client/resources/model/ModelBaker.java.patch index e1a3b306fe..30c13e90c9 100644 --- a/patches/minecraft/net/minecraft/client/resources/model/ModelBaker.java.patch +++ b/patches/minecraft/net/minecraft/client/resources/model/ModelBaker.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/client/resources/model/ModelBaker.java +++ b/net/minecraft/client/resources/model/ModelBaker.java -@@ -33,4 +_,16 @@ +@@ -32,4 +_,16 @@ public interface SharedOperationKey { - T compute(ModelBaker p_393089_); + T compute(ModelBaker modelBakery); } + + /** Forge: Return the render type to use when baking this model, its a dirty hack to pass down this value to parents */ diff --git a/patches/minecraft/net/minecraft/client/resources/model/ModelDiscovery.java.patch b/patches/minecraft/net/minecraft/client/resources/model/ModelDiscovery.java.patch index 0a8a34b375..371b6f96db 100644 --- a/patches/minecraft/net/minecraft/client/resources/model/ModelDiscovery.java.patch +++ b/patches/minecraft/net/minecraft/client/resources/model/ModelDiscovery.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/resources/model/ModelDiscovery.java +++ b/net/minecraft/client/resources/model/ModelDiscovery.java -@@ -172,6 +_,14 @@ +@@ -177,6 +_,14 @@ return this.parent; } @@ -15,21 +15,20 @@ @Override public String debugName() { return this.id.toString(); -@@ -224,7 +_,7 @@ - - private QuadCollection bakeDefaultState(TextureSlots p_392267_, ModelBaker p_393576_, ModelState p_391972_) { +@@ -233,14 +_,14 @@ QuadCollection quadcollection = this.getSlot(KEY_DEFAULT_GEOMETRY); -- return quadcollection != null ? quadcollection : this.updateSlot(KEY_DEFAULT_GEOMETRY, this.getTopGeometry().bake(p_392267_, p_393576_, p_391972_, this)); -+ return quadcollection != null ? quadcollection : this.updateSlot(KEY_DEFAULT_GEOMETRY, this.getTopGeometry().bake(p_392267_, p_393576_, p_391972_, this, getContext())); + return quadcollection != null + ? quadcollection +- : this.updateSlot(KEY_DEFAULT_GEOMETRY, this.getTopGeometry().bake(textureSlots, baker, state, this)); ++ : this.updateSlot(KEY_DEFAULT_GEOMETRY, this.getTopGeometry().bake(textureSlots, baker, state, this, getContext())); } @Override -@@ -233,7 +_,7 @@ - ? this.bakeDefaultState(p_396404_, p_391625_, p_396681_) - : this.modelBakeCache.computeIfAbsent(p_396681_, p_394933_ -> { - UnbakedGeometry unbakedgeometry = this.getTopGeometry(); -- return unbakedgeometry.bake(p_396404_, p_391625_, p_394933_, this); -+ return unbakedgeometry.bake(p_396404_, p_391625_, p_394933_, this, getContext()); - }); + public QuadCollection bakeTopGeometry(final TextureSlots textureSlots, final ModelBaker baker, final ModelState state) { + return state == BlockModelRotation.IDENTITY ? this.bakeDefaultState(textureSlots, baker, state) : this.modelBakeCache.computeIfAbsent(state, s -> { + UnbakedGeometry unbakedgeometry = this.getTopGeometry(); +- return unbakedgeometry.bake(textureSlots, baker, s, this); ++ return unbakedgeometry.bake(textureSlots, baker, s, this, getContext()); + }); } } diff --git a/patches/minecraft/net/minecraft/client/resources/model/ModelManager.java.patch b/patches/minecraft/net/minecraft/client/resources/model/ModelManager.java.patch index ec3b515c80..94851681bf 100644 --- a/patches/minecraft/net/minecraft/client/resources/model/ModelManager.java.patch +++ b/patches/minecraft/net/minecraft/client/resources/model/ModelManager.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/resources/model/ModelManager.java +++ b/net/minecraft/client/resources/model/ModelManager.java -@@ -58,6 +_,7 @@ +@@ -68,6 +_,7 @@ private static final Logger LOGGER = LogUtils.getLogger(); private static final FileToIdConverter MODEL_LISTER = FileToIdConverter.json("models"); private Map bakedItemStackModels = Map.of(); @@ -8,83 +8,81 @@ private Map itemProperties = Map.of(); private final AtlasManager atlasManager; private final PlayerSkinRenderCache playerSkinRenderCache; -@@ -67,6 +_,7 @@ - private SpecialBlockModelRenderer specialBlockModelRenderer = SpecialBlockModelRenderer.EMPTY; - private ModelBakery.MissingModels missingModels; +@@ -78,6 +_,7 @@ + private @Nullable BlockModelSet blockModelSet; + private @Nullable FluidStateModelSet fluidStateModelSet; private Object2IntMap modelGroups = Object2IntMaps.emptyMap(); + private ModelBakery modelBakery; - public ModelManager(BlockColors p_119407_, AtlasManager p_423190_, PlayerSkinRenderCache p_429874_) { - this.blockColors = p_119407_; -@@ -83,6 +_,10 @@ - return this.bakedItemStackModels.getOrDefault(p_450917_, this.missingModels.item()); + public ModelManager(final BlockColors blockColors, final AtlasManager atlasManager, final PlayerSkinRenderCache playerSkinRenderCache) { + this.blockColors = blockColors; +@@ -89,6 +_,18 @@ + return this.bakedItemStackModels.getOrDefault(id, this.missingModels.item()); } + public Map getItemModels() { + return this.bakedItemStackModelsView; + } + - public ClientItem.Properties getItemProperties(Identifier p_453916_) { - return this.itemProperties.getOrDefault(p_453916_, ClientItem.Properties.DEFAULT); ++ public ItemModel getMissingModel() { ++ return this.missingModels.item(); ++ } ++ ++ public ModelBakery getModelBakery() { ++ return com.google.common.base.Preconditions.checkNotNull(modelBakery, "Attempted to query model bakery before it has been initialized."); ++ } ++ + public ClientItem.Properties getItemProperties(final Identifier id) { + return this.itemProperties.getOrDefault(id, ClientItem.Properties.DEFAULT); } -@@ -95,6 +_,7 @@ - public final CompletableFuture reload( - PreparableReloadListener.SharedState p_427489_, Executor p_250550_, PreparableReloadListener.PreparationBarrier p_249079_, Executor p_249221_ +@@ -112,6 +_,7 @@ + final PreparableReloadListener.PreparationBarrier preparationBarrier, + final Executor reloadExecutor ) { + net.minecraftforge.client.model.geometry.GeometryLoaderManager.init(); - ResourceManager resourcemanager = p_427489_.resourceManager(); - CompletableFuture completablefuture = CompletableFuture.supplyAsync(EntityModelSet::vanilla, p_250550_); - CompletableFuture completablefuture1 = completablefuture.thenApplyAsync( -@@ -255,6 +_,7 @@ - }, p_394729_) - .thenApply( - p_421082_ -> { -+ net.minecraftforge.client.ForgeHooksClient.onModifyBakingResult(p_248945_, p_421082_); - multimap.asMap() - .forEach( - (p_376688_, p_252017_) -> LOGGER.warn( -@@ -275,7 +_,7 @@ - ) - ); - Map map = createBlockStateToModelDispatch(p_421082_.blockStateModels(), p_421082_.missingModels().block()); -- return new ModelManager.ReloadState(p_421082_, p_361513_, map, p_378097_, p_377275_); -+ return new ModelManager.ReloadState(p_421082_, p_361513_, map, p_378097_, p_377275_, p_248945_); - } - ); + ResourceManager resourcemanager = currentReload.resourceManager(); + CompletableFuture completablefuture = CompletableFuture.supplyAsync(EntityModelSet::vanilla, taskExecutor); + CompletableFuture> completablefuture1 = loadBlockModels(resourcemanager, taskExecutor); +@@ -275,6 +_,8 @@ + completablefuture1, + (bakingResult, bakedModels) -> { + Map map = FluidStateModelSet.bake(materialbaker); ++ map = net.minecraftforge.client.ForgeHooksClient.onFluidModelBake(bakery, materialbaker, map); ++ net.minecraftforge.client.ForgeHooksClient.onModifyBakingResult(bakery, bakingResult); + multimap.asMap() + .forEach( + (location, sprites) -> LOGGER.warn( +@@ -292,7 +_,7 @@ + ) + ); + Map map1 = createBlockStateToModelDispatch(bakingResult.blockStateModels(), bakingResult.missingModels().block()); +- return new ModelManager.ReloadState(bakingResult, modelGroups, map1, (Map)bakedModels, map, entityModelSet); ++ return new ModelManager.ReloadState(bakingResult, modelGroups, map1, (Map)bakedModels, map, entityModelSet, bakery); + } + ); } -@@ -310,10 +_,15 @@ +@@ -329,10 +_,15 @@ - private void apply(ModelManager.ReloadState p_248996_) { - ModelBakery.BakingResult modelbakery$bakingresult = p_248996_.bakedModels; + private void apply(final ModelManager.ReloadState preparations) { + ModelBakery.BakingResult modelbakery$bakingresult = preparations.bakedModels; + // TODO [BlockState Models] fix + //this.bakedBlockStateModelsView = java.util.Collections.unmodifiableMap(this.bakedBlockStateModels); this.bakedItemStackModels = modelbakery$bakingresult.itemStackModels(); + this.bakedItemStackModelsView = java.util.Collections.unmodifiableMap(this.bakedItemStackModels); this.itemProperties = modelbakery$bakingresult.itemProperties(); - this.modelGroups = p_248996_.modelGroups; + this.modelGroups = preparations.modelGroups; this.missingModels = modelbakery$bakingresult.missingModels(); -+ this.modelBakery = p_248996_.modelBakery(); ++ this.modelBakery = preparations.modelBakery(); + net.minecraftforge.client.ForgeHooksClient.onModelBake(this, this.modelBakery); - this.blockModelShaper.replaceCache(p_248996_.modelCache); - this.specialBlockModelRenderer = p_248996_.specialBlockModelRenderer; - this.entityModelSet = p_248996_.entityModelSet; -@@ -337,6 +_,10 @@ - } - } - -+ public ModelBakery getModelBakery() { -+ return com.google.common.base.Preconditions.checkNotNull(modelBakery, "Attempted to query model bakery before it has been initialized."); -+ } -+ - public SpecialBlockModelRenderer specialBlockModelRenderer() { - return this.specialBlockModelRenderer; - } -@@ -351,7 +_,8 @@ - Object2IntMap modelGroups, - Map modelCache, - EntityModelSet entityModelSet, -- SpecialBlockModelRenderer specialBlockModelRenderer -+ SpecialBlockModelRenderer specialBlockModelRenderer, + this.blockStateModelSet = new BlockStateModelSet(preparations.blockStateModels, this.missingModels.block()); + this.blockModelSet = new BlockModelSet(this.blockStateModelSet, preparations.blockModels, this.blockColors); + this.fluidStateModelSet = new FluidStateModelSet(preparations.fluidModels, this.missingModels.fluid()); +@@ -368,7 +_,8 @@ + Map blockStateModels, + Map blockModels, + Map fluidModels, +- EntityModelSet entityModelSet ++ EntityModelSet entityModelSet, + ModelBakery modelBakery ) { } diff --git a/patches/minecraft/net/minecraft/client/resources/model/ResolvedModel.java.patch b/patches/minecraft/net/minecraft/client/resources/model/ResolvedModel.java.patch index f9d51028d3..8a69840bf3 100644 --- a/patches/minecraft/net/minecraft/client/resources/model/ResolvedModel.java.patch +++ b/patches/minecraft/net/minecraft/client/resources/model/ResolvedModel.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/client/resources/model/ResolvedModel.java +++ b/net/minecraft/client/resources/model/ResolvedModel.java -@@ -85,7 +_,7 @@ +@@ -88,7 +_,7 @@ } - default QuadCollection bakeTopGeometry(TextureSlots p_396041_, ModelBaker p_395367_, ModelState p_396505_) { -- return this.getTopGeometry().bake(p_396041_, p_395367_, p_396505_, this); -+ return this.getTopGeometry().bake(p_396041_, p_395367_, p_396505_, this, getContext()); + default QuadCollection bakeTopGeometry(final TextureSlots textureSlots, final ModelBaker baker, final ModelState state) { +- return this.getTopGeometry().bake(textureSlots, baker, state, this); ++ return this.getTopGeometry().bake(textureSlots, baker, state, this, getContext()); } - static TextureAtlasSprite resolveParticleSprite(TextureSlots p_391346_, ModelBaker p_396500_, ModelDebugName p_393309_) { -@@ -129,5 +_,9 @@ + static Material.Baked resolveParticleMaterial(final TextureSlots textureSlots, final ModelBaker baker, final ModelDebugName resolvedModel) { +@@ -132,5 +_,9 @@ default ItemTransforms getTopTransforms() { return findTopTransforms(this); diff --git a/patches/minecraft/net/minecraft/client/resources/model/UnbakedGeometry.java.patch b/patches/minecraft/net/minecraft/client/resources/model/UnbakedGeometry.java.patch deleted file mode 100644 index cff29db2b4..0000000000 --- a/patches/minecraft/net/minecraft/client/resources/model/UnbakedGeometry.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/minecraft/client/resources/model/UnbakedGeometry.java -+++ b/net/minecraft/client/resources/model/UnbakedGeometry.java -@@ -10,4 +_,8 @@ - UnbakedGeometry EMPTY = (p_396370_, p_395488_, p_393569_, p_397842_) -> QuadCollection.EMPTY; - - QuadCollection bake(TextureSlots p_391189_, ModelBaker p_391275_, ModelState p_397070_, ModelDebugName p_391995_); -+ -+ default QuadCollection bake(TextureSlots slots, ModelBaker baker, ModelState state, ModelDebugName name, net.minecraftforge.client.model.geometry.IGeometryBakingContext context) { -+ return bake(slots, baker, state, name); -+ } - } diff --git a/patches/minecraft/net/minecraft/client/resources/model/UnbakedModel.java.patch b/patches/minecraft/net/minecraft/client/resources/model/UnbakedModel.java.patch index afc2503b40..05db33110e 100644 --- a/patches/minecraft/net/minecraft/client/resources/model/UnbakedModel.java.patch +++ b/patches/minecraft/net/minecraft/client/resources/model/UnbakedModel.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/resources/model/UnbakedModel.java +++ b/net/minecraft/client/resources/model/UnbakedModel.java -@@ -59,5 +_,9 @@ +@@ -60,5 +_,9 @@ public boolean lightLikeBlock() { return this == SIDE; } diff --git a/patches/minecraft/net/minecraft/client/resources/model/WeightedVariants.java.patch b/patches/minecraft/net/minecraft/client/resources/model/WeightedVariants.java.patch deleted file mode 100644 index 3c20275ef8..0000000000 --- a/patches/minecraft/net/minecraft/client/resources/model/WeightedVariants.java.patch +++ /dev/null @@ -1,42 +0,0 @@ ---- a/net/minecraft/client/resources/model/WeightedVariants.java -+++ b/net/minecraft/client/resources/model/WeightedVariants.java -@@ -13,12 +_,13 @@ - @OnlyIn(Dist.CLIENT) - public class WeightedVariants implements BlockStateModel { - private final WeightedList list; -+ private final BlockStateModel firstModel; - private final TextureAtlasSprite particleIcon; - - public WeightedVariants(WeightedList p_394939_) { - this.list = p_394939_; -- BlockStateModel blockstatemodel = p_394939_.unwrap().getFirst().value(); -- this.particleIcon = blockstatemodel.particleIcon(); -+ this.firstModel = p_394939_.unwrap().getFirst().value(); -+ this.particleIcon = firstModel.particleIcon(); - } - - @Override -@@ -27,8 +_,23 @@ - } - - @Override -+ public TextureAtlasSprite particleIcon(net.minecraftforge.client.model.data.ModelData data) { -+ return this.firstModel.particleIcon(data); -+ } -+ -+ @Override - public void collectParts(RandomSource p_397916_, List p_394308_) { - this.list.getRandomOrThrow(p_397916_).collectParts(p_397916_, p_394308_); -+ } -+ -+ @Override -+ public void collectParts(RandomSource random, List dest, net.minecraftforge.client.model.data.ModelData data, net.minecraft.client.renderer.chunk.ChunkSectionLayer renderType) { -+ this.list.getRandomOrThrow(random).collectParts(random, dest, data, renderType); -+ } -+ -+ @Override -+ public java.util.Collection getRenderTypes(net.minecraft.world.level.block.state.BlockState state, RandomSource random, net.minecraftforge.client.model.data.ModelData data) { -+ return this.list.getRandomOrThrow(random).getRenderTypes(state, random, data); - } - - @OnlyIn(Dist.CLIENT) diff --git a/patches/minecraft/net/minecraft/client/resources/model/cuboid/CuboidFace.java.patch b/patches/minecraft/net/minecraft/client/resources/model/cuboid/CuboidFace.java.patch new file mode 100644 index 0000000000..509bff2402 --- /dev/null +++ b/patches/minecraft/net/minecraft/client/resources/model/cuboid/CuboidFace.java.patch @@ -0,0 +1,31 @@ +--- a/net/minecraft/client/resources/model/cuboid/CuboidFace.java ++++ b/net/minecraft/client/resources/model/cuboid/CuboidFace.java +@@ -15,9 +_,18 @@ + import org.jspecify.annotations.Nullable; + + @OnlyIn(Dist.CLIENT) +-public record CuboidFace(@Nullable Direction cullForDirection, int tintIndex, String texture, CuboidFace.@Nullable UVs uvs, Quadrant rotation) { ++public record CuboidFace(@Nullable Direction cullForDirection, int tintIndex, String texture, CuboidFace.@Nullable UVs uvs, Quadrant rotation, net.minecraftforge.client.model.@Nullable ForgeFaceData data) { + public static final int NO_TINT = -1; + ++ public CuboidFace(@Nullable Direction cullForDirection, int tintIndex, String texture, CuboidFace.@Nullable UVs uvs, Quadrant rotation) { ++ this(cullForDirection, tintIndex, texture, uvs, rotation, null); ++ } ++ ++ @Override ++ public net.minecraftforge.client.model.ForgeFaceData data() { ++ return this.data == null ? net.minecraftforge.client.model.ForgeFaceData.DEFAULT : this.data; ++ } ++ + public static float getU(final CuboidFace.UVs uvs, final Quadrant rotation, final int vertex) { + return uvs.getVertexU(rotation.rotateVertexIndex(vertex)) / 16.0F; + } +@@ -38,7 +_,7 @@ + String s = getTexture(jsonobject); + CuboidFace.UVs cuboidface$uvs = getUVs(jsonobject); + Quadrant quadrant = getRotation(jsonobject); +- return new CuboidFace(direction, i, s, cuboidface$uvs, quadrant); ++ return new CuboidFace(direction, i, s, cuboidface$uvs, quadrant, net.minecraftforge.client.model.ForgeFaceData.read(jsonobject.get("forge_data"), null)); + } + + private static int getTintIndex(final JsonObject object) { diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/BlockModel.java.patch b/patches/minecraft/net/minecraft/client/resources/model/cuboid/CuboidModel.java.patch similarity index 57% rename from patches/minecraft/net/minecraft/client/renderer/block/model/BlockModel.java.patch rename to patches/minecraft/net/minecraft/client/resources/model/cuboid/CuboidModel.java.patch index 3f11530b5a..9f52c81911 100644 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/BlockModel.java.patch +++ b/patches/minecraft/net/minecraft/client/resources/model/cuboid/CuboidModel.java.patch @@ -1,6 +1,6 @@ ---- a/net/minecraft/client/renderer/block/model/BlockModel.java -+++ b/net/minecraft/client/renderer/block/model/BlockModel.java -@@ -27,8 +_,20 @@ +--- a/net/minecraft/client/resources/model/cuboid/CuboidModel.java ++++ b/net/minecraft/client/resources/model/cuboid/CuboidModel.java +@@ -28,8 +_,20 @@ @Nullable Boolean ambientOcclusion, @Nullable ItemTransforms transforms, TextureSlots.Data textureSlots, @@ -8,7 +8,7 @@ + @Nullable Identifier parent, + net.minecraftforge.client.model.@Nullable ForgeBlockModelData forgeData ) implements UnbakedModel { -+ public BlockModel( ++ public CuboidModel( + @Nullable UnbakedGeometry geometry, + UnbakedModel.@Nullable GuiLight guiLight, + @Nullable Boolean ambientOcclusion, @@ -21,25 +21,25 @@ + @VisibleForTesting static final Gson GSON = new GsonBuilder() - .registerTypeAdapter(BlockModel.class, new BlockModel.Deserializer()) -@@ -91,8 +_,9 @@ + .registerTypeAdapter(CuboidModel.class, new CuboidModel.Deserializer()) +@@ -62,8 +_,9 @@ unbakedmodel$guilight = UnbakedModel.GuiLight.getByName(GsonHelper.getAsString(jsonobject, "gui_light")); } -+ var forgeData = net.minecraftforge.client.ForgeHooksClient.deserializeBlockModel(jsonobject, p_111500_); ++ var forgeData = net.minecraftforge.client.ForgeHooksClient.deserializeBlockModel(jsonobject, context); Identifier identifier = s.isEmpty() ? null : Identifier.parse(s); -- return new BlockModel(unbakedgeometry, unbakedmodel$guilight, obool, itemtransforms, textureslots$data, identifier); -+ return new BlockModel(unbakedgeometry, unbakedmodel$guilight, obool, itemtransforms, textureslots$data, identifier, forgeData); +- return new CuboidModel(unbakedgeometry, unbakedmodel$guilight, obool, itemtransforms, textureslots$data, identifier); ++ return new CuboidModel(unbakedgeometry, unbakedmodel$guilight, obool, itemtransforms, textureslots$data, identifier, forgeData); } - private TextureSlots.Data getTextureMap(JsonObject p_111510_) { -@@ -113,6 +_,9 @@ + private TextureSlots.Data getTextureMap(final JsonObject object) { +@@ -84,6 +_,9 @@ } - protected @Nullable UnbakedGeometry getElements(JsonDeserializationContext p_111507_, JsonObject p_111508_) { -+ var geo = net.minecraftforge.client.ForgeHooksClient.deserializeBlockModelGeometry(p_111508_, p_111507_); + protected @Nullable UnbakedGeometry getElements(final JsonDeserializationContext context, final JsonObject object) { ++ var geo = net.minecraftforge.client.ForgeHooksClient.deserializeBlockModelGeometry(object, context); + if (geo != null) + return geo; - if (!p_111508_.has("elements")) { + if (!object.has("elements")) { return null; } else { diff --git a/patches/minecraft/net/minecraft/client/resources/model/cuboid/ItemModelGenerator.java.patch b/patches/minecraft/net/minecraft/client/resources/model/cuboid/ItemModelGenerator.java.patch new file mode 100644 index 0000000000..f9d2f52a10 --- /dev/null +++ b/patches/minecraft/net/minecraft/client/resources/model/cuboid/ItemModelGenerator.java.patch @@ -0,0 +1,50 @@ +--- a/net/minecraft/client/resources/model/cuboid/ItemModelGenerator.java ++++ b/net/minecraft/client/resources/model/cuboid/ItemModelGenerator.java +@@ -52,8 +_,10 @@ + QuadCollection quadcollection = null; + QuadCollection.Builder quadcollection$builder = null; + +- for (int i = 0; i < LAYERS.size(); i++) { +- String s = LAYERS.get(i); ++ // Forge: Allow for more layers ++ int i = 0; ++ while (true) { ++ String s = String.format(java.util.Locale.ROOT, "layer%d", i++); + Material material = textureSlots.getMaterial(s); + if (material == null) { + break; +@@ -83,6 +_,12 @@ + public static void bakeExtrudedSprite( + final QuadCollection.Builder builder, final ModelBaker.Interner interner, final ModelState modelState, final BakedQuad.MaterialInfo materialInfo + ) { ++ bakeExtrudedSprite(builder, interner, modelState, materialInfo, materialInfo); ++ } ++ ++ public static void bakeExtrudedSprite( ++ final QuadCollection.Builder builder, final ModelBaker.Interner interner, final ModelState modelState, final BakedQuad.MaterialInfo materialInfo, final BakedQuad.MaterialInfo template ++ ) { + Vector3f vector3f = new Vector3f(0.0F, 0.0F, 7.5F); + Vector3f vector3f1 = new Vector3f(16.0F, 16.0F, 8.5F); + builder.addUnculledFace( +@@ -91,13 +_,19 @@ + builder.addUnculledFace( + FaceBakery.bakeQuad(interner, vector3f, vector3f1, NORTH_FACE_UVS, Quadrant.R0, materialInfo, Direction.NORTH, modelState, null) + ); +- bakeSideFaces(builder, interner, modelState, materialInfo); ++ bakeSideFaces(builder, interner, modelState, materialInfo, template); + } + + public static void bakeSideFaces( + final QuadCollection.Builder builder, final ModelBaker.Interner interner, final ModelState modelState, final BakedQuad.MaterialInfo materialInfo + ) { +- SpriteContents spritecontents = materialInfo.sprite().contents(); ++ bakeSideFaces(builder, interner, modelState, materialInfo, materialInfo); ++ } ++ ++ public static void bakeSideFaces( ++ final QuadCollection.Builder builder, final ModelBaker.Interner interner, final ModelState modelState, final BakedQuad.MaterialInfo materialInfo, final BakedQuad.MaterialInfo template ++ ) { ++ SpriteContents spritecontents = template.sprite().contents(); + float f = 16.0F / spritecontents.width(); + float f1 = 16.0F / spritecontents.height(); + Vector3f vector3f = new Vector3f(); diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/ItemTransform.java.patch b/patches/minecraft/net/minecraft/client/resources/model/cuboid/ItemTransform.java.patch similarity index 77% rename from patches/minecraft/net/minecraft/client/renderer/block/model/ItemTransform.java.patch rename to patches/minecraft/net/minecraft/client/resources/model/cuboid/ItemTransform.java.patch index e0c3de578b..f7a3af2860 100644 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/ItemTransform.java.patch +++ b/patches/minecraft/net/minecraft/client/resources/model/cuboid/ItemTransform.java.patch @@ -1,6 +1,6 @@ ---- a/net/minecraft/client/renderer/block/model/ItemTransform.java -+++ b/net/minecraft/client/renderer/block/model/ItemTransform.java -@@ -17,7 +_,11 @@ +--- a/net/minecraft/client/resources/model/cuboid/ItemTransform.java ++++ b/net/minecraft/client/resources/model/cuboid/ItemTransform.java +@@ -17,7 +_,10 @@ import org.joml.Vector3fc; @OnlyIn(Dist.CLIENT) @@ -9,10 +9,9 @@ + public ItemTransform(Vector3fc rotation, Vector3fc translation, Vector3fc scale) { + this(rotation, translation, scale, new Vector3f()); + } -+ public static final ItemTransform NO_TRANSFORM = new ItemTransform(new Vector3f(), new Vector3f(), new Vector3f(1.0F, 1.0F, 1.0F)); - public void apply(boolean p_111764_, PoseStack.Pose p_397991_) { + public void apply(final boolean applyLeftHandFix, final PoseStack.Pose pose) { @@ -62,7 +_,7 @@ vector3f1.set(Mth.clamp(vector3f1.x, -5.0F, 5.0F), Mth.clamp(vector3f1.y, -5.0F, 5.0F), Mth.clamp(vector3f1.z, -5.0F, 5.0F)); Vector3f vector3f2 = this.getVector3f(jsonobject, "scale", DEFAULT_SCALE); @@ -21,4 +20,4 @@ + return new ItemTransform(vector3f, vector3f1, vector3f2, this.getVector3f(jsonobject, "right_rotation", DEFAULT_ROTATION)); } - private Vector3f getVector3f(JsonObject p_111779_, String p_111780_, Vector3f p_253777_) { + private Vector3f getVector3f(final JsonObject object, final String key, final Vector3f def) { diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/ItemTransforms.java.patch b/patches/minecraft/net/minecraft/client/resources/model/cuboid/ItemTransforms.java.patch similarity index 64% rename from patches/minecraft/net/minecraft/client/renderer/block/model/ItemTransforms.java.patch rename to patches/minecraft/net/minecraft/client/resources/model/cuboid/ItemTransforms.java.patch index fdce149e72..c8cff8dd0b 100644 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/ItemTransforms.java.patch +++ b/patches/minecraft/net/minecraft/client/resources/model/cuboid/ItemTransforms.java.patch @@ -1,6 +1,6 @@ ---- a/net/minecraft/client/renderer/block/model/ItemTransforms.java -+++ b/net/minecraft/client/renderer/block/model/ItemTransforms.java -@@ -20,8 +_,15 @@ +--- a/net/minecraft/client/resources/model/cuboid/ItemTransforms.java ++++ b/net/minecraft/client/resources/model/cuboid/ItemTransforms.java +@@ -20,8 +_,14 @@ ItemTransform gui, ItemTransform ground, ItemTransform fixed, @@ -8,7 +8,6 @@ + ItemTransform fixedFromBottom, + com.google.common.collect.ImmutableMap moddedTransforms ) { -+ + @Deprecated + public ItemTransforms(ItemTransform thirdPersonLeftHand, ItemTransform thirdPersonRightHand, ItemTransform firstPersonLeftHand, ItemTransform firstPersonRightHand, ItemTransform head, ItemTransform gui, ItemTransform ground, ItemTransform fixed, ItemTransform fixedFromBottom) { + this(thirdPersonLeftHand, thirdPersonRightHand, firstPersonLeftHand, firstPersonRightHand, head, gui, ground, fixed, fixedFromBottom, com.google.common.collect.ImmutableMap.of()); @@ -22,31 +21,27 @@ case FIXED -> this.fixed; case ON_SHELF -> this.fixedFromBottom; - default -> ItemTransform.NO_TRANSFORM; -+ default -> moddedTransforms.getOrDefault(p_270619_, ItemTransform.NO_TRANSFORM); ++ default -> moddedTransforms.getOrDefault(type, ItemTransform.NO_TRANSFORM); }; } -@@ -70,8 +_,22 @@ - ItemTransform itemtransform6 = this.getTransform(p_111822_, jsonobject, ItemDisplayContext.GROUND); - ItemTransform itemtransform7 = this.getTransform(p_111822_, jsonobject, ItemDisplayContext.FIXED); - ItemTransform itemtransform8 = this.getTransform(p_111822_, jsonobject, ItemDisplayContext.ON_SHELF); +@@ -70,6 +_,19 @@ + ItemTransform itemtransform6 = this.getTransform(context, jsonobject, ItemDisplayContext.GROUND); + ItemTransform itemtransform7 = this.getTransform(context, jsonobject, ItemDisplayContext.FIXED); + ItemTransform itemtransform8 = this.getTransform(context, jsonobject, ItemDisplayContext.ON_SHELF); + var builder = com.google.common.collect.ImmutableMap.builder(); + for (ItemDisplayContext type : ItemDisplayContext.values()) { + if (type.isModded()) { -+ var transform = this.getTransform(p_111822_, jsonobject, type); ++ var transform = this.getTransform(context, jsonobject, type); + var fallbackType = type; + while (transform == ItemTransform.NO_TRANSFORM && fallbackType.fallback() != null) { + fallbackType = fallbackType.fallback(); -+ transform = this.getTransform(p_111822_, jsonobject, fallbackType); ++ transform = this.getTransform(context, jsonobject, fallbackType); + } + if (transform != ItemTransform.NO_TRANSFORM) + builder.put(type, transform); + } + } -+ return new ItemTransforms( -- itemtransform1, itemtransform, itemtransform3, itemtransform2, itemtransform4, itemtransform5, itemtransform6, itemtransform7, itemtransform8 -+ itemtransform1, itemtransform, itemtransform3, itemtransform2, itemtransform4, itemtransform5, itemtransform6, itemtransform7, itemtransform8, builder.build() + itemtransform1, itemtransform, itemtransform3, itemtransform2, itemtransform4, itemtransform5, itemtransform6, itemtransform7, itemtransform8 ); - } - diff --git a/patches/minecraft/net/minecraft/client/resources/model/cuboid/UnbakedCuboidGeometry.java.patch b/patches/minecraft/net/minecraft/client/resources/model/cuboid/UnbakedCuboidGeometry.java.patch new file mode 100644 index 0000000000..4cbca8b569 --- /dev/null +++ b/patches/minecraft/net/minecraft/client/resources/model/cuboid/UnbakedCuboidGeometry.java.patch @@ -0,0 +1,53 @@ +--- a/net/minecraft/client/resources/model/cuboid/UnbakedCuboidGeometry.java ++++ b/net/minecraft/client/resources/model/cuboid/UnbakedCuboidGeometry.java +@@ -29,8 +_,20 @@ + final ModelState modelState, + final ModelDebugName name + ) { +- QuadCollection.Builder quadcollection$builder = new QuadCollection.Builder(); ++ var builder = new QuadCollection.Builder(); ++ bake(builder, elements, textures, modelBaker, modelState, name, id -> modelBaker.materials().resolveSlot(textures, id, name)); ++ return builder.build(); ++ } + ++ public static void bake( ++ final QuadCollection.Builder builder, ++ final List elements, ++ final TextureSlots textures, ++ final ModelBaker modelBaker, ++ final ModelState modelState, ++ final ModelDebugName name, ++ final java.util.function.Function materialMapper //Forge: Allow overwriting textures ++ ) { + for (CuboidModelElement cuboidmodelelement : elements) { + boolean flag = true; + boolean flag1 = true; +@@ -63,7 +_,7 @@ + case Z -> flag2; + }; + if (flag3) { +- Material.Baked material$baked = modelBaker.materials().resolveSlot(textures, cuboidface.texture(), name); ++ Material.Baked material$baked = materialMapper.apply(cuboidface.texture()); + BakedQuad bakedquad = FaceBakery.bakeQuad( + modelBaker, + vector3fc, +@@ -77,9 +_,9 @@ + cuboidmodelelement.lightEmission() + ); + if (cuboidface.cullForDirection() == null) { +- quadcollection$builder.addUnculledFace(bakedquad); ++ builder.addUnculledFace(bakedquad); + } else { +- quadcollection$builder.addCulledFace( ++ builder.addCulledFace( + Direction.rotate(modelState.transformation().getMatrix(), cuboidface.cullForDirection()), bakedquad + ); + } +@@ -87,7 +_,5 @@ + } + } + } +- +- return quadcollection$builder.build(); + } + } diff --git a/patches/minecraft/net/minecraft/client/resources/model/QuadCollection.java.patch b/patches/minecraft/net/minecraft/client/resources/model/geometry/QuadCollection.java.patch similarity index 60% rename from patches/minecraft/net/minecraft/client/resources/model/QuadCollection.java.patch rename to patches/minecraft/net/minecraft/client/resources/model/geometry/QuadCollection.java.patch index ed32c8bf6e..166488eaa6 100644 --- a/patches/minecraft/net/minecraft/client/resources/model/QuadCollection.java.patch +++ b/patches/minecraft/net/minecraft/client/resources/model/geometry/QuadCollection.java.patch @@ -1,6 +1,6 @@ ---- a/net/minecraft/client/resources/model/QuadCollection.java -+++ b/net/minecraft/client/resources/model/QuadCollection.java -@@ -59,6 +_,12 @@ +--- a/net/minecraft/client/resources/model/geometry/QuadCollection.java ++++ b/net/minecraft/client/resources/model/geometry/QuadCollection.java +@@ -71,6 +_,12 @@ return this.all; } @@ -10,6 +10,6 @@ + transformer.process(this.west), transformer.process(this.up), transformer.process(this.down)); + } + - @OnlyIn(Dist.CLIENT) - public static class Builder { - private final ImmutableList.Builder unculledFaces = ImmutableList.builder(); + @BakedQuad.MaterialFlags + public int materialFlags() { + if (this.materialFlags == -1) { diff --git a/patches/minecraft/net/minecraft/client/resources/model/geometry/UnbakedGeometry.java.patch b/patches/minecraft/net/minecraft/client/resources/model/geometry/UnbakedGeometry.java.patch new file mode 100644 index 0000000000..9f38315c66 --- /dev/null +++ b/patches/minecraft/net/minecraft/client/resources/model/geometry/UnbakedGeometry.java.patch @@ -0,0 +1,11 @@ +--- a/net/minecraft/client/resources/model/geometry/UnbakedGeometry.java ++++ b/net/minecraft/client/resources/model/geometry/UnbakedGeometry.java +@@ -13,4 +_,8 @@ + UnbakedGeometry EMPTY = (var0, var1, var2, var3) -> QuadCollection.EMPTY; + + QuadCollection bake(TextureSlots textureSlots, ModelBaker modelBaker, ModelState modelState, ModelDebugName name); ++ ++ default QuadCollection bake(TextureSlots slots, ModelBaker baker, ModelState state, ModelDebugName name, net.minecraftforge.client.model.geometry.IGeometryBakingContext context) { ++ return bake(slots, baker, state, name); ++ } + } diff --git a/patches/minecraft/net/minecraft/client/server/IntegratedServer.java.patch b/patches/minecraft/net/minecraft/client/server/IntegratedServer.java.patch index 25740f720a..4a4b1b2840 100644 --- a/patches/minecraft/net/minecraft/client/server/IntegratedServer.java.patch +++ b/patches/minecraft/net/minecraft/client/server/IntegratedServer.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/server/IntegratedServer.java +++ b/net/minecraft/client/server/IntegratedServer.java -@@ -83,11 +_,12 @@ +@@ -98,12 +_,13 @@ LOGGER.info("Starting integrated minecraft server version {}", SharedConstants.getCurrentVersion().name()); this.setUsesAuthentication(true); this.initializeKeyPair(); @@ -9,15 +9,16 @@ GameProfile gameprofile = this.getSingleplayerProfile(); String s = this.getWorldData().getLevelName(); this.setMotd(gameprofile != null ? gameprofile.name() + " - " + s : s); + this.saveEverything(false, true, true); - return true; + return net.minecraftforge.server.ServerLifecycleHooks.handleServerStarting(this); } @Override -@@ -242,6 +_,7 @@ +@@ -259,6 +_,7 @@ @Override - public void halt(boolean p_120053_) { + public void halt(final boolean wait) { + if (isRunning()) this.executeBlocking(() -> { for (ServerPlayer serverplayer : Lists.newArrayList(this.getPlayerList().getPlayers())) { diff --git a/patches/minecraft/net/minecraft/client/server/LanServerDetection.java.patch b/patches/minecraft/net/minecraft/client/server/LanServerDetection.java.patch index 6d066162c5..195146481f 100644 --- a/patches/minecraft/net/minecraft/client/server/LanServerDetection.java.patch +++ b/patches/minecraft/net/minecraft/client/server/LanServerDetection.java.patch @@ -10,14 +10,14 @@ this.socket.joinGroup(this.pingGroup); } @@ -87,7 +_,11 @@ - String s = LanServerPinger.parseMotd(p_120097_); - String s1 = LanServerPinger.parseAddress(p_120097_); + String s = LanServerPinger.parseMotd(pingData); + String s1 = LanServerPinger.parseAddress(pingData); if (s1 != null) { -- s1 = p_120098_.getHostAddress() + ":" + s1; -+ if (net.minecraftforge.network.DualStackUtils.checkIPv6(p_120098_)) { -+ s1 = "[" + com.google.common.net.InetAddresses.toAddrString(p_120098_) + "]:" + s1; +- s1 = socketAddress.getHostAddress() + ":" + s1; ++ if (net.minecraftforge.network.DualStackUtils.checkIPv6(socketAddress)) { ++ s1 = "[" + com.google.common.net.InetAddresses.toAddrString(socketAddress) + "]:" + s1; + } else { -+ s1 = p_120098_.getHostAddress() + ":" + s1; ++ s1 = socketAddress.getHostAddress() + ":" + s1; + } boolean flag = false; diff --git a/patches/minecraft/net/minecraft/client/sounds/SoundEngine.java.patch b/patches/minecraft/net/minecraft/client/sounds/SoundEngine.java.patch index 384d4d3a3e..d7c50023ae 100644 --- a/patches/minecraft/net/minecraft/client/sounds/SoundEngine.java.patch +++ b/patches/minecraft/net/minecraft/client/sounds/SoundEngine.java.patch @@ -1,14 +1,14 @@ --- a/net/minecraft/client/sounds/SoundEngine.java +++ b/net/minecraft/client/sounds/SoundEngine.java -@@ -82,6 +_,7 @@ - this.soundManager = p_120236_; - this.options = p_120237_; - this.soundBuffers = new SoundBufferLibrary(p_249332_); +@@ -84,6 +_,7 @@ + this.options = options; + this.soundBuffers = new SoundBufferLibrary(resourceProvider); + this.lastSeenDevices = this.deviceTracker.currentDevices(); + net.minecraftforge.client.event.sound.SoundEngineLoadEvent.BUS.post(new net.minecraftforge.client.event.sound.SoundEngineLoadEvent(this)); } public void reload() { -@@ -99,6 +_,7 @@ +@@ -101,6 +_,7 @@ this.destroy(); this.loadLibrary(); @@ -16,32 +16,39 @@ } private synchronized void loadLibrary() { -@@ -339,6 +_,9 @@ - } else if (!p_120313_.canPlaySound()) { +@@ -342,12 +_,15 @@ + } + } + +- public SoundEngine.PlayResult play(final SoundInstance instance) { ++ public SoundEngine.PlayResult play(SoundInstance instance) { + if (!this.loaded) { + return SoundEngine.PlayResult.NOT_STARTED; + } else if (!instance.canPlaySound()) { return SoundEngine.PlayResult.NOT_STARTED; } else { -+ p_120313_ = net.minecraftforge.client.ForgeHooksClient.playSound(this, p_120313_); -+ if (p_120313_ == null || !p_120313_.canPlaySound()) ++ instance = net.minecraftforge.client.ForgeHooksClient.playSound(this, instance); ++ if (instance == null || !instance.canPlaySound()) + return SoundEngine.PlayResult.NOT_STARTED; - WeighedSoundEvents weighedsoundevents = p_120313_.resolve(this.soundManager); - Identifier identifier = p_120313_.getIdentifier(); + WeighedSoundEvents weighedsoundevents = instance.resolve(this.soundManager); + Identifier identifier = instance.getIdentifier(); if (weighedsoundevents == null) { -@@ -418,15 +_,18 @@ - p_194488_.setSelfPosition(vec3); - p_194488_.setRelative(flag); +@@ -427,15 +_,18 @@ + channel.setSelfPosition(vec3); + channel.setRelative(flag); }); -+ SoundInstance soundinstance = p_120313_; ++ SoundInstance soundinstance = instance; if (!flag1) { - this.soundBuffers.getCompleteBuffer(sound.getPath()).thenAccept(p_422528_ -> channelaccess$channelhandle.execute(p_194495_ -> { - p_194495_.attachStaticBuffer(p_422528_); - p_194495_.play(); -+ net.minecraftforge.client.event.ForgeEventFactoryClient.onPlaySoundSource(this, soundinstance, p_194495_); + this.soundBuffers.getCompleteBuffer(sound.getPath()).thenAccept(soundBuffer -> channelaccess$channelhandle.execute(channel -> { + channel.attachStaticBuffer(soundBuffer); + channel.play(); ++ net.minecraftforge.client.event.ForgeEventFactoryClient.onPlaySoundSource(this, soundinstance, channel); })); } else { - this.soundBuffers.getStream(sound.getPath(), flag3).thenAccept(p_430918_ -> channelaccess$channelhandle.execute(p_194498_ -> { - p_194498_.attachBufferStream(p_430918_); - p_194498_.play(); -+ net.minecraftforge.client.event.ForgeEventFactoryClient.onPlayStreamingSource(this, soundinstance, p_194498_); + this.soundBuffers.getStream(sound.getPath(), flag3).thenAccept(stream -> channelaccess$channelhandle.execute(channel -> { + channel.attachBufferStream(stream); + channel.play(); ++ net.minecraftforge.client.event.ForgeEventFactoryClient.onPlayStreamingSource(this, soundinstance, channel); })); } diff --git a/patches/minecraft/net/minecraft/commands/CommandSourceStack.java.patch b/patches/minecraft/net/minecraft/commands/CommandSourceStack.java.patch index 78c3c8dfdc..d0471f04cd 100644 --- a/patches/minecraft/net/minecraft/commands/CommandSourceStack.java.patch +++ b/patches/minecraft/net/minecraft/commands/CommandSourceStack.java.patch @@ -4,8 +4,8 @@ import net.minecraft.world.phys.Vec3; import org.jspecify.annotations.Nullable; --public class CommandSourceStack implements ExecutionCommandSource, SharedSuggestionProvider { -+public class CommandSourceStack implements ExecutionCommandSource, SharedSuggestionProvider, net.minecraftforge.common.extensions.IForgeCommandSourceStack { +-public class CommandSourceStack implements SharedSuggestionProvider, ExecutionCommandSource { ++public class CommandSourceStack implements SharedSuggestionProvider, ExecutionCommandSource, net.minecraftforge.common.extensions.IForgeCommandSourceStack { public static final SimpleCommandExceptionType ERROR_NOT_PLAYER = new SimpleCommandExceptionType(Component.translatable("permissions.requires.player")); public static final SimpleCommandExceptionType ERROR_NOT_ENTITY = new SimpleCommandExceptionType(Component.translatable("permissions.requires.entity")); public final CommandSource source; diff --git a/patches/minecraft/net/minecraft/commands/Commands.java.patch b/patches/minecraft/net/minecraft/commands/Commands.java.patch index 0181bc1f04..4abd7ee2b8 100644 --- a/patches/minecraft/net/minecraft/commands/Commands.java.patch +++ b/patches/minecraft/net/minecraft/commands/Commands.java.patch @@ -1,30 +1,30 @@ --- a/net/minecraft/commands/Commands.java +++ b/net/minecraft/commands/Commands.java -@@ -264,7 +_,7 @@ +@@ -267,7 +_,7 @@ ChaseCommand.register(this.dispatcher); } - if (SharedConstants.DEBUG_DEV_COMMANDS || SharedConstants.IS_RUNNING_IN_IDE) { + if (SharedConstants.DEBUG_DEV_COMMANDS || net.minecraftforge.gametest.ForgeGameTestHooks.isGametestEnabled()) { - RaidCommand.register(this.dispatcher, p_230944_); + RaidCommand.register(this.dispatcher, context); DebugPathCommand.register(this.dispatcher); DebugMobSpawningCommand.register(this.dispatcher); -@@ -297,6 +_,7 @@ - if (p_230943_.includeIntegrated) { +@@ -300,6 +_,7 @@ + if (commandSelection.includeIntegrated) { PublishCommand.register(this.dispatcher); } -+ net.minecraftforge.event.ForgeEventFactory.onCommandRegister(this.dispatcher, p_230943_, p_230944_); ++ net.minecraftforge.event.ForgeEventFactory.onCommandRegister(this.dispatcher, commandSelection, context); this.dispatcher.setConsumer(ExecutionCommandSource.resultConsumer()); } -@@ -319,9 +_,18 @@ - public void performCommand(ParseResults p_242844_, String p_242841_) { - CommandSourceStack commandsourcestack = p_242844_.getContext().getSource(); - Profiler.get().push(() -> "/" + p_242841_); -- ContextChain contextchain = finishParsing(p_242844_, p_242841_, commandsourcestack); +@@ -322,9 +_,18 @@ + public void performCommand(final ParseResults command, final String commandString) { + CommandSourceStack commandsourcestack = command.getContext().getSource(); + Profiler.get().push(() -> "/" + commandString); +- ContextChain contextchain = finishParsing(command, commandString, commandsourcestack); try { -+ var event = new net.minecraftforge.event.CommandEvent(p_242844_); ++ var event = new net.minecraftforge.event.CommandEvent(command); + if (net.minecraftforge.event.CommandEvent.BUS.post(event)) { + if (event.getException() instanceof Exception exception) { + throw exception; @@ -33,19 +33,19 @@ + } + return; + } -+ ContextChain contextchain = finishParsing(event.getParseResults(), p_242841_, commandsourcestack); ++ ContextChain contextchain = finishParsing(event.getParseResults(), commandString, commandsourcestack); if (contextchain != null) { executeCommandInContext( commandsourcestack, -@@ -413,7 +_,10 @@ +@@ -416,7 +_,10 @@ Map, CommandNode> map = new HashMap<>(); RootCommandNode rootcommandnode = new RootCommandNode<>(); map.put(this.dispatcher.getRoot(), rootcommandnode); -- fillUsableCommands(this.dispatcher.getRoot(), rootcommandnode, p_82096_.createCommandSourceStack(), map); +- fillUsableCommands(this.dispatcher.getRoot(), rootcommandnode, player.createCommandSourceStack(), map); + // FORGE: Use our own command node merging method to handle redirect nodes properly, see issue #7551 -+ net.minecraftforge.server.command.CommandHelper.mergeCommandNode(this.dispatcher.getRoot(), rootcommandnode, map, p_82096_.createCommandSourceStack(), ctx -> 0, suggest -> suggest); ++ net.minecraftforge.server.command.CommandHelper.mergeCommandNode(this.dispatcher.getRoot(), rootcommandnode, map, player.createCommandSourceStack(), ctx -> 0, suggest -> suggest); + // FORGE: Clean any modded command content if the client is vanilla -+ rootcommandnode = net.minecraftforge.server.command.CommandHelper.filterCommandList(p_82096_.connection.getConnection(), rootcommandnode); - p_82096_.connection.send(new ClientboundCommandsPacket(rootcommandnode, COMMAND_NODE_INSPECTOR)); ++ rootcommandnode = net.minecraftforge.server.command.CommandHelper.filterCommandList(player.connection.getConnection(), rootcommandnode); + player.connection.send(new ClientboundCommandsPacket(rootcommandnode, COMMAND_NODE_INSPECTOR)); } diff --git a/patches/minecraft/net/minecraft/commands/arguments/EntityArgument.java.patch b/patches/minecraft/net/minecraft/commands/arguments/EntityArgument.java.patch index 675dedcf43..8d6474fe18 100644 --- a/patches/minecraft/net/minecraft/commands/arguments/EntityArgument.java.patch +++ b/patches/minecraft/net/minecraft/commands/arguments/EntityArgument.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/commands/arguments/EntityArgument.java +++ b/net/minecraft/commands/arguments/EntityArgument.java -@@ -125,7 +_,7 @@ - StringReader stringreader = new StringReader(p_91483_.getInput()); - stringreader.setCursor(p_91483_.getStart()); +@@ -130,7 +_,7 @@ + StringReader stringreader = new StringReader(builder.getInput()); + stringreader.setCursor(builder.getStart()); EntitySelectorParser entityselectorparser = new EntitySelectorParser( - stringreader, sharedsuggestionprovider.permissions().hasPermission(Permissions.COMMANDS_ENTITY_SELECTORS) + stringreader, net.minecraftforge.common.ForgeHooks.canUseEntitySelectors(sharedsuggestionprovider) diff --git a/patches/minecraft/net/minecraft/commands/arguments/MessageArgument.java.patch b/patches/minecraft/net/minecraft/commands/arguments/MessageArgument.java.patch index cc38cd86c1..f7bbd410a0 100644 --- a/patches/minecraft/net/minecraft/commands/arguments/MessageArgument.java.patch +++ b/patches/minecraft/net/minecraft/commands/arguments/MessageArgument.java.patch @@ -3,9 +3,9 @@ @@ -90,7 +_,7 @@ public record Message(String text, MessageArgument.Part[] parts) { - Component resolveComponent(CommandSourceStack p_232197_) throws CommandSyntaxException { -- return this.toComponent(p_232197_, p_232197_.permissions().hasPermission(Permissions.COMMANDS_ENTITY_SELECTORS)); -+ return this.toComponent(p_232197_, net.minecraftforge.common.ForgeHooks.canUseEntitySelectors(p_232197_)); + private Component resolveComponent(final CommandSourceStack sender) throws CommandSyntaxException { +- return this.toComponent(sender, sender.permissions().hasPermission(Permissions.COMMANDS_ENTITY_SELECTORS)); ++ return this.toComponent(sender, net.minecraftforge.common.ForgeHooks.canUseEntitySelectors(sender)); } - public Component toComponent(CommandSourceStack p_96850_, boolean p_96851_) throws CommandSyntaxException { + public Component toComponent(final CommandSourceStack sender, final boolean allowSelectors) throws CommandSyntaxException { diff --git a/patches/minecraft/net/minecraft/commands/arguments/ObjectiveArgument.java.patch b/patches/minecraft/net/minecraft/commands/arguments/ObjectiveArgument.java.patch index 81e5a4aeb4..a9fcd71425 100644 --- a/patches/minecraft/net/minecraft/commands/arguments/ObjectiveArgument.java.patch +++ b/patches/minecraft/net/minecraft/commands/arguments/ObjectiveArgument.java.patch @@ -2,19 +2,19 @@ +++ b/net/minecraft/commands/arguments/ObjectiveArgument.java @@ -31,7 +_,7 @@ - public static Objective getObjective(CommandContext p_101961_, String p_101962_) throws CommandSyntaxException { - String s = p_101961_.getArgument(p_101962_, String.class); -- Scoreboard scoreboard = p_101961_.getSource().getServer().getScoreboard(); -+ Scoreboard scoreboard = p_101961_.getSource().getScoreboard(); + public static Objective getObjective(final CommandContext context, final String name) throws CommandSyntaxException { + String s = context.getArgument(name, String.class); +- Scoreboard scoreboard = context.getSource().getServer().getScoreboard(); ++ Scoreboard scoreboard = context.getSource().getScoreboard(); Objective objective = scoreboard.getObjective(s); if (objective == null) { throw ERROR_OBJECTIVE_NOT_FOUND.create(s); @@ -57,7 +_,7 @@ - public CompletableFuture listSuggestions(CommandContext p_101974_, SuggestionsBuilder p_101975_) { - S s = p_101974_.getSource(); + public CompletableFuture listSuggestions(final CommandContext context, final SuggestionsBuilder builder) { + S s = context.getSource(); if (s instanceof CommandSourceStack commandsourcestack) { -- return SharedSuggestionProvider.suggest(commandsourcestack.getServer().getScoreboard().getObjectiveNames(), p_101975_); -+ return SharedSuggestionProvider.suggest(commandsourcestack.getScoreboard().getObjectiveNames(), p_101975_); +- return SharedSuggestionProvider.suggest(commandsourcestack.getServer().getScoreboard().getObjectiveNames(), builder); ++ return SharedSuggestionProvider.suggest(commandsourcestack.getScoreboard().getObjectiveNames(), builder); } else { - return s instanceof SharedSuggestionProvider sharedsuggestionprovider ? sharedsuggestionprovider.customSuggestion(p_101974_) : Suggestions.empty(); + return s instanceof SharedSuggestionProvider sharedsuggestionprovider ? sharedsuggestionprovider.customSuggestion(context) : Suggestions.empty(); } diff --git a/patches/minecraft/net/minecraft/commands/arguments/TeamArgument.java.patch b/patches/minecraft/net/minecraft/commands/arguments/TeamArgument.java.patch index 12a11e1853..40bf69e0c8 100644 --- a/patches/minecraft/net/minecraft/commands/arguments/TeamArgument.java.patch +++ b/patches/minecraft/net/minecraft/commands/arguments/TeamArgument.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/commands/arguments/TeamArgument.java +++ b/net/minecraft/commands/arguments/TeamArgument.java -@@ -26,7 +_,7 @@ +@@ -28,7 +_,7 @@ - public static PlayerTeam getTeam(CommandContext p_112092_, String p_112093_) throws CommandSyntaxException { - String s = p_112092_.getArgument(p_112093_, String.class); -- Scoreboard scoreboard = p_112092_.getSource().getServer().getScoreboard(); -+ Scoreboard scoreboard = p_112092_.getSource().getScoreboard(); + public static PlayerTeam getTeam(final CommandContext context, final String name) throws CommandSyntaxException { + String s = context.getArgument(name, String.class); +- Scoreboard scoreboard = context.getSource().getServer().getScoreboard(); ++ Scoreboard scoreboard = context.getSource().getScoreboard(); PlayerTeam playerteam = scoreboard.getPlayerTeam(s); if (playerteam == null) { throw ERROR_TEAM_NOT_FOUND.create(s); diff --git a/patches/minecraft/net/minecraft/commands/arguments/coordinates/BlockPosArgument.java.patch b/patches/minecraft/net/minecraft/commands/arguments/coordinates/BlockPosArgument.java.patch deleted file mode 100644 index 11bb52a3e4..0000000000 --- a/patches/minecraft/net/minecraft/commands/arguments/coordinates/BlockPosArgument.java.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- a/net/minecraft/commands/arguments/coordinates/BlockPosArgument.java -+++ b/net/minecraft/commands/arguments/coordinates/BlockPosArgument.java -@@ -36,9 +_,9 @@ - - public static BlockPos getLoadedBlockPos(CommandContext p_265283_, ServerLevel p_265219_, String p_265677_) throws CommandSyntaxException { - BlockPos blockpos = getBlockPos(p_265283_, p_265677_); -- if (!p_265219_.hasChunkAt(blockpos)) { -+ if (!p_265283_.getSource().getUnsidedLevel().hasChunkAt(blockpos)) { - throw ERROR_NOT_LOADED.create(); -- } else if (!p_265219_.isInWorldBounds(blockpos)) { -+ } else if (!p_265283_.getSource().getUnsidedLevel().isInWorldBounds(blockpos)) { - throw ERROR_OUT_OF_WORLD.create(); - } else { - return blockpos; diff --git a/patches/minecraft/net/minecraft/commands/arguments/selector/EntitySelector.java.patch b/patches/minecraft/net/minecraft/commands/arguments/selector/EntitySelector.java.patch index 2373a9cd79..53ab59a8bf 100644 --- a/patches/minecraft/net/minecraft/commands/arguments/selector/EntitySelector.java.patch +++ b/patches/minecraft/net/minecraft/commands/arguments/selector/EntitySelector.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/commands/arguments/selector/EntitySelector.java +++ b/net/minecraft/commands/arguments/selector/EntitySelector.java -@@ -102,7 +_,7 @@ +@@ -117,7 +_,7 @@ } - private void checkPermissions(CommandSourceStack p_121169_) throws CommandSyntaxException { -- if (this.usesSelector && !p_121169_.permissions().hasPermission(Permissions.COMMANDS_ENTITY_SELECTORS)) { -+ if (this.usesSelector && !net.minecraftforge.common.ForgeHooks.canUseEntitySelectors(p_121169_)) { + private void checkPermissions(final CommandSourceStack sender) throws CommandSyntaxException { +- if (this.usesSelector && !sender.permissions().hasPermission(Permissions.COMMANDS_ENTITY_SELECTORS)) { ++ if (this.usesSelector && !net.minecraftforge.common.ForgeHooks.canUseEntitySelectors(sender)) { throw EntityArgument.ERROR_SELECTORS_NOT_ALLOWED.create(); } } diff --git a/patches/minecraft/net/minecraft/commands/arguments/selector/EntitySelectorParser.java.patch b/patches/minecraft/net/minecraft/commands/arguments/selector/EntitySelectorParser.java.patch index b4bd7bc092..553740988c 100644 --- a/patches/minecraft/net/minecraft/commands/arguments/selector/EntitySelectorParser.java.patch +++ b/patches/minecraft/net/minecraft/commands/arguments/selector/EntitySelectorParser.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/commands/arguments/selector/EntitySelectorParser.java +++ b/net/minecraft/commands/arguments/selector/EntitySelectorParser.java -@@ -463,6 +_,11 @@ +@@ -466,6 +_,11 @@ } this.reader.skip(); @@ -12,11 +12,11 @@ this.parseSelector(); } else { this.parseNameOrUUID(); -@@ -479,6 +_,7 @@ - p_121248_.suggest("@s", Component.translatable("argument.entity.selector.self")); - p_121248_.suggest("@e", Component.translatable("argument.entity.selector.allEntities")); - p_121248_.suggest("@n", Component.translatable("argument.entity.selector.nearestEntity")); -+ net.minecraftforge.common.command.EntitySelectorManager.fillSelectorSuggestions(p_121248_); +@@ -482,6 +_,7 @@ + builder.suggest("@s", Component.translatable("argument.entity.selector.self")); + builder.suggest("@e", Component.translatable("argument.entity.selector.allEntities")); + builder.suggest("@n", Component.translatable("argument.entity.selector.nearestEntity")); ++ net.minecraftforge.common.command.EntitySelectorManager.fillSelectorSuggestions(builder); } - private CompletableFuture suggestNameOrSelector(SuggestionsBuilder p_121287_, Consumer p_121288_) { + private CompletableFuture suggestNameOrSelector(final SuggestionsBuilder builder, final Consumer names) { diff --git a/patches/minecraft/net/minecraft/commands/synchronization/ArgumentTypeInfos.java.patch b/patches/minecraft/net/minecraft/commands/synchronization/ArgumentTypeInfos.java.patch index 3058bf6c05..838237a4a8 100644 --- a/patches/minecraft/net/minecraft/commands/synchronization/ArgumentTypeInfos.java.patch +++ b/patches/minecraft/net/minecraft/commands/synchronization/ArgumentTypeInfos.java.patch @@ -19,5 +19,5 @@ + } + private static , T extends ArgumentTypeInfo.Template> ArgumentTypeInfo register( - Registry> p_235387_, String p_235388_, Class p_235389_, ArgumentTypeInfo p_235390_ + final Registry> registry, final String id, final Class brigadierType, final ArgumentTypeInfo info ) { diff --git a/patches/minecraft/net/minecraft/core/BlockPos.java.patch b/patches/minecraft/net/minecraft/core/BlockPos.java.patch index dbb24cb224..3e33eccdeb 100644 --- a/patches/minecraft/net/minecraft/core/BlockPos.java.patch +++ b/patches/minecraft/net/minecraft/core/BlockPos.java.patch @@ -8,4 +8,4 @@ +public class BlockPos extends Vec3i implements net.minecraftforge.common.extensions.IForgeBlockPos { public static final Codec CODEC = Codec.INT_STREAM .comapFlatMap( - p_448556_ -> Util.fixedSize(p_448556_, 3).map(p_175270_ -> new BlockPos(p_175270_[0], p_175270_[1], p_175270_[2])), + input -> Util.fixedSize(input, 3).map(ints -> new BlockPos(ints[0], ints[1], ints[2])), pos -> IntStream.of(pos.getX(), pos.getY(), pos.getZ()) diff --git a/patches/minecraft/net/minecraft/core/DefaultedMappedRegistry.java.patch b/patches/minecraft/net/minecraft/core/DefaultedMappedRegistry.java.patch index aa424bfc94..0c5275a557 100644 --- a/patches/minecraft/net/minecraft/core/DefaultedMappedRegistry.java.patch +++ b/patches/minecraft/net/minecraft/core/DefaultedMappedRegistry.java.patch @@ -1,9 +1,9 @@ --- a/net/minecraft/core/DefaultedMappedRegistry.java +++ b/net/minecraft/core/DefaultedMappedRegistry.java -@@ -41,7 +_,7 @@ +@@ -43,7 +_,7 @@ @Override - public T getValue(@Nullable Identifier p_452628_) { - T t = super.getValue(p_452628_); + public T getValue(final @Nullable Identifier key) { + T t = super.getValue(key); - return t == null ? this.defaultValue.value() : t; + return t == null && this.defaultValue != null ? this.defaultValue.value() : t; // Add null check as it errors out in validation } diff --git a/patches/minecraft/net/minecraft/core/Direction.java.patch b/patches/minecraft/net/minecraft/core/Direction.java.patch index 16d588de9b..2aba89ccd4 100644 --- a/patches/minecraft/net/minecraft/core/Direction.java.patch +++ b/patches/minecraft/net/minecraft/core/Direction.java.patch @@ -1,9 +1,9 @@ --- a/net/minecraft/core/Direction.java +++ b/net/minecraft/core/Direction.java -@@ -57,6 +_,15 @@ - private final Vec3 normalVec3; +@@ -58,6 +_,15 @@ private final Vector3fc normalVec3f; private static final Direction[] VALUES = values(); + private static final Direction[] BY_3D_DATA = Arrays.stream(VALUES).sorted(Comparator.comparingInt(d -> d.data3d)).toArray(Direction[]::new); + private static final List VALUES_VIEW = java.util.Collections.unmodifiableList(Arrays.asList(VALUES)); + public static final List valuesView() { + return VALUES_VIEW; @@ -13,6 +13,6 @@ + public static final List getUpdateOrder() { + return UPDATE_ORDER; + } - private static final Direction[] BY_3D_DATA = Arrays.stream(VALUES) - .sorted(Comparator.comparingInt(p_235687_ -> p_235687_.data3d)) - .toArray(Direction[]::new); + private static final Direction[] BY_2D_DATA = Arrays.stream(VALUES) + .filter(d -> d.getAxis().isHorizontal()) + .sorted(Comparator.comparingInt(d -> d.data2d)) diff --git a/patches/minecraft/net/minecraft/core/Holder.java.patch b/patches/minecraft/net/minecraft/core/Holder.java.patch index 0d2426e3ad..38c1dc1eb9 100644 --- a/patches/minecraft/net/minecraft/core/Holder.java.patch +++ b/patches/minecraft/net/minecraft/core/Holder.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/core/Holder.java +++ b/net/minecraft/core/Holder.java -@@ -11,7 +_,22 @@ +@@ -13,7 +_,22 @@ import net.minecraft.tags.TagKey; import org.jspecify.annotations.Nullable; @@ -24,7 +24,7 @@ T value(); boolean isBound(); -@@ -238,6 +_,10 @@ +@@ -258,6 +_,10 @@ @Override public Stream> tags() { return this.boundTags().stream(); diff --git a/patches/minecraft/net/minecraft/core/HolderSet.java.patch b/patches/minecraft/net/minecraft/core/HolderSet.java.patch index f9a0aee9fd..2ae19cd814 100644 --- a/patches/minecraft/net/minecraft/core/HolderSet.java.patch +++ b/patches/minecraft/net/minecraft/core/HolderSet.java.patch @@ -11,16 +11,16 @@ int size(); @@ -172,6 +_,7 @@ - public void bind(List> p_205836_) { - this.contents = List.copyOf(p_205836_); + public void bind(final List> contents) { + this.contents = List.copyOf(contents); + this.invalidationCallbacks.forEach(Runnable::run); // FORGE: invalidate listeners when tags rebind } public TagKey key() { @@ -215,6 +_,12 @@ @Override - public boolean canSerializeIn(HolderOwner p_256542_) { - return this.owner.canSerializeIn(p_256542_); + public boolean canSerializeIn(final HolderOwner context) { + return this.owner.canSerializeIn(context); + } + + // FORGE: Keep a list of invalidation callbacks so they can be run when tags rebind diff --git a/patches/minecraft/net/minecraft/core/MappedRegistry.java.patch b/patches/minecraft/net/minecraft/core/MappedRegistry.java.patch index 1648fad79c..e12c2068f4 100644 --- a/patches/minecraft/net/minecraft/core/MappedRegistry.java.patch +++ b/patches/minecraft/net/minecraft/core/MappedRegistry.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/core/MappedRegistry.java +++ b/net/minecraft/core/MappedRegistry.java -@@ -30,6 +_,8 @@ +@@ -31,6 +_,8 @@ import org.jspecify.annotations.Nullable; public class MappedRegistry implements WritableRegistry { @@ -8,33 +8,33 @@ + private static final org.apache.logging.log4j.Marker MARKER = net.minecraftforge.registries.ForgeRegistry.REGISTRIES; private final ResourceKey> key; private final ObjectList> byId = new ObjectArrayList<>(256); - private final Reference2IntMap toId = Util.make(new Reference2IntOpenHashMap<>(), p_308420_ -> p_308420_.defaultReturnValue(-1)); -@@ -84,6 +_,7 @@ + private final Reference2IntMap toId = Util.make(new Reference2IntOpenHashMap<>(), t -> t.defaultReturnValue(-1)); +@@ -86,6 +_,7 @@ @Override - public Holder.Reference register(ResourceKey p_256252_, T p_256591_, RegistrationInfo p_329661_) { + public Holder.Reference register(final ResourceKey key, final T value, final RegistrationInfo registrationInfo) { + markKnown(); - this.validateWrite(p_256252_); - Objects.requireNonNull(p_256252_); - Objects.requireNonNull(p_256591_); -@@ -102,6 +_,8 @@ - reference.bindKey(p_256252_); + this.validateWrite(key); + Objects.requireNonNull(key); + Objects.requireNonNull(value); +@@ -104,6 +_,8 @@ + reference.bindKey(key); } else { - reference = this.byKey.computeIfAbsent(p_256252_, p_358082_ -> Holder.Reference.createStandAlone(this, (ResourceKey)p_358082_)); + reference = this.byKey.computeIfAbsent(key, k -> Holder.Reference.createStandAlone(this, (ResourceKey)k)); + // Forge: Bind the value immediately so it can be queried while the registry is not frozen -+ reference.bindValue(p_256591_); ++ reference.bindValue(value); } - this.byKey.put(p_256252_, reference); -@@ -268,7 +_,6 @@ + this.byKey.put(key, reference); +@@ -275,7 +_,6 @@ return this; } else { this.frozen = true; -- this.byValue.forEach((p_247989_, p_247990_) -> p_247990_.bindValue((T)p_247989_)); - List list = this.byKey - .entrySet() - .stream() -@@ -284,7 +_,8 @@ +- this.byValue.forEach((value, holder) -> holder.bindValue((T)value)); + List list = this.byKey.entrySet().stream().filter(e -> !e.getValue().isBound()).map(e -> e.getKey().identifier()).sorted().toList(); + if (!list.isEmpty()) { + throw new IllegalStateException("Unbound values in registry " + this.key() + ": " + list); +@@ -285,7 +_,8 @@ throw new IllegalStateException("Some intrusive holders were not registered: " + this.unregisteredIntrusiveHolders.values()); } @@ -44,7 +44,7 @@ } if (this.allTags.isBound()) { -@@ -298,8 +_,9 @@ +@@ -299,8 +_,9 @@ .sorted() .toList(); if (!list1.isEmpty()) { @@ -53,10 +53,10 @@ + LOGGER.debug(MARKER, "Unbound tags in registry " + this.key() + ": " + list1); + bindAllUnboundTagsToEmpty(); + } /* else */ { + this.componentLookup = new DataComponentLookup<>(this.byId); this.allTags = MappedRegistry.TagSet.fromMap(this.frozenTags); this.refreshTagsInHolders(); - return this; -@@ -309,6 +_,13 @@ +@@ -311,6 +_,13 @@ } } @@ -68,9 +68,9 @@ + } + @Override - public Holder.Reference createIntrusiveHolder(T p_205915_) { + public Holder.Reference createIntrusiveHolder(final T value) { if (this.unregisteredIntrusiveHolders == null) { -@@ -383,6 +_,31 @@ +@@ -389,6 +_,31 @@ }; } @@ -100,9 +100,9 @@ + } + @Override - public Registry.PendingTags prepareTagReload(TagLoader.LoadResult p_368827_) { + public Registry.PendingTags prepareTagReload(final TagLoader.LoadResult tags) { if (!this.frozen) { -@@ -430,6 +_,11 @@ +@@ -444,6 +_,11 @@ @Override public HolderLookup.RegistryLookup lookup() { return registrylookup; diff --git a/patches/minecraft/net/minecraft/core/Registry.java.patch b/patches/minecraft/net/minecraft/core/Registry.java.patch index 2b49a462f5..acfad02147 100644 --- a/patches/minecraft/net/minecraft/core/Registry.java.patch +++ b/patches/minecraft/net/minecraft/core/Registry.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/core/Registry.java +++ b/net/minecraft/core/Registry.java -@@ -172,5 +_,7 @@ +@@ -178,5 +_,7 @@ void apply(); int size(); diff --git a/patches/minecraft/net/minecraft/core/RegistrySetBuilder.java.patch b/patches/minecraft/net/minecraft/core/RegistrySetBuilder.java.patch index d94f347343..ec117b8d3b 100644 --- a/patches/minecraft/net/minecraft/core/RegistrySetBuilder.java.patch +++ b/patches/minecraft/net/minecraft/core/RegistrySetBuilder.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/core/RegistrySetBuilder.java +++ b/net/minecraft/core/RegistrySetBuilder.java -@@ -22,7 +_,8 @@ +@@ -23,7 +_,8 @@ import org.apache.commons.lang3.mutable.MutableObject; import org.jspecify.annotations.Nullable; @@ -9,13 +9,13 @@ + private final it.unimi.dsi.fastutil.objects.Object2IntMap>> indexes = new it.unimi.dsi.fastutil.objects.Object2IntLinkedOpenHashMap<>(); private final List> entries = new ArrayList<>(); - static HolderGetter wrapContextLookup(final HolderLookup.RegistryLookup p_255625_) { -@@ -66,14 +_,43 @@ + private static HolderGetter wrapContextLookup(final HolderLookup.RegistryLookup original) { +@@ -67,14 +_,43 @@ public RegistrySetBuilder add( - ResourceKey> p_256446_, Lifecycle p_256394_, RegistrySetBuilder.RegistryBootstrap p_256638_ + final ResourceKey> key, final Lifecycle lifecycle, final RegistrySetBuilder.RegistryBootstrap bootstrap ) { -- this.entries.add(new RegistrySetBuilder.RegistryStub<>(p_256446_, p_256394_, p_256638_)); -+ add(new RegistrySetBuilder.RegistryStub<>(p_256446_, p_256394_, p_256638_)); +- this.entries.add(new RegistrySetBuilder.RegistryStub<>(key, lifecycle, bootstrap)); ++ add(new RegistrySetBuilder.RegistryStub<>(key, lifecycle, bootstrap)); return this; } @@ -44,50 +44,50 @@ + return ret; + } + - public RegistrySetBuilder add(ResourceKey> p_256261_, RegistrySetBuilder.RegistryBootstrap p_256010_) { - return this.add(p_256261_, Lifecycle.stable(), p_256010_); + public RegistrySetBuilder add(final ResourceKey> key, final RegistrySetBuilder.RegistryBootstrap bootstrap) { + return this.add(key, Lifecycle.stable(), bootstrap); } + public List>> getEntryKeys() { + return this.entries.stream().map(RegistrySetBuilder.RegistryStub::key).toList(); + } + - private RegistrySetBuilder.BuildState createState(RegistryAccess p_256400_) { + private RegistrySetBuilder.BuildState createState(final RegistryAccess context) { RegistrySetBuilder.BuildState registrysetbuilder$buildstate = RegistrySetBuilder.BuildState.create( - p_256400_, this.entries.stream().map(RegistrySetBuilder.RegistryStub::key) -@@ -180,14 +_,16 @@ - throw new NullPointerException("No cloner for " + p_313093_.identifier()); + context, this.entries.stream().map(RegistrySetBuilder.RegistryStub::key) +@@ -183,14 +_,16 @@ + throw new NullPointerException("No cloner for " + registryKey.identifier()); } else { Map, Holder.Reference> map = new HashMap<>(); -- HolderLookup.RegistryLookup registrylookup = p_311682_.lookupOrThrow(p_313093_); -+ HolderLookup.RegistryLookup registrylookup = p_311682_.lookup(p_313093_).orElse(null); - registrylookup.listElements().forEach(p_308453_ -> { - ResourceKey resourcekey = p_308453_.key(); - RegistrySetBuilder.LazyHolder lazyholder = new RegistrySetBuilder.LazyHolder<>(p_312548_, resourcekey); - lazyholder.supplier = () -> cloner.clone((T)p_308453_.value(), p_311682_, p_311605_.get()); +- HolderLookup.RegistryLookup registrylookup = patchProvider.lookupOrThrow(registryKey); ++ HolderLookup.RegistryLookup registrylookup = patchProvider.lookup(registryKey).orElse(null); + registrylookup.listElements().forEach(elementHolder -> { + ResourceKey resourcekey = elementHolder.key(); + RegistrySetBuilder.LazyHolder lazyholder = new RegistrySetBuilder.LazyHolder<>(owner, resourcekey); + lazyholder.supplier = () -> cloner.clone((T)elementHolder.value(), patchProvider, targetProvider.get()); map.put(resourcekey, lazyholder); }); -- HolderLookup.RegistryLookup registrylookup1 = p_313198_.lookupOrThrow(p_313093_); -+ HolderLookup.RegistryLookup registrylookup1 = p_313198_.lookup(p_313093_).orElse(null); +- HolderLookup.RegistryLookup registrylookup1 = fallbackProvider.lookupOrThrow(registryKey); ++ HolderLookup.RegistryLookup registrylookup1 = fallbackProvider.lookup(registryKey).orElse(null); + Lifecycle lifecycle = registrylookup.registryLifecycle(); + if (registrylookup1 != null) { - registrylookup1.listElements().forEach(p_308430_ -> { - ResourceKey resourcekey = p_308430_.key(); - map.computeIfAbsent(resourcekey, p_308437_ -> { -@@ -196,7 +_,8 @@ + registrylookup1.listElements().forEach(elementHolder -> { + ResourceKey resourcekey = elementHolder.key(); + map.computeIfAbsent(resourcekey, key -> { +@@ -199,7 +_,8 @@ return lazyholder; }); }); - Lifecycle lifecycle = registrylookup.registryLifecycle().add(registrylookup1.registryLifecycle()); + lifecycle = registrylookup.registryLifecycle().add(registrylookup1.registryLifecycle()); + } - return lookupFromMap(p_313093_, lifecycle, p_312548_, map); + return lookupFromMap(registryKey, lifecycle, owner, map); } } -@@ -265,6 +_,11 @@ +@@ -275,6 +_,11 @@ @Override - public HolderGetter lookup(ResourceKey> p_255961_) { - return (HolderGetter)BuildState.this.registries.getOrDefault(p_255961_.identifier(), BuildState.this.lookup); + public HolderGetter lookup(final ResourceKey> key) { + return (HolderGetter)BuildState.this.registries.getOrDefault(key.identifier(), BuildState.this.lookup); + } + + @Override diff --git a/patches/minecraft/net/minecraft/core/RegistrySynchronization.java.patch b/patches/minecraft/net/minecraft/core/RegistrySynchronization.java.patch index e9f27461d4..21d15b04a3 100644 --- a/patches/minecraft/net/minecraft/core/RegistrySynchronization.java.patch +++ b/patches/minecraft/net/minecraft/core/RegistrySynchronization.java.patch @@ -13,4 +13,4 @@ + ); public static void packRegistries( - DynamicOps p_330752_, + final DynamicOps ops, diff --git a/patches/minecraft/net/minecraft/core/dispenser/BoatDispenseItemBehavior.java.patch b/patches/minecraft/net/minecraft/core/dispenser/BoatDispenseItemBehavior.java.patch index d3e29aec3e..5ee5127611 100644 --- a/patches/minecraft/net/minecraft/core/dispenser/BoatDispenseItemBehavior.java.patch +++ b/patches/minecraft/net/minecraft/core/dispenser/BoatDispenseItemBehavior.java.patch @@ -3,10 +3,10 @@ @@ -29,18 +_,22 @@ double d2 = vec3.y() + direction.getStepY() * 1.125F; double d3 = vec3.z() + direction.getStepZ() * d0; - BlockPos blockpos = p_123375_.pos().relative(direction); + BlockPos blockpos = source.pos().relative(direction); + AbstractBoat abstractboat = this.type.create(serverlevel, EntitySpawnReason.DISPENSER); + if (abstractboat == null) { -+ return this.defaultDispenseItemBehavior.dispense(p_123375_, p_123376_); ++ return this.defaultDispenseItemBehavior.dispense(source, dispensed); + } + abstractboat.setYRot(direction.toYRot()); double d4; @@ -16,7 +16,7 @@ } else { - if (!serverlevel.getBlockState(blockpos).isAir() || !serverlevel.getFluidState(blockpos.below()).is(FluidTags.WATER)) { + if (!serverlevel.getBlockState(blockpos).isAir() || !abstractboat.canBoatInFluid(serverlevel.getFluidState(blockpos.below()))) { - return this.defaultDispenseItemBehavior.dispense(p_123375_, p_123376_); + return this.defaultDispenseItemBehavior.dispense(source, dispensed); } d4 = 0.0; @@ -25,4 +25,4 @@ - AbstractBoat abstractboat = this.type.create(serverlevel, EntitySpawnReason.DISPENSER); if (abstractboat != null) { abstractboat.setInitialPos(d1, d2 + d4, d3); - EntityType.createDefaultStackConfig(serverlevel, p_123376_, null).accept(abstractboat); + EntityType.createDefaultStackConfig(serverlevel, dispensed, null).accept(abstractboat); diff --git a/patches/minecraft/net/minecraft/core/dispenser/DispenseItemBehavior.java.patch b/patches/minecraft/net/minecraft/core/dispenser/DispenseItemBehavior.java.patch index 03ace695b3..eac5f4ca9a 100644 --- a/patches/minecraft/net/minecraft/core/dispenser/DispenseItemBehavior.java.patch +++ b/patches/minecraft/net/minecraft/core/dispenser/DispenseItemBehavior.java.patch @@ -1,22 +1,22 @@ --- a/net/minecraft/core/dispenser/DispenseItemBehavior.java +++ b/net/minecraft/core/dispenser/DispenseItemBehavior.java -@@ -179,7 +_,7 @@ - DispensibleContainerItem dispensiblecontaineritem = (DispensibleContainerItem)p_334276_.getItem(); - BlockPos blockpos = p_334868_.pos().relative(p_334868_.state().getValue(DispenserBlock.FACING)); - Level level = p_334868_.level(); +@@ -148,7 +_,7 @@ + DispensibleContainerItem dispensiblecontaineritem = (DispensibleContainerItem)dispensed.getItem(); + BlockPos blockpos = source.pos().relative(source.state().getValue(DispenserBlock.FACING)); + Level level = source.level(); - if (dispensiblecontaineritem.emptyContents(null, level, blockpos, null)) { -+ if (dispensiblecontaineritem.emptyContents(null, level, blockpos, null, p_334276_)) { - dispensiblecontaineritem.checkExtraContent(null, level, p_334276_, blockpos); - return this.consumeWithRemainder(p_334868_, p_334276_, new ItemStack(Items.BUCKET)); ++ if (dispensiblecontaineritem.emptyContents(null, level, blockpos, null, dispensed)) { + dispensiblecontaineritem.checkExtraContent(null, level, dispensed, blockpos); + return this.consumeWithRemainder(source, dispensed, new ItemStack(Items.BUCKET)); } else { -@@ -230,8 +_,9 @@ +@@ -199,8 +_,9 @@ } else if (CampfireBlock.canLight(blockstate) || CandleBlock.canLight(blockstate) || CandleCakeBlock.canLight(blockstate)) { serverlevel.setBlockAndUpdate(blockpos, blockstate.setValue(BlockStateProperties.LIT, true)); serverlevel.gameEvent(null, GameEvent.BLOCK_CHANGE, blockpos); - } else if (blockstate.getBlock() instanceof TntBlock) { - if (TntBlock.prime(serverlevel, blockpos)) { -+ } else if (blockstate.isFlammable(serverlevel, blockpos, p_333645_.state().getValue(DispenserBlock.FACING).getOpposite())) { -+ if (blockstate.onCaughtFire(serverlevel, blockpos, p_333645_.state().getValue(DispenserBlock.FACING).getOpposite(), null)) { ++ } else if (blockstate.isFlammable(serverlevel, blockpos, source.state().getValue(DispenserBlock.FACING).getOpposite())) { ++ if (blockstate.onCaughtFire(serverlevel, blockpos, source.state().getValue(DispenserBlock.FACING).getOpposite(), null)) { + if (blockstate.getBlock() instanceof TntBlock) serverlevel.removeBlock(blockpos, false); } else { diff --git a/patches/minecraft/net/minecraft/core/particles/BlockParticleOption.java.patch b/patches/minecraft/net/minecraft/core/particles/BlockParticleOption.java.patch index 651e4c43f5..34908fbd79 100644 --- a/patches/minecraft/net/minecraft/core/particles/BlockParticleOption.java.patch +++ b/patches/minecraft/net/minecraft/core/particles/BlockParticleOption.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/core/particles/BlockParticleOption.java +++ b/net/minecraft/core/particles/BlockParticleOption.java -@@ -35,4 +_,15 @@ +@@ -37,4 +_,15 @@ public BlockState getState() { return this.state; } diff --git a/patches/minecraft/net/minecraft/core/particles/ItemParticleOption.java.patch b/patches/minecraft/net/minecraft/core/particles/ItemParticleOption.java.patch deleted file mode 100644 index b4a87ed6d0..0000000000 --- a/patches/minecraft/net/minecraft/core/particles/ItemParticleOption.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/minecraft/core/particles/ItemParticleOption.java -+++ b/net/minecraft/core/particles/ItemParticleOption.java -@@ -25,7 +_,7 @@ - throw new IllegalArgumentException("Empty stacks are not allowed"); - } else { - this.type = p_123705_; -- this.itemStack = p_123706_; -+ this.itemStack = p_123706_.copy(); // Forge: Fix stack updating after the fact causing particle changes. - } - } - diff --git a/patches/minecraft/net/minecraft/core/registries/BuiltInRegistries.java.patch b/patches/minecraft/net/minecraft/core/registries/BuiltInRegistries.java.patch index b67426a668..b763fd20a7 100644 --- a/patches/minecraft/net/minecraft/core/registries/BuiltInRegistries.java.patch +++ b/patches/minecraft/net/minecraft/core/registries/BuiltInRegistries.java.patch @@ -1,22 +1,27 @@ --- a/net/minecraft/core/registries/BuiltInRegistries.java +++ b/net/minecraft/core/registries/BuiltInRegistries.java -@@ -294,7 +_,9 @@ - ) { - Bootstrap.checkBootstrapCalled(() -> "registry " + p_259230_.identifier()); - Identifier identifier = p_259230_.identifier(); -- LOADERS.put(identifier, () -> p_259210_.run(p_260327_)); -+ var maybeWrapped = net.minecraftforge.registries.GameData.getWrapper(p_259230_, p_260327_); -+ p_260327_ = maybeWrapped; -+ LOADERS.put(identifier, () -> p_259210_.run(maybeWrapped)); - WRITABLE_REGISTRY.register((ResourceKey)p_259230_, p_260327_, RegistrationInfo.BUILT_IN); - return p_260327_; +@@ -385,11 +_,13 @@ } -@@ -330,7 +_,7 @@ - if (p_448623_ instanceof DefaultedRegistry) { - Identifier identifier = ((DefaultedRegistry)p_448623_).getDefaultKey(); -- Objects.requireNonNull(p_448623_.getValue(identifier), "Missing default of DefaultedMappedRegistry: " + identifier); -+ Objects.requireNonNull(p_448623_.getValue(identifier), "Missing default of DefaultedMappedRegistry: " + p_448623_.key() + " - " + identifier); + private static > R internalRegister( +- final ResourceKey> name, final R registry, final BuiltInRegistries.RegistryBootstrap loader ++ final ResourceKey> name, R registry, final BuiltInRegistries.RegistryBootstrap loader + ) { + Bootstrap.checkBootstrapCalled(() -> "registry " + name.identifier()); + Identifier identifier = name.identifier(); +- LOADERS.put(identifier, () -> loader.run(registry)); ++ var maybeWrapped = net.minecraftforge.registries.GameData.getWrapper(name, registry); ++ registry = maybeWrapped; ++ LOADERS.put(identifier, () -> loader.run(maybeWrapped)); + WRITABLE_REGISTRY.register((ResourceKey)name, registry, RegistrationInfo.BUILT_IN); + return registry; + } +@@ -425,7 +_,7 @@ + + if (r instanceof DefaultedRegistry) { + Identifier identifier = ((DefaultedRegistry)r).getDefaultKey(); +- Objects.requireNonNull(r.getValue(identifier), "Missing default of DefaultedMappedRegistry: " + identifier); ++ Objects.requireNonNull(r.getValue(identifier), "Missing default of DefaultedMappedRegistry: " + r.key() + " - " + identifier); } }); } diff --git a/patches/minecraft/net/minecraft/core/registries/Registries.java.patch b/patches/minecraft/net/minecraft/core/registries/Registries.java.patch index 7b27eae612..19ddbb8e35 100644 --- a/patches/minecraft/net/minecraft/core/registries/Registries.java.patch +++ b/patches/minecraft/net/minecraft/core/registries/Registries.java.patch @@ -1,17 +1,11 @@ --- a/net/minecraft/core/registries/Registries.java +++ b/net/minecraft/core/registries/Registries.java -@@ -295,10 +_,14 @@ +@@ -323,6 +_,8 @@ } - public static String elementsDirPath(ResourceKey> p_343743_) { -+ if (!p_343743_.identifier().getNamespace().equals("minecraft")) -+ return p_343743_.identifier().getNamespace() + '/' + p_343743_.identifier().getPath(); - return p_343743_.identifier().getPath(); + private static String registryDirPath(final ResourceKey> registryKey) { ++ if (!registryKey.identifier().getNamespace().equals("minecraft")) ++ return registryKey.identifier().getNamespace() + '/' + registryKey.identifier().getPath(); + return registryKey.identifier().getPath(); } - public static String tagsDirPath(ResourceKey> p_343025_) { -+ if (!p_343025_.identifier().getNamespace().equals("minecraft")) -+ return "tags/" + p_343025_.identifier().getNamespace() + '/' + p_343025_.identifier().getPath(); - return "tags/" + p_343025_.identifier().getPath(); - } - } diff --git a/patches/minecraft/net/minecraft/data/DataGenerator.java.patch b/patches/minecraft/net/minecraft/data/DataGenerator.java.patch index e7fa704d6f..8ef665c9d2 100644 --- a/patches/minecraft/net/minecraft/data/DataGenerator.java.patch +++ b/patches/minecraft/net/minecraft/data/DataGenerator.java.patch @@ -1,26 +1,17 @@ --- a/net/minecraft/data/DataGenerator.java +++ b/net/minecraft/data/DataGenerator.java -@@ -21,6 +_,7 @@ - final Map providersToRun = new LinkedHashMap<>(); - private final WorldVersion version; - private final boolean alwaysGenerate; +@@ -19,6 +_,7 @@ + protected final PackOutput vanillaPackOutput; + protected final Set allProviderIds = new HashSet<>(); + protected final Map providersToRun = new LinkedHashMap<>(); + private final Map providersView = java.util.Collections.unmodifiableMap(this.providersToRun); - public DataGenerator(Path p_251724_, WorldVersion p_250554_, boolean p_251323_) { - this.rootOutputFolder = p_251724_; -@@ -38,6 +_,7 @@ - LOGGER.debug("Generator {} already run for version {}", p_254418_, this.version.name()); - } else { - LOGGER.info("Starting provider: {}", p_254418_); -+ net.minecraftforge.fml.StartupMessageManager.addModMessage("Generating: " + p_254418_); - stopwatch1.start(); - hashcache.applyUpdate(hashcache.generateUpdate(p_254418_, p_253750_::run).join()); - stopwatch1.stop(); -@@ -56,6 +_,35 @@ - public DataGenerator.PackGenerator getBuiltinDatapack(boolean p_253826_, String p_254134_) { - Path path = this.vanillaPackOutput.getOutputFolder(PackOutput.Target.DATA_PACK).resolve("minecraft").resolve("datapacks").resolve(p_254134_); - return new DataGenerator.PackGenerator(p_253826_, p_254134_, new PackOutput(path)); -+ } + public DataGenerator(final Path output) { + this.vanillaPackOutput = new PackOutput(output); +@@ -34,6 +_,35 @@ + Path path = this.vanillaPackOutput.getOutputFolder(PackOutput.Target.DATA_PACK).resolve("minecraft").resolve("datapacks").resolve(packId); + return new DataGenerator.PackGenerator(toRun, packId, new PackOutput(path)); + } + public Map getProvidersView() { + return this.providersView; + } @@ -30,7 +21,7 @@ + } + + public PackOutput getPackOutput(String path) { -+ return new PackOutput(rootOutputFolder.resolve(path)); ++ return new PackOutput(getPackOutput().getOutputFolder().resolve(path)); + } + + public T addProvider(boolean run, DataProvider.Factory factory) { @@ -49,6 +40,23 @@ + } + + return provider; - } ++ } static { + Bootstrap.bootStrap(); +@@ -61,6 +_,7 @@ + DataGenerator.LOGGER.debug("Generator {} already run for version {}", providerId, this.version.name()); + } else { + DataGenerator.LOGGER.info("Starting provider: {}", providerId); ++ net.minecraftforge.fml.StartupMessageManager.addModMessage("Generating: " + providerId); + stopwatch1.start(); + hashcache.applyUpdate(hashcache.generateUpdate(providerId, provider::run).join()); + stopwatch1.stop(); +@@ -112,6 +_,7 @@ + Stopwatch stopwatch1 = Stopwatch.createUnstarted(); + this.providersToRun.forEach((providerId, provider) -> { + DataGenerator.LOGGER.info("Starting uncached provider: {}", providerId); ++ net.minecraftforge.fml.StartupMessageManager.addModMessage("Generating: " + providerId); + stopwatch1.start(); + provider.run(CachedOutput.NO_CACHE).join(); + stopwatch1.stop(); diff --git a/patches/minecraft/net/minecraft/data/HashCache.java.patch b/patches/minecraft/net/minecraft/data/HashCache.java.patch index 6b67cc38cb..5efdd9058e 100644 --- a/patches/minecraft/net/minecraft/data/HashCache.java.patch +++ b/patches/minecraft/net/minecraft/data/HashCache.java.patch @@ -6,7 +6,7 @@ private final Map caches; + private final Map originalCaches; private final Set cachesToWrite = new HashSet<>(); - final Set cachePaths = new HashSet<>(); + private final Set cachePaths = new HashSet<>(); private final int initialCount; @@ -65,6 +_,7 @@ } @@ -17,16 +17,16 @@ } @@ -106,6 +_,8 @@ - this.caches.forEach((p_448628_, p_448629_) -> { - if (this.cachesToWrite.contains(p_448628_)) { - Path path = this.getProviderCachePath(p_448628_); + this.caches.forEach((providerId, cache) -> { + if (this.cachesToWrite.contains(providerId)) { + Path path = this.getProviderCachePath(providerId); + // Forge: Only rewrite the cache file if it changed or is missing -+ if (!p_448629_.equals(this.originalCaches.get(p_448628_)) || !Files.exists(path)) - p_448629_.save(this.rootDir, path, DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(ZonedDateTime.now()) + "\t" + p_448628_); ++ if (!cache.equals(this.originalCaches.get(providerId)) || !Files.exists(path)) + cache.save(this.rootDir, path, DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(ZonedDateTime.now()) + "\t" + providerId); } -@@ -221,10 +_,11 @@ - bufferedwriter.write(p_236145_); +@@ -224,10 +_,11 @@ + bufferedwriter.write(extraHeaderInfo); bufferedwriter.newLine(); - for (Entry entry : this.data.entrySet()) { @@ -34,8 +34,8 @@ + for (Entry entry : this.data.entrySet().stream().sorted(Map.Entry.comparingByKey()).toList()) { bufferedwriter.write(entry.getValue().toString()); bufferedwriter.write(32); -- bufferedwriter.write(p_236143_.relativize(entry.getKey()).toString()); -+ bufferedwriter.write(p_236143_.relativize(entry.getKey()).toString().replace("\\", "/")); // Forge: Standardize file paths. +- bufferedwriter.write(rootDir.relativize(entry.getKey()).toString()); ++ bufferedwriter.write(rootDir.relativize(entry.getKey()).toString().replace("\\", "/")); // Forge: Standardize file paths. bufferedwriter.newLine(); } } catch (IOException ioexception) { diff --git a/patches/minecraft/net/minecraft/data/Main.java.patch b/patches/minecraft/net/minecraft/data/Main.java.patch index efaa93b791..2329f4aa1c 100644 --- a/patches/minecraft/net/minecraft/data/Main.java.patch +++ b/patches/minecraft/net/minecraft/data/Main.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/data/Main.java +++ b/net/minecraft/data/Main.java -@@ -76,14 +_,17 @@ +@@ -78,14 +_,17 @@ OptionSpec optionspec4 = optionparser.accepts("all", "Include all generators"); OptionSpec optionspec5 = optionparser.accepts("output", "Output folder").withRequiredArg().defaultsTo("generated"); OptionSpec optionspec6 = optionparser.accepts("input", "Input folder").withRequiredArg(); + var loader = net.minecraftforge.data.loading.DatagenModLoader.setup(optionparser, false); - OptionSet optionset = optionparser.parse(p_129669_); + OptionSet optionset = optionparser.parse(args); - if (!optionset.has(optionspec) && optionset.hasOptions()) { + if (!optionset.has(optionspec) && optionset.hasOptions() && loader.hasArgs(optionset)) { Path path = Paths.get(optionspec5.value(optionset)); @@ -13,9 +13,9 @@ boolean flag1 = flag || optionset.has(optionspec1); boolean flag2 = flag || optionset.has(optionspec2); boolean flag3 = flag || optionset.has(optionspec3); - Collection collection = optionset.valuesOf(optionspec6).stream().map(p_129659_ -> Paths.get(p_129659_)).toList(); -+ if (!loader.run(optionset, path, collection, flag1, flag, flag2, flag3, true)) + Collection collection = optionset.valuesOf(optionspec6).stream().map(x$0 -> Paths.get(x$0)).toList(); ++ if (!loader.run(optionset, path, collection, flag1, flag, flag2, flag3)) + return; - DataGenerator datagenerator = new DataGenerator(path, SharedConstants.getCurrentVersion(), true); - addServerProviders(datagenerator, collection, flag1, flag2, flag3); - datagenerator.run(); + DataGenerator datagenerator = new DataGenerator.Cached(path, SharedConstants.getCurrentVersion(), true); + addServerDefinitionProviders(datagenerator, flag1, flag3); + addServerConverters(datagenerator, collection, flag1, flag2); diff --git a/patches/minecraft/net/minecraft/data/loot/BlockLootSubProvider.java.patch b/patches/minecraft/net/minecraft/data/loot/BlockLootSubProvider.java.patch index f801a3041e..80f7c557df 100644 --- a/patches/minecraft/net/minecraft/data/loot/BlockLootSubProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/loot/BlockLootSubProvider.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/data/loot/BlockLootSubProvider.java +++ b/net/minecraft/data/loot/BlockLootSubProvider.java -@@ -718,12 +_,16 @@ +@@ -721,12 +_,16 @@ protected abstract void generate(); @@ -9,7 +9,7 @@ + } + @Override - public void generate(BiConsumer, LootTable.Builder> p_249322_) { + public void generate(final BiConsumer, LootTable.Builder> output) { this.generate(); Set> set = new HashSet<>(); diff --git a/patches/minecraft/net/minecraft/data/loot/EntityLootSubProvider.java.patch b/patches/minecraft/net/minecraft/data/loot/EntityLootSubProvider.java.patch index c891e46b5a..143b382b8e 100644 --- a/patches/minecraft/net/minecraft/data/loot/EntityLootSubProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/loot/EntityLootSubProvider.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/data/loot/EntityLootSubProvider.java +++ b/net/minecraft/data/loot/EntityLootSubProvider.java -@@ -121,12 +_,16 @@ +@@ -119,12 +_,16 @@ public abstract void generate(); @@ -9,7 +9,7 @@ + } + @Override - public void generate(BiConsumer, LootTable.Builder> p_251751_) { + public void generate(final BiConsumer, LootTable.Builder> output) { this.generate(); Set> set = new HashSet<>(); - BuiltInRegistries.ENTITY_TYPE @@ -17,5 +17,5 @@ + this.getKnownEntityTypes() + .map(EntityType::builtInRegistryHolder) .forEach( - p_358214_ -> { - EntityType entitytype = p_358214_.value(); + holder -> { + EntityType entitytype = holder.value(); diff --git a/patches/minecraft/net/minecraft/data/loot/LootTableProvider.java.patch b/patches/minecraft/net/minecraft/data/loot/LootTableProvider.java.patch index 1fef36d81d..5debbdb428 100644 --- a/patches/minecraft/net/minecraft/data/loot/LootTableProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/loot/LootTableProvider.java.patch @@ -1,35 +1,28 @@ --- a/net/minecraft/data/loot/LootTableProvider.java +++ b/net/minecraft/data/loot/LootTableProvider.java -@@ -61,7 +_,7 @@ - private CompletableFuture run(CachedOutput p_327970_, HolderLookup.Provider p_331092_) { +@@ -60,7 +_,7 @@ + private CompletableFuture run(final CachedOutput cache, final HolderLookup.Provider registries) { WritableRegistry writableregistry = new MappedRegistry<>(Registries.LOOT_TABLE, Lifecycle.experimental()); Map map = new Object2ObjectOpenHashMap<>(); -- this.subProviders.forEach(p_341016_ -> p_341016_.provider().apply(p_331092_).generate((p_448699_, p_448700_) -> { -+ this.getTables().forEach(p_341016_ -> p_341016_.provider().apply(p_331092_).generate((p_448699_, p_448700_) -> { - Identifier identifier = sequenceIdForLootTable(p_448699_); +- this.subProviders.forEach(subProvider -> subProvider.provider().apply(registries).generate((id, lootTable) -> { ++ this.getTables().forEach(subProvider -> subProvider.provider().apply(registries).generate((id, lootTable) -> { + Identifier identifier = sequenceIdForLootTable(id); Identifier identifier1 = map.put(RandomSequence.seedForKey(identifier), identifier); if (identifier1 != null) { -@@ -77,18 +_,8 @@ +@@ -76,11 +_,8 @@ HolderGetter.Provider holdergetter$provider = new RegistryAccess.ImmutableRegistryAccess(List.of(writableregistry)).freeze(); - ValidationContext validationcontext = new ValidationContext(problemreporter$collector, LootContextParamSets.ALL_PARAMS, holdergetter$provider); + ValidationContextSource validationcontextsource = new ValidationContextSource(problemreporter$collector, holdergetter$provider); - for (ResourceKey resourcekey : Sets.difference(this.requiredTables, writableregistry.registryKeySet())) { - problemreporter$collector.report(new LootTableProvider.MissingTableProblem(resourcekey)); - } -+ validate(writableregistry, validationcontext, problemreporter$collector); ++ validate(writableregistry, validationcontextsource, problemreporter$collector); -- writableregistry.listElements() -- .forEach( -- p_405062_ -> p_405062_.value() -- .validate( -- validationcontext.setContextKeySet(p_405062_.value().getParamSet()) -- .enterElement(new ProblemReporter.RootElementPathElement(p_405062_.key()), p_405062_.key()) -- ) -- ); +- LootDataType.TABLE.runValidation(validationcontextsource, writableregistry); if (!problemreporter$collector.isEmpty()) { - problemreporter$collector.forEach( - (p_405059_, p_405060_) -> LOGGER.warn("Found validation problem in {}: {}", p_405059_, p_405060_.description()) -@@ -111,6 +_,21 @@ + problemreporter$collector.forEach((id, problem) -> LOGGER.warn("Found validation problem in {}: {}", id, problem.description())); + throw new IllegalStateException("Failed to validate loot tables, see logs"); +@@ -101,6 +_,18 @@ @Override public final String getName() { return "Loot Tables"; @@ -39,15 +32,12 @@ + return this.subProviders; + } + -+ protected void validate(net.minecraft.core.Registry map, ValidationContext validationcontext, ProblemReporter report) { ++ protected void validate(net.minecraft.core.Registry map, ValidationContextSource context, ProblemReporter report) { + for (ResourceKey resourcekey : Sets.difference(this.requiredTables, map.registryKeySet())) { + report.report(new LootTableProvider.MissingTableProblem(resourcekey)); + } + -+ map.listElements().forEach(table -> table.value().validate( -+ validationcontext.setContextKeySet(table.value().getParamSet()) -+ .enterElement(new ProblemReporter.RootElementPathElement(table.key()), table.key()) -+ )); ++ LootDataType.TABLE.runValidation(context, map); } public record MissingTableProblem(ResourceKey id) implements ProblemReporter.Problem { diff --git a/patches/minecraft/net/minecraft/data/recipes/RecipeOutput.java.patch b/patches/minecraft/net/minecraft/data/recipes/RecipeOutput.java.patch index 42608fddb0..401351e3fa 100644 --- a/patches/minecraft/net/minecraft/data/recipes/RecipeOutput.java.patch +++ b/patches/minecraft/net/minecraft/data/recipes/RecipeOutput.java.patch @@ -4,7 +4,7 @@ import org.jspecify.annotations.Nullable; public interface RecipeOutput { -- void accept(ResourceKey> p_367162_, Recipe p_360758_, @Nullable AdvancementHolder p_361155_); +- void accept(ResourceKey> id, Recipe recipe, @Nullable AdvancementHolder advancement); + default void accept(ResourceKey> id, Recipe recipe, @Nullable AdvancementHolder advancement) { + if (advancement == null) { + accept(id, recipe, null, null); diff --git a/patches/minecraft/net/minecraft/data/recipes/RecipeProvider.java.patch b/patches/minecraft/net/minecraft/data/recipes/RecipeProvider.java.patch index 78e39d071b..9c93b96500 100644 --- a/patches/minecraft/net/minecraft/data/recipes/RecipeProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/recipes/RecipeProvider.java.patch @@ -1,32 +1,23 @@ --- a/net/minecraft/data/recipes/RecipeProvider.java +++ b/net/minecraft/data/recipes/RecipeProvider.java -@@ -787,7 +_,7 @@ - RecipeBuilder create(RecipeProvider p_363045_, ItemLike p_362746_, ItemLike p_364674_); - } +@@ -892,13 +_,13 @@ + } -- protected abstract static class Runner implements DataProvider { -+ public abstract static class Runner implements DataProvider { - private final PackOutput packOutput; - private final CompletableFuture registries; - -@@ -807,13 +_,13 @@ - final List> list = new ArrayList<>(); - RecipeOutput recipeoutput = new RecipeOutput() { @Override -- public void accept(ResourceKey> p_361204_, Recipe p_363495_, @Nullable AdvancementHolder p_364191_) { -+ public void accept(ResourceKey> p_361204_, Recipe p_363495_, net.minecraft.resources.@Nullable Identifier advancementId, com.google.gson.@Nullable JsonElement advancement) { - if (!set.add(p_361204_)) { - throw new IllegalStateException("Duplicate recipe " + p_361204_.identifier()); +- public void accept(final ResourceKey> id, final Recipe recipe, final @Nullable AdvancementHolder advancementHolder) { ++ public void accept(final ResourceKey> id, final Recipe recipe, net.minecraft.resources.@Nullable Identifier advancementId, com.google.gson.@Nullable JsonElement advancement) { + if (!set.add(id)) { + throw new IllegalStateException("Duplicate recipe " + id.identifier()); } else { - this.saveRecipe(p_361204_, p_363495_); -- if (p_364191_ != null) { -- this.saveAdvancement(p_364191_); + this.saveRecipe(id, recipe); +- if (advancementHolder != null) { +- this.saveAdvancement(advancementHolder); + if (advancement != null && advancementId != null) { + this.saveAdvancement(advancementId, advancement); } } } -@@ -828,7 +_,9 @@ +@@ -913,19 +_,26 @@ AdvancementHolder advancementholder = Advancement.Builder.recipeAdvancement() .addCriterion("impossible", CriteriaTriggers.IMPOSSIBLE.createCriterion(new ImpossibleTrigger.TriggerInstance())) .build(RecipeBuilder.ROOT_RECIPE_ADVANCEMENT); @@ -36,29 +27,23 @@ + this.saveAdvancement(advancementholder.id(), json); } - private void saveRecipe(ResourceKey> p_368864_, Recipe p_368184_) { -@@ -839,16 +_,19 @@ - ); + private void saveRecipe(final ResourceKey> id, final Recipe recipe) { + list.add(DataProvider.saveStable(cache, registries, Recipe.CODEC, recipe, packoutput$pathprovider.json(id.identifier()))); } -- private void saveAdvancement(AdvancementHolder p_361824_) { +- private void saveAdvancement(final AdvancementHolder advancementHolder) { + private void saveAdvancement(net.minecraft.resources.Identifier id, com.google.gson.JsonElement advancement) { list.add( DataProvider.saveStable( - p_363906_, -- p_362805_, -- Advancement.CODEC, -- p_361824_.value(), -- packoutput$pathprovider1.json(p_361824_.id()) -+ advancement, -+ packoutput$pathprovider1.json(id) +- cache, registries, Advancement.CODEC, advancementHolder.value(), packoutput$pathprovider1.json(advancementHolder.id()) ++ cache, advancement, packoutput$pathprovider1.json(id) ) ); + } + + @Override + public HolderLookup.Provider registry() { -+ return p_362805_; ++ return registries; } }; - this.createRecipeProvider(p_362805_, recipeoutput).buildRecipes(); + this.createRecipeProvider(registries, recipeoutput).buildRecipes(); diff --git a/patches/minecraft/net/minecraft/data/registries/RegistriesDatapackGenerator.java.patch b/patches/minecraft/net/minecraft/data/registries/RegistriesDatapackGenerator.java.patch index 2867c24686..ceec6566ec 100644 --- a/patches/minecraft/net/minecraft/data/registries/RegistriesDatapackGenerator.java.patch +++ b/patches/minecraft/net/minecraft/data/registries/RegistriesDatapackGenerator.java.patch @@ -6,13 +6,13 @@ private final CompletableFuture registries; + private final java.util.function.Predicate namespacePredicate; - public RegistriesDatapackGenerator(PackOutput p_256643_, CompletableFuture p_255780_) { -+ this(p_256643_, p_255780_, null); + public RegistriesDatapackGenerator(final PackOutput output, final CompletableFuture registries) { ++ this(output, registries, null); + } + -+ public RegistriesDatapackGenerator(PackOutput p_256643_, CompletableFuture p_255780_, @org.jetbrains.annotations.Nullable java.util.Set modIds) { - this.registries = p_255780_; - this.output = p_256643_; ++ public RegistriesDatapackGenerator(final PackOutput output, final CompletableFuture registries, @org.jetbrains.annotations.Nullable java.util.Set modIds) { + this.registries = registries; + this.output = output; + this.namespacePredicate = modIds == null ? namespace -> true : modIds::contains; + } + @@ -23,24 +23,22 @@ @Override @@ -33,8 +_,7 @@ - p_325918_ -> { - DynamicOps dynamicops = p_325918_.createSerializationContext(JsonOps.INSTANCE); + access -> { + DynamicOps dynamicops = access.createSerializationContext(JsonOps.INSTANCE); return CompletableFuture.allOf( - RegistryDataLoader.WORLDGEN_REGISTRIES - .stream() + RegistryDataLoader.getWorldGenAndDimensionStream() - .flatMap(p_256552_ -> this.dumpRegistryCap(p_255785_, p_325918_, dynamicops, (RegistryDataLoader.RegistryData)p_256552_).stream()) + .flatMap(v -> this.dumpRegistryCap(cache, access, dynamicops, (RegistryDataLoader.RegistryData)v).stream()) .toArray(CompletableFuture[]::new) ); -@@ -52,6 +_,7 @@ +@@ -52,11 +_,16 @@ PackOutput.PathProvider packoutput$pathprovider = this.output.createRegistryElementsPathProvider(resourcekey); return CompletableFuture.allOf( - p_358460_.listElements() + registry.listElements() + .filter(holder -> shouldDump(holder.key())) - .>map( - p_448721_ -> dumpValue( - packoutput$pathprovider.json(p_448721_.key().identifier()), -@@ -65,6 +_,10 @@ + .>map(e -> dumpValue(packoutput$pathprovider.json(e.key().identifier()), cache, writeOps, v.elementCodec(), e.value())) + .toArray(CompletableFuture[]::new) ); } ); diff --git a/patches/minecraft/net/minecraft/data/registries/RegistryPatchGenerator.java.patch b/patches/minecraft/net/minecraft/data/registries/RegistryPatchGenerator.java.patch index 09e3ac09cf..9adc5a4240 100644 --- a/patches/minecraft/net/minecraft/data/registries/RegistryPatchGenerator.java.patch +++ b/patches/minecraft/net/minecraft/data/registries/RegistryPatchGenerator.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/data/registries/RegistryPatchGenerator.java +++ b/net/minecraft/data/registries/RegistryPatchGenerator.java @@ -21,7 +_,7 @@ - p_309945_ -> { + parent -> { RegistryAccess.Frozen registryaccess$frozen = RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY); Cloner.Factory cloner$factory = new Cloner.Factory(); -- RegistryDataLoader.WORLDGEN_REGISTRIES.forEach(p_313050_ -> p_313050_.runWithArguments(cloner$factory::addCodec)); -+ RegistryDataLoader.getWorldGenAndDimensionStream().forEach(p_313050_ -> p_313050_.runWithArguments(cloner$factory::addCodec)); - RegistrySetBuilder.PatchedRegistries registrysetbuilder$patchedregistries = p_310262_.buildPatch( - registryaccess$frozen, p_309945_, cloner$factory +- RegistryDataLoader.WORLDGEN_REGISTRIES.forEach(registryData -> registryData.runWithArguments(cloner$factory::addCodec)); ++ RegistryDataLoader.getWorldGenAndDimensionStream().forEach(registryData -> registryData.runWithArguments(cloner$factory::addCodec)); + RegistrySetBuilder.PatchedRegistries registrysetbuilder$patchedregistries = packBuilder.buildPatch( + registryaccess$frozen, parent, cloner$factory ); diff --git a/patches/minecraft/net/minecraft/data/registries/VanillaRegistries.java.patch b/patches/minecraft/net/minecraft/data/registries/VanillaRegistries.java.patch index 2004582702..3aac66dc71 100644 --- a/patches/minecraft/net/minecraft/data/registries/VanillaRegistries.java.patch +++ b/patches/minecraft/net/minecraft/data/registries/VanillaRegistries.java.patch @@ -1,14 +1,14 @@ --- a/net/minecraft/data/registries/VanillaRegistries.java +++ b/net/minecraft/data/registries/VanillaRegistries.java -@@ -94,6 +_,7 @@ - .add(Registries.CAT_VARIANT, CatVariants::bootstrap) - .add(Registries.DIALOG, Dialogs::bootstrap) - .add(Registries.TIMELINE, Timelines::bootstrap); +@@ -108,6 +_,7 @@ + .add(Registries.TIMELINE, Timelines::bootstrap) + .add(Registries.VILLAGER_TRADE, VillagerTrades::bootstrap) + .add(Registries.TRADE_SET, TradeSets::bootstrap); + public static final List>> DATAPACK_REGISTRY_KEYS = BUILDER.getEntryKeys(); - private static void validateThatAllBiomeFeaturesHaveBiomeFilter(HolderLookup.Provider p_256242_) { - validateThatAllBiomeFeaturesHaveBiomeFilter(p_256242_.lookupOrThrow(Registries.PLACED_FEATURE), p_256242_.lookupOrThrow(Registries.BIOME)); -@@ -125,5 +_,9 @@ + private static void validateThatAllBiomeFeaturesHaveBiomeFilter(final HolderLookup.Provider provider) { + validateThatAllBiomeFeaturesHaveBiomeFilter(provider.lookupOrThrow(Registries.PLACED_FEATURE), provider.lookupOrThrow(Registries.BIOME)); +@@ -139,5 +_,9 @@ HolderLookup.Provider holderlookup$provider = BUILDER.build(registryaccess$frozen); validateThatAllBiomeFeaturesHaveBiomeFilter(holderlookup$provider); return holderlookup$provider; diff --git a/patches/minecraft/net/minecraft/data/tags/BannerPatternTagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/BannerPatternTagsProvider.java.patch index ae99ba015b..6fc2e16a2b 100644 --- a/patches/minecraft/net/minecraft/data/tags/BannerPatternTagsProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/BannerPatternTagsProvider.java.patch @@ -6,12 +6,12 @@ public class BannerPatternTagsProvider extends KeyTagProvider { + /** @deprecated Forge: Use the {@linkplain #BannerPatternTagsProvider(PackOutput, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant} */ + @Deprecated - public BannerPatternTagsProvider(PackOutput p_256451_, CompletableFuture p_256420_) { - super(p_256451_, Registries.BANNER_PATTERN, p_256420_); + public BannerPatternTagsProvider(final PackOutput output, final CompletableFuture lookupProvider) { + super(output, Registries.BANNER_PATTERN, lookupProvider); + } + -+ public BannerPatternTagsProvider(PackOutput p_256451_, CompletableFuture p_256420_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { -+ super(p_256451_, Registries.BANNER_PATTERN, p_256420_, modId, existingFileHelper); ++ public BannerPatternTagsProvider(final PackOutput output, final CompletableFuture lookupProvider, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { ++ super(output, Registries.BANNER_PATTERN, lookupProvider, modId, existingFileHelper); } @Override diff --git a/patches/minecraft/net/minecraft/data/tags/BiomeTagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/BiomeTagsProvider.java.patch index c37ccb8d70..fd881dc899 100644 --- a/patches/minecraft/net/minecraft/data/tags/BiomeTagsProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/BiomeTagsProvider.java.patch @@ -1,13 +1,13 @@ --- a/net/minecraft/data/tags/BiomeTagsProvider.java +++ b/net/minecraft/data/tags/BiomeTagsProvider.java @@ -16,6 +_,10 @@ - super(p_255800_, Registries.BIOME, p_256205_); + super(output, Registries.BIOME, lookupProvider); } -+ public BiomeTagsProvider(PackOutput p_255800_, CompletableFuture p_256205_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { -+ super(p_255800_, Registries.BIOME, p_256205_, modId, existingFileHelper); ++ public BiomeTagsProvider(final PackOutput output, final CompletableFuture lookupProvider, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { ++ super(output, Registries.BIOME, lookupProvider, modId, existingFileHelper); + } + @Override - protected void addTags(HolderLookup.Provider p_256485_) { + protected void addTags(final HolderLookup.Provider registries) { this.tag(BiomeTags.IS_DEEP_OCEAN).add(Biomes.DEEP_FROZEN_OCEAN).add(Biomes.DEEP_COLD_OCEAN).add(Biomes.DEEP_OCEAN).add(Biomes.DEEP_LUKEWARM_OCEAN); diff --git a/patches/minecraft/net/minecraft/data/tags/DamageTypeTagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/DamageTypeTagsProvider.java.patch index 1422630273..93da233a40 100644 --- a/patches/minecraft/net/minecraft/data/tags/DamageTypeTagsProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/DamageTypeTagsProvider.java.patch @@ -1,13 +1,13 @@ --- a/net/minecraft/data/tags/DamageTypeTagsProvider.java +++ b/net/minecraft/data/tags/DamageTypeTagsProvider.java @@ -13,6 +_,10 @@ - super(p_270719_, Registries.DAMAGE_TYPE, p_270256_); + super(output, Registries.DAMAGE_TYPE, lookupProvider); } -+ public DamageTypeTagsProvider(PackOutput p_270719_, CompletableFuture p_270256_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { -+ super(p_270719_, Registries.DAMAGE_TYPE, p_270256_, modId, existingFileHelper); ++ public DamageTypeTagsProvider(final PackOutput output, final CompletableFuture lookupProvider, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { ++ super(output, Registries.DAMAGE_TYPE, lookupProvider, modId, existingFileHelper); + } + @Override - protected void addTags(HolderLookup.Provider p_270108_) { + protected void addTags(final HolderLookup.Provider registries) { this.tag(DamageTypeTags.DAMAGES_HELMET).add(DamageTypes.FALLING_ANVIL, DamageTypes.FALLING_BLOCK, DamageTypes.FALLING_STALACTITE); diff --git a/patches/minecraft/net/minecraft/data/tags/EnchantmentTagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/EnchantmentTagsProvider.java.patch index 9ec606e2a8..22436bfd5e 100644 --- a/patches/minecraft/net/minecraft/data/tags/EnchantmentTagsProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/EnchantmentTagsProvider.java.patch @@ -1,13 +1,13 @@ --- a/net/minecraft/data/tags/EnchantmentTagsProvider.java +++ b/net/minecraft/data/tags/EnchantmentTagsProvider.java @@ -17,6 +_,10 @@ - super(p_332794_, Registries.ENCHANTMENT, p_331070_); + super(output, Registries.ENCHANTMENT, lookupProvider); } -+ public EnchantmentTagsProvider(PackOutput p_332794_, CompletableFuture p_331070_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { -+ super(p_332794_, Registries.ENCHANTMENT, p_331070_, modId, existingFileHelper); ++ public EnchantmentTagsProvider(final PackOutput output, final CompletableFuture lookupProvider, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { ++ super(output, Registries.ENCHANTMENT, lookupProvider, modId, existingFileHelper); + } + - protected void tooltipOrder(HolderLookup.Provider p_335292_, ResourceKey... p_343612_) { - this.tag(EnchantmentTags.TOOLTIP_ORDER).add(p_343612_); - Set> set = Set.of(p_343612_); + protected void tooltipOrder(final HolderLookup.Provider registries, final ResourceKey... order) { + this.tag(EnchantmentTags.TOOLTIP_ORDER).add(order); + Set> set = Set.of(order); diff --git a/patches/minecraft/net/minecraft/data/tags/EntityTypeTagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/EntityTypeTagsProvider.java.patch index e1aa248ee1..61dfb52c0e 100644 --- a/patches/minecraft/net/minecraft/data/tags/EntityTypeTagsProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/EntityTypeTagsProvider.java.patch @@ -1,13 +1,13 @@ --- a/net/minecraft/data/tags/EntityTypeTagsProvider.java +++ b/net/minecraft/data/tags/EntityTypeTagsProvider.java @@ -12,6 +_,10 @@ - super(p_256095_, Registries.ENTITY_TYPE, p_256572_, p_256665_ -> p_256665_.builtInRegistryHolder().key()); + super(output, Registries.ENTITY_TYPE, lookupProvider, e -> e.builtInRegistryHolder().key()); } -+ public EntityTypeTagsProvider(PackOutput p_256095_, CompletableFuture p_256572_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { -+ super(p_256095_, Registries.ENTITY_TYPE, p_256572_, p_256665_ -> p_256665_.builtInRegistryHolder().key(), modId, existingFileHelper); ++ public EntityTypeTagsProvider(final PackOutput output, final CompletableFuture lookupProvider, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { ++ super(output, Registries.ENTITY_TYPE, lookupProvider, e -> e.builtInRegistryHolder().key(), modId, existingFileHelper); + } + @Override - protected void addTags(HolderLookup.Provider p_255894_) { + protected void addTags(final HolderLookup.Provider registries) { this.tag(EntityTypeTags.SKELETONS) diff --git a/patches/minecraft/net/minecraft/data/tags/FlatLevelGeneratorPresetTagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/FlatLevelGeneratorPresetTagsProvider.java.patch index 2b5be808c0..b61c6d8e24 100644 --- a/patches/minecraft/net/minecraft/data/tags/FlatLevelGeneratorPresetTagsProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/FlatLevelGeneratorPresetTagsProvider.java.patch @@ -1,13 +1,13 @@ --- a/net/minecraft/data/tags/FlatLevelGeneratorPresetTagsProvider.java +++ b/net/minecraft/data/tags/FlatLevelGeneratorPresetTagsProvider.java @@ -13,6 +_,10 @@ - super(p_256604_, Registries.FLAT_LEVEL_GENERATOR_PRESET, p_255962_); + super(output, Registries.FLAT_LEVEL_GENERATOR_PRESET, lookupProvider); } -+ public FlatLevelGeneratorPresetTagsProvider(PackOutput p_256604_, CompletableFuture p_255962_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { -+ super(p_256604_, Registries.FLAT_LEVEL_GENERATOR_PRESET, p_255962_, modId, existingFileHelper); ++ public FlatLevelGeneratorPresetTagsProvider(final PackOutput output, final CompletableFuture lookupProvider, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { ++ super(output, Registries.FLAT_LEVEL_GENERATOR_PRESET, lookupProvider, modId, existingFileHelper); + } + @Override - protected void addTags(HolderLookup.Provider p_255741_) { + protected void addTags(final HolderLookup.Provider registries) { this.tag(FlatLevelGeneratorPresetTags.VISIBLE) diff --git a/patches/minecraft/net/minecraft/data/tags/FluidTagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/FluidTagsProvider.java.patch index 5735f3d4cb..565f54b821 100644 --- a/patches/minecraft/net/minecraft/data/tags/FluidTagsProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/FluidTagsProvider.java.patch @@ -1,13 +1,13 @@ --- a/net/minecraft/data/tags/FluidTagsProvider.java +++ b/net/minecraft/data/tags/FluidTagsProvider.java @@ -13,6 +_,10 @@ - super(p_255941_, Registries.FLUID, p_256600_, p_256474_ -> p_256474_.builtInRegistryHolder().key()); + super(output, Registries.FLUID, lookupProvider, e -> e.builtInRegistryHolder().key()); } -+ public FluidTagsProvider(PackOutput p_255941_, CompletableFuture p_256600_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { -+ super(p_255941_, Registries.FLUID, p_256600_, p_256474_ -> p_256474_.builtInRegistryHolder().key(), modId, existingFileHelper); ++ public FluidTagsProvider(final PackOutput output, final CompletableFuture lookupProvider, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { ++ super(output, Registries.FLUID, lookupProvider, e -> e.builtInRegistryHolder().key(), modId, existingFileHelper); + } + @Override - protected void addTags(HolderLookup.Provider p_256366_) { + protected void addTags(final HolderLookup.Provider registries) { this.tag(FluidTags.WATER).add(Fluids.WATER, Fluids.FLOWING_WATER); diff --git a/patches/minecraft/net/minecraft/data/tags/GameEventTagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/GameEventTagsProvider.java.patch index 15b9d25987..9c4d02eee9 100644 --- a/patches/minecraft/net/minecraft/data/tags/GameEventTagsProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/GameEventTagsProvider.java.patch @@ -1,13 +1,13 @@ --- a/net/minecraft/data/tags/GameEventTagsProvider.java +++ b/net/minecraft/data/tags/GameEventTagsProvider.java @@ -59,6 +_,10 @@ - super(p_256060_, Registries.GAME_EVENT, p_255621_); + super(output, Registries.GAME_EVENT, lookupProvider); } -+ public GameEventTagsProvider(PackOutput p_256060_, CompletableFuture p_255621_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { -+ super(p_256060_, Registries.GAME_EVENT, p_255621_, modId, existingFileHelper); ++ public GameEventTagsProvider(final PackOutput output, final CompletableFuture lookupProvider, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { ++ super(output, Registries.GAME_EVENT, lookupProvider, modId, existingFileHelper); + } + @Override - protected void addTags(HolderLookup.Provider p_255981_) { + protected void addTags(final HolderLookup.Provider registries) { this.tag(GameEventTags.VIBRATIONS).addAll(VIBRATIONS_EXCEPT_FLAP).addAll(VibrationSystem.RESONANCE_EVENTS).add(GameEvent.FLAP.key()); diff --git a/patches/minecraft/net/minecraft/data/tags/InstrumentTagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/InstrumentTagsProvider.java.patch index baa6448005..4fd058537b 100644 --- a/patches/minecraft/net/minecraft/data/tags/InstrumentTagsProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/InstrumentTagsProvider.java.patch @@ -1,13 +1,13 @@ --- a/net/minecraft/data/tags/InstrumentTagsProvider.java +++ b/net/minecraft/data/tags/InstrumentTagsProvider.java @@ -13,6 +_,10 @@ - super(p_256418_, Registries.INSTRUMENT, p_256038_); + super(output, Registries.INSTRUMENT, lookupProvider); } -+ public InstrumentTagsProvider(PackOutput p_256418_, CompletableFuture p_256038_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { -+ super(p_256418_, Registries.INSTRUMENT, p_256038_, modId, existingFileHelper); ++ public InstrumentTagsProvider(final PackOutput output, final CompletableFuture lookupProvider, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { ++ super(output, Registries.INSTRUMENT, lookupProvider, modId, existingFileHelper); + } + @Override - protected void addTags(HolderLookup.Provider p_256291_) { + protected void addTags(final HolderLookup.Provider registries) { this.tag(InstrumentTags.REGULAR_GOAT_HORNS) diff --git a/patches/minecraft/net/minecraft/data/tags/IntrinsicHolderTagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/IntrinsicHolderTagsProvider.java.patch index 5623dd4ab8..a3082f668a 100644 --- a/patches/minecraft/net/minecraft/data/tags/IntrinsicHolderTagsProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/IntrinsicHolderTagsProvider.java.patch @@ -1,50 +1,43 @@ --- a/net/minecraft/data/tags/IntrinsicHolderTagsProvider.java +++ b/net/minecraft/data/tags/IntrinsicHolderTagsProvider.java -@@ -12,14 +_,26 @@ - public abstract class IntrinsicHolderTagsProvider extends TagsProvider { - private final Function> keyExtractor; - -+ public IntrinsicHolderTagsProvider(PackOutput p_256164_, ResourceKey> p_256155_, CompletableFuture p_256488_, Function> p_256168_) { -+ super(p_256164_, p_256155_, p_256488_); -+ this.keyExtractor = p_256168_; +@@ -26,6 +_,18 @@ + final PackOutput output, + final ResourceKey> registryKey, + final CompletableFuture lookupProvider, ++ final Function> keyExtractor, ++ final String modid, ++ final @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper ++ ) { ++ super(output, registryKey, lookupProvider, modid, existingFileHelper); ++ this.keyExtractor = keyExtractor; + } + - public IntrinsicHolderTagsProvider( - PackOutput p_256164_, - ResourceKey> p_256155_, - CompletableFuture p_256488_, -- Function> p_256168_ -+ Function> p_256168_, -+ String modid, -+ @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper ++ public IntrinsicHolderTagsProvider( ++ final PackOutput output, ++ final ResourceKey> registryKey, ++ final CompletableFuture lookupProvider, + final CompletableFuture> parentProvider, + final Function> keyExtractor ) { -- super(p_256164_, p_256155_, p_256488_); -+ super(p_256164_, p_256155_, p_256488_, modid, existingFileHelper); - this.keyExtractor = p_256168_; +@@ -33,8 +_,21 @@ + this.keyExtractor = keyExtractor; + } + ++ public IntrinsicHolderTagsProvider( ++ final PackOutput output, ++ final ResourceKey> registryKey, ++ final CompletableFuture lookupProvider, ++ final CompletableFuture> parentProvider, ++ final Function> keyExtractor, ++ final String modid, ++ final @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper ++ ) { ++ super(output, registryKey, lookupProvider, parentProvider, modid, existingFileHelper); ++ this.keyExtractor = keyExtractor; + } + -+ public IntrinsicHolderTagsProvider(PackOutput p_275304_, ResourceKey> p_275709_, CompletableFuture p_275227_, CompletableFuture> p_275311_, Function> p_275566_) { -+ super(p_275304_, p_275709_, p_275227_, p_275311_); -+ this.keyExtractor = p_275566_; - } - - public IntrinsicHolderTagsProvider( -@@ -27,14 +_,16 @@ - ResourceKey> p_275709_, - CompletableFuture p_275227_, - CompletableFuture> p_275311_, -- Function> p_275566_ -+ Function> p_275566_, -+ String modid, -+ @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper - ) { -- super(p_275304_, p_275709_, p_275227_, p_275311_); -+ super(p_275304_, p_275709_, p_275227_, p_275311_, modid, existingFileHelper); - this.keyExtractor = p_275566_; - } - - protected TagAppender tag(TagKey p_255793_) { - TagBuilder tagbuilder = this.getOrCreateRawBuilder(p_255793_); + protected TagAppender tag(final TagKey tag) { + TagBuilder tagbuilder = this.getOrCreateRawBuilder(tag); - return TagAppender.forBuilder(tagbuilder).map(this.keyExtractor); + return TagAppender.forBuilder(tagbuilder, this.modId).map(this.keyExtractor); } diff --git a/patches/minecraft/net/minecraft/data/tags/KeyTagProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/KeyTagProvider.java.patch index b2e9e34276..37dd14b965 100644 --- a/patches/minecraft/net/minecraft/data/tags/KeyTagProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/KeyTagProvider.java.patch @@ -1,15 +1,16 @@ --- a/net/minecraft/data/tags/KeyTagProvider.java +++ b/net/minecraft/data/tags/KeyTagProvider.java -@@ -13,8 +_,12 @@ - super(p_407442_, p_405854_, p_409645_); +@@ -20,9 +_,13 @@ + return TagAppender.forBuilder(tagbuilder); } -+ protected KeyTagProvider(PackOutput p_407442_, ResourceKey> p_405854_, CompletableFuture p_409645_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { -+ super(p_407442_, p_405854_, p_409645_, modId, existingFileHelper); ++ protected KeyTagProvider(final PackOutput output, final ResourceKey> registryKey, final CompletableFuture lookupProvider, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { ++ super(output, registryKey, lookupProvider, modId, existingFileHelper); + } + - protected TagAppender, T> tag(TagKey p_406138_) { - TagBuilder tagbuilder = this.getOrCreateRawBuilder(p_406138_); + protected TagAppender, T> tag(final TagKey tag, final boolean replace) { + TagBuilder tagbuilder = this.getOrCreateRawBuilder(tag); + tagbuilder.setReplace(replace); - return TagAppender.forBuilder(tagbuilder); + return TagAppender.forBuilder(tagbuilder, this.modId); } diff --git a/patches/minecraft/net/minecraft/data/tags/PaintingVariantTagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/PaintingVariantTagsProvider.java.patch index abbaf8405c..d1801fec15 100644 --- a/patches/minecraft/net/minecraft/data/tags/PaintingVariantTagsProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/PaintingVariantTagsProvider.java.patch @@ -5,12 +5,12 @@ public class PaintingVariantTagsProvider extends KeyTagProvider { + /** @deprecated Forge: Use the {@linkplain #PaintingVariantTagsProvider(PackOutput, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant} */ - public PaintingVariantTagsProvider(PackOutput p_255750_, CompletableFuture p_256184_) { - super(p_255750_, Registries.PAINTING_VARIANT, p_256184_); + public PaintingVariantTagsProvider(final PackOutput output, final CompletableFuture lookupProvider) { + super(output, Registries.PAINTING_VARIANT, lookupProvider); + } + -+ public PaintingVariantTagsProvider(PackOutput p_255750_, CompletableFuture p_256184_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { -+ super(p_255750_, Registries.PAINTING_VARIANT, p_256184_, modId, existingFileHelper); ++ public PaintingVariantTagsProvider(final PackOutput output, final CompletableFuture lookupProvider, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { ++ super(output, Registries.PAINTING_VARIANT, lookupProvider, modId, existingFileHelper); } @Override diff --git a/patches/minecraft/net/minecraft/data/tags/PoiTypeTagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/PoiTypeTagsProvider.java.patch index 245388cfb8..e9fa6dd1be 100644 --- a/patches/minecraft/net/minecraft/data/tags/PoiTypeTagsProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/PoiTypeTagsProvider.java.patch @@ -5,12 +5,12 @@ public class PoiTypeTagsProvider extends KeyTagProvider { + /** @deprecated Forge: Use the {@linkplain #PoiTypeTagsProvider(PackOutput, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant} */ - public PoiTypeTagsProvider(PackOutput p_256012_, CompletableFuture p_256617_) { - super(p_256012_, Registries.POINT_OF_INTEREST_TYPE, p_256617_); + public PoiTypeTagsProvider(final PackOutput output, final CompletableFuture lookupProvider) { + super(output, Registries.POINT_OF_INTEREST_TYPE, lookupProvider); + } + -+ public PoiTypeTagsProvider(PackOutput p_256012_, CompletableFuture p_256617_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { -+ super(p_256012_, Registries.POINT_OF_INTEREST_TYPE, p_256617_, modId, existingFileHelper); ++ public PoiTypeTagsProvider(final PackOutput output, final CompletableFuture lookupProvider, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { ++ super(output, Registries.POINT_OF_INTEREST_TYPE, lookupProvider, modId, existingFileHelper); } @Override diff --git a/patches/minecraft/net/minecraft/data/tags/StructureTagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/StructureTagsProvider.java.patch index 4a129a98d2..60cfd57a4d 100644 --- a/patches/minecraft/net/minecraft/data/tags/StructureTagsProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/StructureTagsProvider.java.patch @@ -5,12 +5,12 @@ public class StructureTagsProvider extends KeyTagProvider { + /** @deprecated Forge: Use the {@linkplain #StructureTagsProvider(PackOutput, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant} */ - public StructureTagsProvider(PackOutput p_256522_, CompletableFuture p_256661_) { - super(p_256522_, Registries.STRUCTURE, p_256661_); + public StructureTagsProvider(final PackOutput output, final CompletableFuture lookupProvider) { + super(output, Registries.STRUCTURE, lookupProvider); + } + -+ public StructureTagsProvider(PackOutput p_256522_, CompletableFuture p_256661_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { -+ super(p_256522_, Registries.STRUCTURE, p_256661_, modId, existingFileHelper); ++ public StructureTagsProvider(final PackOutput output, final CompletableFuture lookupProvider, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { ++ super(output, Registries.STRUCTURE, lookupProvider, modId, existingFileHelper); } @Override diff --git a/patches/minecraft/net/minecraft/data/tags/TagAppender.java.patch b/patches/minecraft/net/minecraft/data/tags/TagAppender.java.patch index 72a2c1aa43..d1714f2feb 100644 --- a/patches/minecraft/net/minecraft/data/tags/TagAppender.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/TagAppender.java.patch @@ -1,33 +1,33 @@ --- a/net/minecraft/data/tags/TagAppender.java +++ b/net/minecraft/data/tags/TagAppender.java -@@ -8,7 +_,7 @@ +@@ -9,7 +_,7 @@ import net.minecraft.tags.TagBuilder; import net.minecraft.tags.TagKey; -public interface TagAppender { +public interface TagAppender extends net.minecraftforge.common.extensions.IForgeTagAppender { - TagAppender add(E p_406816_); + TagAppender add(E element); - default TagAppender add(E... p_406204_) { -@@ -32,6 +_,10 @@ - TagAppender addOptionalTag(TagKey p_406169_); + default TagAppender add(final E... elements) { +@@ -33,6 +_,10 @@ + TagAppender addOptionalTag(TagKey tag); - static TagAppender, T> forBuilder(final TagBuilder p_407840_) { -+ return forBuilder(p_407840_, "unknown"); + static TagAppender, T> forBuilder(final TagBuilder builder) { ++ return forBuilder(builder, "unknown"); + } + -+ static TagAppender, T> forBuilder(final TagBuilder p_407840_, String source) { ++ static TagAppender, T> forBuilder(final TagBuilder builder, String source) { return new TagAppender, T>() { - public TagAppender, T> add(ResourceKey p_406023_) { - p_407840_.addElement(p_406023_.identifier()); -@@ -54,6 +_,21 @@ - p_407840_.addOptionalTag(p_407223_.location()); + public TagAppender, T> add(final ResourceKey element) { + builder.addElement(element.identifier()); +@@ -55,6 +_,21 @@ + builder.addOptionalTag(tag.location()); return this; } + + @Override + public TagBuilder getInternalBuilder() { -+ return p_407840_; ++ return builder; + } + + @Override @@ -42,10 +42,10 @@ }; } -@@ -81,6 +_,22 @@ +@@ -86,6 +_,22 @@ @Override - public TagAppender addOptionalTag(TagKey p_409695_) { - tagappender.addOptionalTag(p_409695_); + public TagAppender addOptionalTag(final TagKey tag) { + tagappender.addOptionalTag(tag); + return this; + } + @@ -61,7 +61,7 @@ + + @Override + public TagAppender remove(U value) { -+ tagappender.remove(p_409081_.apply(value)); ++ tagappender.remove(converter.apply(value)); return this; } }; diff --git a/patches/minecraft/net/minecraft/data/tags/TagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/TagsProvider.java.patch index 15e744b943..c98380cbd9 100644 --- a/patches/minecraft/net/minecraft/data/tags/TagsProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/TagsProvider.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/data/tags/TagsProvider.java +++ b/net/minecraft/data/tags/TagsProvider.java -@@ -32,26 +_,57 @@ +@@ -32,28 +_,53 @@ private final CompletableFuture> parentProvider; protected final ResourceKey> registryKey; protected final Map builders = Maps.newLinkedHashMap(); @@ -10,42 +10,38 @@ + private final net.minecraftforge.common.data.ExistingFileHelper.IResourceType resourceType; + private final net.minecraftforge.common.data.ExistingFileHelper.IResourceType elementResourceType; // FORGE: Resource type for validating required references to datapack registry elements. -+ /** -+ * @deprecated Forge: Use the {@linkplain #TagsProvider(PackOutput, ResourceKey, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant} -+ */ - protected TagsProvider(PackOutput p_256596_, ResourceKey> p_255886_, CompletableFuture p_256513_) { -- this(p_256596_, p_255886_, p_256513_, CompletableFuture.completedFuture(TagsProvider.TagLookup.empty())); -+ this(p_256596_, p_255886_, p_256513_, "vanilla", null); + protected TagsProvider( + final PackOutput output, final ResourceKey> registryKey, final CompletableFuture lookupProvider + ) { +- this(output, registryKey, lookupProvider, CompletableFuture.completedFuture(TagsProvider.TagLookup.empty())); ++ this(output, registryKey, lookupProvider, "vanilla", null); + } + -+ protected TagsProvider(PackOutput p_256596_, ResourceKey> p_255886_, CompletableFuture p_256513_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { -+ this(p_256596_, p_255886_, p_256513_, CompletableFuture.completedFuture(TagsProvider.TagLookup.empty()), modId, existingFileHelper); ++ protected TagsProvider(final PackOutput output, final ResourceKey> registryKey, final CompletableFuture lookupProvider, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { ++ this(output, registryKey, lookupProvider, CompletableFuture.completedFuture(TagsProvider.TagLookup.empty()), modId, existingFileHelper); + } + -+ /** -+ * @deprecated Forge: Use the {@linkplain #TagsProvider(PackOutput, ResourceKey, CompletableFuture, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant} -+ */ -+ protected TagsProvider(PackOutput p_275432_, ResourceKey> p_275476_, CompletableFuture p_275222_, CompletableFuture> p_275565_) { -+ this(p_275432_, p_275476_, p_275222_, p_275565_, "vanilla", null); ++ protected TagsProvider(PackOutput output, ResourceKey> registryKey, CompletableFuture lookupProvider, CompletableFuture> parentProvider) { ++ this(output, registryKey, lookupProvider, parentProvider, "vanilla", null); } protected TagsProvider( - PackOutput p_275432_, - ResourceKey> p_275476_, - CompletableFuture p_275222_, -- CompletableFuture> p_275565_ -+ CompletableFuture> p_275565_, -+ String modId, -+ @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper + final PackOutput output, + final ResourceKey> registryKey, + final CompletableFuture lookupProvider, +- final CompletableFuture> parentProvider ++ final CompletableFuture> parentProvider, ++ final String modId, ++ final @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper ) { - this.pathProvider = p_275432_.createRegistryTagsPathProvider(p_275476_); - this.registryKey = p_275476_; - this.parentProvider = p_275565_; - this.lookupProvider = p_275222_; + this.pathProvider = output.createRegistryTagsPathProvider(registryKey); + this.registryKey = registryKey; + this.parentProvider = parentProvider; + this.lookupProvider = lookupProvider; + this.modId = modId; + this.existingFileHelper = existingFileHelper; -+ this.resourceType = new net.minecraftforge.common.data.ExistingFileHelper.ResourceType(net.minecraft.server.packs.PackType.SERVER_DATA, ".json", net.minecraft.core.registries.Registries.tagsDirPath(p_275476_)); -+ this.elementResourceType = new net.minecraftforge.common.data.ExistingFileHelper.ResourceType(net.minecraft.server.packs.PackType.SERVER_DATA, ".json", net.minecraft.core.registries.Registries.elementsDirPath(p_275476_)); ++ this.resourceType = new net.minecraftforge.common.data.ExistingFileHelper.ResourceType(net.minecraft.server.packs.PackType.SERVER_DATA, ".json", net.minecraft.core.registries.Registries.tagsDirPath(registryKey)); ++ this.elementResourceType = new net.minecraftforge.common.data.ExistingFileHelper.ResourceType(net.minecraft.server.packs.PackType.SERVER_DATA, ".json", net.minecraft.core.registries.Registries.elementsDirPath(registryKey)); + } + + // Forge: Allow customizing the path for a given tag or returning null @@ -60,62 +56,62 @@ + return "Tags for " + this.registryKey.identifier() + " mod id " + this.modId; } - protected abstract void addTags(HolderLookup.Provider p_256380_); -@@ -69,7 +_,13 @@ - .thenCombineAsync(this.parentProvider, (p_274778_, p_274779_) -> new CombinedData<>(p_274778_, (TagsProvider.TagLookup)p_274779_), Util.backgroundExecutor()) + protected abstract void addTags(HolderLookup.Provider registries); +@@ -71,7 +_,13 @@ + .thenCombineAsync(this.parentProvider, (x$0, x$1) -> new CombinedData<>(x$0, (TagsProvider.TagLookup)x$1), Util.backgroundExecutor()) .thenCompose( - p_325926_ -> { -- HolderLookup.RegistryLookup registrylookup = p_325926_.contents.lookupOrThrow(this.registryKey); -+ HolderLookup.RegistryLookup registrylookup = p_325926_.contents.lookup(this.registryKey).orElseThrow(() -> { + c -> { +- HolderLookup.RegistryLookup registrylookup = c.contents.lookupOrThrow(this.registryKey); ++ HolderLookup.RegistryLookup registrylookup = c.contents.lookup(this.registryKey).orElseThrow(() -> { + // FORGE: Throw a more descriptive error message if this is a Forge registry without tags enabled + if (net.minecraftforge.registries.RegistryManager.ACTIVE.getRegistry(this.registryKey) != null) { + return new IllegalStateException("Forge registry " + this.registryKey.identifier() + " does not have support for tags"); + } + return new IllegalStateException("Registry " + this.registryKey.identifier() + " not found"); + }); - Predicate predicate = p_448741_ -> registrylookup.get(ResourceKey.create(this.registryKey, p_448741_)).isPresent(); - Predicate predicate1 = p_448739_ -> this.builders.containsKey(p_448739_) - || p_325926_.parent.contains(TagKey.create(this.registryKey, p_448739_)); -@@ -82,7 +_,7 @@ - Identifier identifier = p_325931_.getKey(); - TagBuilder tagbuilder = p_325931_.getValue(); + Predicate predicate = id -> registrylookup.get(ResourceKey.create(this.registryKey, id)).isPresent(); + Predicate predicate1 = id -> this.builders.containsKey(id) || c.parent.contains(TagKey.create(this.registryKey, id)); + return CompletableFuture.allOf( +@@ -83,7 +_,7 @@ + Identifier identifier = entry.getKey(); + TagBuilder tagbuilder = entry.getValue(); List list = tagbuilder.build(); -- List list1 = list.stream().filter(p_274771_ -> !p_274771_.verifyIfPresent(predicate, predicate1)).toList(); -+ List list1 = java.util.stream.Stream.concat(list.stream(), tagbuilder.getRemoveEntries()).filter(p_274771_ -> !p_274771_.verifyIfPresent(predicate, predicate1)).filter(this::missing).toList(); +- List list1 = list.stream().filter(e -> !e.verifyIfPresent(predicate, predicate1)).toList(); ++ List list1 = java.util.stream.Stream.concat(list.stream(), tagbuilder.getRemoveEntries()).filter(e -> !e.verifyIfPresent(predicate, predicate1)).filter(this::missing).toList(); if (!list1.isEmpty()) { throw new IllegalArgumentException( String.format( -@@ -93,8 +_,11 @@ +@@ -94,8 +_,11 @@ ) ); } else { - Path path = this.pathProvider.json(identifier); -- return DataProvider.saveStable(p_253684_, p_325926_.contents, TagFile.CODEC, new TagFile(list, false), path); +- return DataProvider.saveStable(cache, c.contents, TagFile.CODEC, new TagFile(list, tagbuilder.shouldReplace()), path); + Path path = this.getPath(identifier); + if (path == null) { + return CompletableFuture.completedFuture(null); // Forge: Allow running this data provider without writing it. Recipe provider needs valid tags. + } -+ return DataProvider.saveStable(p_253684_, p_325926_.contents, TagFile.CODEC, new TagFile(list, tagbuilder.isReplace(), tagbuilder.getRemoveEntries().toList()), path); ++ return DataProvider.saveStable(cache, c.contents, TagFile.CODEC, new TagFile(list, tagbuilder.shouldReplace(), tagbuilder.getRemoveEntries().toList()), path); } } ) -@@ -105,7 +_,12 @@ +@@ -106,7 +_,12 @@ } - protected TagBuilder getOrCreateRawBuilder(TagKey p_236452_) { -- return this.builders.computeIfAbsent(p_236452_.location(), p_460082_ -> TagBuilder.create()); -+ return this.builders.computeIfAbsent(p_236452_.location(), p_460082_ -> { + protected TagBuilder getOrCreateRawBuilder(final TagKey tag) { +- return this.builders.computeIfAbsent(tag.location(), k -> TagBuilder.create()); ++ return this.builders.computeIfAbsent(tag.location(), k -> { + if (existingFileHelper != null) { -+ existingFileHelper.trackGenerated(p_460082_, resourceType); ++ existingFileHelper.trackGenerated(k, resourceType); + } + return TagBuilder.create(); + }); } public CompletableFuture> contentsGetter() { -@@ -118,6 +_,15 @@ - this.addTags(p_274768_); - return (HolderLookup.Provider)p_274768_; +@@ -119,6 +_,15 @@ + this.addTags(registries); + return (HolderLookup.Provider)registries; }); + } + diff --git a/patches/minecraft/net/minecraft/data/tags/VanillaBlockTagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/VanillaBlockTagsProvider.java.patch index 52eec03c99..b1f6fb2758 100644 --- a/patches/minecraft/net/minecraft/data/tags/VanillaBlockTagsProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/VanillaBlockTagsProvider.java.patch @@ -1,13 +1,13 @@ --- a/net/minecraft/data/tags/VanillaBlockTagsProvider.java +++ b/net/minecraft/data/tags/VanillaBlockTagsProvider.java -@@ -16,6 +_,10 @@ - super(p_256406_, Registries.BLOCK, p_256525_, p_255627_ -> p_255627_.builtInRegistryHolder().key()); +@@ -17,6 +_,10 @@ + super(output, Registries.BLOCK, lookupProvider, e -> e.builtInRegistryHolder().key()); } -+ public VanillaBlockTagsProvider(PackOutput p_256406_, CompletableFuture p_256525_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { -+ super(p_256406_, Registries.BLOCK, p_256525_, p_255627_ -> p_255627_.builtInRegistryHolder().key(), modId, existingFileHelper); ++ public VanillaBlockTagsProvider(final PackOutput output, final CompletableFuture lookupProvider, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { ++ super(output, Registries.BLOCK, lookupProvider, e -> e.builtInRegistryHolder().key(), modId, existingFileHelper); + } + @Override - protected void addTags(HolderLookup.Provider p_255662_) { + protected void addTags(final HolderLookup.Provider registries) { (new BlockItemTagsProvider() { diff --git a/patches/minecraft/net/minecraft/data/tags/VanillaEnchantmentTagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/VanillaEnchantmentTagsProvider.java.patch index 2cb9a2cea5..ba3d524640 100644 --- a/patches/minecraft/net/minecraft/data/tags/VanillaEnchantmentTagsProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/VanillaEnchantmentTagsProvider.java.patch @@ -1,13 +1,13 @@ --- a/net/minecraft/data/tags/VanillaEnchantmentTagsProvider.java +++ b/net/minecraft/data/tags/VanillaEnchantmentTagsProvider.java @@ -11,6 +_,10 @@ - super(p_335915_, p_330302_); + super(output, lookupProvider); } -+ public VanillaEnchantmentTagsProvider(PackOutput p_335915_, CompletableFuture p_330302_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { -+ super(p_335915_, p_330302_, modId, existingFileHelper); ++ public VanillaEnchantmentTagsProvider(final PackOutput output, final CompletableFuture lookupProvider, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { ++ super(output, lookupProvider, modId, existingFileHelper); + } + @Override - protected void addTags(HolderLookup.Provider p_331944_) { + protected void addTags(final HolderLookup.Provider registries) { this.tooltipOrder( diff --git a/patches/minecraft/net/minecraft/data/tags/VanillaItemTagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/VanillaItemTagsProvider.java.patch index e3bc094676..b85e778d9c 100644 --- a/patches/minecraft/net/minecraft/data/tags/VanillaItemTagsProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/VanillaItemTagsProvider.java.patch @@ -1,25 +1,25 @@ --- a/net/minecraft/data/tags/VanillaItemTagsProvider.java +++ b/net/minecraft/data/tags/VanillaItemTagsProvider.java -@@ -19,6 +_,10 @@ - super(p_275657_, Registries.ITEM, p_275712_, p_405065_ -> p_405065_.builtInRegistryHolder().key()); +@@ -16,6 +_,10 @@ + super(output, Registries.ITEM, lookupProvider, e -> e.builtInRegistryHolder().key()); } -+ public VanillaItemTagsProvider(PackOutput p_275657_, CompletableFuture p_275712_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { -+ super(p_275657_, Registries.ITEM, p_275712_, p_405065_ -> p_405065_.builtInRegistryHolder().key(), modId, existingFileHelper); ++ public VanillaItemTagsProvider(final PackOutput output, final CompletableFuture lookupProvider, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { ++ super(output, Registries.ITEM, lookupProvider, e -> e.builtInRegistryHolder().key(), modId, existingFileHelper); + } + @Override - protected void addTags(HolderLookup.Provider p_255639_) { + protected void addTags(final HolderLookup.Provider registries) { (new BlockItemTagsProvider() { -@@ -485,6 +_,12 @@ +@@ -578,6 +_,12 @@ @Override - public TagAppender addOptionalTag(TagKey p_407315_) { - this.itemAppender.addOptionalTag(blockTagToItemTag(p_407315_)); + public TagAppender addOptionalTag(final TagKey tag) { + this.itemAppender.addOptionalTag(blockTagToItemTag(tag)); + return this; + } + + @Override -+ public TagAppender remove(Block value) { ++ public TagAppender remove(final Block value) { + this.itemAppender.remove(Objects.requireNonNull(value.asItem())); return this; } diff --git a/patches/minecraft/net/minecraft/data/tags/WorldPresetTagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/WorldPresetTagsProvider.java.patch index dbeabd9e77..77ece4160d 100644 --- a/patches/minecraft/net/minecraft/data/tags/WorldPresetTagsProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/WorldPresetTagsProvider.java.patch @@ -1,17 +1,13 @@ --- a/net/minecraft/data/tags/WorldPresetTagsProvider.java +++ b/net/minecraft/data/tags/WorldPresetTagsProvider.java -@@ -9,8 +_,14 @@ - import net.minecraft.world.level.levelgen.presets.WorldPresets; - - public class WorldPresetTagsProvider extends KeyTagProvider { -+ /** @deprecated Forge: Use the {@linkplain #WorldPresetTagsProvider(PackOutput, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant} */ -+ @Deprecated - public WorldPresetTagsProvider(PackOutput p_255701_, CompletableFuture p_255974_) { - super(p_255701_, Registries.WORLD_PRESET, p_255974_); -+ } -+ -+ public WorldPresetTagsProvider(PackOutput p_255701_, CompletableFuture p_255974_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { -+ super(p_255701_, Registries.WORLD_PRESET, p_255974_, modId, existingFileHelper); +@@ -13,6 +_,10 @@ + super(output, Registries.WORLD_PRESET, lookupProvider); } ++ public WorldPresetTagsProvider(final PackOutput output, final CompletableFuture lookupProvider, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { ++ super(output, Registries.WORLD_PRESET, lookupProvider, modId, existingFileHelper); ++ } ++ @Override + protected void addTags(final HolderLookup.Provider registries) { + this.tag(WorldPresetTags.NORMAL) diff --git a/patches/minecraft/net/minecraft/data/worldgen/BootstrapContext.java.patch b/patches/minecraft/net/minecraft/data/worldgen/BootstrapContext.java.patch index 5778f97604..cb40e626e5 100644 --- a/patches/minecraft/net/minecraft/data/worldgen/BootstrapContext.java.patch +++ b/patches/minecraft/net/minecraft/data/worldgen/BootstrapContext.java.patch @@ -3,7 +3,7 @@ @@ -14,4 +_,6 @@ } - HolderGetter lookup(ResourceKey> p_332059_); + HolderGetter lookup(ResourceKey> key); + + default java.util.Optional> registryLookup(ResourceKey> registry) { return java.util.Optional.empty(); } } diff --git a/patches/minecraft/net/minecraft/gametest/Main.java.patch b/patches/minecraft/net/minecraft/gametest/Main.java.patch index 9be32b9872..1adb72fc56 100644 --- a/patches/minecraft/net/minecraft/gametest/Main.java.patch +++ b/patches/minecraft/net/minecraft/gametest/Main.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/gametest/Main.java +++ b/net/minecraft/gametest/Main.java -@@ -7,6 +_,8 @@ +@@ -5,6 +_,8 @@ + public class Main { - @DontObfuscate - public static void main(String[] p_393417_) throws Exception { + public static void main(final String[] args) throws Exception { + System.setProperty("forge.enableGameTest", "true"); + System.setProperty("forge.gameTestServer", "true"); SharedConstants.tryDetectVersion(); - GameTestMainUtil.runGameTestServer(p_393417_, p_393535_ -> {}); + GameTestMainUtil.runGameTestServer(args, path -> {}); } diff --git a/patches/minecraft/net/minecraft/gametest/framework/GameTestHelper.java.patch b/patches/minecraft/net/minecraft/gametest/framework/GameTestHelper.java.patch index 10b68733c4..ddb4454f87 100644 --- a/patches/minecraft/net/minecraft/gametest/framework/GameTestHelper.java.patch +++ b/patches/minecraft/net/minecraft/gametest/framework/GameTestHelper.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/gametest/framework/GameTestHelper.java +++ b/net/minecraft/gametest/framework/GameTestHelper.java -@@ -68,7 +_,7 @@ +@@ -76,7 +_,7 @@ import net.minecraft.world.phys.Vec3; import org.jspecify.annotations.Nullable; @@ -9,7 +9,7 @@ private final GameTestInfo testInfo; private boolean finalCheckAdded; -@@ -1008,6 +_,12 @@ +@@ -1076,6 +_,12 @@ return this.testInfo.getTick(); } @@ -22,7 +22,7 @@ public AABB getBounds() { return this.testInfo.getStructureBounds(); } -@@ -1050,5 +_,25 @@ +@@ -1122,6 +_,26 @@ if (either.right().isPresent()) { throw this.assertionException("test.error.set_biome"); } @@ -47,4 +47,5 @@ + @Override public void testAddedForRerun(GameTestInfo oldInfo, GameTestInfo newInfo, GameTestRunner runner) { } + }); } - } + + private static Component getItemName(final Item itemType) { diff --git a/patches/minecraft/net/minecraft/gametest/framework/GameTestMainUtil.java.patch b/patches/minecraft/net/minecraft/gametest/framework/GameTestMainUtil.java.patch index 0fa6f4ca50..53c1b805be 100644 --- a/patches/minecraft/net/minecraft/gametest/framework/GameTestMainUtil.java.patch +++ b/patches/minecraft/net/minecraft/gametest/framework/GameTestMainUtil.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/gametest/framework/GameTestMainUtil.java +++ b/net/minecraft/gametest/framework/GameTestMainUtil.java -@@ -67,6 +_,7 @@ +@@ -75,6 +_,7 @@ Bootstrap.bootStrap(); Util.startTimerHackThread(); + net.minecraftforge.server.loading.ServerModLoader.load(); String s = optionset.valueOf(universe); createOrResetDir(s); - p_393652_.accept(s); + onUniverseCreated.accept(s); diff --git a/patches/minecraft/net/minecraft/gametest/framework/GameTestServer.java.patch b/patches/minecraft/net/minecraft/gametest/framework/GameTestServer.java.patch index 54307c3b96..d4f0561e18 100644 --- a/patches/minecraft/net/minecraft/gametest/framework/GameTestServer.java.patch +++ b/patches/minecraft/net/minecraft/gametest/framework/GameTestServer.java.patch @@ -1,19 +1,19 @@ --- a/net/minecraft/gametest/framework/GameTestServer.java +++ b/net/minecraft/gametest/framework/GameTestServer.java -@@ -93,7 +_,7 @@ - Thread p_206607_, LevelStorageSource.LevelStorageAccess p_206608_, PackRepository p_206609_, Optional p_392741_, boolean p_392375_ +@@ -102,7 +_,7 @@ + final int repeatCount ) { - p_206609_.reload(); -- ArrayList arraylist = new ArrayList<>(p_206609_.getAvailableIds()); -+ ArrayList arraylist = new ArrayList<>(p_206609_.getSelectedIds()); // Forge: Use the selected datapacks as this takes sorting into account. + packRepository.reload(); +- ArrayList arraylist = new ArrayList<>(packRepository.getAvailableIds()); ++ ArrayList arraylist = new ArrayList<>(packRepository.getSelectedIds()); // Forge: Use the selected datapacks as this takes sorting into account. arraylist.remove("vanilla"); arraylist.addFirst("vanilla"); WorldDataConfiguration worlddataconfiguration = new WorldDataConfiguration(new DataPackConfig(arraylist, List.of()), ENABLED_FEATURES); -@@ -155,6 +_,7 @@ +@@ -178,6 +_,7 @@ @Override - public boolean initServer() { + protected boolean initServer() { + if (!net.minecraftforge.server.ServerLifecycleHooks.handleServerAboutToStart(this)) return false; - this.setPlayerList(new PlayerList(this, this.registries(), this.playerDataStorage, new EmptyNotificationService()) {}); - Gizmos.withCollector(GizmoCollector.NOOP); - this.loadLevel(); + this.setPlayerList(new PlayerList(this, this.registries(), this.playerDataStorage, new EmptyNotificationService()) { + { + Objects.requireNonNull(GameTestServer.this); diff --git a/patches/minecraft/net/minecraft/gametest/framework/TestCommand.java.patch b/patches/minecraft/net/minecraft/gametest/framework/TestCommand.java.patch index a5926fcf51..34211c42ae 100644 --- a/patches/minecraft/net/minecraft/gametest/framework/TestCommand.java.patch +++ b/patches/minecraft/net/minecraft/gametest/framework/TestCommand.java.patch @@ -1,16 +1,16 @@ --- a/net/minecraft/gametest/framework/TestCommand.java +++ b/net/minecraft/gametest/framework/TestCommand.java -@@ -487,7 +_,12 @@ +@@ -477,7 +_,12 @@ return Optional.empty(); } else { Holder.Reference reference = optional.get(); -- GameTestInfo gametestinfo = new GameTestInfo(reference, testinstanceblockentity.getRotation(), serverlevel, p_330368_); +- GameTestInfo gametestinfo = new GameTestInfo(reference, testinstanceblockentity.getRotation(), serverlevel, retryOptions); + // Forge: The rotation is stored in the structure block, and added in the GameTestInfo constructor. + // So reverse it to find the manually specified rotation so the test runs the same every time. + var rotation = testinstanceblockentity.test().flatMap(testinstanceblockentity.getLevel().registryAccess()::get).map(Holder::value).map(GameTestInstance::rotation).orElse(Rotation.NONE); + var steps = StructureUtils.getRotationStepsForRotation(testinstanceblockentity.getRotation()) - StructureUtils.getRotationStepsForRotation(rotation); + if (steps < 0) steps += 4; -+ GameTestInfo gametestinfo = new GameTestInfo(reference, StructureUtils.getRotationForRotationSteps(steps), serverlevel, p_330368_); - gametestinfo.setTestBlockPos(p_332856_); - return !verifyStructureExists(p_393532_, gametestinfo.getStructure()) ? Optional.empty() : Optional.of(gametestinfo); ++ GameTestInfo gametestinfo = new GameTestInfo(reference, StructureUtils.getRotationForRotationSteps(steps), serverlevel, retryOptions); + gametestinfo.setTestBlockPos(testBlockPos); + return !verifyStructureExists(source, gametestinfo.getStructure()) ? Optional.empty() : Optional.of(gametestinfo); } diff --git a/patches/minecraft/net/minecraft/locale/Language.java.patch b/patches/minecraft/net/minecraft/locale/Language.java.patch index 42f4d908da..38f6e9c842 100644 --- a/patches/minecraft/net/minecraft/locale/Language.java.patch +++ b/patches/minecraft/net/minecraft/locale/Language.java.patch @@ -9,7 +9,7 @@ + final Map map1 = map; return new Language() { @Override - public String getOrDefault(String p_128127_, String p_265421_) { + public String getOrDefault(final String elementId, final String defaultValue) { @@ -63,6 +_,11 @@ ) .isPresent(); @@ -23,11 +23,11 @@ } @@ -90,6 +_,8 @@ - public static void inject(Language p_128115_) { - instance = p_128115_; + public static void inject(final Language language) { + instance = language; } + + public Map getLanguageData() { return Map.of(); } - public String getOrDefault(String p_128111_) { - return this.getOrDefault(p_128111_, p_128111_); + public String getOrDefault(final String elementId) { + return this.getOrDefault(elementId, elementId); diff --git a/patches/minecraft/net/minecraft/nbt/CompoundTag.java.patch b/patches/minecraft/net/minecraft/nbt/CompoundTag.java.patch index 793bd4889b..f6f693b2ef 100644 --- a/patches/minecraft/net/minecraft/nbt/CompoundTag.java.patch +++ b/patches/minecraft/net/minecraft/nbt/CompoundTag.java.patch @@ -10,4 +10,4 @@ + public static final Codec CODEC = Codec.PASSTHROUGH .comapFlatMap( - p_308555_ -> { + t -> { diff --git a/patches/minecraft/net/minecraft/network/CompressionEncoder.java.patch b/patches/minecraft/net/minecraft/network/CompressionEncoder.java.patch index cfa08db5a7..4dbbc31641 100644 --- a/patches/minecraft/net/minecraft/network/CompressionEncoder.java.patch +++ b/patches/minecraft/net/minecraft/network/CompressionEncoder.java.patch @@ -10,15 +10,15 @@ private final Deflater deflater; private int threshold; @@ -24,6 +_,12 @@ - VarInt.write(p_129454_, 0); - p_129454_.writeBytes(p_129453_); + VarInt.write(out, 0); + out.writeBytes(uncompressed); } else { + if (!DISABLE_PACKET_DEBUG && i > net.minecraft.network.CompressionDecoder.MAXIMUM_UNCOMPRESSED_LENGTH) { -+ p_129453_.markReaderIndex(); ++ uncompressed.markReaderIndex(); + LOGGER.error("Attempted to send packet over maximum protocol size: {} > {}\nData:\n{}", i, net.minecraft.network.CompressionDecoder.MAXIMUM_UNCOMPRESSED_LENGTH, -+ net.minecraftforge.common.util.HexDumper.dump(p_129453_)); -+ p_129453_.resetReaderIndex(); ++ net.minecraftforge.common.util.HexDumper.dump(uncompressed)); ++ uncompressed.resetReaderIndex(); + } byte[] abyte = new byte[i]; - p_129453_.readBytes(abyte); - VarInt.write(p_129454_, abyte.length); + uncompressed.readBytes(abyte); + VarInt.write(out, abyte.length); diff --git a/patches/minecraft/net/minecraft/network/Connection.java.patch b/patches/minecraft/net/minecraft/network/Connection.java.patch index 32fd674912..e48de671dc 100644 --- a/patches/minecraft/net/minecraft/network/Connection.java.patch +++ b/patches/minecraft/net/minecraft/network/Connection.java.patch @@ -3,14 +3,14 @@ @@ -81,9 +_,17 @@ private boolean handlingFault; private volatile @Nullable DisconnectionDetails delayedDisconnect; - @Nullable BandwidthDebugMonitor bandwidthDebugMonitor; + private @Nullable BandwidthDebugMonitor bandwidthDebugMonitor; + private java.util.function.Consumer activationHandler; + private final net.minecraftforge.common.util.PacketLogger packetLogger = new net.minecraftforge.common.util.PacketLogger(this); + private ProtocolInfo outboundProtocol = null; + private ProtocolInfo inboundProtocol = null; - public Connection(PacketFlow p_129482_) { - this.receiving = p_129482_; + public Connection(final PacketFlow receiving) { + this.receiving = receiving; + if (this.receiving == PacketFlow.SERVERBOUND) + this.inboundProtocol = INITIAL_PROTOCOL; + else @@ -19,8 +19,8 @@ @Override @@ -91,6 +_,7 @@ - super.channelActive(p_129525_); - this.channel = p_129525_.channel(); + super.channelActive(ctx); + this.channel = ctx.channel(); this.address = this.channel.remoteAddress(); + if (activationHandler != null) activationHandler.accept(this); if (this.delayedDisconnect != null) { @@ -28,84 +28,84 @@ } @@ -151,6 +_,7 @@ } else { - if (packetlistener.shouldHandleMessage(p_129488_)) { + if (packetlistener.shouldHandleMessage(packet)) { try { -+ packetLogger.recv(p_129488_); - genericsFtw(p_129488_, packetlistener); ++ packetLogger.recv(packet); + genericsFtw(packet, packetlistener); } catch (RunningOnDifferentThreadException runningondifferentthreadexception) { } catch (RejectedExecutionException rejectedexecutionexception) { @@ -200,6 +_,7 @@ - if (p_333271_.flow() != this.getReceiving()) { - throw new IllegalStateException("Invalid inbound protocol: " + p_333271_.id()); + if (protocol.flow() != this.getReceiving()) { + throw new IllegalStateException("Invalid inbound protocol: " + protocol.id()); } else { -+ this.inboundProtocol = p_333271_; - this.packetListener = p_330962_; ++ this.inboundProtocol = protocol; + this.packetListener = packetListener; this.disconnectListener = null; UnconfiguredPipelineHandler.InboundConfigurationTask unconfiguredpipelinehandler$inboundconfigurationtask = UnconfiguredPipelineHandler.setupInboundProtocol( @@ -223,6 +_,8 @@ } else { UnconfiguredPipelineHandler.OutboundConfigurationTask unconfiguredpipelinehandler$outboundconfigurationtask = UnconfiguredPipelineHandler.setupOutboundProtocol( - p_329145_ + protocol + ).andThen( -+ f -> this.outboundProtocol = p_329145_ ++ f -> this.outboundProtocol = protocol ); - BundlerInfo bundlerinfo = p_329145_.bundlerInfo(); + BundlerInfo bundlerinfo = protocol.bundlerInfo(); if (bundlerinfo != null) { -@@ -272,7 +_,8 @@ - this.disconnectListener = p_330656_; - this.runOnceConnected(p_405096_ -> { - this.setupInboundProtocol(p_329827_, p_330656_); -- p_405096_.sendPacket(new ClientIntentionPacket(SharedConstants.getCurrentVersion().protocolVersion(), p_300730_, p_300598_, p_297789_), null, true); +@@ -274,7 +_,8 @@ + this.disconnectListener = listener; + this.runOnceConnected(connection -> { + this.setupInboundProtocol(inbound, listener); +- connection.sendPacket(new ClientIntentionPacket(SharedConstants.getCurrentVersion().protocolVersion(), hostName, port, intent), null, true); + // TODO: Change this to be a immediately sent login custom payload packet? -+ p_405096_.sendPacket(new ClientIntentionPacket(SharedConstants.getCurrentVersion().protocolVersion(), net.minecraftforge.network.NetworkContext.enhanceHostName(p_300730_), p_300598_, p_297789_), null, true); - this.setupOutboundProtocol(p_328134_); ++ connection.sendPacket(new ClientIntentionPacket(SharedConstants.getCurrentVersion().protocolVersion(), net.minecraftforge.network.NetworkContext.enhanceHostName(hostName), port, intent), null, true); + this.setupOutboundProtocol(outbound); }); } -@@ -317,10 +_,13 @@ - if (p_405953_ != null) { - ChannelFuture channelfuture = p_299937_ ? this.channel.writeAndFlush(p_243260_) : this.channel.write(p_243260_); - channelfuture.addListener(p_405953_); -+ channelfuture.addListener(f -> packetLogger.send(p_243260_)); - } else if (p_299937_) { - this.channel.writeAndFlush(p_243260_, this.channel.voidPromise()); -+ packetLogger.send(p_243260_); +@@ -319,10 +_,13 @@ + if (listener != null) { + ChannelFuture channelfuture = flush ? this.channel.writeAndFlush(packet) : this.channel.write(packet); + channelfuture.addListener(listener); ++ channelfuture.addListener(f -> packetLogger.send(packet)); + } else if (flush) { + this.channel.writeAndFlush(packet, this.channel.voidPromise()); ++ packetLogger.send(packet); } else { - this.channel.write(p_243260_, this.channel.voidPromise()); -+ packetLogger.send(p_243260_); + this.channel.write(packet, this.channel.voidPromise()); ++ packetLogger.send(packet); } } -@@ -389,7 +_,7 @@ +@@ -391,7 +_,7 @@ if (this.address == null) { return "local"; } else { -- return p_298740_ ? this.address.toString() : "IP hidden"; -+ return p_298740_ ? net.minecraftforge.network.DualStackUtils.getAddressString(this.address) : "IP hidden"; +- return logIPs ? this.address.toString() : "IP hidden"; ++ return logIPs ? net.minecraftforge.network.DualStackUtils.getAddressString(this.address) : "IP hidden"; } } -@@ -432,7 +_,9 @@ +@@ -436,7 +_,9 @@ } - public static ChannelFuture connect(InetSocketAddress p_290034_, EventLoopGroupHolder p_450865_, final Connection p_290031_) { -- return new Bootstrap().group(p_450865_.eventLoopGroup()).handler(new ChannelInitializer() { -+ net.minecraftforge.network.DualStackUtils.checkIPv6(p_290034_.getAddress()); -+ p_290031_.activationHandler = net.minecraftforge.network.NetworkRegistry::onConnectionStart; -+ return new Bootstrap().group(p_450865_.eventLoopGroup(true)).handler(new ChannelInitializer() { + public static ChannelFuture connect(final InetSocketAddress address, final EventLoopGroupHolder eventLoopGroupHolder, final Connection connection) { +- return new Bootstrap().group(eventLoopGroupHolder.eventLoopGroup()).handler(new ChannelInitializer() { ++ net.minecraftforge.network.DualStackUtils.checkIPv6(address.getAddress()); ++ connection.activationHandler = net.minecraftforge.network.NetworkRegistry::onConnectionStart; ++ return new Bootstrap().group(eventLoopGroupHolder.eventLoopGroup(true)).handler(new ChannelInitializer() { @Override - protected void initChannel(Channel p_129552_) { + protected void initChannel(final Channel channel) { try { -@@ -493,7 +_,8 @@ +@@ -503,7 +_,8 @@ - public static Connection connectToLocalServer(SocketAddress p_129494_) { + public static Connection connectToLocalServer(final SocketAddress address) { final Connection connection = new Connection(PacketFlow.CLIENTBOUND); - new Bootstrap().group(EventLoopGroupHolder.local().eventLoopGroup()).handler(new ChannelInitializer() { + connection.activationHandler = net.minecraftforge.network.NetworkRegistry::onConnectionStart; + new Bootstrap().group(EventLoopGroupHolder.local().eventLoopGroup(true)).handler(new ChannelInitializer() { @Override - protected void initChannel(Channel p_332618_) { - ChannelPipeline channelpipeline = p_332618_.pipeline(); -@@ -584,6 +_,22 @@ + protected void initChannel(final Channel channel) { + ChannelPipeline channelpipeline = channel.pipeline(); +@@ -594,6 +_,22 @@ public float getAverageSentPackets() { return this.averageSentPackets; @@ -127,4 +127,4 @@ + return this.outboundProtocol; } - public void setBandwidthLogger(LocalSampleLogger p_333554_) { + public void setBandwidthLogger(final LocalSampleLogger bandwidthLogger) { diff --git a/patches/minecraft/net/minecraft/network/FriendlyByteBuf.java.patch b/patches/minecraft/net/minecraft/network/FriendlyByteBuf.java.patch index 936d1064ad..726ecc919e 100644 --- a/patches/minecraft/net/minecraft/network/FriendlyByteBuf.java.patch +++ b/patches/minecraft/net/minecraft/network/FriendlyByteBuf.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/network/FriendlyByteBuf.java +++ b/net/minecraft/network/FriendlyByteBuf.java -@@ -1637,4 +_,8 @@ - public boolean release(int p_130347_) { - return this.source.release(p_130347_); +@@ -1615,4 +_,8 @@ + public boolean release(final int decrement) { + return this.source.release(decrement); } + + public FriendlyByteBuf wrap(ByteBuf data) { diff --git a/patches/minecraft/net/minecraft/network/RegistryFriendlyByteBuf.java.patch b/patches/minecraft/net/minecraft/network/RegistryFriendlyByteBuf.java.patch index ea99a5b55f..68f9ff5ea9 100644 --- a/patches/minecraft/net/minecraft/network/RegistryFriendlyByteBuf.java.patch +++ b/patches/minecraft/net/minecraft/network/RegistryFriendlyByteBuf.java.patch @@ -9,6 +9,6 @@ + return new RegistryFriendlyByteBuf(data, this.registryAccess); + } + - public static Function decorator(RegistryAccess p_336066_) { - return p_328649_ -> new RegistryFriendlyByteBuf(p_328649_, p_336066_); + public static Function decorator(final RegistryAccess registryAccess) { + return buf -> new RegistryFriendlyByteBuf(buf, registryAccess); } diff --git a/patches/minecraft/net/minecraft/network/chat/contents/TranslatableContents.java.patch b/patches/minecraft/net/minecraft/network/chat/contents/TranslatableContents.java.patch index 1cc54d0150..d208f6ce37 100644 --- a/patches/minecraft/net/minecraft/network/chat/contents/TranslatableContents.java.patch +++ b/patches/minecraft/net/minecraft/network/chat/contents/TranslatableContents.java.patch @@ -1,14 +1,14 @@ --- a/net/minecraft/network/chat/contents/TranslatableContents.java +++ b/net/minecraft/network/chat/contents/TranslatableContents.java -@@ -137,6 +_,11 @@ +@@ -136,6 +_,11 @@ j = l; } + if (j == 0) { + // Forge has some special formatting handlers defined in ForgeI18n, use those if no %s replacements present. -+ j = net.minecraftforge.internal.TextComponentMessageFormatHandler.handle(this, p_237517_, this.args, p_237516_); ++ j = net.minecraftforge.internal.TextComponentMessageFormatHandler.handle(this, decomposedParts, this.args, template); + } + - if (j < p_237516_.length()) { - String s3 = p_237516_.substring(j); + if (j < template.length()) { + String s3 = template.substring(j); if (s3.indexOf(37) != -1) { diff --git a/patches/minecraft/net/minecraft/network/protocol/common/ClientboundCustomPayloadPacket.java.patch b/patches/minecraft/net/minecraft/network/protocol/common/ClientboundCustomPayloadPacket.java.patch index 67b03aca63..6d4ce39733 100644 --- a/patches/minecraft/net/minecraft/network/protocol/common/ClientboundCustomPayloadPacket.java.patch +++ b/patches/minecraft/net/minecraft/network/protocol/common/ClientboundCustomPayloadPacket.java.patch @@ -4,14 +4,14 @@ public record ClientboundCustomPayloadPacket(CustomPacketPayload payload) implements Packet { private static final int MAX_PAYLOAD_SIZE = 1048576; public static final StreamCodec GAMEPLAY_STREAM_CODEC = CustomPacketPayload.codec( -- p_448776_ -> DiscardedPayload.codec(p_448776_, 1048576), -+ p_448776_ -> net.minecraftforge.common.ForgeHooks.getCustomPayloadCodec(p_448776_, 1048576), - Util.make(Lists.newArrayList(new CustomPacketPayload.TypeAndCodec<>(BrandPayload.TYPE, BrandPayload.STREAM_CODEC)), p_333496_ -> {}) +- id -> DiscardedPayload.codec(id, 1048576), ++ id -> net.minecraftforge.common.ForgeHooks.getCustomPayloadCodec(id, 1048576), + Util.make(Lists.newArrayList(new CustomPacketPayload.TypeAndCodec<>(BrandPayload.TYPE, BrandPayload.STREAM_CODEC)), types -> {}) ) .map(ClientboundCustomPayloadPacket::new, ClientboundCustomPayloadPacket::payload); public static final StreamCodec CONFIG_STREAM_CODEC = CustomPacketPayload.codec( -- p_448777_ -> DiscardedPayload.codec(p_448777_, 1048576), -+ p_448777_ -> net.minecraftforge.common.ForgeHooks.getCustomPayloadCodec(p_448777_, 1048576), - List.of(new CustomPacketPayload.TypeAndCodec<>(BrandPayload.TYPE, BrandPayload.STREAM_CODEC)) +- id -> DiscardedPayload.codec(id, 1048576), List.of(new CustomPacketPayload.TypeAndCodec<>(BrandPayload.TYPE, BrandPayload.STREAM_CODEC)) ++ id -> net.minecraftforge.common.ForgeHooks.getCustomPayloadCodec(id, 1048576), List.of(new CustomPacketPayload.TypeAndCodec<>(BrandPayload.TYPE, BrandPayload.STREAM_CODEC)) ) .map(ClientboundCustomPayloadPacket::new, ClientboundCustomPayloadPacket::payload); + diff --git a/patches/minecraft/net/minecraft/network/protocol/common/ServerboundCustomPayloadPacket.java.patch b/patches/minecraft/net/minecraft/network/protocol/common/ServerboundCustomPayloadPacket.java.patch index d115bddb2e..0ff99ea96d 100644 --- a/patches/minecraft/net/minecraft/network/protocol/common/ServerboundCustomPayloadPacket.java.patch +++ b/patches/minecraft/net/minecraft/network/protocol/common/ServerboundCustomPayloadPacket.java.patch @@ -4,8 +4,8 @@ public record ServerboundCustomPayloadPacket(CustomPacketPayload payload) implements Packet { private static final int MAX_PAYLOAD_SIZE = 32767; public static final StreamCodec STREAM_CODEC = CustomPacketPayload.codec( -- p_448778_ -> DiscardedPayload.codec(p_448778_, 32767), -+ p_448778_ -> net.minecraftforge.common.ForgeHooks.getCustomPayloadCodec(p_448778_, 32767), - Util.make(Lists.newArrayList(new CustomPacketPayload.TypeAndCodec<>(BrandPayload.TYPE, BrandPayload.STREAM_CODEC)), p_334419_ -> {}) +- id -> DiscardedPayload.codec(id, 32767), ++ id -> net.minecraftforge.common.ForgeHooks.getCustomPayloadCodec(id, 32767), + Util.make(Lists.newArrayList(new CustomPacketPayload.TypeAndCodec<>(BrandPayload.TYPE, BrandPayload.STREAM_CODEC)), types -> {}) ) .map(ServerboundCustomPayloadPacket::new, ServerboundCustomPayloadPacket::payload); diff --git a/patches/minecraft/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java.patch b/patches/minecraft/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java.patch index a32a900dec..96d0b9b6e3 100644 --- a/patches/minecraft/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java.patch +++ b/patches/minecraft/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java.patch @@ -3,9 +3,9 @@ @@ -18,7 +_,15 @@ } - static CustomPacketPayload.Type createType(String p_331650_) { -- return new CustomPacketPayload.Type<>(Identifier.withDefaultNamespace(p_331650_)); -+ return new CustomPacketPayload.Type<>(Identifier.parse(p_331650_)); + static CustomPacketPayload.Type createType(final String id) { +- return new CustomPacketPayload.Type<>(Identifier.withDefaultNamespace(id)); ++ return new CustomPacketPayload.Type<>(Identifier.parse(id)); + } + + static CustomPacketPayload.Type createType(String namespace, String path) { diff --git a/patches/minecraft/net/minecraft/network/protocol/login/custom/DiscardedQueryAnswerPayload.java.patch b/patches/minecraft/net/minecraft/network/protocol/login/custom/DiscardedQueryAnswerPayload.java.patch index 61030cbb4c..57349fdd30 100644 --- a/patches/minecraft/net/minecraft/network/protocol/login/custom/DiscardedQueryAnswerPayload.java.patch +++ b/patches/minecraft/net/minecraft/network/protocol/login/custom/DiscardedQueryAnswerPayload.java.patch @@ -16,11 +16,11 @@ + } + @Override - public void write(FriendlyByteBuf p_299186_) { + public void write(final FriendlyByteBuf output) { + if (this.data != null) { -+ p_299186_.writeBytes(this.data.slice()); ++ output.writeBytes(this.data.slice()); + } else { -+ encoder.accept(p_299186_); ++ encoder.accept(output); + } } } diff --git a/patches/minecraft/net/minecraft/network/protocol/login/custom/DiscardedQueryPayload.java.patch b/patches/minecraft/net/minecraft/network/protocol/login/custom/DiscardedQueryPayload.java.patch index eb8a8f804e..8a408319d4 100644 --- a/patches/minecraft/net/minecraft/network/protocol/login/custom/DiscardedQueryPayload.java.patch +++ b/patches/minecraft/net/minecraft/network/protocol/login/custom/DiscardedQueryPayload.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/network/protocol/login/custom/DiscardedQueryPayload.java +++ b/net/minecraft/network/protocol/login/custom/DiscardedQueryPayload.java -@@ -3,9 +_,21 @@ +@@ -3,8 +_,20 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.Identifier; @@ -14,12 +14,11 @@ + } + @Override - public void write(FriendlyByteBuf p_299949_) { + public void write(final FriendlyByteBuf output) { + if (this.data != null) { -+ p_299949_.writeBytes(this.data.slice()); ++ output.writeBytes(this.data.slice()); + } else { -+ encoder.accept(p_299949_); ++ encoder.accept(output); + } } - - @Override + } diff --git a/patches/minecraft/net/minecraft/network/protocol/status/ServerStatus.java.patch b/patches/minecraft/net/minecraft/network/protocol/status/ServerStatus.java.patch index 1dd136c8a6..0d250cc8f1 100644 --- a/patches/minecraft/net/minecraft/network/protocol/status/ServerStatus.java.patch +++ b/patches/minecraft/net/minecraft/network/protocol/status/ServerStatus.java.patch @@ -9,7 +9,7 @@ + Optional forgeData ) { public static final Codec CODEC = RecordCodecBuilder.create( - p_326135_ -> p_326135_.group( + i -> i.group( @@ -28,7 +_,8 @@ ServerStatus.Players.CODEC.lenientOptionalFieldOf("players").forGetter(ServerStatus::players), ServerStatus.Version.CODEC.lenientOptionalFieldOf("version").forGetter(ServerStatus::version), @@ -18,5 +18,5 @@ + Codec.BOOL.lenientOptionalFieldOf("enforcesSecureChat", false).forGetter(ServerStatus::enforcesSecureChat), + net.minecraftforge.network.ServerStatusPing.CODEC.optionalFieldOf("forgeData").forGetter(ServerStatus::forgeData) ) - .apply(p_326135_, ServerStatus::new) + .apply(i, ServerStatus::new) ); diff --git a/patches/minecraft/net/minecraft/network/syncher/EntityDataSerializers.java.patch b/patches/minecraft/net/minecraft/network/syncher/EntityDataSerializers.java.patch index bc463772d4..67b68b8513 100644 --- a/patches/minecraft/net/minecraft/network/syncher/EntityDataSerializers.java.patch +++ b/patches/minecraft/net/minecraft/network/syncher/EntityDataSerializers.java.patch @@ -1,22 +1,22 @@ --- a/net/minecraft/network/syncher/EntityDataSerializers.java +++ b/net/minecraft/network/syncher/EntityDataSerializers.java -@@ -128,15 +_,17 @@ +@@ -146,15 +_,17 @@ public static final EntityDataSerializer HUMANOID_ARM = EntityDataSerializer.forValueType(HumanoidArm.STREAM_CODEC); - public static void registerSerializer(EntityDataSerializer p_135051_) { + public static void registerSerializer(final EntityDataSerializer serializer) { + int id = - SERIALIZERS.add(p_135051_); + SERIALIZERS.add(serializer); + if (id >= 256) throw new RuntimeException("Vanilla DataSerializer ID limit exceeded"); } - public static @Nullable EntityDataSerializer getSerializer(int p_135049_) { -- return SERIALIZERS.byId(p_135049_); -+ return net.minecraftforge.common.ForgeHooks.getSerializer(p_135049_, SERIALIZERS); + public static @Nullable EntityDataSerializer getSerializer(final int id) { +- return SERIALIZERS.byId(id); ++ return net.minecraftforge.common.ForgeHooks.getSerializer(id, SERIALIZERS); } - public static int getSerializedId(EntityDataSerializer p_135053_) { -- return SERIALIZERS.getId(p_135053_); -+ return net.minecraftforge.common.ForgeHooks.getSerializerId(p_135053_, SERIALIZERS); + public static int getSerializedId(final EntityDataSerializer serializer) { +- return SERIALIZERS.getId(serializer); ++ return net.minecraftforge.common.ForgeHooks.getSerializerId(serializer, SERIALIZERS); } private EntityDataSerializers() { diff --git a/patches/minecraft/net/minecraft/network/syncher/SynchedEntityData.java.patch b/patches/minecraft/net/minecraft/network/syncher/SynchedEntityData.java.patch index 6584384f13..cd32bbfe62 100644 --- a/patches/minecraft/net/minecraft/network/syncher/SynchedEntityData.java.patch +++ b/patches/minecraft/net/minecraft/network/syncher/SynchedEntityData.java.patch @@ -3,16 +3,16 @@ @@ -27,11 +_,13 @@ } - public static EntityDataAccessor defineId(Class p_135354_, EntityDataSerializer p_135355_) { + public static EntityDataAccessor defineId(final Class clazz, final EntityDataSerializer type) { - if (LOGGER.isDebugEnabled()) { + if (true) { // Forge: This is very useful for mods that register keys on classes that are not their own try { Class oclass = Class.forName(Thread.currentThread().getStackTrace()[2].getClassName()); - if (!oclass.equals(p_135354_)) { -- LOGGER.debug("defineId called for: {} from {}", p_135354_, oclass, new RuntimeException()); + if (!oclass.equals(clazz)) { +- LOGGER.debug("defineId called for: {} from {}", clazz, oclass, new RuntimeException()); + // Forge: log at warn, mods should not add to classes that they don't own, and only add stacktrace when in debug is enabled as it is mostly not needed and consumes time -+ if (LOGGER.isDebugEnabled()) LOGGER.warn("defineId called for: {} from {}", p_135354_, oclass, new RuntimeException()); -+ else LOGGER.warn("defineId called for: {} from {}", p_135354_, oclass); ++ if (LOGGER.isDebugEnabled()) LOGGER.warn("defineId called for: {} from {}", clazz, oclass, new RuntimeException()); ++ else LOGGER.warn("defineId called for: {} from {}", clazz, oclass); } } catch (ClassNotFoundException classnotfoundexception) { } diff --git a/patches/minecraft/net/minecraft/resources/HolderSetCodec.java.patch b/patches/minecraft/net/minecraft/resources/HolderSetCodec.java.patch index b54b7873b5..23003264b6 100644 --- a/patches/minecraft/net/minecraft/resources/HolderSetCodec.java.patch +++ b/patches/minecraft/net/minecraft/resources/HolderSetCodec.java.patch @@ -7,54 +7,54 @@ + private final Codec> forgeDispatchCodec; + private final Codec, Either, List>>>> combinedCodec; - private static Codec>> homogenousList(Codec> p_206668_, boolean p_206669_) { - Codec>> codec = p_206668_.listOf().validate(ExtraCodecs.ensureHomogenous(Holder::kind)); -@@ -36,6 +_,10 @@ - this.elementCodec = p_206661_; - this.homogenousListCodec = homogenousList(p_206661_, p_206662_); - this.registryAwareCodec = Codec.either(TagKey.hashedCodec(p_206660_), this.homogenousListCodec); + private static Codec>> homogenousList(final Codec> elementCodec, final boolean alwaysUseList) { + Codec>> codec = elementCodec.listOf().validate(ExtraCodecs.ensureHomogenous(Holder::kind)); +@@ -38,6 +_,10 @@ + this.elementCodec = elementCodec; + this.homogenousListCodec = homogenousList(elementCodec, alwaysUseList); + this.registryAwareCodec = Codec.either(TagKey.hashedCodec(registryKey), this.homogenousListCodec); + // FORGE: make registry-specific dispatch codec and make forge-or-vanilla either codec + this.forgeDispatchCodec = Codec.lazyInitialized(() -> net.minecraftforge.registries.ForgeRegistries.HOLDER_SET_TYPES.get().getCodec()) -+ .dispatch(net.minecraftforge.registries.holdersets.ICustomHolderSet::type, type -> type.makeCodec(p_206660_, p_206661_, p_206662_)); ++ .dispatch(net.minecraftforge.registries.holdersets.ICustomHolderSet::type, type -> type.makeCodec(registryKey, elementCodec, alwaysUseList)); + this.combinedCodec = Codec.either(this.forgeDispatchCodec, this.registryAwareCodec); } @Override -@@ -44,14 +_,17 @@ +@@ -46,14 +_,17 @@ Optional> optional = registryops.getter(this.registryKey); if (optional.isPresent()) { HolderGetter holdergetter = optional.get(); - return this.registryAwareCodec + return this.combinedCodec - .decode(p_206696_, p_206697_) + .decode(ops, input) .flatMap( - p_326147_ -> { - DataResult> dataresult = p_326147_.getFirst() + p -> { + DataResult> dataresult = p.getFirst() + .map(custom -> DataResult.success(custom), + tagOrList -> tagOrList .map( - p_326145_ -> lookupTag(holdergetter, (TagKey)p_326145_), - p_326140_ -> DataResult.success(HolderSet.direct((List>)p_326140_)) + tag -> lookupTag(holdergetter, (TagKey)tag), + values -> DataResult.success(HolderSet.direct((List>)values)) + ) ); - return dataresult.map(p_326149_ -> Pair.of((HolderSet)p_326149_, (T)p_326147_.getSecond())); + return dataresult.map(holders -> Pair.of((HolderSet)holders, (T)p.getSecond())); } -@@ -84,7 +_,7 @@ +@@ -86,7 +_,7 @@ } - private DataResult, T>> decodeWithoutRegistry(DynamicOps p_206671_, T p_206672_) { -- return this.elementCodec.listOf().decode(p_206671_, p_206672_).flatMap(p_206666_ -> { -+ return this.homogenousListCodec.decode(p_206671_, p_206672_).flatMap(p_206666_ -> { // Forge: Match encodeWithoutRegistry's use of the homogenousListCodec + private DataResult, T>> decodeWithoutRegistry(final DynamicOps ops, final T input) { +- return this.elementCodec.listOf().decode(ops, input).flatMap(p -> { ++ return this.homogenousListCodec.decode(ops, input).flatMap(p -> { // Forge: Match encodeWithoutRegistry's use of the homogenousListCodec List> list = new ArrayList<>(); - for (Holder holder : p_206666_.getFirst()) { -@@ -100,6 +_,9 @@ + for (Holder holder : p.getFirst()) { +@@ -102,6 +_,9 @@ } - private DataResult encodeWithoutRegistry(HolderSet p_206690_, DynamicOps p_206691_, T p_206692_) { + private DataResult encodeWithoutRegistry(final HolderSet input, final DynamicOps ops, final T prefix) { + // FORGE: use the dispatch codec to encode custom holdersets, otherwise fall back to vanilla tag/list -+ if (p_206690_ instanceof net.minecraftforge.registries.holdersets.ICustomHolderSet customHolderSet) -+ return this.forgeDispatchCodec.encode(customHolderSet, p_206691_, p_206692_); - return this.homogenousListCodec.encode(p_206690_.stream().toList(), p_206691_, p_206692_); ++ if (input instanceof net.minecraftforge.registries.holdersets.ICustomHolderSet customHolderSet) ++ return this.forgeDispatchCodec.encode(customHolderSet, ops, prefix); + return this.homogenousListCodec.encode(input.stream().toList(), ops, prefix); } } diff --git a/patches/minecraft/net/minecraft/resources/Identifier.java.patch b/patches/minecraft/net/minecraft/resources/Identifier.java.patch index 2e06a42a49..870fa93d0b 100644 --- a/patches/minecraft/net/minecraft/resources/Identifier.java.patch +++ b/patches/minecraft/net/minecraft/resources/Identifier.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/resources/Identifier.java +++ b/net/minecraft/resources/Identifier.java -@@ -269,4 +_,10 @@ - return p_458379_; +@@ -266,4 +_,10 @@ + return path; } } + diff --git a/patches/minecraft/net/minecraft/resources/RegistryDataLoader.java.patch b/patches/minecraft/net/minecraft/resources/RegistryDataLoader.java.patch index 2fa3da37e3..d53de572f7 100644 --- a/patches/minecraft/net/minecraft/resources/RegistryDataLoader.java.patch +++ b/patches/minecraft/net/minecraft/resources/RegistryDataLoader.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/resources/RegistryDataLoader.java +++ b/net/minecraft/resources/RegistryDataLoader.java -@@ -91,7 +_,7 @@ - Lifecycle lifecycle = p_326161_.map(KnownPack::isVanilla).map(p_326166_ -> Lifecycle.stable()).orElse(Lifecycle.experimental()); - return new RegistrationInfo(p_326161_, lifecycle); - }); +@@ -80,7 +_,7 @@ + public class RegistryDataLoader { + private static final Logger LOGGER = LogUtils.getLogger(); + private static final Comparator> ERROR_KEY_COMPARATOR = Comparator., Identifier>comparing(ResourceKey::registry).thenComparing(ResourceKey::identifier); - public static final List> WORLDGEN_REGISTRIES = List.of( + public static final List> WORLDGEN_REGISTRIES = net.minecraftforge.registries.DataPackRegistriesHooks.grabWorldgenRegistries( new RegistryDataLoader.RegistryData<>(Registries.DIMENSION_TYPE, DimensionType.DIRECT_CODEC), new RegistryDataLoader.RegistryData<>(Registries.BIOME, Biome.DIRECT_CODEC), new RegistryDataLoader.RegistryData<>(Registries.CHAT_TYPE, ChatType.DIRECT_CODEC), -@@ -134,7 +_,7 @@ +@@ -130,7 +_,7 @@ public static final List> DIMENSION_REGISTRIES = List.of( new RegistryDataLoader.RegistryData<>(Registries.LEVEL_STEM, LevelStem.CODEC) ); @@ -19,83 +19,13 @@ new RegistryDataLoader.RegistryData<>(Registries.CHAT_TYPE, ChatType.DIRECT_CODEC), new RegistryDataLoader.RegistryData<>(Registries.TRIM_PATTERN, TrimPattern.DIRECT_CODEC), @@ -160,6 +_,10 @@ + new RegistryDataLoader.RegistryData<>(Registries.WORLD_CLOCK, WorldClock.DIRECT_CODEC), new RegistryDataLoader.RegistryData<>(Registries.TIMELINE, Timeline.NETWORK_CODEC) ); - ++ + public static java.util.stream.Stream> getWorldGenAndDimensionStream() { + return java.util.stream.Stream.concat(RegistryDataLoader.WORLDGEN_REGISTRIES.stream(), RegistryDataLoader.DIMENSION_REGISTRIES.stream()); + } -+ - public static RegistryAccess.Frozen load( - ResourceManager p_252046_, List> p_250344_, List> p_366741_ - ) { -@@ -276,7 +_,7 @@ - private static void loadElementFromResource( - WritableRegistry p_330991_, -- Decoder p_333909_, -+ Decoder> p_333909_, - RegistryOps p_332135_, - ResourceKey p_332850_, - Resource p_335244_, -@@ -284,7 +_,23 @@ - ) throws IOException { - try (Reader reader = p_335244_.openAsReader()) { - JsonElement jsonelement = StrictJsonParser.parse(reader); -- DataResult dataresult = p_333909_.parse(p_332135_, jsonelement); -+ -+ var result = p_333909_.decode(p_332135_, jsonelement); -+ -+ if (result.isError()) { -+ LOGGER.error("Couldn't parse data file {}: {}", p_332850_, result.error().get().message()); -+ throw new IllegalStateException("Couldn't parse data file " + p_332850_ + ": " + result.error().get().message()); -+ } -+ -+ var mappedResult = result.result().map(a -> a.getFirst()); -+ -+ if (mappedResult.get().isEmpty()) { -+ LOGGER.debug("Skipping {} conditions not met", p_332850_); -+ return; -+ } -+ -+ DataResult dataresult = result.map(p -> p.mapFirst(Optional::get)).map(p -> p.getFirst()); -+ - E e = dataresult.getOrThrow(); - p_330991_.register(p_332850_, e, p_332222_); - } -@@ -299,6 +_,7 @@ - ) { - FileToIdConverter filetoidconverter = FileToIdConverter.registry(p_331358_.key()); - RegistryOps registryops = RegistryOps.create(JsonOps.INSTANCE, p_333035_); -+ Decoder> conditional = net.minecraftforge.common.crafting.conditions.ConditionCodec.wrap(p_329404_); - - for (Entry entry : filetoidconverter.listMatchingResources(p_335634_).entrySet()) { - Identifier identifier = entry.getKey(); -@@ -307,7 +_,7 @@ - RegistrationInfo registrationinfo = REGISTRATION_INFO_CACHE.apply(resource.knownPackInfo()); - - try { -- loadElementFromResource(p_331358_, p_329404_, registryops, resourcekey, resource, registrationinfo); -+ loadElementFromResource(p_331358_, conditional, registryops, resourcekey, resource, registrationinfo); - } catch (Exception exception) { - p_335074_.put( - resourcekey, -@@ -330,7 +_,8 @@ - RegistryDataLoader.NetworkedRegistryData registrydataloader$networkedregistrydata = p_331925_.get(p_332518_.key()); - if (registrydataloader$networkedregistrydata != null) { - RegistryOps registryops = RegistryOps.create(NbtOps.INSTANCE, p_329253_); -- RegistryOps registryops1 = RegistryOps.create(JsonOps.INSTANCE, p_329253_); -+ RegistryOps registryops1 = net.minecraftforge.common.crafting.conditions.ICondition.IContext.TAGS_INVALID.wrap(RegistryOps.create(JsonOps.INSTANCE, p_329253_)); -+ Decoder> conditional = net.minecraftforge.common.crafting.conditions.ConditionCodec.wrap(p_328898_); - FileToIdConverter filetoidconverter = FileToIdConverter.registry(p_332518_.key()); - - for (RegistrySynchronization.PackedRegistryEntry registrysynchronization$packedregistryentry : registrydataloader$networkedregistrydata.elements) { -@@ -352,7 +_,7 @@ - - try { - Resource resource = p_332010_.getResourceOrThrow(identifier); -- loadElementFromResource(p_332518_, p_328898_, registryops1, resourcekey, resource, NETWORK_REGISTRATION_INFO); -+ loadElementFromResource(p_332518_, conditional, registryops1, resourcekey, resource, NETWORK_REGISTRATION_INFO); - } catch (Exception exception1) { - p_335768_.put(resourcekey, new IllegalStateException("Failed to parse local data", exception1)); - } + public static CompletableFuture load( + final ResourceManager resourceManager, diff --git a/patches/minecraft/net/minecraft/resources/RegistryOps.java.patch b/patches/minecraft/net/minecraft/resources/RegistryOps.java.patch index 13a649f606..3eaaa3317e 100644 --- a/patches/minecraft/net/minecraft/resources/RegistryOps.java.patch +++ b/patches/minecraft/net/minecraft/resources/RegistryOps.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/resources/RegistryOps.java +++ b/net/minecraft/resources/RegistryOps.java @@ -76,6 +_,22 @@ - .forGetter(p_255526_ -> null); + .forGetter(e -> null); } -+ public static com.mojang.serialization.MapCodec> retrieveRegistryLookup(ResourceKey> resourceKey) { ++ public static com.mojang.serialization.MapCodec> retrieveRegistryLookup(final ResourceKey> resourceKey) { + return ExtraCodecs.retrieveContext(ops -> { + if (!(ops instanceof RegistryOps registryOps)) { + return DataResult.error(() -> "Not a registry ops"); @@ -20,6 +20,6 @@ + }); + } + - public static RecordCodecBuilder> retrieveElement(ResourceKey p_256347_) { - ResourceKey> resourcekey = ResourceKey.createRegistryKey(p_256347_.registry()); + public static RecordCodecBuilder> retrieveElement(final ResourceKey key) { + ResourceKey> resourcekey = ResourceKey.createRegistryKey(key.registry()); return ExtraCodecs.retrieveContext( diff --git a/patches/minecraft/net/minecraft/resources/ResourceKey.java.patch b/patches/minecraft/net/minecraft/resources/ResourceKey.java.patch index cd8b023ff3..071f0c0ff1 100644 --- a/patches/minecraft/net/minecraft/resources/ResourceKey.java.patch +++ b/patches/minecraft/net/minecraft/resources/ResourceKey.java.patch @@ -9,10 +9,10 @@ private static final ConcurrentMap> VALUES = new MapMaker().weakValues().makeMap(); private final Identifier registryName; private final Identifier identifier; -@@ -67,5 +_,18 @@ +@@ -65,5 +_,18 @@ } - record InternKey(Identifier registry, Identifier identifier) { + private record InternKey(Identifier registry, Identifier identifier) { + } + + @Override diff --git a/patches/minecraft/net/minecraft/resources/ResourceManagerRegistryLoadTask.java.patch b/patches/minecraft/net/minecraft/resources/ResourceManagerRegistryLoadTask.java.patch new file mode 100644 index 0000000000..edef63a6ec --- /dev/null +++ b/patches/minecraft/net/minecraft/resources/ResourceManagerRegistryLoadTask.java.patch @@ -0,0 +1,38 @@ +--- a/net/minecraft/resources/ResourceManagerRegistryLoadTask.java ++++ b/net/minecraft/resources/ResourceManagerRegistryLoadTask.java +@@ -21,6 +_,7 @@ + import net.minecraft.util.thread.ParallelMapTransform; + + public class ResourceManagerRegistryLoadTask extends RegistryLoadTask { ++ private static final org.slf4j.Logger LOGGER = com.mojang.logging.LogUtils.getLogger(); + private static final Function, RegistrationInfo> REGISTRATION_INFO_CACHE = Util.memoize(knownPack -> { + Lifecycle lifecycle = knownPack.map(KnownPack::isVanilla).map(info -> Lifecycle.stable()).orElse(Lifecycle.experimental()); + return new RegistrationInfo(knownPack, lifecycle); +@@ -40,6 +_,7 @@ + @Override + public CompletableFuture load(final RegistryOps.RegistryInfoLookup context, final Executor executor) { + FileToIdConverter filetoidconverter = FileToIdConverter.registry(this.registryKey()); ++ var optionalCodec = net.minecraftforge.common.crafting.conditions.ConditionCodec.wrap(this.data.elementCodec()); + return CompletableFuture.>supplyAsync(() -> filetoidconverter.listMatchingResources(this.resourceManager), executor) + .thenCompose( + registryResources -> { +@@ -49,9 +_,18 @@ + (resourceId, thunk) -> { + ResourceKey resourcekey = ResourceKey.create(this.registryKey(), filetoidconverter.fileToId(resourceId)); + RegistrationInfo registrationinfo = REGISTRATION_INFO_CACHE.apply(thunk.knownPackInfo()); ++ // braking types here for smaller patch, its just used for error messages so its fine ++ var result = RegistryLoadTask.PendingRegistration.loadFromResource(optionalCodec, registryops, (ResourceKey>)resourcekey, thunk); ++ if (!result.right().isPresent()) { // Wasn't an error so check if present ++ var value = result.left().get(); ++ if (value.isEmpty()) { ++ LOGGER.debug("Skipping {} conditions not met", resourcekey); ++ return null; ++ } ++ } + return new RegistryLoadTask.PendingRegistration<>( + resourcekey, +- RegistryLoadTask.PendingRegistration.loadFromResource(this.data.elementCodec(), registryops, resourcekey, thunk), ++ result.mapLeft(Optional::get), + registrationinfo + ); + }, diff --git a/patches/minecraft/net/minecraft/server/Bootstrap.java.patch b/patches/minecraft/net/minecraft/server/Bootstrap.java.patch index 5c593f41e2..f103f90d70 100644 --- a/patches/minecraft/net/minecraft/server/Bootstrap.java.patch +++ b/patches/minecraft/net/minecraft/server/Bootstrap.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/server/Bootstrap.java +++ b/net/minecraft/server/Bootstrap.java @@ -57,6 +_,8 @@ - CauldronInteraction.bootStrap(); + CauldronInteractions.bootStrap(); BuiltInRegistries.bootStrap(); CreativeModeTabs.validate(); + net.minecraftforge.registries.GameData.vanillaSnapshot(); diff --git a/patches/minecraft/net/minecraft/server/Eula.java.patch b/patches/minecraft/net/minecraft/server/Eula.java.patch index 4780bcf07f..6b00b1a1c7 100644 --- a/patches/minecraft/net/minecraft/server/Eula.java.patch +++ b/patches/minecraft/net/minecraft/server/Eula.java.patch @@ -2,8 +2,8 @@ +++ b/net/minecraft/server/Eula.java @@ -17,7 +_,7 @@ - public Eula(Path p_135943_) { - this.file = p_135943_; + public Eula(final Path file) { + this.file = file; - this.agreed = SharedConstants.IS_RUNNING_IN_IDE || this.readFile(); + this.agreed = SharedConstants.IS_RUNNING_IN_IDE || net.minecraftforge.gametest.ForgeGameTestHooks.isGametestServer() || this.readFile(); // Forge: Automatically agree to EULA for gametest servers to aid CI } diff --git a/patches/minecraft/net/minecraft/server/Main.java.patch b/patches/minecraft/net/minecraft/server/Main.java.patch index 5eeb7102c3..016ca66cd9 100644 --- a/patches/minecraft/net/minecraft/server/Main.java.patch +++ b/patches/minecraft/net/minecraft/server/Main.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/Main.java +++ b/net/minecraft/server/Main.java -@@ -84,6 +_,17 @@ +@@ -83,6 +_,17 @@ OptionSpec optionspec13 = optionparser.accepts("jfrProfile"); OptionSpec optionspec14 = optionparser.accepts("pidFile").withRequiredArg().withValuesConvertedBy(new PathConverter()); OptionSpec optionspec15 = optionparser.nonOptions(); @@ -17,8 +17,8 @@ + } try { - OptionSet optionset = optionparser.parse(p_129699_); -@@ -92,6 +_,14 @@ + OptionSet optionset = optionparser.parse(args); +@@ -91,6 +_,14 @@ return; } @@ -33,7 +33,7 @@ Path path = optionset.valueOf(optionspec14); if (path != null) { writePidFile(path); -@@ -106,24 +_,29 @@ +@@ -105,24 +_,28 @@ Bootstrap.validate(); Util.startTimerHackThread(); Path path1 = Paths.get("server.properties"); @@ -46,7 +46,6 @@ RegionFileVersion.configure(dedicatedserversettings.getProperties().regionFileComression); - Path path2 = Paths.get("eula.txt"); - Eula eula = new Eula(path2); -+ if (optionset.has(optionspec1)) { LOGGER.info("Initialized '{}' and '{}'", path1.toAbsolutePath(), path2.toAbsolutePath()); return; @@ -70,7 +69,7 @@ LevelStorageSource levelstoragesource = LevelStorageSource.createDefault(file1.toPath()); LevelStorageSource.LevelStorageAccess levelstoragesource$levelstorageaccess = levelstoragesource.validateAndCreateAccess(s); Dynamic dynamic; -@@ -174,6 +_,10 @@ +@@ -158,6 +_,10 @@ PackRepository packrepository = ServerPacksSource.createPackRepository(levelstoragesource$levelstorageaccess); @@ -80,31 +79,8 @@ + WorldStem worldstem; try { - WorldLoader.InitConfig worldloader$initconfig = loadOrCreateConfig(dedicatedserversettings.getProperties(), dynamic1, flag, packrepository); -@@ -222,17 +_,18 @@ - } - - levelstoragesource$levelstorageaccess.saveDataTag(registryaccess$frozen, worlddata); -- final DedicatedServer dedicatedserver = MinecraftServer.spin( -+ final MinecraftServer dedicatedserver = MinecraftServer.spin( - p_421274_ -> { -- DedicatedServer dedicatedserver1 = new DedicatedServer( -+ MinecraftServer dedicatedserver1; -+ dedicatedserver1 = new DedicatedServer( - p_421274_, levelstoragesource$levelstorageaccess, packrepository, worldstem, dedicatedserversettings, DataFixers.getDataFixer(), services - ); - dedicatedserver1.setPort(optionset.valueOf(optionspec11)); - dedicatedserver1.setDemo(optionset.has(optionspec2)); - dedicatedserver1.setId(optionset.valueOf(optionspec12)); - boolean flag2 = !optionset.has(optionspec) && !optionset.valuesOf(optionspec15).contains("nogui"); -- if (flag2 && !GraphicsEnvironment.isHeadless()) { -- dedicatedserver1.showGui(); -+ if (flag2 && !GraphicsEnvironment.isHeadless() && dedicatedserver1 instanceof DedicatedServer ds) { -+ ds.showGui(); - } - - return dedicatedserver1; -@@ -242,6 +_,7 @@ + WorldLoader.InitConfig worldloader$initconfig = loadOrCreateConfig(dedicatedserversettings.getProperties(), dynamic, flag1, packrepository); +@@ -231,6 +_,7 @@ @Override public void run() { dedicatedserver.halt(true); @@ -112,13 +88,13 @@ } }; thread.setUncaughtExceptionHandler(new DefaultUncaughtExceptionHandler(LOGGER)); -@@ -275,6 +_,16 @@ - worldoptions = p_427999_ ? dedicatedserverproperties.worldOptions.withBonusChest(true) : dedicatedserverproperties.worldOptions; - worlddimensions = dedicatedserverproperties.createDimensions(p_423661_.datapackWorldgen()); +@@ -266,6 +_,16 @@ + worldoptions = bonusChest ? dedicatedserverproperties.worldOptions.withBonusChest(true) : dedicatedserverproperties.worldOptions; + worlddimensions = dedicatedserverproperties.createDimensions(context.datapackWorldgen()); } + + //Forge: Do a write-read-cycle to inject modded dimensions on first start of a dedicated server into its generated world dimensions list. -+ var dynamicops = net.minecraft.resources.RegistryOps.create(net.minecraft.nbt.NbtOps.INSTANCE, p_423661_.datapackWorldgen()); ++ var dynamicops = net.minecraft.resources.RegistryOps.create(net.minecraft.nbt.NbtOps.INSTANCE, context.datapackWorldgen()); + worlddimensions = WorldDimensions.CODEC.encoder() + .encodeStart(dynamicops, worlddimensions) + .flatMap((writtenPayloadWithModdedDimensions) -> @@ -127,5 +103,5 @@ + .resultOrPartial(LOGGER::error) + .orElse(worlddimensions); - WorldDimensions.Complete worlddimensions$complete = worlddimensions.bake(p_422717_); - Lifecycle lifecycle = worlddimensions$complete.lifecycle().add(p_423661_.datapackWorldgen().allRegistriesLifecycle()); + WorldDimensions.Complete worlddimensions$complete = worlddimensions.bake(datapackDimensions); + Lifecycle lifecycle = worlddimensions$complete.lifecycle().add(context.datapackWorldgen().allRegistriesLifecycle()); diff --git a/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch b/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch index ace963d40e..e95d01147d 100644 --- a/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch +++ b/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch @@ -1,39 +1,39 @@ --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -284,7 +_,7 @@ +@@ -298,7 +_,7 @@ - public static S spin(Function p_129873_) { + public static S spin(final Function factory) { AtomicReference atomicreference = new AtomicReference<>(); - Thread thread = new Thread(() -> atomicreference.get().runServer(), "Server thread"); + Thread thread = new Thread(net.minecraftforge.fml.util.thread.SidedThreadGroups.SERVER, () -> atomicreference.get().runServer(), "Server thread"); - thread.setUncaughtExceptionHandler((p_177909_, p_177910_) -> LOGGER.error("Uncaught exception in server thread", p_177910_)); + thread.setUncaughtExceptionHandler((t, e) -> LOGGER.error("Uncaught exception in server thread", e)); if (Runtime.getRuntime().availableProcessors() > 4) { thread.setPriority(8); -@@ -407,6 +_,7 @@ - this.scoreboard.load(dimensiondatastorage.computeIfAbsent(ScoreboardSaveData.TYPE).getData()); - this.commandStorage = new CommandStorage(dimensiondatastorage); - this.stopwatches = dimensiondatastorage.computeIfAbsent(Stopwatches.TYPE); +@@ -442,6 +_,7 @@ + this.scoreboard.load(this.savedDataStorage.computeIfAbsent(ScoreboardSaveData.TYPE).getData()); + this.commandStorage = new CommandStorage(this.savedDataStorage); + this.stopwatches = this.savedDataStorage.computeIfAbsent(Stopwatches.TYPE); + net.minecraftforge.event.ForgeEventFactory.onLevelLoad(levels.get(Level.OVERWORLD)); if (!serverleveldata.isInitialized()) { try { setInitialSpawn(serverlevel, serverleveldata, worldoptions.generateBonusChest(), flag, this.levelLoadListener); -@@ -447,6 +_,7 @@ - this, this.executor, this.storageSource, derivedleveldata, resourcekey1, entry.getValue(), flag, j, ImmutableList.of(), false, randomsequences +@@ -476,6 +_,7 @@ + this, this.executor, this.storageSource, derivedleveldata, resourcekey1, entry.getValue(), flag, j, ImmutableList.of(), false ); this.levels.put(resourcekey1, serverlevel1); + net.minecraftforge.event.ForgeEventFactory.onLevelLoad(serverlevel1); } else { serverlevel1 = serverlevel; } -@@ -492,6 +_,7 @@ - p_177898_.setSpawn(LevelData.RespawnData.of(p_177897_.dimension(), BlockPos.ZERO.above(80), 0.0F, 0.0F)); +@@ -498,6 +_,7 @@ + levelData.setSpawn(LevelData.RespawnData.of(level.dimension(), BlockPos.ZERO.above(80), 0.0F, 0.0F)); } else { - ServerChunkCache serverchunkcache = p_177897_.getChunkSource(); -+ if (net.minecraftforge.event.ForgeEventFactory.onCreateWorldSpawn(p_177897_, p_177898_)) return; - ChunkPos chunkpos = new ChunkPos(serverchunkcache.randomState().sampler().findSpawnPosition()); - p_431711_.start(LevelLoadListener.Stage.PREPARE_GLOBAL_SPAWN, 0); - p_431711_.updateFocus(p_177897_.dimension(), chunkpos); -@@ -677,6 +_,7 @@ + ServerChunkCache serverchunkcache = level.getChunkSource(); ++ if (net.minecraftforge.event.ForgeEventFactory.onCreateWorldSpawn(level, levelData)) return; + ChunkPos chunkpos = ChunkPos.containing(serverchunkcache.randomState().sampler().findSpawnPosition()); + levelLoadListener.start(LevelLoadListener.Stage.PREPARE_GLOBAL_SPAWN, 0); + levelLoadListener.updateFocus(level.dimension(), chunkpos); +@@ -687,6 +_,7 @@ for (ServerLevel serverlevel2 : this.getAllLevels()) { if (serverlevel2 != null) { try { @@ -41,7 +41,7 @@ serverlevel2.close(); } catch (IOException ioexception1) { LOGGER.error("Exception closing the level", (Throwable)ioexception1); -@@ -723,9 +_,11 @@ +@@ -734,9 +_,11 @@ throw new IllegalStateException("Failed to initialize server"); } @@ -53,7 +53,7 @@ while (this.running) { long i; -@@ -774,6 +_,8 @@ +@@ -786,6 +_,8 @@ this.isReady = true; JvmProfiler.INSTANCE.onServerTick(this.smoothedTickTimeMillis); } @@ -62,7 +62,7 @@ } catch (Throwable throwable2) { LOGGER.error("Encountered an unexpected exception", throwable2); CrashReport crashreport = constructOrExtractCrashReport(throwable2); -@@ -785,6 +_,7 @@ +@@ -797,6 +_,7 @@ LOGGER.error("We were unable to save this crash report to disk."); } @@ -70,7 +70,7 @@ this.onServerCrash(crashreport); } finally { try { -@@ -793,6 +_,7 @@ +@@ -805,6 +_,7 @@ } catch (Throwable throwable) { LOGGER.error("Exception stopping the server", throwable); } finally { @@ -78,14 +78,14 @@ this.onServerExit(); } } -@@ -995,12 +_,14 @@ +@@ -985,12 +_,14 @@ } } -+ net.minecraftforge.event.ForgeEventFactory.onPreServerTick(p_129871_, this); ++ net.minecraftforge.event.ForgeEventFactory.onPreServerTick(haveTime, this); this.tickCount++; this.tickRateManager.tick(); - this.tickChildren(p_129871_); + this.tickChildren(haveTime); if (i - this.lastServerStatus >= STATUS_EXPIRE_TIME_NANOS) { this.lastServerStatus = i; this.status = this.buildServerStatus(); @@ -93,15 +93,15 @@ } this.ticksUntilAutosave--; -@@ -1018,6 +_,7 @@ +@@ -1008,6 +_,7 @@ this.smoothedTickTimeMillis = this.smoothedTickTimeMillis * 0.8F + (float)k / (float)TimeUtil.NANOSECONDS_PER_MILLISECOND * 0.19999999F; this.logTickMethodTime(i); profilerfiller.pop(); -+ net.minecraftforge.event.ForgeEventFactory.onPostServerTick(p_129871_, this); ++ net.minecraftforge.event.ForgeEventFactory.onPostServerTick(haveTime, this); } - public void processPacketsAndTick(boolean p_452829_) { -@@ -1079,7 +_,8 @@ + protected void processPacketsAndTick(final boolean sprinting) { +@@ -1069,7 +_,8 @@ Optional.of(serverstatus$players), Optional.of(ServerStatus.Version.current()), Optional.ofNullable(this.statusIcon), @@ -111,29 +111,24 @@ ); } -@@ -1111,7 +_,8 @@ - profilerfiller.popPush("levels"); +@@ -1114,9 +_,11 @@ + profilerfiller.push("levels"); this.updateEffectiveRespawnData(); - for (ServerLevel serverlevel : this.getAllLevels()) { + for (ServerLevel serverlevel : this.getWorldArray()) { + long tickStart = Util.getNanos(); profilerfiller.push(() -> serverlevel + " " + serverlevel.dimension().identifier()); - if (this.tickCount % 20 == 0) { - profilerfiller.push("timeSync"); -@@ -1120,6 +_,7 @@ - } - profilerfiller.push("tick"); -+ net.minecraftforge.event.ForgeEventFactory.onPreLevelTick(serverlevel, p_129954_); ++ net.minecraftforge.event.ForgeEventFactory.onPreLevelTick(serverlevel, haveTime); try { - serverlevel.tick(p_129954_); -@@ -1128,9 +_,11 @@ + serverlevel.tick(haveTime); +@@ -1125,9 +_,11 @@ serverlevel.fillReportDetails(crashreport); throw new ReportedException(crashreport); } -+ net.minecraftforge.event.ForgeEventFactory.onPostLevelTick(serverlevel, p_129954_); ++ net.minecraftforge.event.ForgeEventFactory.onPostLevelTick(serverlevel, haveTime); profilerfiller.pop(); profilerfiller.pop(); @@ -141,7 +136,7 @@ } profilerfiller.popPush("connection"); -@@ -1139,7 +_,7 @@ +@@ -1136,7 +_,7 @@ this.playerList.tick(); profilerfiller.popPush("debugSubscribers"); this.debugSubscribers.tick(); @@ -150,41 +145,41 @@ profilerfiller.popPush("gameTests"); GameTestTicker.SINGLETON.tick(); } -@@ -1238,7 +_,7 @@ +@@ -1222,7 +_,7 @@ + } - @DontObfuscate public String getServerModName() { - return "vanilla"; + return net.minecraftforge.internal.BrandingControl.getBranding(); } - public SystemReport fillSystemReport(SystemReport p_177936_) { -@@ -1564,6 +_,7 @@ - this.functionManager.replaceLibrary(this.resources.managers.getFunctionLibrary()); - this.structureTemplateManager.onResourceManagerReload(this.resources.resourceManager); - this.fuelValues = FuelValues.vanillaBurnTimes(this.registries.compositeAccess(), this.worldData.enabledFeatures()); -+ this.getPlayerList().getPlayers().forEach(this.getPlayerList()::sendPlayerPermissionLevel); //Forge: Fix newly added/modified commands not being sent to the client when commands reload. - }, this); - if (this.isSameThread()) { - this.managedBlock(completablefuture::isDone); -@@ -1573,12 +_,15 @@ - } - - public static WorldDataConfiguration configurePackRepository(PackRepository p_248681_, WorldDataConfiguration p_331931_, boolean p_249869_, boolean p_330480_) { -+ net.minecraftforge.resource.ResourcePackLoader.loadResourcePacks(p_248681_, false); - DataPackConfig datapackconfig = p_331931_.dataPacks(); - FeatureFlagSet featureflagset = p_249869_ ? FeatureFlagSet.of() : p_331931_.enabledFeatures(); - FeatureFlagSet featureflagset1 = p_249869_ ? FeatureFlags.REGISTRY.allFlags() : p_331931_.enabledFeatures(); - p_248681_.reload(); + public ServerClockManager clockManager() { +@@ -1561,6 +_,7 @@ + this.functionManager.replaceLibrary(this.resources.managers.getFunctionLibrary()); + this.structureTemplateManager.onResourceManagerReload(this.resources.resourceManager); + this.fuelValues = FuelValues.vanillaBurnTimes(this.registries.compositeAccess(), this.worldData.enabledFeatures()); ++ this.getPlayerList().getPlayers().forEach(this.getPlayerList()::sendPlayerPermissionLevel); //Forge: Fix newly added/modified commands not being sent to the client when commands reload. + }, + this + ); +@@ -1574,12 +_,15 @@ + public static WorldDataConfiguration configurePackRepository( + final PackRepository packRepository, final WorldDataConfiguration initialDataConfig, final boolean initMode, final boolean safeMode + ) { ++ net.minecraftforge.resource.ResourcePackLoader.loadResourcePacks(packRepository, false); + DataPackConfig datapackconfig = initialDataConfig.dataPacks(); + FeatureFlagSet featureflagset = initMode ? FeatureFlagSet.of() : initialDataConfig.enabledFeatures(); + FeatureFlagSet featureflagset1 = initMode ? FeatureFlags.REGISTRY.allFlags() : initialDataConfig.enabledFeatures(); + packRepository.reload(); + DataPackConfig.DEFAULT.addModPacks(net.minecraftforge.common.ForgeHooks.getModPacks()); + datapackconfig.addModPacks(net.minecraftforge.common.ForgeHooks.getModPacks()); - if (p_330480_) { -- return configureRepositoryWithSelection(p_248681_, List.of("vanilla"), featureflagset, false); -+ return configureRepositoryWithSelection(p_248681_, net.minecraftforge.common.ForgeHooks.getModPacksWithVanilla(), featureflagset, false); + if (safeMode) { +- return configureRepositoryWithSelection(packRepository, List.of("vanilla"), featureflagset, false); ++ return configureRepositoryWithSelection(packRepository, net.minecraftforge.common.ForgeHooks.getModPacksWithVanilla(), featureflagset, false); } else { Set set = Sets.newLinkedHashSet(); -@@ -2172,6 +_,48 @@ +@@ -2235,6 +_,48 @@ public ServerLinks serverLinks() { return ServerLinks.EMPTY; diff --git a/patches/minecraft/net/minecraft/server/PlayerAdvancements.java.patch b/patches/minecraft/net/minecraft/server/PlayerAdvancements.java.patch index 746ad52c8d..de5ada8ca9 100644 --- a/patches/minecraft/net/minecraft/server/PlayerAdvancements.java.patch +++ b/patches/minecraft/net/minecraft/server/PlayerAdvancements.java.patch @@ -1,26 +1,26 @@ --- a/net/minecraft/server/PlayerAdvancements.java +++ b/net/minecraft/server/PlayerAdvancements.java -@@ -171,6 +_,7 @@ - this.unregisterListeners(p_298135_); - this.progressChanged.add(p_298135_); +@@ -173,6 +_,7 @@ + this.unregisterListeners(holder); + this.progressChanged.add(holder); flag = true; -+ net.minecraftforge.event.ForgeEventFactory.onAdvancementGrant(this.player, p_298135_, advancementprogress, p_135990_); ++ net.minecraftforge.event.ForgeEventFactory.onAdvancementGrant(this.player, holder, advancementprogress, criterion); if (!flag1 && advancementprogress.isDone()) { - p_298135_.value().rewards().grant(this.player); - p_298135_.value().display().ifPresent(p_448826_ -> { -@@ -178,6 +_,7 @@ - this.playerList.broadcastSystemMessage(p_448826_.getType().createAnnouncement(p_298135_, this.player), false); + holder.value().rewards().grant(this.player); + holder.value().display().ifPresent(display -> { +@@ -180,6 +_,7 @@ + this.playerList.broadcastSystemMessage(display.getType().createAnnouncement(holder, this.player), false); } }); -+ net.minecraftforge.event.ForgeEventFactory.onAdvancementEarned(this.player, p_298135_); ++ net.minecraftforge.event.ForgeEventFactory.onAdvancementEarned(this.player, holder); } } -@@ -196,6 +_,7 @@ - this.registerListeners(p_297905_); - this.progressChanged.add(p_297905_); +@@ -198,6 +_,7 @@ + this.registerListeners(advancement); + this.progressChanged.add(advancement); flag = true; -+ net.minecraftforge.event.ForgeEventFactory.onAdvancementRevoke(this.player, p_297905_, advancementprogress, p_136000_); ++ net.minecraftforge.event.ForgeEventFactory.onAdvancementRevoke(this.player, advancement, advancementprogress, criterion); } if (flag1 && !advancementprogress.isDone()) { diff --git a/patches/minecraft/net/minecraft/server/ReloadableServerResources.java.patch b/patches/minecraft/net/minecraft/server/ReloadableServerResources.java.patch index f85a0fffc9..2b83c4c672 100644 --- a/patches/minecraft/net/minecraft/server/ReloadableServerResources.java.patch +++ b/patches/minecraft/net/minecraft/server/ReloadableServerResources.java.patch @@ -1,43 +1,40 @@ --- a/net/minecraft/server/ReloadableServerResources.java +++ b/net/minecraft/server/ReloadableServerResources.java -@@ -27,6 +_,7 @@ - private final ServerAdvancementManager advancements; +@@ -30,6 +_,7 @@ private final ServerFunctionLibrary functionLibrary; private final List> postponedTags; + private final List> newComponents; + private final net.minecraftforge.common.crafting.conditions.ICondition.IContext context; private ReloadableServerResources( - LayeredRegistryAccess p_368059_, -@@ -38,9 +_,11 @@ - ) { - this.fullRegistryHolder = new ReloadableServerRegistries.Holder(p_368059_.compositeAccess()); - this.postponedTags = p_364269_; -- this.recipes = new RecipeManager(p_363207_); - this.commands = new Commands(p_206858_, CommandBuildContext.simple(p_363207_, p_250695_)); -- this.advancements = new ServerAdvancementManager(p_363207_); + final LayeredRegistryAccess fullLayers, +@@ -43,9 +_,11 @@ + this.fullRegistryHolder = new ReloadableServerRegistries.Holder(fullLayers.compositeAccess()); + this.postponedTags = postponedTags; + this.newComponents = newComponents; +- this.recipes = new RecipeManager(loadingContext); + this.commands = new Commands(commandSelection, CommandBuildContext.simple(loadingContext, enabledFeatures)); +- this.advancements = new ServerAdvancementManager(loadingContext); + // Forge: Create context object and pass it to the recipe manager. + this.context = new net.minecraftforge.common.crafting.conditions.ConditionContext(this.postponedTags); -+ this.recipes = new RecipeManager(p_363207_, this.context); -+ this.advancements = new ServerAdvancementManager(p_363207_, this.context); - this.functionLibrary = new ServerFunctionLibrary(p_453006_, this.commands.getDispatcher()); ++ this.recipes = new RecipeManager(loadingContext, this.context); ++ this.advancements = new ServerAdvancementManager(loadingContext, this.context); + this.functionLibrary = new ServerFunctionLibrary(functionCompilationPermissions, this.commands.getDispatcher()); } -@@ -84,8 +_,10 @@ - ReloadableServerResources reloadableserverresources = new ReloadableServerResources( - p_448843_.layers(), p_448843_.lookupWithUpdatedTags(), p_250212_, p_249301_, p_366334_, p_457868_ - ); -+ var listeners = new java.util.ArrayList<>(reloadableserverresources.listeners()); -+ listeners.addAll(net.minecraftforge.event.ForgeEventFactory.onResourceReload(reloadableserverresources, p_448843_.lookupWithUpdatedTags())); - return SimpleReloadInstance.create( -- p_248588_, reloadableserverresources.listeners(), p_249136_, p_249601_, DATA_RELOAD_INITIAL_TASK, LOGGER.isDebugEnabled() -+ p_248588_, listeners, p_249136_, p_249601_, DATA_RELOAD_INITIAL_TASK, LOGGER.isDebugEnabled() - ) - .done() - .thenApply(p_214306_ -> reloadableserverresources); -@@ -95,5 +_,14 @@ - - public void updateStaticRegistryTags() { +@@ -101,7 +_,7 @@ + ); + return SimpleReloadInstance.create( + resourceManager, +- reloadableserverresources.listeners(), ++ net.minecraftforge.event.ForgeEventFactory.onResourceReload(reloadableserverresources, fullRegistries.lookupWithUpdatedTags(), reloadableserverresources.listeners()), + backgroundExecutor, + mainThreadExecutor, + DATA_RELOAD_INITIAL_TASK, +@@ -117,5 +_,14 @@ + public void updateComponentsAndStaticRegistryTags() { this.postponedTags.forEach(Registry.PendingTags::apply); + this.newComponents.forEach(DataComponentInitializers.PendingComponents::apply); + } + + /** diff --git a/patches/minecraft/net/minecraft/server/ServerAdvancementManager.java.patch b/patches/minecraft/net/minecraft/server/ServerAdvancementManager.java.patch index 8bd51b0f51..91b0ce308c 100644 --- a/patches/minecraft/net/minecraft/server/ServerAdvancementManager.java.patch +++ b/patches/minecraft/net/minecraft/server/ServerAdvancementManager.java.patch @@ -1,15 +1,13 @@ --- a/net/minecraft/server/ServerAdvancementManager.java +++ b/net/minecraft/server/ServerAdvancementManager.java -@@ -26,7 +_,12 @@ - private AdvancementTree tree = new AdvancementTree(); +@@ -27,6 +_,10 @@ private final HolderLookup.Provider registries; -+ /** @deprecated Forge: use {@linkplain ServerAdvancementManager#ServerAdvancementManager(net.minecraftforge.common.crafting.conditions.ICondition.IContext) constructor with context}. */ - public ServerAdvancementManager(HolderLookup.Provider p_336198_) { -+ this(p_336198_, net.minecraftforge.common.crafting.conditions.ICondition.IContext.EMPTY); + public ServerAdvancementManager(final HolderLookup.Provider registries) { ++ this(registries, net.minecraftforge.common.crafting.conditions.ICondition.IContext.EMPTY); + } + -+ public ServerAdvancementManager(HolderLookup.Provider p_336198_, net.minecraftforge.common.crafting.conditions.ICondition.IContext context) { - super(p_336198_, Advancement.CODEC, Registries.ADVANCEMENT); - this.registries = p_336198_; ++ public ServerAdvancementManager(final HolderLookup.Provider registries, net.minecraftforge.common.crafting.conditions.ICondition.IContext context) { + super(registries, Advancement.CODEC, Registries.ADVANCEMENT); + this.registries = registries; } diff --git a/patches/minecraft/net/minecraft/server/advancements/AdvancementVisibilityEvaluator.java.patch b/patches/minecraft/net/minecraft/server/advancements/AdvancementVisibilityEvaluator.java.patch index 7b7cb87c26..12964180ba 100644 --- a/patches/minecraft/net/minecraft/server/advancements/AdvancementVisibilityEvaluator.java.patch +++ b/patches/minecraft/net/minecraft/server/advancements/AdvancementVisibilityEvaluator.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/server/advancements/AdvancementVisibilityEvaluator.java +++ b/net/minecraft/server/advancements/AdvancementVisibilityEvaluator.java -@@ -69,6 +_,16 @@ - evaluateVisibility(advancementnode, stack, p_265561_, p_265381_); +@@ -71,6 +_,16 @@ + evaluateVisibility(advancementnode, stack, isDone, output); } + public static boolean isVisible(AdvancementNode advancement, Predicate test) { @@ -16,4 +16,4 @@ + @FunctionalInterface public interface Output { - void accept(AdvancementNode p_298555_, boolean p_265580_); + void accept(AdvancementNode advancement, boolean visible); diff --git a/patches/minecraft/net/minecraft/server/commands/SpreadPlayersCommand.java.patch b/patches/minecraft/net/minecraft/server/commands/SpreadPlayersCommand.java.patch index a5e7f8bbcd..bdd30a179a 100644 --- a/patches/minecraft/net/minecraft/server/commands/SpreadPlayersCommand.java.patch +++ b/patches/minecraft/net/minecraft/server/commands/SpreadPlayersCommand.java.patch @@ -1,19 +1,19 @@ --- a/net/minecraft/server/commands/SpreadPlayersCommand.java +++ b/net/minecraft/server/commands/SpreadPlayersCommand.java -@@ -257,11 +_,17 @@ - spreadplayerscommand$position = p_138732_[i++]; +@@ -259,11 +_,17 @@ + spreadplayerscommand$position = positions[i++]; } + var event = net.minecraftforge.event.ForgeEventFactory.onEntityTeleportSpreadPlayersCommand(entity, + (double)Mth.floor(spreadplayerscommand$position.x) + 0.5D, -+ (double)spreadplayerscommand$position.getSpawnY(p_138731_, p_138733_), ++ (double)spreadplayerscommand$position.getSpawnY(level, maxHeight), + (double)Mth.floor(spreadplayerscommand$position.z) + 0.5D + ); + if (event != null) entity.teleportTo( - p_138731_, + level, - Mth.floor(spreadplayerscommand$position.x) + 0.5, -- spreadplayerscommand$position.getSpawnY(p_138731_, p_138733_), +- spreadplayerscommand$position.getSpawnY(level, maxHeight), - Mth.floor(spreadplayerscommand$position.z) + 0.5, + event.getTargetX(), + event.getTargetY(), diff --git a/patches/minecraft/net/minecraft/server/commands/TeleportCommand.java.patch b/patches/minecraft/net/minecraft/server/commands/TeleportCommand.java.patch index 4b3ffe081b..ce03e555fe 100644 --- a/patches/minecraft/net/minecraft/server/commands/TeleportCommand.java.patch +++ b/patches/minecraft/net/minecraft/server/commands/TeleportCommand.java.patch @@ -1,12 +1,23 @@ --- a/net/minecraft/server/commands/TeleportCommand.java +++ b/net/minecraft/server/commands/TeleportCommand.java -@@ -248,6 +_,9 @@ - float p_139023_, - @Nullable LookAt p_365991_ +@@ -237,14 +_,17 @@ + final CommandSourceStack source, + final Entity victim, + final ServerLevel level, +- final double x, +- final double y, +- final double z, ++ double x, ++ double y, ++ double z, + final Set relatives, + final float yRot, + final float xRot, + final @Nullable LookAt lookAt ) throws CommandSyntaxException { -+ var event = net.minecraftforge.event.ForgeEventFactory.onEntityTeleportCommand(p_139016_, p_139018_, p_139019_, p_139020_); ++ var event = net.minecraftforge.event.ForgeEventFactory.onEntityTeleportCommand(victim, x, y, z); + if (event == null) return; -+ p_139018_ = event.getTargetX(); p_139019_ = event.getTargetY(); p_139020_ = event.getTargetZ(); - BlockPos blockpos = BlockPos.containing(p_139018_, p_139019_, p_139020_); ++ x = event.getTargetX(); y = event.getTargetY(); z = event.getTargetZ(); + BlockPos blockpos = BlockPos.containing(x, y, z); if (!Level.isInSpawnableBounds(blockpos)) { throw INVALID_POSITION.create(); diff --git a/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch b/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch index 27f0612f62..3edd705b17 100644 --- a/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch +++ b/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch @@ -1,22 +1,22 @@ --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java -@@ -93,6 +_,7 @@ +@@ -97,6 +_,7 @@ private final Map codeOfConductTexts; private @Nullable ManagementServer jsonRpcServer; private long lastHeartbeat; + private net.minecraft.client.server.@Nullable LanServerPinger dediLanPinger; public DedicatedServer( - Thread p_214789_, -@@ -189,6 +_,7 @@ - Thread thread1 = new Thread("Server console handler") { + final Thread serverThread, +@@ -211,6 +_,7 @@ + @Override public void run() { + if (net.minecraftforge.server.console.TerminalHandler.handleCommands(DedicatedServer.this)) return; BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8)); String s4; -@@ -262,11 +_,13 @@ +@@ -284,11 +_,13 @@ this.tickTimeLogger = new RemoteSampleLogger(TpsDebugDimensions.values().length, this.debugSubscribers(), RemoteDebugSampleType.TICK_TIME); long j = Util.getNanos(); this.services.nameToIdCache().resolveOfflineUsers(!this.usesAuthentication()); @@ -28,11 +28,11 @@ LOGGER.info("Done ({})! For help, type \"help\"", s3); + this.nextTickTimeNanos = Util.getNanos(); //Forge: Update server time to prevent watchdog/spaming during long load. if (dedicatedserverproperties.announcePlayerAchievements != null) { - this.worldData.getGameRules().set(GameRules.SHOW_ADVANCEMENT_MESSAGES, dedicatedserverproperties.announcePlayerAchievements, this); - } -@@ -295,7 +_,12 @@ + this.getGameRules().set(GameRules.SHOW_ADVANCEMENT_MESSAGES, dedicatedserverproperties.announcePlayerAchievements, this); } +@@ -318,7 +_,12 @@ + this.saveEverything(false, true, true); this.notificationManager().serverStarted(); - return true; + if (net.minecraftforge.common.ForgeConfig.SERVER.advertiseDedicatedServerToLan.get()) { @@ -44,7 +44,7 @@ } } -@@ -436,6 +_,13 @@ +@@ -470,6 +_,13 @@ LOGGER.error("Interrupted while stopping the management server", (Throwable)interruptedexception); } } @@ -54,14 +54,14 @@ + this.dediLanPinger = null; + } + -+ net.minecraftforge.fml.config.ConfigTracker.INSTANCE.forceUnload(); ++ net.minecraftforge.fml.config.ConfigTracker.forceUnload(); } @Override -@@ -717,8 +_,13 @@ +@@ -751,8 +_,13 @@ @Override - public void stopServer() { + protected void stopServer() { + net.minecraftforge.event.GameShuttingDownEvent.BUS.post(new net.minecraftforge.event.GameShuttingDownEvent()); this.notificationManager().serverShuttingDown(); super.stopServer(); diff --git a/patches/minecraft/net/minecraft/server/dedicated/ServerWatchdog.java.patch b/patches/minecraft/net/minecraft/server/dedicated/ServerWatchdog.java.patch index 24d22b6512..65f8c6b9e7 100644 --- a/patches/minecraft/net/minecraft/server/dedicated/ServerWatchdog.java.patch +++ b/patches/minecraft/net/minecraft/server/dedicated/ServerWatchdog.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/dedicated/ServerWatchdog.java +++ b/net/minecraft/server/dedicated/ServerWatchdog.java -@@ -78,7 +_,7 @@ +@@ -79,7 +_,7 @@ ThreadMXBean threadmxbean = ManagementFactory.getThreadMXBean(); ThreadInfo[] athreadinfo = threadmxbean.dumpAllThreads(true, true); StringBuilder stringbuilder = new StringBuilder(); @@ -8,4 +8,4 @@ + Error error = new Error(String.format(java.util.Locale.ENGLISH, "ServerHangWatchdog detected that a single server tick took too long")); // Forge: don't just make a crash report with a seemingly-inexplicable Error for (ThreadInfo threadinfo : athreadinfo) { - if (threadinfo.getThreadId() == p_368427_) { + if (threadinfo.getThreadId() == mainThreadId) { diff --git a/patches/minecraft/net/minecraft/server/dedicated/Settings.java.patch b/patches/minecraft/net/minecraft/server/dedicated/Settings.java.patch index 92153141c5..649f6c8dde 100644 --- a/patches/minecraft/net/minecraft/server/dedicated/Settings.java.patch +++ b/patches/minecraft/net/minecraft/server/dedicated/Settings.java.patch @@ -2,10 +2,10 @@ +++ b/net/minecraft/server/dedicated/Settings.java @@ -66,7 +_,7 @@ - public void store(Path p_139877_) { - try (Writer writer = Files.newBufferedWriter(p_139877_, StandardCharsets.UTF_8)) { + public void store(final Path output) { + try (Writer writer = Files.newBufferedWriter(output, StandardCharsets.UTF_8)) { - this.properties.store(writer, "Minecraft server properties"); + net.minecraftforge.common.util.SortedProperties.store(this.properties, writer, "Minecraft server properties"); } catch (IOException ioexception) { - LOGGER.error("Failed to store properties to file: {}", p_139877_); + LOGGER.error("Failed to store properties to file: {}", output); } diff --git a/patches/minecraft/net/minecraft/server/gui/MinecraftServerGui.java.patch b/patches/minecraft/net/minecraft/server/gui/MinecraftServerGui.java.patch index 7460d11383..a9d82bd6ab 100644 --- a/patches/minecraft/net/minecraft/server/gui/MinecraftServerGui.java.patch +++ b/patches/minecraft/net/minecraft/server/gui/MinecraftServerGui.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/gui/MinecraftServerGui.java +++ b/net/minecraft/server/gui/MinecraftServerGui.java -@@ -137,8 +_,10 @@ +@@ -142,8 +_,10 @@ return jpanel; } @@ -11,13 +11,13 @@ } public void close() { -@@ -152,6 +_,9 @@ +@@ -157,6 +_,9 @@ } - public void print(JTextArea p_139915_, JScrollPane p_139916_, String p_139917_) { + public void print(final JTextArea console, final JScrollPane scrollPane, final String line) { + try { + this.latch.await(); + } catch (InterruptedException ignored) {} // Prevent logging until after constructor has ended if (!SwingUtilities.isEventDispatchThread()) { - SwingUtilities.invokeLater(() -> this.print(p_139915_, p_139916_, p_139917_)); + SwingUtilities.invokeLater(() -> this.print(console, scrollPane, line)); } else { diff --git a/patches/minecraft/net/minecraft/server/level/ChunkMap.java.patch b/patches/minecraft/net/minecraft/server/level/ChunkMap.java.patch index e4b026bff7..5b7d1ce644 100644 --- a/patches/minecraft/net/minecraft/server/level/ChunkMap.java.patch +++ b/patches/minecraft/net/minecraft/server/level/ChunkMap.java.patch @@ -1,35 +1,35 @@ --- a/net/minecraft/server/level/ChunkMap.java +++ b/net/minecraft/server/level/ChunkMap.java -@@ -395,6 +_,7 @@ +@@ -402,6 +_,7 @@ this.modified = true; } -+ net.minecraftforge.event.ForgeEventFactory.fireChunkTicketLevelUpdated(this.level, p_140177_, p_140180_, p_140178_, p_140179_); - return p_140179_; ++ net.minecraftforge.event.ForgeEventFactory.fireChunkTicketLevelUpdated(this.level, node, oldLevel, level, chunk); + return chunk; } } -@@ -521,6 +_,7 @@ - if (this.pendingUnloads.remove(p_140182_, p_140183_) && chunkaccess != null) { +@@ -533,6 +_,7 @@ + if (this.pendingUnloads.remove(pos, chunkHolder) && chunkaccess != null) { if (chunkaccess instanceof LevelChunk levelchunk) { levelchunk.setLoaded(false); + net.minecraftforge.event.ForgeEventFactory.onChunkUnload(chunkaccess); } this.save(chunkaccess); -@@ -765,6 +_,7 @@ +@@ -775,6 +_,7 @@ this.activeChunkWrites.incrementAndGet(); - SerializableChunkData serializablechunkdata = SerializableChunkData.copyOf(this.level, p_140259_); + SerializableChunkData serializablechunkdata = SerializableChunkData.copyOf(this.level, chunk); CompletableFuture completablefuture = CompletableFuture.supplyAsync(serializablechunkdata::write, Util.backgroundExecutor()); -+ net.minecraftforge.event.ForgeEventFactory.onChunkDataSave(p_140259_, p_140259_.getWorldForge() != null ? p_140259_.getWorldForge() : this.level, serializablechunkdata); - this.write(chunkpos, completablefuture::join).handle((p_449138_, p_449139_) -> { - if (p_449139_ != null) { - this.level.getServer().reportChunkSaveFailure(p_449139_, this.storageInfo(), chunkpos); -@@ -1143,7 +_,7 @@ ++ net.minecraftforge.event.ForgeEventFactory.onChunkDataSave(chunk, chunk.getWorldForge() != null ? chunk.getWorldForge() : this.level, serializablechunkdata); + this.write(chunkpos, completablefuture::join).handle((ignored, throwable) -> { + if (throwable != null) { + this.level.getServer().reportChunkSaveFailure(throwable, this.storageInfo(), chunkpos); +@@ -1153,7 +_,7 @@ } - protected void addEntity(Entity p_140200_) { -- if (!(p_140200_ instanceof EnderDragonPart)) { -+ if (!(p_140200_ instanceof net.minecraftforge.entity.PartEntity)) { - EntityType entitytype = p_140200_.getType(); + protected void addEntity(final Entity entity) { +- if (!(entity instanceof EnderDragonPart)) { ++ if (!(entity instanceof net.minecraftforge.entity.PartEntity)) { + EntityType entitytype = entity.getType(); int i = entitytype.clientTrackingRange() * 16; if (i != 0) { diff --git a/patches/minecraft/net/minecraft/server/level/DistanceManager.java.patch b/patches/minecraft/net/minecraft/server/level/DistanceManager.java.patch index c3e4756ad1..53826a331c 100644 --- a/patches/minecraft/net/minecraft/server/level/DistanceManager.java.patch +++ b/patches/minecraft/net/minecraft/server/level/DistanceManager.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/level/DistanceManager.java +++ b/net/minecraft/server/level/DistanceManager.java -@@ -189,6 +_,10 @@ +@@ -190,6 +_,10 @@ return this.ticketDispatcher.getDebugStatus(); } diff --git a/patches/minecraft/net/minecraft/server/level/GenerationChunkHolder.java.patch b/patches/minecraft/net/minecraft/server/level/GenerationChunkHolder.java.patch index e6f7132fe8..dd5bbec702 100644 --- a/patches/minecraft/net/minecraft/server/level/GenerationChunkHolder.java.patch +++ b/patches/minecraft/net/minecraft/server/level/GenerationChunkHolder.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/level/GenerationChunkHolder.java +++ b/net/minecraft/server/level/GenerationChunkHolder.java -@@ -33,6 +_,9 @@ +@@ -32,6 +_,9 @@ private final AtomicReference<@Nullable ChunkGenerationTask> task = new AtomicReference<>(); private final AtomicInteger generationRefCount = new AtomicInteger(); private volatile CompletableFuture generationSaveSyncFuture = CompletableFuture.completedFuture(null); @@ -8,5 +8,5 @@ + @org.jetbrains.annotations.ApiStatus.Internal + public net.minecraft.world.level.chunk.LevelChunk currentlyLoading; - public GenerationChunkHolder(ChunkPos p_342238_) { - this.pos = p_342238_; + public GenerationChunkHolder(final ChunkPos pos) { + this.pos = pos; diff --git a/patches/minecraft/net/minecraft/server/level/ServerChunkCache.java.patch b/patches/minecraft/net/minecraft/server/level/ServerChunkCache.java.patch index e893f6db03..9bb577024b 100644 --- a/patches/minecraft/net/minecraft/server/level/ServerChunkCache.java.patch +++ b/patches/minecraft/net/minecraft/server/level/ServerChunkCache.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/level/ServerChunkCache.java +++ b/net/minecraft/server/level/ServerChunkCache.java -@@ -182,6 +_,10 @@ +@@ -193,6 +_,10 @@ if (chunkholder == null) { return null; } else { @@ -11,21 +11,3 @@ ChunkAccess chunkaccess1 = chunkholder.getChunkIfPresent(ChunkStatus.FULL); if (chunkaccess1 != null) { this.storeInCache(i, chunkaccess1, ChunkStatus.FULL); -@@ -616,5 +_,17 @@ - return super.pollTask(); - } - } -+ } -+ -+ /** @deprecated Use {@link #addTicketWithRadius(TicketType, ChunkPos, int)} with {@link TicketType#FORCED} */ -+ @Deprecated(forRemoval = true, since = "1.21.5") -+ public void addRegionTicket(TicketType type, ChunkPos pos, int ticketLevel, boolean forceTicks) { -+ this.addTicketWithRadius(forceTicks ? TicketType.FORCED : type, pos, ticketLevel); -+ } -+ -+ /** @deprecated Use {@link #removeTicketWithRadius(TicketType, ChunkPos, int)} with {@link TicketType#FORCED} */ -+ @Deprecated(forRemoval = true, since = "1.21.5") -+ public void removeRegionTicket(TicketType type, ChunkPos pos, int ticketLevel, boolean forceTicks) { -+ this.removeTicketWithRadius(forceTicks ? TicketType.FORCED : type, pos, ticketLevel); - } - } diff --git a/patches/minecraft/net/minecraft/server/level/ServerEntity.java.patch b/patches/minecraft/net/minecraft/server/level/ServerEntity.java.patch index a46a07c1f7..9e1502d711 100644 --- a/patches/minecraft/net/minecraft/server/level/ServerEntity.java.patch +++ b/patches/minecraft/net/minecraft/server/level/ServerEntity.java.patch @@ -1,18 +1,18 @@ --- a/net/minecraft/server/level/ServerEntity.java +++ b/net/minecraft/server/level/ServerEntity.java -@@ -250,6 +_,7 @@ - public void removePairing(ServerPlayer p_8535_) { - this.entity.stopSeenByPlayer(p_8535_); - p_8535_.connection.send(new ClientboundRemoveEntitiesPacket(this.entity.getId())); -+ net.minecraftforge.event.ForgeEventFactory.onStopEntityTracking(this.entity, p_8535_); +@@ -258,6 +_,7 @@ + public void removePairing(final ServerPlayer player) { + this.entity.stopSeenByPlayer(player); + player.connection.send(new ClientboundRemoveEntitiesPacket(this.entity.getId())); ++ net.minecraftforge.event.ForgeEventFactory.onStopEntityTracking(this.entity, player); } - public void addPairing(ServerPlayer p_8542_) { -@@ -257,6 +_,7 @@ - this.sendPairingData(p_8542_, list::add); - p_8542_.connection.send(new ClientboundBundlePacket(list)); - this.entity.startSeenByPlayer(p_8542_); -+ net.minecraftforge.event.ForgeEventFactory.onStartEntityTracking(this.entity, p_8542_); + public void addPairing(final ServerPlayer player) { +@@ -265,6 +_,7 @@ + this.sendPairingData(player, list::add); + player.connection.send(new ClientboundBundlePacket(list)); + this.entity.startSeenByPlayer(player); ++ net.minecraftforge.event.ForgeEventFactory.onStartEntityTracking(this.entity, player); } - public void sendPairingData(ServerPlayer p_289562_, Consumer> p_289563_) { + public void sendPairingData(final ServerPlayer player, final Consumer> broadcast) { diff --git a/patches/minecraft/net/minecraft/server/level/ServerLevel.java.patch b/patches/minecraft/net/minecraft/server/level/ServerLevel.java.patch index d89c4486ca..73c8cd7385 100644 --- a/patches/minecraft/net/minecraft/server/level/ServerLevel.java.patch +++ b/patches/minecraft/net/minecraft/server/level/ServerLevel.java.patch @@ -1,20 +1,19 @@ --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -215,11 +_,13 @@ +@@ -216,10 +_,12 @@ private final List customSpawners; - private @Nullable EndDragonFight dragonFight; - final Int2ObjectMap dragonParts = new Int2ObjectOpenHashMap<>(); + private @Nullable EnderDragonFight dragonFight; + private final Int2ObjectMap dragonParts = new Int2ObjectOpenHashMap<>(); + final Int2ObjectMap> partEntities = new Int2ObjectOpenHashMap<>(); private final StructureManager structureManager; private final StructureCheck structureCheck; private final boolean tickTime; - private final RandomSequences randomSequences; - final LevelDebugSynchronizers debugSynchronizers = new LevelDebugSynchronizers(this); + private final LevelDebugSynchronizers debugSynchronizers = new LevelDebugSynchronizers(this); + private net.minecraftforge.common.util.LevelCapabilityData capabilityData; public ServerLevel( - MinecraftServer p_214999_, -@@ -304,6 +_,18 @@ + final MinecraftServer server, +@@ -303,6 +_,18 @@ this.waypointManager = new ServerWaypointManager(); this.environmentAttributes = EnvironmentAttributeSystem.builder().addDefaultLayers(this).build(); this.updateSkyBrightness(); @@ -33,34 +32,34 @@ } @Deprecated -@@ -350,8 +_,8 @@ - int i = this.getGameRules().get(GameRules.PLAYERS_SLEEPING_PERCENTAGE); +@@ -354,7 +_,9 @@ if (this.sleepStatus.areEnoughSleeping(i) && this.sleepStatus.areEnoughDeepSleeping(i, this.players)) { - if (this.getGameRules().get(GameRules.ADVANCE_TIME)) { -- long j = this.levelData.getDayTime() + 24000L; -- this.setDayTime(j - j % 24000L); -+ long j = this.getDayTime() + 24000L; -+ this.setDayTime(net.minecraftforge.event.ForgeEventFactory.onSleepFinished(this, j - j % 24000L, this.getDayTime())); + Optional> optional = this.dimensionType().defaultClock(); + if (this.getGameRules().get(GameRules.ADVANCE_TIME) && optional.isPresent()) { +- this.server.clockManager().moveToTimeMarker(optional.get(), ClockTimeMarkers.WAKE_UP_FROM_SLEEP); ++ long minTime = this.server.clockManager().getTotalTicks(optional.get()); ++ long newTime = this.server.clockManager().getTimeMarker(optional.get(), ClockTimeMarkers.WAKE_UP_FROM_SLEEP); ++ this.server.clockManager().setTotalTicks(optional.get(), net.minecraftforge.event.ForgeEventFactory.onSleepFinished(this, newTime, minTime)); } this.wakeUpAllPlayers(); -@@ -422,6 +_,7 @@ - p_358707_.stopRiding(); - } +@@ -428,6 +_,7 @@ + entity.stopRiding(); + } -+ if (p_358707_.isRemoved() || p_358707_ instanceof net.minecraftforge.entity.PartEntity) return; - profilerfiller.push("tick"); - this.guardEntityTick(this::tickNonPassenger, p_358707_); - profilerfiller.pop(); -@@ -572,6 +_,7 @@ - BlockPos blockpos = this.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING, p_300602_); ++ if (entity.isRemoved() || entity instanceof net.minecraftforge.entity.PartEntity) return; + profilerfiller.push("tick"); + this.guardEntityTick(this::tickNonPassenger, entity); + profilerfiller.pop(); +@@ -569,6 +_,7 @@ + BlockPos blockpos = this.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING, pos); BlockPos blockpos1 = blockpos.below(); Biome biome = this.getBiome(blockpos).value(); + if (this.isAreaLoaded(blockpos1, 1)) // Forge: check area to avoid loading neighbors in unloaded chunks if (biome.shouldFreeze(this, blockpos1)) { this.setBlockAndUpdate(blockpos1, Blocks.ICE.defaultBlockState()); } -@@ -769,8 +_,8 @@ +@@ -778,8 +_,8 @@ this.server.getPlayerList().broadcastAll(new ClientboundGameEventPacket(ClientboundGameEventPacket.START_RAINING, 0.0F)); } @@ -71,23 +70,23 @@ } } -@@ -807,6 +_,7 @@ - p_8648_.tickCount++; - profilerfiller.push(() -> BuiltInRegistries.ENTITY_TYPE.getKey(p_8648_.getType()).toString()); +@@ -817,6 +_,7 @@ + entity.tickCount++; + profilerfiller.push(entity.typeHolder()::getRegisteredName); profilerfiller.incrementCounter("tickNonPassenger"); -+ if (p_8648_.canUpdate()) - p_8648_.tick(); ++ if (entity.canUpdate()) + entity.tick(); profilerfiller.pop(); -@@ -824,6 +_,7 @@ +@@ -834,6 +_,7 @@ ProfilerFiller profilerfiller = Profiler.get(); - profilerfiller.push(() -> BuiltInRegistries.ENTITY_TYPE.getKey(p_8664_.getType()).toString()); + profilerfiller.push(entity.typeHolder()::getRegisteredName); profilerfiller.incrementCounter("tickPassenger"); -+ if (p_8664_.canUpdate()) - p_8664_.rideTick(); ++ if (entity.canUpdate()) + entity.rideTick(); profilerfiller.pop(); -@@ -870,6 +_,7 @@ +@@ -880,6 +_,7 @@ } else { this.entityManager.autoSave(); } @@ -95,31 +94,31 @@ } } -@@ -963,6 +_,7 @@ +@@ -971,6 +_,7 @@ } - private void addPlayer(ServerPlayer p_8854_) { -+ if (net.minecraftforge.event.ForgeEventFactory.onEntityJoinLevel(p_8854_, this)) return; - Entity entity = this.getEntity(p_8854_.getUUID()); + private void addPlayer(final ServerPlayer player) { ++ if (net.minecraftforge.event.ForgeEventFactory.onEntityJoinLevel(player, this)) return; + Entity entity = this.getEntity(player.getUUID()); if (entity != null) { - LOGGER.warn("Force-added player with duplicate UUID {}", p_8854_.getUUID()); -@@ -970,7 +_,8 @@ + LOGGER.warn("Force-added player with duplicate UUID {}", player.getUUID()); +@@ -978,7 +_,8 @@ this.removePlayerImmediately((ServerPlayer)entity, Entity.RemovalReason.DISCARDED); } -- this.entityManager.addNewEntity(p_8854_); -+ this.entityManager.addNewEntityWithoutEvent(p_8854_); -+ p_8854_.onAddedToWorld(); +- this.entityManager.addNewEntity(player); ++ this.entityManager.addNewEntityWithoutEvent(player); ++ player.onAddedToLevel(); } - private boolean addEntity(Entity p_8873_) { -@@ -978,7 +_,12 @@ - LOGGER.warn("Tried to add entity {} but it was marked as removed already", EntityType.getKey(p_8873_.getType())); + private boolean addEntity(final Entity entity) { +@@ -986,7 +_,12 @@ + LOGGER.warn("Tried to add entity {} but it was marked as removed already", entity.typeHolder().getRegisteredName()); return false; } else { -- return this.entityManager.addNewEntity(p_8873_); -+ if (this.entityManager.addNewEntity(p_8873_)) { -+ p_8873_.onAddedToWorld(); +- return this.entityManager.addNewEntity(entity); ++ if (this.entityManager.addNewEntity(entity)) { ++ entity.onAddedToLevel(); + return true; + } else { + return false; @@ -127,82 +126,99 @@ } } -@@ -1027,6 +_,12 @@ - float p_263520_, - long p_263490_ +@@ -1035,6 +_,8 @@ + final float pitch, + final long seed ) { -+ var event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtPosition(this, p_393402_, p_397340_, p_394643_, p_263491_, p_263542_, p_263530_, p_263520_); ++ var event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtPosition(this, x, y, z, sound, source, volume, pitch); + if (event == null || event.getSound() == null) return; -+ p_263491_ = event.getSound(); -+ p_263542_ = event.getSource(); -+ p_263530_ = event.getNewVolume(); -+ p_263520_ = event.getNewPitch(); this.server .getPlayerList() .broadcast( -@@ -1044,6 +_,12 @@ - public void playSeededSound( - @Nullable Entity p_392657_, Entity p_394285_, Holder p_263412_, SoundSource p_263338_, float p_263352_, float p_263390_, long p_263403_ +@@ -1042,9 +_,9 @@ + x, + y, + z, +- sound.value().getRange(volume), ++ event.getSound().value().getRange(volume), + this.dimension(), +- new ClientboundSoundPacket(sound, source, x, y, z, volume, pitch, seed) ++ new ClientboundSoundPacket(event.getSound(), event.getSource(), x, y, z, event.getNewVolume(), event.getNewPitch(), seed) + ); + } + +@@ -1058,6 +_,8 @@ + final float pitch, + final long seed ) { -+ var event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(p_394285_.level(), p_394285_, p_263412_, p_263338_, p_263352_, p_263390_); ++ var event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(sourceEntity.level(), sourceEntity, sound, source, volume, pitch); + if (event == null || event.getSound() == null) return; -+ p_263412_ = event.getSound(); -+ p_263338_ = event.getSource(); -+ p_263352_ = event.getNewVolume(); -+ p_263390_ = event.getNewPitch(); this.server .getPlayerList() .broadcast( -@@ -1102,6 +_,7 @@ - - @Override - public void gameEvent(Holder p_334475_, Vec3 p_215042_, GameEvent.Context p_215043_) { -+ if (net.minecraftforge.event.ForgeEventFactory.onVanillaGameEvent(this, p_334475_, p_215042_, p_215043_)) return; - this.gameEventDispatcher.post(p_334475_, p_215042_, p_215043_); +@@ -1067,7 +_,7 @@ + sourceEntity.getZ(), + sound.value().getRange(volume), + this.dimension(), +- new ClientboundSoundEntityPacket(sound, source, sourceEntity, volume, pitch, seed) ++ new ClientboundSoundEntityPacket(event.getSound(), event.getSource(), sourceEntity, event.getNewVolume(), event.getNewPitch(), seed) + ); } -@@ -1140,16 +_,24 @@ +@@ -1116,6 +_,7 @@ @Override - public void updateNeighborsAt(BlockPos p_215045_, Block p_215046_) { -+ if (net.minecraftforge.event.ForgeEventFactory.onNeighborNotify(this, p_215045_, this.getBlockState(p_215045_), java.util.EnumSet.allOf(Direction.class), false)) + public void gameEvent(final Holder gameEvent, final Vec3 position, final GameEvent.Context context) { ++ if (net.minecraftforge.event.ForgeEventFactory.onVanillaGameEvent(this, gameEvent, position, context)) return; + this.gameEventDispatcher.post(gameEvent, position, context); + } + +@@ -1154,11 +_,15 @@ + + @Override + public void updateNeighborsAt(final BlockPos pos, final Block sourceBlock) { ++ if (net.minecraftforge.event.ForgeEventFactory.onNeighborNotify(this, pos, this.getBlockState(pos), java.util.EnumSet.allOf(Direction.class), false)) + return; - this.updateNeighborsAt(p_215045_, p_215046_, ExperimentalRedstoneUtils.initialOrientation(this, null, null)); + this.updateNeighborsAt(pos, sourceBlock, ExperimentalRedstoneUtils.initialOrientation(this, null, null)); } @Override - public void updateNeighborsAt(BlockPos p_362530_, Block p_362552_, @Nullable Orientation p_367766_) { -+ if (net.minecraftforge.event.ForgeEventFactory.onNeighborNotify(this, p_362530_, this.getBlockState(p_362530_), java.util.EnumSet.allOf(Direction.class), false)) + public void updateNeighborsAt(final BlockPos pos, final Block sourceBlock, final @Nullable Orientation orientation) { ++ if (net.minecraftforge.event.ForgeEventFactory.onNeighborNotify(this, pos, this.getBlockState(pos), java.util.EnumSet.allOf(Direction.class), false)) + return; - this.neighborUpdater.updateNeighborsAtExceptFromFacing(p_362530_, p_362552_, null, p_367766_); + this.neighborUpdater.updateNeighborsAtExceptFromFacing(pos, sourceBlock, null, orientation); } - @Override - public void updateNeighborsAtExceptFromFacing(BlockPos p_215052_, Block p_215053_, Direction p_215054_, @Nullable Orientation p_370072_) { +@@ -1166,6 +_,10 @@ + public void updateNeighborsAtExceptFromFacing( + final BlockPos pos, final Block blockObject, final Direction skipDirection, final @Nullable Orientation orientation + ) { + var directions = java.util.EnumSet.allOf(Direction.class); -+ directions.remove(p_215054_); -+ if (net.minecraftforge.event.ForgeEventFactory.onNeighborNotify(this, p_215052_, this.getBlockState(p_215052_), directions, false)) ++ directions.remove(skipDirection); ++ if (net.minecraftforge.event.ForgeEventFactory.onNeighborNotify(this, pos, this.getBlockState(pos), directions, false)) + return; - this.neighborUpdater.updateNeighborsAtExceptFromFacing(p_215052_, p_215053_, p_215054_, p_370072_); + this.neighborUpdater.updateNeighborsAtExceptFromFacing(pos, blockObject, skipDirection, orientation); } -@@ -1196,12 +_,14 @@ - Explosion.BlockInteraction explosion$blockinteraction = switch (p_255827_) { +@@ -1214,7 +_,7 @@ + Explosion.BlockInteraction explosion$blockinteraction = switch (interactionType) { case NONE -> Explosion.BlockInteraction.KEEP; case BLOCK -> this.getDestroyType(GameRules.BLOCK_EXPLOSION_DROP_DECAY); -- case MOB -> this.getGameRules().get(GameRules.MOB_GRIEFING) ? this.getDestroyType(GameRules.MOB_EXPLOSION_DROP_DECAY) : Explosion.BlockInteraction.KEEP; -+ case MOB -> net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this, p_256039_) ? this.getDestroyType(GameRules.MOB_EXPLOSION_DROP_DECAY) : Explosion.BlockInteraction.KEEP; +- case MOB -> this.getGameRules().get(GameRules.MOB_GRIEFING) ++ case MOB -> net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this, source) + ? this.getDestroyType(GameRules.MOB_EXPLOSION_DROP_DECAY) + : Explosion.BlockInteraction.KEEP; case TNT -> this.getDestroyType(GameRules.TNT_EXPLOSION_DROP_DECAY); - case TRIGGER -> Explosion.BlockInteraction.TRIGGER_BLOCK; +@@ -1222,6 +_,8 @@ }; - Vec3 vec3 = new Vec3(p_256067_, p_256370_, p_256153_); - ServerExplosion serverexplosion = new ServerExplosion(this, p_256039_, p_255778_, p_256002_, vec3, p_256045_, p_255686_, explosion$blockinteraction); + Vec3 vec3 = new Vec3(x, y, z); + ServerExplosion serverexplosion = new ServerExplosion(this, source, damageSource, damageCalculator, vec3, r, fire, explosion$blockinteraction); + if (net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this, serverexplosion)) + return; int i = serverexplosion.explode(); - ParticleOptions particleoptions = serverexplosion.isSmall() ? p_310962_ : p_310322_; + ParticleOptions particleoptions = serverexplosion.isSmall() ? smallExplosionParticles : largeExplosionParticles; -@@ -1846,6 +_,11 @@ +@@ -1888,6 +_,11 @@ return this.getGameRules().get(GameRules.SPAWNER_BLOCKS_WORK); } @@ -211,37 +227,37 @@ + return this.partEntities.values(); + } + - final class EntityCallbacks implements LevelCallback { - public void onCreated(Entity p_143355_) { - if (p_143355_ instanceof WaypointTransmitter waypointtransmitter && waypointtransmitter.isTransmittingWaypoint()) { -@@ -1901,6 +_,12 @@ + private final class EntityCallbacks implements LevelCallback { + private EntityCallbacks() { + Objects.requireNonNull(ServerLevel.this); +@@ -1948,6 +_,12 @@ } } -+ if (p_143371_.isMultipartEntity()) { -+ for (var part : p_143371_.getParts()) { ++ if (entity.isMultipartEntity()) { ++ for (var part : entity.getParts()) { + ServerLevel.this.partEntities.put(part.getId(), part); + } + } + - p_143371_.updateDynamicGameEventListener(DynamicGameEventListener::add); + entity.updateDynamicGameEventListener(DynamicGameEventListener::add); } -@@ -1929,8 +_,17 @@ +@@ -1976,8 +_,17 @@ } } -+ if (p_143375_.isMultipartEntity()) { -+ for (var part : p_143375_.getParts()) { ++ if (entity.isMultipartEntity()) { ++ for (var part : entity.getParts()) { + ServerLevel.this.partEntities.remove(part.getId()); + } + } + - p_143375_.updateDynamicGameEventListener(DynamicGameEventListener::remove); - ServerLevel.this.debugSynchronizers.dropEntity(p_143375_); + entity.updateDynamicGameEventListener(DynamicGameEventListener::remove); + ServerLevel.this.debugSynchronizers.dropEntity(entity); + -+ p_143375_.onRemovedFromWorld(); -+ net.minecraftforge.event.ForgeEventFactory.onEntityLeaveLevel(p_143375_, ServerLevel.this); ++ entity.onRemovedFromLevel(); ++ net.minecraftforge.event.ForgeEventFactory.onEntityLeaveLevel(entity, ServerLevel.this); } - public void onSectionChange(Entity p_215086_) { + public void onSectionChange(final Entity entity) { diff --git a/patches/minecraft/net/minecraft/server/level/ServerPlayer.java.patch b/patches/minecraft/net/minecraft/server/level/ServerPlayer.java.patch index 1b1781779e..cc94492ca6 100644 --- a/patches/minecraft/net/minecraft/server/level/ServerPlayer.java.patch +++ b/patches/minecraft/net/minecraft/server/level/ServerPlayer.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -203,7 +_,8 @@ +@@ -205,7 +_,8 @@ import org.jspecify.annotations.Nullable; import org.slf4j.Logger; @@ -10,23 +10,23 @@ private static final Logger LOGGER = LogUtils.getLogger(); private static final int NEUTRAL_MOB_DEATH_NOTIFICATION_RADII_XZ = 32; private static final int NEUTRAL_MOB_DEATH_NOTIFICATION_RADII_Y = 10; -@@ -871,6 +_,7 @@ +@@ -885,6 +_,7 @@ @Override - public void die(DamageSource p_9035_) { -+ if (net.minecraftforge.event.ForgeEventFactory.onLivingDeath(this, p_9035_)) return; + public void die(final DamageSource source) { ++ if (net.minecraftforge.event.ForgeEventFactory.onLivingDeath(this, source)) return; this.gameEvent(GameEvent.ENTITY_DIE); boolean flag = this.level().getGameRules().get(GameRules.SHOW_DEATH_MESSAGES); if (flag) { -@@ -1080,6 +_,7 @@ +@@ -1098,6 +_,7 @@ } - public @Nullable ServerPlayer teleport(TeleportTransition p_361322_) { -+ if (net.minecraftforge.event.ForgeEventFactory.onTravelToDimension(this, p_361322_.newLevel().dimension())) return null; + public @Nullable ServerPlayer teleport(final TeleportTransition transition) { ++ if (net.minecraftforge.event.ForgeEventFactory.onTravelToDimension(this, transition.newLevel().dimension())) return null; if (this.isRemoved()) { return null; } else { -@@ -1107,7 +_,7 @@ +@@ -1125,7 +_,7 @@ PlayerList playerlist = this.server.getPlayerList(); playerlist.sendPlayerPermissionLevel(this); serverlevel1.removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION); @@ -35,46 +35,46 @@ ProfilerFiller profilerfiller = Profiler.get(); profilerfiller.push("moving"); if (resourcekey == Level.OVERWORLD && serverlevel.dimension() == Level.NETHER) { -@@ -1132,6 +_,7 @@ +@@ -1150,6 +_,7 @@ this.lastSentHealth = -1.0F; this.lastSentFood = -1; - this.teleportSpectators(p_361322_, serverlevel1); -+ net.minecraftforge.event.ForgeEventFactory.onPlayerChangedDimension(this, resourcekey, p_361322_.newLevel().dimension()); + this.teleportSpectators(transition, serverlevel1); ++ net.minecraftforge.event.ForgeEventFactory.onPlayerChangedDimension(this, resourcekey, transition.newLevel().dimension()); return this; } } -@@ -1173,10 +_,13 @@ +@@ -1191,10 +_,13 @@ @Override - public Either startSleepInBed(BlockPos p_9115_) { -+ var optAt = java.util.Optional.of(p_9115_); + public Either startSleepInBed(final BlockPos pos) { ++ var optAt = java.util.Optional.of(pos); + var ret = net.minecraftforge.event.ForgeEventFactory.onPlayerSleepInBed(this, optAt); + if (ret != null) return Either.left(ret); - Direction direction = this.level().getBlockState(p_9115_).getValue(HorizontalDirectionalBlock.FACING); + Direction direction = this.level().getBlockState(pos).getValue(HorizontalDirectionalBlock.FACING); if (!this.isSleeping() && this.isAlive()) { - BedRule bedrule = this.level().environmentAttributes().getValue(EnvironmentAttributes.BED_RULE, p_9115_); + BedRule bedrule = this.level().environmentAttributes().getValue(EnvironmentAttributes.BED_RULE, pos); - boolean flag = bedrule.canSleep(this.level()); + boolean flag = net.minecraftforge.event.ForgeEventFactory.onSleepingTimeCheck(this, optAt, bedrule); boolean flag1 = bedrule.canSetSpawn(this.level()); if (!flag1 && !flag) { return Either.left(bedrule.asProblem()); -@@ -1243,6 +_,7 @@ +@@ -1251,6 +_,7 @@ } - private boolean bedInRange(BlockPos p_9117_, Direction p_9118_) { -+ if (p_9118_ == null) return false; - return this.isReachableBedBlock(p_9117_) || this.isReachableBedBlock(p_9117_.relative(p_9118_.getOpposite())); + private boolean bedInRange(final BlockPos pos, final Direction direction) { ++ if (direction == null) return false; + return this.isReachableBedBlock(pos) || this.isReachableBedBlock(pos.relative(direction.getOpposite())); } -@@ -1346,6 +_,7 @@ - this.connection.send(new ClientboundOpenScreenPacket(abstractcontainermenu.containerId, abstractcontainermenu.getType(), p_9033_.getDisplayName())); +@@ -1351,6 +_,7 @@ + .send(new ClientboundOpenScreenPacket(abstractcontainermenu.containerId, abstractcontainermenu.getType(), provider.getDisplayName())); this.initMenu(abstractcontainermenu); this.containerMenu = abstractcontainermenu; + net.minecraftforge.event.ForgeEventFactory.onPlayerOpenContainer(this, this.containerMenu); return OptionalInt.of(this.containerCounter); } } -@@ -1408,6 +_,7 @@ +@@ -1420,6 +_,7 @@ public void doCloseContainer() { this.containerMenu.removed(this); this.inventoryMenu.transferState(this.containerMenu); @@ -82,41 +82,44 @@ this.containerMenu = this.inventoryMenu; } -@@ -1630,6 +_,15 @@ - this.setShoulderEntityRight(p_9016_.getShoulderEntityRight()); - this.setLastDeathLocation(p_9016_.getLastDeathLocation()); - this.waypointIcon().copyFrom(p_9016_.waypointIcon()); +@@ -1637,6 +_,15 @@ + this.setShoulderEntityRight(oldPlayer.getShoulderEntityRight()); + this.setLastDeathLocation(oldPlayer.getLastDeathLocation()); + this.waypointIcon().copyFrom(oldPlayer.waypointIcon()); + + //Copy over a section of the Entity Data from the old player. + //Allows mods to specify data that persists after players respawn. -+ var old = p_9016_.getPersistentData(); ++ var old = oldPlayer.getPersistentData(); + if (old.contains(PERSISTED_NBT_TAG)) + getPersistentData().put(PERSISTED_NBT_TAG, old.get(PERSISTED_NBT_TAG)); -+ net.minecraftforge.event.ForgeEventFactory.onPlayerClone(this, p_9016_, !p_9017_); -+ this.tabListHeader = p_9016_.tabListHeader; -+ this.tabListFooter = p_9016_.tabListFooter; ++ net.minecraftforge.event.ForgeEventFactory.onPlayerClone(this, oldPlayer, !restoreAll); ++ this.tabListHeader = oldPlayer.tabListHeader; ++ this.tabListFooter = oldPlayer.tabListFooter; } - private void transferInventoryXpAndScore(Player p_460820_) { -@@ -1738,6 +_,7 @@ + private void transferInventoryXpAndScore(final Player oldPlayer) { +@@ -1746,8 +_,9 @@ + return (ServerLevel)super.level(); + } - public boolean setGameMode(GameType p_143404_) { +- public boolean setGameMode(final GameType mode) { ++ public boolean setGameMode(GameType mode) { boolean flag = this.isSpectator(); -+ p_143404_ = net.minecraftforge.common.ForgeHooks.onChangeGameType(this, this.gameMode.getGameModeForPlayer(), p_143404_); - if (!this.gameMode.changeGameModeForPlayer(p_143404_)) { ++ mode = net.minecraftforge.common.ForgeHooks.onChangeGameType(this, this.gameMode.getGameModeForPlayer(), mode); + if (!this.gameMode.changeGameModeForPlayer(mode)) { return false; } else { -@@ -1891,6 +_,9 @@ - public void setCamera(@Nullable Entity p_9214_) { +@@ -1931,6 +_,9 @@ + public void setCamera(final @Nullable Entity newCamera) { Entity entity = this.getCamera(); - this.camera = (Entity)(p_9214_ == null ? this : p_9214_); + this.camera = (Entity)(newCamera == null ? this : newCamera); + while (this.camera instanceof net.minecraftforge.entity.PartEntity partEntity) { + this.camera = partEntity.getParent(); // FORGE: fix MC-46486 + } if (entity != this.camera) { if (this.camera.level() instanceof ServerLevel serverlevel) { - this.teleportTo( -@@ -1928,7 +_,11 @@ + this.teleportTo(serverlevel, this.camera.getX(), this.camera.getY(), this.camera.getZ(), Set.of(), this.getYRot(), this.getXRot(), false); +@@ -1957,7 +_,11 @@ } public @Nullable Component getTabListDisplayName() { @@ -129,24 +132,25 @@ } public int getTabListOrder() { -@@ -1962,6 +_,7 @@ +@@ -1991,6 +_,7 @@ } - public void setRespawnPosition(ServerPlayer.@Nullable RespawnConfig p_396560_, boolean p_9162_) { -+ if (net.minecraftforge.event.ForgeEventFactory.onPlayerSpawnSet(this, p_396560_)) return; - if (p_9162_ && p_396560_ != null && !p_396560_.isSamePosition(this.respawnConfig)) { + public void setRespawnPosition(final ServerPlayer.@Nullable RespawnConfig respawnConfig, final boolean showMessage) { ++ if (net.minecraftforge.event.ForgeEventFactory.onPlayerSpawnSet(this, respawnConfig)) return; + if (showMessage && respawnConfig != null && !respawnConfig.isSamePosition(this.respawnConfig)) { this.sendSystemMessage(SPAWN_SET_MESSAGE); } -@@ -2049,13 +_,16 @@ +@@ -2078,6 +_,9 @@ - public void drop(boolean p_182295_) { + public void drop(final boolean all) { Inventory inventory = this.getInventory(); + ItemStack selected = inventory.getSelectedItem(); + if (selected.isEmpty() || !selected.onDroppedByPlayer(this)) return; -+ if (isUsingItem() && getUsedItemHand() == InteractionHand.MAIN_HAND && (p_182295_ || selected.getCount() == 1)) stopUsingItem(); // Forge: fix MC-231097 on the serverside - ItemStack itemstack = inventory.removeFromSelected(p_182295_); - this.containerMenu.findSlot(inventory, inventory.getSelectedSlot()).ifPresent(p_390148_ -> this.containerMenu.setRemoteSlot(p_390148_, inventory.getSelectedItem())); - if (this.useItem.isEmpty()) { ++ if (isUsingItem() && getUsedItemHand() == InteractionHand.MAIN_HAND && (all || selected.getCount() == 1)) stopUsingItem(); // Forge: fix MC-231097 on the serverside + ItemStack itemstack = inventory.removeFromSelected(all); + this.containerMenu + .findSlot(inventory, inventory.getSelectedSlot()) +@@ -2086,7 +_,7 @@ this.stopUsingItem(); } @@ -155,7 +159,7 @@ } @Override -@@ -2157,6 +_,75 @@ +@@ -2188,6 +_,75 @@ public @Nullable BlockPos getRaidOmenPosition() { return this.raidOmenPosition; diff --git a/patches/minecraft/net/minecraft/server/level/ServerPlayerGameMode.java.patch b/patches/minecraft/net/minecraft/server/level/ServerPlayerGameMode.java.patch index 723a265226..f8e2ac3e2f 100644 --- a/patches/minecraft/net/minecraft/server/level/ServerPlayerGameMode.java.patch +++ b/patches/minecraft/net/minecraft/server/level/ServerPlayerGameMode.java.patch @@ -1,83 +1,83 @@ --- a/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/net/minecraft/server/level/ServerPlayerGameMode.java -@@ -149,6 +_,10 @@ - } - - public void handleBlockBreakAction(BlockPos p_215120_, ServerboundPlayerActionPacket.Action p_215121_, Direction p_215122_, int p_215123_, int p_215124_) { -+ var event = net.minecraftforge.event.ForgeEventFactory.onLeftClickBlock(player, p_215120_, p_215122_, p_215121_); +@@ -151,6 +_,10 @@ + public void handleBlockBreakAction( + final BlockPos pos, final ServerboundPlayerActionPacket.Action action, final Direction direction, final int maxY, final int sequence + ) { ++ var event = net.minecraftforge.event.ForgeEventFactory.onLeftClickBlock(player, pos, direction, action); + if (event == null) { + return; + } - if (!this.player.isWithinBlockInteractionRange(p_215120_, 1.0)) { - this.debugLogging(p_215120_, false, p_215124_, "too far"); - } else if (p_215120_.getY() > p_215123_) { -@@ -177,6 +_,7 @@ + if (!this.player.isWithinBlockInteractionRange(pos, 1.0)) { + this.debugLogging(pos, false, sequence, "too far"); + } else if (pos.getY() > maxY) { +@@ -185,6 +_,7 @@ float f = 1.0F; - BlockState blockstate = this.level.getBlockState(p_215120_); + BlockState blockstate = this.level.getBlockState(pos); if (!blockstate.isAir()) { + if (!event.getUseBlock().isDenied()) { EnchantmentHelper.onHitBlock( this.level, this.player.getMainHandItem(), -@@ -188,6 +_,7 @@ - p_343810_ -> this.player.onEquippedItemBroken(p_343810_, EquipmentSlot.MAINHAND) +@@ -196,6 +_,7 @@ + item -> this.player.onEquippedItemBroken(item, EquipmentSlot.MAINHAND) ); - blockstate.attack(this.level, p_215120_, this.player); + blockstate.attack(this.level, pos, this.player); + } - f = blockstate.getDestroyProgress(this.player, this.player.level(), p_215120_); + f = blockstate.getDestroyProgress(this.player, this.player.level(), pos); } -@@ -254,7 +_,8 @@ +@@ -262,7 +_,8 @@ - public boolean destroyBlock(BlockPos p_9281_) { - BlockState blockstate1 = this.level.getBlockState(p_9281_); -- if (!this.player.getMainHandItem().canDestroyBlock(blockstate1, this.level, p_9281_, this.player)) { -+ int exp = net.minecraftforge.common.ForgeHooks.onBlockBreakEvent(level, gameModeForPlayer, player, p_9281_); + public boolean destroyBlock(final BlockPos pos) { + BlockState blockstate1 = this.level.getBlockState(pos); +- if (!this.player.getMainHandItem().canDestroyBlock(blockstate1, this.level, pos, this.player)) { ++ int exp = net.minecraftforge.common.ForgeHooks.onBlockBreakEvent(level, gameModeForPlayer, player, pos); + if (exp == -1) { return false; } else { - BlockEntity blockentity = this.level.getBlockEntity(p_9281_); -@@ -262,34 +_,50 @@ + BlockEntity blockentity = this.level.getBlockEntity(pos); +@@ -270,34 +_,50 @@ if (block instanceof GameMasterBlock && !this.player.canUseGameMasterBlocks()) { - this.level.sendBlockUpdated(p_9281_, blockstate1, blockstate1, 3); + this.level.sendBlockUpdated(pos, blockstate1, blockstate1, 3); return false; -+ } else if (player.getMainHandItem().onBlockStartBreak(p_9281_, player)) { ++ } else if (player.getMainHandItem().onBlockStartBreak(pos, player)) { + return false; - } else if (this.player.blockActionRestricted(this.level, p_9281_, this.gameModeForPlayer)) { + } else if (this.player.blockActionRestricted(this.level, pos, this.gameModeForPlayer)) { return false; } else { -- BlockState blockstate = block.playerWillDestroy(this.level, p_9281_, blockstate1, this.player); -- boolean flag1 = this.level.removeBlock(p_9281_, false); +- BlockState blockstate = block.playerWillDestroy(this.level, pos, blockstate1, this.player); +- boolean flag1 = this.level.removeBlock(pos, false); - if (SharedConstants.DEBUG_BLOCK_BREAK) { -- LOGGER.info("server broke {} {} -> {}", p_9281_, blockstate, this.level.getBlockState(p_9281_)); +- LOGGER.info("server broke {} {} -> {}", pos, blockstate, this.level.getBlockState(pos)); - } - - if (flag1) { -- block.destroy(this.level, p_9281_, blockstate); +- block.destroy(this.level, pos, blockstate); - } - + BlockState blockstate = blockstate1; if (this.player.preventsBlockDrops()) { -+ removeBlock(p_9281_, false); ++ removeBlock(pos, false); return true; } else { ItemStack itemstack = this.player.getMainHandItem(); ItemStack itemstack1 = itemstack.copy(); - boolean flag = this.player.hasCorrectToolForDrops(blockstate); -+ boolean flag = blockstate.canHarvestBlock(this.level, p_9281_, this.player); // previously player.hasCorrectToolForDrops(blockstate) - itemstack.mineBlock(this.level, blockstate, p_9281_, this.player); ++ boolean flag = blockstate.canHarvestBlock(this.level, pos, this.player); // previously player.hasCorrectToolForDrops(blockstate) + itemstack.mineBlock(this.level, blockstate, pos, this.player); + + if (itemstack.isEmpty() && !itemstack1.isEmpty()) { + net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(this.player, itemstack1, InteractionHand.MAIN_HAND); + } -+ boolean flag1 = removeBlock(p_9281_, flag); ++ boolean flag1 = removeBlock(pos, flag); + if (flag1 && flag) { - block.playerDestroy(this.level, this.player, p_9281_, blockstate, blockentity, itemstack1); + block.playerDestroy(this.level, this.player, pos, blockstate, blockentity, itemstack1); } + if (flag && exp > 0) { -+ blockstate1.getBlock().popExperience(level, p_9281_, exp); ++ blockstate1.getBlock().popExperience(level, pos, exp); + } + return true; @@ -98,54 +98,54 @@ + return removed; } - public InteractionResult useItem(ServerPlayer p_9262_, Level p_9263_, ItemStack p_9264_, InteractionHand p_9265_) { -@@ -298,6 +_,8 @@ - } else if (p_9262_.getCooldowns().isOnCooldown(p_9264_)) { + public InteractionResult useItem(final ServerPlayer player, final Level level, final ItemStack itemStack, final InteractionHand hand) { +@@ -306,6 +_,8 @@ + } else if (player.getCooldowns().isOnCooldown(itemStack)) { return InteractionResult.PASS; } else { -+ InteractionResult cancelResult = net.minecraftforge.common.ForgeHooks.onItemRightClick(p_9262_, p_9265_); ++ InteractionResult cancelResult = net.minecraftforge.common.ForgeHooks.onItemRightClick(player, hand); + if (cancelResult != null) return cancelResult; - int i = p_9264_.getCount(); - int j = p_9264_.getDamageValue(); - InteractionResult interactionresult = p_9264_.use(p_9263_, p_9262_, p_9265_); -@@ -336,6 +_,11 @@ - if (!blockstate.getBlock().isEnabled(p_9267_.enabledFeatures())) { + int i = itemStack.getCount(); + int j = itemStack.getDamageValue(); + InteractionResult interactionresult = itemStack.use(level, player, hand); +@@ -346,6 +_,11 @@ + if (!blockstate.getBlock().isEnabled(level.enabledFeatures())) { return InteractionResult.FAIL; } else if (this.gameModeForPlayer == GameType.SPECTATOR) { + } + -+ var event = new net.minecraftforge.event.entity.player.PlayerInteractEvent.RightClickBlock(p_9266_, p_9269_, blockpos, p_9270_); ++ var event = new net.minecraftforge.event.entity.player.PlayerInteractEvent.RightClickBlock(player, hand, blockpos, hitResult); + if (net.minecraftforge.event.entity.player.PlayerInteractEvent.RightClickBlock.BUS.post(event)) return event.getCancellationResult(); + if (this.gameModeForPlayer == GameType.SPECTATOR) { - MenuProvider menuprovider = blockstate.getMenuProvider(p_9267_, blockpos); + MenuProvider menuprovider = blockstate.getMenuProvider(level, blockpos); if (menuprovider != null) { - p_9266_.openMenu(menuprovider); -@@ -344,10 +_,16 @@ + player.openMenu(menuprovider); +@@ -354,10 +_,16 @@ return InteractionResult.PASS; } } else { -+ UseOnContext useoncontext = new UseOnContext(p_9266_, p_9269_, p_9270_); ++ UseOnContext useoncontext = new UseOnContext(player, hand, hitResult); + if (!event.getUseItem().isDenied()) { -+ InteractionResult result = p_9268_.onItemUseFirst(useoncontext); ++ InteractionResult result = itemStack.onItemUseFirst(useoncontext); + if (result != InteractionResult.PASS) return result; + } - boolean flag = !p_9266_.getMainHandItem().isEmpty() || !p_9266_.getOffhandItem().isEmpty(); - boolean flag1 = p_9266_.isSecondaryUseActive() && flag; -+ flag1 &= !(p_9266_.getMainHandItem().doesSneakBypassUse(p_9267_, blockpos, p_9266_) && p_9266_.getOffhandItem().doesSneakBypassUse(p_9267_, blockpos, p_9266_)); - ItemStack itemstack = p_9268_.copy(); + boolean flag = !player.getMainHandItem().isEmpty() || !player.getOffhandItem().isEmpty(); + boolean flag1 = player.isSecondaryUseActive() && flag; ++ flag1 &= !(player.getMainHandItem().doesSneakBypassUse(level, blockpos, player) && player.getOffhandItem().doesSneakBypassUse(level, blockpos, player)); + ItemStack itemstack = itemStack.copy(); - if (!flag1) { + if (event.getUseBlock().isAllowed() || (!event.getUseBlock().isDenied() && !flag1)) { - InteractionResult interactionresult = blockstate.useItemOn(p_9266_.getItemInHand(p_9269_), p_9267_, p_9266_, p_9269_, p_9270_); + InteractionResult interactionresult = blockstate.useItemOn(player.getItemInHand(hand), level, player, hand, hitResult); if (interactionresult.consumesAction()) { - CriteriaTriggers.ITEM_USED_ON_BLOCK.trigger(p_9266_, blockpos, itemstack); -@@ -363,8 +_,8 @@ + CriteriaTriggers.ITEM_USED_ON_BLOCK.trigger(player, blockpos, itemstack); +@@ -373,8 +_,8 @@ } } -- if (!p_9268_.isEmpty() && !p_9266_.getCooldowns().isOnCooldown(p_9268_)) { -- UseOnContext useoncontext = new UseOnContext(p_9266_, p_9269_, p_9270_); -+ if (event.getUseItem().isAllowed() || (!p_9268_.isEmpty() && !p_9266_.getCooldowns().isOnCooldown(p_9268_))) { +- if (!itemStack.isEmpty() && !player.getCooldowns().isOnCooldown(itemStack)) { +- UseOnContext useoncontext = new UseOnContext(player, hand, hitResult); ++ if (event.getUseItem().isAllowed() || (!itemStack.isEmpty() && !player.getCooldowns().isOnCooldown(itemStack))) { + if (event.getUseItem().isDenied()) return InteractionResult.PASS; InteractionResult interactionresult2; - if (p_9266_.hasInfiniteMaterials()) { - int i = p_9268_.getCount(); + if (player.hasInfiniteMaterials()) { + int i = itemStack.getCount(); diff --git a/patches/minecraft/net/minecraft/server/level/ThreadedLevelLightEngine.java.patch b/patches/minecraft/net/minecraft/server/level/ThreadedLevelLightEngine.java.patch index 106618b1e4..7565a63561 100644 --- a/patches/minecraft/net/minecraft/server/level/ThreadedLevelLightEngine.java.patch +++ b/patches/minecraft/net/minecraft/server/level/ThreadedLevelLightEngine.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/server/level/ThreadedLevelLightEngine.java +++ b/net/minecraft/server/level/ThreadedLevelLightEngine.java -@@ -176,6 +_,7 @@ - }, () -> "lightChunk " + chunkpos + " " + p_9355_)); +@@ -175,6 +_,7 @@ + }, () -> "lightChunk " + chunkpos + " " + lighted)); return CompletableFuture.supplyAsync(() -> { - p_9354_.setLightCorrect(true); -+ net.minecraftforge.common.ForgeHooks.fireLightingCalculatedEvent(p_9354_); - return p_9354_; - }, p_280982_ -> this.addTask(chunkpos.x, chunkpos.z, ThreadedLevelLightEngine.TaskType.POST_UPDATE, p_280982_)); + centerChunk.setLightCorrect(true); ++ net.minecraftforge.common.ForgeHooks.fireLightingCalculatedEvent(centerChunk); + return centerChunk; + }, r -> this.addTask(chunkpos.x(), chunkpos.z(), ThreadedLevelLightEngine.TaskType.POST_UPDATE, r)); } diff --git a/patches/minecraft/net/minecraft/server/level/WorldGenRegion.java.patch b/patches/minecraft/net/minecraft/server/level/WorldGenRegion.java.patch index 8edd68c597..bed5d7c261 100644 --- a/patches/minecraft/net/minecraft/server/level/WorldGenRegion.java.patch +++ b/patches/minecraft/net/minecraft/server/level/WorldGenRegion.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/server/level/WorldGenRegion.java +++ b/net/minecraft/server/level/WorldGenRegion.java -@@ -314,6 +_,7 @@ +@@ -301,6 +_,7 @@ @Override - public boolean addFreshEntity(Entity p_9580_) { -+ if (p_9580_ instanceof net.minecraft.world.entity.Mob mob && mob.isSpawnCancelled()) return false; - int i = SectionPos.blockToSectionCoord(p_9580_.getBlockX()); - int j = SectionPos.blockToSectionCoord(p_9580_.getBlockZ()); - this.getChunk(i, j).addEntity(p_9580_); + public boolean addFreshEntity(final Entity entity) { ++ if (entity instanceof net.minecraft.world.entity.Mob mob && mob.isSpawnCancelled()) return false; + int i = SectionPos.blockToSectionCoord(entity.getBlockX()); + int j = SectionPos.blockToSectionCoord(entity.getBlockZ()); + this.getChunk(i, j).addEntity(entity); diff --git a/patches/minecraft/net/minecraft/server/network/ConfigurationTask.java.patch b/patches/minecraft/net/minecraft/server/network/ConfigurationTask.java.patch index 03ccb6d590..12c0c8c03d 100644 --- a/patches/minecraft/net/minecraft/server/network/ConfigurationTask.java.patch +++ b/patches/minecraft/net/minecraft/server/network/ConfigurationTask.java.patch @@ -8,6 +8,6 @@ + start(ctx::send); + } + - void start(Consumer> p_299398_); + void start(Consumer> connection); default boolean tick() { diff --git a/patches/minecraft/net/minecraft/server/network/EventLoopGroupHolder.java.patch b/patches/minecraft/net/minecraft/server/network/EventLoopGroupHolder.java.patch index dd2fe2fc5c..42fcd20a34 100644 --- a/patches/minecraft/net/minecraft/server/network/EventLoopGroupHolder.java.patch +++ b/patches/minecraft/net/minecraft/server/network/EventLoopGroupHolder.java.patch @@ -6,10 +6,10 @@ private volatile @Nullable EventLoopGroup group; + private volatile @Nullable EventLoopGroup groupClient; - public static EventLoopGroupHolder remote(boolean p_453425_) { - if (p_453425_) { + public static EventLoopGroupHolder remote(final boolean allowNativeTransport) { + if (allowNativeTransport) { @@ -77,24 +_,31 @@ - this.serverChannelCls = p_455144_; + this.serverChannelCls = serverChannelCls; } - private ThreadFactory createThreadFactory() { diff --git a/patches/minecraft/net/minecraft/server/network/MemoryServerHandshakePacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/server/network/MemoryServerHandshakePacketListenerImpl.java.patch index 2fb993558c..22c44f0b0c 100644 --- a/patches/minecraft/net/minecraft/server/network/MemoryServerHandshakePacketListenerImpl.java.patch +++ b/patches/minecraft/net/minecraft/server/network/MemoryServerHandshakePacketListenerImpl.java.patch @@ -3,8 +3,8 @@ @@ -19,6 +_,7 @@ @Override - public void handleIntention(ClientIntentionPacket p_9697_) { -+ if (!net.minecraftforge.server.ServerLifecycleHooks.handleServerLogin(p_9697_, this.connection)) return; - if (p_9697_.intention() != ClientIntent.LOGIN) { - throw new UnsupportedOperationException("Invalid intention " + p_9697_.intention()); + public void handleIntention(final ClientIntentionPacket packet) { ++ if (!net.minecraftforge.server.ServerLifecycleHooks.handleServerLogin(packet, this.connection)) return; + if (packet.intention() != ClientIntent.LOGIN) { + throw new UnsupportedOperationException("Invalid intention " + packet.intention()); } else { diff --git a/patches/minecraft/net/minecraft/server/network/PlayerChunkSender.java.patch b/patches/minecraft/net/minecraft/server/network/PlayerChunkSender.java.patch index 28b9533f0f..2da35ea530 100644 --- a/patches/minecraft/net/minecraft/server/network/PlayerChunkSender.java.patch +++ b/patches/minecraft/net/minecraft/server/network/PlayerChunkSender.java.patch @@ -1,18 +1,18 @@ --- a/net/minecraft/server/network/PlayerChunkSender.java +++ b/net/minecraft/server/network/PlayerChunkSender.java @@ -44,6 +_,7 @@ - public void dropChunk(ServerPlayer p_298166_, ChunkPos p_300687_) { - if (!this.pendingChunks.remove(p_300687_.toLong()) && p_298166_.isAlive()) { - p_298166_.connection.send(new ClientboundForgetLevelChunkPacket(p_300687_)); -+ net.minecraftforge.event.ForgeEventFactory.fireChunkUnWatch(p_298166_, p_300687_, (ServerLevel) p_298166_.level()); + public void dropChunk(final ServerPlayer player, final ChunkPos pos) { + if (!this.pendingChunks.remove(pos.pack()) && player.isAlive()) { + player.connection.send(new ClientboundForgetLevelChunkPacket(pos)); ++ net.minecraftforge.event.ForgeEventFactory.fireChunkUnWatch(player, pos, (ServerLevel)player.level()); } } @@ -81,6 +_,7 @@ } - p_298120_.debugSynchronizers().startTrackingChunk(p_299748_.player, p_297712_.getPos()); -+ net.minecraftforge.event.ForgeEventFactory.fireChunkWatch(p_299748_.player, p_297712_, p_298120_); + level.debugSynchronizers().startTrackingChunk(connection.player, chunk.getPos()); ++ net.minecraftforge.event.ForgeEventFactory.fireChunkWatch(connection.player, chunk, level); } - private List collectChunksToSend(ChunkMap p_298180_, ChunkPos p_298514_) { + private List collectChunksToSend(final ChunkMap chunkMap, final ChunkPos playerPos) { diff --git a/patches/minecraft/net/minecraft/server/network/ServerCommonPacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/server/network/ServerCommonPacketListenerImpl.java.patch index 8c96fcb402..8038b1e326 100644 --- a/patches/minecraft/net/minecraft/server/network/ServerCommonPacketListenerImpl.java.patch +++ b/patches/minecraft/net/minecraft/server/network/ServerCommonPacketListenerImpl.java.patch @@ -3,15 +3,15 @@ @@ -93,6 +_,7 @@ @Override - public void handleCustomPayload(ServerboundCustomPayloadPacket p_300164_) { -+ net.minecraftforge.common.ForgeHooks.onCustomPayload(p_300164_.payload(), this.connection); + public void handleCustomPayload(final ServerboundCustomPayloadPacket packet) { ++ net.minecraftforge.common.ForgeHooks.onCustomPayload(packet.payload(), this.connection); } @Override -@@ -202,5 +_,9 @@ +@@ -201,5 +_,9 @@ - protected CommonListenerCookie createCookie(ClientInformation p_297318_) { - return new CommonListenerCookie(this.playerProfile(), this.latency, p_297318_, this.transferred); + protected CommonListenerCookie createCookie(final ClientInformation clientInformation) { + return new CommonListenerCookie(this.playerProfile(), this.latency, clientInformation, this.transferred); + } + + public Connection getConnection() { diff --git a/patches/minecraft/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java.patch index 211489b6f0..58410340ef 100644 --- a/patches/minecraft/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java.patch +++ b/patches/minecraft/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java.patch @@ -13,15 +13,15 @@ private @Nullable PrepareSpawnTask prepareSpawnTask; + private final net.minecraftforge.network.config.ConfigurationTaskContext taskContext; - public ServerConfigurationPacketListenerImpl(MinecraftServer p_301415_, Connection p_298106_, CommonListenerCookie p_301309_) { - super(p_301415_, p_298106_, p_301309_); - this.gameProfile = p_301309_.gameProfile(); - this.clientInformation = p_301309_.clientInformation(); -+ this.taskContext = new net.minecraftforge.network.config.ConfigurationTaskContext(p_298106_, this::send, this::finishCurrentTask); + public ServerConfigurationPacketListenerImpl(final MinecraftServer server, final Connection connection, final CommonListenerCookie cookie) { + super(server, connection, cookie); + this.gameProfile = cookie.gameProfile(); + this.clientInformation = cookie.clientInformation(); ++ this.taskContext = new net.minecraftforge.network.config.ConfigurationTaskContext(connection, this::send, this::finishCurrentTask); } @Override -@@ -81,18 +_,23 @@ +@@ -81,22 +_,27 @@ return this.connection.isConnected(); } @@ -39,7 +39,11 @@ + public void startConfiguration() { + net.minecraftforge.event.ForgeEventFactory.gatherLoginConfigTasks(this.connection, this.configurationTasks::add); LayeredRegistryAccess layeredregistryaccess = this.server.registries(); - List list = this.server.getResourceManager().listPacks().flatMap(p_326454_ -> p_326454_.location().knownPackInfo().stream()).toList(); + List list = this.server + .getResourceManager() + .listPacks() + .flatMap(packResources -> packResources.location().knownPackInfo().stream()) + .toList(); - this.send(new ClientboundUpdateEnabledFeaturesPacket(FeatureFlags.REGISTRY.toNames(this.server.getWorldData().enabledFeatures()))); this.synchronizeRegistriesTask = new SynchronizeRegistriesTask(list, layeredregistryaccess); this.configurationTasks.add(this.synchronizeRegistriesTask); @@ -47,7 +51,7 @@ this.addOptionalTasks(); this.returnToWorld(); } -@@ -208,7 +_,7 @@ +@@ -212,7 +_,7 @@ this.currentTask = configurationtask; try { diff --git a/patches/minecraft/net/minecraft/server/network/ServerConnectionListener.java.patch b/patches/minecraft/net/minecraft/server/network/ServerConnectionListener.java.patch index 6a617e090e..fb088035e7 100644 --- a/patches/minecraft/net/minecraft/server/network/ServerConnectionListener.java.patch +++ b/patches/minecraft/net/minecraft/server/network/ServerConnectionListener.java.patch @@ -1,28 +1,37 @@ --- a/net/minecraft/server/network/ServerConnectionListener.java +++ b/net/minecraft/server/network/ServerConnectionListener.java -@@ -37,6 +_,7 @@ +@@ -38,6 +_,7 @@ import org.slf4j.Logger; public class ServerConnectionListener { + private static final int READ_TIMEOUT = Integer.parseInt(System.getProperty("forge.readTimeout", "30")); private static final Logger LOGGER = LogUtils.getLogger(); - final MinecraftServer server; + private final MinecraftServer server; public volatile boolean running; -@@ -49,6 +_,8 @@ +@@ -50,6 +_,8 @@ } - public void startTcpServerListener(@Nullable InetAddress p_9712_, int p_9713_) throws IOException { -+ if (p_9712_ == null) p_9712_ = new java.net.InetSocketAddress(p_9713_).getAddress(); -+ net.minecraftforge.network.DualStackUtils.checkIPv6(p_9712_); + public void startTcpServerListener(final @Nullable InetAddress address, final int port) throws IOException { ++ var fixedAddress = address != null ? address : new java.net.InetSocketAddress(port).getAddress(); ++ net.minecraftforge.network.DualStackUtils.checkIPv6(fixedAddress); synchronized (this.channels) { EventLoopGroupHolder eventloopgroupholder = EventLoopGroupHolder.remote(this.server.useNativeTransport()); this.channels.add(new ServerBootstrap().channel(eventloopgroupholder.serverChannelCls()).childHandler(new ChannelInitializer() { -@@ -59,7 +_,7 @@ +@@ -64,7 +_,7 @@ } catch (ChannelException channelexception) { } -- ChannelPipeline channelpipeline = p_9729_.pipeline().addLast("timeout", new ReadTimeoutHandler(30)); -+ ChannelPipeline channelpipeline = p_9729_.pipeline().addLast("timeout", new ReadTimeoutHandler(READ_TIMEOUT)); +- ChannelPipeline channelpipeline = channel.pipeline().addLast("timeout", new ReadTimeoutHandler(30)); ++ ChannelPipeline channelpipeline = channel.pipeline().addLast("timeout", new ReadTimeoutHandler(READ_TIMEOUT)); if (ServerConnectionListener.this.server.repliesToStatus()) { channelpipeline.addLast("legacy_query", new LegacyQueryHandler(ServerConnectionListener.this.getServer())); } +@@ -76,7 +_,7 @@ + connection.configurePacketHandler(channelpipeline); + connection.setListenerForServerboundHandshake(new ServerHandshakePacketListenerImpl(ServerConnectionListener.this.server, connection)); + } +- }).group(eventloopgroupholder.eventLoopGroup()).localAddress(address, port).bind().syncUninterruptibly()); ++ }).group(eventloopgroupholder.eventLoopGroup()).localAddress(fixedAddress, port).bind().syncUninterruptibly()); + } + } + diff --git a/patches/minecraft/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch index 694cede4fd..433ba9e7a4 100644 --- a/patches/minecraft/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch +++ b/patches/minecraft/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1213,9 +_,10 @@ +@@ -1279,9 +_,10 @@ } case SWAP_ITEM_WITH_OFFHAND: if (!this.player.isSpectator()) { @@ -14,31 +14,22 @@ this.player.stopUsingItem(); } -@@ -1414,8 +_,9 @@ +@@ -1503,8 +_,9 @@ } CompletableFuture completablefuture = this.filterTextPacket(playerchatmessage.signedContent()); - Component component = this.server.getChatDecorator().decorate(this.player, playerchatmessage.decoratedContent()); + Component component = net.minecraftforge.common.ForgeHooks.onServerChatSubmittedEvent(this.player, playerchatmessage.decoratedContent()); - this.chatMessageChain.append(completablefuture, p_296589_ -> { + this.chatMessageChain.append(completablefuture, filtered -> { + if (component == null) return; - PlayerChatMessage playerchatmessage1 = playerchatmessage.withUnsignedContent(component).filter(p_296589_.mask()); + PlayerChatMessage playerchatmessage1 = playerchatmessage.withUnsignedContent(component).filter(filtered.mask()); this.broadcastChatMessage(playerchatmessage1); }); -@@ -1745,7 +_,7 @@ - - @Override - public void onInteraction(InteractionHand p_143682_, Vec3 p_143683_) { -- this.performInteraction(p_143682_, (p_143686_, p_143687_, p_143688_) -> p_143687_.interactAt(p_143686_, p_143683_, p_143688_)); -+ this.performInteraction(p_143682_, (p_143686_, p_143687_, p_143688_) -> net.minecraftforge.common.ForgeHooks.onInteractEntityAt(p_143687_, p_143686_, p_143683_, p_143688_)); - } - - @Override -@@ -2063,6 +_,7 @@ +@@ -2186,6 +_,7 @@ @Override - public void handleCustomPayload(ServerboundCustomPayloadPacket p_329963_) { -+ net.minecraftforge.common.ForgeHooks.onCustomPayload(p_329963_.payload(), this.connection); + public void handleCustomPayload(final ServerboundCustomPayloadPacket packet) { ++ net.minecraftforge.common.ForgeHooks.onCustomPayload(packet.payload(), this.connection); } @Override diff --git a/patches/minecraft/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java.patch index d23abc591e..e86aef9472 100644 --- a/patches/minecraft/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java.patch +++ b/patches/minecraft/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java.patch @@ -3,11 +3,11 @@ @@ -24,6 +_,7 @@ @Override - public void handleIntention(ClientIntentionPacket p_9975_) { -+ if (!net.minecraftforge.server.ServerLifecycleHooks.handleServerLogin(p_9975_, this.connection)) return; - switch (p_9975_.intention()) { + public void handleIntention(final ClientIntentionPacket packet) { ++ if (!net.minecraftforge.server.ServerLifecycleHooks.handleServerLogin(packet, this.connection)) return; + switch (packet.intention()) { case LOGIN: - this.beginLogin(p_9975_, false); + this.beginLogin(packet, false); @@ -32,7 +_,7 @@ ServerStatus serverstatus = this.server.getStatus(); this.connection.setupOutboundProtocol(StatusProtocols.CLIENTBOUND); diff --git a/patches/minecraft/net/minecraft/server/network/ServerLoginPacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/server/network/ServerLoginPacketListenerImpl.java.patch index e0f4fc0e39..1ae4dbad0f 100644 --- a/patches/minecraft/net/minecraft/server/network/ServerLoginPacketListenerImpl.java.patch +++ b/patches/minecraft/net/minecraft/server/network/ServerLoginPacketListenerImpl.java.patch @@ -1,25 +1,25 @@ --- a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -@@ -185,7 +_,7 @@ +@@ -186,7 +_,7 @@ throw new IllegalStateException("Protocol error", cryptexception); } - Thread thread = new Thread("User Authenticator #" + UNIQUE_THREAD_ID.incrementAndGet()) { + Thread thread = new Thread(net.minecraftforge.fml.util.thread.SidedThreadGroups.SERVER, "User Authenticator #" + UNIQUE_THREAD_ID.incrementAndGet()) { - @Override - public void run() { - String s1 = Objects.requireNonNull(ServerLoginPacketListenerImpl.this.requestedUsername, "Player name not initialized"); -@@ -228,6 +_,7 @@ + { + Objects.requireNonNull(ServerLoginPacketListenerImpl.this); + } +@@ -236,6 +_,7 @@ @Override - public void handleCustomQueryPacket(ServerboundCustomQueryAnswerPacket p_297965_) { -+ if (!net.minecraftforge.common.ForgeHooks.onCustomPayload(p_297965_, this.connection)) + public void handleCustomQueryPacket(final ServerboundCustomQueryAnswerPacket packet) { ++ if (!net.minecraftforge.common.ForgeHooks.onCustomPayload(packet, this.connection)) this.disconnect(ServerCommonPacketListenerImpl.DISCONNECT_UNEXPECTED_QUERY); } -@@ -252,6 +_,11 @@ +@@ -260,6 +_,11 @@ @Override - public void handleCookieResponse(ServerboundCookieResponsePacket p_333672_) { + public void handleCookieResponse(final ServerboundCookieResponsePacket packet) { this.disconnect(ServerCommonPacketListenerImpl.DISCONNECT_UNEXPECTED_QUERY); + } + @@ -28,4 +28,4 @@ + return this.authenticatedProfile; } - static enum State { + private static enum State { diff --git a/patches/minecraft/net/minecraft/server/network/ServerStatusPacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/server/network/ServerStatusPacketListenerImpl.java.patch index c44dab44cc..c195b8822d 100644 --- a/patches/minecraft/net/minecraft/server/network/ServerStatusPacketListenerImpl.java.patch +++ b/patches/minecraft/net/minecraft/server/network/ServerStatusPacketListenerImpl.java.patch @@ -8,13 +8,13 @@ private final Connection connection; private boolean hasRequestedStatus; - public ServerStatusPacketListenerImpl(ServerStatus p_272864_, Connection p_273586_) { -+ this(p_272864_, p_273586_, null); + public ServerStatusPacketListenerImpl(final ServerStatus status, final Connection connection) { ++ this(status, connection, null); + } + -+ public ServerStatusPacketListenerImpl(ServerStatus p_272864_, Connection p_273586_, @org.jetbrains.annotations.Nullable String statusCache) { - this.status = p_272864_; - this.connection = p_273586_; ++ public ServerStatusPacketListenerImpl(ServerStatus status, Connection connection, @org.jetbrains.annotations.Nullable String statusCache) { + this.status = status; + this.connection = connection; + this.statusCache = statusCache; } diff --git a/patches/minecraft/net/minecraft/server/network/config/PrepareSpawnTask.java.patch b/patches/minecraft/net/minecraft/server/network/config/PrepareSpawnTask.java.patch index b65bb874c4..9257f4abc3 100644 --- a/patches/minecraft/net/minecraft/server/network/config/PrepareSpawnTask.java.patch +++ b/patches/minecraft/net/minecraft/server/network/config/PrepareSpawnTask.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/server/network/config/PrepareSpawnTask.java +++ b/net/minecraft/server/network/config/PrepareSpawnTask.java -@@ -181,6 +_,7 @@ +@@ -192,6 +_,7 @@ .loadPlayerData(PrepareSpawnTask.this.nameAndId) - .map(p_423730_ -> TagValueInput.create(problemreporter$scopedcollector, PrepareSpawnTask.this.server.registryAccess(), p_423730_)); + .map(tag -> TagValueInput.create(problemreporter$scopedcollector, PrepareSpawnTask.this.server.registryAccess(), tag)); optional.ifPresent(serverplayer::load); + optional.ifPresent(v -> net.minecraftforge.event.ForgeEventFactory.firePlayerLoadingEvent(serverplayer, PrepareSpawnTask.this.server.getPlayerList().getPlayerIo().getPlayerDataFolder(), PrepareSpawnTask.this.nameAndId.id().toString())); serverplayer.snapTo(this.spawnPosition, this.spawnAngle.x, this.spawnAngle.y); - PrepareSpawnTask.this.server.getPlayerList().placeNewPlayer(p_429818_, serverplayer, p_430225_); - optional.ifPresent(p_422988_ -> { + PrepareSpawnTask.this.server.getPlayerList().placeNewPlayer(connection, serverplayer, cookie); + optional.ifPresent(tag -> { diff --git a/patches/minecraft/net/minecraft/server/packs/AbstractPackResources.java.patch b/patches/minecraft/net/minecraft/server/packs/AbstractPackResources.java.patch index 843689eee5..f468936039 100644 --- a/patches/minecraft/net/minecraft/server/packs/AbstractPackResources.java.patch +++ b/patches/minecraft/net/minecraft/server/packs/AbstractPackResources.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/packs/AbstractPackResources.java +++ b/net/minecraft/server/packs/AbstractPackResources.java -@@ -60,4 +_,9 @@ +@@ -42,4 +_,9 @@ public PackLocationInfo location() { return this.location; } diff --git a/patches/minecraft/net/minecraft/server/packs/repository/Pack.java.patch b/patches/minecraft/net/minecraft/server/packs/repository/Pack.java.patch index 80cef14587..da6e2cb239 100644 --- a/patches/minecraft/net/minecraft/server/packs/repository/Pack.java.patch +++ b/patches/minecraft/net/minecraft/server/packs/repository/Pack.java.patch @@ -1,31 +1,31 @@ --- a/net/minecraft/server/packs/repository/Pack.java +++ b/net/minecraft/server/packs/repository/Pack.java -@@ -23,6 +_,7 @@ +@@ -24,6 +_,7 @@ private final Pack.ResourcesSupplier resources; private final Pack.Metadata metadata; private final PackSelectionConfig selectionConfig; + private final boolean hidden; // Forge: Allow packs to be hidden from the UI entirely - public static @Nullable Pack readMetaAndCreate(PackLocationInfo p_333251_, Pack.ResourcesSupplier p_252210_, PackType p_250595_, PackSelectionConfig p_334202_) { - PackFormat packformat = SharedConstants.getCurrentVersion().packVersion(p_250595_); -@@ -35,6 +_,7 @@ - this.resources = p_249377_; - this.metadata = p_330761_; - this.selectionConfig = p_334769_; -+ this.hidden = p_330761_.isHidden(); + public static @Nullable Pack readMetaAndCreate( + final PackLocationInfo location, final Pack.ResourcesSupplier resources, final PackType packType, final PackSelectionConfig selectionConfig +@@ -40,6 +_,7 @@ + this.resources = resources; + this.metadata = metadata; + this.selectionConfig = selectionConfig; ++ this.hidden = metadata.isHidden(); } - public static Pack.@Nullable Metadata readPackMetadata(PackLocationInfo p_330799_, Pack.ResourcesSupplier p_331172_, PackFormat p_425340_, PackType p_426910_) { -@@ -56,7 +_,7 @@ - PackCompatibility packcompatibility = PackCompatibility.forVersion(packmetadatasection.supportedFormats(), p_425340_); - OverlayMetadataSection overlaymetadatasection = packresources.getMetadataSection(OverlayMetadataSection.forPackType(p_426910_)); - List list = overlaymetadatasection != null ? overlaymetadatasection.overlaysForVersion(p_425340_) : List.of(); + public static Pack.@Nullable Metadata readPackMetadata( +@@ -66,7 +_,7 @@ + PackCompatibility packcompatibility = PackCompatibility.forVersion(packmetadatasection.supportedFormats(), currentPackVersion); + OverlayMetadataSection overlaymetadatasection = packresources.getMetadataSection(OverlayMetadataSection.forPackType(type)); + List list = overlaymetadatasection != null ? overlaymetadatasection.overlaysForVersion(currentPackVersion) : List.of(); - pack$metadata = new Pack.Metadata(packmetadatasection.description(), packcompatibility, featureflagset, list); + pack$metadata = new Pack.Metadata(packmetadatasection.description(), packcompatibility, featureflagset, list, packresources.isHidden()); } return pack$metadata; -@@ -118,6 +_,10 @@ +@@ -128,6 +_,10 @@ return this.location.source(); } @@ -34,14 +34,14 @@ + } + @Override - public boolean equals(Object p_10448_) { - if (this == p_10448_) { -@@ -132,7 +_,10 @@ + public boolean equals(final Object o) { + if (this == o) { +@@ -142,7 +_,10 @@ return this.location.hashCode(); } - public record Metadata(Component description, PackCompatibility compatibility, FeatureFlagSet requestedFeatures, List overlays) { -+ public static record Metadata(Component description, PackCompatibility compatibility, FeatureFlagSet requestedFeatures, List overlays, boolean isHidden) { ++ public record Metadata(Component description, PackCompatibility compatibility, FeatureFlagSet requestedFeatures, List overlays, boolean isHidden) { + public Metadata(Component description, PackCompatibility compatibility, FeatureFlagSet requestedFeatures, List overlays) { + this(description, compatibility, requestedFeatures, overlays, false); + } diff --git a/patches/minecraft/net/minecraft/server/packs/repository/PackDetector.java.patch b/patches/minecraft/net/minecraft/server/packs/repository/PackDetector.java.patch index 926ea645a2..6b9c8166a6 100644 --- a/patches/minecraft/net/minecraft/server/packs/repository/PackDetector.java.patch +++ b/patches/minecraft/net/minecraft/server/packs/repository/PackDetector.java.patch @@ -3,16 +3,16 @@ @@ -19,6 +_,10 @@ } - public @Nullable T detectPackResources(Path p_298083_, List p_297322_) throws IOException { -+ return detectPackResources(p_298083_, p_297322_, true); + public @Nullable T detectPackResources(final Path content, final List issues) throws IOException { ++ return detectPackResources(content, issues, true); + } + @Nullable -+ public T detectPackResources(Path p_298083_, List p_297322_, boolean requireMeta) throws IOException { - Path path = p_298083_; ++ public T detectPackResources(Path content, List issues, boolean requireMeta) throws IOException { + Path path = content; BasicFileAttributes basicfileattributes; @@ -43,10 +_,11 @@ - if (!p_297322_.isEmpty()) { + if (!issues.isEmpty()) { return null; } else { - return !Files.isRegularFile(path.resolve("pack.mcmeta")) ? null : this.createDirectoryPack(path); diff --git a/patches/minecraft/net/minecraft/server/packs/repository/PackRepository.java.patch b/patches/minecraft/net/minecraft/server/packs/repository/PackRepository.java.patch index bd59447637..d9d01a57c6 100644 --- a/patches/minecraft/net/minecraft/server/packs/repository/PackRepository.java.patch +++ b/patches/minecraft/net/minecraft/server/packs/repository/PackRepository.java.patch @@ -3,20 +3,20 @@ @@ -23,7 +_,7 @@ private List selected = ImmutableList.of(); - public PackRepository(RepositorySource... p_251886_) { -- this.sources = ImmutableSet.copyOf(p_251886_); -+ this.sources = new java.util.LinkedHashSet<>(List.of(p_251886_)); //Forge: This needs to be a mutable set, so that we can add to it later on. + public PackRepository(final RepositorySource... sources) { +- this.sources = ImmutableSet.copyOf(sources); ++ this.sources = new java.util.LinkedHashSet<>(List.of(sources)); //Forge: This needs to be a mutable set, so that we can add to it later on. } - public static String displayPackList(Collection p_331712_) { -@@ -119,6 +_,10 @@ + public static String displayPackList(final Collection packs) { +@@ -117,6 +_,10 @@ - public @Nullable Pack getPack(String p_10508_) { - return this.available.get(p_10508_); + public @Nullable Pack getPack(final String id) { + return this.available.get(id); + } + + public synchronized void addPackFinder(RepositorySource packFinder) { + this.sources.add(packFinder); } - public boolean isAvailable(String p_10516_) { + public boolean isAvailable(final String id) { diff --git a/patches/minecraft/net/minecraft/server/packs/repository/ServerPacksSource.java.patch b/patches/minecraft/net/minecraft/server/packs/repository/ServerPacksSource.java.patch index 79d34a47b0..0c0f43f683 100644 --- a/patches/minecraft/net/minecraft/server/packs/repository/ServerPacksSource.java.patch +++ b/patches/minecraft/net/minecraft/server/packs/repository/ServerPacksSource.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/server/packs/repository/ServerPacksSource.java +++ b/net/minecraft/server/packs/repository/ServerPacksSource.java -@@ -65,7 +_,9 @@ +@@ -70,7 +_,9 @@ } - public static PackRepository createPackRepository(Path p_251569_, DirectoryValidator p_300268_) { -- return new PackRepository(new ServerPacksSource(p_300268_), new FolderRepositorySource(p_251569_, PackType.SERVER_DATA, PackSource.WORLD, p_300268_)); -+ var ret = new PackRepository(new ServerPacksSource(p_300268_), new FolderRepositorySource(p_251569_, PackType.SERVER_DATA, PackSource.WORLD, p_300268_)); + public static PackRepository createPackRepository(final Path datapackDir, final DirectoryValidator validator) { +- return new PackRepository(new ServerPacksSource(validator), new FolderRepositorySource(datapackDir, PackType.SERVER_DATA, PackSource.WORLD, validator)); ++ var ret = new PackRepository(new ServerPacksSource(validator), new FolderRepositorySource(datapackDir, PackType.SERVER_DATA, PackSource.WORLD, validator)); + net.minecraftforge.event.AddPackFindersEvent.BUS.post(new net.minecraftforge.event.AddPackFindersEvent(PackType.SERVER_DATA, ret::addPackFinder)); + return ret; } diff --git a/patches/minecraft/net/minecraft/server/packs/resources/FallbackResourceManager.java.patch b/patches/minecraft/net/minecraft/server/packs/resources/FallbackResourceManager.java.patch index c0e602a546..14fa10c6d6 100644 --- a/patches/minecraft/net/minecraft/server/packs/resources/FallbackResourceManager.java.patch +++ b/patches/minecraft/net/minecraft/server/packs/resources/FallbackResourceManager.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/packs/resources/FallbackResourceManager.java +++ b/net/minecraft/server/packs/resources/FallbackResourceManager.java -@@ -101,8 +_,11 @@ +@@ -103,8 +_,11 @@ for (int i = this.fallbacks.size() - 1; i >= 0; i--) { FallbackResourceManager.PackEntry fallbackresourcemanager$packentry = this.fallbacks.get(i); @@ -11,10 +11,10 @@ + var children = pack.getChildren(); + var packs = children == null ? List.of(pack) : children; + for (final PackResources packresources : packs) { - IoSupplier iosupplier = packresources.getResource(this.type, p_458089_); + IoSupplier iosupplier = packresources.getResource(this.type, location); if (iosupplier != null) { IoSupplier iosupplier1; -@@ -116,6 +_,7 @@ +@@ -118,6 +_,7 @@ } list.add(new Resource(packresources, iosupplier, iosupplier1)); diff --git a/patches/minecraft/net/minecraft/server/packs/resources/ReloadableResourceManager.java.patch b/patches/minecraft/net/minecraft/server/packs/resources/ReloadableResourceManager.java.patch index ab858a6705..105d3b9dd5 100644 --- a/patches/minecraft/net/minecraft/server/packs/resources/ReloadableResourceManager.java.patch +++ b/patches/minecraft/net/minecraft/server/packs/resources/ReloadableResourceManager.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/packs/resources/ReloadableResourceManager.java +++ b/net/minecraft/server/packs/resources/ReloadableResourceManager.java -@@ -73,4 +_,10 @@ +@@ -78,4 +_,10 @@ public Stream listPacks() { return this.resources.listPacks(); } diff --git a/patches/minecraft/net/minecraft/server/packs/resources/SimpleJsonResourceReloadListener.java.patch b/patches/minecraft/net/minecraft/server/packs/resources/SimpleJsonResourceReloadListener.java.patch index 94801e6047..4454378c2a 100644 --- a/patches/minecraft/net/minecraft/server/packs/resources/SimpleJsonResourceReloadListener.java.patch +++ b/patches/minecraft/net/minecraft/server/packs/resources/SimpleJsonResourceReloadListener.java.patch @@ -1,30 +1,30 @@ --- a/net/minecraft/server/packs/resources/SimpleJsonResourceReloadListener.java +++ b/net/minecraft/server/packs/resources/SimpleJsonResourceReloadListener.java -@@ -31,6 +_,10 @@ - this(p_378826_.createSerializationContext(JsonOps.INSTANCE), p_361980_, FileToIdConverter.registry(p_376437_)); +@@ -33,6 +_,10 @@ + this(registries.createSerializationContext(JsonOps.INSTANCE), codec, FileToIdConverter.registry(registryKey)); } -+ protected SimpleJsonResourceReloadListener(HolderLookup.Provider p_378826_, Codec p_361980_, ResourceKey> p_376437_, net.minecraftforge.common.crafting.conditions.ICondition.IContext context) { -+ this(context.wrap(p_378826_.createSerializationContext(JsonOps.INSTANCE)), p_361980_, FileToIdConverter.registry(p_376437_)); ++ protected SimpleJsonResourceReloadListener(final HolderLookup.Provider registries, final Codec codec, final ResourceKey> registryKey, net.minecraftforge.common.crafting.conditions.ICondition.IContext context) { ++ this(context.wrap(registries.createSerializationContext(JsonOps.INSTANCE)), codec, FileToIdConverter.registry(registryKey)); + } + - protected SimpleJsonResourceReloadListener(Codec p_370137_, FileToIdConverter p_375758_) { - this(JsonOps.INSTANCE, p_370137_, p_375758_); + protected SimpleJsonResourceReloadListener(final Codec codec, final FileToIdConverter lister) { + this(JsonOps.INSTANCE, codec, lister); } -@@ -65,7 +_,15 @@ - Identifier identifier1 = p_377980_.fileToId(identifier); +@@ -67,7 +_,15 @@ + Identifier identifier1 = lister.fileToId(identifier); try (Reader reader = entry.getValue().openAsReader()) { -- p_376362_.parse(p_378080_, StrictJsonParser.parse(reader)).ifSuccess(p_370131_ -> { +- codec.parse(ops, StrictJsonParser.parse(reader)).ifSuccess(parsed -> { + var json = StrictJsonParser.parse(reader); -+ json = net.minecraftforge.common.ForgeHooks.readConditional(p_378080_, json); ++ json = net.minecraftforge.common.ForgeHooks.readConditional(ops, json); + if (json == null) { + LOGGER.debug("Skipping loading {} as its conditions were not met", identifier); + continue; + } -+ p_376362_.parse(p_378080_, json).ifSuccess(p_370131_ -> { -+ p_370131_ = net.minecraftforge.common.ForgeHooks.onJsonDataParsed(p_376362_, identifier1, p_370131_); -+ if (p_370131_ == null) return; - if (p_377922_.putIfAbsent(identifier1, (T)p_370131_) != null) { ++ codec.parse(ops, json).ifSuccess(parsed -> { ++ parsed = net.minecraftforge.common.ForgeHooks.onJsonDataParsed(codec, identifier1, parsed); ++ if (parsed == null) return; + if (result.putIfAbsent(identifier1, (T)parsed) != null) { throw new IllegalStateException("Duplicate data file ignored with ID " + identifier1); } diff --git a/patches/minecraft/net/minecraft/server/players/PlayerList.java.patch b/patches/minecraft/net/minecraft/server/players/PlayerList.java.patch index d2758334cc..22610a76a5 100644 --- a/patches/minecraft/net/minecraft/server/players/PlayerList.java.patch +++ b/patches/minecraft/net/minecraft/server/players/PlayerList.java.patch @@ -6,65 +6,65 @@ private int sendAllPlayerInfoIn; + private final List playersView = java.util.Collections.unmodifiableList(players); - public PlayerList(MinecraftServer p_203842_, LayeredRegistryAccess p_251844_, PlayerDataStorage p_203844_, NotificationService p_425184_) { - this.server = p_203842_; -@@ -185,6 +_,7 @@ - servergamepacketlistenerimpl.send(new ClientboundPlayerAbilitiesPacket(p_11263_.getAbilities())); - servergamepacketlistenerimpl.send(new ClientboundSetHeldSlotPacket(p_11263_.getInventory().getSelectedSlot())); + public PlayerList( + final MinecraftServer server, +@@ -184,6 +_,7 @@ + servergamepacketlistenerimpl.send(new ClientboundPlayerAbilitiesPacket(player.getAbilities())); + servergamepacketlistenerimpl.send(new ClientboundSetHeldSlotPacket(player.getInventory().getSelectedSlot())); RecipeManager recipemanager = this.server.getRecipeManager(); -+ net.minecraftforge.event.OnDatapackSyncEvent.BUS.post(new net.minecraftforge.event.OnDatapackSyncEvent(this, p_11263_)); - servergamepacketlistenerimpl.send(new ClientboundUpdateRecipesPacket(recipemanager.getSynchronizedItemProperties(), recipemanager.getSynchronizedStonecutterRecipes())); - this.sendPlayerPermissionLevel(p_11263_); - p_11263_.getStats().markAllDirty(); -@@ -216,6 +_,7 @@ - p_11263_.initInventoryMenu(); - this.server.notificationManager().playerJoined(p_11263_); ++ net.minecraftforge.event.OnDatapackSyncEvent.BUS.post(new net.minecraftforge.event.OnDatapackSyncEvent(this, player)); + servergamepacketlistenerimpl.send( + new ClientboundUpdateRecipesPacket(recipemanager.getSynchronizedItemProperties(), recipemanager.getSynchronizedStonecutterRecipes()) + ); +@@ -217,6 +_,7 @@ + player.initInventoryMenu(); + this.server.notificationManager().playerJoined(player); servergamepacketlistenerimpl.resumeFlushing(); -+ net.minecraftforge.event.ForgeEventFactory.firePlayerLoggedIn(p_11263_); ++ net.minecraftforge.event.ForgeEventFactory.firePlayerLoggedIn(player); } - protected void updateEntireScoreboard(ServerScoreboard p_11274_, ServerPlayer p_11275_) { -@@ -285,6 +_,7 @@ + protected void updateEntireScoreboard(final ServerScoreboard scoreboard, final ServerPlayer player) { +@@ -290,6 +_,7 @@ } - protected void save(ServerPlayer p_11277_) { -+ if (p_11277_.connection == null) return; // Not sure if still needed -Paint_Ninja - this.playerIo.save(p_11277_); - ServerStatsCounter serverstatscounter = this.stats.get(p_11277_.getUUID()); + protected void save(final ServerPlayer player) { ++ if (player.connection == null) return; // Not sure if still needed -Paint_Ninja + this.playerIo.save(player); + ServerStatsCounter serverstatscounter = this.stats.get(player.getUUID()); if (serverstatscounter != null) { -@@ -298,6 +_,7 @@ +@@ -303,6 +_,7 @@ } - public void remove(ServerPlayer p_11287_) { -+ net.minecraftforge.event.ForgeEventFactory.firePlayerLoggedOut(p_11287_); - ServerLevel serverlevel = p_11287_.level(); - p_11287_.awardStat(Stats.LEAVE_GAME); - this.save(p_11287_); -@@ -418,6 +_,7 @@ + public void remove(final ServerPlayer player) { ++ net.minecraftforge.event.ForgeEventFactory.firePlayerLoggedOut(player); + ServerLevel serverlevel = player.level(); + player.awardStat(Stats.LEAVE_GAME); + this.save(player); +@@ -429,6 +_,7 @@ this.playersByUUID.put(serverplayer.getUUID(), serverplayer); serverplayer.initInventoryMenu(); serverplayer.setHealth(serverplayer.getHealth()); -+ net.minecraftforge.event.ForgeEventFactory.firePlayerRespawnEvent(serverplayer, p_11238_); ++ net.minecraftforge.event.ForgeEventFactory.firePlayerRespawnEvent(serverplayer, keepAllPlayerData); ServerPlayer.RespawnConfig serverplayer$respawnconfig = serverplayer.getRespawnConfig(); - if (!p_11238_ && serverplayer$respawnconfig != null) { + if (!keepAllPlayerData && serverplayer$respawnconfig != null) { LevelData.RespawnData leveldata$respawndata = serverplayer$respawnconfig.respawnData(); -@@ -531,6 +_,7 @@ +@@ -542,6 +_,7 @@ } - public void op(NameAndId p_425211_, Optional p_427477_, Optional p_426308_) { -+ if (net.minecraftforge.event.ForgeEventFactory.onPermissionChanged(p_425211_, p_427477_.orElse(this.server.operatorUserPermissions()), this)) return; + public void op(final NameAndId nameAndId, final Optional permissions, final Optional canBypassPlayerLimit) { ++ if (net.minecraftforge.event.ForgeEventFactory.onPermissionChanged(nameAndId, permissions.orElse(this.server.operatorUserPermissions()), this)) return; this.ops - .add(new ServerOpListEntry(p_425211_, p_427477_.orElse(this.server.operatorUserPermissions()), p_426308_.orElse(this.ops.canBypassPlayerLimit(p_425211_)))); - ServerPlayer serverplayer = this.getPlayer(p_425211_.id()); -@@ -540,6 +_,7 @@ + .add( + new ServerOpListEntry( +@@ -555,6 +_,7 @@ } - public void deop(NameAndId p_428113_) { -+ if (net.minecraftforge.event.ForgeEventFactory.onPermissionChanged(p_428113_, null, this)) return; - if (this.ops.remove(p_428113_)) { - ServerPlayer serverplayer = this.getPlayer(p_428113_.id()); + public void deop(final NameAndId nameAndId) { ++ if (net.minecraftforge.event.ForgeEventFactory.onPermissionChanged(nameAndId, null, this)) return; + if (this.ops.remove(nameAndId)) { + ServerPlayer serverplayer = this.getPlayer(nameAndId.id()); if (serverplayer != null) { -@@ -804,7 +_,7 @@ +@@ -824,7 +_,7 @@ } public List getPlayers() { @@ -72,16 +72,16 @@ + return this.playersView; //Unmodifiable view, we don't want people removing things without us knowing. } - public @Nullable ServerPlayer getPlayer(UUID p_11260_) { -@@ -830,6 +_,7 @@ + public @Nullable ServerPlayer getPlayer(final UUID uuid) { +@@ -850,6 +_,7 @@ playeradvancements.reload(this.server.getAdvancements()); } + net.minecraftforge.event.OnDatapackSyncEvent.BUS.post(new net.minecraftforge.event.OnDatapackSyncEvent(this, null)); this.broadcastAll(new ClientboundUpdateTagsPacket(TagNetworkSerialization.serializeTagsToNetwork(this.registries))); RecipeManager recipemanager = this.server.getRecipeManager(); - ClientboundUpdateRecipesPacket clientboundupdaterecipespacket = new ClientboundUpdateRecipesPacket(recipemanager.getSynchronizedItemProperties(), recipemanager.getSynchronizedStonecutterRecipes()); -@@ -842,5 +_,9 @@ + ClientboundUpdateRecipesPacket clientboundupdaterecipespacket = new ClientboundUpdateRecipesPacket( +@@ -864,5 +_,9 @@ public boolean isAllowCommandsForAllPlayers() { return this.allowCommandsForAllPlayers; diff --git a/patches/minecraft/net/minecraft/server/rcon/RconConsoleSource.java.patch b/patches/minecraft/net/minecraft/server/rcon/RconConsoleSource.java.patch index 5ab640d010..02501c8b05 100644 --- a/patches/minecraft/net/minecraft/server/rcon/RconConsoleSource.java.patch +++ b/patches/minecraft/net/minecraft/server/rcon/RconConsoleSource.java.patch @@ -3,9 +3,9 @@ @@ -44,7 +_,7 @@ @Override - public void sendSystemMessage(Component p_215653_) { -- this.buffer.append(p_215653_.getString()); -+ this.buffer.append(p_215653_.getString()).append("\n"); // FIX MC-7569 - RCON has no newlines in multiline output + public void sendSystemMessage(final Component message) { +- this.buffer.append(message.getString()); ++ this.buffer.append(message.getString()).append("\n"); // FIX MC-7569 - RCON has no newlines in multiline output } @Override diff --git a/patches/minecraft/net/minecraft/server/rcon/thread/RconClient.java.patch b/patches/minecraft/net/minecraft/server/rcon/thread/RconClient.java.patch index a55e85704e..f71c9d0feb 100644 --- a/patches/minecraft/net/minecraft/server/rcon/thread/RconClient.java.patch +++ b/patches/minecraft/net/minecraft/server/rcon/thread/RconClient.java.patch @@ -3,19 +3,19 @@ @@ -123,14 +_,11 @@ } - private void sendCmdResponse(int p_11595_, String p_11596_) throws IOException { -- int i = p_11596_.length(); + private void sendCmdResponse(final int requestid, String response) throws IOException { +- int i = response.length(); - - do { - int j = 4096 <= i ? 4096 : i; -- this.send(p_11595_, 0, p_11596_.substring(0, j)); -- p_11596_ = p_11596_.substring(j); -- i = p_11596_.length(); +- this.send(requestid, 0, response.substring(0, j)); +- response = response.substring(j); +- i = response.length(); - } while (0 != i); + // Forge: Actually convert to UTF8 and process bytes accordingly. Why do we do this? UTF8 should be single byte per character -+ byte[] data = p_11596_.getBytes(StandardCharsets.UTF_8); ++ byte[] data = response.getBytes(StandardCharsets.UTF_8); + for (int x = 0; x < data.length; x += 4096) { -+ this.send(p_11595_, 0, new String(data, x, Math.min(4096, data.length - x), StandardCharsets.UTF_8)); ++ this.send(requestid, 0, new String(data, x, Math.min(4096, data.length - x), StandardCharsets.UTF_8)); + } } diff --git a/patches/minecraft/net/minecraft/stats/RecipeBookSettings.java.patch b/patches/minecraft/net/minecraft/stats/RecipeBookSettings.java.patch index 193fe7c77e..f77d3f93c9 100644 --- a/patches/minecraft/net/minecraft/stats/RecipeBookSettings.java.patch +++ b/patches/minecraft/net/minecraft/stats/RecipeBookSettings.java.patch @@ -8,8 +8,8 @@ public final class RecipeBookSettings { public static final StreamCodec STREAM_CODEC = StreamCodec.composite( RecipeBookSettings.TypeSettings.STREAM_CODEC, -@@ -148,5 +_,13 @@ - .apply(p_407394_, RecipeBookSettings.TypeSettings::new) +@@ -150,5 +_,13 @@ + .apply(i, RecipeBookSettings.TypeSettings::new) ); } + } diff --git a/patches/minecraft/net/minecraft/tags/BannerPatternTags.java.patch b/patches/minecraft/net/minecraft/tags/BannerPatternTags.java.patch index 4ad4faaf66..af517b953c 100644 --- a/patches/minecraft/net/minecraft/tags/BannerPatternTags.java.patch +++ b/patches/minecraft/net/minecraft/tags/BannerPatternTags.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/tags/BannerPatternTags.java +++ b/net/minecraft/tags/BannerPatternTags.java @@ -23,4 +_,12 @@ - private static TagKey create(String p_215798_) { - return TagKey.create(Registries.BANNER_PATTERN, Identifier.withDefaultNamespace(p_215798_)); + private static TagKey create(final String name) { + return TagKey.create(Registries.BANNER_PATTERN, Identifier.withDefaultNamespace(name)); } + + public static TagKey create(String namepsace, String path) { diff --git a/patches/minecraft/net/minecraft/tags/BiomeTags.java.patch b/patches/minecraft/net/minecraft/tags/BiomeTags.java.patch index c94bcb4ef6..77b1e4196c 100644 --- a/patches/minecraft/net/minecraft/tags/BiomeTags.java.patch +++ b/patches/minecraft/net/minecraft/tags/BiomeTags.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/tags/BiomeTags.java +++ b/net/minecraft/tags/BiomeTags.java @@ -80,4 +_,12 @@ - private static TagKey create(String p_207631_) { - return TagKey.create(Registries.BIOME, Identifier.withDefaultNamespace(p_207631_)); + private static TagKey create(final String name) { + return TagKey.create(Registries.BIOME, Identifier.withDefaultNamespace(name)); } + + public static TagKey create(String namepsace, String path) { diff --git a/patches/minecraft/net/minecraft/tags/BlockTags.java.patch b/patches/minecraft/net/minecraft/tags/BlockTags.java.patch index d269b6c8b5..328c87ba12 100644 --- a/patches/minecraft/net/minecraft/tags/BlockTags.java.patch +++ b/patches/minecraft/net/minecraft/tags/BlockTags.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/tags/BlockTags.java +++ b/net/minecraft/tags/BlockTags.java -@@ -216,4 +_,12 @@ - private static TagKey create(String p_203847_) { - return TagKey.create(Registries.BLOCK, Identifier.withDefaultNamespace(p_203847_)); +@@ -260,4 +_,12 @@ + private static TagKey create(final String name) { + return TagKey.create(Registries.BLOCK, Identifier.withDefaultNamespace(name)); } + + public static TagKey create(String namepsace, String path) { diff --git a/patches/minecraft/net/minecraft/tags/DamageTypeTags.java.patch b/patches/minecraft/net/minecraft/tags/DamageTypeTags.java.patch index 027b3570e0..55c5476327 100644 --- a/patches/minecraft/net/minecraft/tags/DamageTypeTags.java.patch +++ b/patches/minecraft/net/minecraft/tags/DamageTypeTags.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/tags/DamageTypeTags.java +++ b/net/minecraft/tags/DamageTypeTags.java @@ -43,4 +_,12 @@ - private static TagKey create(String p_270635_) { - return TagKey.create(Registries.DAMAGE_TYPE, Identifier.withDefaultNamespace(p_270635_)); + private static TagKey create(final String name) { + return TagKey.create(Registries.DAMAGE_TYPE, Identifier.withDefaultNamespace(name)); } + + public static TagKey create(String namepsace, String path) { diff --git a/patches/minecraft/net/minecraft/tags/EnchantmentTags.java.patch b/patches/minecraft/net/minecraft/tags/EnchantmentTags.java.patch index fa03a20896..f95df822a0 100644 --- a/patches/minecraft/net/minecraft/tags/EnchantmentTags.java.patch +++ b/patches/minecraft/net/minecraft/tags/EnchantmentTags.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/tags/EnchantmentTags.java +++ b/net/minecraft/tags/EnchantmentTags.java -@@ -45,4 +_,12 @@ - private static TagKey create(String p_334094_) { - return TagKey.create(Registries.ENCHANTMENT, Identifier.withDefaultNamespace(p_334094_)); +@@ -38,4 +_,12 @@ + private static TagKey create(final String name) { + return TagKey.create(Registries.ENCHANTMENT, Identifier.withDefaultNamespace(name)); } + + public static TagKey create(String namepsace, String path) { diff --git a/patches/minecraft/net/minecraft/tags/EntityTypeTags.java.patch b/patches/minecraft/net/minecraft/tags/EntityTypeTags.java.patch index f1fa21f7e2..02445ad445 100644 --- a/patches/minecraft/net/minecraft/tags/EntityTypeTags.java.patch +++ b/patches/minecraft/net/minecraft/tags/EntityTypeTags.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/tags/EntityTypeTags.java +++ b/net/minecraft/tags/EntityTypeTags.java -@@ -55,4 +_,12 @@ - private static TagKey> create(String p_203849_) { - return TagKey.create(Registries.ENTITY_TYPE, Identifier.withDefaultNamespace(p_203849_)); +@@ -56,4 +_,12 @@ + private static TagKey> create(final String name) { + return TagKey.create(Registries.ENTITY_TYPE, Identifier.withDefaultNamespace(name)); } + + public static TagKey> create(String namepsace, String path) { diff --git a/patches/minecraft/net/minecraft/tags/FlatLevelGeneratorPresetTags.java.patch b/patches/minecraft/net/minecraft/tags/FlatLevelGeneratorPresetTags.java.patch index 059dd8d140..960fb2d27c 100644 --- a/patches/minecraft/net/minecraft/tags/FlatLevelGeneratorPresetTags.java.patch +++ b/patches/minecraft/net/minecraft/tags/FlatLevelGeneratorPresetTags.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/tags/FlatLevelGeneratorPresetTags.java +++ b/net/minecraft/tags/FlatLevelGeneratorPresetTags.java @@ -13,4 +_,12 @@ - private static TagKey create(String p_215852_) { - return TagKey.create(Registries.FLAT_LEVEL_GENERATOR_PRESET, Identifier.withDefaultNamespace(p_215852_)); + private static TagKey create(final String name) { + return TagKey.create(Registries.FLAT_LEVEL_GENERATOR_PRESET, Identifier.withDefaultNamespace(name)); } + + public static TagKey create(String namepsace, String path) { diff --git a/patches/minecraft/net/minecraft/tags/FluidTags.java.patch b/patches/minecraft/net/minecraft/tags/FluidTags.java.patch index 4cae59aac5..f6b87402d3 100644 --- a/patches/minecraft/net/minecraft/tags/FluidTags.java.patch +++ b/patches/minecraft/net/minecraft/tags/FluidTags.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/tags/FluidTags.java +++ b/net/minecraft/tags/FluidTags.java -@@ -14,4 +_,12 @@ - private static TagKey create(String p_203851_) { - return TagKey.create(Registries.FLUID, Identifier.withDefaultNamespace(p_203851_)); +@@ -18,4 +_,12 @@ + private static TagKey create(final String name) { + return TagKey.create(Registries.FLUID, Identifier.withDefaultNamespace(name)); } + + public static TagKey create(String namepsace, String path) { diff --git a/patches/minecraft/net/minecraft/tags/GameEventTags.java.patch b/patches/minecraft/net/minecraft/tags/GameEventTags.java.patch index 9650379723..53e30af796 100644 --- a/patches/minecraft/net/minecraft/tags/GameEventTags.java.patch +++ b/patches/minecraft/net/minecraft/tags/GameEventTags.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/tags/GameEventTags.java +++ b/net/minecraft/tags/GameEventTags.java @@ -14,4 +_,12 @@ - private static TagKey create(String p_203853_) { - return TagKey.create(Registries.GAME_EVENT, Identifier.withDefaultNamespace(p_203853_)); + private static TagKey create(final String name) { + return TagKey.create(Registries.GAME_EVENT, Identifier.withDefaultNamespace(name)); } + + public static TagKey create(String namepsace, String path) { diff --git a/patches/minecraft/net/minecraft/tags/InstrumentTags.java.patch b/patches/minecraft/net/minecraft/tags/InstrumentTags.java.patch index 809d68b6b8..f50afdff56 100644 --- a/patches/minecraft/net/minecraft/tags/InstrumentTags.java.patch +++ b/patches/minecraft/net/minecraft/tags/InstrumentTags.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/tags/InstrumentTags.java +++ b/net/minecraft/tags/InstrumentTags.java @@ -12,4 +_,12 @@ - private static TagKey create(String p_215861_) { - return TagKey.create(Registries.INSTRUMENT, Identifier.withDefaultNamespace(p_215861_)); + private static TagKey create(final String name) { + return TagKey.create(Registries.INSTRUMENT, Identifier.withDefaultNamespace(name)); } + + public static TagKey create(String namepsace, String path) { diff --git a/patches/minecraft/net/minecraft/tags/ItemTags.java.patch b/patches/minecraft/net/minecraft/tags/ItemTags.java.patch index acb7871b5e..78eef07590 100644 --- a/patches/minecraft/net/minecraft/tags/ItemTags.java.patch +++ b/patches/minecraft/net/minecraft/tags/ItemTags.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/tags/ItemTags.java +++ b/net/minecraft/tags/ItemTags.java -@@ -210,4 +_,12 @@ - private static TagKey bind(String p_203855_) { - return TagKey.create(Registries.ITEM, Identifier.withDefaultNamespace(p_203855_)); +@@ -219,4 +_,12 @@ + private static TagKey bind(final String name) { + return TagKey.create(Registries.ITEM, Identifier.withDefaultNamespace(name)); } + + public static TagKey create(String namepsace, String path) { diff --git a/patches/minecraft/net/minecraft/tags/PaintingVariantTags.java.patch b/patches/minecraft/net/minecraft/tags/PaintingVariantTags.java.patch index 4074eb74c0..f1c717fea3 100644 --- a/patches/minecraft/net/minecraft/tags/PaintingVariantTags.java.patch +++ b/patches/minecraft/net/minecraft/tags/PaintingVariantTags.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/tags/PaintingVariantTags.java +++ b/net/minecraft/tags/PaintingVariantTags.java @@ -13,4 +_,12 @@ - private static TagKey create(String p_215874_) { - return TagKey.create(Registries.PAINTING_VARIANT, Identifier.withDefaultNamespace(p_215874_)); + private static TagKey create(final String name) { + return TagKey.create(Registries.PAINTING_VARIANT, Identifier.withDefaultNamespace(name)); } + + public static TagKey create(String namepsace, String path) { diff --git a/patches/minecraft/net/minecraft/tags/PoiTypeTags.java.patch b/patches/minecraft/net/minecraft/tags/PoiTypeTags.java.patch index 649fc995b4..cd8d58776b 100644 --- a/patches/minecraft/net/minecraft/tags/PoiTypeTags.java.patch +++ b/patches/minecraft/net/minecraft/tags/PoiTypeTags.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/tags/PoiTypeTags.java +++ b/net/minecraft/tags/PoiTypeTags.java @@ -15,4 +_,12 @@ - private static TagKey create(String p_215881_) { - return TagKey.create(Registries.POINT_OF_INTEREST_TYPE, Identifier.withDefaultNamespace(p_215881_)); + private static TagKey create(final String name) { + return TagKey.create(Registries.POINT_OF_INTEREST_TYPE, Identifier.withDefaultNamespace(name)); } + + public static TagKey create(String namepsace, String path) { diff --git a/patches/minecraft/net/minecraft/tags/StructureTags.java.patch b/patches/minecraft/net/minecraft/tags/StructureTags.java.patch index eb0fcad6c1..6461e1f5ad 100644 --- a/patches/minecraft/net/minecraft/tags/StructureTags.java.patch +++ b/patches/minecraft/net/minecraft/tags/StructureTags.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/tags/StructureTags.java +++ b/net/minecraft/tags/StructureTags.java @@ -29,4 +_,12 @@ - private static TagKey create(String p_215896_) { - return TagKey.create(Registries.STRUCTURE, Identifier.withDefaultNamespace(p_215896_)); + private static TagKey create(final String name) { + return TagKey.create(Registries.STRUCTURE, Identifier.withDefaultNamespace(name)); } + + public static TagKey create(String namepsace, String path) { diff --git a/patches/minecraft/net/minecraft/tags/TagBuilder.java.patch b/patches/minecraft/net/minecraft/tags/TagBuilder.java.patch index 5868bcf216..ccf8244c5b 100644 --- a/patches/minecraft/net/minecraft/tags/TagBuilder.java.patch +++ b/patches/minecraft/net/minecraft/tags/TagBuilder.java.patch @@ -7,17 +7,16 @@ -public class TagBuilder { +public class TagBuilder implements net.minecraftforge.common.extensions.IForgeRawTagBuilder { private final List entries = new ArrayList<>(); + private boolean replace = false; - public static TagBuilder create() { -@@ -34,5 +_,30 @@ +@@ -44,5 +_,18 @@ - public TagBuilder addOptionalTag(Identifier p_458048_) { - return this.add(TagEntry.optionalTag(p_458048_)); + public TagBuilder addOptionalTag(final Identifier id) { + return this.add(TagEntry.optionalTag(id)); + } + + /** Forge: Used for datagen */ + private final List removeEntries = new ArrayList<>(); -+ private boolean replace = false; + + public java.util.stream.Stream getRemoveEntries() { // should this return the List instead? Might end up with mem leaks from unterminated streams otherwise -Paint_Ninja + return this.removeEntries.stream(); @@ -27,16 +26,5 @@ + public TagBuilder remove(TagEntry entry) { + this.removeEntries.add(entry); + return this; -+ } -+ -+ /** Forge: Set the replace property of this tag */ -+ public TagBuilder replace(boolean value) { -+ this.replace = value; -+ return this; -+ } -+ -+ /** Forge: Is this tag set to replace or not? */ -+ public boolean isReplace() { -+ return this.replace; } } diff --git a/patches/minecraft/net/minecraft/tags/TagEntry.java.patch b/patches/minecraft/net/minecraft/tags/TagEntry.java.patch index 6ef8504735..e99dec29b2 100644 --- a/patches/minecraft/net/minecraft/tags/TagEntry.java.patch +++ b/patches/minecraft/net/minecraft/tags/TagEntry.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/tags/TagEntry.java +++ b/net/minecraft/tags/TagEntry.java -@@ -111,6 +_,18 @@ +@@ -108,6 +_,18 @@ return stringbuilder.toString(); } @@ -17,5 +17,5 @@ + } + public interface Lookup { - @Nullable T element(Identifier p_459727_, boolean p_362986_); + @Nullable T element(Identifier key, boolean required); diff --git a/patches/minecraft/net/minecraft/tags/TagFile.java.patch b/patches/minecraft/net/minecraft/tags/TagFile.java.patch index e2cedd49cb..c433a0085c 100644 --- a/patches/minecraft/net/minecraft/tags/TagFile.java.patch +++ b/patches/minecraft/net/minecraft/tags/TagFile.java.patch @@ -1,19 +1,18 @@ --- a/net/minecraft/tags/TagFile.java +++ b/net/minecraft/tags/TagFile.java -@@ -5,12 +_,17 @@ +@@ -5,11 +_,16 @@ import com.mojang.serialization.codecs.RecordCodecBuilder.Instance; import java.util.List; -public record TagFile(List entries, boolean replace) { +public record TagFile(List entries, boolean replace, List remove) { public static final Codec CODEC = RecordCodecBuilder.create( - p_215967_ -> p_215967_.group( - TagEntry.CODEC.listOf().fieldOf("values").forGetter(TagFile::entries), -- Codec.BOOL.optionalFieldOf("replace", false).forGetter(TagFile::replace) -+ Codec.BOOL.optionalFieldOf("replace", false).forGetter(TagFile::replace), + i -> i.group( +- TagEntry.CODEC.listOf().fieldOf("values").forGetter(TagFile::entries), Codec.BOOL.optionalFieldOf("replace", false).forGetter(TagFile::replace) ++ TagEntry.CODEC.listOf().fieldOf("values").forGetter(TagFile::entries), Codec.BOOL.optionalFieldOf("replace", false).forGetter(TagFile::replace), + TagEntry.CODEC.listOf().optionalFieldOf("remove", List.of()).forGetter(TagFile::remove) ) - .apply(p_215967_, TagFile::new) + .apply(i, TagFile::new) ); + + public TagFile(List entries, boolean replace) { diff --git a/patches/minecraft/net/minecraft/tags/TagKey.java.patch b/patches/minecraft/net/minecraft/tags/TagKey.java.patch index 2a7984115b..6d37669408 100644 --- a/patches/minecraft/net/minecraft/tags/TagKey.java.patch +++ b/patches/minecraft/net/minecraft/tags/TagKey.java.patch @@ -1,13 +1,13 @@ --- a/net/minecraft/tags/TagKey.java +++ b/net/minecraft/tags/TagKey.java -@@ -42,6 +_,10 @@ - return (TagKey)VALUES.intern(new TagKey<>(p_203883_, p_451670_)); +@@ -40,6 +_,10 @@ + return (TagKey)VALUES.intern(new TagKey<>(registry, location)); } + public static TagKey create(ResourceKey> registry, String namespace, String path) { + return create(registry, Identifier.fromNamespaceAndPath(namespace, path)); + } + - public boolean isFor(ResourceKey> p_207646_) { - return this.registry == p_207646_; + public boolean isFor(final ResourceKey> registry) { + return this.registry == registry; } diff --git a/patches/minecraft/net/minecraft/tags/TagLoader.java.patch b/patches/minecraft/net/minecraft/tags/TagLoader.java.patch index 6aeaa0e28b..1335999ca2 100644 --- a/patches/minecraft/net/minecraft/tags/TagLoader.java.patch +++ b/patches/minecraft/net/minecraft/tags/TagLoader.java.patch @@ -3,7 +3,7 @@ @@ -64,6 +_,7 @@ String s = resource.sourcePackId(); - tagfile.entries().forEach(p_215997_ -> list.add(new TagLoader.EntryWithSource(p_215997_, s))); + tagfile.entries().forEach(ex -> list.add(new TagLoader.EntryWithSource(ex, s))); + tagfile.remove().forEach(e -> list.add(new TagLoader.EntryWithSource(e, s, true))); } catch (Exception exception) { LOGGER.error("Couldn't read tag list {} from {} in data pack {}", identifier1, identifier, resource.sourcePackId(), exception); @@ -11,14 +11,14 @@ @@ -74,16 +_,17 @@ } - private Either, List> tryBuildTag(TagEntry.Lookup p_215979_, List p_215980_) { + private Either, List> tryBuildTag(final TagEntry.Lookup lookup, final List entries) { - SequencedSet sequencedset = new LinkedHashSet<>(); + var builder = new java.util.LinkedHashSet(); // Order is important, as ImmutableSet is ordered and some people rely on that. https://github.com/MinecraftForge/MinecraftForge/issues/9774 List list = new ArrayList<>(); - for (TagLoader.EntryWithSource tagloader$entrywithsource : p_215980_) { -- if (!tagloader$entrywithsource.entry().build(p_215979_, sequencedset::add)) { -+ if (!tagloader$entrywithsource.entry().build(p_215979_, tagloader$entrywithsource.remove() ? builder::remove : builder::add)) { + for (TagLoader.EntryWithSource tagloader$entrywithsource : entries) { +- if (!tagloader$entrywithsource.entry().build(lookup, sequencedset::add)) { ++ if (!tagloader$entrywithsource.entry().build(lookup, tagloader$entrywithsource.remove() ? builder::remove : builder::add)) { + if (!tagloader$entrywithsource.remove()) // Treat all removals as optional at runtime. If it was missing, then it could of never been added. list.add(tagloader$entrywithsource); } @@ -28,17 +28,17 @@ + return list.isEmpty() ? Either.right(List.copyOf(builder)) : Either.left(list); } - public Map> build(Map> p_203899_) { -@@ -109,7 +_,7 @@ - p_358772_ -> LOGGER.error( + public Map> build(final Map> builders) { +@@ -111,7 +_,7 @@ + missing -> LOGGER.error( "Couldn't load tag {} as it is missing following references: {}", - p_450305_, -- p_358772_.stream().map(Objects::toString).collect(Collectors.joining(", ")) -+ p_358772_.stream().map(Objects::toString).collect(Collectors.joining(", \n\t")) + id, +- missing.stream().map(Objects::toString).collect(Collectors.joining(", ")) ++ missing.stream().map(Objects::toString).collect(Collectors.joining(", \n\t")) ) ) - .ifRight(p_369415_ -> map.put(p_450305_, (List)p_369415_)) -@@ -185,7 +_,11 @@ + .ifRight(tag -> map.put(id, (List)tag)) +@@ -192,7 +_,11 @@ } } diff --git a/patches/minecraft/net/minecraft/tags/WorldPresetTags.java.patch b/patches/minecraft/net/minecraft/tags/WorldPresetTags.java.patch index 891560fe92..fc01a75d1f 100644 --- a/patches/minecraft/net/minecraft/tags/WorldPresetTags.java.patch +++ b/patches/minecraft/net/minecraft/tags/WorldPresetTags.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/tags/WorldPresetTags.java +++ b/net/minecraft/tags/WorldPresetTags.java @@ -14,4 +_,12 @@ - private static TagKey create(String p_216058_) { - return TagKey.create(Registries.WORLD_PRESET, Identifier.withDefaultNamespace(p_216058_)); + private static TagKey create(final String name) { + return TagKey.create(Registries.WORLD_PRESET, Identifier.withDefaultNamespace(name)); } + + public static TagKey create(String namepsace, String path) { diff --git a/patches/minecraft/net/minecraft/util/LightCoordsUtil.java.patch b/patches/minecraft/net/minecraft/util/LightCoordsUtil.java.patch new file mode 100644 index 0000000000..14dce9ae6e --- /dev/null +++ b/patches/minecraft/net/minecraft/util/LightCoordsUtil.java.patch @@ -0,0 +1,11 @@ +--- a/net/minecraft/util/LightCoordsUtil.java ++++ b/net/minecraft/util/LightCoordsUtil.java +@@ -10,7 +_,7 @@ + } + + public static int block(final int packed) { +- return packed >> 4 & 15; ++ return (packed & 0xFFFF) >> 4; // Forge: Fix fullbright quads showing dark artifacts. Reported as MC-169806 + } + + public static int sky(final int packed) { diff --git a/patches/minecraft/net/minecraft/util/SpawnUtil.java.patch b/patches/minecraft/net/minecraft/util/SpawnUtil.java.patch index 11a7ba2411..cd4174cc55 100644 --- a/patches/minecraft/net/minecraft/util/SpawnUtil.java.patch +++ b/patches/minecraft/net/minecraft/util/SpawnUtil.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/util/SpawnUtil.java +++ b/net/minecraft/util/SpawnUtil.java -@@ -45,7 +_,7 @@ +@@ -46,7 +_,7 @@ )) { - T t = (T)p_216404_.create(p_216406_, null, blockpos$mutableblockpos, p_369127_, false, false); + T t = (T)entityType.create(level, null, blockpos$mutableblockpos, spawnReason, false, false); if (t != null) { -- if (t.checkSpawnRules(p_216406_, p_369127_) && t.checkSpawnObstruction(p_216406_)) { -+ if (net.minecraftforge.event.ForgeEventFactory.checkSpawnPosition(t, p_216406_, p_369127_)) { - p_216406_.addFreshEntityWithPassengers(t); +- if (t.checkSpawnRules(level, spawnReason) && t.checkSpawnObstruction(level)) { ++ if (net.minecraftforge.event.ForgeEventFactory.checkSpawnPosition(t, level, spawnReason)) { + level.addFreshEntityWithPassengers(t); t.playAmbientSound(); return Optional.of(t); diff --git a/patches/minecraft/net/minecraft/util/Util.java.patch b/patches/minecraft/net/minecraft/util/Util.java.patch index 37d8763388..4c71772978 100644 --- a/patches/minecraft/net/minecraft/util/Util.java.patch +++ b/patches/minecraft/net/minecraft/util/Util.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/util/Util.java +++ b/net/minecraft/util/Util.java -@@ -268,7 +_,7 @@ +@@ -272,7 +_,7 @@ .getSchema(DataFixUtils.makeKey(SharedConstants.getCurrentVersion().dataVersion().version())) - .getChoiceType(p_457223_, p_460132_); + .getChoiceType(reference, name); } catch (IllegalArgumentException illegalargumentexception) { -- LOGGER.error("No data fixer registered for {}", p_460132_); -+ LOGGER.debug("No data fixer registered for {}", p_460132_); +- LOGGER.error("No data fixer registered for {}", name); ++ LOGGER.debug("No data fixer registered for {}", name); if (SharedConstants.IS_RUNNING_IN_IDE) { throw illegalargumentexception; } diff --git a/patches/minecraft/net/minecraft/util/context/ContextMap.java.patch b/patches/minecraft/net/minecraft/util/context/ContextMap.java.patch index 70f74240d8..72e02cadf8 100644 --- a/patches/minecraft/net/minecraft/util/context/ContextMap.java.patch +++ b/patches/minecraft/net/minecraft/util/context/ContextMap.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/util/context/ContextMap.java +++ b/net/minecraft/util/context/ContextMap.java @@ -37,6 +_,10 @@ - return (T)this.params.getOrDefault(p_368195_, p_368521_); + return (T)this.params.getOrDefault(param, _default); } + public Set> keySet() { diff --git a/patches/minecraft/net/minecraft/util/datafix/fixes/StructuresBecomeConfiguredFix.java.patch b/patches/minecraft/net/minecraft/util/datafix/fixes/StructuresBecomeConfiguredFix.java.patch index 7db9d9934c..fef9c41c15 100644 --- a/patches/minecraft/net/minecraft/util/datafix/fixes/StructuresBecomeConfiguredFix.java.patch +++ b/patches/minecraft/net/minecraft/util/datafix/fixes/StructuresBecomeConfiguredFix.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/util/datafix/fixes/StructuresBecomeConfiguredFix.java +++ b/net/minecraft/util/datafix/fixes/StructuresBecomeConfiguredFix.java -@@ -179,7 +_,17 @@ - String s = p_207725_.asString("UNKNOWN").toLowerCase(Locale.ROOT); +@@ -178,7 +_,16 @@ + String s = dynamicKey.asString("UNKNOWN").toLowerCase(Locale.ROOT); StructuresBecomeConfiguredFix.Conversion structuresbecomeconfiguredfix$conversion = CONVERSION_MAP.get(s); if (structuresbecomeconfiguredfix$conversion == null) { - return null; @@ -9,13 +9,12 @@ + structuresbecomeconfiguredfix$conversion = net.minecraftforge.common.ForgeHooks.getStructureConversion(s); + } + if (structuresbecomeconfiguredfix$conversion == null) { -+ + if (net.minecraftforge.common.ForgeHooks.checkStructureNamespace(s)) { + // Forge: pass-through structure IDs which have a non-"minecraft" namespace -+ return p_329413_.createString(s); ++ return chunk.createString(s); + } + // Forge: Pass-through with "unknown." prefix, so deserializer logs and ignores rather than fixer throwing an exception and dropping chunk data -+ return p_329413_.createString("unknown." + s); ++ return chunk.createString("unknown." + s); } else { String s1 = structuresbecomeconfiguredfix$conversion.fallback; if (!structuresbecomeconfiguredfix$conversion.biomeMapping().isEmpty()) { diff --git a/patches/minecraft/net/minecraft/util/datafix/schemas/V2832.java.patch b/patches/minecraft/net/minecraft/util/datafix/schemas/V2832.java.patch index 755a1e5d2f..280844a0f7 100644 --- a/patches/minecraft/net/minecraft/util/datafix/schemas/V2832.java.patch +++ b/patches/minecraft/net/minecraft/util/datafix/schemas/V2832.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/util/datafix/schemas/V2832.java +++ b/net/minecraft/util/datafix/schemas/V2832.java -@@ -52,7 +_,7 @@ +@@ -54,7 +_,7 @@ DSL.constType(namespacedString()), DSL.fields( "generator", @@ -9,7 +9,7 @@ "type", DSL.string(), ImmutableMap.of( -@@ -97,7 +_,7 @@ +@@ -94,7 +_,7 @@ ) ) ) diff --git a/patches/minecraft/net/minecraft/util/random/WeightedList.java.patch b/patches/minecraft/net/minecraft/util/random/WeightedList.java.patch index 37b93c017d..a5b6de6ba7 100644 --- a/patches/minecraft/net/minecraft/util/random/WeightedList.java.patch +++ b/patches/minecraft/net/minecraft/util/random/WeightedList.java.patch @@ -9,7 +9,7 @@ private static final int FLAT_THRESHOLD = 64; private final int totalWeight; private final List> items; -@@ -132,7 +_,7 @@ +@@ -145,7 +_,7 @@ return 31 * i + this.items.hashCode(); } @@ -17,4 +17,4 @@ + public static class Builder implements net.minecraftforge.common.extensions.IForgeWeightedList.Builder { private final ImmutableList.Builder> result = ImmutableList.builder(); - public WeightedList.Builder add(E p_395636_) { + public WeightedList.Builder add(final E item) { diff --git a/patches/minecraft/net/minecraft/world/clock/ServerClockManager.java.patch b/patches/minecraft/net/minecraft/world/clock/ServerClockManager.java.patch new file mode 100644 index 0000000000..ecf700f126 --- /dev/null +++ b/patches/minecraft/net/minecraft/world/clock/ServerClockManager.java.patch @@ -0,0 +1,15 @@ +--- a/net/minecraft/world/clock/ServerClockManager.java ++++ b/net/minecraft/world/clock/ServerClockManager.java +@@ -97,6 +_,12 @@ + return mutableboolean.booleanValue(); + } + ++ public long getTimeMarker(final Holder clock, final ResourceKey timeMarkerId) { ++ var instance = this.getInstance(clock); ++ var marker = instance.timeMarkers.get(timeMarkerId); ++ return marker == null ? -1 : marker.resolveTimeToMoveTo(instance.totalTicks); ++ } ++ + public void addTicks(final Holder clock, final int ticks) { + this.modifyClock(clock, instance -> instance.totalTicks = Math.max(instance.totalTicks + ticks, 0L)); + } diff --git a/patches/minecraft/net/minecraft/world/effect/MobEffect.java.patch b/patches/minecraft/net/minecraft/world/effect/MobEffect.java.patch index c1d2031c4d..c1d201134c 100644 --- a/patches/minecraft/net/minecraft/world/effect/MobEffect.java.patch +++ b/patches/minecraft/net/minecraft/world/effect/MobEffect.java.patch @@ -11,32 +11,28 @@ public static final StreamCodec> STREAM_CODEC = ByteBufCodecs.holderRegistry(Registries.MOB_EFFECT); private static final int AMBIENT_ALPHA = Mth.floor(38.25F); @@ -58,12 +_,14 @@ - int i = p_358853_.isAmbient() ? AMBIENT_ALPHA : 255; - return ColorParticleOption.create(ParticleTypes.ENTITY_EFFECT, ARGB.color(i, p_19452_)); + int i = effectInstance.isAmbient() ? AMBIENT_ALPHA : 255; + return ColorParticleOption.create(ParticleTypes.ENTITY_EFFECT, ARGB.color(i, color)); }; + initClient(); } - protected MobEffect(MobEffectCategory p_335432_, int p_334901_, ParticleOptions p_331136_) { - this.category = p_335432_; - this.color = p_334901_; - this.particleFactory = p_326745_ -> p_331136_; + protected MobEffect(final MobEffectCategory category, final int color, final ParticleOptions particleOptions) { + this.category = category; + this.color = color; + this.particleFactory = ignored -> particleOptions; + initClient(); } public int getBlendInDurationTicks() { -@@ -202,4 +_,28 @@ - return new AttributeModifier(this.id, this.amount * (p_332230_ + 1), this.operation); +@@ -207,5 +_,23 @@ + public AttributeModifier create(final int amplifier) { + return new AttributeModifier(this.id, this.amount * (amplifier + 1), this.operation); } - } ++ } + -+ // FORGE START + private Object effectRenderer; -+ -+ /* -+ DO NOT CALL, IT WILL DISAPPEAR IN THE FUTURE -+ Call RenderProperties.getEffectRenderer instead -+ */ ++ @org.jetbrains.annotations.ApiStatus.Internal + public Object getEffectRendererInternal() { + return effectRenderer; + } @@ -51,6 +47,5 @@ + } + + public void initializeClient(java.util.function.Consumer consumer) { -+ } -+ // END FORGE + } } diff --git a/patches/minecraft/net/minecraft/world/entity/Entity.java.patch b/patches/minecraft/net/minecraft/world/entity/Entity.java.patch index 4b146d8663..1fdc617ab7 100644 --- a/patches/minecraft/net/minecraft/world/entity/Entity.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/Entity.java.patch @@ -1,15 +1,16 @@ --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -153,7 +_,7 @@ - import org.jspecify.annotations.Nullable; +@@ -160,7 +_,9 @@ import org.slf4j.Logger; --public abstract class Entity implements SyncedDataHolder, DebugValueSource, Nameable, ItemOwner, SlotProvider, EntityAccess, ScoreHolder, DataComponentGetter { -+public abstract class Entity extends net.minecraftforge.common.capabilities.CapabilityProvider.Entities implements SyncedDataHolder, DebugValueSource, Nameable, ItemOwner, SlotProvider, EntityAccess, ScoreHolder, DataComponentGetter, net.minecraftforge.common.extensions.IForgeEntity { - public static final Logger LOGGER = LogUtils.getLogger(); - public static final String TAG_ID = "id"; - public static final String TAG_UUID = "UUID"; -@@ -191,6 +_,7 @@ + public abstract class Entity ++ extends net.minecraftforge.common.capabilities.CapabilityProvider.Entities + implements Nameable, ++ net.minecraftforge.common.extensions.IForgeEntity, + EntityAccess, + ScoreHolder, + SyncedDataHolder, +@@ -206,6 +_,7 @@ private static final int MAX_BLOCK_ITERATIONS_ALONG_TRAVEL_PER_TICK = 16; private static final double MAX_MOVEMENT_RESETTING_TRACE_DISTANCE = 8.0; private static double viewScale = 1.0; @@ -17,26 +18,7 @@ private final EntityType type; private boolean requiresPrecisePosition; private int id = ENTITY_COUNTER.incrementAndGet(); -@@ -233,8 +_,10 @@ - public int tickCount; - private int remainingFireTicks; - protected boolean wasTouchingWater; -+ @Deprecated // Forge: Use forgeFluidTypeHeight instead - protected Object2DoubleMap> fluidHeight = new Object2DoubleArrayMap<>(2); - protected boolean wasEyeInWater; -+ @Deprecated // Forge: Use forgeFluidTypeOnEyes instead - private final Set> fluidOnEyes = new HashSet<>(); - public int invulnerableTime; - protected boolean firstTick = true; -@@ -286,6 +_,7 @@ - private CustomData customData = CustomData.EMPTY; - - public Entity(EntityType p_19870_, Level p_19871_) { -+ super(); - this.type = p_19870_; - this.level = p_19871_; - this.dimensions = p_19870_.getDimensions(); -@@ -305,6 +_,8 @@ +@@ -321,6 +_,8 @@ this.entityData = synchedentitydata$builder.build(); this.setPos(0.0, 0.0, 0.0); this.eyeHeight = this.dimensions.eyeHeight(); @@ -44,16 +26,16 @@ + this.gatherCapabilities(); } - public boolean isColliding(BlockPos p_20040_, BlockState p_20041_) { -@@ -403,6 +_,7 @@ + public boolean isColliding(final BlockPos pos, final BlockState state) { +@@ -424,6 +_,7 @@ - public void remove(Entity.RemovalReason p_146834_) { - this.setRemoved(p_146834_); + public void remove(final Entity.RemovalReason reason) { + this.setRemoved(reason); + this.invalidateCaps(); } public void onClientRemoval() { -@@ -522,7 +_,7 @@ +@@ -543,7 +_,7 @@ } if (this.isInLava()) { @@ -62,44 +44,44 @@ } this.checkBelowWorld(); -@@ -977,9 +_,7 @@ +@@ -999,9 +_,7 @@ return blockpos; } else { BlockState blockstate = this.level().getBlockState(blockpos); -- return (!(p_216987_ <= 0.5) || !blockstate.is(BlockTags.FENCES)) +- return (!(offset <= 0.5) || !blockstate.is(BlockTags.FENCES)) - && !blockstate.is(BlockTags.WALLS) - && !(blockstate.getBlock() instanceof FenceGateBlock) -+ return (!((double)p_216987_ <= 0.5) || !blockstate.collisionExtendsVertically(this.level(), blockpos, this)) - ? blockpos.atY(Mth.floor(this.position.y - p_216987_)) ++ return (!((double)offset <= 0.5) || !blockstate.collisionExtendsVertically(this.level(), blockpos, this)) + ? blockpos.atY(Mth.floor(this.position.y - offset)) : blockpos; } -@@ -1323,19 +_,19 @@ - return !blockstate.is(BlockTags.INSIDE_STEP_SOUND_BLOCKS) && !blockstate.is(BlockTags.COMBINATION_STEP_SOUND_BLOCKS) ? p_278049_ : blockpos; +@@ -1356,19 +_,19 @@ + return !blockstate.is(BlockTags.INSIDE_STEP_SOUND_BLOCKS) && !blockstate.is(BlockTags.COMBINATION_STEP_SOUND_BLOCKS) ? affectingPos : blockpos; } -- protected void playCombinationStepSounds(BlockState p_277472_, BlockState p_277630_) { -- SoundType soundtype = p_277472_.getSoundType(); -+ protected void playCombinationStepSounds(BlockState p_277472_, BlockState p_277630_, BlockPos primaryPos, BlockPos secondaryPos) { -+ SoundType soundtype = p_277472_.getSoundType(this.level(), primaryPos, this); +- protected void playCombinationStepSounds(final BlockState primaryStepSound, final BlockState secondaryStepSound) { +- SoundType soundtype = primaryStepSound.getSoundType(); ++ protected void playCombinationStepSounds(final BlockState primaryStepSound, final BlockState secondaryStepSound, final BlockPos primaryPos, final BlockPos secondaryPos) { ++ SoundType soundtype = primaryStepSound.getSoundType(this.level(), primaryPos, this); this.playSound(soundtype.getStepSound(), soundtype.getVolume() * 0.15F, soundtype.getPitch()); -- this.playMuffledStepSound(p_277630_); -+ this.playMuffledStepSound(p_277630_, secondaryPos); +- this.playMuffledStepSound(secondaryStepSound); ++ this.playMuffledStepSound(secondaryStepSound, secondaryPos); } -- protected void playMuffledStepSound(BlockState p_283110_) { -- SoundType soundtype = p_283110_.getSoundType(); -+ protected void playMuffledStepSound(BlockState p_283110_, BlockPos pos) { -+ SoundType soundtype = p_283110_.getSoundType(this.level(), pos, this); +- protected void playMuffledStepSound(final BlockState blockState) { +- SoundType soundtype = blockState.getSoundType(); ++ protected void playMuffledStepSound(final BlockState blockState, final BlockPos pos) { ++ SoundType soundtype = blockState.getSoundType(this.level(), pos, this); this.playSound(soundtype.getStepSound(), soundtype.getVolume() * 0.05F, soundtype.getPitch() * 0.8F); } - protected void playStepSound(BlockPos p_20135_, BlockState p_20136_) { -- SoundType soundtype = p_20136_.getSoundType(); -+ SoundType soundtype = p_20136_.getSoundType(this.level(), p_20135_, this); + protected void playStepSound(final BlockPos pos, final BlockState blockState) { +- SoundType soundtype = blockState.getSoundType(); ++ SoundType soundtype = blockState.getSoundType(this.level(), pos, this); this.playSound(soundtype.getStepSound(), soundtype.getVolume() * 0.15F, soundtype.getPitch()); } -@@ -1468,6 +_,10 @@ +@@ -1503,6 +_,10 @@ return this.wasTouchingWater; } @@ -110,64 +92,38 @@ boolean isInRain() { BlockPos blockpos = this.blockPosition(); return this.level().isRainingAt(blockpos) -@@ -1506,24 +_,32 @@ +@@ -1541,10 +_,10 @@ public void updateSwimming() { if (this.isSwimming()) { - this.setSwimming(this.isSprinting() && this.isInWater() && !this.isPassenger()); + this.setSwimming(this.isSprinting() && this.isInWaterOrSwimmable() && !this.isPassenger()); } else { -- this.setSwimming(this.isSprinting() && this.isUnderWater() && !this.isPassenger() && this.level().getFluidState(this.blockPosition).is(FluidTags.WATER)); -+ this.setSwimming(this.isSprinting() && (this.isUnderWater() || this.canStartSwimming()) && !this.isPassenger()); + this.setSwimming( +- this.isSprinting() && this.isUnderWater() && !this.isPassenger() && this.level().getFluidState(this.blockPosition).is(FluidTags.WATER) ++ this.isSprinting() && (this.isUnderWater() || this.canStartSwimming()) && !this.isPassenger() + ); } } - - protected boolean updateInWaterStateAndDoFluidPushing() { - this.fluidHeight.clear(); -+ this.forgeFluidTypeHeight.clear(); - this.updateInWaterStateAndDoWaterCurrentPushing(); -- double d0 = this.level.environmentAttributes().getDimensionValue(EnvironmentAttributes.FAST_LAVA) ? 0.007 : 0.0023333333333333335; -- boolean flag = this.updateFluidHeightAndDoFluidPushing(FluidTags.LAVA, d0); -- return this.isInWater() || flag; -+ if (!(this.getVehicle() instanceof AbstractBoat)) { -+ this.fallDistance *= this.forgeFluidTypeHeight.object2DoubleEntrySet().stream().filter(e -> !e.getKey().isAir() && !e.getKey().isVanilla()).map(e -> this.getFluidFallDistanceModifier(e.getKey())).min(Float::compare).orElse(1F); -+ if (this.isInFluidType((fluidType, height) -> !fluidType.isAir() && !fluidType.isVanilla() && this.canFluidExtinguish(fluidType))) this.clearFire(); -+ } -+ return this.isInFluidType(); - } - - void updateInWaterStateAndDoWaterCurrentPushing() { -+ java.util.function.BooleanSupplier updateFluidHeight = () -> this.updateFluidHeightAndDoFluidPushing(FluidTags.WATER, 0.014D); - if (this.getVehicle() instanceof AbstractBoat abstractboat && !abstractboat.isUnderWater()) { -- this.wasTouchingWater = false; -- } else if (this.updateFluidHeightAndDoFluidPushing(FluidTags.WATER, 0.014)) { -+ updateFluidHeight = () -> { -+ this.updateFluidHeightAndDoFluidPushing(state -> this.shouldUpdateFluidWhileBoating(state, abstractboat)); -+ return false; -+ }; -+ } -+ if (updateFluidHeight.getAsBoolean()) { - if (!this.wasTouchingWater && !this.firstTick) { - this.doWaterSplashEffect(); - } -@@ -1538,6 +_,7 @@ - private void updateFluidOnEyes() { - this.wasEyeInWater = this.isEyeInFluid(FluidTags.WATER); - this.fluidOnEyes.clear(); -+ this.forgeFluidTypeOnEyes = net.minecraftforge.common.ForgeMod.EMPTY_TYPE.get(); - double d0 = this.getEyeY(); - if (!( - this.getVehicle() instanceof AbstractBoat abstractboat -@@ -1549,7 +_,7 @@ - FluidState fluidstate = this.level().getFluidState(blockpos); - double d1 = blockpos.getY() + fluidstate.getHeight(this.level(), blockpos); - if (d1 > d0) { -- fluidstate.getTags().forEach(this.fluidOnEyes::add); -+ this.forgeFluidTypeOnEyes = fluidstate.getFluidType(); - } +@@ -1561,16 +_,7 @@ } + + this.wasTouchingWater = flag; +- if (this.isPushedByFluid()) { +- if (flag) { +- this.fluidInteraction.applyCurrentTo(FluidTags.WATER, this, 0.014); +- } +- +- if (flag1) { +- double d0 = this.level.environmentAttributes().getDimensionValue(EnvironmentAttributes.FAST_LAVA) ? 0.007 : 0.0023333333333333335; +- this.fluidInteraction.applyCurrentTo(FluidTags.LAVA, this, d0); +- } +- } ++ this.fluidInteraction.applyCurrentTo(this); + + return flag || flag1; } -@@ -1603,12 +_,13 @@ +@@ -1614,12 +_,13 @@ } public boolean canSpawnSprintParticle() { @@ -182,77 +138,60 @@ if (blockstate.getRenderShape() != RenderShape.INVISIBLE) { Vec3 vec3 = this.getDeltaMovement(); BlockPos blockpos1 = this.blockPosition(); -@@ -1624,7 +_,7 @@ +@@ -1633,7 +_,7 @@ + d1 = Mth.clamp(d1, (double)blockpos.getZ(), blockpos.getZ() + 1.0); + } - this.level() - .addParticle( -- new BlockParticleOption(ParticleTypes.BLOCK, blockstate), -+ new BlockParticleOption(ParticleTypes.BLOCK, blockstate).setPos(blockpos), - d0, - this.getY() + 0.1, - d1, -@@ -1635,12 +_,15 @@ +- this.level().addParticle(new BlockParticleOption(ParticleTypes.BLOCK, blockstate), d0, this.getY() + 0.1, d1, vec3.x * -4.0, 1.5, vec3.z * -4.0); ++ this.level().addParticle(new BlockParticleOption(ParticleTypes.BLOCK, blockstate).setPos(blockpos), d0, this.getY() + 0.1, d1, vec3.x * -4.0, 1.5, vec3.z * -4.0); } } -+ @Deprecated // Forge: Use isEyeInFluidType instead - public boolean isEyeInFluid(TagKey p_204030_) { -+ if (p_204030_ == FluidTags.WATER) return this.isEyeInFluidType(net.minecraftforge.common.ForgeMod.WATER_TYPE.get()); -+ else if (p_204030_ == FluidTags.LAVA) return this.isEyeInFluidType(net.minecraftforge.common.ForgeMod.LAVA_TYPE.get()); - return this.fluidOnEyes.contains(p_204030_); - } - - public boolean isInLava() { -- return !this.firstTick && this.fluidHeight.getDouble(FluidTags.LAVA) > 0.0; -+ return !this.firstTick && this.forgeFluidTypeHeight.getDouble(net.minecraftforge.common.ForgeMod.LAVA_TYPE.get()) > 0.0; - } - - public void moveRelative(float p_19921_, Vec3 p_19922_) { -@@ -2009,6 +_,10 @@ - p_409187_.putBoolean("HasVisualFire", this.hasVisualFire); +@@ -2010,6 +_,10 @@ + output.putBoolean("HasVisualFire", this.hasVisualFire); } -+ p_409187_.putBoolean("CanUpdate", canUpdate); -+ p_409187_.storeNullable("ForgeCaps", net.minecraft.nbt.CompoundTag.CODEC, serializeCaps(this.registryAccess())); -+ p_409187_.storeNullable("ForgeData", net.minecraft.nbt.CompoundTag.CODEC, persistentData); ++ output.putBoolean("CanUpdate", canUpdate); ++ output.storeNullable("ForgeCaps", net.minecraft.nbt.CompoundTag.CODEC, serializeCaps(this.registryAccess())); ++ output.storeNullable("ForgeData", net.minecraft.nbt.CompoundTag.CODEC, persistentData); + if (!this.tags.isEmpty()) { - p_409187_.store("Tags", TAG_LIST_CODEC, List.copyOf(this.tags)); + output.store("Tags", TAG_LIST_CODEC, List.copyOf(this.tags)); } -@@ -2084,6 +_,9 @@ - this.setGlowingTag(p_408698_.getBooleanOr("Glowing", false)); - this.setTicksFrozen(p_408698_.getIntOr("TicksFrozen", 0)); - this.hasVisualFire = p_408698_.getBooleanOr("HasVisualFire", false); -+ this.canUpdate(p_408698_.getBooleanOr("CanUpdate", true)); -+ this.persistentData = p_408698_.read("ForgeData", net.minecraft.nbt.CompoundTag.CODEC).orElse(null); -+ p_408698_.read("ForgeCaps", net.minecraft.nbt.CompoundTag.CODEC).ifPresent(caps -> this.deserializeCaps(this.registryAccess(), caps)); - this.customData = p_408698_.read("data", CustomData.CODEC).orElse(CustomData.EMPTY); +@@ -2077,6 +_,9 @@ + this.setGlowingTag(input.getBooleanOr("Glowing", false)); + this.setTicksFrozen(input.getIntOr("TicksFrozen", 0)); + this.hasVisualFire = input.getBooleanOr("HasVisualFire", false); ++ this.canUpdate(input.getBooleanOr("CanUpdate", true)); ++ this.persistentData = input.read("ForgeData", net.minecraft.nbt.CompoundTag.CODEC).orElse(null); ++ input.read("ForgeCaps", net.minecraft.nbt.CompoundTag.CODEC).ifPresent(caps -> this.deserializeCaps(this.registryAccess(), caps)); + this.customData = input.read("data", CustomData.CODEC).orElse(CustomData.EMPTY); this.tags.clear(); - p_408698_.read("Tags", TAG_LIST_CODEC).ifPresent(this.tags::addAll); -@@ -2132,6 +_,8 @@ - p_409579_, this.getX() + p_408228_.x, this.getY() + p_408228_.y, this.getZ() + p_408228_.z, p_407826_ - ); + input.read("Tags", TAG_LIST_CODEC).ifPresent(this.tags::addAll); +@@ -2126,6 +_,8 @@ + } else { + ItemEntity itementity = new ItemEntity(level, this.getX() + offset.x, this.getY() + offset.y, this.getZ() + offset.z, itemStack); itementity.setDefaultPickUpDelay(); + if (captureDrops() != null) captureDrops().add(itementity); + else - p_409579_.addFreshEntity(itementity); + level.addFreshEntity(itementity); return itementity; } -@@ -2190,11 +_,11 @@ +@@ -2184,11 +_,11 @@ } - ItemStack itemstack = p_19978_.getItemInHand(p_19979_); -- if (itemstack.is(Items.SHEARS) && this.shearOffAllLeashConnections(p_19978_)) { -+ if (itemstack.canPerformAction(net.minecraftforge.common.ToolActions.SHEARS_HARVEST) && this.shearOffAllLeashConnections(p_19978_)) { - itemstack.hurtAndBreak(1, p_19978_, p_19979_); + ItemStack itemstack = player.getItemInHand(hand); +- if (itemstack.is(Items.SHEARS) && this.shearOffAllLeashConnections(player)) { ++ if (itemstack.canPerformAction(net.minecraftforge.common.ToolActions.SHEARS_HARVEST) && this.shearOffAllLeashConnections(player)) { + itemstack.hurtAndBreak(1, player, hand); return InteractionResult.SUCCESS; } else if (this instanceof Mob mob - && itemstack.is(Items.SHEARS) + && itemstack.canPerformAction(net.minecraftforge.common.ToolActions.SHEARS_HARVEST) - && mob.canShearEquipment(p_19978_) - && !p_19978_.isSecondaryUseActive() - && this.attemptToShearEquipment(p_19978_, p_19979_, itemstack, mob)) { -@@ -2302,6 +_,7 @@ + && mob.canShearEquipment(player) + && !player.isSecondaryUseActive() + && this.attemptToShearEquipment(player, hand, itemstack, mob)) { +@@ -2296,6 +_,7 @@ public void rideTick() { this.setDeltaMovement(Vec3.ZERO); @@ -260,15 +199,15 @@ this.tick(); if (this.isPassenger()) { this.getVehicle().positionRider(this); -@@ -2362,6 +_,7 @@ +@@ -2356,6 +_,7 @@ } } -+ if (!net.minecraftforge.event.ForgeEventFactory.canMountEntity(this, p_19966_, true)) return false; - if (p_19967_ || this.canRide(p_19966_) && p_19966_.canAddPassenger(this)) { ++ if (!net.minecraftforge.event.ForgeEventFactory.canMountEntity(this, entityToRide, true)) return false; + if (force || this.canRide(entityToRide) && entityToRide.canAddPassenger(this)) { if (this.isPassenger()) { this.stopRiding(); -@@ -2397,6 +_,7 @@ +@@ -2391,6 +_,7 @@ public void removeVehicle() { if (this.vehicle != null) { Entity entity = this.vehicle; @@ -276,7 +215,7 @@ this.vehicle = null; entity.removePassenger(this); Entity.RemovalReason entity$removalreason = this.getRemovalReason(); -@@ -2447,6 +_,8 @@ +@@ -2441,6 +_,8 @@ return this.passengers.isEmpty(); } @@ -285,7 +224,7 @@ protected boolean couldAcceptPassenger() { return true; } -@@ -2646,7 +_,7 @@ +@@ -2638,7 +_,7 @@ } public boolean isVisuallyCrawling() { @@ -293,17 +232,17 @@ + return this.isVisuallySwimming() && !this.isInWaterOrSwimmable(); } - public void setSwimming(boolean p_20283_) { -@@ -2762,7 +_,7 @@ + public void setSwimming(final boolean swimming) { +@@ -2754,7 +_,7 @@ this.igniteForSeconds(8.0F); } -- this.hurtServer(p_19927_, this.damageSources().lightningBolt(), 5.0F); -+ this.hurtServer(p_19927_, this.damageSources().lightningBolt(), p_19928_.getDamage()); +- this.hurtServer(level, this.damageSources().lightningBolt(), 5.0F); ++ this.hurtServer(level, this.damageSources().lightningBolt(), lightningBolt.getDamage()); } - public void onAboveBubbleColumn(boolean p_392709_, BlockPos p_391902_) { -@@ -2895,7 +_,7 @@ + public void onAboveBubbleColumn(final boolean dragDown, final BlockPos pos) { +@@ -2881,7 +_,7 @@ } protected Component getTypeName() { @@ -311,147 +250,50 @@ + return this.getType().getDescription(); // Forge: Use getter to allow overriding by mods; } - public boolean is(Entity p_20356_) { -@@ -3206,6 +_,7 @@ + public boolean is(final Entity other) { +@@ -3191,6 +_,7 @@ return this.stringUUID; } -+ @Deprecated // Forge: Use FluidType sensitive version ++ @Deprecated // Forge: Use FluidTag sensitive version public boolean isPushedByFluid() { return true; } -@@ -3594,9 +_,26 @@ - return Mth.lerp(p_344421_, this.yRotO, this.yRot); +@@ -3597,6 +_,10 @@ + return this.fluidInteraction.getFluidHeight(type); } -+ @Deprecated // Forge: Use predicate version instead, only for vanilla Tags - public boolean updateFluidHeightAndDoFluidPushing(TagKey p_204032_, double p_204033_) { -+ this.updateFluidHeightAndDoFluidPushing(com.google.common.base.Predicates.alwaysTrue()); -+ if(p_204032_ == FluidTags.WATER) return this.isInFluidType(net.minecraftforge.common.ForgeMod.WATER_TYPE.get()); -+ else if (p_204032_ == FluidTags.LAVA) return this.isInFluidType(net.minecraftforge.common.ForgeMod.LAVA_TYPE.get()); -+ else return false; ++ public EntityFluidInteraction getFluidInteraction() { ++ return this.fluidInteraction; + } + -+ private static final class FluidCalcs { -+ double height = 0.0D; -+ Vec3 direction = Vec3.ZERO; -+ int count = 0; -+ double height(double height) { -+ return (this.height = this.height >= height ? this.height : height); -+ } -+ } -+ -+ public void updateFluidHeightAndDoFluidPushing(Predicate shouldUpdate) { - if (this.touchingUnloadedChunk()) { -- return false; -+ return; - } else { - AABB aabb = this.getBoundingBox().deflate(0.001); - int i = Mth.floor(aabb.minX); -@@ -3608,28 +_,32 @@ - double d0 = 0.0; - boolean flag = this.isPushedByFluid(); - boolean flag1 = false; -- Vec3 vec3 = Vec3.ZERO; -- int k1 = 0; - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); -+ it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap fluidPushCalcs = null; - - for (int l1 = i; l1 < j; l1++) { - for (int i2 = k; i2 < l; i2++) { - for (int j2 = i1; j2 < j1; j2++) { - blockpos$mutableblockpos.set(l1, i2, j2); - FluidState fluidstate = this.level().getFluidState(blockpos$mutableblockpos); -- if (fluidstate.is(p_204032_)) { -+ net.minecraftforge.fluids.FluidType fluidType = fluidstate.getFluidType(); -+ if (!fluidType.isAir() && shouldUpdate.test(fluidstate)) { - double d1 = i2 + fluidstate.getHeight(this.level(), blockpos$mutableblockpos); - if (d1 >= aabb.minY) { - flag1 = true; -- d0 = Math.max(d1 - aabb.minY, d0); -+ if (fluidPushCalcs == null) -+ fluidPushCalcs = new it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap(2); -+ var interim = fluidPushCalcs.computeIfAbsent(fluidType, type -> new FluidCalcs()); -+ d0 = interim.height(d1 - aabb.minY); -+ flag = this.isPushedByFluid(fluidType); - if (flag) { - Vec3 vec31 = fluidstate.getFlow(this.level(), blockpos$mutableblockpos); - if (d0 < 0.4) { - vec31 = vec31.scale(d0); - } - -- vec3 = vec3.add(vec31); -- k1++; -+ interim.direction = interim.direction.add(vec31); -+ interim.count++; - } - } - } -@@ -3637,6 +_,10 @@ - } - } - -+ if (fluidPushCalcs == null) return; -+ for (var entry : fluidPushCalcs.entrySet()) { -+ var vec3 = entry.getValue().direction; -+ var k1 = entry.getValue().count; - if (vec3.length() > 0.0) { - if (k1 > 0) { - vec3 = vec3.scale(1.0 / k1); -@@ -3647,6 +_,7 @@ - } - - Vec3 vec32 = this.getDeltaMovement(); -+ var p_204033_ = this.getFluidMotionScale(entry.getKey()); - vec3 = vec3.scale(p_204033_); - double d2 = 0.003; - if (Math.abs(vec32.x) < 0.003 && Math.abs(vec32.z) < 0.003 && vec3.length() < 0.0045000000000000005) { -@@ -3656,8 +_,8 @@ - this.setDeltaMovement(this.getDeltaMovement().add(vec3)); - } - -- this.fluidHeight.put(p_204032_, d0); -- return flag1; -+ this.setFluidTypeHeight(entry.getKey(), entry.getValue().height); -+ } - } + public double getFluidJumpThreshold() { + return this.getEyeHeight() < 0.4 ? 0.0 : 0.4; } - -@@ -3670,7 +_,10 @@ - return !this.level().hasChunksAt(i, k, j, l); - } - -+ @Deprecated // Forge: Use getFluidTypeHeight instead - public double getFluidHeight(TagKey p_204037_) { -+ if (p_204037_ == FluidTags.WATER) return getFluidTypeHeight(net.minecraftforge.common.ForgeMod.WATER_TYPE.get()); -+ else if (p_204037_ == FluidTags.LAVA) return getFluidTypeHeight(net.minecraftforge.common.ForgeMod.LAVA_TYPE.get()); - return this.fluidHeight.getDouble(p_204037_); - } - -@@ -3686,7 +_,9 @@ +@@ -3609,7 +_,9 @@ return this.dimensions.height(); } + private boolean hasExtraSpawnData = this instanceof net.minecraftforge.entity.IEntityAdditionalSpawnData; - public Packet getAddEntityPacket(ServerEntity p_344981_) { + public Packet getAddEntityPacket(final ServerEntity serverEntity) { + if (hasExtraSpawnData) return net.minecraftforge.common.ForgeHooks.getEntitySpawnPacket(this); - return new ClientboundAddEntityPacket(this, p_344981_); + return new ClientboundAddEntityPacket(this, serverEntity); } -@@ -3821,6 +_,11 @@ +@@ -3748,6 +_,11 @@ } } } + + // Forge - ensure target chunk is loaded. -+ if (this.isAddedToWorld() && !this.level.isClientSide() && !this.isRemoved()) { -+ this.level.getChunk((int) Math.floor(p_20344_) >> 4, (int) Math.floor(p_20346_) >> 4); ++ if (this.isAddedToLevel() && !this.level.isClientSide() && !this.isRemoved()) { ++ this.level.getChunk((int)Math.floor(x) >> 4, (int)Math.floor(z) >> 4); + } } public void checkDespawn() { -@@ -3993,6 +_,100 @@ - float f1 = (float)Mth.lerp(d0, this.getXRot(), p_298926_); +@@ -3922,6 +_,83 @@ + float f1 = (float)Mth.lerp(d0, (double)this.getXRot(), targetXRot); this.setPos(d1, d2, d3); this.setRot(f, f1); + } @@ -490,7 +332,7 @@ + + @Override + public boolean canTrample(ServerLevel level, BlockState state, BlockPos pos, double fallDistance) { -+ return level.random.nextFloat() < fallDistance - 0.5F ++ return level.getRandom().nextFloat() < fallDistance - 0.5F + && this instanceof LivingEntity + && (this instanceof Player || net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(level, this)) + && this.getBbWidth() * this.getBbWidth() * this.getBbHeight() > 0.512F; @@ -504,13 +346,13 @@ + private boolean isAddedToWorld; + + @Override -+ public final boolean isAddedToWorld() { return this.isAddedToWorld; } ++ public final boolean isAddedToLevel() { return this.isAddedToWorld; } + + @Override -+ public void onAddedToWorld() { this.isAddedToWorld = true; } ++ public void onAddedToLevel() { this.isAddedToWorld = true; } + + @Override -+ public void onRemovedFromWorld() { this.isAddedToWorld = false; } ++ public void onRemovedFromLevel() { this.isAddedToWorld = false; } + + @Override + public void revive() { @@ -518,36 +360,19 @@ + this.reviveCaps(); + } + -+ protected Object2DoubleMap forgeFluidTypeHeight = new Object2DoubleArrayMap<>(net.minecraftforge.fluids.FluidType.SIZE.get()); -+ private net.minecraftforge.fluids.FluidType forgeFluidTypeOnEyes = net.minecraftforge.common.ForgeMod.EMPTY_TYPE.get(); -+ protected final void setFluidTypeHeight(net.minecraftforge.fluids.FluidType type, double height) { -+ this.forgeFluidTypeHeight.put(type, height); -+ } -+ + @Override -+ public final double getFluidTypeHeight(net.minecraftforge.fluids.FluidType type) { -+ return this.forgeFluidTypeHeight.getDouble(type); -+ } -+ -+ @Override -+ public final boolean isInFluidType(java.util.function.BiPredicate predicate, boolean forAllTypes) { -+ return forAllTypes ? this.forgeFluidTypeHeight.object2DoubleEntrySet().stream().allMatch(e -> predicate.test(e.getKey(), e.getDoubleValue())) -+ : this.forgeFluidTypeHeight.object2DoubleEntrySet().stream().anyMatch(e -> predicate.test(e.getKey(), e.getDoubleValue())); -+ } -+ -+ @Override -+ public final boolean isInFluidType() { -+ return this.forgeFluidTypeHeight.size() > 0; ++ public boolean isInFluidType() { ++ return this.fluidInteraction.isInFluid(); + } + + @Override + public final net.minecraftforge.fluids.FluidType getEyeInFluidType() { -+ return forgeFluidTypeOnEyes; ++ return this.fluidInteraction.getEyeFluid(); + } + + @Override -+ public net.minecraftforge.fluids.FluidType getMaxHeightFluidType() { -+ return this.forgeFluidTypeHeight.object2DoubleEntrySet().stream().max(java.util.Comparator.comparingDouble(Object2DoubleMap.Entry::getDoubleValue)).map(Object2DoubleMap.Entry::getKey).orElseGet(net.minecraftforge.common.ForgeMod.EMPTY_TYPE); ++ public final boolean isInFluidType(java.util.function.BiPredicate predicate, boolean forAllTypes) { ++ return this.fluidInteraction.isInFluid(predicate, forAllTypes); } public RandomSource getRandom() { diff --git a/patches/minecraft/net/minecraft/world/entity/EntityEquipment.java.patch b/patches/minecraft/net/minecraft/world/entity/EntityEquipment.java.patch index 09f8a9cd02..e958dcde14 100644 --- a/patches/minecraft/net/minecraft/world/entity/EntityEquipment.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/EntityEquipment.java.patch @@ -4,15 +4,15 @@ for (Entry entry : this.items.entrySet()) { ItemStack itemstack = entry.getValue(); if (!itemstack.isEmpty()) { -- itemstack.inventoryTick(p_394224_.level(), p_394224_, entry.getKey()); -+ itemstack.inventoryTick(p_394224_.level(), p_394224_, entry.getKey(), -1); +- itemstack.inventoryTick(owner.level(), owner, entry.getKey()); ++ itemstack.inventoryTick(owner.level(), owner, entry.getKey(), -1); } } } @@ -69,5 +_,9 @@ public void clear() { - this.items.replaceAll((p_393205_, p_394162_) -> ItemStack.EMPTY); + this.items.replaceAll((s, v) -> ItemStack.EMPTY); + } + + public int size() { diff --git a/patches/minecraft/net/minecraft/world/entity/EntityFluidInteraction.java.patch b/patches/minecraft/net/minecraft/world/entity/EntityFluidInteraction.java.patch new file mode 100644 index 0000000000..547a540d04 --- /dev/null +++ b/patches/minecraft/net/minecraft/world/entity/EntityFluidInteraction.java.patch @@ -0,0 +1,179 @@ +--- a/net/minecraft/world/entity/EntityFluidInteraction.java ++++ b/net/minecraft/world/entity/EntityFluidInteraction.java +@@ -21,16 +_,39 @@ + import org.jspecify.annotations.Nullable; + + public class EntityFluidInteraction { ++ private static final Map, java.util.function.Supplier> MODDED_TYPES = new java.util.HashMap<>(); ++ public static void register(final TagKey fluid) { ++ register(fluid, EntityFluidInteraction.Tracker::new); ++ } ++ public static void register(final TagKey fluid, final java.util.function.Supplier factory) { ++ register(fluid, factory); ++ } ++ + private final Map, EntityFluidInteraction.Tracker> trackerByFluid = new Reference2ObjectArrayMap<>(); ++ private final Map trackerByFluidType = new Reference2ObjectArrayMap(); ++ private boolean isInFluid = false; ++ private net.minecraftforge.fluids.FluidType eyeFluid = net.minecraftforge.common.ForgeMod.EMPTY_TYPE.get(); + + public EntityFluidInteraction(final Set> fluids) { + for (TagKey tagkey : fluids) { + this.trackerByFluid.put(tagkey, new EntityFluidInteraction.Tracker()); + } ++ for (var entry : MODDED_TYPES.entrySet()) { ++ if (!fluids.contains(entry.getKey())) ++ this.trackerByFluid.put(entry.getKey(), entry.getValue().get()); ++ } ++ } ++ ++ public EntityFluidInteraction.@Nullable Tracker getTracker(final TagKey fluid) { ++ return this.trackerByFluid.get(fluid); + } + + public void update(final Entity entity, final boolean ignoreCurrent) { + this.trackerByFluid.values().forEach(EntityFluidInteraction.Tracker::reset); ++ this.trackerByFluidType.values().forEach(EntityFluidInteraction.Tracker::reset); ++ this.isInFluid = false; ++ this.eyeFluid = net.minecraftforge.common.ForgeMod.EMPTY_TYPE.get(); ++ + AABB aabb = entity.getFluidInteractionBox(); + if (aabb != null) { + int i = Mth.floor(aabb.minX); +@@ -45,7 +_,7 @@ + double d1 = entity.getEyeY(); + int l1 = entity.getBlockZ(); + Fluid fluid = null; +- EntityFluidInteraction.Tracker entityfluidinteraction$tracker = null; ++ EntityFluidInteraction.Tracker[] trackers = null; + BlockGetter blockgetter = entity.level(); + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + +@@ -55,23 +_,26 @@ + blockpos$mutableblockpos.set(i2, j2, k2); + FluidState fluidstate = blockgetter.getFluidState(blockpos$mutableblockpos); + if (!fluidstate.isEmpty()) { ++ isInFluid = true; + double d2 = blockpos$mutableblockpos.getY(); + double d3 = d2 + fluidstate.getHeight(blockgetter, blockpos$mutableblockpos); + if (!(d3 < aabb.minY)) { + Fluid fluid1 = fluidstate.getType(); + if (fluid1 != fluid) { + fluid = fluid1; +- entityfluidinteraction$tracker = this.getTrackerFor(fluid1); ++ trackers = this.getTrackersFor(fluid1); + } + +- if (entityfluidinteraction$tracker != null) { ++ for (var entityfluidinteraction$tracker : trackers) { + if (i2 == k1 && k2 == l1 && d1 >= d2 && d1 <= d3) { + entityfluidinteraction$tracker.eyesInside = true; ++ this.eyeFluid = fluid.getFluidType(); + } + + entityfluidinteraction$tracker.height = Math.max(d3 - d0, entityfluidinteraction$tracker.height); +- if (!ignoreCurrent) { +- Vec3 vec3 = fluidstate.getFlow(blockgetter, blockpos$mutableblockpos); ++ if (!ignoreCurrent || !fluidstate.getType().getFluidType().canPushEntity(entity)) { ++ Vec3 vec3 = fluidstate.getFlow(blockgetter, blockpos$mutableblockpos, entity); ++ + if (entityfluidinteraction$tracker.height < 0.4) { + vec3 = vec3.scale(entityfluidinteraction$tracker.height); + } +@@ -118,15 +_,27 @@ + return flag; + } + +- private EntityFluidInteraction.@Nullable Tracker getTrackerFor(final Fluid fluid) { ++ private final EntityFluidInteraction.Tracker[] NONE = new EntityFluidInteraction.Tracker[0]; ++ ++ private EntityFluidInteraction.@Nullable Tracker[] getTrackersFor(final Fluid fluid) { ++ var ret = new java.util.ArrayList(1); + for (Entry, EntityFluidInteraction.Tracker> entry : this.trackerByFluid.entrySet()) { + TagKey tagkey = entry.getKey(); + if (fluid.is(tagkey)) { +- return entry.getValue(); ++ ret.add(entry.getValue()); + } + } + +- return null; ++ ret.add(this.trackerByFluidType.computeIfAbsent(fluid.getFluidType(), k -> new EntityFluidInteraction.Tracker())); ++ return ret.isEmpty() ? NONE : ret.toArray(EntityFluidInteraction.Tracker[]::new); ++ } ++ ++ public void applyCurrentTo(final Entity entity) { ++ for (var entry : this.trackerByFluidType.entrySet()) { ++ if (!entity.isPushedByFluid(entry.getKey())) ++ continue; ++ entry.getValue().applyCurrentTo(entity, entity.getFluidMotionScale(entry.getKey())); ++ } + } + + public void applyCurrentTo(final TagKey fluid, final Entity entity, final double scale) { +@@ -141,6 +_,19 @@ + return entityfluidinteraction$tracker != null ? entityfluidinteraction$tracker.height : 0.0; + } + ++ public double getFluidHeight(final Fluid fluid) { ++ return getFluidHeight(fluid.getFluidType()); ++ } ++ ++ public double getFluidHeight(final net.minecraftforge.fluids.FluidType fluid) { ++ var tracker = this.trackerByFluidType.get(fluid); ++ return tracker == null ? 0 : tracker.height; ++ } ++ ++ public boolean isInFluid() { ++ return this.isInFluid; ++ } ++ + public boolean isInFluid(final TagKey fluid) { + return this.getFluidHeight(fluid) > 0.0; + } +@@ -148,6 +_,45 @@ + public boolean isEyeInFluid(final TagKey fluid) { + EntityFluidInteraction.Tracker entityfluidinteraction$tracker = this.trackerByFluid.get(fluid); + return entityfluidinteraction$tracker != null && entityfluidinteraction$tracker.eyesInside; ++ } ++ ++ public boolean isEyeInFluid(final Fluid fluid) { ++ return isEyeInFluid(fluid.getFluidType()); ++ } ++ ++ public boolean isEyeInFluid(final net.minecraftforge.fluids.FluidType fluid) { ++ var tracker = this.trackerByFluidType.get(fluid); ++ return tracker != null && tracker.eyesInside; ++ } ++ ++ public net.minecraftforge.fluids.FluidType getEyeFluid() { ++ return this.eyeFluid; ++ } ++ ++ public net.minecraftforge.fluids.FluidType getMaxHeightFluid() { ++ var ret = net.minecraftforge.common.ForgeMod.EMPTY_TYPE.get(); ++ double height = 0; ++ EntityFluidInteraction.Tracker max = null; ++ for (var entry : this.trackerByFluidType.entrySet()) { ++ if (entry.getValue().height > height) { ++ height = entry.getValue().height; ++ ret = entry.getKey(); ++ } ++ } ++ return ret; ++ } ++ ++ public final boolean isInFluid(java.util.function.BiPredicate predicate, boolean forAllTypes) { ++ boolean match = false; ++ for (var entry : this.trackerByFluidType.entrySet()) { ++ if (predicate.test(entry.getKey(), entry.getValue().height)) { ++ match = true; ++ if (!forAllTypes) ++ return true; ++ } else if (forAllTypes) ++ return false; ++ } ++ return match; + } + + private static class Tracker { diff --git a/patches/minecraft/net/minecraft/world/entity/EntityType.java.patch b/patches/minecraft/net/minecraft/world/entity/EntityType.java.patch index 860403373e..5e8f236b2f 100644 --- a/patches/minecraft/net/minecraft/world/entity/EntityType.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/EntityType.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/EntityType.java +++ b/net/minecraft/world/entity/EntityType.java -@@ -979,6 +_,11 @@ +@@ -1225,6 +_,11 @@ private final FeatureFlagSet requiredFeatures; private final boolean allowedInPeaceful; @@ -9,23 +9,23 @@ + private final java.util.function.ToIntFunction> updateIntervalSupplier; + private final java.util.function.BiFunction customClientFactory; + - private static EntityType register(ResourceKey> p_368406_, EntityType.Builder p_363129_) { - return Registry.register(BuiltInRegistries.ENTITY_TYPE, p_368406_, p_363129_.build(p_368406_)); + private static EntityType register(final ResourceKey> id, final EntityType.Builder builder) { + return Registry.register(BuiltInRegistries.ENTITY_TYPE, id, builder.build(id)); } -@@ -1014,7 +_,8 @@ - String p_367006_, - Optional> p_364691_, - FeatureFlagSet p_273518_, -- boolean p_430684_ -+ boolean p_430684_, -+ Builder builder +@@ -1260,7 +_,8 @@ + final String descriptionId, + final Optional> lootTable, + final FeatureFlagSet requiredFeatures, +- final boolean allowedInPeaceful ++ final boolean allowedInPeaceful, ++ final Builder builder ) { - this.factory = p_273268_; - this.category = p_272918_; -@@ -1031,6 +_,10 @@ - this.lootTable = p_364691_; - this.requiredFeatures = p_273518_; - this.allowedInPeaceful = p_430684_; + this.factory = factory; + this.category = category; +@@ -1277,6 +_,10 @@ + this.lootTable = lootTable; + this.requiredFeatures = requiredFeatures; + this.allowedInPeaceful = allowedInPeaceful; + this.velocityUpdateSupplier = builder == null || builder.velocityUpdateSupplier == null ? EntityType::defaultVelocitySupplier : builder.velocityUpdateSupplier; + this.trackingRangeSupplier = builder == null || builder.trackingRangeSupplier == null ? EntityType::defaultTrackingRangeSupplier : builder.trackingRangeSupplier; + this.updateIntervalSupplier = builder == null || builder.updateIntervalSupplier == null ? EntityType::defaultUpdateIntervalSupplier : builder.updateIntervalSupplier; @@ -33,7 +33,7 @@ } public @Nullable T spawn( -@@ -1325,14 +_,26 @@ +@@ -1580,14 +_,26 @@ } public int clientTrackingRange() { @@ -60,7 +60,7 @@ return this != PLAYER && this != LLAMA_SPIT && this != WITHER -@@ -1391,6 +_,12 @@ +@@ -1638,6 +_,15 @@ return OP_ONLY_CUSTOM_DATA.contains(this); } @@ -68,23 +68,26 @@ + if (customClientFactory == null) return this.create(world, EntitySpawnReason.LOAD); + return customClientFactory.apply(packet, world); + } -+ public Stream>> getTags() {return this.builtInRegistryHolder().tags();} ++ ++ public Stream>> getTags() { ++ return this.builtInRegistryHolder().tags(); ++ } + public static class Builder { private final EntityType.EntityFactory factory; private final MobCategory category; -@@ -1410,6 +_,10 @@ +@@ -1657,6 +_,10 @@ ); - private final DependantName, String> descriptionId = p_449414_ -> Util.makeDescriptionId("entity", p_449414_.identifier()); + private final DependantName, String> descriptionId = id -> Util.makeDescriptionId("entity", id.identifier()); private boolean allowedInPeaceful = true; + private java.util.function.Predicate> velocityUpdateSupplier = EntityType::defaultVelocitySupplier; + private java.util.function.ToIntFunction> trackingRangeSupplier = EntityType::defaultTrackingRangeSupplier; + private java.util.function.ToIntFunction> updateIntervalSupplier = EntityType::defaultUpdateIntervalSupplier; + private java.util.function.BiFunction customClientFactory; - private Builder(EntityType.EntityFactory p_20696_, MobCategory p_20697_) { - this.factory = p_20696_; -@@ -1528,6 +_,30 @@ + private Builder(final EntityType.EntityFactory factory, final MobCategory category) { + this.factory = factory; +@@ -1775,6 +_,30 @@ return this; } @@ -112,12 +115,12 @@ + return this; + } + - public EntityType build(ResourceKey> p_369693_) { + public EntityType build(final ResourceKey> name) { if (this.serialize) { - Util.fetchChoiceType(References.ENTITY_TREE, p_369693_.identifier().toString()); -@@ -1548,7 +_,8 @@ - this.descriptionId.get(p_369693_), - this.lootTable.get(p_369693_), + Util.fetchChoiceType(References.ENTITY_TREE, name.identifier().toString()); +@@ -1795,7 +_,8 @@ + this.descriptionId.get(name), + this.lootTable.get(name), this.requiredFeatures, - this.allowedInPeaceful + this.allowedInPeaceful, diff --git a/patches/minecraft/net/minecraft/world/entity/ExperienceOrb.java.patch b/patches/minecraft/net/minecraft/world/entity/ExperienceOrb.java.patch index cb00ebf379..321b0c38dc 100644 --- a/patches/minecraft/net/minecraft/world/entity/ExperienceOrb.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/ExperienceOrb.java.patch @@ -11,10 +11,10 @@ this.setDeltaMovement(this.getDeltaMovement().scale(f)); @@ -278,6 +_,7 @@ - public void playerTouch(Player p_20792_) { - if (p_20792_ instanceof ServerPlayer serverplayer) { - if (p_20792_.takeXpDelay == 0) { -+ if (net.minecraftforge.event.ForgeEventFactory.onPlayerPickupXp(p_20792_, this)) return; - p_20792_.takeXpDelay = 2; - p_20792_.take(this, 1); + public void playerTouch(final Player player) { + if (player instanceof ServerPlayer serverplayer) { + if (player.takeXpDelay == 0) { ++ if (net.minecraftforge.event.ForgeEventFactory.onPlayerPickupXp(player, this)) return; + player.takeXpDelay = 2; + player.take(this, 1); int i = this.repairPlayerItems(serverplayer, this.getValue()); diff --git a/patches/minecraft/net/minecraft/world/entity/Leashable.java.patch b/patches/minecraft/net/minecraft/world/entity/Leashable.java.patch index f23634428e..7a967bd49e 100644 --- a/patches/minecraft/net/minecraft/world/entity/Leashable.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/Leashable.java.patch @@ -1,12 +1,12 @@ --- a/net/minecraft/world/entity/Leashable.java +++ b/net/minecraft/world/entity/Leashable.java -@@ -185,7 +_,8 @@ +@@ -188,7 +_,8 @@ - static float angularFriction(E p_408063_) { - if (p_408063_.onGround()) { -- return p_408063_.level().getBlockState(p_408063_.getBlockPosBelowThatAffectsMyMovement()).getBlock().getFriction() * 0.91F; -+ var pos = p_408063_.getBlockPosBelowThatAffectsMyMovement(); -+ return p_408063_.level().getBlockState(pos).getFriction(p_408063_.level(), pos, p_408063_) * 0.91F; + static float angularFriction(final E entity) { + if (entity.onGround()) { +- return entity.level().getBlockState(entity.getBlockPosBelowThatAffectsMyMovement()).getBlock().getFriction() * 0.91F; ++ var pos = entity.getBlockPosBelowThatAffectsMyMovement(); ++ return entity.level().getBlockState(pos).getFriction(entity.level(), pos, entity) * 0.91F; } else { - return p_408063_.isInLiquid() ? 0.8F : 0.91F; + return entity.isInLiquid() ? 0.8F : 0.91F; } diff --git a/patches/minecraft/net/minecraft/world/entity/LightningBolt.java.patch b/patches/minecraft/net/minecraft/world/entity/LightningBolt.java.patch index 150c1feeb4..f5913ade3d 100644 --- a/patches/minecraft/net/minecraft/world/entity/LightningBolt.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/LightningBolt.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/world/entity/LightningBolt.java +++ b/net/minecraft/world/entity/LightningBolt.java -@@ -38,6 +_,7 @@ +@@ -39,6 +_,7 @@ private @Nullable ServerPlayer cause; private final Set hitEntities = Sets.newHashSet(); private int blocksSetOnFire; + private float damage = 5.0F; - public LightningBolt(EntityType p_20865_, Level p_20866_) { - super(p_20865_, p_20866_); -@@ -63,6 +_,14 @@ - this.cause = p_20880_; + public LightningBolt(final EntityType type, final Level level) { + super(type, level); +@@ -64,6 +_,14 @@ + this.cause = cause; } + public void setDamage(float damage) { @@ -23,7 +23,7 @@ private void powerLightningRod() { BlockPos blockpos = this.getStrikePosition(); BlockState blockstate = this.level().getBlockState(blockpos); -@@ -161,6 +_,7 @@ +@@ -150,6 +_,7 @@ ); for (Entity entity : list1) { diff --git a/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch b/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch index 3bfde8f8ec..5d72874683 100644 --- a/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -143,7 +_,7 @@ +@@ -140,7 +_,7 @@ import org.jspecify.annotations.Nullable; import org.slf4j.Logger; @@ -9,56 +9,53 @@ private static final Logger LOGGER = LogUtils.getLogger(); private static final String TAG_ACTIVE_EFFECTS = "active_effects"; public static final String TAG_ATTRIBUTES = "attributes"; -@@ -189,6 +_,8 @@ - public static final float EXTRA_RENDER_CULLING_SIZE_WITH_BIG_HAT = 0.5F; - public static final float DEFAULT_BABY_SCALE = 0.5F; - private static final float WATER_FLOAT_IMPULSE = 0.04F; +@@ -195,6 +_,8 @@ + private static final int CURRENT_IMPULSE_CONTEXT_RESET_GRACE_TIME_TICKS = 40; + private static final int DEFAULT_CURRENT_IMPULSE_CONTEXT_RESET_GRACE_TIME = 0; + private int currentImpulseContextResetGraceTime = 0; + /** Forge: Use a variant that calls {@link ItemStack#isMonsterDisguise(Player, net.minecraft.world.entity.monster.Monster)} and {@link net.minecraftforge.event.entity.living.MonsterDisguiseEvent} */ + @Deprecated - public static final Predicate PLAYER_NOT_WEARING_DISGUISE_ITEM = p_390518_ -> { - if (p_390518_ instanceof Player player) { + public static final Predicate PLAYER_NOT_WEARING_DISGUISE_ITEM = livingEntity -> { + if (livingEntity instanceof Player player) { ItemStack itemstack = player.getItemBySlot(EquipmentSlot.HEAD); -@@ -270,7 +_,7 @@ +@@ -279,7 +_,7 @@ this.reapplyPosition(); this.setYRot(this.random.nextFloat() * (float) (Math.PI * 2)); this.yHeadRot = this.getYRot(); -- this.brain = this.makeBrain(EMPTY_BRAIN); -+ this.brain = net.minecraftforge.common.ForgeHooks.onLivingMakeBrain(this, this.makeBrain(EMPTY_BRAIN), EMPTY_BRAIN); +- this.brain = this.makeBrain(Brain.Packed.EMPTY); ++ this.brain = net.minecraftforge.common.ForgeHooks.onLivingMakeBrain(this, this.makeBrain(Brain.Packed.EMPTY), Brain.Packed.EMPTY); } @Override -@@ -334,9 +_,10 @@ - .add(Attributes.EXPLOSION_KNOCKBACK_RESISTANCE) - .add(Attributes.WATER_MOVEMENT_EFFICIENCY) +@@ -338,7 +_,8 @@ .add(Attributes.MOVEMENT_EFFICIENCY) -- .add(Attributes.ATTACK_KNOCKBACK) + .add(Attributes.ATTACK_KNOCKBACK) .add(Attributes.CAMERA_DISTANCE) - .add(Attributes.WAYPOINT_TRANSMIT_RANGE); -+ .add(Attributes.ATTACK_KNOCKBACK) + .add(Attributes.WAYPOINT_TRANSMIT_RANGE) + .add(Attributes.JUMP_STRENGTH); } @Override -@@ -363,7 +_,8 @@ +@@ -365,7 +_,8 @@ double d7 = Math.min(0.2F + d6 / 15.0, 2.5); int i = (int)(150.0 * d7); -- serverlevel.sendParticles(new BlockParticleOption(ParticleTypes.BLOCK, p_20992_), d0, d1, d2, i, 0.0, 0.0, 0.0, 0.15F); -+ if (!p_20992_.addLandingEffects((ServerLevel) this.level(), p_20993_, p_20992_, this, i)) -+ ((ServerLevel)this.level()).sendParticles(new BlockParticleOption(ParticleTypes.BLOCK, p_20992_).setPos(p_20993_), d0, d1, d2, i, 0.0, 0.0, 0.0, 0.15F); +- serverlevel.sendParticles(new BlockParticleOption(ParticleTypes.BLOCK, onState), d0, d1, d2, i, 0.0, 0.0, 0.0, 0.15F); ++ if (!onState.addLandingEffects((ServerLevel) this.level(), pos, onState, this, i)) ++ ((ServerLevel)this.level()).sendParticles(new BlockParticleOption(ParticleTypes.BLOCK, onState).setPos(pos), d0, d1, d2, i, 0.0, 0.0, 0.0, 0.15F); } } -@@ -373,6 +_,7 @@ +@@ -375,6 +_,7 @@ } } -+ @Deprecated //FORGE: Use canDrownInFluidType instead ++ @Deprecated //FORGE: Use canDrownInFluid instead public boolean canBreatheUnderwater() { - return this.getType().is(EntityTypeTags.CAN_BREATHE_UNDER_WATER); + return this.is(EntityTypeTags.CAN_BREATHE_UNDER_WATER); } -@@ -413,6 +_,10 @@ +@@ -415,6 +_,10 @@ } } @@ -68,10 +65,10 @@ + if (false) // Forge: Handled in ForgeHooks#onLivingBreathe(LivingEntity, int, int) if (this.isEyeInFluid(FluidTags.WATER) && !serverlevel1.getBlockState(BlockPos.containing(this.getX(), this.getEyeY(), this.getZ())).is(Blocks.BUBBLE_COLUMN)) { - boolean flag1 = !this.canBreatheUnderwater() && !MobEffectUtil.hasWaterBreathing(this) && (!flag || !((Player)this).getAbilities().invulnerable); -@@ -759,6 +_,9 @@ + boolean flag1 = !this.canBreatheUnderwater() +@@ -764,6 +_,9 @@ } else { - ItemEntity itementity = this.createItemStackToDrop(p_395943_, p_393118_, p_392158_); + ItemEntity itementity = this.createItemStackToDrop(itemStack, randomly, thrownFromHand); if (itementity != null) { + if (captureDrops() != null) + captureDrops().add(itementity); @@ -79,16 +76,16 @@ this.level().addFreshEntity(itementity); } -@@ -801,7 +_,7 @@ - this.setPosToBed(p_390515_); +@@ -806,7 +_,7 @@ + this.setPosToBed(sleepingPos); } }, this::clearSleepingPos); -- p_406679_.read("Brain", Codec.PASSTHROUGH).ifPresent(p_405289_ -> this.brain = this.makeBrain((Dynamic)p_405289_)); -+ p_406679_.read("Brain", Codec.PASSTHROUGH).ifPresent(p_405289_ -> this.brain = net.minecraftforge.common.ForgeHooks.onLivingMakeBrain(this, this.makeBrain((Dynamic)p_405289_), (Dynamic)p_405289_)); - this.lastHurtByPlayer = EntityReference.read(p_406679_, "last_hurt_by_player"); - this.lastHurtByPlayerMemoryTime = p_406679_.getIntOr("last_hurt_by_player_memory_time", 0); - this.lastHurtByMob = EntityReference.read(p_406679_, "last_hurt_by_mob"); -@@ -825,8 +_,10 @@ +- input.read("Brain", Brain.Packed.CODEC).ifPresent(packedBrain -> this.brain = this.makeBrain(packedBrain)); ++ input.read("Brain", Brain.Packed.CODEC).ifPresent(packedBrain -> this.brain = net.minecraftforge.common.ForgeHooks.onLivingMakeBrain(this, this.makeBrain(packedBrain), packedBrain)); + this.lastHurtByPlayer = EntityReference.read(input, "last_hurt_by_player"); + this.lastHurtByPlayerMemoryTime = input.getIntOr("last_hurt_by_player_memory_time", 0); + this.lastHurtByMob = EntityReference.read(input, "last_hurt_by_mob"); +@@ -832,8 +_,10 @@ Holder holder = iterator.next(); MobEffectInstance mobeffectinstance = this.activeEffects.get(holder); if (!mobeffectinstance.tickServer(serverlevel, this, () -> this.onEffectUpdated(mobeffectinstance, true, null))) { @@ -99,87 +96,91 @@ } else if (mobeffectinstance.getDuration() % 600 == 0) { this.onEffectUpdated(mobeffectinstance, false, null); } -@@ -908,6 +_,7 @@ +@@ -919,6 +_,7 @@ } } -+ d0 = net.minecraftforge.common.ForgeHooks.getEntityVisibilityMultiplier(this, p_20969_, d0); ++ d0 = net.minecraftforge.common.ForgeHooks.getEntityVisibilityMultiplier(this, targetingEntity, d0); return d0; } -@@ -981,6 +_,7 @@ +@@ -992,6 +_,7 @@ } else { - MobEffectInstance mobeffectinstance = this.activeEffects.get(p_147208_.getEffect()); + MobEffectInstance mobeffectinstance = this.activeEffects.get(newEffect.getEffect()); boolean flag = false; -+ net.minecraftforge.event.ForgeEventFactory.onLivingEffectAdd(this, mobeffectinstance, p_147208_, p_147209_); ++ net.minecraftforge.event.ForgeEventFactory.onLivingEffectAdd(this, mobeffectinstance, newEffect, source); if (mobeffectinstance == null) { - this.activeEffects.put(p_147208_.getEffect(), p_147208_); - this.onEffectAdded(p_147208_, p_147209_); -@@ -997,6 +_,10 @@ + this.activeEffects.put(newEffect.getEffect(), newEffect); + this.onEffectAdded(newEffect, source); +@@ -1008,6 +_,10 @@ } - public boolean canBeAffected(MobEffectInstance p_21197_) { -+ var eventResult = net.minecraftforge.event.ForgeEventFactory.onLivingEffectCanApply(this, p_21197_).getResult(); + public boolean canBeAffected(final MobEffectInstance newEffect) { ++ var eventResult = net.minecraftforge.event.ForgeEventFactory.onLivingEffectCanApply(this, newEffect).getResult(); + if (!eventResult.isDefault()) { + return eventResult.isAllowed(); + } - if (this.getType().is(EntityTypeTags.IMMUNE_TO_INFESTED)) { - return !p_21197_.is(MobEffects.INFESTED); - } else if (this.getType().is(EntityTypeTags.IMMUNE_TO_OOZING)) { -@@ -1029,6 +_,9 @@ + if (this.is(EntityTypeTags.IMMUNE_TO_INFESTED)) { + return !newEffect.is(MobEffects.INFESTED); + } else if (this.is(EntityTypeTags.IMMUNE_TO_OOZING)) { +@@ -1038,6 +_,9 @@ } - public boolean removeEffect(Holder p_335910_) { -+ if (net.minecraftforge.event.ForgeEventFactory.onLivingEffectRemove(this, p_335910_.get())) { + public boolean removeEffect(final Holder effect) { ++ if (net.minecraftforge.event.ForgeEventFactory.onLivingEffectRemove(this, effect.get())) { + return false; + } - MobEffectInstance mobeffectinstance = this.removeEffectNoUpdate(p_335910_); + MobEffectInstance mobeffectinstance = this.removeEffectNoUpdate(effect); if (mobeffectinstance != null) { this.onEffectsRemoved(List.of(mobeffectinstance)); -@@ -1073,6 +_,9 @@ +@@ -1082,6 +_,9 @@ this.effectsDirty = true; - for (MobEffectInstance mobeffectinstance : p_364717_) { + for (MobEffectInstance mobeffectinstance : effects) { + if (net.minecraftforge.event.ForgeEventFactory.onLivingEffectRemove(this, mobeffectinstance)) { + continue; + } mobeffectinstance.getEffect().value().removeAttributeModifiers(this.getAttributes()); for (Entity entity : this.getPassengers()) { -@@ -1120,6 +_,10 @@ +@@ -1129,9 +_,13 @@ } - public void heal(float p_21116_) { -+ p_21116_ = net.minecraftforge.event.ForgeEventFactory.onLivingHeal(this, p_21116_); -+ if (p_21116_ <= 0) { + public void heal(final float heal) { ++ var ammount = net.minecraftforge.event.ForgeEventFactory.onLivingHeal(this, heal); ++ if (ammount <= 0) { + return; + } float f = this.getHealth(); if (f > 0.0F) { - this.setHealth(f + p_21116_); -@@ -1140,6 +_,9 @@ +- this.setHealth(f + heal); ++ this.setHealth(f + ammount); + } + } + +@@ -1149,6 +_,9 @@ @Override - public boolean hurtServer(ServerLevel p_361743_, DamageSource p_361865_, float p_365677_) { -+ if (!net.minecraftforge.common.ForgeHooks.onLivingAttack(this, p_361865_, p_365677_)) { + public boolean hurtServer(final ServerLevel level, final DamageSource source, float damage) { ++ if (!net.minecraftforge.common.ForgeHooks.onLivingAttack(this, source, damage)) { + return false; + } - if (this.isInvulnerableTo(p_361743_, p_361865_)) { + if (this.isInvulnerableTo(level, source)) { return false; } else if (this.isDeadOrDying()) { -@@ -1287,6 +_,10 @@ +@@ -1296,6 +_,10 @@ } - float f = blocksattacks.resolveBlockedDamage(p_392511_, p_394545_, d0); -+ var ev = net.minecraftforge.event.ForgeEventFactory.onShieldBlock(this, p_392511_, f, itemstack); + float f = blocksattacks.resolveBlockedDamage(source, damage, d0); ++ var ev = net.minecraftforge.event.ForgeEventFactory.onShieldBlock(this, source, f, itemstack); + if (ev == null) return 0.0F; + f = ev.getBlockedDamage(); + if (ev.shieldTakesDamage()) blocksattacks.hurtBlockingItem(this.level(), itemstack, this, this.getUsedItemHand(), f); - if (f > 0.0F && !p_392511_.is(DamageTypeTags.IS_PROJECTILE) && p_392511_.getDirectEntity() instanceof LivingEntity livingentity) { - this.blockUsingItem(p_396198_, livingentity); -@@ -1320,7 +_,7 @@ - Entity entity = p_378258_.getEntity(); + if (f > 0.0F && !source.is(DamageTypeTags.IS_PROJECTILE) && source.getDirectEntity() instanceof LivingEntity livingentity) { + this.blockUsingItem(level, livingentity); +@@ -1329,7 +_,7 @@ + Entity entity = source.getEntity(); if (entity instanceof Player player) { this.setLastHurtByPlayer(player, 100); - } else if (entity instanceof Wolf wolf && wolf.isTame()) { @@ -187,29 +188,29 @@ if (wolf.getOwnerReference() != null) { this.setLastHurtByPlayer(wolf.getOwnerReference().getUUID(), 100); } else { -@@ -1350,7 +_,7 @@ +@@ -1359,7 +_,7 @@ for (InteractionHand interactionhand : InteractionHand.values()) { ItemStack itemstack1 = this.getItemInHand(interactionhand); deathprotection = itemstack1.get(DataComponents.DEATH_PROTECTION); - if (deathprotection != null) { -+ if (deathprotection != null && net.minecraftforge.common.ForgeHooks.onLivingUseTotem(this, p_21263_, itemstack1, interactionhand)) { ++ if (deathprotection != null && net.minecraftforge.common.ForgeHooks.onLivingUseTotem(this, killingDamage, itemstack1, interactionhand)) { itemstack = itemstack1.copy(); itemstack1.shrink(1); break; -@@ -1413,6 +_,7 @@ +@@ -1415,6 +_,7 @@ } - public void die(DamageSource p_21014_) { -+ if (net.minecraftforge.event.ForgeEventFactory.onLivingDeath(this, p_21014_)) return; + public void die(final DamageSource source) { ++ if (net.minecraftforge.event.ForgeEventFactory.onLivingDeath(this, source)) return; if (!this.isRemoved() && !this.dead) { - Entity entity = p_21014_.getEntity(); + Entity entity = source.getEntity(); LivingEntity livingentity = this.getKillCredit(); -@@ -1449,10 +_,10 @@ +@@ -1451,10 +_,10 @@ if (this.level() instanceof ServerLevel serverlevel) { boolean flag = false; - if (p_21269_ instanceof WitherBoss) { + if (killer instanceof WitherBoss) { - if (serverlevel.getGameRules().get(GameRules.MOB_GRIEFING)) { -+ if (net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(serverlevel, p_21269_)) { ++ if (net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(serverlevel, killer)) { BlockPos blockpos = this.blockPosition(); BlockState blockstate = Blocks.WITHER_ROSE.defaultBlockState(); - if (this.level().getBlockState(blockpos).isAir() && blockstate.canSurvive(this.level(), blockpos)) { @@ -217,49 +218,49 @@ this.level().setBlock(blockpos, blockstate, 3); flag = true; } -@@ -1467,6 +_,7 @@ +@@ -1469,6 +_,7 @@ } - protected void dropAllDeathLoot(ServerLevel p_342160_, DamageSource p_21192_) { + protected void dropAllDeathLoot(final ServerLevel level, final DamageSource source) { + this.captureDrops(new java.util.ArrayList<>()); boolean flag = this.lastHurtByPlayerMemoryTime > 0; - if (this.shouldDropLoot(p_342160_)) { - this.dropFromLootTable(p_342160_, p_21192_, flag); -@@ -1475,6 +_,11 @@ + if (this.shouldDropLoot(level)) { + this.dropFromLootTable(level, source, flag); +@@ -1477,6 +_,11 @@ - this.dropEquipment(p_342160_); - this.dropExperience(p_342160_, p_21192_.getEntity()); + this.dropEquipment(level); + this.dropExperience(level, source.getEntity()); + + var drops = captureDrops(null); -+ if (!net.minecraftforge.event.ForgeEventFactory.onLivingDrops(this, p_21192_, drops, flag)) { ++ if (!net.minecraftforge.event.ForgeEventFactory.onLivingDrops(this, source, drops, flag)) { + drops.forEach(e -> level().addFreshEntity(e)); + } } - protected void dropEquipment(ServerLevel p_365823_) { -@@ -1482,7 +_,8 @@ - - protected void dropExperience(ServerLevel p_370040_, @Nullable Entity p_342525_) { - if (!this.wasExperienceConsumed() && (this.isAlwaysExperienceDropper() || this.lastHurtByPlayerMemoryTime > 0 && this.shouldDropExperience() && p_370040_.getGameRules().get(GameRules.MOB_DROPS))) { -- ExperienceOrb.award(p_370040_, this.position(), this.getExperienceReward(p_370040_, p_342525_)); -+ int reward = net.minecraftforge.event.ForgeEventFactory.getExperienceDrop(this, this.getLastHurtByPlayer(), this.getExperienceReward(p_370040_, p_342525_)); -+ ExperienceOrb.award(p_370040_, this.position(), reward); + protected void dropEquipment(final ServerLevel level) { +@@ -1488,7 +_,8 @@ + this.isAlwaysExperienceDropper() + || this.lastHurtByPlayerMemoryTime > 0 && this.shouldDropExperience() && level.getGameRules().get(GameRules.MOB_DROPS) + )) { +- ExperienceOrb.award(level, this.position(), this.getExperienceReward(level, killer)); ++ int reward = net.minecraftforge.event.ForgeEventFactory.getExperienceDrop(this, this.getLastHurtByPlayer(), this.getExperienceReward(level, killer)); ++ ExperienceOrb.award(level, this.position(), reward); } } -@@ -1583,6 +_,11 @@ +@@ -1601,6 +_,11 @@ } - public void knockback(double p_147241_, double p_147242_, double p_147243_) { -+ var event = net.minecraftforge.event.ForgeEventFactory.onLivingKnockBack(this, (float) p_147241_, p_147242_, p_147243_); + public void knockback(double power, double xd, double zd) { ++ var event = net.minecraftforge.event.ForgeEventFactory.onLivingKnockBack(this, (float)power, xd, zd); + if (event == null) return; -+ p_147241_ = event.getStrength(); -+ p_147242_ = event.getRatioX(); -+ p_147243_ = event.getRatioZ(); - p_147241_ *= 1.0 - this.getAttributeValue(Attributes.KNOCKBACK_RESISTANCE); - if (!(p_147241_ <= 0.0)) { ++ power = event.getStrength(); ++ xd = event.getRatioX(); ++ zd = event.getRatioZ(); + power *= 1.0 - this.getAttributeValue(Attributes.KNOCKBACK_RESISTANCE); + if (!(power <= 0.0)) { this.needsSync = true; -@@ -1664,6 +_,13 @@ +@@ -1678,6 +_,13 @@ } else { BlockPos blockpos = this.blockPosition(); BlockState blockstate = this.getInBlockState(); @@ -273,18 +274,35 @@ if (this.isFallFlying() && blockstate.is(BlockTags.CAN_GLIDE_THROUGH)) { return false; } else if (blockstate.is(BlockTags.CLIMBABLE)) { -@@ -1720,6 +_,10 @@ +@@ -1742,9 +_,11 @@ @Override - public boolean causeFallDamage(double p_393354_, float p_147187_, DamageSource p_147189_) { -+ var event = net.minecraftforge.event.ForgeEventFactory.onLivingFall(this, p_393354_, p_147187_); + public boolean causeFallDamage(final double fallDistance, final float damageModifier, final DamageSource damageSource) { ++ var event = net.minecraftforge.event.ForgeEventFactory.onLivingFall(this, fallDistance, damageModifier); + if (event == null) return false; -+ p_393354_ = event.getDistance(); -+ p_147187_ = event.getDamageMultiplier(); - boolean flag = super.causeFallDamage(p_393354_, p_147187_, p_147189_); - int i = this.calculateFallDamage(p_393354_, p_147187_); + double d0; + if (this.isIgnoringFallDamageFromCurrentImpulse()) { +- d0 = Math.min(fallDistance, this.currentImpulseImpactPos.y - this.getY()); ++ d0 = Math.min(event.getDistance(), this.currentImpulseImpactPos.y - this.getY()); + boolean flag = d0 <= 0.0; + if (flag) { + this.resetCurrentImpulseContext(); +@@ -1752,11 +_,11 @@ + this.tryResetCurrentImpulseContext(); + } + } else { +- d0 = fallDistance; ++ d0 = event.getDistance(); + } + +- boolean flag1 = super.causeFallDamage(d0, damageModifier, damageSource); +- int i = this.calculateFallDamage(d0, damageModifier); ++ boolean flag1 = super.causeFallDamage(d0, event.getDamageMultiplier(), damageSource); ++ int i = this.calculateFallDamage(d0, event.getDamageMultiplier()); if (i > 0) { -@@ -1750,9 +_,10 @@ + this.resetCurrentImpulseContext(); + this.playSound(this.getFallDamageSound(i), 1.0F, 1.0F); +@@ -1819,9 +_,10 @@ int i = Mth.floor(this.getX()); int j = Mth.floor(this.getY() - 0.2F); int k = Mth.floor(this.getZ()); @@ -297,45 +315,45 @@ this.playSound(soundtype.getFallSound(), soundtype.getVolume() * 0.5F, soundtype.getPitch() * 0.75F); } } -@@ -1810,9 +_,9 @@ - float f2 = f1 - p_21194_; +@@ -1881,9 +_,9 @@ + float f2 = f1 - damage; if (f2 > 0.0F && f2 < 3.4028235E37F) { if (this instanceof ServerPlayer) { - ((ServerPlayer)this).awardStat(Stats.DAMAGE_RESISTED, Math.round(f2 * 10.0F)); + ((ServerPlayer)this).awardStat(Stats.CUSTOM.get(Stats.DAMAGE_RESISTED), Math.round(f2 * 10.0F)); - } else if (p_21193_.getEntity() instanceof ServerPlayer) { -- ((ServerPlayer)p_21193_.getEntity()).awardStat(Stats.DAMAGE_DEALT_RESISTED, Math.round(f2 * 10.0F)); -+ ((ServerPlayer)p_21193_.getEntity()).awardStat(Stats.CUSTOM.get(Stats.DAMAGE_DEALT_RESISTED), Math.round(f2 * 10.0F)); + } else if (damageSource.getEntity() instanceof ServerPlayer) { +- ((ServerPlayer)damageSource.getEntity()).awardStat(Stats.DAMAGE_DEALT_RESISTED, Math.round(f2 * 10.0F)); ++ ((ServerPlayer)damageSource.getEntity()).awardStat(Stats.CUSTOM.get(Stats.DAMAGE_DEALT_RESISTED), Math.round(f2 * 10.0F)); } } } -@@ -1840,6 +_,8 @@ +@@ -1911,6 +_,8 @@ - protected void actuallyHurt(ServerLevel p_365124_, DamageSource p_21240_, float p_21241_) { - if (!this.isInvulnerableTo(p_365124_, p_21240_)) { -+ p_21241_ = net.minecraftforge.common.ForgeHooks.onLivingHurt(this, p_21240_, p_21241_); -+ if (p_21241_ <= 0) return; - p_21241_ = this.getDamageAfterArmorAbsorb(p_21240_, p_21241_); - p_21241_ = this.getDamageAfterMagicAbsorb(p_21240_, p_21241_); - float f1 = Math.max(p_21241_ - this.getAbsorptionAmount(), 0.0F); -@@ -1849,6 +_,7 @@ + protected void actuallyHurt(final ServerLevel level, final DamageSource source, float dmg) { + if (!this.isInvulnerableTo(level, source)) { ++ dmg = net.minecraftforge.common.ForgeHooks.onLivingHurt(this, source, dmg); ++ if (dmg <= 0) return; + dmg = this.getDamageAfterArmorAbsorb(source, dmg); + dmg = this.getDamageAfterMagicAbsorb(source, dmg); + float f1 = Math.max(dmg - this.getAbsorptionAmount(), 0.0F); +@@ -1920,6 +_,7 @@ serverplayer.awardStat(Stats.DAMAGE_DEALT_ABSORBED, Math.round(f * 10.0F)); } -+ f1 = net.minecraftforge.common.ForgeHooks.onLivingDamage(this, p_21240_, f1); ++ f1 = net.minecraftforge.common.ForgeHooks.onLivingDamage(this, source, f1); if (f1 != 0.0F) { - this.getCombatTracker().recordDamage(p_21240_, f1); + this.getCombatTracker().recordDamage(source, f1); this.setHealth(this.getHealth() - f1); -@@ -1909,6 +_,8 @@ +@@ -1981,6 +_,8 @@ } - public void swing(InteractionHand p_21012_, boolean p_21013_) { -+ ItemStack stack = this.getItemInHand(p_21012_); + public void swing(final InteractionHand hand, final boolean sendToSwingingEntity) { ++ ItemStack stack = this.getItemInHand(hand); + if (!stack.isEmpty() && stack.onEntitySwing(this)) return; if (!this.swinging || this.swingTime >= this.getCurrentSwingDuration() / 2 || this.swingTime < 0) { this.swingTime = -1; this.swinging = true; -@@ -2050,9 +_,10 @@ +@@ -2121,9 +_,10 @@ } private void swapHandItems() { @@ -349,7 +367,7 @@ } @Override -@@ -2265,15 +_,18 @@ +@@ -2340,15 +_,18 @@ } this.needsSync = true; @@ -364,80 +382,80 @@ } + @Deprecated // FORGE: use jumpInFluid instead - protected void jumpInLiquid(TagKey p_204043_) { + protected void jumpInLiquid(final TagKey type) { - this.setDeltaMovement(this.getDeltaMovement().add(0.0, 0.04F, 0.0)); + this.setDeltaMovement(this.getDeltaMovement().add(0.0, 0.04F * this.getAttributeValue(net.minecraftforge.common.ForgeMod.SWIM_SPEED.getHolder().get()), 0.0)); } protected float getWaterSlowDown() { -@@ -2295,8 +_,9 @@ +@@ -2370,8 +_,9 @@ } - public void travel(Vec3 p_21280_) { + public void travel(final Vec3 input) { - if (this.shouldTravelInFluid(this.level().getFluidState(this.blockPosition()))) { -- this.travelInFluid(p_21280_); +- this.travelInFluid(input); + var fluidstate = this.level().getFluidState(this.blockPosition()); + if (this.shouldTravelInFluid(fluidstate)) { -+ this.travelInFluid(p_21280_, fluidstate); ++ this.travelInFluid(input, fluidstate); } else if (this.isFallFlying()) { - this.travelFallFlying(p_21280_); + this.travelFallFlying(input); } else { -@@ -2305,7 +_,7 @@ +@@ -2384,7 +_,7 @@ } - protected boolean shouldTravelInFluid(FluidState p_453099_) { -- return (this.isInWater() || this.isInLava()) && this.isAffectedByFluids() && !this.canStandOnFluid(p_453099_); -+ return (this.isInWater() || this.isInLava() || this.isInFluidType(p_453099_)) && this.isAffectedByFluids() && !this.canStandOnFluid(p_453099_); + protected boolean shouldTravelInFluid(final FluidState fluidState) { +- return (this.isInWater() || this.isInLava()) && this.isAffectedByFluids() && !this.canStandOnFluid(fluidState); ++ return (this.isInWater() || this.isInLava() || this.isInFluidType(fluidState)) && this.isAffectedByFluids() && !this.canStandOnFluid(fluidState); } - protected void travelFlying(Vec3 p_407126_, float p_407105_) { -@@ -2330,7 +_,7 @@ + protected void travelFlying(final Vec3 input, final float speed) { +@@ -2409,7 +_,7 @@ - private void travelInAir(Vec3 p_362087_) { + private void travelInAir(final Vec3 input) { BlockPos blockpos = this.getBlockPosBelowThatAffectsMyMovement(); - float f = this.onGround() ? this.level().getBlockState(blockpos).getBlock().getFriction() : 1.0F; + float f = this.onGround() ? this.level().getBlockState(blockpos).getFriction(level(), blockpos, this) : 1.0F; float f1 = f * 0.91F; - Vec3 vec3 = this.handleRelativeFrictionAndCalculateMovement(p_362087_, f); + Vec3 vec3 = this.handleRelativeFrictionAndCalculateMovement(input, f); double d0 = vec3.y; -@@ -2353,10 +_,18 @@ +@@ -2432,10 +_,18 @@ } } -- private void travelInFluid(Vec3 p_362114_) { +- private void travelInFluid(final Vec3 input) { + @Deprecated // FORGE: Use the version that takes a FluidState -+ private void travelInFluid(Vec3 p_365480_) { -+ this.travelInFluid(p_365480_, net.minecraft.world.level.material.Fluids.WATER.defaultFluidState()); ++ private void travelInFluid(Vec3 input) { ++ this.travelInFluid(input, net.minecraft.world.level.material.Fluids.WATER.defaultFluidState()); + } + -+ private void travelInFluid(Vec3 p_362114_, FluidState fluidstate) { ++ private void travelInFluid(Vec3 input, FluidState fluidstate) { boolean flag = this.getDeltaMovement().y <= 0.0; double d0 = this.getY(); double d1 = this.getEffectiveGravity(); -+ if (this.isInFluidType(fluidstate) && this.moveInFluid(fluidstate, p_362114_, d0)) { ++ if (this.isInFluidType(fluidstate) && this.moveInFluid(fluidstate, input, d0)) { + // Modded fluid handled it + } else if (this.isInWater()) { - this.travelInWater(p_362114_, d1, flag, d0); + this.travelInWater(input, d1, flag, d0); this.floatInWaterWhileRidden(); -@@ -2382,6 +_,7 @@ +@@ -2461,6 +_,7 @@ f = 0.96F; } + f1 *= this.getAttributeValue(net.minecraftforge.common.ForgeMod.SWIM_SPEED.getHolder().get()); - this.moveRelative(f1, p_451732_); + this.moveRelative(f1, input); this.move(MoverType.SELF, this.getDeltaMovement()); Vec3 vec3 = this.getDeltaMovement(); -@@ -2553,7 +_,7 @@ - double d0 = Mth.clamp(p_21298_.x, -0.15F, 0.15F); - double d1 = Mth.clamp(p_21298_.z, -0.15F, 0.15F); - double d2 = Math.max(p_21298_.y, -0.15F); +@@ -2632,7 +_,7 @@ + double d0 = Mth.clamp(delta.x, -0.15F, 0.15F); + double d1 = Mth.clamp(delta.z, -0.15F, 0.15F); + double d2 = Math.max(delta.y, -0.15F); - if (d2 < 0.0 && !this.getInBlockState().is(Blocks.SCAFFOLDING) && this.isSuppressingSlidingDownLadder() && this instanceof Player) { + if (d2 < 0.0 && !this.getInBlockState().isScaffolding(this) && this.isSuppressingSlidingDownLadder() && this instanceof Player) { d2 = 0.0; } -@@ -2598,6 +_,7 @@ +@@ -2675,6 +_,7 @@ @Override public void tick() { @@ -445,7 +463,7 @@ super.tick(); this.updatingUsingItem(); this.updateSwimAmount(); -@@ -2786,6 +_,7 @@ +@@ -2873,6 +_,7 @@ ItemStack itemstack = this.lastEquipmentItems.get(equipmentslot); ItemStack itemstack1 = this.getItemBySlot(equipmentslot); if (this.equipmentHasChanged(itemstack, itemstack1)) { @@ -453,7 +471,7 @@ if (map == null) { map = Maps.newEnumMap(EquipmentSlot.class); } -@@ -2921,6 +_,10 @@ +@@ -3008,6 +_,10 @@ profilerfiller.push("jump"); if (this.jumping && this.isAffectedByFluids()) { double d3; @@ -464,7 +482,7 @@ if (this.isInLava()) { d3 = this.getFluidHeight(FluidTags.LAVA); } else { -@@ -2931,15 +_,19 @@ +@@ -3018,15 +_,19 @@ double d4 = this.getFluidJumpThreshold(); if (!flag || this.onGround() && !(d3 > d4)) { if (!this.isInLava() || this.onGround() && !(d3 > d4)) { @@ -486,7 +504,7 @@ } } else { this.noJumpDelay = 0; -@@ -3255,8 +_,11 @@ +@@ -3346,8 +_,11 @@ private void updatingUsingItem() { if (this.isUsingItem()) { @@ -499,23 +517,23 @@ this.updateUsingItem(this.useItem); } else { this.stopUsingItem(); -@@ -3299,8 +_,12 @@ +@@ -3390,8 +_,12 @@ } - protected void updateUsingItem(ItemStack p_147201_) { -+ if (!p_147201_.isEmpty()) { -+ this.useItemRemaining = net.minecraftforge.event.ForgeEventFactory.onItemUseTick(this, p_147201_, this.getUseItemRemainingTicks()); + protected void updateUsingItem(final ItemStack useItem) { ++ if (!useItem.isEmpty()) { ++ this.useItemRemaining = net.minecraftforge.event.ForgeEventFactory.onItemUseTick(this, useItem, this.getUseItemRemainingTicks()); + } + if (this.getUseItemRemainingTicks() > 0) - p_147201_.onUseTick(this.level(), this, this.getUseItemRemainingTicks()); -- if (--this.useItemRemaining == 0 && !this.level().isClientSide() && !p_147201_.useOnRelease()) { -+ if (--this.useItemRemaining <= 0 && !this.level().isClientSide() && !p_147201_.useOnRelease()) { + useItem.onUseTick(this.level(), this, this.getUseItemRemainingTicks()); +- if (--this.useItemRemaining == 0 && !this.level().isClientSide() && !useItem.useOnRelease()) { ++ if (--this.useItemRemaining <= 0 && !this.level().isClientSide() && !useItem.useOnRelease()) { this.completeUsingItem(); } } -@@ -3328,8 +_,10 @@ - public void startUsingItem(InteractionHand p_21159_) { - ItemStack itemstack = this.getItemInHand(p_21159_); +@@ -3419,8 +_,10 @@ + public void startUsingItem(final InteractionHand hand) { + ItemStack itemstack = this.getItemInHand(hand); if (!itemstack.isEmpty() && !this.isUsingItem()) { + int duration = net.minecraftforge.event.ForgeEventFactory.onItemUseStart(this, itemstack, itemstack.getUseDuration(this)); + if (duration < 0) return; @@ -524,18 +542,18 @@ + this.useItemRemaining = duration; if (!this.level().isClientSide()) { this.setLivingEntityFlag(1, true); - this.setLivingEntityFlag(2, p_21159_ == InteractionHand.OFF_HAND); -@@ -3384,6 +_,9 @@ - vec31 = vec31.xRot(-this.getXRot() * (float) (Math.PI / 180.0)); - vec31 = vec31.yRot(-this.getYRot() * (float) (Math.PI / 180.0)); - vec31 = vec31.add(this.getX(), this.getEyeY(), this.getZ()); -+ if (this.level() instanceof ServerLevel serverLevel) //Forge: Fix MC-2518 spawnParticle is nooped on server, need to use server specific variant -+ serverLevel.sendParticles(new ItemParticleOption(ParticleTypes.ITEM, p_21061_), vec31.x, vec31.y, vec31.z, 1, vec3.x, vec3.y + 0.05D, vec3.z, 0.0D); -+ else - this.level() - .addParticle( - new ItemParticleOption(ParticleTypes.ITEM, p_21061_), -@@ -3404,7 +_,9 @@ + this.setLivingEntityFlag(2, hand == InteractionHand.OFF_HAND); +@@ -3478,6 +_,9 @@ + vec31 = vec31.xRot(-this.getXRot() * (float) (Math.PI / 180.0)); + vec31 = vec31.yRot(-this.getYRot() * (float) (Math.PI / 180.0)); + vec31 = vec31.add(this.getX(), this.getEyeY(), this.getZ()); ++ if (this.level() instanceof ServerLevel serverLevel) //Forge: Fix MC-2518 spawnParticle is nooped on server, need to use server specific variant ++ serverLevel.sendParticles(itemparticleoption, vec31.x, vec31.y, vec31.z, 1, vec3.x, vec3.y + 0.05D, vec3.z, 0.0D); ++ else + this.level().addParticle(itemparticleoption, vec31.x, vec31.y, vec31.z, vec3.x, vec3.y + 0.05, vec3.z); + } + } +@@ -3490,7 +_,9 @@ this.releaseUsingItem(); } else { if (!this.useItem.isEmpty() && this.isUsingItem()) { @@ -545,7 +563,7 @@ if (itemstack != this.useItem) { this.setItemInHand(interactionhand, itemstack); } -@@ -3438,7 +_,13 @@ +@@ -3524,7 +_,13 @@ ItemStack itemstack = this.getItemInHand(this.getUsedItemHand()); if (!this.useItem.isEmpty() && ItemStack.isSameItem(itemstack, this.useItem)) { this.useItem = itemstack; @@ -559,7 +577,7 @@ if (this.useItem.useOnRelease()) { this.updatingUsingItem(); } -@@ -3448,6 +_,7 @@ +@@ -3534,6 +_,7 @@ } public void stopUsingItem() { @@ -567,37 +585,37 @@ if (!this.level().isClientSide()) { boolean flag = this.isUsingItem(); this.recentKineticEnemies = null; -@@ -3616,8 +_,8 @@ +@@ -3702,8 +_,8 @@ } - BlockState blockstate = this.level().getBlockState(p_21141_); + BlockState blockstate = this.level().getBlockState(bedPosition); - if (blockstate.getBlock() instanceof BedBlock) { -- this.level().setBlock(p_21141_, blockstate.setValue(BedBlock.OCCUPIED, true), 3); -+ if (blockstate.isBed(level(), p_21141_, this)) { -+ blockstate.setBedOccupied(level(), p_21141_, this, true); +- this.level().setBlock(bedPosition, blockstate.setValue(BedBlock.OCCUPIED, true), 3); ++ if (blockstate.isBed(level(), bedPosition, this)) { ++ blockstate.setBedOccupied(level(), bedPosition, this, true); } this.setPose(Pose.SLEEPING); -@@ -3632,15 +_,15 @@ +@@ -3718,15 +_,15 @@ } private boolean checkBedExists() { -- return this.getSleepingPos().map(p_449422_ -> this.level().getBlockState(p_449422_).getBlock() instanceof BedBlock).orElse(false); -+ return this.getSleepingPos().map(p_449422_ -> net.minecraftforge.event.ForgeEventFactory.fireSleepingLocationCheck(this, p_449422_)).orElse(false); +- return this.getSleepingPos().map(bedPosition -> this.level().getBlockState(bedPosition).getBlock() instanceof BedBlock).orElse(false); ++ return this.getSleepingPos().map(bedPosition -> net.minecraftforge.event.ForgeEventFactory.fireSleepingLocationCheck(this, bedPosition)).orElse(false); } public void stopSleeping() { - this.getSleepingPos().filter(this.level()::hasChunkAt).ifPresent(p_261435_ -> { - BlockState blockstate = this.level().getBlockState(p_261435_); + this.getSleepingPos().filter(this.level()::hasChunkAt).ifPresent(bedPosition -> { + BlockState blockstate = this.level().getBlockState(bedPosition); - if (blockstate.getBlock() instanceof BedBlock) { -+ if (blockstate.isBed(level(), p_261435_, this)) { ++ if (blockstate.isBed(level(), bedPosition, this)) { Direction direction = blockstate.getValue(BedBlock.FACING); -- this.level().setBlock(p_261435_, blockstate.setValue(BedBlock.OCCUPIED, false), 3); -+ blockstate.setBedOccupied(level(), p_261435_, this, false); - Vec3 vec31 = BedBlock.findStandUpPosition(this.getType(), this.level(), p_261435_, direction, this.getYRot()).orElseGet(() -> { - BlockPos blockpos = p_261435_.above(); +- this.level().setBlock(bedPosition, blockstate.setValue(BedBlock.OCCUPIED, false), 3); ++ blockstate.setBedOccupied(level(), bedPosition, this, false); + Vec3 vec31 = BedBlock.findStandUpPosition(this.getType(), this.level(), bedPosition, direction, this.getYRot()).orElseGet(() -> { + BlockPos blockpos = bedPosition.above(); return new Vec3(blockpos.getX() + 0.5, blockpos.getY() + 0.1, blockpos.getZ() + 0.5); -@@ -3660,7 +_,9 @@ +@@ -3746,7 +_,9 @@ public @Nullable Direction getBedOrientation() { BlockPos blockpos = this.getSleepingPos().orElse(null); @@ -608,25 +626,25 @@ } @Override -@@ -3669,7 +_,7 @@ +@@ -3755,7 +_,7 @@ } - public ItemStack getProjectile(ItemStack p_21272_) { + public ItemStack getProjectile(final ItemStack heldWeapon) { - return ItemStack.EMPTY; -+ return net.minecraftforge.common.ForgeHooks.getProjectile(this, p_21272_, ItemStack.EMPTY); ++ return net.minecraftforge.common.ForgeHooks.getProjectile(this, heldWeapon, ItemStack.EMPTY); } - private static byte entityEventForEquipmentBreak(EquipmentSlot p_21267_) { -@@ -3721,6 +_,8 @@ + private static byte entityEventForEquipmentBreak(final EquipmentSlot equipmentSlot) { +@@ -3807,6 +_,8 @@ } - public final EquipmentSlot getEquipmentSlotForItem(ItemStack p_147234_) { -+ final EquipmentSlot slot = p_147234_.getEquipmentSlot(); + public final EquipmentSlot getEquipmentSlotForItem(final ItemStack itemStack) { ++ final EquipmentSlot slot = itemStack.getEquipmentSlot(); + if (slot != null) return slot; // FORGE: Allow modders to set a non-default equipment slot for a stack; e.g. a non-armor chestplate-slot item - Equippable equippable = p_147234_.get(DataComponents.EQUIPPABLE); + Equippable equippable = itemStack.get(DataComponents.EQUIPPABLE); return equippable != null && this.canUseSlot(equippable.slot()) ? equippable.slot() : EquipmentSlot.MAINHAND; } -@@ -3884,5 +_,42 @@ +@@ -3970,5 +_,42 @@ } public record Fallsounds(SoundEvent small, SoundEvent big) { diff --git a/patches/minecraft/net/minecraft/world/entity/Mob.java.patch b/patches/minecraft/net/minecraft/world/entity/Mob.java.patch index c817e1f203..9fb32dee9c 100644 --- a/patches/minecraft/net/minecraft/world/entity/Mob.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/Mob.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java -@@ -137,6 +_,9 @@ +@@ -139,6 +_,9 @@ private Leashable.@Nullable LeashData leashData; private BlockPos homePosition = BlockPos.ZERO; private int homeRadius = -1; @@ -8,37 +8,37 @@ + private EntitySpawnReason spawnReason; + private boolean spawnCancelled = false; - protected Mob(EntityType p_21368_, Level p_21369_) { - super(p_21368_, p_21369_); -@@ -230,7 +_,10 @@ + protected Mob(final EntityType type, final Level level) { + super(type, level); +@@ -244,7 +_,10 @@ } - public void setTarget(@Nullable LivingEntity p_21544_) { -- this.target = p_21544_; -+ var event = net.minecraftforge.event.ForgeEventFactory.onLivingChangeTargetMob(this, p_21544_); + public void setTarget(final @Nullable LivingEntity target) { +- this.target = this.asValidTarget(target); ++ var event = net.minecraftforge.event.ForgeEventFactory.onLivingChangeTargetMob(this, target); + if (event != null) { + this.target = event.getNewTarget(); + } } @Override -@@ -369,6 +_,10 @@ +@@ -383,6 +_,10 @@ if (this.isNoAi()) { - p_409238_.putBoolean("NoAI", this.isNoAi()); + output.putBoolean("NoAI", this.isNoAi()); } + + if (this.spawnReason != null) { -+ p_409238_.putString("forge:spawn_type", this.spawnReason.name()); ++ output.putString("forge:spawn_type", this.spawnReason.name()); + } } @Override -@@ -387,6 +_,13 @@ - this.lootTable = p_408489_.read("DeathLootTable", LootTable.KEY_CODEC); - this.lootTableSeed = p_408489_.getLongOr("DeathLootTableSeed", 0L); - this.setNoAi(p_408489_.getBooleanOr("NoAI", false)); +@@ -401,6 +_,13 @@ + this.lootTable = input.read("DeathLootTable", LootTable.KEY_CODEC); + this.lootTableSeed = input.getLongOr("DeathLootTableSeed", 0L); + this.setNoAi(input.getBooleanOr("NoAI", false)); + -+ p_408489_.getString("forge:spawn_type").ifPresent(type -> { ++ input.getString("forge:spawn_type").ifPresent(type -> { + try { + this.spawnReason = EntitySpawnReason.valueOf(type); + } catch (Exception ex) { @@ -47,7 +47,7 @@ } @Override -@@ -445,7 +_,7 @@ +@@ -459,7 +_,7 @@ && this.canPickUpLoot() && this.isAlive() && !this.dead @@ -56,7 +56,7 @@ Vec3i vec3i = this.getPickupReach(); for (ItemEntity itementity : this.level() -@@ -641,6 +_,14 @@ +@@ -658,6 +_,14 @@ this.discard(); } else if (!this.isPersistenceRequired() && !this.requiresCustomPersistence()) { Entity entity = this.level().getNearestPlayer(this, -1.0); @@ -71,7 +71,7 @@ if (entity != null) { double d0 = entity.distanceToSqr(this); int i = this.getType().getCategory().getDespawnDistance(); -@@ -1032,6 +_,16 @@ +@@ -1059,6 +_,16 @@ } } @@ -86,29 +86,29 @@ + @Deprecated + @org.jetbrains.annotations.ApiStatus.OverrideOnly public @Nullable SpawnGroupData finalizeSpawn( - ServerLevelAccessor p_21434_, DifficultyInstance p_21435_, EntitySpawnReason p_369316_, @Nullable SpawnGroupData p_21437_ + final ServerLevelAccessor level, final DifficultyInstance difficulty, final EntitySpawnReason spawnReason, final @Nullable SpawnGroupData groupData ) { -@@ -1044,6 +_,7 @@ +@@ -1071,6 +_,7 @@ } this.setLeftHanded(randomsource.nextFloat() < 0.05F); -+ this.spawnReason = p_369316_; - return p_21437_; ++ this.spawnReason = spawnReason; + return groupData; } -@@ -1350,15 +_,25 @@ +@@ -1382,15 +_,25 @@ return flag; } + @Deprecated // FORGE: use jumpInFluid instead @Override - protected void jumpInLiquid(TagKey p_204045_) { -+ this.jumpInLiquidInternal(() -> super.jumpInLiquid(p_204045_)); + protected void jumpInLiquid(final TagKey type) { ++ this.jumpInLiquidInternal(() -> super.jumpInLiquid(type)); + } + + private void jumpInLiquidInternal(Runnable onSuper) { if (this.getNavigation().canFloat()) { -- super.jumpInLiquid(p_204045_); +- super.jumpInLiquid(type); + onSuper.run(); } else { this.setDeltaMovement(this.getDeltaMovement().add(0.0, 0.3, 0.0)); @@ -122,11 +122,11 @@ + @VisibleForTesting public void removeFreeWill() { - this.removeAllGoals(p_341273_ -> true); -@@ -1385,6 +_,41 @@ + this.removeAllGoals(goal -> true); +@@ -1416,6 +_,41 @@ + @Override public @Nullable ItemStack getPickResult() { - SpawnEggItem spawneggitem = SpawnEggItem.byId(this.getType()); - return spawneggitem == null ? null : new ItemStack(spawneggitem); + return SpawnEggItem.byId(this.getType()).map(ItemStack::new).orElse(null); + } + + /** @@ -153,12 +153,12 @@ + + /** + * Marks this mob as being disallowed to spawn during {@link Level#addFreshEntity(Entity)}.

-+ * @throws UnsupportedOperationException if this entity has already been {@link Entity#isAddedToWorld() added to the world}. ++ * @throws UnsupportedOperationException if this entity has already been {@link Entity#isAddedToLevel() added to the world}. + * @apiNote Not public-facing API. + */ + @org.jetbrains.annotations.ApiStatus.Internal + public final void setSpawnCancelled(boolean cancel) { -+ if (this.isAddedToWorld()) { ++ if (this.isAddedToLevel()) { + throw new UnsupportedOperationException("Late invocations of Mob#setSpawnCancelled are not permitted."); + } + this.spawnCancelled = cancel; diff --git a/patches/minecraft/net/minecraft/world/entity/Shearable.java.patch b/patches/minecraft/net/minecraft/world/entity/Shearable.java.patch index 050d4b581c..cefe59c316 100644 --- a/patches/minecraft/net/minecraft/world/entity/Shearable.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/Shearable.java.patch @@ -7,7 +7,7 @@ -public interface Shearable { +public interface Shearable extends net.minecraftforge.common.IForgeShearable { + /** @deprecated Use {@link net.minecraftforge.common.IForgeShearable#onSheared} */ - void shear(ServerLevel p_368224_, SoundSource p_21749_, ItemStack p_362173_); + void shear(ServerLevel level, SoundSource soundSource, ItemStack tool); + /** @deprecated Use {@link net.minecraftforge.common.IForgeShearable#isShearable} */ boolean readyForShearing(); diff --git a/patches/minecraft/net/minecraft/world/entity/SpawnPlacementTypes.java.patch b/patches/minecraft/net/minecraft/world/entity/SpawnPlacementTypes.java.patch index 15661214f4..38357879f4 100644 --- a/patches/minecraft/net/minecraft/world/entity/SpawnPlacementTypes.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/SpawnPlacementTypes.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/entity/SpawnPlacementTypes.java +++ b/net/minecraft/world/entity/SpawnPlacementTypes.java @@ -28,7 +_,7 @@ - BlockPos blockpos = p_332749_.above(); - BlockPos blockpos1 = p_332749_.below(); - BlockState blockstate = p_328923_.getBlockState(blockpos1); -- return !blockstate.isValidSpawn(p_328923_, blockpos1, p_334188_) -+ return !blockstate.isValidSpawn(p_328923_, blockpos1, this, p_334188_) + BlockPos blockpos = blockPos.above(); + BlockPos blockpos1 = blockPos.below(); + BlockState blockstate = level.getBlockState(blockpos1); +- return !blockstate.isValidSpawn(level, blockpos1, type) ++ return !blockstate.isValidSpawn(level, blockpos1, this, type) ? false - : this.isValidEmptySpawnBlock(p_328923_, p_332749_, p_334188_) && this.isValidEmptySpawnBlock(p_328923_, blockpos, p_334188_); + : this.isValidEmptySpawnBlock(level, blockPos, type) && this.isValidEmptySpawnBlock(level, blockpos, type); } else { diff --git a/patches/minecraft/net/minecraft/world/entity/SpawnPlacements.java.patch b/patches/minecraft/net/minecraft/world/entity/SpawnPlacements.java.patch index 8a13eec47e..544a91a76c 100644 --- a/patches/minecraft/net/minecraft/world/entity/SpawnPlacements.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/SpawnPlacements.java.patch @@ -6,22 +6,22 @@ + /** @deprecated FORGE: use SpawnPlacementRegisterEvent to register and modify spawn placements */ private static void register( - EntityType p_21755_, SpawnPlacementType p_331557_, Heightmap.Types p_21757_, SpawnPlacements.SpawnPredicate p_21758_ + final EntityType type, + final SpawnPlacementType placementType, +@@ -78,7 +_,8 @@ + final EntityType type, final ServerLevelAccessor level, final EntitySpawnReason spawnReason, final BlockPos pos, final RandomSource random ) { -@@ -75,7 +_,8 @@ - EntityType p_217075_, ServerLevelAccessor p_217076_, EntitySpawnReason p_369208_, BlockPos p_217078_, RandomSource p_217079_ - ) { - SpawnPlacements.Data spawnplacements$data = DATA_BY_TYPE.get(p_217075_); -- return spawnplacements$data == null || spawnplacements$data.predicate.test((EntityType)p_217075_, p_217076_, p_369208_, p_217078_, p_217079_); -+ boolean vanillaResult = spawnplacements$data == null || spawnplacements$data.predicate.test((EntityType)p_217075_, p_217076_, p_369208_, p_217078_, p_217079_); -+ return net.minecraftforge.event.ForgeEventFactory.checkSpawnPlacements(p_217075_, p_217076_, p_369208_, p_217078_, p_217079_, vanillaResult); + SpawnPlacements.Data spawnplacements$data = DATA_BY_TYPE.get(type); +- return spawnplacements$data == null || spawnplacements$data.predicate.test((EntityType)type, level, spawnReason, pos, random); ++ boolean vanillaResult = spawnplacements$data == null || spawnplacements$data.predicate.test((EntityType)type, level, spawnReason, pos, random); ++ return net.minecraftforge.event.ForgeEventFactory.checkSpawnPlacements(type, level, spawnReason, pos, random, vanillaResult); } static { -@@ -169,5 +_,13 @@ +@@ -191,5 +_,13 @@ @FunctionalInterface public interface SpawnPredicate { - boolean test(EntityType p_217081_, ServerLevelAccessor p_217082_, EntitySpawnReason p_365908_, BlockPos p_217084_, RandomSource p_217085_); + boolean test(EntityType type, ServerLevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random); + } + + // ******* FORGE START. INTERNAL USE ONLY! ****** // diff --git a/patches/minecraft/net/minecraft/world/entity/TamableAnimal.java.patch b/patches/minecraft/net/minecraft/world/entity/TamableAnimal.java.patch index a7004f7c2a..4521d3060f 100644 --- a/patches/minecraft/net/minecraft/world/entity/TamableAnimal.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/TamableAnimal.java.patch @@ -1,12 +1,23 @@ --- a/net/minecraft/world/entity/TamableAnimal.java +++ b/net/minecraft/world/entity/TamableAnimal.java -@@ -210,13 +_,16 @@ +@@ -135,9 +_,9 @@ + + protected void feed(final Player player, final InteractionHand hand, final ItemStack itemStack, final float healingFactor, final float defaultHeal) { + FoodProperties foodproperties = itemStack.get(DataComponents.FOOD); +- this.usePlayerItem(player, hand, itemStack); + this.heal(foodproperties != null ? healingFactor * foodproperties.nutrition() : defaultHeal); + this.playEatingSound(); ++ this.usePlayerItem(player, hand, itemStack); + } + + public boolean isInSittingPose() { +@@ -222,13 +_,16 @@ @Override - public void die(DamageSource p_21809_) { + public void die(final DamageSource source) { + // FORGE: Super moved to top so that death message would be cancelled properly + var deathMessage = this.getCombatTracker().getDeathMessage(); -+ super.die(p_21809_); ++ super.die(source); + + if (this.dead) if (this.level() instanceof ServerLevel serverlevel @@ -16,7 +27,7 @@ + serverplayer.sendSystemMessage(deathMessage); } - -- super.die(p_21809_); +- super.die(source); } public boolean isOrderedToSit() { diff --git a/patches/minecraft/net/minecraft/world/entity/ai/Brain.java.patch b/patches/minecraft/net/minecraft/world/entity/ai/Brain.java.patch index 66f661d21d..f38f2542a9 100644 --- a/patches/minecraft/net/minecraft/world/entity/ai/Brain.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/ai/Brain.java.patch @@ -1,17 +1,17 @@ --- a/net/minecraft/world/entity/ai/Brain.java +++ b/net/minecraft/world/entity/ai/Brain.java -@@ -232,6 +_,10 @@ - this.schedule = p_455227_; +@@ -259,6 +_,10 @@ + this.schedule = schedule; } + public EnvironmentAttribute getSchedule() { + return this.schedule; + } + - public void setCoreActivities(Set p_21931_) { - this.coreActivities = p_21931_; + public void setCoreActivities(final Set activities) { + this.coreActivities = activities; } -@@ -493,6 +_,30 @@ +@@ -460,6 +_,31 @@ public boolean isBrainDead() { return this.memories.isEmpty() && this.sensors.isEmpty() && this.availableBehaviorsByPriority.isEmpty(); @@ -32,6 +32,7 @@ + } + + public void copyFromBuilder(net.minecraftforge.common.util.BrainBuilder builder) { ++ builder.getMemoryTypes().forEach(this::registerMemory); + builder.addAvailableBehaviorsByPriorityTo(this.availableBehaviorsByPriority); + this.setSchedule(builder.getSchedule()); + builder.addActivityRequirementsTo(this.activityRequirements); @@ -41,4 +42,4 @@ + this.activeActivities.addAll(builder.getActiveActivites()); } - static final class MemoryValue { + @FunctionalInterface diff --git a/patches/minecraft/net/minecraft/world/entity/ai/attributes/AttributeSupplier.java.patch b/patches/minecraft/net/minecraft/world/entity/ai/attributes/AttributeSupplier.java.patch index be2f1cbdab..aef61b29b6 100644 --- a/patches/minecraft/net/minecraft/world/entity/ai/attributes/AttributeSupplier.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/ai/attributes/AttributeSupplier.java.patch @@ -24,8 +24,8 @@ + return this.builder.containsKey(attribute); + } - private AttributeInstance create(Holder p_334904_) { - AttributeInstance attributeinstance = new AttributeInstance(p_334904_, p_326800_ -> { + private AttributeInstance create(final Holder attribute) { + AttributeInstance attributeinstance = new AttributeInstance(attribute, attributeInstance -> { @@ -91,7 +_,8 @@ public AttributeSupplier build() { diff --git a/patches/minecraft/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java.patch b/patches/minecraft/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java.patch index 8fd8ba9f24..ba269cd065 100644 --- a/patches/minecraft/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java.patch @@ -3,15 +3,15 @@ @@ -188,11 +_,12 @@ .build(); - public static AttributeSupplier getSupplier(EntityType p_22298_) { -- return SUPPLIERS.get(p_22298_); -+ AttributeSupplier supplier = net.minecraftforge.common.ForgeHooks.getAttributesView().get(p_22298_); -+ return supplier != null ? supplier : SUPPLIERS.get(p_22298_); + public static AttributeSupplier getSupplier(final EntityType type) { +- return SUPPLIERS.get(type); ++ AttributeSupplier supplier = net.minecraftforge.common.ForgeHooks.getAttributesView().get(type); ++ return supplier != null ? supplier : SUPPLIERS.get(type); } - public static boolean hasSupplier(EntityType p_22302_) { -- return SUPPLIERS.containsKey(p_22302_); -+ return SUPPLIERS.containsKey(p_22302_) || net.minecraftforge.common.ForgeHooks.getAttributesView().containsKey(p_22302_); + public static boolean hasSupplier(final EntityType type) { +- return SUPPLIERS.containsKey(type); ++ return SUPPLIERS.containsKey(type) || net.minecraftforge.common.ForgeHooks.getAttributesView().containsKey(type); } public static void validate() { diff --git a/patches/minecraft/net/minecraft/world/entity/ai/behavior/CrossbowAttack.java.patch b/patches/minecraft/net/minecraft/world/entity/ai/behavior/CrossbowAttack.java.patch index c09c20c210..9b06cbc7f4 100644 --- a/patches/minecraft/net/minecraft/world/entity/ai/behavior/CrossbowAttack.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/ai/behavior/CrossbowAttack.java.patch @@ -2,28 +2,28 @@ +++ b/net/minecraft/world/entity/ai/behavior/CrossbowAttack.java @@ -25,7 +_,7 @@ - protected boolean checkExtraStartConditions(ServerLevel p_22778_, E p_22779_) { - LivingEntity livingentity = getAttackTarget(p_22779_); -- return p_22779_.isHolding(Items.CROSSBOW) && BehaviorUtils.canSee(p_22779_, livingentity) && BehaviorUtils.isWithinAttackRange(p_22779_, livingentity, 0); -+ return p_22779_.isHolding(is -> is.getItem() instanceof CrossbowItem) && BehaviorUtils.canSee(p_22779_, livingentity) && BehaviorUtils.isWithinAttackRange(p_22779_, livingentity, 0); + protected boolean checkExtraStartConditions(final ServerLevel level, final E body) { + LivingEntity livingentity = getAttackTarget(body); +- return body.isHolding(Items.CROSSBOW) && BehaviorUtils.canSee(body, livingentity) && BehaviorUtils.isWithinAttackRange(body, livingentity, 0); ++ return body.isHolding(is -> is.getItem() instanceof CrossbowItem) && BehaviorUtils.canSee(body, livingentity) && BehaviorUtils.isWithinAttackRange(body, livingentity, 0); } - protected boolean canStillUse(ServerLevel p_22781_, E p_22782_, long p_22783_) { + protected boolean canStillUse(final ServerLevel level, final E body, final long timestamp) { @@ -43,7 +_,7 @@ - p_22806_.stopUsingItem(); + body.stopUsingItem(); } -- if (p_22806_.isHolding(Items.CROSSBOW)) { -+ if (p_22806_.isHolding(is -> is.getItem() instanceof CrossbowItem)) { - p_22806_.setChargingCrossbow(false); - p_22806_.getUseItem().set(DataComponents.CHARGED_PROJECTILES, ChargedProjectiles.EMPTY); +- if (body.isHolding(Items.CROSSBOW)) { ++ if (body.isHolding(is -> is.getItem() instanceof CrossbowItem)) { + body.setChargingCrossbow(false); + body.getUseItem().set(DataComponents.CHARGED_PROJECTILES, ChargedProjectiles.EMPTY); } @@ -51,7 +_,7 @@ - private void crossbowAttack(E p_22787_, LivingEntity p_22788_) { + private void crossbowAttack(final E body, final LivingEntity target) { if (this.crossbowState == CrossbowAttack.CrossbowState.UNCHARGED) { -- p_22787_.startUsingItem(ProjectileUtil.getWeaponHoldingHand(p_22787_, Items.CROSSBOW)); -+ p_22787_.startUsingItem(ProjectileUtil.getWeaponHoldingHand(p_22787_, item -> item instanceof CrossbowItem)); +- body.startUsingItem(ProjectileUtil.getWeaponHoldingHand(body, Items.CROSSBOW)); ++ body.startUsingItem(ProjectileUtil.getWeaponHoldingHand(body, item -> item instanceof CrossbowItem)); this.crossbowState = CrossbowAttack.CrossbowState.CHARGING; - p_22787_.setChargingCrossbow(true); + body.setChargingCrossbow(true); } else if (this.crossbowState == CrossbowAttack.CrossbowState.CHARGING) { diff --git a/patches/minecraft/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java.patch b/patches/minecraft/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java.patch index 36dcf3b93f..4bfab8f426 100644 --- a/patches/minecraft/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java.patch @@ -3,19 +3,19 @@ @@ -46,7 +_,7 @@ } - protected boolean checkExtraStartConditions(ServerLevel p_23174_, Villager p_460921_) { -- if (!p_23174_.getGameRules().get(GameRules.MOB_GRIEFING)) { -+ if (!net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(p_23174_, p_460921_)) { + protected boolean checkExtraStartConditions(final ServerLevel level, final Villager body) { +- if (!level.getGameRules().get(GameRules.MOB_GRIEFING)) { ++ if (!net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(level, body)) { return false; - } else if (!p_460921_.getVillagerData().profession().is(VillagerProfession.FARMER)) { + } else if (!body.getVillagerData().profession().is(VillagerProfession.FARMER)) { return false; -@@ -116,6 +_,11 @@ - p_23196_.setBlockAndUpdate(this.aboveFarmlandPos, blockstate1); - p_23196_.gameEvent(GameEvent.BLOCK_PLACE, this.aboveFarmlandPos, GameEvent.Context.of(p_457898_, blockstate1)); +@@ -118,6 +_,11 @@ + level.setBlockAndUpdate(this.aboveFarmlandPos, blockstate1); + level.gameEvent(GameEvent.BLOCK_PLACE, this.aboveFarmlandPos, GameEvent.Context.of(body, blockstate1)); flag = true; + } else if (itemstack.getItem() instanceof net.minecraftforge.common.IPlantable) { -+ if (((net.minecraftforge.common.IPlantable) itemstack.getItem()).getPlantType(p_23196_, aboveFarmlandPos) == net.minecraftforge.common.PlantType.CROP) { -+ p_23196_.setBlock(aboveFarmlandPos, ((net.minecraftforge.common.IPlantable) itemstack.getItem()).getPlant(p_23196_, aboveFarmlandPos), 3); ++ if (((net.minecraftforge.common.IPlantable) itemstack.getItem()).getPlantType(level, aboveFarmlandPos) == net.minecraftforge.common.PlantType.CROP) { ++ level.setBlock(aboveFarmlandPos, ((net.minecraftforge.common.IPlantable) itemstack.getItem()).getPlant(level, aboveFarmlandPos), 3); + flag = true; + } } diff --git a/patches/minecraft/net/minecraft/world/entity/ai/behavior/StartAttacking.java.patch b/patches/minecraft/net/minecraft/world/entity/ai/behavior/StartAttacking.java.patch index 05a22cd977..272126ac2c 100644 --- a/patches/minecraft/net/minecraft/world/entity/ai/behavior/StartAttacking.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/ai/behavior/StartAttacking.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/world/entity/ai/behavior/StartAttacking.java +++ b/net/minecraft/world/entity/ai/behavior/StartAttacking.java -@@ -28,7 +_,11 @@ - if (!p_359049_.canAttack(livingentity)) { +@@ -30,7 +_,11 @@ + if (!body.canAttack(livingentity)) { return false; } else { -- p_258778_.set(livingentity); -+ var changeTargetEvent = net.minecraftforge.event.ForgeEventFactory.onLivingChangeTargetBehavior(p_359049_, livingentity); +- attackTarget.set(livingentity); ++ var changeTargetEvent = net.minecraftforge.event.ForgeEventFactory.onLivingChangeTargetBehavior(body, livingentity); + if (changeTargetEvent == null) + return false; + -+ p_258778_.set(changeTargetEvent.getNewTarget()); - p_258779_.erase(); ++ attackTarget.set(changeTargetEvent.getNewTarget()); + cantReachSince.erase(); return true; } diff --git a/patches/minecraft/net/minecraft/world/entity/ai/behavior/Swim.java.patch b/patches/minecraft/net/minecraft/world/entity/ai/behavior/Swim.java.patch index 088cae90ad..62c54642c5 100644 --- a/patches/minecraft/net/minecraft/world/entity/ai/behavior/Swim.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/ai/behavior/Swim.java.patch @@ -3,9 +3,9 @@ @@ -14,7 +_,7 @@ } - public static boolean shouldSwim(T p_327994_) { -- return p_327994_.isInWater() && p_327994_.getFluidHeight(FluidTags.WATER) > p_327994_.getFluidJumpThreshold() || p_327994_.isInLava(); -+ return p_327994_.isInWater() &&p_327994_.getFluidHeight(FluidTags.WATER) > p_327994_.getFluidJumpThreshold() || p_327994_.isInLava() || p_327994_.isInFluidType((fluidType, height) -> p_327994_.canSwimInFluidType(fluidType) && height > p_327994_.getFluidJumpThreshold()); + public static boolean shouldSwim(final T mob) { +- return mob.isInWater() && mob.getFluidHeight(FluidTags.WATER) > mob.getFluidJumpThreshold() || mob.isInLava(); ++ return mob.isInWater() && mob.getFluidHeight(FluidTags.WATER) > mob.getFluidJumpThreshold() || mob.isInLava() || mob.isInFluidType((fluidType, height) -> mob.canSwimInFluidType(fluidType) && height > mob.getFluidJumpThreshold()); } - protected boolean checkExtraStartConditions(ServerLevel p_24388_, Mob p_24389_) { + protected boolean checkExtraStartConditions(final ServerLevel level, final Mob body) { diff --git a/patches/minecraft/net/minecraft/world/entity/ai/goal/MeleeAttackGoal.java.patch b/patches/minecraft/net/minecraft/world/entity/ai/goal/MeleeAttackGoal.java.patch index 20e1bfa81e..f5f27e8f56 100644 --- a/patches/minecraft/net/minecraft/world/entity/ai/goal/MeleeAttackGoal.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/ai/goal/MeleeAttackGoal.java.patch @@ -7,8 +7,8 @@ + private int failedPathFindingPenalty = 0; + private boolean canPenalize = false; - public MeleeAttackGoal(PathfinderMob p_25552_, double p_25553_, boolean p_25554_) { - this.mob = p_25552_; + public MeleeAttackGoal(final PathfinderMob mob, final double speedModifier, final boolean followingTargetEvenIfNotSeen) { + this.mob = mob; @@ -42,6 +_,15 @@ } else if (!livingentity.isAlive()) { return false; diff --git a/patches/minecraft/net/minecraft/world/entity/ai/goal/RangedBowAttackGoal.java.patch b/patches/minecraft/net/minecraft/world/entity/ai/goal/RangedBowAttackGoal.java.patch index cb4b11de24..65e29e3ae3 100644 --- a/patches/minecraft/net/minecraft/world/entity/ai/goal/RangedBowAttackGoal.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/ai/goal/RangedBowAttackGoal.java.patch @@ -17,9 +17,9 @@ + this((T)p_25792_, p_25793_, p_25794_, p_25795_); + } + - public RangedBowAttackGoal(T p_25792_, double p_25793_, int p_25794_, float p_25795_) { - this.mob = p_25792_; - this.speedModifier = p_25793_; + public RangedBowAttackGoal(final T mob, final double speedModifier, final int attackIntervalMin, final float attackRadius) { + this.mob = mob; + this.speedModifier = speedModifier; @@ -38,7 +_,7 @@ } diff --git a/patches/minecraft/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java.patch b/patches/minecraft/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java.patch index 719ac84f55..456058e5ba 100644 --- a/patches/minecraft/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java +++ b/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java -@@ -35,7 +_,7 @@ +@@ -34,7 +_,7 @@ @Override public boolean canUse() { @@ -9,13 +9,13 @@ return false; } else if (this.nextStartTick > 0) { this.nextStartTick--; -@@ -149,7 +_,8 @@ +@@ -142,7 +_,8 @@ ); return chunkaccess == null ? false -- : chunkaccess.getBlockState(p_25851_).is(this.blockToRemove) -+ : !chunkaccess.getBlockState(p_25851_).canEntityDestroy(p_25850_, p_25851_, this.removerMob) ? false -+ : chunkaccess.getBlockState(p_25851_).is(this.blockToRemove) - && chunkaccess.getBlockState(p_25851_.above()).isAir() - && chunkaccess.getBlockState(p_25851_.above(2)).isAir(); +- : chunkaccess.getBlockState(pos).is(this.blockToRemove) ++ : !chunkaccess.getBlockState(pos).canEntityDestroy(level, pos, this.removerMob) ? false ++ : chunkaccess.getBlockState(pos).is(this.blockToRemove) + && chunkaccess.getBlockState(pos.above()).isAir() + && chunkaccess.getBlockState(pos.above(2)).isAir(); } diff --git a/patches/minecraft/net/minecraft/world/entity/ai/navigation/PathNavigation.java.patch b/patches/minecraft/net/minecraft/world/entity/ai/navigation/PathNavigation.java.patch index 7b8b634eb4..8d2fdb7964 100644 --- a/patches/minecraft/net/minecraft/world/entity/ai/navigation/PathNavigation.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/ai/navigation/PathNavigation.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/ai/navigation/PathNavigation.java +++ b/net/minecraft/world/entity/ai/navigation/PathNavigation.java -@@ -245,10 +_,10 @@ +@@ -242,10 +_,10 @@ Vec3 vec3 = this.getTempMobPos(); this.maxDistanceToWaypoint = this.mob.getBbWidth() > 0.75F ? this.mob.getBbWidth() / 2.0F : 0.75F - this.mob.getBbWidth() / 2.0F; Vec3i vec3i = this.path.getNextNodePos(); diff --git a/patches/minecraft/net/minecraft/world/entity/ai/navigation/WallClimberNavigation.java.patch b/patches/minecraft/net/minecraft/world/entity/ai/navigation/WallClimberNavigation.java.patch index cae1e4fe1d..40c1a64042 100644 --- a/patches/minecraft/net/minecraft/world/entity/ai/navigation/WallClimberNavigation.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/ai/navigation/WallClimberNavigation.java.patch @@ -12,6 +12,6 @@ - )) { + // FORGE: Fix MC-94054 + if (!this.pathToPosition.closerToCenterThan(this.mob.position(), Math.max((double)this.mob.getBbWidth(), 1.0D)) && (!(this.mob.getY() > (double)this.pathToPosition.getY()) || !(BlockPos.containing((double)this.pathToPosition.getX(), this.mob.getY(), (double)this.pathToPosition.getZ())).closerToCenterThan(this.mob.position(), Math.max((double)this.mob.getBbWidth(), 1.0D)))) { - this.mob.getMoveControl().setWantedPosition(this.pathToPosition.getX(), this.pathToPosition.getY(), this.pathToPosition.getZ(), this.speedModifier); - } else { - this.pathToPosition = null; + this.mob + .getMoveControl() + .setWantedPosition(this.pathToPosition.getX(), this.pathToPosition.getY(), this.pathToPosition.getZ(), this.speedModifier); diff --git a/patches/minecraft/net/minecraft/world/entity/ai/village/VillageSiege.java.patch b/patches/minecraft/net/minecraft/world/entity/ai/village/VillageSiege.java.patch index 5220b57966..625ea6aecc 100644 --- a/patches/minecraft/net/minecraft/world/entity/ai/village/VillageSiege.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/ai/village/VillageSiege.java.patch @@ -1,23 +1,23 @@ --- a/net/minecraft/world/entity/ai/village/VillageSiege.java +++ b/net/minecraft/world/entity/ai/village/VillageSiege.java -@@ -71,7 +_,10 @@ +@@ -78,7 +_,10 @@ this.spawnX = blockpos.getX() + Mth.floor(Mth.cos(f) * 32.0F); this.spawnY = blockpos.getY(); this.spawnZ = blockpos.getZ() + Mth.floor(Mth.sin(f) * 32.0F); -- if (this.findRandomSpawnPos(p_27008_, new BlockPos(this.spawnX, this.spawnY, this.spawnZ)) != null) { -+ Vec3 siegeLocation = this.findRandomSpawnPos(p_27008_, new BlockPos(this.spawnX, this.spawnY, this.spawnZ)); +- if (this.findRandomSpawnPos(level, new BlockPos(this.spawnX, this.spawnY, this.spawnZ)) != null) { ++ Vec3 siegeLocation = this.findRandomSpawnPos(level, new BlockPos(this.spawnX, this.spawnY, this.spawnZ)); + if (siegeLocation != null) { -+ if (net.minecraftforge.event.village.VillageSiegeEvent.BUS.post(new net.minecraftforge.event.village.VillageSiegeEvent(this, p_27008_, player, siegeLocation))) ++ if (net.minecraftforge.event.village.VillageSiegeEvent.BUS.post(new net.minecraftforge.event.village.VillageSiegeEvent(this, level, player, siegeLocation))) + return false; this.nextSpawnTime = 0; this.zombiesToSpawn = 20; break; -@@ -91,7 +_,7 @@ +@@ -98,7 +_,7 @@ if (vec3 != null) { Zombie zombie; try { -- zombie = new Zombie(p_27017_); -+ zombie = EntityType.ZOMBIE.create(p_27017_, EntitySpawnReason.EVENT); //Forge: Direct Initialization is deprecated, use EntityType. - zombie.finalizeSpawn(p_27017_, p_27017_.getCurrentDifficultyAt(zombie.blockPosition()), EntitySpawnReason.EVENT, null); +- zombie = new Zombie(level); ++ zombie = EntityType.ZOMBIE.create(level, EntitySpawnReason.EVENT); //Forge: Direct Initialization is deprecated, use EntityType. + zombie.finalizeSpawn(level, level.getCurrentDifficultyAt(zombie.blockPosition()), EntitySpawnReason.EVENT, null); } catch (Exception exception) { LOGGER.warn("Failed to create zombie for village siege at {}", vec3, exception); diff --git a/patches/minecraft/net/minecraft/world/entity/ai/village/poi/PoiTypes.java.patch b/patches/minecraft/net/minecraft/world/entity/ai/village/poi/PoiTypes.java.patch index cda058566e..a7cda5bfac 100644 --- a/patches/minecraft/net/minecraft/world/entity/ai/village/poi/PoiTypes.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/ai/village/poi/PoiTypes.java.patch @@ -1,19 +1,19 @@ --- a/net/minecraft/world/entity/ai/village/poi/PoiTypes.java +++ b/net/minecraft/world/entity/ai/village/poi/PoiTypes.java -@@ -73,7 +_,7 @@ +@@ -80,7 +_,7 @@ .stream() - .flatMap(p_421797_ -> p_421797_.getStateDefinition().getPossibleStates().stream()) + .flatMap(block -> block.getStateDefinition().getPossibleStates().stream()) .collect(ImmutableSet.toImmutableSet()); - private static final Map> TYPE_BY_STATE = Maps.newHashMap(); + private static final Map> TYPE_BY_STATE = net.minecraftforge.registries.GameData.PoiTypeCallbacks.getStateToPoi(); - private static Set getBlockStates(Block p_218074_) { - return ImmutableSet.copyOf(p_218074_.getStateDefinition().getPossibleStates()); -@@ -86,7 +_,6 @@ - private static PoiType register(Registry p_218085_, ResourceKey p_218086_, Set p_218087_, int p_218088_, int p_218089_) { - PoiType poitype = new PoiType(p_218087_, p_218088_, p_218089_); - Registry.register(p_218085_, p_218086_, poitype); -- registerBlockStates(p_218085_.getOrThrow(p_218086_), p_218087_); + private static Set getBlockStates(final Block block) { + return ImmutableSet.copyOf(block.getStateDefinition().getPossibleStates()); +@@ -95,7 +_,6 @@ + ) { + PoiType poitype = new PoiType(matchingStates, maxTickets, validRange); + Registry.register(registry, id, poitype); +- registerBlockStates(registry.getOrThrow(id), matchingStates); return poitype; } diff --git a/patches/minecraft/net/minecraft/world/entity/animal/Animal.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/Animal.java.patch index a84ce982bc..400ed425de 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/Animal.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/Animal.java.patch @@ -2,17 +2,17 @@ +++ b/net/minecraft/world/entity/animal/Animal.java @@ -208,6 +_,17 @@ - public void spawnChildFromBreeding(ServerLevel p_27564_, Animal p_27565_) { - AgeableMob ageablemob = this.getBreedOffspring(p_27564_, p_27565_); -+ final var event = new net.minecraftforge.event.entity.living.BabyEntitySpawnEvent(this, p_27565_, ageablemob); + public void spawnChildFromBreeding(final ServerLevel level, final Animal partner) { + AgeableMob ageablemob = this.getBreedOffspring(level, partner); ++ final var event = new net.minecraftforge.event.entity.living.BabyEntitySpawnEvent(this, partner, ageablemob); + final boolean cancelled = net.minecraftforge.event.entity.living.BabyEntitySpawnEvent.BUS.post(event); + ageablemob = event.getChild(); + if (cancelled) { + //Reset the "inLove" state for the animals + this.setAge(6000); -+ p_27565_.setAge(6000); ++ partner.setAge(6000); + this.resetLove(); -+ p_27565_.resetLove(); ++ partner.resetLove(); + return; + } if (ageablemob != null) { diff --git a/patches/minecraft/net/minecraft/world/entity/animal/allay/Allay.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/allay/Allay.java.patch index 520b623335..6317c63315 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/allay/Allay.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/allay/Allay.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/entity/animal/allay/Allay.java +++ b/net/minecraft/world/entity/animal/allay/Allay.java -@@ -352,7 +_,7 @@ - public boolean wantsToPickUp(ServerLevel p_363882_, ItemStack p_218387_) { +@@ -336,7 +_,7 @@ + public boolean wantsToPickUp(final ServerLevel level, final ItemStack itemStack) { ItemStack itemstack = this.getItemInHand(InteractionHand.MAIN_HAND); return !itemstack.isEmpty() -- && p_363882_.getGameRules().get(GameRules.MOB_GRIEFING) -+ && net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(p_363882_, this) - && this.inventory.canAddItem(p_218387_) - && this.allayConsidersItemEqual(itemstack, p_218387_); +- && level.getGameRules().get(GameRules.MOB_GRIEFING) ++ && net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(level, this) + && this.inventory.canAddItem(itemStack) + && this.allayConsidersItemEqual(itemstack, itemStack); } diff --git a/patches/minecraft/net/minecraft/world/entity/animal/bee/Bee.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/bee/Bee.java.patch index a4b47ed9ab..0122e94011 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/bee/Bee.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/bee/Bee.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/bee/Bee.java +++ b/net/minecraft/world/entity/animal/bee/Bee.java -@@ -492,7 +_,9 @@ +@@ -483,7 +_,9 @@ if (this.hivePos == null) { return null; } else { @@ -11,11 +11,11 @@ } } -@@ -654,13 +_,22 @@ +@@ -649,13 +_,22 @@ } @Override -- protected void jumpInLiquid(TagKey p_453030_) { +- protected void jumpInLiquid(final TagKey type) { - this.setDeltaMovement(this.getDeltaMovement().add(0.0, 0.01, 0.0)); - } - @@ -38,4 +38,4 @@ + this.jumpInLiquidInternal(); } - boolean closerThan(BlockPos p_459558_, int p_453557_) { + private boolean closerThan(final BlockPos targetPos, final int distance) { diff --git a/patches/minecraft/net/minecraft/world/entity/animal/camel/Camel.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/camel/Camel.java.patch index e6df583fb1..ae3cf693ef 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/camel/Camel.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/camel/Camel.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/entity/animal/camel/Camel.java +++ b/net/minecraft/world/entity/animal/camel/Camel.java -@@ -351,7 +_,7 @@ +@@ -359,7 +_,7 @@ @Override - protected void playStepSound(BlockPos p_252056_, BlockState p_251457_) { -- if (p_251457_.is(BlockTags.CAMEL_SAND_STEP_SOUND_BLOCKS)) { -+ if (p_251457_.getSoundType(level(), p_252056_, this) == net.minecraft.world.level.block.SoundType.SAND) { + protected void playStepSound(final BlockPos pos, final BlockState blockState) { +- if (blockState.is(BlockTags.CAMEL_SAND_STEP_SOUND_BLOCKS)) { ++ if (blockState.getSoundType(level(), pos, this) == net.minecraft.world.level.block.SoundType.SAND) { this.playSound(SoundEvents.CAMEL_STEP_SAND, 1.0F, 1.0F); } else { this.playSound(SoundEvents.CAMEL_STEP, 1.0F, 1.0F); diff --git a/patches/minecraft/net/minecraft/world/entity/animal/cow/MushroomCow.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/cow/MushroomCow.java.patch index c2298b3999..5f90c66e95 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/cow/MushroomCow.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/cow/MushroomCow.java.patch @@ -8,32 +8,32 @@ + } else if (false && itemstack.is(Items.SHEARS) && this.readyForShearing()) { if (this.level() instanceof ServerLevel serverlevel) { this.shear(serverlevel, SoundSource.PLAYERS, itemstack); - this.gameEvent(GameEvent.SHEAR, p_454203_); + this.gameEvent(GameEvent.SHEAR, player); @@ -170,15 +_,26 @@ @Override - public void shear(ServerLevel p_454992_, SoundSource p_460786_, ItemStack p_454795_) { -+ for (var stack : shearInternal(p_454992_, p_460786_, p_454795_)) { + public void shear(final ServerLevel level, final SoundSource soundSource, final ItemStack tool) { ++ for (var stack : shearInternal(level, soundSource, tool)) { + for (int i = 0; i < stack.getCount(); i++) { + this.level().addFreshEntity(new ItemEntity(this.level(), this.getX(), this.getY(1.0D), this.getZ(), stack.copyWithCount(1))); + } + } + } + -+ private java.util.List shearInternal(ServerLevel p_454992_, SoundSource p_460786_, ItemStack p_454795_) { ++ private java.util.List shearInternal(ServerLevel level, SoundSource soundSource, ItemStack tool) { + var ret = new java.util.ArrayList(); + if (!net.minecraftforge.event.ForgeEventFactory.canLivingConvert(this, EntityType.COW, time -> {})) + return ret; - p_454992_.playSound(null, this, SoundEvents.MOOSHROOM_SHEAR, p_460786_, 1.0F, 1.0F); - this.convertTo(EntityType.COW, ConversionParams.single(this, false, false), p_458024_ -> { - p_454992_.sendParticles(ParticleTypes.EXPLOSION, this.getX(), this.getY(0.5), this.getZ(), 1, 0.0, 0.0, 0.0, 0.0); - this.dropFromShearingLootTable(p_454992_, BuiltInLootTables.SHEAR_MOOSHROOM, p_454795_, (p_460709_, p_451895_) -> { -- for (int i = 0; i < p_451895_.getCount(); i++) { -- p_460709_.addFreshEntity(new ItemEntity(this.level(), this.getX(), this.getY(1.0), this.getZ(), p_451895_.copyWithCount(1))); + level.playSound(null, this, SoundEvents.MOOSHROOM_SHEAR, soundSource, 1.0F, 1.0F); + this.convertTo(EntityType.COW, ConversionParams.single(this, false, false), cow -> { + level.sendParticles(ParticleTypes.EXPLOSION, this.getX(), this.getY(0.5), this.getZ(), 1, 0.0, 0.0, 0.0, 0.0); + this.dropFromShearingLootTable(level, BuiltInLootTables.SHEAR_MOOSHROOM, tool, (l, drop) -> { +- for (int i = 0; i < drop.getCount(); i++) { +- l.addFreshEntity(new ItemEntity(this.level(), this.getX(), this.getY(1.0), this.getZ(), drop.copyWithCount(1))); - } -+ ret.add(p_451895_); ++ ret.add(tool); }); -+ net.minecraftforge.event.ForgeEventFactory.onLivingConvert(this, p_458024_); ++ net.minecraftforge.event.ForgeEventFactory.onLivingConvert(this, cow); }); + return ret; } diff --git a/patches/minecraft/net/minecraft/world/entity/animal/equine/AbstractHorse.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/equine/AbstractHorse.java.patch index e61dec3c31..8db3819f1d 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/equine/AbstractHorse.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/equine/AbstractHorse.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/equine/AbstractHorse.java +++ b/net/minecraft/world/entity/animal/equine/AbstractHorse.java -@@ -140,6 +_,7 @@ +@@ -144,6 +_,7 @@ } this.addBehaviourGoals(); @@ -8,42 +8,53 @@ } protected void addBehaviourGoals() { -@@ -274,6 +_,11 @@ +@@ -279,16 +_,19 @@ @Override - public boolean causeFallDamage(double p_454114_, float p_458836_, DamageSource p_450439_) { -+ var event = net.minecraftforge.event.ForgeEventFactory.onLivingFall(this, p_454114_, p_458836_); + public boolean causeFallDamage(final double fallDistance, final float damageModifier, final DamageSource damageSource) { +- if (fallDistance > 1.0) { ++ var event = net.minecraftforge.event.ForgeEventFactory.onLivingFall(this, fallDistance, damageModifier); + if (event == null) return false; -+ p_454114_ = event.getDistance(); -+ p_458836_ = event.getDamageMultiplier(); + - if (p_454114_ > 1.0) { - this.playSound(SoundEvents.HORSE_LAND, 0.4F, 1.0F); ++ if (event.getDistance() > 1.0) { + this.playSound(this.isBaby() ? SoundEvents.HORSE_LAND_BABY : SoundEvents.HORSE_LAND, 0.4F, 1.0F); } -@@ -339,9 +_,9 @@ - protected void playStepSound(BlockPos p_457686_, BlockState p_459257_) { - if (!p_459257_.liquid()) { - BlockState blockstate = this.level().getBlockState(p_457686_.above()); -- SoundType soundtype = p_459257_.getSoundType(); -+ SoundType soundtype = p_459257_.getSoundType(level(), p_457686_, this); + +- int i = this.calculateFallDamage(fallDistance, damageModifier); ++ int i = this.calculateFallDamage(event.getDistance(), event.getDamageMultiplier()); + if (i <= 0) { + return false; + } else { + this.hurt(damageSource, i); +- this.propagateFallToPassengers(fallDistance, damageModifier, damageSource); ++ this.propagateFallToPassengers(event.getDistance(), event.getDamageMultiplier(), damageSource); + this.playBlockFallSound(); + return true; + } +@@ -344,9 +_,9 @@ + protected void playStepSound(final BlockPos pos, final BlockState blockState) { + if (!blockState.liquid()) { + BlockState blockstate = this.level().getBlockState(pos.above()); +- SoundType soundtype = blockState.getSoundType(); ++ SoundType soundtype = blockState.getSoundType(level(), pos, this); if (blockstate.is(Blocks.SNOW)) { - soundtype = blockstate.getSoundType(); -+ soundtype = blockstate.getSoundType(level(), p_457686_.above(), this); ++ soundtype = blockstate.getSoundType(level(), pos.above(), this); } if (this.isVehicle() && this.canGallop) { -@@ -773,6 +_,7 @@ +@@ -778,6 +_,7 @@ float f1 = Mth.cos(this.getYRot() * (float) (Math.PI / 180.0)); - this.setDeltaMovement(this.getDeltaMovement().add(-0.4F * f * p_452386_, 0.0, 0.4F * f1 * p_452386_)); + this.setDeltaMovement(this.getDeltaMovement().add(-0.4F * f * amount, 0.0, 0.4F * f1 * amount)); } + net.minecraftforge.common.ForgeHooks.onLivingJump(this); } protected void playJumpSound() { -@@ -1013,6 +_,26 @@ +@@ -1028,6 +_,26 @@ - public boolean hasInventoryChanged(Container p_457588_) { - return this.inventory != p_457588_; + public boolean hasInventoryChanged(final Container oldInventory) { + return this.inventory != oldInventory; + } + + private net.minecraftforge.common.util.LazyOptional itemHandler = null; diff --git a/patches/minecraft/net/minecraft/world/entity/animal/equine/Llama.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/equine/Llama.java.patch index 217f52ceec..ce0078bec2 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/equine/Llama.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/equine/Llama.java.patch @@ -1,13 +1,21 @@ --- a/net/minecraft/world/entity/animal/equine/Llama.java +++ b/net/minecraft/world/entity/animal/equine/Llama.java -@@ -370,6 +_,10 @@ +@@ -369,13 +_,15 @@ @Override - public boolean causeFallDamage(double p_455330_, float p_456237_, DamageSource p_451412_) { -+ var event = net.minecraftforge.event.ForgeEventFactory.onLivingFall(this, p_455330_, p_456237_); + public boolean causeFallDamage(final double fallDistance, final float damageModifier, final DamageSource damageSource) { +- int i = this.calculateFallDamage(fallDistance, damageModifier); ++ var event = net.minecraftforge.event.ForgeEventFactory.onLivingFall(this, fallDistance, damageModifier); + if (event == null) return false; -+ p_455330_ = event.getDistance(); -+ p_456237_ = event.getDamageMultiplier(); - int i = this.calculateFallDamage(p_455330_, p_456237_); ++ int i = this.calculateFallDamage(event.getDistance(), event.getDamageMultiplier()); if (i <= 0) { return false; + } else { +- if (fallDistance >= 6.0) { ++ if (event.getDistance() >= 6.0) { + this.hurt(damageSource, i); +- this.propagateFallToPassengers(fallDistance, damageModifier, damageSource); ++ this.propagateFallToPassengers(event.getDistance(), event.getDamageMultiplier(), damageSource); + } + + this.playBlockFallSound(); diff --git a/patches/minecraft/net/minecraft/world/entity/animal/feline/Cat.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/feline/Cat.java.patch index cb8fd80ef2..f667dd8ac5 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/feline/Cat.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/feline/Cat.java.patch @@ -1,23 +1,11 @@ --- a/net/minecraft/world/entity/animal/feline/Cat.java +++ b/net/minecraft/world/entity/animal/feline/Cat.java -@@ -385,10 +_,10 @@ - } - } else if (this.isFood(itemstack) && this.getHealth() < this.getMaxHealth()) { - if (!this.level().isClientSide()) { -- this.usePlayerItem(p_460113_, p_450900_, itemstack); - FoodProperties foodproperties = itemstack.get(DataComponents.FOOD); - this.heal(foodproperties != null ? foodproperties.nutrition() : 1.0F); - this.playEatingSound(); -+ this.usePlayerItem(p_460113_, p_450900_, itemstack); - } - - return InteractionResult.SUCCESS; -@@ -449,7 +_,7 @@ +@@ -474,7 +_,7 @@ } - private void tryToTame(Player p_451247_) { + private void tryToTame(final Player player) { - if (this.random.nextInt(3) == 0) { -+ if (this.random.nextInt(3) == 0 && !net.minecraftforge.event.ForgeEventFactory.onAnimalTame(this, p_451247_)) { - this.tame(p_451247_); ++ if (this.random.nextInt(3) == 0 && !net.minecraftforge.event.ForgeEventFactory.onAnimalTame(this, player)) { + this.tame(player); this.setOrderedToSit(true); this.level().broadcastEntityEvent(this, (byte)7); diff --git a/patches/minecraft/net/minecraft/world/entity/animal/feline/Ocelot.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/feline/Ocelot.java.patch index b4cc899f23..89727d4951 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/feline/Ocelot.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/feline/Ocelot.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/entity/animal/feline/Ocelot.java +++ b/net/minecraft/world/entity/animal/feline/Ocelot.java @@ -161,7 +_,7 @@ - if ((this.temptGoal == null || this.temptGoal.isRunning()) && !this.isTrusting() && this.isFood(itemstack) && p_454842_.distanceToSqr(this) < 9.0) { - this.usePlayerItem(p_454842_, p_450856_, itemstack); + if ((this.temptGoal == null || this.temptGoal.isRunning()) && !this.isTrusting() && this.isFood(itemstack) && player.distanceToSqr(this) < 9.0) { + this.usePlayerItem(player, hand, itemstack); if (!this.level().isClientSide()) { - if (this.random.nextInt(3) == 0) { -+ if (this.random.nextInt(3) == 0 && !net.minecraftforge.event.ForgeEventFactory.onAnimalTame(this, p_454842_)) { ++ if (this.random.nextInt(3) == 0 && !net.minecraftforge.event.ForgeEventFactory.onAnimalTame(this, player)) { this.setTrusting(true); this.spawnTrustingParticles(true); this.level().broadcastEntityEvent(this, (byte)41); diff --git a/patches/minecraft/net/minecraft/world/entity/animal/fox/Fox.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/fox/Fox.java.patch index 2f19bdfa0c..93b2230e0e 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/fox/Fox.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/fox/Fox.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/fox/Fox.java +++ b/net/minecraft/world/entity/animal/fox/Fox.java -@@ -861,6 +_,17 @@ +@@ -878,6 +_,17 @@ @Override protected void breed() { Fox fox = (Fox)this.animal.getBreedOffspring(this.level, this.partner); @@ -18,7 +18,7 @@ if (fox != null) { ServerPlayer serverplayer = this.animal.getLoveCause(); ServerPlayer serverplayer1 = this.partner.getLoveCause(); -@@ -944,7 +_,7 @@ +@@ -956,7 +_,7 @@ } protected void onReachedTarget() { @@ -27,7 +27,7 @@ BlockState blockstate = Fox.this.level().getBlockState(this.blockPos); if (blockstate.is(Blocks.SWEET_BERRY_BUSH)) { this.pickSweetBerries(blockstate); -@@ -1003,7 +_,7 @@ +@@ -1016,7 +_,7 @@ @Override public boolean canUse() { diff --git a/patches/minecraft/net/minecraft/world/entity/animal/golem/CopperGolem.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/golem/CopperGolem.java.patch index 0db0866f67..e561961649 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/golem/CopperGolem.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/golem/CopperGolem.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/golem/CopperGolem.java +++ b/net/minecraft/world/entity/animal/golem/CopperGolem.java -@@ -213,7 +_,7 @@ +@@ -214,7 +_,7 @@ } Level level = this.level(); @@ -8,11 +8,11 @@ + if (false && itemstack.is(Items.SHEARS) && this.readyForShearing()) { // Forge: Moved to onSheared if (level instanceof ServerLevel serverlevel) { this.shear(serverlevel, SoundSource.PLAYERS, itemstack); - this.gameEvent(GameEvent.SHEAR, p_458561_); + this.gameEvent(GameEvent.SHEAR, player); @@ -427,6 +_,18 @@ ItemStack itemstack = this.getItemBySlot(EQUIPMENT_SLOT_ANTENNA); this.setItemSlot(EQUIPMENT_SLOT_ANTENNA, ItemStack.EMPTY); - this.spawnAtLocation(p_459970_, itemstack, 1.5F); + this.spawnAtLocation(level, itemstack, 1.5F); + } + + @Override diff --git a/patches/minecraft/net/minecraft/world/entity/animal/golem/SnowGolem.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/golem/SnowGolem.java.patch index 97d5aa552e..b8e6e513aa 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/golem/SnowGolem.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/golem/SnowGolem.java.patch @@ -4,8 +4,8 @@ import net.minecraft.world.phys.Vec3; import org.jspecify.annotations.Nullable; --public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackMob { -+public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackMob, net.minecraftforge.common.IForgeShearable { +-public class SnowGolem extends AbstractGolem implements RangedAttackMob, Shearable { ++public class SnowGolem extends AbstractGolem implements RangedAttackMob, Shearable, net.minecraftforge.common.IForgeShearable { private static final EntityDataAccessor DATA_PUMPKIN_ID = SynchedEntityData.defineId(SnowGolem.class, EntityDataSerializers.BYTE); private static final byte PUMPKIN_FLAG = 16; private static final boolean DEFAULT_PUMPKIN = true; @@ -29,13 +29,13 @@ } @@ -136,7 +_,7 @@ @Override - protected InteractionResult mobInteract(Player p_458095_, InteractionHand p_457948_) { - ItemStack itemstack = p_458095_.getItemInHand(p_457948_); + protected InteractionResult mobInteract(final Player player, final InteractionHand hand) { + ItemStack itemstack = player.getItemInHand(hand); - if (itemstack.is(Items.SHEARS) && this.readyForShearing()) { + if (false && itemstack.is(Items.SHEARS) && this.readyForShearing()) { //Forge: Moved to onSheared if (this.level() instanceof ServerLevel serverlevel) { this.shear(serverlevel, SoundSource.PLAYERS, itemstack); - this.gameEvent(GameEvent.SHEAR, p_458095_); + this.gameEvent(GameEvent.SHEAR, player); @@ -193,4 +_,17 @@ public Vec3 getLeashOffset() { return new Vec3(0.0, 0.75F * this.getEyeHeight(), this.getBbWidth() * 0.4F); diff --git a/patches/minecraft/net/minecraft/world/entity/animal/parrot/Parrot.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/parrot/Parrot.java.patch index d83d5a27f0..5696c2c99f 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/parrot/Parrot.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/parrot/Parrot.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/entity/animal/parrot/Parrot.java +++ b/net/minecraft/world/entity/animal/parrot/Parrot.java -@@ -277,7 +_,7 @@ +@@ -269,7 +_,7 @@ } if (!this.level().isClientSide()) { - if (this.random.nextInt(10) == 0) { -+ if (this.random.nextInt(10) == 0 && !net.minecraftforge.event.ForgeEventFactory.onAnimalTame(this, p_453025_)) { - this.tame(p_453025_); ++ if (this.random.nextInt(10) == 0 && !net.minecraftforge.event.ForgeEventFactory.onAnimalTame(this, player)) { + this.tame(player); this.level().broadcastEntityEvent(this, (byte)7); } else { diff --git a/patches/minecraft/net/minecraft/world/entity/animal/pig/Pig.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/pig/Pig.java.patch index e5df2dd490..819e5bdb7f 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/pig/Pig.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/pig/Pig.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/world/entity/animal/pig/Pig.java +++ b/net/minecraft/world/entity/animal/pig/Pig.java -@@ -172,10 +_,11 @@ +@@ -194,10 +_,11 @@ @Override - public void thunderHit(ServerLevel p_452901_, LightningBolt p_454063_) { -- if (p_452901_.getDifficulty() != Difficulty.PEACEFUL) { -+ if (p_452901_.getDifficulty() != Difficulty.PEACEFUL && net.minecraftforge.event.ForgeEventFactory.canLivingConvert(this, EntityType.ZOMBIFIED_PIGLIN, (timer) -> {})) { - ZombifiedPiglin zombifiedpiglin = this.convertTo(EntityType.ZOMBIFIED_PIGLIN, ConversionParams.single(this, false, true), p_456410_ -> { - p_456410_.populateDefaultEquipmentSlots(this.getRandom(), p_452901_.getCurrentDifficultyAt(this.blockPosition())); - p_456410_.setPersistenceRequired(); -+ net.minecraftforge.event.ForgeEventFactory.onLivingConvert(this, p_456410_); + public void thunderHit(final ServerLevel level, final LightningBolt lightningBolt) { +- if (level.getDifficulty() != Difficulty.PEACEFUL) { ++ if (level.getDifficulty() != Difficulty.PEACEFUL && net.minecraftforge.event.ForgeEventFactory.canLivingConvert(this, EntityType.ZOMBIFIED_PIGLIN, (timer) -> {})) { + ZombifiedPiglin zombifiedpiglin = this.convertTo(EntityType.ZOMBIFIED_PIGLIN, ConversionParams.single(this, false, true), zp -> { + zp.populateDefaultEquipmentSlots(this.getRandom(), level.getCurrentDifficultyAt(this.blockPosition())); + zp.setPersistenceRequired(); ++ net.minecraftforge.event.ForgeEventFactory.onLivingConvert(this, zp); }); if (zombifiedpiglin == null) { - super.thunderHit(p_452901_, p_454063_); + super.thunderHit(level, lightningBolt); diff --git a/patches/minecraft/net/minecraft/world/entity/animal/rabbit/Rabbit.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/rabbit/Rabbit.java.patch index 4634f3740d..2ec80e1736 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/rabbit/Rabbit.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/rabbit/Rabbit.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/rabbit/Rabbit.java +++ b/net/minecraft/world/entity/animal/rabbit/Rabbit.java -@@ -555,7 +_,7 @@ +@@ -604,7 +_,7 @@ @Override public boolean canUse() { if (this.nextStartTick <= 0) { @@ -9,12 +9,12 @@ return false; } -@@ -604,7 +_,7 @@ +@@ -653,7 +_,7 @@ @Override - protected boolean isValidTarget(LevelReader p_457725_, BlockPos p_456006_) { - BlockState blockstate = p_457725_.getBlockState(p_456006_); -- if (blockstate.is(Blocks.FARMLAND) && this.wantsToRaid && !this.canRaid) { -+ if (blockstate.getBlock() instanceof net.minecraft.world.level.block.FarmBlock && this.wantsToRaid && !this.canRaid) { - blockstate = p_457725_.getBlockState(p_456006_.above()); - if (blockstate.getBlock() instanceof CarrotBlock && ((CarrotBlock)blockstate.getBlock()).isMaxAge(blockstate)) { + protected boolean isValidTarget(final LevelReader level, final BlockPos pos) { + BlockState blockstate = level.getBlockState(pos); +- if (blockstate.is(BlockTags.SUPPORTS_CROPS) && this.wantsToRaid && !this.canRaid) { ++ if (blockstate.getBlock() instanceof net.minecraft.world.level.block.FarmlandBlock && this.wantsToRaid && !this.canRaid) { + blockstate = level.getBlockState(pos.above()); + if (blockstate.getBlock() instanceof CarrotBlock carrotblock && carrotblock.isMaxAge(blockstate)) { this.canRaid = true; diff --git a/patches/minecraft/net/minecraft/world/entity/animal/sheep/Sheep.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/sheep/Sheep.java.patch index 6b6472eea2..9b11fcd9f6 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/sheep/Sheep.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/sheep/Sheep.java.patch @@ -2,40 +2,40 @@ +++ b/net/minecraft/world/entity/animal/sheep/Sheep.java @@ -137,7 +_,7 @@ @Override - public InteractionResult mobInteract(Player p_397056_, InteractionHand p_391211_) { - ItemStack itemstack = p_397056_.getItemInHand(p_391211_); + public InteractionResult mobInteract(final Player player, final InteractionHand hand) { + ItemStack itemstack = player.getItemInHand(hand); - if (itemstack.is(Items.SHEARS)) { + if (false && itemstack.is(Items.SHEARS)) { // Forge: Moved to onSheared if (this.level() instanceof ServerLevel serverlevel && this.readyForShearing()) { this.shear(serverlevel, SoundSource.PLAYERS, itemstack); - this.gameEvent(GameEvent.SHEAR, p_397056_); + this.gameEvent(GameEvent.SHEAR, player); @@ -153,12 +_,27 @@ @Override - public void shear(ServerLevel p_397708_, SoundSource p_395553_, ItemStack p_396000_) { -+ dropItems(p_397708_, shearInternal(p_397708_, p_395553_, p_396000_)); + public void shear(final ServerLevel level, final SoundSource soundSource, final ItemStack tool) { ++ dropItems(level, shearInternal(level, soundSource, tool)); + } + -+ private java.util.List shearInternal(ServerLevel p_397708_, SoundSource p_395553_, ItemStack p_396000_) { ++ private java.util.List shearInternal(ServerLevel level, SoundSource soundSource, ItemStack tool) { + var ret = new java.util.ArrayList(); - p_397708_.playSound(null, this, SoundEvents.SHEEP_SHEAR, p_395553_, 1.0F, 1.0F); + level.playSound(null, this, SoundEvents.SHEEP_SHEAR, soundSource, 1.0F, 1.0F); this.dropFromShearingLootTable( - p_397708_, + level, BuiltInLootTables.SHEAR_SHEEP, - p_396000_, - (p_397779_, p_393350_) -> { -+ ret.add(p_393350_); + tool, + (l, drop) -> { ++ ret.add(drop); + } + ); + this.setSheared(true); + return ret; + } + -+ private void dropItems(ServerLevel p_397779_, java.util.Collection items) { ++ private void dropItems(ServerLevel l, java.util.Collection items) { + // double indented to make the patch look nicer -+ for (var p_393350_ : items) { - for (int i = 0; i < p_393350_.getCount(); i++) { - ItemEntity itementity = this.spawnAtLocation(p_397779_, p_393350_.copyWithCount(1), 1.0F); ++ for (var drop : items) { + for (int i = 0; i < drop.getCount(); i++) { + ItemEntity itementity = this.spawnAtLocation(l, drop.copyWithCount(1), 1.0F); if (itementity != null) { @@ -173,8 +_,14 @@ } diff --git a/patches/minecraft/net/minecraft/world/entity/animal/sniffer/Sniffer.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/sniffer/Sniffer.java.patch index b67df9220e..c33806747a 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/sniffer/Sniffer.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/sniffer/Sniffer.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/entity/animal/sniffer/Sniffer.java +++ b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -@@ -297,7 +_,7 @@ - +@@ -307,7 +_,7 @@ if (this.tickCount % 10 == 0) { this.level() -- .playLocalSound(this.getX(), this.getY(), this.getZ(), blockstate.getSoundType().getHitSound(), this.getSoundSource(), 0.5F, 0.5F, false); -+ .playLocalSound(this.getX(), this.getY(), this.getZ(), blockstate.getSoundType(level(), blockpos.below(), this).getHitSound(), this.getSoundSource(), 0.5F, 0.5F, false); + .playLocalSound( +- this.getX(), this.getY(), this.getZ(), blockstate.getSoundType().getHitSound(), this.getSoundSource(), 0.5F, 0.5F, false ++ this.getX(), this.getY(), this.getZ(), blockstate.getSoundType(level(), blockpos.below(), this).getHitSound(), this.getSoundSource(), 0.5F, 0.5F, false + ); } } - } diff --git a/patches/minecraft/net/minecraft/world/entity/animal/wolf/Wolf.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/wolf/Wolf.java.patch index 1551ac29e7..ba11d99b33 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/wolf/Wolf.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/wolf/Wolf.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/entity/animal/wolf/Wolf.java +++ b/net/minecraft/world/entity/animal/wolf/Wolf.java -@@ -502,7 +_,7 @@ +@@ -499,7 +_,7 @@ } - private void tryToTame(Player p_397321_) { + private void tryToTame(final Player player) { - if (this.random.nextInt(3) == 0) { -+ if (this.random.nextInt(3) == 0 && !net.minecraftforge.event.ForgeEventFactory.onAnimalTame(this, p_397321_)) { - this.tame(p_397321_); ++ if (this.random.nextInt(3) == 0 && !net.minecraftforge.event.ForgeEventFactory.onAnimalTame(this, player)) { + this.tame(player); this.navigation.stop(); this.setTarget(null); diff --git a/patches/minecraft/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch b/patches/minecraft/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch index 2af7337ff7..c3a9d284a1 100644 --- a/patches/minecraft/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -102,6 +_,15 @@ +@@ -100,6 +_,15 @@ this.setHealth(this.getMaxHealth()); this.noPhysics = true; this.phaseManager = new EnderDragonPhaseManager(this); @@ -8,16 +8,16 @@ + } + + @Override -+ public void setId(int p_20235_) { -+ super.setId(p_20235_); ++ public void setId(int id) { ++ super.setId(id); + for (int i = 0; i < this.subEntities.length; i++) { // Forge: Fix MC-158205: Set part ids to successors of parent mob id -+ this.subEntities[i].setId(p_20235_ + i + 1); ++ this.subEntities[i].setId(id + i + 1); + } } - public void setDragonFight(EndDragonFight p_287736_) { -@@ -150,8 +_,26 @@ - p_330342_.define(DATA_PHASE, EnderDragonPhase.HOVERING.getId()); + public void setDragonFight(final EnderDragonFight fight) { +@@ -148,8 +_,26 @@ + entityData.define(DATA_PHASE, EnderDragonPhase.HOVERING.getId()); } + private net.minecraft.world.entity.@Nullable EntityReference unlimitedLastHurtByPlayer = null; @@ -45,14 +45,14 @@ this.setHealth(this.getHealth()); @@ -438,7 +_,7 @@ BlockPos blockpos = new BlockPos(k1, l1, i2); - BlockState blockstate = p_363273_.getBlockState(blockpos); + BlockState blockstate = level.getBlockState(blockpos); if (!blockstate.isAir() && !blockstate.is(BlockTags.DRAGON_TRANSPARENT)) { -- if (p_363273_.getGameRules().get(GameRules.MOB_GRIEFING) && !blockstate.is(BlockTags.DRAGON_IMMUNE)) { -+ if (net.minecraftforge.common.ForgeHooks.canEntityDestroy(p_363273_, blockpos, this) && !blockstate.is(BlockTags.DRAGON_IMMUNE)) { - flag1 = p_363273_.removeBlock(blockpos, false) || flag1; +- if (level.getGameRules().get(GameRules.MOB_GRIEFING) && !blockstate.is(BlockTags.DRAGON_IMMUNE)) { ++ if (net.minecraftforge.common.ForgeHooks.canEntityDestroy(level, blockpos, this) && !blockstate.is(BlockTags.DRAGON_IMMUNE)) { + flag1 = level.removeBlock(blockpos, false) || flag1; } else { flag = true; -@@ -532,7 +_,8 @@ +@@ -537,7 +_,8 @@ if (this.level() instanceof ServerLevel serverlevel) { if (this.dragonDeathTime > 150 && this.dragonDeathTime % 5 == 0 && serverlevel.getGameRules().get(GameRules.MOB_DROPS)) { @@ -62,9 +62,9 @@ } if (this.dragonDeathTime == 1 && !this.isSilent()) { -@@ -550,7 +_,8 @@ +@@ -555,7 +_,8 @@ - if (this.dragonDeathTime == 200 && this.level() instanceof ServerLevel serverlevel1) { + if (this.dragonDeathTime >= 200 && this.level() instanceof ServerLevel serverlevel1) { if (serverlevel1.getGameRules().get(GameRules.MOB_DROPS)) { - ExperienceOrb.award(serverlevel1, this.position(), Mth.floor(i * 0.2F)); + int award = net.minecraftforge.event.ForgeEventFactory.getExperienceDrop(this, this.getUnlimitedLastHurtByPlayer(), Mth.floor((float)i * 0.2F)); @@ -72,17 +72,17 @@ } if (this.dragonFight != null) { -@@ -856,6 +_,7 @@ +@@ -861,6 +_,7 @@ @Override - public void recreateFromPacket(ClientboundAddEntityPacket p_218825_) { - super.recreateFromPacket(p_218825_); + public void recreateFromPacket(final ClientboundAddEntityPacket packet) { + super.recreateFromPacket(packet); + if (true) return; // Forge: Fix MC-158205: Moved into setId() EnderDragonPart[] aenderdragonpart = this.getSubEntities(); for (int i = 0; i < aenderdragonpart.length; i++) { -@@ -871,5 +_,15 @@ +@@ -876,5 +_,15 @@ @Override - protected float sanitizeScale(float p_333905_) { + protected float sanitizeScale(final float scale) { return 1.0F; + } + diff --git a/patches/minecraft/net/minecraft/world/entity/boss/enderdragon/EnderDragonPart.java.patch b/patches/minecraft/net/minecraft/world/entity/boss/enderdragon/EnderDragonPart.java.patch index 35f83b43b5..e20028217a 100644 --- a/patches/minecraft/net/minecraft/world/entity/boss/enderdragon/EnderDragonPart.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/boss/enderdragon/EnderDragonPart.java.patch @@ -10,9 +10,9 @@ public final String name; private final EntityDimensions size; - public EnderDragonPart(EnderDragon p_450227_, String p_453842_, float p_460816_, float p_454700_) { -- super(p_450227_.getType(), p_450227_.level()); -+ super(p_450227_); - this.size = EntityDimensions.scalable(p_460816_, p_454700_); + public EnderDragonPart(final EnderDragon parentMob, final String name, final float w, final float h) { +- super(parentMob.getType(), parentMob.level()); ++ super(parentMob); + this.size = EntityDimensions.scalable(w, h); this.refreshDimensions(); - this.parentMob = p_450227_; + this.parentMob = parentMob; diff --git a/patches/minecraft/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch b/patches/minecraft/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch index 334415faa9..be377916c3 100644 --- a/patches/minecraft/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch @@ -1,24 +1,24 @@ --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -316,7 +_,7 @@ +@@ -323,7 +_,7 @@ if (this.destroyBlocksTick > 0) { this.destroyBlocksTick--; -- if (this.destroyBlocksTick == 0 && p_363567_.getGameRules().get(GameRules.MOB_GRIEFING)) { -+ if (this.destroyBlocksTick == 0 && net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(p_363567_, this)) { +- if (this.destroyBlocksTick == 0 && level.getGameRules().get(GameRules.MOB_GRIEFING)) { ++ if (this.destroyBlocksTick == 0 && net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(level, this)) { boolean flag = false; int l = Mth.floor(this.getBbWidth() / 2.0F + 1.0F); int i1 = Mth.floor(this.getBbHeight()); -@@ -325,7 +_,7 @@ +@@ -332,7 +_,7 @@ this.getBlockX() - l, this.getBlockY(), this.getBlockZ() - l, this.getBlockX() + l, this.getBlockY() + i1, this.getBlockZ() + l )) { - BlockState blockstate = p_363567_.getBlockState(blockpos); + BlockState blockstate = level.getBlockState(blockpos); - if (canDestroy(blockstate)) { -+ if (blockstate.canEntityDestroy(p_363567_, blockpos, this) && net.minecraftforge.event.ForgeEventFactory.onEntityDestroyBlock(this, blockpos, blockstate)) { - flag = p_363567_.destroyBlock(blockpos, true, this) || flag; ++ if (blockstate.canEntityDestroy(level, blockpos, this) && net.minecraftforge.event.ForgeEventFactory.onEntityDestroyBlock(this, blockpos, blockstate)) { + flag = level.destroyBlock(blockpos, true, this) || flag; } } -@@ -344,6 +_,10 @@ +@@ -351,6 +_,10 @@ } } @@ -26,6 +26,6 @@ + * @deprecated Forge: Use {@link BlockState#canEntityDestroy(net.minecraft.world.level.BlockGetter, BlockPos, Entity)} instead. + */ + @Deprecated - public static boolean canDestroy(BlockState p_31492_) { - return !p_31492_.isAir() && !p_31492_.is(BlockTags.WITHER_IMMUNE); + public static boolean canDestroy(final BlockState state) { + return !state.isAir() && !state.is(BlockTags.WITHER_IMMUNE); } diff --git a/patches/minecraft/net/minecraft/world/entity/decoration/HangingEntity.java.patch b/patches/minecraft/net/minecraft/world/entity/decoration/HangingEntity.java.patch index b5044da5c6..5921b6ac02 100644 --- a/patches/minecraft/net/minecraft/world/entity/decoration/HangingEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/decoration/HangingEntity.java.patch @@ -2,9 +2,9 @@ +++ b/net/minecraft/world/entity/decoration/HangingEntity.java @@ -85,6 +_,8 @@ } else { - boolean flag = BlockPos.betweenClosedStream(this.calculateSupportBox()).allMatch(p_449679_ -> { - BlockState blockstate = this.level().getBlockState(p_449679_); -+ if (net.minecraft.world.level.block.Block.canSupportCenter(this.level(), p_449679_, this.getDirection())) + boolean flag = BlockPos.betweenClosedStream(this.calculateSupportBox()).allMatch(pos -> { + BlockState blockstate = this.level().getBlockState(pos); ++ if (net.minecraft.world.level.block.Block.canSupportCenter(this.level(), pos, this.getDirection())) + return true; return blockstate.isSolid() || DiodeBlock.isDiode(blockstate); }); diff --git a/patches/minecraft/net/minecraft/world/entity/decoration/LeashFenceKnotEntity.java.patch b/patches/minecraft/net/minecraft/world/entity/decoration/LeashFenceKnotEntity.java.patch index ecf675540e..3225ebca83 100644 --- a/patches/minecraft/net/minecraft/world/entity/decoration/LeashFenceKnotEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/decoration/LeashFenceKnotEntity.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/entity/decoration/LeashFenceKnotEntity.java +++ b/net/minecraft/world/entity/decoration/LeashFenceKnotEntity.java -@@ -72,7 +_,7 @@ +@@ -73,7 +_,7 @@ if (this.level().isClientSide()) { return InteractionResult.SUCCESS; } else { -- if (p_31842_.getItemInHand(p_31843_).is(Items.SHEARS)) { -+ if (p_31842_.getItemInHand(p_31843_).canPerformAction(net.minecraftforge.common.ToolActions.SHEARS_HARVEST)) { - InteractionResult interactionresult = super.interact(p_31842_, p_31843_); +- if (player.getItemInHand(hand).is(Items.SHEARS)) { ++ if (player.getItemInHand(hand).canPerformAction(net.minecraftforge.common.ToolActions.SHEARS_HARVEST)) { + InteractionResult interactionresult = super.interact(player, hand, location); if (interactionresult instanceof InteractionResult.Success interactionresult$success && interactionresult$success.wasItemInteraction()) { return interactionresult; diff --git a/patches/minecraft/net/minecraft/world/entity/item/FallingBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/entity/item/FallingBlockEntity.java.patch index e44ece6bb3..8f83fb5675 100644 --- a/patches/minecraft/net/minecraft/world/entity/item/FallingBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/item/FallingBlockEntity.java.patch @@ -9,8 +9,8 @@ double d0 = this.getDeltaMovement().lengthSqr(); if (flag && d0 > 1.0) { BlockHitResult blockhitresult = this.level() -@@ -171,7 +_,7 @@ - this +@@ -167,7 +_,7 @@ + new Vec3(this.xo, this.yo, this.zo), this.position(), ClipContext.Block.COLLIDER, ClipContext.Fluid.SOURCE_ONLY, this ) ); - if (blockhitresult.getType() != HitResult.Type.MISS && this.level().getFluidState(blockhitresult.getBlockPos()).is(FluidTags.WATER)) { diff --git a/patches/minecraft/net/minecraft/world/entity/item/ItemEntity.java.patch b/patches/minecraft/net/minecraft/world/entity/item/ItemEntity.java.patch index 1013d2a63e..5046babcb5 100644 --- a/patches/minecraft/net/minecraft/world/entity/item/ItemEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/item/ItemEntity.java.patch @@ -9,17 +9,17 @@ + */ + public int lifespan = ItemEntity.LIFETIME; - public ItemEntity(EntityType p_31991_, Level p_31992_) { - super(p_31991_, p_31992_); -@@ -68,6 +_,7 @@ - this.setPos(p_149664_, p_149665_, p_149666_); - this.setDeltaMovement(p_149668_, p_149669_, p_149670_); - this.setItem(p_149667_); -+ this.lifespan = (p_149667_.getItem() == null ? ItemEntity.LIFETIME : p_149667_.getEntityLifespan(p_149663_)); + public ItemEntity(final EntityType type, final Level level) { + super(type, level); +@@ -78,6 +_,7 @@ + this.setPos(x, y, z); + this.setItem(itemStack); + this.setDeltaMovement(deltaX, deltaY, deltaZ); ++ this.lifespan = (itemStack.getItem() == null ? ItemEntity.LIFETIME : itemStack.getEntityLifespan(level)); } @Override -@@ -105,6 +_,7 @@ +@@ -115,6 +_,7 @@ @Override public void tick() { @@ -27,7 +27,7 @@ if (this.getItem().isEmpty()) { this.discard(); } else { -@@ -117,6 +_,10 @@ +@@ -127,6 +_,10 @@ this.yo = this.getY(); this.zo = this.getZ(); Vec3 vec3 = this.getDeltaMovement(); @@ -38,7 +38,7 @@ if (this.isInWater() && this.getFluidHeight(FluidTags.WATER) > 0.1F) { this.setUnderwaterMovement(); } else if (this.isInLava() && this.getFluidHeight(FluidTags.LAVA) > 0.1F) { -@@ -139,7 +_,8 @@ +@@ -151,7 +_,8 @@ this.applyEffectsFromBlocks(); float f = 0.98F; if (this.onGround()) { @@ -48,7 +48,7 @@ } this.setDeltaMovement(this.getDeltaMovement().multiply(f, 0.98, f)); -@@ -171,7 +_,16 @@ +@@ -183,7 +_,16 @@ } } @@ -66,51 +66,51 @@ this.discard(); } } -@@ -279,7 +_,7 @@ - this.health = (int)(this.health - p_362683_); - this.gameEvent(GameEvent.ENTITY_DAMAGE, p_364841_.getEntity()); +@@ -293,7 +_,7 @@ + this.health = (int)(this.health - damage); + this.gameEvent(GameEvent.ENTITY_DAMAGE, source.getEntity()); if (this.health <= 0) { - this.getItem().onDestroyed(this); -+ this.getItem().onDestroyed(this, p_364841_); ++ this.getItem().onDestroyed(this, source); this.discard(); } -@@ -297,6 +_,7 @@ - p_408006_.putShort("Health", (short)this.health); - p_408006_.putShort("Age", (short)this.age); - p_408006_.putShort("PickupDelay", (short)this.pickupDelay); -+ p_408006_.putInt("Lifespan", this.lifespan); - EntityReference.store(this.thrower, p_408006_, "Thrower"); - p_408006_.storeNullable("Owner", UUIDUtil.CODEC, this.target); +@@ -311,6 +_,7 @@ + output.putShort("Health", (short)this.health); + output.putShort("Age", (short)this.age); + output.putShort("PickupDelay", (short)this.pickupDelay); ++ output.putInt("Lifespan", this.lifespan); + EntityReference.store(this.thrower, output, "Thrower"); + output.storeNullable("Owner", UUIDUtil.CODEC, this.target); if (!this.getItem().isEmpty()) { -@@ -309,6 +_,7 @@ - this.health = p_408031_.getShortOr("Health", (short)5); - this.age = p_408031_.getShortOr("Age", (short)0); - this.pickupDelay = p_408031_.getShortOr("PickupDelay", (short)0); -+ this.lifespan = p_408031_.getIntOr("Lifespan", this.lifespan); - this.target = p_408031_.read("Owner", UUIDUtil.CODEC).orElse(null); - this.thrower = EntityReference.read(p_408031_, "Thrower"); - this.setItem(p_408031_.read("Item", ItemStack.CODEC).orElse(ItemStack.EMPTY)); -@@ -320,10 +_,17 @@ +@@ -323,6 +_,7 @@ + this.health = input.getShortOr("Health", (short)5); + this.age = input.getShortOr("Age", (short)0); + this.pickupDelay = input.getShortOr("PickupDelay", (short)0); ++ this.lifespan = input.getIntOr("Lifespan", this.lifespan); + this.target = input.read("Owner", UUIDUtil.CODEC).orElse(null); + this.thrower = EntityReference.read(input, "Thrower"); + this.setItem(input.read("Item", ItemStack.CODEC).orElse(ItemStack.EMPTY)); +@@ -334,10 +_,17 @@ @Override - public void playerTouch(Player p_32040_) { + public void playerTouch(final Player player) { if (!this.level().isClientSide()) { + if (this.pickupDelay > 0) return; ItemStack itemstack = this.getItem(); Item item = itemstack.getItem(); int i = itemstack.getCount(); -- if (this.pickupDelay == 0 && (this.target == null || this.target.equals(p_32040_.getUUID())) && p_32040_.getInventory().add(itemstack)) { -+ int hook = net.minecraftforge.event.ForgeEventFactory.onItemPickup(this, p_32040_); +- if (this.pickupDelay == 0 && (this.target == null || this.target.equals(player.getUUID())) && player.getInventory().add(itemstack)) { ++ int hook = net.minecraftforge.event.ForgeEventFactory.onItemPickup(this, player); + if (hook < 0) return; + ItemStack copy = itemstack.copy(); -+ if (this.pickupDelay == 0 && (this.target == null || this.target.equals(p_32040_.getUUID())) && (hook == 1 || i <= 0 || p_32040_.getInventory().add(itemstack))) { ++ if (this.pickupDelay == 0 && (this.target == null || this.target.equals(player.getUUID())) && (hook == 1 || i <= 0 || player.getInventory().add(itemstack))) { + i = copy.getCount() - itemstack.getCount(); + copy.setCount(i); -+ net.minecraftforge.event.ForgeEventFactory.firePlayerItemPickupEvent(p_32040_, this, copy); - p_32040_.take(this, i); ++ net.minecraftforge.event.ForgeEventFactory.firePlayerItemPickupEvent(player, this, copy); + player.take(this, i); if (itemstack.isEmpty()) { this.discard(); -@@ -415,7 +_,7 @@ +@@ -421,7 +_,7 @@ public void makeFakeItem() { this.setNeverPickUp(); @@ -118,4 +118,4 @@ + this.age = getItem().getEntityLifespan(this.level()) - 1; } - public static float getSpin(float p_32009_, float p_369793_) { + public static float getSpin(final float ageInTicks, final float bobOffset) { diff --git a/patches/minecraft/net/minecraft/world/entity/monster/CrossbowAttackMob.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/CrossbowAttackMob.java.patch index 51619b7261..db4a7fd4ce 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/CrossbowAttackMob.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/CrossbowAttackMob.java.patch @@ -3,13 +3,13 @@ @@ -16,9 +_,10 @@ void onCrossbowAttackPerformed(); - default void performCrossbowAttack(LivingEntity p_32337_, float p_32338_) { -- InteractionHand interactionhand = ProjectileUtil.getWeaponHoldingHand(p_32337_, Items.CROSSBOW); -+ InteractionHand interactionhand = ProjectileUtil.getWeaponHoldingHand(p_32337_, item -> item instanceof CrossbowItem); - ItemStack itemstack = p_32337_.getItemInHand(interactionhand); + default void performCrossbowAttack(final LivingEntity body, final float crossbowPower) { +- InteractionHand interactionhand = ProjectileUtil.getWeaponHoldingHand(body, Items.CROSSBOW); ++ InteractionHand interactionhand = ProjectileUtil.getWeaponHoldingHand(body, item -> item instanceof CrossbowItem); + ItemStack itemstack = body.getItemInHand(interactionhand); - if (itemstack.getItem() instanceof CrossbowItem crossbowitem) { -+ if (p_32337_.isHolding(is -> is.getItem() instanceof CrossbowItem)) { ++ if (body.isHolding(is -> is.getItem() instanceof CrossbowItem)) { + var crossbowitem = (CrossbowItem) itemstack.getItem(); crossbowitem.performShooting( - p_32337_.level(), p_32337_, interactionhand, itemstack, p_32338_, 14 - p_32337_.level().getDifficulty().getId() * 4, this.getTarget() + body.level(), body, interactionhand, itemstack, crossbowPower, 14 - body.level().getDifficulty().getId() * 4, this.getTarget() ); diff --git a/patches/minecraft/net/minecraft/world/entity/monster/EnderMan.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/EnderMan.java.patch index 673cfc7942..2ab9861e0b 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/EnderMan.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/EnderMan.java.patch @@ -1,52 +1,52 @@ --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java -@@ -117,7 +_,6 @@ +@@ -121,7 +_,6 @@ @Override - public void setTarget(@Nullable LivingEntity p_32537_) { -- super.setTarget(p_32537_); + public void setTarget(final @Nullable LivingEntity target) { +- super.setTarget(target); AttributeInstance attributeinstance = this.getAttribute(Attributes.MOVEMENT_SPEED); - if (p_32537_ == null) { + if (target == null) { this.targetChangeTime = 0; -@@ -131,6 +_,7 @@ +@@ -135,6 +_,7 @@ attributeinstance.addTransientModifier(SPEED_MODIFIER_ATTACKING); } } -+ super.setTarget(p_32537_); //Forge: Moved down to allow event handlers to write data manager values. ++ super.setTarget(target); //Forge: Moved down to allow event handlers to write data manager values. } @Override -@@ -203,7 +_,7 @@ +@@ -207,7 +_,7 @@ } - boolean isBeingStaredBy(Player p_368759_) { -- return !LivingEntity.PLAYER_NOT_WEARING_DISGUISE_ITEM.test(p_368759_) ? false : this.isLookingAtMe(p_368759_, 0.025, true, false, this.getEyeY()); -+ return !net.minecraftforge.common.ForgeHooks.isNotDisguised(this).test(p_368759_) ? false : this.isLookingAtMe(p_368759_, 0.025, true, false, this.getEyeY()); + private boolean isBeingStaredBy(final Player player) { +- return !LivingEntity.PLAYER_NOT_WEARING_DISGUISE_ITEM.test(player) ? false : this.isLookingAtMe(player, 0.025, true, false, this.getEyeY()); ++ return !net.minecraftforge.common.ForgeHooks.isNotDisguised(this).test(player) ? false : this.isLookingAtMe(player, 0.025, true, false, this.getEyeY()); } @Override -@@ -281,8 +_,10 @@ +@@ -285,8 +_,10 @@ boolean flag = blockstate.blocksMotion(); boolean flag1 = blockstate.getFluidState().is(FluidTags.WATER); if (flag && !flag1) { -+ var event = net.minecraftforge.event.ForgeEventFactory.onEnderManTeleport(this, p_32544_, p_32545_, p_32546_); ++ var event = net.minecraftforge.event.ForgeEventFactory.onEnderManTeleport(this, x, y, z); + if (event == null) return false; Vec3 vec3 = this.position(); -- boolean flag2 = this.randomTeleport(p_32544_, p_32545_, p_32546_, true); +- boolean flag2 = this.randomTeleport(x, y, z, true); + boolean flag2 = this.randomTeleport(event.getTargetX(), event.getTargetY(), event.getTargetZ(), true); if (flag2) { this.level().gameEvent(GameEvent.TELEPORT, vec3, GameEvent.Context.of(this)); if (!this.isSilent()) { -@@ -435,7 +_,7 @@ +@@ -443,7 +_,7 @@ if (this.enderman.getCarriedBlock() == null) { return false; } else { -- return !getServerLevel(this.enderman).getGameRules().get(GameRules.MOB_GRIEFING) ? false : this.enderman.getRandom().nextInt(reducedTickDelay(2000)) == 0; -+ return !net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(getServerLevel(this.enderman), this.enderman) ? false : this.enderman.getRandom().nextInt(reducedTickDelay(2000)) == 0; +- return !getServerLevel(this.enderman).getGameRules().get(GameRules.MOB_GRIEFING) ++ return !net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(getServerLevel(this.enderman), this.enderman) + ? false + : this.enderman.getRandom().nextInt(reducedTickDelay(2000)) == 0; } - } - -@@ -453,7 +_,7 @@ +@@ -463,7 +_,7 @@ BlockState blockstate2 = this.enderman.getCarriedBlock(); if (blockstate2 != null) { blockstate2 = Block.updateFromNeighbourShapes(blockstate2, this.enderman.level(), blockpos); @@ -55,20 +55,20 @@ level.setBlock(blockpos, blockstate2, 3); level.gameEvent(GameEvent.BLOCK_PLACE, blockpos, GameEvent.Context.of(this.enderman, blockstate2)); this.enderman.setCarriedBlock(null); -@@ -465,6 +_,7 @@ - return p_32562_.isAir() - && !p_32563_.isAir() - && !p_32563_.is(Blocks.BEDROCK) -+ && !p_32563_.is(net.minecraftforge.common.Tags.Blocks.ENDERMAN_PLACE_ON_BLACKLIST) - && p_32563_.isCollisionShapeFullBlock(p_32559_, p_32564_) - && p_32561_.canSurvive(p_32559_, p_32560_) - && p_32559_.getEntities(this.enderman, AABB.unitCubeFromLowerCorner(Vec3.atLowerCornerOf(p_32560_))).isEmpty(); -@@ -573,7 +_,7 @@ +@@ -477,6 +_,7 @@ + return targetState.isAir() + && !belowState.isAir() + && !belowState.is(Blocks.BEDROCK) ++ && !belowState.is(net.minecraftforge.common.Tags.Blocks.ENDERMAN_PLACE_ON_BLACKLIST) + && belowState.isCollisionShapeFullBlock(level, below) + && carried.canSurvive(level, pos) + && level.getEntities(this.enderman, AABB.unitCubeFromLowerCorner(Vec3.atLowerCornerOf(pos))).isEmpty(); +@@ -587,7 +_,7 @@ if (this.enderman.getCarriedBlock() != null) { return false; } else { -- return !getServerLevel(this.enderman).getGameRules().get(GameRules.MOB_GRIEFING) ? false : this.enderman.getRandom().nextInt(reducedTickDelay(20)) == 0; -+ return !net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(getServerLevel(this.enderman), this.enderman) ? false : this.enderman.getRandom().nextInt(reducedTickDelay(20)) == 0; +- return !getServerLevel(this.enderman).getGameRules().get(GameRules.MOB_GRIEFING) ++ return !net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(getServerLevel(this.enderman), this.enderman) + ? false + : this.enderman.getRandom().nextInt(reducedTickDelay(20)) == 0; } - } - diff --git a/patches/minecraft/net/minecraft/world/entity/monster/MagmaCube.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/MagmaCube.java.patch index ed552dbb7d..d2cb7f7410 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/MagmaCube.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/MagmaCube.java.patch @@ -9,9 +9,9 @@ + /** @deprecated Forge - Use {@link #jumpInFluid(net.minecraftforge.fluids.FluidType)} */ @Override - protected void jumpInLiquid(TagKey p_204065_) { -- if (p_204065_ == FluidTags.LAVA) { -+ this.jumpInLiquidInternal(() -> p_204065_ == FluidTags.LAVA, () -> super.jumpInLiquid(p_204065_)); + protected void jumpInLiquid(final TagKey type) { +- if (type == FluidTags.LAVA) { ++ this.jumpInLiquidInternal(() -> type == FluidTags.LAVA, () -> super.jumpInLiquid(type)); + } + + private void jumpInLiquidInternal(java.util.function.BooleanSupplier isLava, Runnable onSuper) { @@ -20,7 +20,7 @@ this.setDeltaMovement(vec3.x, 0.22F + this.getSize() * 0.05F, vec3.z); this.needsSync = true; } else { -- super.jumpInLiquid(p_204065_); +- super.jumpInLiquid(type); + onSuper.run(); } + } diff --git a/patches/minecraft/net/minecraft/world/entity/monster/Monster.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/Monster.java.patch index 00e83fbd78..00f779df41 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/Monster.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/Monster.java.patch @@ -1,14 +1,14 @@ --- a/net/minecraft/world/entity/monster/Monster.java +++ b/net/minecraft/world/entity/monster/Monster.java -@@ -141,9 +_,9 @@ - if (p_33038_.getItem() instanceof ProjectileWeaponItem) { - Predicate predicate = ((ProjectileWeaponItem)p_33038_.getItem()).getSupportedHeldProjectiles(); +@@ -149,9 +_,9 @@ + if (heldWeapon.getItem() instanceof ProjectileWeaponItem) { + Predicate predicate = ((ProjectileWeaponItem)heldWeapon.getItem()).getSupportedHeldProjectiles(); ItemStack itemstack = ProjectileWeaponItem.getHeldProjectile(this, predicate); - return itemstack.isEmpty() ? new ItemStack(Items.ARROW) : itemstack; -+ return net.minecraftforge.common.ForgeHooks.getProjectile(this, p_33038_, itemstack.isEmpty() ? new ItemStack(Items.ARROW) : itemstack); ++ return net.minecraftforge.common.ForgeHooks.getProjectile(this, heldWeapon, itemstack.isEmpty() ? new ItemStack(Items.ARROW) : itemstack); } else { - return ItemStack.EMPTY; -+ return net.minecraftforge.common.ForgeHooks.getProjectile(this, p_33038_, ItemStack.EMPTY); ++ return net.minecraftforge.common.ForgeHooks.getProjectile(this, heldWeapon, ItemStack.EMPTY); } } } diff --git a/patches/minecraft/net/minecraft/world/entity/monster/Ravager.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/Ravager.java.patch index 782b6329a8..f2abdcf19f 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/Ravager.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/Ravager.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -141,7 +_,7 @@ +@@ -142,7 +_,7 @@ this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(Mth.lerp(0.1, d1, d0)); } diff --git a/patches/minecraft/net/minecraft/world/entity/monster/Shulker.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/Shulker.java.patch index e3bb41e013..50eeb606b7 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/Shulker.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/Shulker.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/Shulker.java +++ b/net/minecraft/world/entity/monster/Shulker.java -@@ -381,6 +_,12 @@ +@@ -384,6 +_,12 @@ && this.level().noCollision(this, new AABB(blockpos1).deflate(1.0E-6))) { Direction direction = this.findAttachableSurface(blockpos1); if (direction != null) { diff --git a/patches/minecraft/net/minecraft/world/entity/monster/Silverfish.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/Silverfish.java.patch index a0e2a28d16..8bf8bfb76f 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/Silverfish.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/Silverfish.java.patch @@ -7,9 +7,9 @@ - if (getServerLevel(this.mob).getGameRules().get(GameRules.MOB_GRIEFING) && randomsource.nextInt(reducedTickDelay(10)) == 0) { + if (net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(getServerLevel(this.mob.level()), this.mob) && randomsource.nextInt(reducedTickDelay(10)) == 0) { this.selectedDirection = Direction.getRandom(randomsource); - BlockPos blockpos = BlockPos.containing(this.mob.getX(), this.mob.getY() + 0.5, this.mob.getZ()) - .relative(this.selectedDirection); -@@ -212,7 +_,7 @@ + BlockPos blockpos = BlockPos.containing(this.mob.getX(), this.mob.getY() + 0.5, this.mob.getZ()).relative(this.selectedDirection); + BlockState blockstate = this.mob.level().getBlockState(blockpos); +@@ -210,7 +_,7 @@ BlockState blockstate = level.getBlockState(blockpos1); Block block = blockstate.getBlock(); if (block instanceof InfestedBlock) { diff --git a/patches/minecraft/net/minecraft/world/entity/monster/Slime.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/Slime.java.patch index 52b737e116..d0b40ce95d 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/Slime.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/Slime.java.patch @@ -1,29 +1,15 @@ --- a/net/minecraft/world/entity/monster/Slime.java +++ b/net/minecraft/world/entity/monster/Slime.java -@@ -144,13 +_,15 @@ +@@ -139,6 +_,8 @@ float f = this.getDimensions(this.getPose()).width() * 2.0F; float f1 = f / 2.0F; -- for (int i = 0; i < f * 16.0F; i++) { -- float f2 = this.random.nextFloat() * (float) (Math.PI * 2); -- float f3 = this.random.nextFloat() * 0.5F + 0.5F; -- float f4 = Mth.sin(f2) * f1 * f3; -- float f5 = Mth.cos(f2) * f1 * f3; -- this.level().addParticle(this.getParticleType(), this.getX() + f4, this.getY(), this.getZ() + f5, 0.0, 0.0, 0.0); -- } + // Forge: Don't spawn particles if it's handled by the implementation itself + if (!spawnCustomParticles()) -+ for (int i = 0; (float)i < f * 16.0F; i++) { -+ float f2 = this.random.nextFloat() * (float) (Math.PI * 2); -+ float f3 = this.random.nextFloat() * 0.5F + 0.5F; -+ float f4 = Mth.sin(f2) * f1 * f3; -+ float f5 = Mth.cos(f2) * f1 * f3; -+ this.level().addParticle(this.getParticleType(), this.getX() + (double)f4, this.getY(), this.getZ() + (double)f5, 0.0, 0.0, 0.0); -+ } - - this.playSound(this.getSquishSound(), this.getSoundVolume(), ((this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F) / 0.8F); - this.targetSquish = -0.5F; -@@ -161,6 +_,12 @@ + for (int i = 0; i < f * 16.0F; i++) { + float f2 = this.random.nextFloat() * (float) (Math.PI * 2); + float f3 = this.random.nextFloat() * 0.5F + 0.5F; +@@ -156,6 +_,12 @@ this.wasOnGround = this.onGround(); this.decreaseSquish(); } diff --git a/patches/minecraft/net/minecraft/world/entity/monster/creaking/Creaking.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/creaking/Creaking.java.patch index 2e11deed21..04e74aca46 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/creaking/Creaking.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/creaking/Creaking.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/creaking/Creaking.java +++ b/net/minecraft/world/entity/monster/creaking/Creaking.java -@@ -463,7 +_,7 @@ +@@ -458,7 +_,7 @@ for (Player player : list) { if (this.canAttack(player) && !this.isAlliedTo(player)) { flag1 = true; diff --git a/patches/minecraft/net/minecraft/world/entity/monster/hoglin/Hoglin.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/hoglin/Hoglin.java.patch index 13743c5da7..0fc753b705 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/hoglin/Hoglin.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/hoglin/Hoglin.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -170,7 +_,7 @@ +@@ -141,7 +_,7 @@ HoglinAi.updateActivity(this); if (this.isConverting()) { this.timeInOverworld++; @@ -9,15 +9,14 @@ this.makeSound(SoundEvents.HOGLIN_CONVERTED_TO_ZOMBIFIED); this.finishConversion(); } -@@ -269,7 +_,10 @@ - this.convertTo( - EntityType.ZOGLIN, - ConversionParams.single(this, true, false), -- p_390697_ -> p_390697_.addEffect(new MobEffectInstance(MobEffects.NAUSEA, 200, 0)) -+ p_390697_ -> { -+ p_390697_.addEffect(new MobEffectInstance(MobEffects.NAUSEA, 200, 0)); -+ net.minecraftforge.event.ForgeEventFactory.onLivingConvert(this, p_390697_); -+ } - ); +@@ -237,9 +_,7 @@ } + private void finishConversion() { +- this.convertTo( +- EntityType.ZOGLIN, ConversionParams.single(this, true, false), zoglin -> zoglin.addEffect(new MobEffectInstance(MobEffects.NAUSEA, 200, 0)) +- ); ++ this.convertTo(EntityType.ZOGLIN, ConversionParams.single(this, true, false), zoglin -> { zoglin.addEffect(new MobEffectInstance(MobEffects.NAUSEA, 200, 0)); net.minecraftforge.event.ForgeEventFactory.onLivingConvert(this, zoglin); }); + } + + @Override diff --git a/patches/minecraft/net/minecraft/world/entity/monster/illager/Evoker.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/illager/Evoker.java.patch index 1cda40db41..adfc9bfb5f 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/illager/Evoker.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/illager/Evoker.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/illager/Evoker.java +++ b/net/minecraft/world/entity/monster/illager/Evoker.java -@@ -283,7 +_,7 @@ +@@ -304,7 +_,7 @@ return false; } else { ServerLevel serverlevel = getServerLevel(Evoker.this.level()); @@ -8,4 +8,4 @@ + if (!net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(serverlevel, Evoker.this)) { return false; } else { - List list = serverlevel.getNearbyEntities(Sheep.class, this.wololoTargeting, Evoker.this, Evoker.this.getBoundingBox().inflate(16.0, 4.0, 16.0)); + List list = serverlevel.getNearbyEntities( diff --git a/patches/minecraft/net/minecraft/world/entity/monster/illager/Illusioner.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/illager/Illusioner.java.patch index abcaebf7bf..5dbdd1a45b 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/illager/Illusioner.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/illager/Illusioner.java.patch @@ -1,16 +1,16 @@ --- a/net/minecraft/world/entity/monster/illager/Illusioner.java +++ b/net/minecraft/world/entity/monster/illager/Illusioner.java -@@ -171,9 +_,12 @@ +@@ -175,9 +_,12 @@ @Override - public void performRangedAttack(LivingEntity p_454025_, float p_457552_) { + public void performRangedAttack(final LivingEntity target, final float power) { - ItemStack itemstack = this.getItemInHand(ProjectileUtil.getWeaponHoldingHand(this, Items.BOW)); + ItemStack itemstack = this.getItemInHand(ProjectileUtil.getWeaponHoldingHand(this, item -> item instanceof net.minecraft.world.item.BowItem)); ItemStack itemstack1 = this.getProjectile(itemstack); - AbstractArrow abstractarrow = ProjectileUtil.getMobArrow(this, itemstack1, p_457552_, itemstack); + AbstractArrow abstractarrow = ProjectileUtil.getMobArrow(this, itemstack1, power, itemstack); + if (this.getMainHandItem().getItem() instanceof net.minecraft.world.item.BowItem bow) { + abstractarrow = bow.customArrow(abstractarrow); + } - double d0 = p_454025_.getX() - this.getX(); - double d1 = p_454025_.getY(0.3333333333333333) - abstractarrow.getY(); - double d2 = p_454025_.getZ() - this.getZ(); + double d0 = target.getX() - this.getX(); + double d1 = target.getY(0.3333333333333333) - abstractarrow.getY(); + double d2 = target.getZ() - this.getZ(); diff --git a/patches/minecraft/net/minecraft/world/entity/monster/piglin/AbstractPiglin.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/piglin/AbstractPiglin.java.patch index 0477ac0a59..5750557767 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/piglin/AbstractPiglin.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/piglin/AbstractPiglin.java.patch @@ -1,19 +1,19 @@ --- a/net/minecraft/world/entity/monster/piglin/AbstractPiglin.java +++ b/net/minecraft/world/entity/monster/piglin/AbstractPiglin.java -@@ -83,7 +_,7 @@ +@@ -85,7 +_,7 @@ this.timeInOverworld = 0; } - if (this.timeInOverworld > 300) { + if (this.timeInOverworld > 300 && net.minecraftforge.event.ForgeEventFactory.canLivingConvert(this, EntityType.ZOMBIFIED_PIGLIN, (timer) -> this.timeInOverworld = timer)) { this.playConvertedSound(); - this.finishConversion(p_360786_); + this.finishConversion(level); } -@@ -102,7 +_,10 @@ +@@ -106,7 +_,10 @@ this.convertTo( EntityType.ZOMBIFIED_PIGLIN, ConversionParams.single(this, true, true), -- p_449701_ -> p_449701_.addEffect(new MobEffectInstance(MobEffects.NAUSEA, 200, 0)) +- zombified -> zombified.addEffect(new MobEffectInstance(MobEffects.NAUSEA, 200, 0)) + p_449701_ -> { + p_449701_.addEffect(new MobEffectInstance(MobEffects.NAUSEA, 200, 0)); + net.minecraftforge.event.ForgeEventFactory.onLivingConvert(this, p_449701_); diff --git a/patches/minecraft/net/minecraft/world/entity/monster/piglin/Piglin.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/piglin/Piglin.java.patch index 7791f199c2..85ee0d7ca4 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/piglin/Piglin.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/piglin/Piglin.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -352,7 +_,7 @@ +@@ -322,7 +_,7 @@ } else if (this.isChargingCrossbow()) { return PiglinArmPose.CROSSBOW_CHARGE; } else { @@ -9,21 +9,21 @@ } } -@@ -389,7 +_,7 @@ +@@ -359,7 +_,7 @@ } - protected void holdInOffHand(ItemStack p_34786_) { -- if (p_34786_.is(PiglinAi.BARTERING_ITEM)) { -+ if (p_34786_.isPiglinCurrency()) { - this.setItemSlot(EquipmentSlot.OFFHAND, p_34786_); + protected void holdInOffHand(final ItemStack itemStack) { +- if (itemStack.is(PiglinAi.BARTERING_ITEM)) { ++ if (itemStack.isPiglinCurrency()) { + this.setItemSlot(EquipmentSlot.OFFHAND, itemStack); this.setGuaranteedDrop(EquipmentSlot.OFFHAND); } else { -@@ -399,7 +_,7 @@ +@@ -369,7 +_,7 @@ @Override - public boolean wantsToPickUp(ServerLevel p_369934_, ItemStack p_34777_) { -- return p_369934_.getGameRules().get(GameRules.MOB_GRIEFING) && this.canPickUpLoot() && PiglinAi.wantsToPickup(this, p_34777_); -+ return net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(p_369934_, this) && this.canPickUpLoot() && PiglinAi.wantsToPickup(this, p_34777_); + public boolean wantsToPickUp(final ServerLevel level, final ItemStack itemStack) { +- return level.getGameRules().get(GameRules.MOB_GRIEFING) && this.canPickUpLoot() && PiglinAi.wantsToPickup(this, itemStack); ++ return net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(level, this) && this.canPickUpLoot() && PiglinAi.wantsToPickup(this, itemStack); } - protected boolean canReplaceCurrentItem(ItemStack p_34788_) { + protected boolean canReplaceCurrentItem(final ItemStack newItemStack) { diff --git a/patches/minecraft/net/minecraft/world/entity/monster/piglin/PiglinAi.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/piglin/PiglinAi.java.patch index 48c1d69ac2..73239fc941 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/piglin/PiglinAi.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/piglin/PiglinAi.java.patch @@ -1,29 +1,29 @@ --- a/net/minecraft/world/entity/monster/piglin/PiglinAi.java +++ b/net/minecraft/world/entity/monster/piglin/PiglinAi.java -@@ -640,7 +_,7 @@ +@@ -646,7 +_,7 @@ - public static boolean isWearingSafeArmor(LivingEntity p_365495_) { + public static boolean isWearingSafeArmor(final LivingEntity livingEntity) { for (EquipmentSlot equipmentslot : EquipmentSlotGroup.ARMOR) { -- if (p_365495_.getItemBySlot(equipmentslot).is(ItemTags.PIGLIN_SAFE_ARMOR)) { -+ if (p_365495_.getItemBySlot(equipmentslot).makesPiglinsNeutral(p_365495_)) { +- if (livingEntity.getItemBySlot(equipmentslot).is(ItemTags.PIGLIN_SAFE_ARMOR)) { ++ if (livingEntity.getItemBySlot(equipmentslot).makesPiglinsNeutral(livingEntity)) { return true; } } -@@ -784,7 +_,7 @@ +@@ -797,7 +_,7 @@ } - private static boolean hasCrossbow(LivingEntity p_34919_) { -- return p_34919_.isHolding(Items.CROSSBOW); -+ return p_34919_.isHolding(is -> is.getItem() instanceof net.minecraft.world.item.CrossbowItem); + private static boolean hasCrossbow(final LivingEntity body) { +- return body.isHolding(Items.CROSSBOW); ++ return body.isHolding(is -> is.getItem() instanceof net.minecraft.world.item.CrossbowItem); } - private static void admireGoldItem(LivingEntity p_34939_) { -@@ -796,7 +_,7 @@ + private static void admireGoldItem(final LivingEntity body) { +@@ -809,7 +_,7 @@ } - private static boolean isBarterCurrency(ItemStack p_149968_) { -- return p_149968_.is(BARTERING_ITEM); -+ return p_149968_.is(BARTERING_ITEM) || p_149968_.isPiglinCurrency(); + private static boolean isBarterCurrency(final ItemStack itemStack) { +- return itemStack.is(BARTERING_ITEM); ++ return itemStack.is(BARTERING_ITEM) || itemStack.isPiglinCurrency(); } - private static boolean isFood(ItemStack p_149970_) { + private static boolean isFood(final ItemStack itemStack) { diff --git a/patches/minecraft/net/minecraft/world/entity/monster/skeleton/AbstractSkeleton.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/skeleton/AbstractSkeleton.java.patch index 29813ac679..bc12858ee7 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/skeleton/AbstractSkeleton.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/skeleton/AbstractSkeleton.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/skeleton/AbstractSkeleton.java +++ b/net/minecraft/world/entity/monster/skeleton/AbstractSkeleton.java -@@ -133,7 +_,7 @@ +@@ -138,7 +_,7 @@ if (this.level() != null && !this.level().isClientSide()) { this.goalSelector.removeGoal(this.meleeGoal); this.goalSelector.removeGoal(this.bowGoal); @@ -9,17 +9,17 @@ if (itemstack.is(Items.BOW)) { int i = this.getHardAttackInterval(); if (this.level().getDifficulty() != Difficulty.HARD) { -@@ -158,9 +_,12 @@ +@@ -163,9 +_,12 @@ @Override - public void performRangedAttack(LivingEntity p_454925_, float p_452827_) { + public void performRangedAttack(final LivingEntity target, final float power) { - ItemStack itemstack = this.getItemInHand(ProjectileUtil.getWeaponHoldingHand(this, Items.BOW)); + ItemStack itemstack = this.getItemInHand(ProjectileUtil.getWeaponHoldingHand(this, item -> item instanceof net.minecraft.world.item.BowItem)); ItemStack itemstack1 = this.getProjectile(itemstack); - AbstractArrow abstractarrow = this.getArrow(itemstack1, p_452827_, itemstack); + AbstractArrow abstractarrow = this.getArrow(itemstack1, power, itemstack); + if (this.getMainHandItem().getItem() instanceof net.minecraft.world.item.BowItem bow) { + abstractarrow = bow.customArrow(abstractarrow); + } - double d0 = p_454925_.getX() - this.getX(); - double d1 = p_454925_.getY(0.3333333333333333) - abstractarrow.getY(); - double d2 = p_454925_.getZ() - this.getZ(); + double d0 = target.getX() - this.getX(); + double d1 = target.getY(0.3333333333333333) - abstractarrow.getY(); + double d2 = target.getZ() - this.getZ(); diff --git a/patches/minecraft/net/minecraft/world/entity/monster/skeleton/Bogged.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/skeleton/Bogged.java.patch index e89e35c83f..ec435bcad1 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/skeleton/Bogged.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/skeleton/Bogged.java.patch @@ -2,13 +2,13 @@ +++ b/net/minecraft/world/entity/monster/skeleton/Bogged.java @@ -70,7 +_,7 @@ @Override - protected InteractionResult mobInteract(Player p_453508_, InteractionHand p_459904_) { - ItemStack itemstack = p_453508_.getItemInHand(p_459904_); + protected InteractionResult mobInteract(final Player player, final InteractionHand hand) { + ItemStack itemstack = player.getItemInHand(hand); - if (itemstack.is(Items.SHEARS) && this.readyForShearing()) { + if (false && itemstack.is(Items.SHEARS) && this.readyForShearing()) { // Forge: move to onSheared if (this.level() instanceof ServerLevel serverlevel) { this.shear(serverlevel, SoundSource.PLAYERS, itemstack); - this.gameEvent(GameEvent.SHEAR, p_453508_); + this.gameEvent(GameEvent.SHEAR, player); @@ -137,5 +_,17 @@ @Override public boolean readyForShearing() { diff --git a/patches/minecraft/net/minecraft/world/entity/monster/skeleton/Skeleton.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/skeleton/Skeleton.java.patch index 8dec6712af..f28f495fd9 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/skeleton/Skeleton.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/skeleton/Skeleton.java.patch @@ -5,6 +5,6 @@ protected void doFreezeConversion() { + if (!net.minecraftforge.event.ForgeEventFactory.canLivingConvert(this, EntityType.STRAY, (timer) -> this.conversionTime = timer)) return; - this.convertTo(EntityType.STRAY, ConversionParams.single(this, true, true), p_451505_ -> { + this.convertTo(EntityType.STRAY, ConversionParams.single(this, true, true), stray -> { if (!this.isSilent()) { this.level().levelEvent(null, 1048, this.blockPosition(), 0); diff --git a/patches/minecraft/net/minecraft/world/entity/monster/spider/Spider.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/spider/Spider.java.patch index aed72331a5..272aa837ee 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/spider/Spider.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/spider/Spider.java.patch @@ -3,12 +3,12 @@ @@ -123,7 +_,10 @@ @Override - public boolean canBeAffected(MobEffectInstance p_454269_) { -- return p_454269_.is(MobEffects.POISON) ? false : super.canBeAffected(p_454269_); -+ if (p_454269_.getEffect() == MobEffects.POISON) { -+ return net.minecraftforge.event.ForgeEventFactory.onLivingEffectCanApply(this, p_454269_).getResult().isAllowed(); + public boolean canBeAffected(final MobEffectInstance newEffect) { +- return newEffect.is(MobEffects.POISON) ? false : super.canBeAffected(newEffect); ++ if (newEffect.getEffect() == MobEffects.POISON) { ++ return net.minecraftforge.event.ForgeEventFactory.onLivingEffectCanApply(this, newEffect).getResult().isAllowed(); + } -+ return super.canBeAffected(p_454269_); ++ return super.canBeAffected(newEffect); } public boolean isClimbing() { diff --git a/patches/minecraft/net/minecraft/world/entity/monster/zombie/Husk.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/zombie/Husk.java.patch index 7ac9964b75..c4c106ce6e 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/zombie/Husk.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/zombie/Husk.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/world/entity/monster/zombie/Husk.java +++ b/net/minecraft/world/entity/monster/zombie/Husk.java -@@ -71,6 +_,7 @@ +@@ -79,6 +_,7 @@ @Override - protected void doUnderWaterConversion(ServerLevel p_454240_) { + protected void doUnderWaterConversion(final ServerLevel level) { + if (!net.minecraftforge.event.ForgeEventFactory.canLivingConvert(this, EntityType.ZOMBIE, (timer) -> this.conversionTime = timer)) return; - this.convertToZombieType(p_454240_, EntityType.ZOMBIE); + this.convertToZombieType(level, EntityType.ZOMBIE); if (!this.isSilent()) { - p_454240_.levelEvent(null, 1041, this.blockPosition(), 0); + level.levelEvent(null, 1041, this.blockPosition(), 0); diff --git a/patches/minecraft/net/minecraft/world/entity/monster/zombie/Zombie.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/zombie/Zombie.java.patch index 0dc14522a4..1c33cd8e54 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/zombie/Zombie.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/zombie/Zombie.java.patch @@ -1,48 +1,53 @@ --- a/net/minecraft/world/entity/monster/zombie/Zombie.java +++ b/net/minecraft/world/entity/monster/zombie/Zombie.java -@@ -237,19 +_,26 @@ +@@ -245,17 +_,21 @@ } - protected void convertToZombieType(ServerLevel p_455508_, EntityType p_460671_) { -+ if (!net.minecraftforge.event.ForgeEventFactory.canLivingConvert(this, p_460671_, timer -> this.conversionTime = timer)) return; + protected void convertToZombieType(final ServerLevel level, final EntityType zombieType) { ++ if (!net.minecraftforge.event.ForgeEventFactory.canLivingConvert(this, zombieType, timer -> this.conversionTime = timer)) return; this.convertTo( -- p_460671_, ConversionParams.single(this, true, true), p_451761_ -> p_451761_.handleAttributes(p_455508_.getCurrentDifficultyAt(p_451761_.blockPosition()).getSpecialMultiplier()) -+ p_460671_, ConversionParams.single(this, true, true), p_451761_ -> { -+ p_451761_.handleAttributes(p_455508_.getCurrentDifficultyAt(p_451761_.blockPosition()).getSpecialMultiplier()); -+ net.minecraftforge.event.ForgeEventFactory.onLivingConvert(this, p_451761_); + zombieType, + ConversionParams.single(this, true, true), +- newZombie -> newZombie.handleAttributes( +- level.getCurrentDifficultyAt(newZombie.blockPosition()).getSpecialMultiplier(), EntitySpawnReason.CONVERSION +- ) ++ newZombie -> { ++ newZombie.handleAttributes(level.getCurrentDifficultyAt(newZombie.blockPosition()).getSpecialMultiplier(), EntitySpawnReason.CONVERSION); ++ net.minecraftforge.event.ForgeEventFactory.onLivingConvert(this, newZombie); + } ); } @VisibleForTesting - public boolean convertVillagerToZombieVillager(ServerLevel p_454968_, Villager p_452932_) { -+ if (!net.minecraftforge.event.ForgeEventFactory.canLivingConvert(p_452932_, EntityType.ZOMBIE_VILLAGER, (timer) -> {})) + public boolean convertVillagerToZombieVillager(final ServerLevel level, final Villager villager) { ++ if (!net.minecraftforge.event.ForgeEventFactory.canLivingConvert(villager, EntityType.ZOMBIE_VILLAGER, (timer) -> {})) + return false; - ZombieVillager zombievillager = p_452932_.convertTo(EntityType.ZOMBIE_VILLAGER, ConversionParams.single(p_452932_, true, true), p_458247_ -> { - p_458247_.finalizeSpawn(p_454968_, p_454968_.getCurrentDifficultyAt(p_458247_.blockPosition()), EntitySpawnReason.CONVERSION, new Zombie.ZombieGroupData(false, true)); - p_458247_.setVillagerData(p_452932_.getVillagerData()); - p_458247_.setGossips(p_452932_.getGossips().copy()); - p_458247_.setTradeOffers(p_452932_.getOffers().copy()); - p_458247_.setVillagerXp(p_452932_.getVillagerXp()); -+ net.minecraftforge.event.ForgeEventFactory.onLivingConvert(p_452932_, p_458247_); - if (!this.isSilent()) { - p_454968_.levelEvent(null, 1026, this.blockPosition(), 0); - } -@@ -271,19 +_,26 @@ - livingentity = (LivingEntity)p_458181_.getEntity(); + ZombieVillager zombievillager = villager.convertTo( + EntityType.ZOMBIE_VILLAGER, + ConversionParams.single(villager, true, true), +@@ -267,6 +_,7 @@ + zombie.setGossips(villager.getGossips().copy()); + zombie.setTradeOffers(villager.getOffers().copy()); + zombie.setVillagerXp(villager.getVillagerXp()); ++ net.minecraftforge.event.ForgeEventFactory.onLivingConvert(villager, zombie); + if (!this.isSilent()) { + level.levelEvent(null, 1026, this.blockPosition(), 0); + } +@@ -289,19 +_,26 @@ + livingentity = (LivingEntity)source.getEntity(); } - if (livingentity != null + var vanilla = (livingentity != null - && p_452619_.getDifficulty() == Difficulty.HARD + && level.getDifficulty() == Difficulty.HARD && this.random.nextFloat() < this.getAttributeValue(Attributes.SPAWN_REINFORCEMENTS_CHANCE) -- && p_452619_.isSpawningMonsters()) { -+ && p_452619_.isSpawningMonsters()); +- && level.isSpawningMonsters()) { ++ && level.isSpawningMonsters()); int i = Mth.floor(this.getX()); int j = Mth.floor(this.getY()); int k = Mth.floor(this.getZ()); EntityType entitytype = this.getType(); -- Zombie zombie = entitytype.create(p_452619_, EntitySpawnReason.REINFORCEMENT); +- Zombie zombie = entitytype.create(level, EntitySpawnReason.REINFORCEMENT); - if (zombie == null) { - return true; - } diff --git a/patches/minecraft/net/minecraft/world/entity/monster/zombie/ZombieVillager.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/zombie/ZombieVillager.java.patch index 931eacd406..b9e1b18979 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/zombie/ZombieVillager.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/zombie/ZombieVillager.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/zombie/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/zombie/ZombieVillager.java -@@ -143,7 +_,7 @@ +@@ -156,7 +_,7 @@ if (!this.level().isClientSide() && this.isAlive() && this.isConverting()) { int i = this.getConversionProgress(); this.villagerConversionTime -= i; @@ -9,11 +9,11 @@ this.finishConversion((ServerLevel)this.level()); } } -@@ -252,6 +_,7 @@ +@@ -270,6 +_,7 @@ if (!this.isSilent()) { - p_457527_.levelEvent(null, 1027, this.blockPosition(), 0); + level.levelEvent(null, 1027, this.blockPosition(), 0); } -+ net.minecraftforge.event.ForgeEventFactory.onLivingConvert(this, p_460761_); ++ net.minecraftforge.event.ForgeEventFactory.onLivingConvert(this, villager); } ); } diff --git a/patches/minecraft/net/minecraft/world/entity/npc/CatSpawner.java.patch b/patches/minecraft/net/minecraft/world/entity/npc/CatSpawner.java.patch index b763963b50..7b56306d99 100644 --- a/patches/minecraft/net/minecraft/world/entity/npc/CatSpawner.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/npc/CatSpawner.java.patch @@ -1,16 +1,16 @@ --- a/net/minecraft/world/entity/npc/CatSpawner.java +++ b/net/minecraft/world/entity/npc/CatSpawner.java @@ -66,12 +_,12 @@ - private void spawnCat(BlockPos p_35334_, ServerLevel p_35335_, boolean p_392522_) { - Cat cat = EntityType.CAT.create(p_35335_, EntitySpawnReason.NATURAL); + private void spawnCat(final BlockPos spawnPos, final ServerLevel level, final boolean makePersistent) { + Cat cat = EntityType.CAT.create(level, EntitySpawnReason.NATURAL); if (cat != null) { -+ cat.snapTo(p_35334_, 0.0F, 0.0F); // Fix MC-147659: Some witch huts spawn the incorrect cat - cat.finalizeSpawn(p_35335_, p_35335_.getCurrentDifficultyAt(p_35334_), EntitySpawnReason.NATURAL, null); - if (p_392522_) { ++ cat.snapTo(spawnPos, 0.0F, 0.0F); // Fix MC-147659: Some witch huts spawn the incorrect cat + cat.finalizeSpawn(level, level.getCurrentDifficultyAt(spawnPos), EntitySpawnReason.NATURAL, null); + if (makePersistent) { cat.setPersistenceRequired(); } -- cat.snapTo(p_35334_, 0.0F, 0.0F); - p_35335_.addFreshEntityWithPassengers(cat); +- cat.snapTo(spawnPos, 0.0F, 0.0F); + level.addFreshEntityWithPassengers(cat); } } diff --git a/patches/minecraft/net/minecraft/world/entity/npc/villager/AbstractVillager.java.patch b/patches/minecraft/net/minecraft/world/entity/npc/villager/AbstractVillager.java.patch index 37c260f5de..d138f7bbd4 100644 --- a/patches/minecraft/net/minecraft/world/entity/npc/villager/AbstractVillager.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/npc/villager/AbstractVillager.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/entity/npc/villager/AbstractVillager.java +++ b/net/minecraft/world/entity/npc/villager/AbstractVillager.java -@@ -125,6 +_,8 @@ +@@ -138,6 +_,8 @@ if (this.tradingPlayer instanceof ServerPlayer) { - CriteriaTriggers.TRADE.trigger((ServerPlayer)this.tradingPlayer, this, p_459364_.getResult()); + CriteriaTriggers.TRADE.trigger((ServerPlayer)this.tradingPlayer, this, offer.getResult()); } + -+ net.minecraftforge.event.ForgeEventFactory.onPlayerTradeWithVillager(this.tradingPlayer, p_459364_, this); ++ net.minecraftforge.event.ForgeEventFactory.onPlayerTradeWithVillager(this.tradingPlayer, offer, this); } - protected abstract void rewardTradeXp(MerchantOffer p_458516_); + protected abstract void rewardTradeXp(final MerchantOffer offer); diff --git a/patches/minecraft/net/minecraft/world/entity/npc/villager/Villager.java.patch b/patches/minecraft/net/minecraft/world/entity/npc/villager/Villager.java.patch index fb109a91ec..c26680700b 100644 --- a/patches/minecraft/net/minecraft/world/entity/npc/villager/Villager.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/npc/villager/Villager.java.patch @@ -1,20 +1,20 @@ --- a/net/minecraft/world/entity/npc/villager/Villager.java +++ b/net/minecraft/world/entity/npc/villager/Villager.java -@@ -320,7 +_,7 @@ +@@ -299,7 +_,7 @@ @Override - public InteractionResult mobInteract(Player p_458495_, InteractionHand p_455648_) { - ItemStack itemstack = p_458495_.getItemInHand(p_455648_); + public InteractionResult mobInteract(final Player player, final InteractionHand hand) { + ItemStack itemstack = player.getItemInHand(hand); - if (itemstack.is(Items.VILLAGER_SPAWN_EGG) || !this.isAlive() || this.isTrading() || this.isSleeping()) { -+ if (itemstack.is(Items.VILLAGER_SPAWN_EGG) || !this.isAlive() || this.isTrading() || this.isSleeping() || p_458495_.isSecondaryUseActive()) { - return super.mobInteract(p_458495_, p_455648_); ++ if (itemstack.is(Items.VILLAGER_SPAWN_EGG) || !this.isAlive() || this.isTrading() || this.isSleeping() || player.isSecondaryUseActive()) { + return super.mobInteract(player, hand); } else if (this.isBaby()) { this.setUnhappy(); @@ -760,7 +_,7 @@ @Override - public void thunderHit(ServerLevel p_455159_, LightningBolt p_455393_) { -- if (p_455159_.getDifficulty() != Difficulty.PEACEFUL) { -+ if (p_455159_.getDifficulty() != Difficulty.PEACEFUL && net.minecraftforge.event.ForgeEventFactory.canLivingConvert(this, EntityType.WITCH, (timer) -> {})) { - LOGGER.info("Villager {} was struck by lightning {}.", this, p_455393_); - Witch witch = this.convertTo(EntityType.WITCH, ConversionParams.single(this, false, false), p_451416_ -> { - p_451416_.finalizeSpawn(p_455159_, p_455159_.getCurrentDifficultyAt(p_451416_.blockPosition()), EntitySpawnReason.CONVERSION, null); + public void thunderHit(final ServerLevel level, final LightningBolt lightningBolt) { +- if (level.getDifficulty() != Difficulty.PEACEFUL) { ++ if (level.getDifficulty() != Difficulty.PEACEFUL && net.minecraftforge.event.ForgeEventFactory.canLivingConvert(this, EntityType.WITCH, (timer) -> {})) { + LOGGER.info("Villager {} was struck by lightning {}.", this, lightningBolt); + Witch witch = this.convertTo(EntityType.WITCH, ConversionParams.single(this, false, false), w -> { + w.finalizeSpawn(level, level.getCurrentDifficultyAt(w.blockPosition()), EntitySpawnReason.CONVERSION, null); diff --git a/patches/minecraft/net/minecraft/world/entity/npc/villager/VillagerTrades.java.patch b/patches/minecraft/net/minecraft/world/entity/npc/villager/VillagerTrades.java.patch deleted file mode 100644 index 6dc98e6971..0000000000 --- a/patches/minecraft/net/minecraft/world/entity/npc/villager/VillagerTrades.java.patch +++ /dev/null @@ -1,30 +0,0 @@ ---- a/net/minecraft/world/entity/npc/villager/VillagerTrades.java -+++ b/net/minecraft/world/entity/npc/villager/VillagerTrades.java -@@ -854,7 +_,7 @@ - 5 - ) - ) -- .build(); -+ .build().stream().collect(net.minecraft.util.Util.toMutableList()); // Forge: Turned into an ArrayList so it can be modified in VillagerTradingManager - public static final Map, Int2ObjectMap> EXPERIMENTAL_TRADES = Map.of( - VillagerProfession.LIBRARIAN, - toIntMap( -@@ -1279,6 +_,7 @@ - private final int villagerXp; - - public EmeraldsForVillagerTypeItem(int p_453689_, int p_451560_, int p_457573_, Map, Item> p_450639_) { -+ if (false) // FORGE: Modders can add custom villager types, so remove this validation - BuiltInRegistries.VILLAGER_TYPE.registryKeySet().stream().filter(p_455509_ -> !p_450639_.containsKey(p_455509_)).findAny().ifPresent(p_460167_ -> { - throw new IllegalStateException("Missing trade for villager type: " + p_460167_); - }); -@@ -1295,7 +_,9 @@ - if (resourcekey == null) { - return null; - } else { -- ItemCost itemcost = new ItemCost(this.trades.get(resourcekey), this.cost); -+ Item item = this.trades.get(resourcekey); -+ if (item == null) return null; // FORGE: Account for modded villager types by returning null if there is no trade -+ ItemCost itemcost = new ItemCost(item, this.cost); - return new MerchantOffer(itemcost, new ItemStack(Items.EMERALD), this.maxUses, this.villagerXp, 0.05F); - } - } else { diff --git a/patches/minecraft/net/minecraft/world/entity/npc/villager/VillagerType.java.patch b/patches/minecraft/net/minecraft/world/entity/npc/villager/VillagerType.java.patch index e836aa12ce..36e59d98b5 100644 --- a/patches/minecraft/net/minecraft/world/entity/npc/villager/VillagerType.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/npc/villager/VillagerType.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/world/entity/npc/villager/VillagerType.java +++ b/net/minecraft/world/entity/npc/villager/VillagerType.java @@ -80,4 +_,9 @@ - public static ResourceKey byBiome(Holder p_452045_) { - return p_452045_.unwrapKey().map(BY_BIOME::get).orElse(PLAINS); + public static ResourceKey byBiome(final Holder biome) { + return biome.unwrapKey().map(BY_BIOME::get).orElse(PLAINS); } + + /** FORGE: Registers the VillagerType that will spawn in the given biome. This method should be called during FMLCommonSetupEvent using event.enqueueWork() */ diff --git a/patches/minecraft/net/minecraft/world/entity/player/Input.java.patch b/patches/minecraft/net/minecraft/world/entity/player/Input.java.patch index 11b0d3ca82..f13477d3bd 100644 --- a/patches/minecraft/net/minecraft/world/entity/player/Input.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/player/Input.java.patch @@ -3,7 +3,7 @@ @@ -37,4 +_,8 @@ } }; - public static Input EMPTY = new Input(false, false, false, false, false, false, false); + public static final Input EMPTY = new Input(false, false, false, false, false, false, false); + + public Input jump(boolean value) { + return new Input(forward, backward, left, right, value, shift, sprint); diff --git a/patches/minecraft/net/minecraft/world/entity/player/Inventory.java.patch b/patches/minecraft/net/minecraft/world/entity/player/Inventory.java.patch index ccf24a7062..b0aade4ba3 100644 --- a/patches/minecraft/net/minecraft/world/entity/player/Inventory.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/player/Inventory.java.patch @@ -8,10 +8,10 @@ + return this.equipment; + } + - private boolean hasRemainingSpaceForItem(ItemStack p_36015_, ItemStack p_36016_) { - return !p_36015_.isEmpty() && ItemStack.isSameItemSameComponents(p_36015_, p_36016_) && p_36015_.isStackable() && p_36015_.getCount() < this.getMaxStackSize(p_36015_); - } -@@ -166,7 +_,7 @@ + private boolean hasRemainingSpaceForItem(final ItemStack slotItemStack, final ItemStack newItemStack) { + return !slotItemStack.isEmpty() + && ItemStack.isSameItemSameComponents(slotItemStack, newItemStack) +@@ -169,7 +_,7 @@ for (int k = 0; k < 9; k++) { int l = (this.selected + k) % 9; @@ -20,7 +20,7 @@ return l; } } -@@ -237,7 +_,7 @@ +@@ -240,7 +_,7 @@ for (int i = 0; i < this.items.size(); i++) { ItemStack itemstack = this.getItem(i); if (!itemstack.isEmpty()) { @@ -29,12 +29,12 @@ } } } -@@ -287,6 +_,8 @@ +@@ -290,6 +_,8 @@ } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Adding item to inventory"); CrashReportCategory crashreportcategory = crashreport.addCategory("Item being added"); -+ crashreportcategory.setDetail("Registry Name", () -> String.valueOf(net.minecraftforge.registries.ForgeRegistries.ITEMS.getKey(p_36042_.getItem()))); -+ crashreportcategory.setDetail("Item Class", () -> p_36042_.getItem().getClass().getName()); - crashreportcategory.setDetail("Item ID", Item.getId(p_36042_.getItem())); - crashreportcategory.setDetail("Item data", p_36042_.getDamageValue()); - crashreportcategory.setDetail("Item name", () -> p_36042_.getHoverName().getString()); ++ crashreportcategory.setDetail("Registry Name", () -> String.valueOf(net.minecraftforge.registries.ForgeRegistries.ITEMS.getKey(itemStack.getItem()))); ++ crashreportcategory.setDetail("Item Class", () -> itemStack.getItem().getClass().getName()); + crashreportcategory.setDetail("Item ID", Item.getId(itemStack.getItem())); + crashreportcategory.setDetail("Item data", itemStack.getDamageValue()); + crashreportcategory.setDetail("Item name", () -> itemStack.getHoverName().getString()); diff --git a/patches/minecraft/net/minecraft/world/entity/player/Player.java.patch b/patches/minecraft/net/minecraft/world/entity/player/Player.java.patch index 307635bf46..5f9f869a18 100644 --- a/patches/minecraft/net/minecraft/world/entity/player/Player.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/player/Player.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java -@@ -122,7 +_,7 @@ +@@ -124,7 +_,7 @@ import net.minecraft.world.scores.Team; import org.jspecify.annotations.Nullable; @@ -9,19 +9,19 @@ public static final int MAX_HEALTH = 20; public static final int SLEEP_DURATION = 100; public static final int WAKE_UP_DURATION = 10; -@@ -173,6 +_,9 @@ - public @Nullable Entity currentExplosionCause; - private boolean ignoreFallDamageFromCurrentImpulse = false; - private int currentImpulseContextResetGraceTime = 0; +@@ -172,6 +_,9 @@ + private Optional lastDeathLocation = Optional.empty(); + public @Nullable FishingHook fishing; + protected float hurtDir; + private final java.util.Collection prefixes = new java.util.LinkedList<>(); + private final java.util.Collection suffixes = new java.util.LinkedList<>(); + @Nullable private Pose forcedPose; - public Player(Level p_250508_, GameProfile p_252153_) { - super(EntityType.PLAYER, p_250508_); -@@ -181,6 +_,17 @@ + public Player(final Level level, final GameProfile gameProfile) { + super(EntityType.PLAYER, level); +@@ -180,6 +_,17 @@ this.inventory = new Inventory(this, this.equipment); - this.inventoryMenu = new InventoryMenu(this.inventory, !p_250508_.isClientSide(), this); + this.inventoryMenu = new InventoryMenu(this.inventory, !level.isClientSide(), this); this.containerMenu = this.inventoryMenu; + + // Forge: wrapped inventories moved to constructor as the inventory init was moved in here too @@ -37,7 +37,7 @@ } @Override -@@ -215,7 +_,8 @@ +@@ -213,7 +_,8 @@ .add(Attributes.MINING_EFFICIENCY) .add(Attributes.SWEEPING_DAMAGE_RATIO) .add(Attributes.WAYPOINT_TRANSMIT_RANGE, 6.0E7) @@ -47,7 +47,7 @@ } @Override -@@ -229,6 +_,7 @@ +@@ -227,6 +_,7 @@ @Override public void tick() { @@ -55,24 +55,24 @@ this.noPhysics = this.isSpectator(); if (this.isSpectator() || this.isPassenger()) { this.setOnGround(false); -@@ -244,7 +_,7 @@ - this.sleepCounter = 100; +@@ -243,7 +_,7 @@ } -- if (!this.level().isClientSide() && !this.level().environmentAttributes().getValue(EnvironmentAttributes.BED_RULE, this.position()).canSleep(this.level())) { -+ if (!this.level().isClientSide() && !net.minecraftforge.event.ForgeEventFactory.onSleepingTimeCheck(this, getSleepingPos(), this.level().environmentAttributes().getValue(EnvironmentAttributes.BED_RULE, this.position()))) { + if (!this.level().isClientSide() +- && !this.level().environmentAttributes().getValue(EnvironmentAttributes.BED_RULE, this.position()).canSleep(this.level())) { ++ && !net.minecraftforge.event.ForgeEventFactory.onSleepingTimeCheck(this, getSleepingPos(), this.level().environmentAttributes().getValue(EnvironmentAttributes.BED_RULE, this.position()))) { this.stopSleepInBed(false, true); } } else if (this.sleepCounter > 0) { -@@ -283,6 +_,7 @@ - if (this.currentImpulseContextResetGraceTime > 0) { - this.currentImpulseContextResetGraceTime--; +@@ -308,6 +_,7 @@ + if (!this.getAbilities().flying) { + super.onAboveBubbleColumn(dragDown, pos); } + net.minecraftforge.event.ForgeEventFactory.onPlayerPostTick(this); } @Override -@@ -342,6 +_,10 @@ +@@ -338,6 +_,10 @@ } protected void updatePlayerPose() { @@ -83,112 +83,112 @@ if (this.canPlayerFitWithinBlocksAndEntitiesWhen(Pose.SWIMMING)) { Pose pose = this.getDesiredPose(); Pose pose1; -@@ -526,6 +_,7 @@ +@@ -522,6 +_,7 @@ @Override - public void die(DamageSource p_36152_) { -+ if (net.minecraftforge.event.ForgeEventFactory.onLivingDeath(this, p_36152_)) return; - super.die(p_36152_); + public void die(final DamageSource source) { ++ if (net.minecraftforge.event.ForgeEventFactory.onLivingDeath(this, source)) return; + super.die(source); this.reapplyPosition(); if (!this.isSpectator() && this.level() instanceof ServerLevel serverlevel) { -@@ -582,10 +_,15 @@ +@@ -578,10 +_,15 @@ } - public @Nullable ItemEntity drop(ItemStack p_36177_, boolean p_36178_) { -- return this.drop(p_36177_, false, p_36178_); -+ return net.minecraftforge.common.ForgeHooks.onPlayerTossEvent(this, p_36177_, p_36178_); + public @Nullable ItemEntity drop(final ItemStack itemStack, final boolean thrownFromHand) { +- return this.drop(itemStack, false, thrownFromHand); ++ return net.minecraftforge.common.ForgeHooks.onPlayerTossEvent(this, itemStack, thrownFromHand); } + /** @deprecated Use {@link #getDestroySpeed(BlockState,BlockPos) */ - public float getDestroySpeed(BlockState p_36282_) { -+ return getDestroySpeed(p_36282_, null); + public float getDestroySpeed(final BlockState state) { ++ return getDestroySpeed(state, null); + } + -+ public float getDestroySpeed(BlockState p_36282_, @Nullable BlockPos pos) { - float f = this.inventory.getSelectedItem().getDestroySpeed(p_36282_); ++ public float getDestroySpeed(BlockState state, @Nullable BlockPos pos) { + float f = this.inventory.getSelectedItem().getDestroySpeed(state); if (f > 1.0F) { f += (float)this.getAttributeValue(Attributes.MINING_EFFICIENCY); -@@ -614,11 +_,14 @@ +@@ -610,11 +_,14 @@ f /= 5.0F; } -+ f = net.minecraftforge.event.ForgeEventFactory.getBreakSpeed(this, p_36282_, f, pos); ++ f = net.minecraftforge.event.ForgeEventFactory.getBreakSpeed(this, state, f, pos); + return f; } - public boolean hasCorrectToolForDrops(BlockState p_36299_) { -- return !p_36299_.requiresCorrectToolForDrops() || this.inventory.getSelectedItem().isCorrectToolForDrops(p_36299_); -+ var vanilla = !p_36299_.requiresCorrectToolForDrops() || this.inventory.getSelectedItem().isCorrectToolForDrops(p_36299_); -+ return net.minecraftforge.event.ForgeEventFactory.doPlayerHarvestCheck(this, p_36299_, vanilla); + public boolean hasCorrectToolForDrops(final BlockState state) { +- return !state.requiresCorrectToolForDrops() || this.inventory.getSelectedItem().isCorrectToolForDrops(state); ++ var vanilla = !state.requiresCorrectToolForDrops() || this.inventory.getSelectedItem().isCorrectToolForDrops(state); ++ return net.minecraftforge.event.ForgeEventFactory.doPlayerHarvestCheck(this, state, vanilla); } @Override -@@ -685,6 +_,7 @@ +@@ -675,6 +_,7 @@ @Override - public boolean hurtServer(ServerLevel p_369360_, DamageSource p_364544_, float p_368576_) { -+ if (!net.minecraftforge.common.ForgeHooks.onPlayerAttack(this, p_364544_, p_368576_)) return false; - if (this.isInvulnerableTo(p_369360_, p_364544_)) { + public boolean hurtServer(final ServerLevel level, final DamageSource source, float damage) { ++ if (!net.minecraftforge.common.ForgeHooks.onPlayerAttack(this, source, damage)) return false; + if (this.isInvulnerableTo(level, source)) { return false; - } else if (this.abilities.invulnerable && !p_364544_.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) { -@@ -753,10 +_,13 @@ + } else if (this.abilities.invulnerable && !source.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) { +@@ -743,10 +_,13 @@ @Override - protected void actuallyHurt(ServerLevel p_365751_, DamageSource p_36312_, float p_36313_) { - if (!this.isInvulnerableTo(p_365751_, p_36312_)) { -+ p_36313_ = net.minecraftforge.common.ForgeHooks.onLivingHurt(this, p_36312_, p_36313_); -+ if (p_36313_ <= 0) return; - p_36313_ = this.getDamageAfterArmorAbsorb(p_36312_, p_36313_); - p_36313_ = this.getDamageAfterMagicAbsorb(p_36312_, p_36313_); - float f1 = Math.max(p_36313_ - this.getAbsorptionAmount(), 0.0F); - this.setAbsorptionAmount(this.getAbsorptionAmount() - (p_36313_ - f1)); -+ f1 = net.minecraftforge.common.ForgeHooks.onLivingDamage(this, p_36312_, f1); - float f = p_36313_ - f1; + protected void actuallyHurt(final ServerLevel level, final DamageSource source, float dmg) { + if (!this.isInvulnerableTo(level, source)) { ++ dmg = net.minecraftforge.common.ForgeHooks.onLivingHurt(this, source, dmg); ++ if (dmg <= 0) return; + dmg = this.getDamageAfterArmorAbsorb(source, dmg); + dmg = this.getDamageAfterMagicAbsorb(source, dmg); + float f1 = Math.max(dmg - this.getAbsorptionAmount(), 0.0F); + this.setAbsorptionAmount(this.getAbsorptionAmount() - (dmg - f1)); ++ f1 = net.minecraftforge.common.ForgeHooks.onLivingDamage(this, source, f1); + float f = dmg - f1; if (f > 0.0F && f < 3.4028235E37F) { this.awardStat(Stats.DAMAGE_ABSORBED, Math.round(f * 10.0F)); -@@ -827,6 +_,10 @@ +@@ -824,6 +_,10 @@ return InteractionResult.PASS; } else { -+ var event = new net.minecraftforge.event.entity.player.PlayerInteractEvent.EntityInteract(this, p_36159_, p_36158_); -+ if (net.minecraftforge.event.entity.player.PlayerInteractEvent.EntityInteract.BUS.post(event)) { ++ var event = new net.minecraftforge.event.entity.player.PlayerInteractEvent.EntityInteractSpecific(this, hand, entity, location); ++ if (net.minecraftforge.event.entity.player.PlayerInteractEvent.EntityInteractSpecific.BUS.post(event)) { + return event.getCancellationResult(); + } - ItemStack itemstack = this.getItemInHand(p_36159_); + ItemStack itemstack = this.getItemInHand(hand); ItemStack itemstack1 = itemstack.copy(); - InteractionResult interactionresult = p_36158_.interact(this, p_36159_); -@@ -835,6 +_,10 @@ + InteractionResult interactionresult = entity.interact(this, hand, location); +@@ -832,6 +_,10 @@ itemstack.setCount(itemstack1.getCount()); } + if (!this.abilities.instabuild && itemstack.isEmpty()) { -+ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(this, itemstack1, p_36159_.asEquipmentSlot()); ++ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(this, itemstack1, hand.asEquipmentSlot()); + } + return interactionresult; } else { - if (!itemstack.isEmpty() && p_36158_ instanceof LivingEntity) { -@@ -846,6 +_,7 @@ + if (!itemstack.isEmpty() && entity instanceof LivingEntity) { +@@ -843,6 +_,7 @@ if (interactionresult1.consumesAction()) { - this.level().gameEvent(GameEvent.ENTITY_INTERACT, p_36158_.position(), GameEvent.Context.of(this)); + this.level().gameEvent(GameEvent.ENTITY_INTERACT, entity.position(), GameEvent.Context.of(this)); if (itemstack.isEmpty() && !this.hasInfiniteMaterials()) { -+ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(this, itemstack1, p_36159_.asEquipmentSlot()); - this.setItemInHand(p_36159_, ItemStack.EMPTY); ++ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(this, itemstack1, hand.asEquipmentSlot()); + this.setItemInHand(hand, ItemStack.EMPTY); } -@@ -945,6 +_,7 @@ +@@ -942,6 +_,7 @@ } - public void attack(Entity p_36347_) { -+ if (!net.minecraftforge.common.ForgeHooks.onPlayerAttackTarget(this, p_36347_)) return; - if (!this.cannotAttack(p_36347_)) { + public void attack(final Entity entity) { ++ if (!net.minecraftforge.common.ForgeHooks.onPlayerAttackTarget(this, entity)) return; + if (!this.cannotAttack(entity)) { float f = this.isAutoSpinAttack() ? this.autoSpinAttackDmg : (float)this.getAttributeValue(Attributes.ATTACK_DAMAGE); ItemStack itemstack = this.getWeaponItem(); -@@ -966,8 +_,10 @@ +@@ -963,8 +_,10 @@ - f += itemstack.getItem().getAttackDamageBonus(p_36347_, f, damagesource); - boolean flag2 = flag && this.canCriticalAttack(p_36347_); -+ var hitResult = net.minecraftforge.common.ForgeHooks.getCriticalHit(this, p_36347_, flag2, flag2 ? 1.5F : 1.0F); + f += itemstack.getItem().getAttackDamageBonus(entity, f, damagesource); + boolean flag2 = flag && this.canCriticalAttack(entity); ++ var hitResult = net.minecraftforge.common.ForgeHooks.getCriticalHit(this, entity, flag2, flag2 ? 1.5F : 1.0F); + flag2 = hitResult != null; if (flag2) { - f *= 1.5F; @@ -196,7 +196,7 @@ } float f3 = f + f2; -@@ -1039,7 +_,7 @@ +@@ -1036,7 +_,7 @@ double d0 = this.getKnownMovement().horizontalDistanceSqr(); double d1 = this.getSpeed() * 2.5; if (d0 < Mth.square(d1)) { @@ -205,18 +205,18 @@ } } -@@ -1075,8 +_,8 @@ +@@ -1079,8 +_,8 @@ - private void itemAttackInteraction(Entity p_456980_, ItemStack p_453550_, DamageSource p_453296_, boolean p_457792_) { - Entity entity = p_456980_; -- if (p_456980_ instanceof EnderDragonPart) { -- entity = ((EnderDragonPart)p_456980_).parentMob; -+ if (p_456980_ instanceof net.minecraftforge.entity.PartEntity pe) { -+ entity = pe.getParent(); + private void itemAttackInteraction(final Entity entity, final ItemStack attackingItemStack, final DamageSource damageSource, final boolean applyToTarget) { + Entity entityx = entity; +- if (entity instanceof EnderDragonPart) { +- entityx = ((EnderDragonPart)entity).parentMob; ++ if (entity instanceof net.minecraftforge.entity.PartEntity pe) { ++ entityx = pe.getParent(); } boolean flag = false; -@@ -1101,6 +_,7 @@ +@@ -1105,6 +_,7 @@ } else { this.setItemInHand(InteractionHand.OFF_HAND, ItemStack.EMPTY); } @@ -224,83 +224,87 @@ } } } -@@ -1141,7 +_,7 @@ +@@ -1145,7 +_,7 @@ if (this.level() instanceof ServerLevel serverlevel) { - float f = 1.0F + (float)this.getAttributeValue(Attributes.SWEEPING_DAMAGE_RATIO) * p_451630_; + float f = 1.0F + (float)this.getAttributeValue(Attributes.SWEEPING_DAMAGE_RATIO) * baseDamage; -- for (LivingEntity livingentity : this.level().getEntitiesOfClass(LivingEntity.class, p_451034_.getBoundingBox().inflate(1.0, 0.25, 1.0))) { -+ for (LivingEntity livingentity : this.level().getEntitiesOfClass(LivingEntity.class, this.getItemInHand(InteractionHand.MAIN_HAND).getSweepHitBox(this, p_451034_))) { +- for (LivingEntity livingentity : this.level().getEntitiesOfClass(LivingEntity.class, entity.getBoundingBox().inflate(1.0, 0.25, 1.0))) { ++ for (LivingEntity livingentity : this.level().getEntitiesOfClass(LivingEntity.class, this.getItemInHand(InteractionHand.MAIN_HAND).getSweepHitBox(this, entity))) { if (livingentity != this - && livingentity != p_451034_ + && livingentity != entity && !this.isAlliedTo(livingentity) -@@ -1307,6 +_,7 @@ +@@ -1311,6 +_,7 @@ } - public void stopSleepInBed(boolean p_36226_, boolean p_36227_) { -+ net.minecraftforge.event.ForgeEventFactory.onPlayerWakeup(this, p_36226_, p_36227_); + public void stopSleepInBed(final boolean forcefulWakeUp, final boolean updateLevelList) { ++ net.minecraftforge.event.ForgeEventFactory.onPlayerWakeup(this, forcefulWakeUp, updateLevelList); super.stopSleeping(); - if (this.level() instanceof ServerLevel && p_36227_) { + if (this.level() instanceof ServerLevel && updateLevelList) { ((ServerLevel)this.level()).updateSleepingPlayerList(); -@@ -1415,6 +_,7 @@ +@@ -1420,6 +_,7 @@ @Override - public boolean causeFallDamage(double p_391627_, float p_150093_, DamageSource p_150095_) { + public boolean causeFallDamage(final double fallDistance, final float damageModifier, final DamageSource damageSource) { if (this.abilities.mayfly) { -+ net.minecraftforge.event.ForgeEventFactory.onPlayerFall(this, p_150093_, p_150093_); ++ net.minecraftforge.event.ForgeEventFactory.onPlayerFall(this, fallDistance, damageModifier); return false; } else { - if (p_391627_ >= 2.0) { -@@ -1469,13 +_,13 @@ - protected void playStepSound(BlockPos p_282121_, BlockState p_282194_) { + if (fallDistance >= 2.0) { +@@ -1454,13 +_,13 @@ + protected void playStepSound(final BlockPos onPos, final BlockState onState) { if (this.isInWater()) { this.waterSwimSound(); -- this.playMuffledStepSound(p_282194_); -+ this.playMuffledStepSound(p_282194_, p_282121_); +- this.playMuffledStepSound(onState); ++ this.playMuffledStepSound(onState, onPos); } else { - BlockPos blockpos = this.getPrimaryStepSoundBlockPos(p_282121_); - if (!p_282121_.equals(blockpos)) { + BlockPos blockpos = this.getPrimaryStepSoundBlockPos(onPos); + if (!onPos.equals(blockpos)) { BlockState blockstate = this.level().getBlockState(blockpos); if (blockstate.is(BlockTags.COMBINATION_STEP_SOUND_BLOCKS)) { -- this.playCombinationStepSounds(blockstate, p_282194_); -+ this.playCombinationStepSounds(blockstate, p_282194_, blockpos, p_282121_); +- this.playCombinationStepSounds(blockstate, onState); ++ this.playCombinationStepSounds(blockstate, onState, blockpos, onPos); } else { super.playStepSound(blockpos, blockstate); } -@@ -1506,6 +_,12 @@ +@@ -1490,7 +_,13 @@ + this.tryResetCurrentImpulseContext(); } - public void giveExperiencePoints(int p_36291_) { -+ var event = net.minecraftforge.event.ForgeEventFactory.onPlayerXpChange(this, p_36291_); +- public void giveExperiencePoints(final int i) { ++ public void giveExperiencePoints(final int points) { ++ var event = net.minecraftforge.event.ForgeEventFactory.onPlayerXpChange(this, points); + if (event == null) { + return; + } -+ p_36291_ = event.getAmount(); ++ int i = event.getAmount(); + - this.increaseScore(p_36291_); - this.experienceProgress = this.experienceProgress + (float)p_36291_ / this.getXpNeededForNextLevel(); - this.totalExperience = Mth.clamp(this.totalExperience + p_36291_, 0, Integer.MAX_VALUE); -@@ -1533,7 +_,7 @@ + this.increaseScore(i); + this.experienceProgress = this.experienceProgress + (float)i / this.getXpNeededForNextLevel(); + this.totalExperience = Mth.clamp(this.totalExperience + i, 0, Integer.MAX_VALUE); +@@ -1518,7 +_,7 @@ } - public void onEnchantmentPerformed(ItemStack p_36172_, int p_36173_) { -- this.experienceLevel -= p_36173_; -+ giveExperienceLevels(-p_36173_); + public void onEnchantmentPerformed(final ItemStack itemStack, final int enchantmentCost) { +- this.experienceLevel -= enchantmentCost; ++ giveExperienceLevels(-enchantmentCost); if (this.experienceLevel < 0) { this.experienceLevel = 0; this.experienceProgress = 0.0F; -@@ -1544,6 +_,12 @@ +@@ -1528,7 +_,13 @@ + this.enchantmentSeed = this.random.nextInt(); } - public void giveExperienceLevels(int p_36276_) { -+ var event = net.minecraftforge.event.ForgeEventFactory.onPlayerLevelChange(this, p_36276_); +- public void giveExperienceLevels(final int amount) { ++ public void giveExperienceLevels(final int points) { ++ var event = net.minecraftforge.event.ForgeEventFactory.onPlayerLevelChange(this, points); + if (event == null) { + return; + } -+ p_36276_ = event.getLevels(); ++ int amount = event.getLevels(); + - this.experienceLevel = IntMath.saturatedAdd(this.experienceLevel, p_36276_); + this.experienceLevel = IntMath.saturatedAdd(this.experienceLevel, amount); if (this.experienceLevel < 0) { this.experienceLevel = 0; -@@ -1689,7 +_,13 @@ +@@ -1667,7 +_,13 @@ @Override public Component getDisplayName() { @@ -315,32 +319,32 @@ return this.decorateDisplayNameComponent(mutablecomponent); } -@@ -1869,18 +_,19 @@ - Predicate predicate = ((ProjectileWeaponItem)p_36349_.getItem()).getSupportedHeldProjectiles(); +@@ -1857,18 +_,19 @@ + Predicate predicate = ((ProjectileWeaponItem)heldWeapon.getItem()).getSupportedHeldProjectiles(); ItemStack itemstack = ProjectileWeaponItem.getHeldProjectile(this, predicate); if (!itemstack.isEmpty()) { - return itemstack; -+ return net.minecraftforge.common.ForgeHooks.getProjectile(this, p_36349_, itemstack); ++ return net.minecraftforge.common.ForgeHooks.getProjectile(this, heldWeapon, itemstack); } else { - predicate = ((ProjectileWeaponItem)p_36349_.getItem()).getAllSupportedProjectiles(); + predicate = ((ProjectileWeaponItem)heldWeapon.getItem()).getAllSupportedProjectiles(); for (int i = 0; i < this.inventory.getContainerSize(); i++) { ItemStack itemstack1 = this.inventory.getItem(i); if (predicate.test(itemstack1)) { - return itemstack1; -+ return net.minecraftforge.common.ForgeHooks.getProjectile(this, p_36349_, itemstack1); ++ return net.minecraftforge.common.ForgeHooks.getProjectile(this, heldWeapon, itemstack1); } } - return this.hasInfiniteMaterials() ? new ItemStack(Items.ARROW) : ItemStack.EMPTY; + var vanilla = this.abilities.instabuild ? new ItemStack(Items.ARROW) : ItemStack.EMPTY; -+ return net.minecraftforge.common.ForgeHooks.getProjectile(this, p_36349_, vanilla); ++ return net.minecraftforge.common.ForgeHooks.getProjectile(this, heldWeapon, vanilla); } } } -@@ -2035,6 +_,54 @@ - this.currentImpulseImpactPos = null; - this.ignoreFallDamageFromCurrentImpulse = false; +@@ -1989,6 +_,54 @@ + double d0 = this.blockInteractionRange() + buffer; + return new AABB(pos).distanceToSqr(this.getEyePosition()) < d0 * d0; } + + public Collection getPrefixes() { diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/FireworkRocketEntity.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/FireworkRocketEntity.java.patch index 43223d1376..952f0d7bc2 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/FireworkRocketEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/FireworkRocketEntity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/projectile/FireworkRocketEntity.java +++ b/net/minecraft/world/entity/projectile/FireworkRocketEntity.java -@@ -306,6 +_,13 @@ +@@ -314,6 +_,13 @@ } @Override @@ -11,6 +11,6 @@ + } + + @Override - public DoubleDoubleImmutablePair calculateHorizontalHurtKnockbackDirection(LivingEntity p_343097_, DamageSource p_343307_) { - double d0 = p_343097_.position().x - this.position().x; - double d1 = p_343097_.position().z - this.position().z; + public DoubleDoubleImmutablePair calculateHorizontalHurtKnockbackDirection(final LivingEntity hurtEntity, final DamageSource damageSource) { + double d0 = hurtEntity.position().x - this.position().x; + double d1 = hurtEntity.position().z - this.position().z; diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/FishingHook.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/FishingHook.java.patch index 1458fb8a7e..091b24e54e 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/FishingHook.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/FishingHook.java.patch @@ -1,17 +1,17 @@ --- a/net/minecraft/world/entity/projectile/FishingHook.java +++ b/net/minecraft/world/entity/projectile/FishingHook.java -@@ -249,8 +_,8 @@ - if (p_37137_.canInteractWithLevel()) { - ItemStack itemstack = p_37137_.getMainHandItem(); - ItemStack itemstack1 = p_37137_.getOffhandItem(); +@@ -251,8 +_,8 @@ + if (owner.canInteractWithLevel()) { + ItemStack itemstack = owner.getMainHandItem(); + ItemStack itemstack1 = owner.getOffhandItem(); - boolean flag = itemstack.is(Items.FISHING_ROD); - boolean flag1 = itemstack1.is(Items.FISHING_ROD); + boolean flag = itemstack.canPerformAction(net.minecraftforge.common.ToolActions.FISHING_ROD_CAST); + boolean flag1 = itemstack1.canPerformAction(net.minecraftforge.common.ToolActions.FISHING_ROD_CAST); - if ((flag || flag1) && this.distanceToSqr(p_37137_) <= 1024.0) { + if ((flag || flag1) && this.distanceToSqr(owner) <= 1024.0) { return false; } -@@ -262,6 +_,7 @@ +@@ -264,6 +_,7 @@ private void checkCollision() { HitResult hitresult = ProjectileUtil.getHitResultOnMoveVector(this, this::canHitEntity); @@ -19,17 +19,17 @@ this.hitTargetOrDeflectSelf(hitresult); } -@@ -451,6 +_,7 @@ +@@ -453,6 +_,7 @@ Player player = this.getPlayerOwner(); if (!this.level().isClientSide() && player != null && !this.shouldStopFishing(player)) { int i = 0; + net.minecraftforge.event.entity.player.ItemFishedEvent event = null; if (this.hookedIn != null) { this.pullEntity(this.hookedIn); - CriteriaTriggers.FISHING_ROD_HOOKED.trigger((ServerPlayer)player, p_37157_, this, Collections.emptyList()); -@@ -461,10 +_,16 @@ + CriteriaTriggers.FISHING_ROD_HOOKED.trigger((ServerPlayer)player, rod, this, Collections.emptyList()); +@@ -463,10 +_,16 @@ .withParameter(LootContextParams.ORIGIN, this.position()) - .withParameter(LootContextParams.TOOL, p_37157_) + .withParameter(LootContextParams.TOOL, rod) .withParameter(LootContextParams.THIS_ENTITY, this) + .withParameter(LootContextParams.ATTACKING_ENTITY, this.getOwner()) .withLuck(this.luck + player.getLuck()) @@ -41,10 +41,10 @@ + this.discard(); + return event.getRodDamage(); + } - CriteriaTriggers.FISHING_ROD_HOOKED.trigger((ServerPlayer)player, p_37157_, this, list); + CriteriaTriggers.FISHING_ROD_HOOKED.trigger((ServerPlayer)player, rod, this, list); for (ItemStack itemstack : list) { -@@ -494,7 +_,7 @@ +@@ -492,7 +_,7 @@ } this.discard(); diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/Projectile.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/Projectile.java.patch index d2908e4058..26017c4257 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/Projectile.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/Projectile.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/entity/projectile/Projectile.java +++ b/net/minecraft/world/entity/projectile/Projectile.java -@@ -349,7 +_,7 @@ +@@ -363,7 +_,7 @@ @Override - public boolean mayInteract(ServerLevel p_364907_, BlockPos p_150168_) { + public boolean mayInteract(final ServerLevel level, final BlockPos pos) { Entity entity = this.getOwner(); -- return entity instanceof Player ? entity.mayInteract(p_364907_, p_150168_) : entity == null || p_364907_.getGameRules().get(GameRules.MOB_GRIEFING); -+ return entity instanceof Player ? entity.mayInteract(p_364907_, p_150168_) : entity == null || net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(p_364907_, entity); +- return entity instanceof Player ? entity.mayInteract(level, pos) : entity == null || level.getGameRules().get(GameRules.MOB_GRIEFING); ++ return entity instanceof Player ? entity.mayInteract(level, pos) : entity == null || net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(level, entity); } - public boolean mayBreak(ServerLevel p_361134_) { + public boolean mayBreak(final ServerLevel level) { diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/ProjectileUtil.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/ProjectileUtil.java.patch index 8b9d1ecb0c..0699accf74 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/ProjectileUtil.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/ProjectileUtil.java.patch @@ -1,25 +1,25 @@ --- a/net/minecraft/world/entity/projectile/ProjectileUtil.java +++ b/net/minecraft/world/entity/projectile/ProjectileUtil.java -@@ -113,7 +_,7 @@ +@@ -127,7 +_,7 @@ Vec3 vec31 = optional.get(); - double d1 = p_37289_.distanceToSqr(vec31); + double d1 = from.distanceToSqr(vec31); if (d1 < d0 || d0 == 0.0) { -- if (entity1.getRootVehicle() == p_37288_.getRootVehicle()) { -+ if (entity1.getRootVehicle() == p_37288_.getRootVehicle() && !entity1.canRiderInteract()) { +- if (entity1.getRootVehicle() == except.getRootVehicle()) { ++ if (entity1.getRootVehicle() == except.getRootVehicle() && !entity1.canRiderInteract()) { if (d0 == 0.0) { entity = entity1; vec3 = vec31; -@@ -240,8 +_,13 @@ +@@ -266,8 +_,13 @@ } } + @Deprecated - public static InteractionHand getWeaponHoldingHand(LivingEntity p_37298_, Item p_37299_) { - return p_37298_.getMainHandItem().is(p_37299_) ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND; + public static InteractionHand getWeaponHoldingHand(final LivingEntity mob, final Item weaponItem) { + return mob.getMainHandItem().is(weaponItem) ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND; + } + + public static InteractionHand getWeaponHoldingHand(LivingEntity livingEntity, Predicate itemPredicate) { + return itemPredicate.test(livingEntity.getMainHandItem().getItem()) ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND; } - public static AbstractArrow getMobArrow(LivingEntity p_37301_, ItemStack p_37302_, float p_37303_, @Nullable ItemStack p_342402_) { + public static AbstractArrow getMobArrow(final LivingEntity mob, final ItemStack projectile, final float power, final @Nullable ItemStack firedFromWeapon) { diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/ShulkerBullet.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/ShulkerBullet.java.patch index 4faee46142..72d334cb43 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/ShulkerBullet.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/ShulkerBullet.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/projectile/ShulkerBullet.java +++ b/net/minecraft/world/entity/projectile/ShulkerBullet.java -@@ -217,7 +_,7 @@ +@@ -215,7 +_,7 @@ this.handlePortal(); } diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/arrow/AbstractArrow.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/arrow/AbstractArrow.java.patch index bf9c1723a7..3b81caadd6 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/arrow/AbstractArrow.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/arrow/AbstractArrow.java.patch @@ -6,9 +6,9 @@ private @Nullable ItemStack firedFromWeapon = null; + private final IntOpenHashSet ignoredEntities = new IntOpenHashSet(); - protected AbstractArrow(EntityType p_450750_, Level p_450850_) { - super(p_450750_, p_450850_); -@@ -191,7 +_,7 @@ + protected AbstractArrow(final EntityType type, final Level level) { + super(type, level); +@@ -195,7 +_,7 @@ this.shakeTime--; } @@ -17,12 +17,12 @@ this.clearFire(); } -@@ -587,7 +_,7 @@ - protected boolean canHitEntity(Entity p_454713_) { - return p_454713_ instanceof Player && this.getOwner() instanceof Player player && !player.canHarmPlayer((Player)p_454713_) +@@ -585,7 +_,7 @@ + protected boolean canHitEntity(final Entity entity) { + return entity instanceof Player && this.getOwner() instanceof Player player && !player.canHarmPlayer((Player)entity) ? false -- : super.canHitEntity(p_454713_) && (this.piercingIgnoreEntityIds == null || !this.piercingIgnoreEntityIds.contains(p_454713_.getId())); -+ : super.canHitEntity(p_454713_) && (this.piercingIgnoreEntityIds == null || !this.piercingIgnoreEntityIds.contains(p_454713_.getId())) && !this.ignoredEntities.contains(p_454713_.getId()); +- : super.canHitEntity(entity) && (this.piercingIgnoreEntityIds == null || !this.piercingIgnoreEntityIds.contains(entity.getId())); ++ : super.canHitEntity(entity) && (this.piercingIgnoreEntityIds == null || !this.piercingIgnoreEntityIds.contains(entity.getId())) && !this.ignoredEntities.contains(entity.getId()); } @Override diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/hurtingprojectile/AbstractHurtingProjectile.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/hurtingprojectile/AbstractHurtingProjectile.java.patch index 8b0e968f86..65590d2f72 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/hurtingprojectile/AbstractHurtingProjectile.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/hurtingprojectile/AbstractHurtingProjectile.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/projectile/hurtingprojectile/AbstractHurtingProjectile.java +++ b/net/minecraft/world/entity/projectile/hurtingprojectile/AbstractHurtingProjectile.java -@@ -89,7 +_,7 @@ +@@ -91,7 +_,7 @@ this.igniteForSeconds(1.0F); } diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/hurtingprojectile/LargeFireball.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/hurtingprojectile/LargeFireball.java.patch index 7b339480ea..414c0ed86b 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/hurtingprojectile/LargeFireball.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/hurtingprojectile/LargeFireball.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/world/entity/projectile/hurtingprojectile/LargeFireball.java +++ b/net/minecraft/world/entity/projectile/hurtingprojectile/LargeFireball.java @@ -31,7 +_,7 @@ - protected void onHit(HitResult p_451111_) { - super.onHit(p_451111_); + protected void onHit(final HitResult hitResult) { + super.onHit(hitResult); if (this.level() instanceof ServerLevel serverlevel) { - boolean flag = serverlevel.getGameRules().get(GameRules.MOB_GRIEFING); + boolean flag = net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(serverlevel, this.getOwner()); diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/hurtingprojectile/SmallFireball.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/hurtingprojectile/SmallFireball.java.patch index 515a0b7436..453ccada82 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/hurtingprojectile/SmallFireball.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/hurtingprojectile/SmallFireball.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/entity/projectile/hurtingprojectile/SmallFireball.java +++ b/net/minecraft/world/entity/projectile/hurtingprojectile/SmallFireball.java @@ -51,7 +_,7 @@ - super.onHitBlock(p_452526_); + super.onHitBlock(hitResult); if (this.level() instanceof ServerLevel serverlevel) { Entity entity = this.getOwner(); - if (!(entity instanceof Mob) || serverlevel.getGameRules().get(GameRules.MOB_GRIEFING)) { + if (!(entity instanceof Mob) || net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(serverlevel, entity)) { - BlockPos blockpos = p_452526_.getBlockPos().relative(p_452526_.getDirection()); + BlockPos blockpos = hitResult.getBlockPos().relative(hitResult.getDirection()); if (this.level().isEmptyBlock(blockpos)) { this.level().setBlockAndUpdate(blockpos, BaseFireBlock.getState(this.level(), blockpos)); diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/hurtingprojectile/WitherSkull.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/hurtingprojectile/WitherSkull.java.patch index 12ad1714c0..2daf337cb4 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/hurtingprojectile/WitherSkull.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/hurtingprojectile/WitherSkull.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/entity/projectile/hurtingprojectile/WitherSkull.java +++ b/net/minecraft/world/entity/projectile/hurtingprojectile/WitherSkull.java -@@ -49,7 +_,7 @@ - - @Override - public float getBlockExplosionResistance(Explosion p_459983_, BlockGetter p_451795_, BlockPos p_456538_, BlockState p_459565_, FluidState p_454710_, float p_453616_) { -- return this.isDangerous() && WitherBoss.canDestroy(p_459565_) ? Math.min(0.8F, p_453616_) : p_453616_; -+ return this.isDangerous() && p_459565_.canEntityDestroy(p_451795_, p_456538_, this) ? Math.min(0.8F, p_453616_) : p_453616_; +@@ -51,7 +_,7 @@ + public float getBlockExplosionResistance( + final Explosion explosion, final BlockGetter level, final BlockPos pos, final BlockState block, final FluidState fluid, final float resistance + ) { +- return this.isDangerous() && WitherBoss.canDestroy(block) ? Math.min(0.8F, resistance) : resistance; ++ return this.isDangerous() && block.canEntityDestroy(level, pos, this) ? Math.min(0.8F, resistance) : resistance; } @Override diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java.patch index f027d7a490..d5244c229f 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java +++ b/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java -@@ -104,6 +_,13 @@ +@@ -102,6 +_,13 @@ Vec3 vec3 = this.oldPosition(); if (entity instanceof ServerPlayer serverplayer) { if (serverplayer.connection.isAcceptingMessages()) { -+ var event = net.minecraftforge.event.ForgeEventFactory.onEnderPearlLand(serverplayer, this.getX(), this.getY(), this.getZ(), this, 5.0F, p_451483_); ++ var event = net.minecraftforge.event.ForgeEventFactory.onEnderPearlLand(serverplayer, this.getX(), this.getY(), this.getZ(), this, 5.0F, hitResult); + if (event == null) { + this.discard(); + return; @@ -14,7 +14,7 @@ if (this.random.nextFloat() < 0.05F && serverlevel.isSpawningMonsters()) { Endermite endermite = EntityType.ENDERMITE.create(serverlevel, EntitySpawnReason.TRIGGERED); if (endermite != null) { -@@ -130,7 +_,7 @@ +@@ -122,7 +_,7 @@ if (serverplayer1 != null) { serverplayer1.resetFallDistance(); serverplayer1.resetCurrentImpulseContext(); diff --git a/patches/minecraft/net/minecraft/world/entity/raid/Raid.java.patch b/patches/minecraft/net/minecraft/world/entity/raid/Raid.java.patch index a0897586ff..0186384999 100644 --- a/patches/minecraft/net/minecraft/world/entity/raid/Raid.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/raid/Raid.java.patch @@ -1,18 +1,18 @@ --- a/net/minecraft/world/entity/raid/Raid.java +++ b/net/minecraft/world/entity/raid/Raid.java -@@ -820,7 +_,7 @@ +@@ -830,7 +_,7 @@ } } -- static enum RaiderType { -+ static enum RaiderType implements net.minecraftforge.common.IExtensibleEnum { +- public static enum RaiderType { ++ public static enum RaiderType implements net.minecraftforge.common.IExtensibleEnum { VINDICATOR(EntityType.VINDICATOR, new int[]{0, 0, 2, 0, 1, 4, 2, 5}), EVOKER(EntityType.EVOKER, new int[]{0, 0, 0, 0, 0, 1, 1, 2}), PILLAGER(EntityType.PILLAGER, new int[]{0, 4, 3, 3, 4, 4, 4, 2}), -@@ -834,6 +_,20 @@ - private RaiderType(final EntityType p_37821_, final int[] p_37822_) { - this.entityType = p_37821_; - this.spawnsPerWaveBeforeBonus = p_37822_; +@@ -844,6 +_,20 @@ + private RaiderType(final EntityType entityType, final int[] spawnsPerWaveBeforeBonus) { + this.entityType = entityType; + this.spawnsPerWaveBeforeBonus = spawnsPerWaveBeforeBonus; + } + + /** diff --git a/patches/minecraft/net/minecraft/world/entity/vehicle/ContainerEntity.java.patch b/patches/minecraft/net/minecraft/world/entity/vehicle/ContainerEntity.java.patch index cf8ca9fbe4..eba148ab08 100644 --- a/patches/minecraft/net/minecraft/world/entity/vehicle/ContainerEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/vehicle/ContainerEntity.java.patch @@ -1,12 +1,12 @@ --- a/net/minecraft/world/entity/vehicle/ContainerEntity.java +++ b/net/minecraft/world/entity/vehicle/ContainerEntity.java -@@ -102,6 +_,9 @@ +@@ -101,6 +_,9 @@ this.setContainerLootTable(null); LootParams.Builder lootparams$builder = new LootParams.Builder((ServerLevel)this.level()).withParameter(LootContextParams.ORIGIN, this.position()); + // Forge: set the chest to killer_entity for loot context. + if (this instanceof net.minecraft.world.entity.vehicle.minecart.AbstractMinecartContainer entityContainer) + lootparams$builder.withParameter(LootContextParams.ATTACKING_ENTITY, entityContainer); - if (p_219950_ != null) { - lootparams$builder.withLuck(p_219950_.getLuck()).withParameter(LootContextParams.THIS_ENTITY, p_219950_); + if (player != null) { + lootparams$builder.withLuck(player.getLuck()).withParameter(LootContextParams.THIS_ENTITY, player); } diff --git a/patches/minecraft/net/minecraft/world/entity/vehicle/boat/AbstractBoat.java.patch b/patches/minecraft/net/minecraft/world/entity/vehicle/boat/AbstractBoat.java.patch index f89b1d587a..2935d225bf 100644 --- a/patches/minecraft/net/minecraft/world/entity/vehicle/boat/AbstractBoat.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/vehicle/boat/AbstractBoat.java.patch @@ -9,7 +9,7 @@ private static final EntityDataAccessor DATA_ID_PADDLE_LEFT = SynchedEntityData.defineId(AbstractBoat.class, EntityDataSerializers.BOOLEAN); private static final EntityDataAccessor DATA_ID_PADDLE_RIGHT = SynchedEntityData.defineId(AbstractBoat.class, EntityDataSerializers.BOOLEAN); private static final EntityDataAccessor DATA_ID_BUBBLE_TIME = SynchedEntityData.defineId(AbstractBoat.class, EntityDataSerializers.INT); -@@ -422,7 +_,7 @@ +@@ -416,7 +_,7 @@ for (int i2 = i1; i2 < j1; i2++) { blockpos$mutableblockpos.set(l1, k1, i2); FluidState fluidstate = this.level().getFluidState(blockpos$mutableblockpos); @@ -18,7 +18,7 @@ f = Math.max(f, fluidstate.getHeight(this.level(), blockpos$mutableblockpos)); } -@@ -468,7 +_,7 @@ +@@ -462,7 +_,7 @@ voxelshape, BooleanOp.AND )) { @@ -27,7 +27,7 @@ k1++; } } -@@ -497,7 +_,7 @@ +@@ -491,7 +_,7 @@ for (int i2 = i1; i2 < j1; i2++) { blockpos$mutableblockpos.set(k1, l1, i2); FluidState fluidstate = this.level().getFluidState(blockpos$mutableblockpos); @@ -36,28 +36,28 @@ float f = l1 + fluidstate.getHeight(this.level(), blockpos$mutableblockpos); this.waterLevel = Math.max((double)f, this.waterLevel); flag |= aabb.minY < f; -@@ -526,7 +_,7 @@ +@@ -520,7 +_,7 @@ for (int i2 = i1; i2 < j1; i2++) { blockpos$mutableblockpos.set(k1, l1, i2); FluidState fluidstate = this.level().getFluidState(blockpos$mutableblockpos); -- if (fluidstate.is(FluidTags.WATER) -+ if (this.canBoatInFluid(fluidstate) - && d0 < blockpos$mutableblockpos.getY() + fluidstate.getHeight(this.level(), blockpos$mutableblockpos)) { +- if (fluidstate.is(FluidTags.WATER) && d0 < blockpos$mutableblockpos.getY() + fluidstate.getHeight(this.level(), blockpos$mutableblockpos)) { ++ if (this.canBoatInFluid(fluidstate) && d0 < blockpos$mutableblockpos.getY() + fluidstate.getHeight(this.level(), blockpos$mutableblockpos)) { if (!fluidstate.isSource()) { return AbstractBoat.Status.UNDER_FLOWING_WATER; -@@ -729,7 +_,7 @@ + } +@@ -722,7 +_,7 @@ if (!this.isPassenger()) { - if (p_455047_) { + if (onGround) { this.resetFallDistance(); -- } else if (!this.level().getFluidState(this.blockPosition().below()).is(FluidTags.WATER) && p_456661_ < 0.0) { -+ } else if (!this.canBoatInFluid(this.level().getFluidState(this.blockPosition().below())) && p_456661_ < 0.0) { - this.fallDistance -= (float)p_456661_; +- } else if (!this.level().getFluidState(this.blockPosition().below()).is(FluidTags.WATER) && ya < 0.0) { ++ } else if (!this.canBoatInFluid(this.level().getFluidState(this.blockPosition().below())) && ya < 0.0) { + this.fallDistance -= (float)ya; } } -@@ -753,7 +_,7 @@ +@@ -746,7 +_,7 @@ @Override - protected boolean canAddPassenger(Entity p_457043_) { + protected boolean canAddPassenger(final Entity passenger) { - return this.getPassengers().size() < this.getMaxPassengers() && !this.isEyeInFluid(FluidTags.WATER); + return this.getPassengers().size() < this.getMaxPassengers() && !this.canBoatInFluid(this.getEyeInFluidType()); } diff --git a/patches/minecraft/net/minecraft/world/entity/vehicle/boat/ChestBoat.java.patch b/patches/minecraft/net/minecraft/world/entity/vehicle/boat/ChestBoat.java.patch index 58a9c754f5..66dd3a9ca6 100644 --- a/patches/minecraft/net/minecraft/world/entity/vehicle/boat/ChestBoat.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/vehicle/boat/ChestBoat.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/world/entity/vehicle/boat/ChestBoat.java +++ b/net/minecraft/world/entity/vehicle/boat/ChestBoat.java @@ -15,4 +_,26 @@ - protected double rideHeight(EntityDimensions p_451474_) { - return p_451474_.height() / 3.0F; + protected double rideHeight(final EntityDimensions dimensions) { + return dimensions.height() / 3.0F; } + + private net.minecraftforge.common.util.LazyOptional itemHandler = net.minecraftforge.common.util.LazyOptional.of(() -> new net.minecraftforge.items.wrapper.InvWrapper(this)); diff --git a/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/AbstractMinecart.java.patch b/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/AbstractMinecart.java.patch index 4863cd479d..bd5ae354b5 100644 --- a/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/AbstractMinecart.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/AbstractMinecart.java.patch @@ -15,18 +15,18 @@ ); + private boolean canBePushed = true; - protected AbstractMinecart(EntityType p_452328_, Level p_453891_) { - super(p_452328_, p_453891_); + protected AbstractMinecart(final EntityType type, final Level level) { + super(type, level); this.blocksBuilding = true; -- if (useExperimentalMovement(p_453891_)) { +- if (useExperimentalMovement(level)) { - this.behavior = new NewMinecartBehavior(this); - } else { - this.behavior = new OldMinecartBehavior(this); - } -+ this.behavior = behaviorFactory.apply(this, p_453891_); ++ this.behavior = behaviorFactory.apply(this, level); } - protected AbstractMinecart(EntityType p_455342_, Level p_453365_, double p_454565_, double p_451452_, double p_452544_) { + protected AbstractMinecart(final EntityType type, final Level level, final double x, final double y, final double z) { @@ -166,7 +_,7 @@ @Override @@ -36,12 +36,12 @@ } @Override -@@ -363,16 +_,24 @@ +@@ -365,16 +_,24 @@ } - protected void comeOffTrack(ServerLevel p_460723_) { -- double d0 = this.getMaxSpeed(p_460723_); -+ double d0 = this.onGround() ? this.getMaxSpeed(p_460723_) : getMaxSpeedAirLateral(); + protected void comeOffTrack(final ServerLevel level) { +- double d0 = this.getMaxSpeed(level); ++ double d0 = this.onGround() ? this.getMaxSpeed(level) : getMaxSpeedAirLateral(); Vec3 vec3 = this.getDeltaMovement(); this.setDeltaMovement(Mth.clamp(vec3.x, -d0, d0), vec3.y, Mth.clamp(vec3.z, -d0, d0)); if (this.onGround()) { @@ -63,16 +63,16 @@ } } -@@ -429,7 +_,7 @@ - public Vec3 getRedstoneDirection(BlockPos p_456192_) { - BlockState blockstate = this.level().getBlockState(p_456192_); +@@ -431,7 +_,7 @@ + public Vec3 getRedstoneDirection(final BlockPos pos) { + BlockState blockstate = this.level().getBlockState(pos); if (blockstate.is(Blocks.POWERED_RAIL) && blockstate.getValue(PoweredRailBlock.POWERED)) { - RailShape railshape = blockstate.getValue(((BaseRailBlock)blockstate.getBlock()).getShapeProperty()); -+ RailShape railshape = ((BaseRailBlock)blockstate.getBlock()).getRailDirection(blockstate, this.level(), p_456192_, this); ++ RailShape railshape = ((BaseRailBlock)blockstate.getBlock()).getRailDirection(blockstate, this.level(), pos, this); if (railshape == RailShape.EAST_WEST) { - if (this.isRedstoneConductor(p_456192_.west())) { + if (this.isRedstoneConductor(pos.west())) { return new Vec3(1.0, 0.0, 0.0); -@@ -601,5 +_,42 @@ +@@ -602,5 +_,42 @@ public boolean isFurnace() { return false; diff --git a/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/AbstractMinecartContainer.java.patch b/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/AbstractMinecartContainer.java.patch index 2f6f01c6c6..57de611c21 100644 --- a/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/AbstractMinecartContainer.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/AbstractMinecartContainer.java.patch @@ -3,10 +3,10 @@ @@ -94,6 +_,8 @@ @Override - public InteractionResult interact(Player p_452542_, InteractionHand p_458127_) { -+ var ret = super.interact(p_452542_, p_458127_); + public InteractionResult interact(final Player player, final InteractionHand hand, final Vec3 location) { ++ var ret = super.interact(player, hand, location); + if (ret.consumesAction()) return ret; - return this.interactWithContainerVehicle(p_452542_); + return this.interactWithContainerVehicle(player); } @@ -162,5 +_,27 @@ diff --git a/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/MinecartCommandBlock.java.patch b/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/MinecartCommandBlock.java.patch index 0561fc1f25..be62403c6c 100644 --- a/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/MinecartCommandBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/MinecartCommandBlock.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/entity/vehicle/minecart/MinecartCommandBlock.java +++ b/net/minecraft/world/entity/vehicle/minecart/MinecartCommandBlock.java -@@ -84,6 +_,8 @@ +@@ -88,6 +_,8 @@ @Override - public InteractionResult interact(Player p_459569_, InteractionHand p_455676_) { -+ InteractionResult ret = super.interact(p_459569_, p_455676_); + public InteractionResult interact(final Player player, final InteractionHand hand, final Vec3 location) { ++ InteractionResult ret = super.interact(player, hand, location); + if (ret.consumesAction()) return ret; - if (!p_459569_.canUseGameMasterBlocks()) { + if (!player.canUseGameMasterBlocks()) { return InteractionResult.PASS; } else { diff --git a/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/MinecartSpawner.java.patch b/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/MinecartSpawner.java.patch index d6fd72d553..a1dd91697f 100644 --- a/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/MinecartSpawner.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/MinecartSpawner.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/world/entity/vehicle/minecart/MinecartSpawner.java +++ b/net/minecraft/world/entity/vehicle/minecart/MinecartSpawner.java -@@ -19,6 +_,11 @@ - public void broadcastEvent(Level p_451201_, BlockPos p_454356_, int p_454162_) { - p_451201_.broadcastEntityEvent(MinecartSpawner.this, (byte)p_454162_); +@@ -24,6 +_,11 @@ + public void broadcastEvent(final Level level, final BlockPos pos, final int id) { + level.broadcastEntityEvent(MinecartSpawner.this, (byte)id); } + + @Override diff --git a/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/NewMinecartBehavior.java.patch b/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/NewMinecartBehavior.java.patch index 7d96ac3654..8fd49d5283 100644 --- a/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/NewMinecartBehavior.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/NewMinecartBehavior.java.patch @@ -2,52 +2,51 @@ +++ b/net/minecraft/world/entity/vehicle/minecart/NewMinecartBehavior.java @@ -169,7 +_,7 @@ - public void adjustToRails(BlockPos p_451133_, BlockState p_453781_, boolean p_453463_) { - if (BaseRailBlock.isRail(p_453781_)) { -- RailShape railshape = p_453781_.getValue(((BaseRailBlock)p_453781_.getBlock()).getShapeProperty()); -+ RailShape railshape = ((BaseRailBlock)p_453781_.getBlock()).getRailDirection(p_453781_, this.level(), p_451133_, this.minecart); + public void adjustToRails(final BlockPos targetBlockPos, final BlockState currentState, final boolean instant) { + if (BaseRailBlock.isRail(currentState)) { +- RailShape railshape = currentState.getValue(((BaseRailBlock)currentState.getBlock()).getShapeProperty()); ++ RailShape railshape = ((BaseRailBlock)currentState.getBlock()).getRailDirection(currentState, this.level(), targetBlockPos, this.minecart); Pair pair = AbstractMinecart.exits(railshape); Vec3 vec3 = new Vec3(pair.getFirst()).scale(0.5); Vec3 vec31 = new Vec3(pair.getSecond()).scale(0.5); -@@ -259,12 +_,12 @@ +@@ -257,11 +_,11 @@ if (flag) { this.minecart.resetFallDistance(); this.minecart.setOldPosAndRot(); - if (blockstate.is(Blocks.ACTIVATOR_RAIL)) { + if (blockstate.getBlock() instanceof PoweredRailBlock power && power.isActivatorRail()) { - this.minecart - .activateMinecart(p_450194_, blockpos.getX(), blockpos.getY(), blockpos.getZ(), blockstate.getValue(PoweredRailBlock.POWERED)); + this.minecart.activateMinecart(level, blockpos.getX(), blockpos.getY(), blockpos.getZ(), blockstate.getValue(PoweredRailBlock.POWERED)); } - RailShape railshape = blockstate.getValue(((BaseRailBlock)blockstate.getBlock()).getShapeProperty()); + RailShape railshape = ((BaseRailBlock)blockstate.getBlock()).getRailDirection(blockstate, this.level(), blockpos, this.minecart); - Vec3 vec31 = this.calculateTrackSpeed(p_450194_, vec3.horizontal(), newminecartbehavior$trackiteration, blockpos, blockstate, railshape); + Vec3 vec31 = this.calculateTrackSpeed(level, vec3.horizontal(), newminecartbehavior$trackiteration, blockpos, blockstate, railshape); if (newminecartbehavior$trackiteration.firstIteration) { newminecartbehavior$trackiteration.movementLeft = vec31.horizontalDistance(); -@@ -393,7 +_,7 @@ +@@ -397,7 +_,7 @@ } - private Vec3 calculateHaltTrackSpeed(Vec3 p_460405_, BlockState p_457203_) { -- if (p_457203_.is(Blocks.POWERED_RAIL) && !p_457203_.getValue(PoweredRailBlock.POWERED)) { -+ if (p_457203_.getBlock() instanceof PoweredRailBlock powered && !powered.isActivatorRail() && !p_457203_.getValue(PoweredRailBlock.POWERED)) { - return p_460405_.length() < 0.03 ? Vec3.ZERO : p_460405_.scale(0.5); + private Vec3 calculateHaltTrackSpeed(final Vec3 deltaMovement, final BlockState state) { +- if (state.is(Blocks.POWERED_RAIL) && !state.getValue(PoweredRailBlock.POWERED)) { ++ if (state.getBlock() instanceof PoweredRailBlock powered && !powered.isActivatorRail() && !state.getValue(PoweredRailBlock.POWERED)) { + return deltaMovement.length() < 0.03 ? Vec3.ZERO : deltaMovement.scale(0.5); } else { - return p_460405_; -@@ -401,7 +_,7 @@ + return deltaMovement; +@@ -405,7 +_,7 @@ } - private Vec3 calculateBoostTrackSpeed(Vec3 p_451672_, BlockPos p_453710_, BlockState p_457216_) { -- if (p_457216_.is(Blocks.POWERED_RAIL) && p_457216_.getValue(PoweredRailBlock.POWERED)) { -+ if (p_457216_.getBlock() instanceof PoweredRailBlock powered && !powered.isActivatorRail() && p_457216_.getValue(PoweredRailBlock.POWERED)) { - if (p_451672_.length() > 0.01) { - return p_451672_.normalize().scale(p_451672_.length() + 0.06); + private Vec3 calculateBoostTrackSpeed(final Vec3 deltaMovement, final BlockPos pos, final BlockState state) { +- if (state.is(Blocks.POWERED_RAIL) && state.getValue(PoweredRailBlock.POWERED)) { ++ if (state.getBlock() instanceof PoweredRailBlock powered && !powered.isActivatorRail() && state.getValue(PoweredRailBlock.POWERED)) { + if (deltaMovement.length() > 0.01) { + return deltaMovement.normalize().scale(deltaMovement.length() + 0.06); } else { -@@ -453,7 +_,7 @@ +@@ -457,7 +_,7 @@ BlockState blockstate = this.level().getBlockState(BlockPos.containing(vec36)); if (flag) { if (BaseRailBlock.isRail(blockstate)) { - RailShape railshape = blockstate.getValue(((BaseRailBlock)blockstate.getBlock()).getShapeProperty()); + RailShape railshape = ((BaseRailBlock)blockstate.getBlock()).getRailDirection(blockstate, this.level(), BlockPos.containing(vec36), this.minecart); - if (this.restAtVShape(p_452428_, railshape)) { + if (this.restAtVShape(shape, railshape)) { return 0.0; } diff --git a/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/OldMinecartBehavior.java.patch b/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/OldMinecartBehavior.java.patch index 402ed08f47..33b39e5fcd 100644 --- a/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/OldMinecartBehavior.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/vehicle/minecart/OldMinecartBehavior.java.patch @@ -2,17 +2,17 @@ +++ b/net/minecraft/world/entity/vehicle/minecart/OldMinecartBehavior.java @@ -60,9 +_,9 @@ BlockState blockstate = this.level().getBlockState(blockpos); - boolean $$4 = BaseRailBlock.isRail(blockstate); - this.minecart.setOnRails($$4); -- if ($$4) { -+ if (this.minecart.canUseRail() && $$4) { + boolean onRails = BaseRailBlock.isRail(blockstate); + this.minecart.setOnRails(onRails); +- if (onRails) { ++ if (this.minecart.canUseRail() && onRails) { this.moveAlongTrack(serverlevel); - if (blockstate.is(Blocks.ACTIVATOR_RAIL)) { + if (blockstate.getBlock() instanceof PoweredRailBlock power && power.isActivatorRail()) { this.minecart - .activateMinecart( - serverlevel, blockpos.getX(), blockpos.getY(), blockpos.getZ(), blockstate.getValue(PoweredRailBlock.POWERED) -@@ -115,18 +_,19 @@ + .activateMinecart(serverlevel, blockpos.getX(), blockpos.getY(), blockpos.getZ(), blockstate.getValue(PoweredRailBlock.POWERED)); + } +@@ -113,18 +_,19 @@ d1 = blockpos.getY(); boolean flag = false; boolean flag1 = false; @@ -35,7 +35,7 @@ switch (railshape) { case ASCENDING_EAST: this.setDeltaMovement(vec31.add(-d3, 0.0, 0.0)); -@@ -178,7 +_,7 @@ +@@ -176,7 +_,7 @@ } } @@ -44,19 +44,19 @@ double d20 = this.getDeltaMovement().horizontalDistance(); if (d20 < 0.03) { this.setDeltaMovement(Vec3.ZERO); -@@ -207,10 +_,7 @@ +@@ -205,10 +_,7 @@ d0 = d21 + d4 * d12; d2 = d9 + d5 * d12; this.setPos(d0, d1, d2); - double d23 = this.minecart.isVehicle() ? 0.75 : 1.0; -- double d24 = this.minecart.getMaxSpeed(p_458640_); +- double d24 = this.minecart.getMaxSpeed(level); - vec31 = this.getDeltaMovement(); - this.minecart.move(MoverType.SELF, new Vec3(Mth.clamp(d23 * vec31.x, -d24, d24), 0.0, Mth.clamp(d23 * vec31.z, -d24, d24))); -+ this.moveMinecartOnRail(p_458640_); ++ this.moveMinecartOnRail(level); if (vec3i.getY() != 0 && Mth.floor(this.minecart.getX()) - blockpos.getX() == vec3i.getX() && Mth.floor(this.minecart.getZ()) - blockpos.getZ() == vec3i.getZ()) { -@@ -242,7 +_,11 @@ +@@ -240,7 +_,11 @@ this.setDeltaMovement(d25 * (j - blockpos.getX()), vec36.y, d25 * (i - blockpos.getZ())); } @@ -69,16 +69,16 @@ Vec3 vec37 = this.getDeltaMovement(); double d26 = vec37.horizontalDistance(); if (d26 > 0.01) { -@@ -285,7 +_,7 @@ +@@ -283,7 +_,7 @@ BlockState blockstate = this.level().getBlockState(new BlockPos(i, j, k)); if (BaseRailBlock.isRail(blockstate)) { - RailShape railshape = blockstate.getValue(((BaseRailBlock)blockstate.getBlock()).getShapeProperty()); + RailShape railshape = ((BaseRailBlock)blockstate.getBlock()).getRailDirection(blockstate, this.level(), new BlockPos(i, j, k), this.minecart); - p_458616_ = j; + y = j; if (railshape.isSlope()) { - p_458616_ = j + 1; -@@ -323,7 +_,7 @@ + y = j + 1; +@@ -321,7 +_,7 @@ BlockState blockstate = this.level().getBlockState(new BlockPos(i, j, k)); if (BaseRailBlock.isRail(blockstate)) { @@ -87,7 +87,7 @@ Pair pair = AbstractMinecart.exits(railshape); Vec3i vec3i = pair.getFirst(); Vec3i vec3i1 = pair.getSecond(); -@@ -416,5 +_,20 @@ +@@ -414,5 +_,20 @@ @Override public double getSlowdownFactor() { return this.minecart.isVehicle() ? 0.997 : 0.96; diff --git a/patches/minecraft/net/minecraft/world/inventory/AbstractContainerMenu.java.patch b/patches/minecraft/net/minecraft/world/inventory/AbstractContainerMenu.java.patch index 386144c153..fb1aade29d 100644 --- a/patches/minecraft/net/minecraft/world/inventory/AbstractContainerMenu.java.patch +++ b/patches/minecraft/net/minecraft/world/inventory/AbstractContainerMenu.java.patch @@ -1,19 +1,19 @@ --- a/net/minecraft/world/inventory/AbstractContainerMenu.java +++ b/net/minecraft/world/inventory/AbstractContainerMenu.java -@@ -439,6 +_,7 @@ +@@ -438,6 +_,7 @@ ItemStack itemstack10 = this.getCarried(); - p_150434_.updateTutorialInventoryAction(itemstack10, slot7.getItem(), clickaction); - if (!this.tryItemClickBehaviourOverride(p_150434_, clickaction, slot7, itemstack9, itemstack10)) { -+ if (!net.minecraftforge.event.ForgeEventFactory.onItemStackedOn(itemstack10, itemstack9, slot7, clickaction, p_150434_, createCarriedSlotAccess())) + player.updateTutorialInventoryAction(itemstack10, slot7.getItem(), clickaction); + if (!this.tryItemClickBehaviourOverride(player, clickaction, slot7, itemstack9, itemstack10)) { ++ if (!net.minecraftforge.event.ForgeEventFactory.onItemStackedOn(itemstack10, itemstack9, slot7, clickaction, player, createCarriedSlotAccess())) if (itemstack9.isEmpty()) { if (!itemstack10.isEmpty()) { int i3 = clickaction == ClickAction.PRIMARY ? itemstack10.getCount() : 1; -@@ -648,7 +_,7 @@ +@@ -658,7 +_,7 @@ ItemStack itemstack = slot.getItem(); - if (!itemstack.isEmpty() && ItemStack.isSameItemSameComponents(p_38904_, itemstack)) { - int j = itemstack.getCount() + p_38904_.getCount(); + if (!itemstack.isEmpty() && ItemStack.isSameItemSameComponents(itemStack, itemstack)) { + int j = itemstack.getCount() + itemStack.getCount(); - int k = slot.getMaxStackSize(itemstack); + int k = Math.min(slot.getMaxStackSize(itemstack), itemstack.getMaxStackSize()); if (j <= k) { - p_38904_.setCount(0); + itemStack.setCount(0); itemstack.setCount(j); diff --git a/patches/minecraft/net/minecraft/world/inventory/AnvilMenu.java.patch b/patches/minecraft/net/minecraft/world/inventory/AnvilMenu.java.patch index f7b3103b5d..9c54dca6e4 100644 --- a/patches/minecraft/net/minecraft/world/inventory/AnvilMenu.java.patch +++ b/patches/minecraft/net/minecraft/world/inventory/AnvilMenu.java.patch @@ -1,23 +1,23 @@ --- a/net/minecraft/world/inventory/AnvilMenu.java +++ b/net/minecraft/world/inventory/AnvilMenu.java @@ -79,6 +_,8 @@ - p_150474_.giveExperienceLevels(-this.cost.get()); + player.giveExperienceLevels(-this.cost.get()); } -+ float breakChance = net.minecraftforge.event.ForgeEventFactory.onAnvilRepair(p_150474_, p_150475_, AnvilMenu.this.inputSlots.getItem(0), AnvilMenu.this.inputSlots.getItem(1)).getBreakChance(); ++ float breakChance = net.minecraftforge.event.ForgeEventFactory.onAnvilRepair(player, carried, AnvilMenu.this.inputSlots.getItem(0), AnvilMenu.this.inputSlots.getItem(1)).getBreakChance(); + if (this.repairItemCountCost > 0) { ItemStack itemstack = this.inputSlots.getItem(1); if (!itemstack.isEmpty() && itemstack.getCount() > this.repairItemCountCost) { @@ -101,7 +_,7 @@ this.inputSlots.setItem(0, ItemStack.EMPTY); - this.access.execute((p_150479_, p_150480_) -> { - BlockState blockstate = p_150479_.getBlockState(p_150480_); -- if (!p_150474_.hasInfiniteMaterials() && blockstate.is(BlockTags.ANVIL) && p_150474_.getRandom().nextFloat() < 0.12F) { -+ if (!p_150474_.hasInfiniteMaterials() && blockstate.is(BlockTags.ANVIL) && p_150474_.getRandom().nextFloat() < breakChance) { + this.access.execute((level, pos) -> { + BlockState blockstate = level.getBlockState(pos); +- if (!player.hasInfiniteMaterials() && blockstate.is(BlockTags.ANVIL) && player.getRandom().nextFloat() < 0.12F) { ++ if (!player.hasInfiniteMaterials() && blockstate.is(BlockTags.ANVIL) && player.getRandom().nextFloat() < breakChance) { BlockState blockstate1 = AnvilBlock.damage(blockstate); if (blockstate1 == null) { - p_150479_.removeBlock(p_150480_, false); + level.removeBlock(pos, false); @@ -130,8 +_,11 @@ ItemEnchantments.Mutable itemenchantments$mutable = new ItemEnchantments.Mutable(EnchantmentHelper.getEnchantmentsForCrafting(itemstack1)); j += (long)itemstack.getOrDefault(DataComponents.REPAIR_COST, 0).intValue() + itemstack2.getOrDefault(DataComponents.REPAIR_COST, 0).intValue(); diff --git a/patches/minecraft/net/minecraft/world/inventory/ArmorSlot.java.patch b/patches/minecraft/net/minecraft/world/inventory/ArmorSlot.java.patch index 90bff38906..4b95215c38 100644 --- a/patches/minecraft/net/minecraft/world/inventory/ArmorSlot.java.patch +++ b/patches/minecraft/net/minecraft/world/inventory/ArmorSlot.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/inventory/ArmorSlot.java +++ b/net/minecraft/world/inventory/ArmorSlot.java -@@ -37,7 +_,7 @@ +@@ -43,7 +_,7 @@ @Override - public boolean mayPlace(ItemStack p_344267_) { -- return this.owner.isEquippableInSlot(p_344267_, this.slot); -+ return p_344267_.canEquip(slot, owner); + public boolean mayPlace(final ItemStack itemStack) { +- return this.owner.isEquippableInSlot(itemStack, this.slot); ++ return itemStack.canEquip(slot, owner); } @Override diff --git a/patches/minecraft/net/minecraft/world/inventory/BeaconMenu.java.patch b/patches/minecraft/net/minecraft/world/inventory/BeaconMenu.java.patch index 9c42af6e5a..1463d1a285 100644 --- a/patches/minecraft/net/minecraft/world/inventory/BeaconMenu.java.patch +++ b/patches/minecraft/net/minecraft/world/inventory/BeaconMenu.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/inventory/BeaconMenu.java +++ b/net/minecraft/world/inventory/BeaconMenu.java -@@ -87,10 +_,8 @@ +@@ -92,10 +_,8 @@ } slot.onQuickCraft(itemstack1, itemstack); @@ -10,6 +10,6 @@ - } + } else if (this.moveItemStackTo(itemstack1, 0, 1, false)) { //Forge Fix Shift Clicking in beacons with stacks larger then 1. + return ItemStack.EMPTY; - } else if (p_39052_ >= 1 && p_39052_ < 28) { + } else if (slotIndex >= 1 && slotIndex < 28) { if (!this.moveItemStackTo(itemstack1, 28, 37, false)) { return ItemStack.EMPTY; diff --git a/patches/minecraft/net/minecraft/world/inventory/BrewingStandMenu.java.patch b/patches/minecraft/net/minecraft/world/inventory/BrewingStandMenu.java.patch index 7108e80639..d372d8fd27 100644 --- a/patches/minecraft/net/minecraft/world/inventory/BrewingStandMenu.java.patch +++ b/patches/minecraft/net/minecraft/world/inventory/BrewingStandMenu.java.patch @@ -1,19 +1,19 @@ --- a/net/minecraft/world/inventory/BrewingStandMenu.java +++ b/net/minecraft/world/inventory/BrewingStandMenu.java @@ -45,9 +_,9 @@ - this.brewingStand = p_39095_; - this.brewingStandData = p_39096_; - PotionBrewing potionbrewing = p_39094_.player.level().potionBrewing(); -- this.addSlot(new BrewingStandMenu.PotionSlot(p_39095_, 0, 56, 51)); -- this.addSlot(new BrewingStandMenu.PotionSlot(p_39095_, 1, 79, 58)); -- this.addSlot(new BrewingStandMenu.PotionSlot(p_39095_, 2, 102, 51)); -+ this.addSlot(new BrewingStandMenu.PotionSlot(p_39095_, 0, 56, 51, potionbrewing)); -+ this.addSlot(new BrewingStandMenu.PotionSlot(p_39095_, 1, 79, 58, potionbrewing)); -+ this.addSlot(new BrewingStandMenu.PotionSlot(p_39095_, 2, 102, 51, potionbrewing)); - this.ingredientSlot = this.addSlot(new BrewingStandMenu.IngredientsSlot(potionbrewing, p_39095_, 3, 79, 17)); - this.addSlot(new BrewingStandMenu.FuelSlot(p_39095_, 4, 17, 17)); - this.addDataSlots(p_39096_); -@@ -75,7 +_,7 @@ + this.brewingStand = brewingStand; + this.brewingStandData = brewingStandData; + PotionBrewing potionbrewing = inventory.player.level().potionBrewing(); +- this.addSlot(new BrewingStandMenu.PotionSlot(brewingStand, 0, 56, 51)); +- this.addSlot(new BrewingStandMenu.PotionSlot(brewingStand, 1, 79, 58)); +- this.addSlot(new BrewingStandMenu.PotionSlot(brewingStand, 2, 102, 51)); ++ this.addSlot(new BrewingStandMenu.PotionSlot(brewingStand, 0, 56, 51, potionbrewing)); ++ this.addSlot(new BrewingStandMenu.PotionSlot(brewingStand, 1, 79, 58, potionbrewing)); ++ this.addSlot(new BrewingStandMenu.PotionSlot(brewingStand, 2, 102, 51, potionbrewing)); + this.ingredientSlot = this.addSlot(new BrewingStandMenu.IngredientsSlot(potionbrewing, brewingStand, 3, 79, 17)); + this.addSlot(new BrewingStandMenu.FuelSlot(brewingStand, 4, 17, 17)); + this.addDataSlots(brewingStandData); +@@ -76,7 +_,7 @@ if (!this.moveItemStackTo(itemstack1, 3, 4, false)) { return ItemStack.EMPTY; } @@ -22,35 +22,35 @@ if (!this.moveItemStackTo(itemstack1, 0, 3, false)) { return ItemStack.EMPTY; } -@@ -157,12 +_,23 @@ +@@ -158,12 +_,23 @@ } public static class PotionSlot extends Slot { + private final PotionBrewing potionBrewing; + + /** @deprecated Use the one that specifes a PotionBrewing */ - public PotionSlot(Container p_39123_, int p_39124_, int p_39125_, int p_39126_) { -+ this(p_39123_, p_39124_, p_39125_, p_39126_, null); + public PotionSlot(final Container container, final int slot, final int x, final int y) { ++ this(container, slot, x, y, null); + } + -+ public PotionSlot(Container p_39123_, int p_39124_, int p_39125_, int p_39126_, PotionBrewing potionBrewing) { - super(p_39123_, p_39124_, p_39125_, p_39126_); ++ public PotionSlot(final Container container, final int slot, final int x, final int y, PotionBrewing potionBrewing) { + super(container, slot, x, y); + this.potionBrewing = potionBrewing; } @Override - public boolean mayPlace(ItemStack p_39132_) { + public boolean mayPlace(final ItemStack itemStack) { + if (this.potionBrewing != null) { -+ return this.potionBrewing.isValidInput(p_39132_); ++ return this.potionBrewing.isValidInput(itemStack); + } - return mayPlaceItem(p_39132_); + return mayPlaceItem(itemStack); } -@@ -175,6 +_,7 @@ - public void onTake(Player p_150499_, ItemStack p_150500_) { - Optional> optional = p_150500_.getOrDefault(DataComponents.POTION_CONTENTS, PotionContents.EMPTY).potion(); - if (optional.isPresent() && p_150499_ instanceof ServerPlayer serverplayer) { -+ net.minecraftforge.event.ForgeEventFactory.onPlayerBrewedPotion(p_150499_, p_150500_); +@@ -176,6 +_,7 @@ + public void onTake(final Player player, final ItemStack carried) { + Optional> optional = carried.getOrDefault(DataComponents.POTION_CONTENTS, PotionContents.EMPTY).potion(); + if (optional.isPresent() && player instanceof ServerPlayer serverplayer) { ++ net.minecraftforge.event.ForgeEventFactory.onPlayerBrewedPotion(player, carried); CriteriaTriggers.BREWED_POTION.trigger(serverplayer, optional.get()); } diff --git a/patches/minecraft/net/minecraft/world/inventory/EnchantmentMenu.java.patch b/patches/minecraft/net/minecraft/world/inventory/EnchantmentMenu.java.patch index 11fcd23d9f..6d9da3c3de 100644 --- a/patches/minecraft/net/minecraft/world/inventory/EnchantmentMenu.java.patch +++ b/patches/minecraft/net/minecraft/world/inventory/EnchantmentMenu.java.patch @@ -1,25 +1,25 @@ --- a/net/minecraft/world/inventory/EnchantmentMenu.java +++ b/net/minecraft/world/inventory/EnchantmentMenu.java -@@ -62,7 +_,7 @@ - this.addSlot(new Slot(this.enchantSlots, 1, 35, 47) { +@@ -75,7 +_,7 @@ + @Override - public boolean mayPlace(ItemStack p_39517_) { -- return p_39517_.is(Items.LAPIS_LAZULI); -+ return p_39517_.is(net.minecraftforge.common.Tags.Items.ENCHANTING_FUELS); + public boolean mayPlace(final ItemStack itemStack) { +- return itemStack.is(Items.LAPIS_LAZULI); ++ return itemStack.is(net.minecraftforge.common.Tags.Items.ENCHANTING_FUELS); } @Override -@@ -90,23 +_,24 @@ +@@ -103,23 +_,24 @@ if (!itemstack.isEmpty() && itemstack.isEnchantable()) { - this.access.execute((p_449765_, p_449766_) -> { - IdMap> idmap = p_449765_.registryAccess().lookupOrThrow(Registries.ENCHANTMENT).asHolderIdMap(); + this.access.execute((level, pos) -> { + IdMap> idmap = level.registryAccess().lookupOrThrow(Registries.ENCHANTMENT).asHolderIdMap(); - int j = 0; + float j = 0; for (BlockPos blockpos : EnchantingTableBlock.BOOKSHELF_OFFSETS) { - if (EnchantingTableBlock.isValidBookShelf(p_449765_, p_449766_, blockpos)) { + if (EnchantingTableBlock.isValidBookShelf(level, pos, blockpos)) { - j++; -+ j += p_449765_.getBlockState(p_449766_.offset(blockpos)).getEnchantPowerBonus(p_449765_, p_449766_.offset(blockpos)); ++ j += level.getBlockState(pos.offset(blockpos)).getEnchantPowerBonus(level, pos.offset(blockpos)); } } @@ -33,11 +33,11 @@ if (this.costs[k] < k + 1) { this.costs[k] = 0; } -+ this.costs[k] = net.minecraftforge.event.ForgeEventFactory.onEnchantmentLevelSet(p_449765_, p_449766_, k, (int)j, itemstack, costs[k]); ++ this.costs[k] = net.minecraftforge.event.ForgeEventFactory.onEnchantmentLevelSet(level, pos, k, (int)j, itemstack, costs[k]); } for (int l = 0; l < 3; l++) { -@@ -233,7 +_,7 @@ +@@ -246,7 +_,7 @@ if (!this.moveItemStackTo(itemstack1, 2, 38, true)) { return ItemStack.EMPTY; } diff --git a/patches/minecraft/net/minecraft/world/inventory/FurnaceResultSlot.java.patch b/patches/minecraft/net/minecraft/world/inventory/FurnaceResultSlot.java.patch index f1b2a8f389..dfbc1e38ed 100644 --- a/patches/minecraft/net/minecraft/world/inventory/FurnaceResultSlot.java.patch +++ b/patches/minecraft/net/minecraft/world/inventory/FurnaceResultSlot.java.patch @@ -4,6 +4,6 @@ } this.removeCount = 0; -+ net.minecraftforge.event.ForgeEventFactory.firePlayerSmeltedEvent(this.player, p_39558_); ++ net.minecraftforge.event.ForgeEventFactory.firePlayerSmeltedEvent(this.player, carried); } } diff --git a/patches/minecraft/net/minecraft/world/inventory/GrindstoneMenu.java.patch b/patches/minecraft/net/minecraft/world/inventory/GrindstoneMenu.java.patch index 81d5ceda73..6edafc7e09 100644 --- a/patches/minecraft/net/minecraft/world/inventory/GrindstoneMenu.java.patch +++ b/patches/minecraft/net/minecraft/world/inventory/GrindstoneMenu.java.patch @@ -1,50 +1,52 @@ --- a/net/minecraft/world/inventory/GrindstoneMenu.java +++ b/net/minecraft/world/inventory/GrindstoneMenu.java -@@ -38,6 +_,7 @@ +@@ -43,6 +_,7 @@ } }; private final ContainerLevelAccess access; + private int xp = -1; - public GrindstoneMenu(int p_39563_, Inventory p_39564_) { - this(p_39563_, p_39564_, ContainerLevelAccess.NULL); -@@ -49,13 +_,13 @@ - this.addSlot(new Slot(this.repairSlots, 0, 49, 19) { + public GrindstoneMenu(final int containerId, final Inventory inventory) { + this(containerId, inventory, ContainerLevelAccess.NULL); +@@ -58,7 +_,7 @@ + @Override - public boolean mayPlace(ItemStack p_39607_) { -- return p_39607_.isDamageableItem() || EnchantmentHelper.hasAnyEnchantments(p_39607_); -+ return p_39607_.isDamageableItem() || EnchantmentHelper.hasAnyEnchantments(p_39607_) || p_39607_.canGrindstoneRepair(); + public boolean mayPlace(final ItemStack itemStack) { +- return itemStack.isDamageableItem() || EnchantmentHelper.hasAnyEnchantments(itemStack); ++ return itemStack.isDamageableItem() || EnchantmentHelper.hasAnyEnchantments(itemStack) || itemStack.canGrindstoneRepair(); } }); this.addSlot(new Slot(this.repairSlots, 1, 49, 40) { +@@ -68,7 +_,7 @@ + @Override - public boolean mayPlace(ItemStack p_39616_) { -- return p_39616_.isDamageableItem() || EnchantmentHelper.hasAnyEnchantments(p_39616_); -+ return p_39616_.isDamageableItem() || EnchantmentHelper.hasAnyEnchantments(p_39616_) || p_39616_.canGrindstoneRepair(); + public boolean mayPlace(final ItemStack itemStack) { +- return itemStack.isDamageableItem() || EnchantmentHelper.hasAnyEnchantments(itemStack); ++ return itemStack.isDamageableItem() || EnchantmentHelper.hasAnyEnchantments(itemStack) || itemStack.canGrindstoneRepair(); } }); this.addSlot(new Slot(this.resultSlots, 2, 129, 34) { -@@ -66,6 +_,7 @@ +@@ -83,6 +_,7 @@ @Override - public void onTake(Player p_150574_, ItemStack p_150575_) { -+ if (net.minecraftforge.common.ForgeHooks.onGrindstoneTake(GrindstoneMenu.this.repairSlots, p_39568_, this::getExperienceAmount)) return; - p_39568_.execute((p_39634_, p_39635_) -> { - if (p_39634_ instanceof ServerLevel) { - ExperienceOrb.award((ServerLevel)p_39634_, Vec3.atCenterOf(p_39635_), this.getExperienceAmount(p_39634_)); -@@ -78,6 +_,7 @@ + public void onTake(final Player player, final ItemStack carried) { ++ if (net.minecraftforge.common.ForgeHooks.onGrindstoneTake(GrindstoneMenu.this.repairSlots, access, this::getExperienceAmount)) return; + access.execute((level, pos) -> { + if (level instanceof ServerLevel) { + ExperienceOrb.award((ServerLevel)level, Vec3.atCenterOf(pos), this.getExperienceAmount(level)); +@@ -95,6 +_,7 @@ } - private int getExperienceAmount(Level p_39632_) { + private int getExperienceAmount(final Level level) { + if (xp > -1) return xp; int i = 0; i += this.getExperienceFromItem(GrindstoneMenu.this.repairSlots.getItem(0)); i += this.getExperienceFromItem(GrindstoneMenu.this.repairSlots.getItem(1)); -@@ -121,6 +_,17 @@ +@@ -138,6 +_,17 @@ } - private ItemStack computeResult(ItemStack p_335167_, ItemStack p_329934_) { -+ var event = net.minecraftforge.event.ForgeEventFactory.onGrindstoneChange(p_335167_, p_329934_, this.resultSlots, -1); + private ItemStack computeResult(final ItemStack input, final ItemStack additional) { ++ var event = net.minecraftforge.event.ForgeEventFactory.onGrindstoneChange(input, additional, this.resultSlots, -1); + if (event == null) { + this.xp = -1; + return ItemStack.EMPTY; @@ -55,6 +57,6 @@ + this.xp = Integer.MIN_VALUE; + } + - boolean flag = !p_335167_.isEmpty() || !p_329934_.isEmpty(); + boolean flag = !input.isEmpty() || !additional.isEmpty(); if (!flag) { return ItemStack.EMPTY; diff --git a/patches/minecraft/net/minecraft/world/inventory/MenuType.java.patch b/patches/minecraft/net/minecraft/world/inventory/MenuType.java.patch index 346db1f1df..7c0ce1d242 100644 --- a/patches/minecraft/net/minecraft/world/inventory/MenuType.java.patch +++ b/patches/minecraft/net/minecraft/world/inventory/MenuType.java.patch @@ -9,7 +9,7 @@ public static final MenuType GENERIC_9x1 = register("generic_9x1", ChestMenu::oneRow); public static final MenuType GENERIC_9x2 = register("generic_9x2", ChestMenu::twoRows); public static final MenuType GENERIC_9x3 = register("generic_9x3", ChestMenu::threeRows); -@@ -57,6 +_,14 @@ +@@ -59,6 +_,14 @@ @Override public FeatureFlagSet requiredFeatures() { return this.requiredFeatures; diff --git a/patches/minecraft/net/minecraft/world/inventory/ResultSlot.java.patch b/patches/minecraft/net/minecraft/world/inventory/ResultSlot.java.patch index bb560d646d..d3cfff9f31 100644 --- a/patches/minecraft/net/minecraft/world/inventory/ResultSlot.java.patch +++ b/patches/minecraft/net/minecraft/world/inventory/ResultSlot.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/world/inventory/ResultSlot.java +++ b/net/minecraft/world/inventory/ResultSlot.java @@ -51,6 +_,7 @@ - protected void checkTakeAchievements(ItemStack p_40185_) { + protected void checkTakeAchievements(final ItemStack carried) { if (this.removeCount > 0) { - p_40185_.onCraftedBy(this.player, this.removeCount); -+ net.minecraftforge.event.ForgeEventFactory.firePlayerCraftingEvent(this.player, p_40185_, this.craftSlots); + carried.onCraftedBy(this.player, this.removeCount); ++ net.minecraftforge.event.ForgeEventFactory.firePlayerCraftingEvent(this.player, carried, this.craftSlots); } if (this.container instanceof RecipeCraftingHolder recipecraftingholder) { @@ -12,8 +12,8 @@ CraftingInput craftinginput = craftinginput$positioned.input(); int i = craftinginput$positioned.left(); int j = craftinginput$positioned.top(); -+ net.minecraftforge.common.ForgeHooks.setCraftingPlayer(p_150638_); - NonNullList nonnulllist = this.getRemainingItems(craftinginput, p_150638_.level()); ++ net.minecraftforge.common.ForgeHooks.setCraftingPlayer(player); + NonNullList nonnulllist = this.getRemainingItems(craftinginput, player.level()); + net.minecraftforge.common.ForgeHooks.setCraftingPlayer(null); for (int k = 0; k < craftinginput.height(); k++) { diff --git a/patches/minecraft/net/minecraft/world/inventory/Slot.java.patch b/patches/minecraft/net/minecraft/world/inventory/Slot.java.patch index 3d1e646679..ecdf530966 100644 --- a/patches/minecraft/net/minecraft/world/inventory/Slot.java.patch +++ b/patches/minecraft/net/minecraft/world/inventory/Slot.java.patch @@ -8,7 +8,7 @@ + return background; } - public ItemStack remove(int p_40227_) { + public ItemStack remove(final int amount) { @@ -160,5 +_,36 @@ public boolean isFake() { diff --git a/patches/minecraft/net/minecraft/world/item/AxeItem.java.patch b/patches/minecraft/net/minecraft/world/item/AxeItem.java.patch index 8903a80916..d0eee74502 100644 --- a/patches/minecraft/net/minecraft/world/item/AxeItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/AxeItem.java.patch @@ -1,46 +1,46 @@ --- a/net/minecraft/world/item/AxeItem.java +++ b/net/minecraft/world/item/AxeItem.java @@ -64,7 +_,7 @@ - if (playerHasBlockingItemUseIntent(p_40529_)) { + if (playerHasBlockingItemUseIntent(context)) { return InteractionResult.PASS; } else { - Optional optional = this.evaluateNewBlockState(level, blockpos, player, level.getBlockState(blockpos)); -+ Optional optional = this.evaluateNewBlockState(level, blockpos, player, level.getBlockState(blockpos), p_40529_); ++ Optional optional = this.evaluateNewBlockState(level, blockpos, player, level.getBlockState(blockpos), context); if (optional.isEmpty()) { return InteractionResult.PASS; } else { -@@ -90,17 +_,24 @@ +@@ -92,17 +_,24 @@ } - private Optional evaluateNewBlockState(Level p_312809_, BlockPos p_313114_, @Nullable Player p_312029_, BlockState p_311198_) { -- Optional optional = this.getStripped(p_311198_); -+ return this.evaluateNewBlockState(p_312809_, p_313114_, p_312029_, p_311198_, null); + private Optional evaluateNewBlockState(final Level level, final BlockPos pos, final @Nullable Player player, final BlockState oldState) { +- Optional optional = this.getStripped(oldState); ++ return this.evaluateNewBlockState(level, pos, player, oldState, null); + } + -+ private Optional evaluateNewBlockState(Level p_312809_, BlockPos p_313114_, @Nullable Player p_312029_, BlockState p_311198_, @Nullable UseOnContext ctx) { -+ var strip = ctx == null ? null : p_311198_.getToolModifiedState(ctx, net.minecraftforge.common.ToolActions.AXE_STRIP, false); -+ Optional optional = strip != null ? Optional.of(strip) : this.getStripped(p_311198_); ++ private Optional evaluateNewBlockState(final Level level, final BlockPos pos, final @Nullable Player player, final BlockState oldState, final @Nullable UseOnContext ctx) { ++ var strip = ctx == null ? null : oldState.getToolModifiedState(ctx, net.minecraftforge.common.ToolActions.AXE_STRIP, false); ++ Optional optional = strip != null ? Optional.of(strip) : this.getStripped(oldState); if (optional.isPresent()) { - p_312809_.playSound(p_312029_, p_313114_, SoundEvents.AXE_STRIP, SoundSource.BLOCKS, 1.0F, 1.0F); + level.playSound(player, pos, SoundEvents.AXE_STRIP, SoundSource.BLOCKS, 1.0F, 1.0F); return optional; } else { -- Optional optional1 = WeatheringCopper.getPrevious(p_311198_); -+ var scrape = ctx == null ? null : p_311198_.getToolModifiedState(ctx, net.minecraftforge.common.ToolActions.AXE_STRIP, false); -+ Optional optional1 = scrape != null ? Optional.of(scrape) : WeatheringCopper.getPrevious(p_311198_); +- Optional optional1 = WeatheringCopper.getPrevious(oldState); ++ var scrape = ctx == null ? null : oldState.getToolModifiedState(ctx, net.minecraftforge.common.ToolActions.AXE_STRIP, false); ++ Optional optional1 = scrape != null ? Optional.of(scrape) : WeatheringCopper.getPrevious(oldState); if (optional1.isPresent()) { - spawnSoundAndParticle(p_312809_, p_313114_, p_312029_, p_311198_, SoundEvents.AXE_SCRAPE, 3005); + spawnSoundAndParticle(level, pos, player, oldState, SoundEvents.AXE_SCRAPE, 3005); return optional1; } else { -- Optional optional2 = Optional.ofNullable(HoneycombItem.WAX_OFF_BY_BLOCK.get().get(p_311198_.getBlock())) -+ var waxOff = ctx == null ? null : p_311198_.getToolModifiedState(ctx, net.minecraftforge.common.ToolActions.AXE_WAX_OFF, false); -+ Optional optional2 = waxOff != null ? Optional.of(waxOff) : Optional.ofNullable(HoneycombItem.WAX_OFF_BY_BLOCK.get().get(p_311198_.getBlock())) - .map(p_150694_ -> p_150694_.withPropertiesOf(p_311198_)); +- Optional optional2 = Optional.ofNullable(HoneycombItem.WAX_OFF_BY_BLOCK.get().get(oldState.getBlock())) ++ var waxOff = ctx == null ? null : oldState.getToolModifiedState(ctx, net.minecraftforge.common.ToolActions.AXE_WAX_OFF, false); ++ Optional optional2 = waxOff != null ? Optional.of(waxOff) : Optional.ofNullable(HoneycombItem.WAX_OFF_BY_BLOCK.get().get(oldState.getBlock())) + .map(b -> b.withPropertiesOf(oldState)); if (optional2.isPresent()) { - spawnSoundAndParticle(p_312809_, p_313114_, p_312029_, p_311198_, SoundEvents.AXE_WAX_OFF, 3004); -@@ -125,5 +_,21 @@ - private Optional getStripped(BlockState p_150691_) { - return Optional.ofNullable(STRIPPABLES.get(p_150691_.getBlock())) - .map(p_359378_ -> p_359378_.defaultBlockState().setValue(RotatedPillarBlock.AXIS, p_150691_.getValue(RotatedPillarBlock.AXIS))); + spawnSoundAndParticle(level, pos, player, oldState, SoundEvents.AXE_WAX_OFF, 3004); +@@ -129,5 +_,16 @@ + private Optional getStripped(final BlockState state) { + return Optional.ofNullable(STRIPPABLES.get(state.getBlock())) + .map(block -> block.defaultBlockState().setValue(RotatedPillarBlock.AXIS, state.getValue(RotatedPillarBlock.AXIS))); + } + + @Override @@ -52,10 +52,5 @@ + public static BlockState getAxeStrippingState(BlockState originalState) { + Block block = STRIPPABLES.get(originalState.getBlock()); + return block != null ? block.defaultBlockState().setValue(RotatedPillarBlock.AXIS, originalState.getValue(RotatedPillarBlock.AXIS)) : null; -+ } -+ -+ @Override -+ public boolean canDisableShield(ItemStack stack, ItemStack shield, net.minecraft.world.entity.LivingEntity entity, net.minecraft.world.entity.LivingEntity attacker) { -+ return true; } } diff --git a/patches/minecraft/net/minecraft/world/item/BlockItem.java.patch b/patches/minecraft/net/minecraft/world/item/BlockItem.java.patch index b7af32585c..8ef00f7518 100644 --- a/patches/minecraft/net/minecraft/world/item/BlockItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/BlockItem.java.patch @@ -1,24 +1,26 @@ --- a/net/minecraft/world/item/BlockItem.java +++ b/net/minecraft/world/item/BlockItem.java -@@ -77,9 +_,9 @@ +@@ -76,11 +_,11 @@ } } - SoundType soundtype = blockstate1.getSoundType(); -+ SoundType soundtype = blockstate1.getSoundType(level, blockpos, p_40577_.getPlayer()); ++ SoundType soundtype = blockstate1.getSoundType(level, blockpos, placeContext.getPlayer()); level.playSound( -- player, blockpos, this.getPlaceSound(blockstate1), SoundSource.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F -+ player, blockpos, this.getPlaceSound(blockstate1, level, blockpos, p_40577_.getPlayer()), SoundSource.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F - ); - level.gameEvent(GameEvent.BLOCK_PLACE, blockpos, GameEvent.Context.of(player, blockstate1)); - itemstack.consume(1, player); -@@ -89,10 +_,16 @@ + player, + blockpos, +- this.getPlaceSound(blockstate1), ++ this.getPlaceSound(blockstate1, level, blockpos, placeContext.getPlayer()), + SoundSource.BLOCKS, + (soundtype.getVolume() + 1.0F) / 2.0F, + soundtype.getPitch() * 0.8F +@@ -93,10 +_,16 @@ } } + @Deprecated //Forge: Use more sensitive version {@link BlockItem#getPlaceSound(BlockState, IBlockReader, BlockPos, Entity) } - protected SoundEvent getPlaceSound(BlockState p_40588_) { - return p_40588_.getSoundType().getPlaceSound(); + protected SoundEvent getPlaceSound(final BlockState blockState) { + return blockState.getSoundType().getPlaceSound(); } + //Forge: Sensitive version of BlockItem#getPlaceSound @@ -26,13 +28,13 @@ + return state.getSoundType(world, pos, entity).getPlaceSound(); + } + - public @Nullable BlockPlaceContext updatePlacementContext(BlockPlaceContext p_40609_) { - return p_40609_; + public @Nullable BlockPlaceContext updatePlacementContext(final BlockPlaceContext context) { + return context; } -@@ -185,6 +_,10 @@ +@@ -191,6 +_,10 @@ - public void registerBlocks(Map p_40607_, Item p_40608_) { - p_40607_.put(this.getBlock(), p_40608_); + public void registerBlocks(final Map map, final Item item) { + map.put(this.getBlock(), item); + } + + public void removeFromBlockToItemMap(Map blockToItemMap, Item itemIn) { diff --git a/patches/minecraft/net/minecraft/world/item/BoneMealItem.java.patch b/patches/minecraft/net/minecraft/world/item/BoneMealItem.java.patch index b1534159e5..63202c15b3 100644 --- a/patches/minecraft/net/minecraft/world/item/BoneMealItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/BoneMealItem.java.patch @@ -1,30 +1,30 @@ --- a/net/minecraft/world/item/BoneMealItem.java +++ b/net/minecraft/world/item/BoneMealItem.java @@ -38,7 +_,7 @@ - BlockPos blockpos = p_40637_.getClickedPos(); - BlockPos blockpos1 = blockpos.relative(p_40637_.getClickedFace()); - ItemStack itemstack = p_40637_.getItemInHand(); + BlockPos blockpos = context.getClickedPos(); + BlockPos blockpos1 = blockpos.relative(context.getClickedFace()); + ItemStack itemstack = context.getItemInHand(); - if (growCrop(itemstack, level, blockpos)) { -+ if (applyBonemeal(itemstack, level, blockpos, p_40637_.getPlayer())) { ++ if (applyBonemeal(itemstack, level, blockpos, context.getPlayer())) { if (!level.isClientSide()) { - itemstack.causeUseVibration(p_40637_.getPlayer(), GameEvent.ITEM_INTERACT_FINISH); + itemstack.causeUseVibration(context.getPlayer(), GameEvent.ITEM_INTERACT_FINISH); level.levelEvent(1505, blockpos, 15); -@@ -61,8 +_,18 @@ +@@ -62,8 +_,18 @@ } } + @Deprecated //Forge: Use Player/Hand version - public static boolean growCrop(ItemStack p_40628_, Level p_40629_, BlockPos p_40630_) { -+ if (p_40629_ instanceof net.minecraft.server.level.ServerLevel) { -+ return applyBonemeal(p_40628_, p_40629_, p_40630_, null); + public static boolean growCrop(final ItemStack itemStack, final Level level, final BlockPos pos) { ++ if (level instanceof net.minecraft.server.level.ServerLevel) { ++ return applyBonemeal(itemStack, level, pos, null); + } + return false; + } + -+ public static boolean applyBonemeal(ItemStack p_40628_, Level p_40629_, BlockPos p_40630_, net.minecraft.world.entity.player.Player player) { - BlockState blockstate = p_40629_.getBlockState(p_40630_); -+ int hook = net.minecraftforge.event.ForgeEventFactory.onApplyBonemeal(player, p_40629_, p_40630_, blockstate, p_40628_); ++ public static boolean applyBonemeal(final ItemStack itemStack, final Level level, final BlockPos pos, net.minecraft.world.entity.player.Player player) { + BlockState blockstate = level.getBlockState(pos); ++ int hook = net.minecraftforge.event.ForgeEventFactory.onApplyBonemeal(player, level, pos, blockstate, itemStack); + if (hook != 0) return hook > 0; - if (blockstate.getBlock() instanceof BonemealableBlock bonemealableblock && bonemealableblock.isValidBonemealTarget(p_40629_, p_40630_, blockstate)) { - if (p_40629_ instanceof ServerLevel) { - if (bonemealableblock.isBonemealSuccess(p_40629_, p_40629_.random, p_40630_, blockstate)) { + if (blockstate.getBlock() instanceof BonemealableBlock bonemealableblock && bonemealableblock.isValidBonemealTarget(level, pos, blockstate)) { + if (level instanceof ServerLevel) { + if (bonemealableblock.isBonemealSuccess(level, level.getRandom(), pos, blockstate)) { diff --git a/patches/minecraft/net/minecraft/world/item/BowItem.java.patch b/patches/minecraft/net/minecraft/world/item/BowItem.java.patch index dc8ed330ba..e0d7631219 100644 --- a/patches/minecraft/net/minecraft/world/item/BowItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/BowItem.java.patch @@ -3,19 +3,19 @@ @@ -32,6 +_,9 @@ return false; } else { - int i = this.getUseDuration(p_40667_, p_40669_) - p_40670_; -+ i = net.minecraftforge.event.ForgeEventFactory.onArrowLoose(p_40667_, p_40668_, player, i, true); + int i = this.getUseDuration(itemStack, entity) - remainingTime; ++ i = net.minecraftforge.event.ForgeEventFactory.onArrowLoose(itemStack, level, player, i, true); + if (i < 0) return false; + float f = getPowerForTime(i); if (f < 0.1) { return false; -@@ -89,6 +_,8 @@ - public InteractionResult use(Level p_40672_, Player p_40673_, InteractionHand p_40674_) { - ItemStack itemstack = p_40673_.getItemInHand(p_40674_); - boolean flag = !p_40673_.getProjectile(itemstack).isEmpty(); -+ var ret = net.minecraftforge.event.ForgeEventFactory.onArrowNock(itemstack, p_40672_, p_40673_, p_40674_, flag); +@@ -95,6 +_,8 @@ + public InteractionResult use(final Level level, final Player player, final InteractionHand hand) { + ItemStack itemstack = player.getItemInHand(hand); + boolean flag = !player.getProjectile(itemstack).isEmpty(); ++ var ret = net.minecraftforge.event.ForgeEventFactory.onArrowNock(itemstack, level, player, hand, flag); + if (ret != null) return ret; - if (!p_40673_.hasInfiniteMaterials() && !flag) { + if (!player.hasInfiniteMaterials() && !flag) { return InteractionResult.FAIL; } else { diff --git a/patches/minecraft/net/minecraft/world/item/BucketItem.java.patch b/patches/minecraft/net/minecraft/world/item/BucketItem.java.patch index c78510c909..3f638517e7 100644 --- a/patches/minecraft/net/minecraft/world/item/BucketItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/BucketItem.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/world/item/BucketItem.java +++ b/net/minecraft/world/item/BucketItem.java -@@ -33,15 +_,29 @@ +@@ -34,9 +_,21 @@ public class BucketItem extends Item implements DispensibleContainerItem { private final Fluid content; + // Forge: Use the other constructor that takes a Supplier + @Deprecated - public BucketItem(Fluid p_40689_, Item.Properties p_40690_) { - super(p_40690_); - this.content = p_40689_; -+ this.fluidSupplier = net.minecraftforge.registries.ForgeRegistries.FLUIDS.getDelegateOrThrow(p_40689_); + public BucketItem(final Fluid content, final Item.Properties properties) { + super(properties); + this.content = content; ++ this.fluidSupplier = net.minecraftforge.registries.ForgeRegistries.FLUIDS.getDelegateOrThrow(content); + } + + /** @@ -22,81 +22,82 @@ } @Override - public InteractionResult use(Level p_40703_, Player p_40704_, InteractionHand p_40705_) { - ItemStack itemstack = p_40704_.getItemInHand(p_40705_); - BlockHitResult blockhitresult = getPlayerPOVHitResult(p_40703_, p_40704_, this.content == Fluids.EMPTY ? ClipContext.Fluid.SOURCE_ONLY : ClipContext.Fluid.NONE); -+ var ret = net.minecraftforge.event.ForgeEventFactory.onBucketUse(p_40704_, p_40703_, itemstack, blockhitresult); +@@ -45,6 +_,8 @@ + BlockHitResult blockhitresult = getPlayerPOVHitResult( + level, player, this.content == Fluids.EMPTY ? ClipContext.Fluid.SOURCE_ONLY : ClipContext.Fluid.NONE + ); ++ var ret = net.minecraftforge.event.ForgeEventFactory.onBucketUse(player, level, itemstack, blockhitresult); + if (ret != null) return ret; if (blockhitresult.getType() == HitResult.Type.MISS) { return InteractionResult.PASS; } else if (blockhitresult.getType() != HitResult.Type.BLOCK) { -@@ -58,7 +_,7 @@ - ItemStack itemstack3 = bucketpickup.pickupBlock(p_40704_, p_40703_, blockpos, blockstate1); +@@ -61,7 +_,7 @@ + ItemStack itemstack3 = bucketpickup.pickupBlock(player, level, blockpos, blockstate1); if (!itemstack3.isEmpty()) { - p_40704_.awardStat(Stats.ITEM_USED.get(this)); -- bucketpickup.getPickupSound().ifPresent(p_150709_ -> p_40704_.playSound(p_150709_, 1.0F, 1.0F)); -+ bucketpickup.getPickupSound(blockstate1).ifPresent(p_150709_ -> p_40704_.playSound(p_150709_, 1.0F, 1.0F)); - p_40703_.gameEvent(p_40704_, GameEvent.FLUID_PICKUP, blockpos); - ItemStack itemstack2 = ItemUtils.createFilledResult(itemstack, p_40704_, itemstack3); - if (!p_40703_.isClientSide()) { -@@ -72,8 +_,8 @@ + player.awardStat(Stats.ITEM_USED.get(this)); +- bucketpickup.getPickupSound().ifPresent(soundEvent -> player.playSound(soundEvent, 1.0F, 1.0F)); ++ bucketpickup.getPickupSound(blockstate1).ifPresent(soundEvent -> player.playSound(soundEvent, 1.0F, 1.0F)); + level.gameEvent(player, GameEvent.FLUID_PICKUP, blockpos); + ItemStack itemstack2 = ItemUtils.createFilledResult(itemstack, player, itemstack3); + if (!level.isClientSide()) { +@@ -75,8 +_,8 @@ return InteractionResult.FAIL; } else { - BlockState blockstate = p_40703_.getBlockState(blockpos); + BlockState blockstate = level.getBlockState(blockpos); - BlockPos blockpos2 = blockstate.getBlock() instanceof LiquidBlockContainer && this.content == Fluids.WATER ? blockpos : blockpos1; -- if (this.emptyContents(p_40704_, p_40703_, blockpos2, blockhitresult)) { -+ BlockPos blockpos2 = canBlockContainFluid(p_40703_, blockpos, blockstate) ? blockpos : blockpos1; -+ if (this.emptyContents(p_40704_, p_40703_, blockpos2, blockhitresult, itemstack)) { - this.checkExtraContent(p_40704_, p_40703_, itemstack, blockpos2); - if (p_40704_ instanceof ServerPlayer) { - CriteriaTriggers.PLACED_BLOCK.trigger((ServerPlayer)p_40704_, blockpos2, itemstack); -@@ -97,8 +_,13 @@ - public void checkExtraContent(@Nullable LivingEntity p_397951_, Level p_150712_, ItemStack p_150713_, BlockPos p_150714_) { +- if (this.emptyContents(player, level, blockpos2, blockhitresult)) { ++ BlockPos blockpos2 = canBlockContainFluid(level, blockpos, blockstate) ? blockpos : blockpos1; ++ if (this.emptyContents(player, level, blockpos2, blockhitresult, itemstack)) { + this.checkExtraContent(player, level, itemstack, blockpos2); + if (player instanceof ServerPlayer) { + CriteriaTriggers.PLACED_BLOCK.trigger((ServerPlayer)player, blockpos2, itemstack); +@@ -100,8 +_,13 @@ + public void checkExtraContent(final @Nullable LivingEntity user, final Level level, final ItemStack itemStack, final BlockPos pos) { } + @Deprecated //Forge: use the ItemStack sensitive version @Override - public boolean emptyContents(@Nullable LivingEntity p_392717_, Level p_150717_, BlockPos p_150718_, @Nullable BlockHitResult p_150719_) { -+ return this.emptyContents(p_392717_, p_150717_, p_150718_, p_150719_, null); + public boolean emptyContents(final @Nullable LivingEntity user, final Level level, final BlockPos pos, final @Nullable BlockHitResult hitResult) { ++ return this.emptyContents(user, level, pos, hitResult, null); + } + -+ public boolean emptyContents(@Nullable LivingEntity p_392717_, Level p_150717_, BlockPos p_150718_, @Nullable BlockHitResult p_150719_, @Nullable ItemStack container) { ++ public boolean emptyContents(final @Nullable LivingEntity user, final Level level, final BlockPos pos, final @Nullable BlockHitResult hitResult, final @Nullable ItemStack container) { if (!(this.content instanceof FlowingFluid flowingfluid)) { return false; } else { -@@ -110,8 +_,12 @@ - || $$7 instanceof LiquidBlockContainer liquidblockcontainer - && liquidblockcontainer.canPlaceLiquid(p_392717_, p_150717_, p_150718_, blockstate, this.content); - boolean flag3 = blockstate.isAir() || flag2 && (!flag1 || p_150719_ == null); +@@ -113,8 +_,12 @@ + || block instanceof LiquidBlockContainer liquidblockcontainer + && liquidblockcontainer.canPlaceLiquid(user, level, pos, blockstate, this.content); + boolean flag3 = blockstate.isAir() || flag2 && (!flag1 || hitResult == null); + java.util.Optional containedFluidStack = java.util.Optional.ofNullable(container).flatMap(net.minecraftforge.fluids.FluidUtil::getFluidContained); if (!flag3) { -- return p_150719_ != null && this.emptyContents(p_392717_, p_150717_, p_150719_.getBlockPos().relative(p_150719_.getDirection()), null); -+ return p_150719_ != null && this.emptyContents(p_392717_, p_150717_, p_150719_.getBlockPos().relative(p_150719_.getDirection()), null, container); -+ } else if (containedFluidStack.isPresent() && this.content.getFluidType().isVaporizedOnPlacement(p_150717_, p_150718_, containedFluidStack.get())) { -+ this.content.getFluidType().onVaporize(p_392717_, p_150717_, p_150718_, containedFluidStack.get()); +- return hitResult != null && this.emptyContents(user, level, hitResult.getBlockPos().relative(hitResult.getDirection()), null); ++ return hitResult != null && this.emptyContents(user, level, hitResult.getBlockPos().relative(hitResult.getDirection()), null, container); ++ } else if (containedFluidStack.isPresent() && this.content.getFluidType().isVaporizedOnPlacement(level, pos, containedFluidStack.get())) { ++ this.content.getFluidType().onVaporize(user, level, pos, containedFluidStack.get()); + return true; - } else if (p_150717_.environmentAttributes().getValue(EnvironmentAttributes.WATER_EVAPORATES, p_150718_) && this.content.is(FluidTags.WATER)) { - int l = p_150718_.getX(); - int i = p_150718_.getY(); -@@ -138,7 +_,7 @@ + } else if (level.environmentAttributes().getValue(EnvironmentAttributes.WATER_EVAPORATES, pos) && this.content.is(FluidTags.WATER)) { + int l = pos.getX(); + int i = pos.getY(); +@@ -131,7 +_,7 @@ } return true; -- } else if ($$7 instanceof LiquidBlockContainer liquidblockcontainer1 && this.content == Fluids.WATER) { -+ } else if ($$7 instanceof LiquidBlockContainer liquidblockcontainer1 && liquidblockcontainer1.canPlaceLiquid(p_392717_, p_150717_, p_150718_, blockstate, content) && this.content == Fluids.WATER) { - liquidblockcontainer1.placeLiquid(p_150717_, p_150718_, blockstate, flowingfluid.getSource(false)); - this.playEmptySound(p_392717_, p_150717_, p_150718_); +- } else if (block instanceof LiquidBlockContainer liquidblockcontainer1 && this.content == Fluids.WATER) { ++ } else if (block instanceof LiquidBlockContainer liquidblockcontainer1 && liquidblockcontainer1.canPlaceLiquid(user, level, pos, blockstate, content) && this.content == Fluids.WATER) { + liquidblockcontainer1.placeLiquid(level, pos, blockstate, flowingfluid.getSource(false)); + this.playEmptySound(user, level, pos); return true; -@@ -159,8 +_,33 @@ +@@ -152,8 +_,33 @@ - protected void playEmptySound(@Nullable LivingEntity p_393933_, LevelAccessor p_40697_, BlockPos p_40698_) { + protected void playEmptySound(final @Nullable LivingEntity user, final LevelAccessor level, final BlockPos pos) { SoundEvent soundevent = this.content.is(FluidTags.LAVA) ? SoundEvents.BUCKET_EMPTY_LAVA : SoundEvents.BUCKET_EMPTY; -+ var custom = this.content.getFluidType().getSound(p_393933_, p_40697_, p_40698_, net.minecraftforge.common.SoundActions.BUCKET_EMPTY); ++ var custom = this.content.getFluidType().getSound(user, level, pos, net.minecraftforge.common.SoundActions.BUCKET_EMPTY); + if (custom != null) { + soundevent = custom; + } - p_40697_.playSound(p_393933_, p_40698_, soundevent, SoundSource.BLOCKS, 1.0F, 1.0F); - p_40697_.gameEvent(p_393933_, GameEvent.FLUID_PLACE, p_40698_); + level.playSound(user, pos, soundevent, SoundSource.BLOCKS, 1.0F, 1.0F); + level.gameEvent(user, GameEvent.FLUID_PLACE, pos); + } + + /** Forge: TODO: Forge ItemStack capabilities - Lex 042724 diff --git a/patches/minecraft/net/minecraft/world/item/BundleItem.java.patch b/patches/minecraft/net/minecraft/world/item/BundleItem.java.patch index 0e18379e1f..9b1a179268 100644 --- a/patches/minecraft/net/minecraft/world/item/BundleItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/BundleItem.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/world/item/BundleItem.java +++ b/net/minecraft/world/item/BundleItem.java -@@ -86,6 +_,7 @@ - - @Override - public boolean overrideOtherStackedOnMe(ItemStack p_150742_, ItemStack p_150743_, Slot p_150744_, ClickAction p_150745_, Player p_150746_, SlotAccess p_150747_) { -+ if (p_150742_.getCount() != 1) return false; - if (p_150745_ == ClickAction.PRIMARY && p_150743_.isEmpty()) { - toggleSelectedItem(p_150742_, -1); +@@ -97,6 +_,7 @@ + public boolean overrideOtherStackedOnMe( + final ItemStack self, final ItemStack other, final Slot slot, final ClickAction clickAction, final Player player, final SlotAccess carriedItem + ) { ++ if (other.getCount() != 1) return false; + if (clickAction == ClickAction.PRIMARY && other.isEmpty()) { + toggleSelectedItem(self, -1); return false; diff --git a/patches/minecraft/net/minecraft/world/item/CreativeModeTab.java.patch b/patches/minecraft/net/minecraft/world/item/CreativeModeTab.java.patch index a42456a195..a47e0dc36d 100644 --- a/patches/minecraft/net/minecraft/world/item/CreativeModeTab.java.patch +++ b/patches/minecraft/net/minecraft/world/item/CreativeModeTab.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/CreativeModeTab.java +++ b/net/minecraft/world/item/CreativeModeTab.java -@@ -27,6 +_,12 @@ +@@ -25,6 +_,12 @@ private Set displayItemsSearchTab = ItemStackLinkedSet.createTypeAndComponentsSet(); private final Supplier iconGenerator; private final CreativeModeTab.DisplayItemsGenerator displayItemsGenerator; @@ -11,22 +11,22 @@ + public final java.util.List tabsBefore; + public final java.util.List tabsAfter; - CreativeModeTab( - CreativeModeTab.Row p_260217_, -@@ -34,7 +_,8 @@ - CreativeModeTab.Type p_260176_, - Component p_260100_, - Supplier p_259543_, -- CreativeModeTab.DisplayItemsGenerator p_259085_ -+ CreativeModeTab.DisplayItemsGenerator p_259085_, + private CreativeModeTab( + final CreativeModeTab.Row row, +@@ -32,7 +_,8 @@ + final CreativeModeTab.Type type, + final Component displayName, + final Supplier iconGenerator, +- final CreativeModeTab.DisplayItemsGenerator displayItemsGenerator ++ final CreativeModeTab.DisplayItemsGenerator displayItemsGenerator, + Builder builder ) { - this.row = p_260217_; - this.column = p_259557_; -@@ -42,12 +_,27 @@ - this.iconGenerator = p_259543_; - this.displayItemsGenerator = p_259085_; - this.type = p_260176_; + this.row = row; + this.column = column; +@@ -40,12 +_,27 @@ + this.iconGenerator = iconGenerator; + this.displayItemsGenerator = displayItemsGenerator; + this.type = type; + this.hasSearchBar = builder.hasSearchBar; + this.searchBarWidth = builder.searchBarWidth; + this.labelColor = builder.labelColor; @@ -43,25 +43,25 @@ + return new CreativeModeTab.Builder(Row.TOP, 0); } - public static Identifier createTextureLocation(String p_343491_) { - return Identifier.withDefaultNamespace("textures/gui/container/creative_inventory/tab_" + p_343491_ + ".png"); + public static Identifier createTextureLocation(final String name) { + return Identifier.withDefaultNamespace("textures/gui/container/creative_inventory/tab_" + name + ".png"); } + /** @deprecated Forge: use {@link #builder()} **/ - public static CreativeModeTab.Builder builder(CreativeModeTab.Row p_259342_, int p_260312_) { - return new CreativeModeTab.Builder(p_259342_, p_260312_); + public static CreativeModeTab.Builder builder(final CreativeModeTab.Row row, final int column) { + return new CreativeModeTab.Builder(row, column); } -@@ -105,7 +_,7 @@ - ResourceKey resourcekey = BuiltInRegistries.CREATIVE_MODE_TAB - .getResourceKey(this) - .orElseThrow(() -> new IllegalStateException("Unregistered creative tab: " + this)); -- this.displayItemsGenerator.accept(p_270156_, creativemodetab$itemdisplaybuilder); -+ net.minecraftforge.common.ForgeHooks.onCreativeModeTabBuildContents(this, resourcekey, this.displayItemsGenerator, p_270156_, creativemodetab$itemdisplaybuilder); +@@ -100,7 +_,7 @@ + + public void buildContents(final CreativeModeTab.ItemDisplayParameters parameters) { + CreativeModeTab.ItemDisplayBuilder creativemodetab$itemdisplaybuilder = new CreativeModeTab.ItemDisplayBuilder(this, parameters.enabledFeatures); +- this.displayItemsGenerator.accept(parameters, creativemodetab$itemdisplaybuilder); ++ net.minecraftforge.common.ForgeHooks.onCreativeModeTabBuildContents(this, this.displayItemsGenerator, parameters, creativemodetab$itemdisplaybuilder); this.displayItems = creativemodetab$itemdisplaybuilder.tabContents; this.displayItemsSearchTab = creativemodetab$itemdisplaybuilder.searchTabContents; } -@@ -122,6 +_,22 @@ - return this.displayItemsSearchTab.contains(p_259317_); +@@ -117,6 +_,22 @@ + return this.displayItemsSearchTab.contains(stack); } + public boolean hasSearchBar() { @@ -81,9 +81,9 @@ + } + public static class Builder { - private static final CreativeModeTab.DisplayItemsGenerator EMPTY_GENERATOR = (p_270422_, p_259433_) -> {}; + private static final CreativeModeTab.DisplayItemsGenerator EMPTY_GENERATOR = (parameters, output) -> {}; private final CreativeModeTab.Row row; -@@ -134,6 +_,14 @@ +@@ -129,6 +_,14 @@ private boolean alignedRight = false; private CreativeModeTab.Type type = CreativeModeTab.Type.CATEGORY; private Identifier backgroundTexture = CreativeModeTab.DEFAULT_BACKGROUND; @@ -96,19 +96,19 @@ + private final java.util.List tabsBefore = new java.util.ArrayList<>(); + private final java.util.List tabsAfter = new java.util.ArrayList<>(); - public Builder(CreativeModeTab.Row p_259171_, int p_259661_) { - this.row = p_259171_; -@@ -172,6 +_,9 @@ + public Builder(final CreativeModeTab.Row row, final int column) { + this.row = row; +@@ -167,6 +_,9 @@ - protected CreativeModeTab.Builder type(CreativeModeTab.Type p_259283_) { - this.type = p_259283_; -+ if (p_259283_ == Type.SEARCH) { + protected CreativeModeTab.Builder type(final CreativeModeTab.Type type) { + this.type = type; ++ if (type == Type.SEARCH) { + return this.withSearchBar(); + } return this; } -@@ -180,13 +_,80 @@ +@@ -175,13 +_,80 @@ return this; } diff --git a/patches/minecraft/net/minecraft/world/item/CrossbowItem.java.patch b/patches/minecraft/net/minecraft/world/item/CrossbowItem.java.patch index f29e9cbbe8..ab206d9169 100644 --- a/patches/minecraft/net/minecraft/world/item/CrossbowItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/CrossbowItem.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/world/item/CrossbowItem.java +++ b/net/minecraft/world/item/CrossbowItem.java -@@ -163,6 +_,7 @@ - Level p_40888_, LivingEntity p_40889_, InteractionHand p_40890_, ItemStack p_40891_, float p_40892_, float p_40893_, @Nullable LivingEntity p_329478_ +@@ -177,6 +_,7 @@ + final @Nullable LivingEntity targetOverride ) { - if (p_40888_ instanceof ServerLevel serverlevel) { -+ if (p_40889_ instanceof Player player && net.minecraftforge.event.ForgeEventFactory.onArrowLoose(p_40891_, p_40889_.level(), player, 1, true) < 0) return; - ChargedProjectiles chargedprojectiles = p_40891_.set(DataComponents.CHARGED_PROJECTILES, ChargedProjectiles.EMPTY); + if (level instanceof ServerLevel serverlevel) { ++ if (shooter instanceof Player player && net.minecraftforge.event.ForgeEventFactory.onArrowLoose(weapon, shooter.level(), player, 1, true) < 0) return; + ChargedProjectiles chargedprojectiles = weapon.set(DataComponents.CHARGED_PROJECTILES, ChargedProjectiles.EMPTY); if (chargedprojectiles != null && !chargedprojectiles.isEmpty()) { - this.shoot( + this.shoot(serverlevel, shooter, hand, weapon, chargedprojectiles.itemCopies(), power, uncertainty, shooter instanceof Player, targetOverride); diff --git a/patches/minecraft/net/minecraft/world/item/DispensibleContainerItem.java.patch b/patches/minecraft/net/minecraft/world/item/DispensibleContainerItem.java.patch index 503aa7307f..0ee3d949cc 100644 --- a/patches/minecraft/net/minecraft/world/item/DispensibleContainerItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/DispensibleContainerItem.java.patch @@ -6,9 +6,9 @@ -public interface DispensibleContainerItem { +public interface DispensibleContainerItem extends net.minecraftforge.common.extensions.IForgeDispensibleContainerItem { - default void checkExtraContent(@Nullable LivingEntity p_391486_, Level p_150818_, ItemStack p_150819_, BlockPos p_150820_) { + default void checkExtraContent(final @Nullable LivingEntity user, final Level level, final ItemStack itemStack, final BlockPos pos) { } + @Deprecated //Forge: use the ItemStack sensitive version - boolean emptyContents(@Nullable LivingEntity p_396492_, Level p_150822_, BlockPos p_150823_, @Nullable BlockHitResult p_150824_); + boolean emptyContents(final @Nullable LivingEntity user, final Level level, final BlockPos pos, final @Nullable BlockHitResult hitResult); } diff --git a/patches/minecraft/net/minecraft/world/item/DyeColor.java.patch b/patches/minecraft/net/minecraft/world/item/DyeColor.java.patch index 9dd5d9bfa8..f1376f5fd9 100644 --- a/patches/minecraft/net/minecraft/world/item/DyeColor.java.patch +++ b/patches/minecraft/net/minecraft/world/item/DyeColor.java.patch @@ -1,24 +1,24 @@ --- a/net/minecraft/world/item/DyeColor.java +++ b/net/minecraft/world/item/DyeColor.java -@@ -52,6 +_,8 @@ +@@ -59,6 +_,8 @@ private final int textureDiffuseColor; private final int fireworkColor; private final int textColor; + private final net.minecraft.tags.TagKey dyesTag; + private final net.minecraft.tags.TagKey dyedTag; - private DyeColor(final int p_41046_, final String p_41047_, final int p_41048_, final MapColor p_285297_, final int p_41050_, final int p_41051_) { - this.id = p_41046_; -@@ -60,6 +_,8 @@ - this.textColor = ARGB.opaque(p_41051_); - this.textureDiffuseColor = ARGB.opaque(p_41048_); - this.fireworkColor = p_41050_; -+ this.dyesTag = net.minecraft.tags.ItemTags.create("c", "dyes/" + p_41047_); -+ this.dyedTag = net.minecraft.tags.ItemTags.create("c", "dyed/" + p_41047_); + private DyeColor(final int id, final String name, final int textureDiffuseColor, final MapColor mapColor, final int fireworkColor, final int textColor) { + this.id = id; +@@ -67,6 +_,8 @@ + this.textColor = ARGB.opaque(textColor); + this.textureDiffuseColor = ARGB.opaque(textureDiffuseColor); + this.fireworkColor = fireworkColor; ++ this.dyesTag = net.minecraft.tags.ItemTags.create("c", "dyes/" + name); ++ this.dyedTag = net.minecraft.tags.ItemTags.create("c", "dyed/" + name); } public int getId() { -@@ -108,6 +_,27 @@ +@@ -115,6 +_,27 @@ @Override public String getSerializedName() { return this.name; @@ -45,4 +45,4 @@ + return net.minecraftforge.common.ForgeHooks.getDyeColorFromItemStack(stack); } - public static DyeColor getMixedColor(ServerLevel p_377753_, DyeColor p_378336_, DyeColor p_376650_) { + public static DyeColor getMixedColor(final ServerLevel level, final DyeColor dyeColor1, final DyeColor dyeColor2) { diff --git a/patches/minecraft/net/minecraft/world/item/FishingRodItem.java.patch b/patches/minecraft/net/minecraft/world/item/FishingRodItem.java.patch index 6f042c101a..4db27efb05 100644 --- a/patches/minecraft/net/minecraft/world/item/FishingRodItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/FishingRodItem.java.patch @@ -1,17 +1,17 @@ --- a/net/minecraft/world/item/FishingRodItem.java +++ b/net/minecraft/world/item/FishingRodItem.java @@ -24,7 +_,11 @@ - if (p_41291_.fishing != null) { - if (!p_41290_.isClientSide()) { - int i = p_41291_.fishing.retrieve(itemstack); + if (player.fishing != null) { + if (!level.isClientSide()) { + int i = player.fishing.retrieve(itemstack); + ItemStack original = itemstack.copy(); - itemstack.hurtAndBreak(i, p_41291_, p_41292_.asEquipmentSlot()); + itemstack.hurtAndBreak(i, player, hand.asEquipmentSlot()); + if (itemstack.isEmpty()) { -+ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(p_41291_, original, p_41292_.asEquipmentSlot()); ++ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(player, original, hand.asEquipmentSlot()); + } } - p_41290_.playSound( + level.playSound( @@ -60,5 +_,10 @@ } diff --git a/patches/minecraft/net/minecraft/world/item/HoeItem.java.patch b/patches/minecraft/net/minecraft/world/item/HoeItem.java.patch index d99cd9c232..1c37971385 100644 --- a/patches/minecraft/net/minecraft/world/item/HoeItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/HoeItem.java.patch @@ -14,19 +14,19 @@ ImmutableMap.of( Blocks.GRASS_BLOCK, @@ -44,7 +_,8 @@ - public InteractionResult useOn(UseOnContext p_41341_) { - Level level = p_41341_.getLevel(); - BlockPos blockpos = p_41341_.getClickedPos(); + public InteractionResult useOn(final UseOnContext context) { + Level level = context.getLevel(); + BlockPos blockpos = context.getClickedPos(); - Pair, Consumer> pair = TILLABLES.get(level.getBlockState(blockpos).getBlock()); -+ BlockState toolModifiedState = level.getBlockState(blockpos).getToolModifiedState(p_41341_, net.minecraftforge.common.ToolActions.HOE_TILL, false); ++ BlockState toolModifiedState = level.getBlockState(blockpos).getToolModifiedState(context, net.minecraftforge.common.ToolActions.HOE_TILL, false); + Pair, Consumer> pair = toolModifiedState == null ? null : Pair.of(ctx -> true, changeIntoState(toolModifiedState)); if (pair == null) { return InteractionResult.PASS; } else { @@ -84,5 +_,10 @@ - public static boolean onlyIfAirAbove(UseOnContext p_150857_) { - return p_150857_.getClickedFace() != Direction.DOWN && p_150857_.getLevel().getBlockState(p_150857_.getClickedPos().above()).isAir(); + public static boolean onlyIfAirAbove(final UseOnContext context) { + return context.getClickedFace() != Direction.DOWN && context.getLevel().getBlockState(context.getClickedPos().above()).isAir(); + } + + @Override diff --git a/patches/minecraft/net/minecraft/world/item/Item.java.patch b/patches/minecraft/net/minecraft/world/item/Item.java.patch index 1ebf4958ee..4bf667d719 100644 --- a/patches/minecraft/net/minecraft/world/item/Item.java.patch +++ b/patches/minecraft/net/minecraft/world/item/Item.java.patch @@ -4,21 +4,21 @@ import org.jspecify.annotations.Nullable; import org.slf4j.Logger; --public class Item implements FeatureElement, ItemLike { -+public class Item implements FeatureElement, ItemLike, net.minecraftforge.common.extensions.IForgeItem { +-public class Item implements ItemLike, FeatureElement { ++public class Item implements ItemLike, FeatureElement, net.minecraftforge.common.extensions.IForgeItem { public static final Codec> CODEC = BuiltInRegistries.ITEM .holderByNameCodec() - .validate( -@@ -105,7 +_,7 @@ - ); - public static final StreamCodec> STREAM_CODEC = ByteBufCodecs.holderRegistry(Registries.ITEM); + .validate(item -> item.is(Items.AIR.builtInRegistryHolder()) ? DataResult.error(() -> "Item must not be minecraft:air") : DataResult.success(item)); +@@ -106,7 +_,7 @@ + : DataResult.success(item) + ); private static final Logger LOGGER = LogUtils.getLogger(); - public static final Map BY_BLOCK = Maps.newHashMap(); + public static final Map BY_BLOCK = net.minecraftforge.registries.GameData.ItemCallbacks.getBlockItemMap(); public static final Identifier BASE_ATTACK_DAMAGE_ID = Identifier.withDefaultNamespace("base_attack_damage"); public static final Identifier BASE_ATTACK_SPEED_ID = Identifier.withDefaultNamespace("base_attack_speed"); public static final int DEFAULT_MAX_STACK_SIZE = 64; -@@ -142,6 +_,7 @@ +@@ -145,6 +_,7 @@ LOGGER.error("Item classes should end with Item and {} doesn't.", s); } } @@ -26,7 +26,7 @@ } @Deprecated -@@ -149,17 +_,25 @@ +@@ -152,8 +_,15 @@ return this.builtInRegistryHolder; } @@ -34,36 +34,33 @@ + private DataComponentMap builtComponents = null; + public DataComponentMap components() { -- return this.components; +- return this.builtInRegistryHolder.components(); + if (builtComponents == null) { -+ builtComponents = net.minecraftforge.common.ForgeHooks.gatherItemComponents(this, components); ++ builtComponents = net.minecraftforge.common.ForgeHooks.gatherItemComponents(this, this.builtInRegistryHolder.components()); + } + + return builtComponents; } public int getDefaultMaxStackSize() { -- return this.components.getOrDefault(DataComponents.MAX_STACK_SIZE, 1); -+ return builtComponents == null ? this.components.getOrDefault(DataComponents.MAX_STACK_SIZE, 1) : this.builtComponents.getOrDefault(DataComponents.MAX_STACK_SIZE, 1); - } - - public void onUseTick(Level p_41428_, LivingEntity p_41429_, ItemStack p_41430_, int p_41431_) { +@@ -163,6 +_,7 @@ + public void onUseTick(final Level level, final LivingEntity livingEntity, final ItemStack itemStack, final int ticksRemaining) { } + /** @deprecated Forge: {@link net.minecraftforge.common.extensions.IForgeItem#onDestroyed(ItemEntity, DamageSource) Use damage source sensitive version} */ - public void onDestroyed(ItemEntity p_150887_) { + public void onDestroyed(final ItemEntity itemEntity) { } -@@ -276,6 +_,8 @@ +@@ -281,6 +_,8 @@ return BuiltInRegistries.ITEM.wrapAsHolder(this).getRegisteredName(); } + /** Forge: use {@link ItemStack#getCraftingRemainder()}. */ + @Deprecated - public final ItemStack getCraftingRemainder() { - return this.craftingRemainingItem == null ? ItemStack.EMPTY : new ItemStack(this.craftingRemainingItem); + public final @Nullable ItemStackTemplate getCraftingRemainder() { + return this.craftingRemainingItem; } -@@ -366,6 +_,30 @@ +@@ -373,6 +_,30 @@ return false; } @@ -92,9 +89,9 @@ + public void initializeClient(java.util.function.Consumer consumer) { } + public static class Properties { - private static final DependantName BLOCK_DESCRIPTION_ID = p_449793_ -> Util.makeDescriptionId("block", p_449793_.identifier()); - private static final DependantName ITEM_DESCRIPTION_ID = p_449792_ -> Util.makeDescriptionId("item", p_449792_.identifier()); -@@ -683,6 +_,11 @@ + private static final DependantName BLOCK_DESCRIPTION_ID = id -> Util.makeDescriptionId("block", id.identifier()); + private static final DependantName ITEM_DESCRIPTION_ID = id -> Util.makeDescriptionId("item", id.identifier()); +@@ -721,6 +_,11 @@ boolean isPeaceful(); @@ -103,18 +100,18 @@ + return null; + } + - static Item.TooltipContext of(final @Nullable Level p_332083_) { - return p_332083_ == null ? EMPTY : new Item.TooltipContext() { + static Item.TooltipContext of(final @Nullable Level level) { + return level == null ? EMPTY : new Item.TooltipContext() { @Override -@@ -703,6 +_,11 @@ +@@ -741,6 +_,11 @@ @Override public boolean isPeaceful() { - return p_332083_.getDifficulty() == Difficulty.PEACEFUL; + return level.getDifficulty() == Difficulty.PEACEFUL; + } + + @Override + public Level level() { -+ return p_332083_; ++ return level; } }; } diff --git a/patches/minecraft/net/minecraft/world/item/ItemDisplayContext.java.patch b/patches/minecraft/net/minecraft/world/item/ItemDisplayContext.java.patch index 7cafbc478e..08d4cfa626 100644 --- a/patches/minecraft/net/minecraft/world/item/ItemDisplayContext.java.patch +++ b/patches/minecraft/net/minecraft/world/item/ItemDisplayContext.java.patch @@ -20,9 +20,9 @@ private byte id; private final String name; - private ItemDisplayContext(final int p_270624_, final String p_270851_) { - this.name = p_270851_; - this.id = (byte)p_270624_; + private ItemDisplayContext(final int id, final String name) { + this.name = name; + this.id = (byte)id; + this.isModded = false; + this.fallback = null; } diff --git a/patches/minecraft/net/minecraft/world/item/ItemStack.java.patch b/patches/minecraft/net/minecraft/world/item/ItemStack.java.patch index dda9b33ea8..f9339ef948 100644 --- a/patches/minecraft/net/minecraft/world/item/ItemStack.java.patch +++ b/patches/minecraft/net/minecraft/world/item/ItemStack.java.patch @@ -1,110 +1,110 @@ --- a/net/minecraft/world/item/ItemStack.java +++ b/net/minecraft/world/item/ItemStack.java -@@ -104,7 +_,7 @@ +@@ -102,7 +_,7 @@ import org.jspecify.annotations.Nullable; import org.slf4j.Logger; --public final class ItemStack implements DataComponentHolder { -+public final class ItemStack extends net.minecraftforge.common.capabilities.CapabilityProvider.ItemStacks implements DataComponentHolder, net.minecraftforge.common.extensions.IForgeItemStack { +-public final class ItemStack implements DataComponentHolder, ItemInstance { ++public final class ItemStack extends net.minecraftforge.common.capabilities.CapabilityProvider.ItemStacks implements DataComponentHolder, ItemInstance, net.minecraftforge.common.extensions.IForgeItemStack { private static final List OP_NBT_WARNING = List.of( Component.translatable("item.op_warning.line1").withStyle(ChatFormatting.RED, ChatFormatting.BOLD), Component.translatable("item.op_warning.line2").withStyle(ChatFormatting.RED), -@@ -273,12 +_,15 @@ +@@ -260,12 +_,15 @@ } - private ItemStack(ItemLike p_331826_, int p_332766_, PatchedDataComponentMap p_333722_) { + private ItemStack(final Holder item, final int count, final PatchedDataComponentMap components) { + super(true); - this.item = p_331826_.asItem(); - this.count = p_332766_; - this.components = p_333722_; -+ gatherCapabilities(() -> this.item.getCapabilityProvider(this)); + this.item = item; + this.count = count; + this.components = components; ++ gatherCapabilities(() -> this.item.get().getCapabilityProvider(this)); } - private ItemStack(@Nullable Void p_282703_) { + private ItemStack(final @Nullable Void nullMarker) { + super(false); this.item = null; this.components = new PatchedDataComponentMap(DataComponentMap.EMPTY); } -@@ -359,13 +_,22 @@ +@@ -358,13 +_,22 @@ } - public InteractionResult useOn(UseOnContext p_41662_) { -+ if (!p_41662_.getLevel().isClientSide()) return net.minecraftforge.common.ForgeHooks.onPlaceItemIntoWorld(p_41662_); -+ return onItemUse(p_41662_, (c) -> getItem().useOn(p_41662_)); + public InteractionResult useOn(final UseOnContext context) { ++ if (!context.getLevel().isClientSide()) return net.minecraftforge.common.ForgeHooks.onPlaceItemIntoWorld(context); ++ return onItemUse(context, (c) -> getItem().useOn(context)); + } + -+ public InteractionResult onItemUseFirst(UseOnContext p_41662_) { -+ return onItemUse(p_41662_, (c) -> getItem().onItemUseFirst(this, p_41662_)); ++ public InteractionResult onItemUseFirst(UseOnContext context) { ++ return onItemUse(context, (c) -> getItem().onItemUseFirst(this, context)); + } + -+ private InteractionResult onItemUse(UseOnContext p_41662_, java.util.function.Function callback) { - Player player = p_41662_.getPlayer(); - BlockPos blockpos = p_41662_.getClickedPos(); - if (player != null && !player.getAbilities().mayBuild && !this.canPlaceOnBlockInAdventureMode(new BlockInWorld(p_41662_.getLevel(), blockpos, false))) { ++ private InteractionResult onItemUse(UseOnContext context, java.util.function.Function callback) { + Player player = context.getPlayer(); + BlockPos blockpos = context.getClickedPos(); + if (player != null && !player.getAbilities().mayBuild && !this.canPlaceOnBlockInAdventureMode(new BlockInWorld(context.getLevel(), blockpos, false))) { return InteractionResult.PASS; } else { Item item = this.getItem(); -- InteractionResult interactionresult = item.useOn(p_41662_); -+ InteractionResult interactionresult = callback.apply(p_41662_); - if (player != null && interactionresult instanceof InteractionResult.Success interactionresult$success && interactionresult$success.wasItemInteraction()) { - player.awardStat(Stats.ITEM_USED.get(item)); - } -@@ -450,18 +_,26 @@ +- InteractionResult interactionresult = item.useOn(context); ++ InteractionResult interactionresult = callback.apply(context); + if (player != null + && interactionresult instanceof InteractionResult.Success interactionresult$success + && interactionresult$success.wasItemInteraction()) { +@@ -447,18 +_,26 @@ } - public void hurtAndBreak(int p_220158_, ServerLevel p_342197_, @Nullable ServerPlayer p_220160_, Consumer p_343361_) { -- int i = this.processDurabilityChange(p_220158_, p_342197_, p_220160_); + public void hurtAndBreak(final int amount, final ServerLevel level, final @Nullable ServerPlayer player, final Consumer onBreak) { +- int i = this.processDurabilityChange(amount, level, player); + // FORGE: use context-sensitive sister of processDurabilityChange that calls IForgeItem.damageItem -+ int i = this.processDurabilityChange(p_220158_, p_342197_, p_220160_, true, p_343361_); ++ int i = this.processDurabilityChange(amount, level, player, true, onBreak); if (i != 0) { - this.applyDamage(this.getDamageValue() + i, p_220160_, p_343361_); + this.applyDamage(this.getDamageValue() + i, player, onBreak); } } - private int processDurabilityChange(int p_362423_, ServerLevel p_364910_, @Nullable ServerPlayer p_365570_) { -+ return this.processDurabilityChange(p_362423_, p_364910_, p_365570_, false, p_359411_ -> { }); + private int processDurabilityChange(final int amount, final ServerLevel level, final @Nullable ServerPlayer player) { ++ return this.processDurabilityChange(amount, level, player, false, item -> { }); + } + + /** FORGE: context-sensitive sister of processDurabilityChange that calls IForgeItem.damageItem */ -+ private int processDurabilityChange(int p_362423_, ServerLevel p_364910_, @Nullable ServerPlayer p_365570_, boolean canBreak, Consumer onBreak) { ++ private int processDurabilityChange(int amount, final ServerLevel level, final @Nullable ServerPlayer player, final boolean canBreak, final Consumer onBreak) { if (!this.isDamageableItem()) { return 0; - } else if (p_365570_ != null && p_365570_.hasInfiniteMaterials()) { + } else if (player != null && player.hasInfiniteMaterials()) { return 0; } else { + // FORGE: modify the base damage based on the item's impl of IForgeItem.damageItem -+ p_362423_ = this.damageItem(p_362423_, p_364910_, p_365570_, canBreak, onBreak); - return p_362423_ > 0 ? EnchantmentHelper.processDurabilityChange(p_364910_, this, p_362423_) : p_362423_; ++ amount = this.damageItem(amount, level, player, canBreak, onBreak); + return amount > 0 ? EnchantmentHelper.processDurabilityChange(level, this, amount) : amount; } } -@@ -501,7 +_,13 @@ - p_41623_, +@@ -498,7 +_,13 @@ + amount, serverlevel, - p_41624_ instanceof ServerPlayer serverplayer ? serverplayer : null, -- p_341563_ -> p_41624_.onEquippedItemBroken(p_341563_, p_335324_) -+ p_341563_ -> { -+ if (p_41624_ instanceof Player player) { -+ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(player, this, p_335324_); + owner instanceof ServerPlayer serverplayer ? serverplayer : null, +- brokenItem -> owner.onEquippedItemBroken(brokenItem, slot) ++ brokenItem -> { ++ if (owner instanceof Player player) { ++ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(player, this, slot); + if (player.getUseItem() == this) player.stopUsingItem(); // Forge: fix MC-168573 + } -+ p_41624_.onEquippedItemBroken(p_341563_, p_335324_); ++ owner.onEquippedItemBroken(brokenItem, slot); + } ); } } -@@ -854,6 +_,7 @@ +@@ -857,6 +_,7 @@ List list = Lists.newArrayList(); list.add(this.getStyledHoverName()); - this.addDetailsToTooltip(p_331329_, tooltipdisplay, p_41652_, p_41653_, list::add); -+ net.minecraftforge.event.ForgeEventFactory.onItemTooltip(this, p_41652_, list, p_41653_); + this.addDetailsToTooltip(context, tooltipdisplay, player, tooltipFlag, list::add); ++ net.minecraftforge.event.ForgeEventFactory.onItemTooltip(this, player, list, tooltipFlag); return list; } } -@@ -1110,6 +_,7 @@ +@@ -1105,6 +_,7 @@ } } + /** @deprecated Forge: Use {@linkplain net.minecraftforge.common.extensions.IForgeItemStack#onDestroyed(ItemEntity, net.minecraft.world.damagesource.DamageSource) damage source sensitive version} */ - public void onDestroyed(ItemEntity p_150925_) { - this.getItem().onDestroyed(p_150925_); + public void onDestroyed(final ItemEntity itemEntity) { + this.getItem().onDestroyed(itemEntity); } diff --git a/patches/minecraft/net/minecraft/world/item/Items.java.patch b/patches/minecraft/net/minecraft/world/item/Items.java.patch index 75a7691505..762c1d7b7c 100644 --- a/patches/minecraft/net/minecraft/world/item/Items.java.patch +++ b/patches/minecraft/net/minecraft/world/item/Items.java.patch @@ -1,16 +1,16 @@ --- a/net/minecraft/world/item/Items.java +++ b/net/minecraft/world/item/Items.java -@@ -2320,7 +_,25 @@ +@@ -2359,7 +_,25 @@ } - public static Item registerBlock(Block p_252092_, Block... p_248886_) { -- Item item = registerBlock(p_252092_); -+ Item item = registerBlock(p_252092_, (block_, prop_) -> { + private static Item registerBlock(final Block block, final Block... alternatives) { +- Item item = registerBlock(block); ++ Item item = registerBlock(block, (block_, prop_) -> { + return new BlockItem(block_, prop_) { + @Override + public void registerBlocks(java.util.Map map, Item self) { + super.registerBlocks(map, self); -+ for (var b : p_248886_) { ++ for (var b : alternatives) { + map.put(b, self); + } + } @@ -18,23 +18,23 @@ + @Override + public void removeFromBlockToItemMap(java.util.Map map, Item self) { + super.removeFromBlockToItemMap(map, self); -+ for (var b : p_248886_) { ++ for (var b : alternatives) { + map.remove(b); + } + } + }; + }); - for (Block block : p_248886_) { - Item.BY_BLOCK.put(block, item); -@@ -2359,10 +_,6 @@ + for (Block blockx : alternatives) { + Item.BY_BLOCK.put(blockx, item); +@@ -2402,10 +_,6 @@ - public static Item registerItem(ResourceKey p_364577_, Function p_366144_, Item.Properties p_369845_) { - Item item = p_366144_.apply(p_369845_.setId(p_364577_)); + private static Item registerItem(final ResourceKey key, final Function itemFactory, final Item.Properties properties) { + Item item = itemFactory.apply(properties.setId(key)); - if (item instanceof BlockItem blockitem) { - blockitem.registerBlocks(Item.BY_BLOCK, item); - } - - return Registry.register(BuiltInRegistries.ITEM, p_364577_, item); + return Registry.register(BuiltInRegistries.ITEM, key, item); } } diff --git a/patches/minecraft/net/minecraft/world/item/MobBucketItem.java.patch b/patches/minecraft/net/minecraft/world/item/MobBucketItem.java.patch index d104208f6e..a25f5ff592 100644 --- a/patches/minecraft/net/minecraft/world/item/MobBucketItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/MobBucketItem.java.patch @@ -10,11 +10,11 @@ + private final java.util.function.Supplier emptySoundSupplier; + @Deprecated - public MobBucketItem(EntityType p_151137_, Fluid p_151138_, SoundEvent p_151139_, Item.Properties p_151140_) { -- super(p_151138_, p_151140_); -- this.type = p_151137_; -- this.emptySound = p_151139_; -+ this(() -> p_151137_, () -> p_151138_, () -> p_151139_, p_151140_); + public MobBucketItem(final EntityType type, final Fluid content, final SoundEvent emptySound, final Item.Properties properties) { +- super(content, properties); +- this.type = type; +- this.emptySound = emptySound; ++ this(() -> type, () -> content, () -> emptySound, properties); + } + + public MobBucketItem(java.util.function.Supplier> entitySupplier, java.util.function.Supplier fluidSupplier, java.util.function.Supplier soundSupplier, Item.Properties properties) { @@ -27,19 +27,19 @@ @@ -37,11 +_,11 @@ @Override - protected void playEmptySound(@Nullable LivingEntity p_391719_, LevelAccessor p_151152_, BlockPos p_151153_) { -- p_151152_.playSound(p_391719_, p_151153_, this.emptySound, SoundSource.NEUTRAL, 1.0F, 1.0F); -+ p_151152_.playSound(p_391719_, p_151153_, this.getEmptySound(), SoundSource.NEUTRAL, 1.0F, 1.0F); + protected void playEmptySound(final @Nullable LivingEntity user, final LevelAccessor level, final BlockPos pos) { +- level.playSound(user, pos, this.emptySound, SoundSource.NEUTRAL, 1.0F, 1.0F); ++ level.playSound(user, pos, this.getEmptySound(), SoundSource.NEUTRAL, 1.0F, 1.0F); } - private void spawn(ServerLevel p_151142_, ItemStack p_151143_, BlockPos p_151144_) { -- Mob mob = this.type.create(p_151142_, EntityType.createDefaultStackConfig(p_151142_, p_151143_, null), p_151144_, EntitySpawnReason.BUCKET, true, false); -+ Mob mob = this.getFishType().create(p_151142_, EntityType.createDefaultStackConfig(p_151142_, p_151143_, null), p_151144_, EntitySpawnReason.BUCKET, true, false); + private void spawn(final ServerLevel level, final ItemStack itemStack, final BlockPos spawnPos) { +- Mob mob = this.type.create(level, EntityType.createDefaultStackConfig(level, itemStack, null), spawnPos, EntitySpawnReason.BUCKET, true, false); ++ Mob mob = this.getFishType().create(level, EntityType.createDefaultStackConfig(level, itemStack, null), spawnPos, EntitySpawnReason.BUCKET, true, false); if (mob instanceof Bucketable bucketable) { - CustomData customdata = p_151143_.getOrDefault(DataComponents.BUCKET_ENTITY_DATA, CustomData.EMPTY); + CustomData customdata = itemStack.getOrDefault(DataComponents.BUCKET_ENTITY_DATA, CustomData.EMPTY); bucketable.loadFromBucketTag(customdata.copyTag()); @@ -52,5 +_,13 @@ - p_151142_.addFreshEntityWithPassengers(mob); + level.addFreshEntityWithPassengers(mob); mob.playAmbientSound(); } + } diff --git a/patches/minecraft/net/minecraft/world/item/ProjectileWeaponItem.java.patch b/patches/minecraft/net/minecraft/world/item/ProjectileWeaponItem.java.patch index e7e46f7976..c07bb2ac52 100644 --- a/patches/minecraft/net/minecraft/world/item/ProjectileWeaponItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/ProjectileWeaponItem.java.patch @@ -1,26 +1,26 @@ --- a/net/minecraft/world/item/ProjectileWeaponItem.java +++ b/net/minecraft/world/item/ProjectileWeaponItem.java -@@ -87,6 +_,7 @@ - protected Projectile createProjectile(Level p_333069_, LivingEntity p_334736_, ItemStack p_333680_, ItemStack p_329118_, boolean p_336242_) { - ArrowItem arrowitem = p_329118_.getItem() instanceof ArrowItem arrowitem1 ? arrowitem1 : (ArrowItem)Items.ARROW; - AbstractArrow abstractarrow = arrowitem.createArrow(p_333069_, p_329118_, p_334736_, p_333680_); +@@ -95,6 +_,7 @@ + ) { + ArrowItem arrowitem = projectile.getItem() instanceof ArrowItem arrowitem1 ? arrowitem1 : (ArrowItem)Items.ARROW; + AbstractArrow abstractarrow = arrowitem.createArrow(level, projectile, shooter, weapon); + abstractarrow = customArrow(abstractarrow); - if (p_336242_) { + if (isCrit) { abstractarrow.setCritArrow(true); } -@@ -101,9 +_,10 @@ - int i = p_335616_.level() instanceof ServerLevel serverlevel ? EnchantmentHelper.processProjectileCount(serverlevel, p_329054_, p_335616_, 1) : 1; +@@ -109,9 +_,10 @@ + int i = shooter.level() instanceof ServerLevel serverlevel ? EnchantmentHelper.processProjectileCount(serverlevel, weapon, shooter, 1) : 1; List list = new ArrayList<>(i); - ItemStack itemstack1 = p_328618_.copy(); -+ boolean infinite = p_328618_.getItem() instanceof ArrowItem arrow && arrow.isInfinite(p_328618_, p_329054_, p_335616_); + ItemStack itemstack1 = projectile.copy(); ++ boolean infinite = projectile.getItem() instanceof ArrowItem arrow && arrow.isInfinite(projectile, weapon, shooter); for (int j = 0; j < i; j++) { -- ItemStack itemstack = useAmmo(p_329054_, j == 0 ? p_328618_ : itemstack1, p_335616_, j > 0); -+ ItemStack itemstack = useAmmo(p_329054_, j == 0 ? p_328618_ : itemstack1, p_335616_, j > 0 || infinite); +- ItemStack itemstack = useAmmo(weapon, j == 0 ? projectile : itemstack1, shooter, j > 0); ++ ItemStack itemstack = useAmmo(weapon, j == 0 ? projectile : itemstack1, shooter, j > 0 || infinite); if (!itemstack.isEmpty()) { list.add(itemstack); } -@@ -131,5 +_,9 @@ +@@ -139,5 +_,9 @@ return itemstack; } diff --git a/patches/minecraft/net/minecraft/world/item/ShearsItem.java.patch b/patches/minecraft/net/minecraft/world/item/ShearsItem.java.patch index 2705968866..b11010ee40 100644 --- a/patches/minecraft/net/minecraft/world/item/ShearsItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/ShearsItem.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/world/item/ShearsItem.java +++ b/net/minecraft/world/item/ShearsItem.java @@ -83,4 +_,34 @@ - return super.useOn(p_186371_); + return super.useOn(context); } } + diff --git a/patches/minecraft/net/minecraft/world/item/ShieldItem.java.patch b/patches/minecraft/net/minecraft/world/item/ShieldItem.java.patch deleted file mode 100644 index a031feae79..0000000000 --- a/patches/minecraft/net/minecraft/world/item/ShieldItem.java.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/net/minecraft/world/item/ShieldItem.java -+++ b/net/minecraft/world/item/ShieldItem.java -@@ -13,4 +_,10 @@ - DyeColor dyecolor = p_360971_.get(DataComponents.BASE_COLOR); - return (Component)(dyecolor != null ? Component.translatable(this.descriptionId + "." + dyecolor.getName()) : super.getName(p_360971_)); - } -+ -+ @Override -+ @Deprecated(forRemoval = true, since = "1.21.5") -+ public boolean canPerformAction(ItemStack stack, net.minecraftforge.common.ToolAction toolAction) { -+ return net.minecraftforge.common.ToolActions.DEFAULT_SHIELD_ACTIONS.contains(toolAction); -+ } - } diff --git a/patches/minecraft/net/minecraft/world/item/ShovelItem.java.patch b/patches/minecraft/net/minecraft/world/item/ShovelItem.java.patch index c4ceaa3010..faa41c8618 100644 --- a/patches/minecraft/net/minecraft/world/item/ShovelItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/ShovelItem.java.patch @@ -3,9 +3,9 @@ @@ -42,9 +_,9 @@ return InteractionResult.PASS; } else { - Player player = p_43119_.getPlayer(); + Player player = context.getPlayer(); - BlockState blockstate1 = FLATTENABLES.get(blockstate.getBlock()); -+ BlockState blockstate1 = blockstate.getToolModifiedState(p_43119_, net.minecraftforge.common.ToolActions.SHOVEL_FLATTEN, false); ++ BlockState blockstate1 = blockstate.getToolModifiedState(context, net.minecraftforge.common.ToolActions.SHOVEL_FLATTEN, false); BlockState blockstate2 = null; - if (blockstate1 != null && level.getBlockState(blockpos.above()).isAir()) { + if (blockstate1 != null && level.isEmptyBlock(blockpos.above())) { diff --git a/patches/minecraft/net/minecraft/world/item/StandingAndWallBlockItem.java.patch b/patches/minecraft/net/minecraft/world/item/StandingAndWallBlockItem.java.patch index 2141a23708..0b5d7a62c1 100644 --- a/patches/minecraft/net/minecraft/world/item/StandingAndWallBlockItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/StandingAndWallBlockItem.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/world/item/StandingAndWallBlockItem.java +++ b/net/minecraft/world/item/StandingAndWallBlockItem.java @@ -49,4 +_,9 @@ - super.registerBlocks(p_43252_, p_43253_); - p_43252_.put(this.wallBlock, p_43253_); + super.registerBlocks(map, item); + map.put(this.wallBlock, item); } + + public void removeFromBlockToItemMap(Map blockToItemMap, Item itemIn) { diff --git a/patches/minecraft/net/minecraft/world/item/alchemy/PotionBrewing.java.patch b/patches/minecraft/net/minecraft/world/item/alchemy/PotionBrewing.java.patch index 7bb31b4fa2..db618528a1 100644 --- a/patches/minecraft/net/minecraft/world/item/alchemy/PotionBrewing.java.patch +++ b/patches/minecraft/net/minecraft/world/item/alchemy/PotionBrewing.java.patch @@ -1,19 +1,21 @@ --- a/net/minecraft/world/item/alchemy/PotionBrewing.java +++ b/net/minecraft/world/item/alchemy/PotionBrewing.java -@@ -19,15 +_,35 @@ +@@ -19,17 +_,37 @@ private final List containers; private final List> potionMixes; private final List> containerMixes; + private final List recipes; - PotionBrewing(List p_331253_, List> p_333814_, List> p_332419_) { -+ this(p_331253_, p_333814_, p_332419_, null); + private PotionBrewing( + final List containers, final List> potionMixes, final List> containerMixes + ) { ++ this(containers, potionMixes, containerMixes, null); + } + -+ PotionBrewing(List p_331253_, List> p_333814_, List> p_332419_, Builder builder) { - this.containers = p_331253_; - this.potionMixes = p_333814_; - this.containerMixes = p_332419_; ++ PotionBrewing(final List containers, final List> potionMixes, final List> containerMixes, Builder builder) { + this.containers = containers; + this.potionMixes = potionMixes; + this.containerMixes = containerMixes; + var tmp = new ArrayList(); + tmp.add(new net.minecraftforge.common.brewing.VanillaBrewingRecipe(this, this::mixVanilla)); + if (builder != null) { @@ -22,50 +24,50 @@ + this.recipes = java.util.Collections.unmodifiableList(tmp); } - public boolean isIngredient(ItemStack p_43507_) { -- return this.isContainerIngredient(p_43507_) || this.isPotionIngredient(p_43507_); -+ if (p_43507_.isEmpty()) { + public boolean isIngredient(final ItemStack ingredient) { +- return this.isContainerIngredient(ingredient) || this.isPotionIngredient(ingredient); ++ if (ingredient.isEmpty()) { + return false; + } + + for (var recipe : recipes) { -+ if (recipe.isIngredient(p_43507_)) { ++ if (recipe.isIngredient(ingredient)) { + return true; + } + } + return false; } - private boolean isContainer(ItemStack p_328293_) { -@@ -71,9 +_,10 @@ + private boolean isContainer(final ItemStack input) { +@@ -73,9 +_,10 @@ } - public boolean hasMix(ItemStack p_43509_, ItemStack p_43510_) { -- return !this.isContainer(p_43509_) ? false : this.hasContainerMix(p_43509_, p_43510_) || this.hasPotionMix(p_43509_, p_43510_); -+ return !mix(p_43510_, p_43509_).isEmpty(); + public boolean hasMix(final ItemStack source, final ItemStack ingredient) { +- return !this.isContainer(source) ? false : this.hasContainerMix(source, ingredient) || this.hasPotionMix(source, ingredient); ++ return !mix(ingredient, source).isEmpty(); } + /** @deprecated Forge: use hasMix(ItemStack, ItemStack)*/ - public boolean hasContainerMix(ItemStack p_43520_, ItemStack p_43521_) { + public boolean hasContainerMix(final ItemStack source, final ItemStack ingredient) { for (PotionBrewing.Mix mix : this.containerMixes) { - if (p_43520_.is(mix.from) && mix.ingredient.test(p_43521_)) { -@@ -84,6 +_,7 @@ + if (source.is(mix.from) && mix.ingredient.test(ingredient)) { +@@ -86,6 +_,7 @@ return false; } + /** @deprecated Forge: use hasMix(ItemStack, ItemStack)*/ - public boolean hasPotionMix(ItemStack p_43525_, ItemStack p_43526_) { - Optional> optional = p_43525_.getOrDefault(DataComponents.POTION_CONTENTS, PotionContents.EMPTY).potion(); + public boolean hasPotionMix(final ItemStack source, final ItemStack ingredient) { + Optional> optional = source.getOrDefault(DataComponents.POTION_CONTENTS, PotionContents.EMPTY).potion(); if (optional.isEmpty()) { -@@ -100,6 +_,19 @@ +@@ -102,6 +_,19 @@ } - public ItemStack mix(ItemStack p_43530_, ItemStack p_43531_) { -+ if (p_43531_.isEmpty() || p_43531_.getCount() != 1) return ItemStack.EMPTY; -+ if (p_43530_.isEmpty()) return ItemStack.EMPTY; + public ItemStack mix(final ItemStack ingredient, final ItemStack source) { ++ if (source.isEmpty() || source.getCount() != 1) return ItemStack.EMPTY; ++ if (ingredient.isEmpty()) return ItemStack.EMPTY; + + for (var recipe : recipes) { -+ ItemStack output = recipe.getOutput(p_43531_, p_43530_); ++ ItemStack output = recipe.getOutput(source, ingredient); + if (!output.isEmpty()) { + return output; + } @@ -73,11 +75,11 @@ + return ItemStack.EMPTY; + } + -+ private ItemStack mixVanilla(ItemStack p_43530_, ItemStack p_43531_) { - if (p_43531_.isEmpty()) { - return p_43531_; ++ private ItemStack mixVanilla(final ItemStack ingredient, final ItemStack source) { + if (source.isEmpty()) { + return source; } else { -@@ -124,9 +_,29 @@ +@@ -126,9 +_,29 @@ } } @@ -100,22 +102,22 @@ + return this.recipes; + } + - public static PotionBrewing bootstrap(FeatureFlagSet p_329176_) { - PotionBrewing.Builder potionbrewing$builder = new PotionBrewing.Builder(p_329176_); + public static PotionBrewing bootstrap(final FeatureFlagSet enabledFeatures) { + PotionBrewing.Builder potionbrewing$builder = new PotionBrewing.Builder(enabledFeatures); addVanillaMixes(potionbrewing$builder); -+ net.minecraftforge.event.ForgeEventFactory.onBrewingRecipeRegister(potionbrewing$builder, p_329176_); ++ net.minecraftforge.event.ForgeEventFactory.onBrewingRecipeRegister(potionbrewing$builder, enabledFeatures); return potionbrewing$builder.build(); } -@@ -195,6 +_,7 @@ +@@ -197,6 +_,7 @@ private final List> potionMixes = new ArrayList<>(); private final List> containerMixes = new ArrayList<>(); private final FeatureFlagSet enabledFeatures; + private final List recipes = new ArrayList<>(); - public Builder(FeatureFlagSet p_332559_) { - this.enabledFeatures = p_332559_; -@@ -234,8 +_,13 @@ + public Builder(final FeatureFlagSet enabledFeatures) { + this.enabledFeatures = enabledFeatures; +@@ -236,8 +_,13 @@ } } diff --git a/patches/minecraft/net/minecraft/world/item/component/CustomData.java.patch b/patches/minecraft/net/minecraft/world/item/component/CustomData.java.patch new file mode 100644 index 0000000000..5653ab27e4 --- /dev/null +++ b/patches/minecraft/net/minecraft/world/item/component/CustomData.java.patch @@ -0,0 +1,13 @@ +--- a/net/minecraft/world/item/component/CustomData.java ++++ b/net/minecraft/world/item/component/CustomData.java +@@ -31,6 +_,10 @@ + return NbtUtils.compareNbt(expectedTag, this.tag, true); + } + ++ public boolean strictMatchedBy(final CompoundTag expectedTag) { ++ return expectedTag == null ? this.tag == null : expectedTag.equals(this.tag); ++ } ++ + public static void update(final DataComponentType component, final ItemStack itemStack, final Consumer consumer) { + CustomData customdata = itemStack.getOrDefault(component, EMPTY).update(consumer); + if (customdata.tag.isEmpty()) { diff --git a/patches/minecraft/net/minecraft/world/item/crafting/BannerDuplicateRecipe.java.patch b/patches/minecraft/net/minecraft/world/item/crafting/BannerDuplicateRecipe.java.patch index 2ed408a6db..738e31b1eb 100644 --- a/patches/minecraft/net/minecraft/world/item/crafting/BannerDuplicateRecipe.java.patch +++ b/patches/minecraft/net/minecraft/world/item/crafting/BannerDuplicateRecipe.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/item/crafting/BannerDuplicateRecipe.java +++ b/net/minecraft/world/item/crafting/BannerDuplicateRecipe.java -@@ -81,7 +_,7 @@ +@@ -98,7 +_,7 @@ for (int i = 0; i < nonnulllist.size(); i++) { - ItemStack itemstack = p_342084_.getItem(i); + ItemStack itemstack = input.getItem(i); if (!itemstack.isEmpty()) { -- ItemStack itemstack1 = itemstack.getItem().getCraftingRemainder(); -+ ItemStack itemstack1 = itemstack.getCraftingRemainder(); - if (!itemstack1.isEmpty()) { - nonnulllist.set(i, itemstack1); +- ItemStackTemplate itemstacktemplate = itemstack.getItem().getCraftingRemainder(); ++ ItemStackTemplate itemstacktemplate = itemstack.getCraftingRemainder(); + if (itemstacktemplate != null) { + nonnulllist.set(i, itemstacktemplate.create()); } else if (!itemstack.getOrDefault(DataComponents.BANNER_PATTERNS, BannerPatternLayers.EMPTY).layers().isEmpty()) { diff --git a/patches/minecraft/net/minecraft/world/item/crafting/BookCloningRecipe.java.patch b/patches/minecraft/net/minecraft/world/item/crafting/BookCloningRecipe.java.patch index 02ad0ced58..2eb08ed87a 100644 --- a/patches/minecraft/net/minecraft/world/item/crafting/BookCloningRecipe.java.patch +++ b/patches/minecraft/net/minecraft/world/item/crafting/BookCloningRecipe.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/item/crafting/BookCloningRecipe.java +++ b/net/minecraft/world/item/crafting/BookCloningRecipe.java -@@ -87,7 +_,7 @@ +@@ -131,7 +_,7 @@ for (int i = 0; i < nonnulllist.size(); i++) { - ItemStack itemstack = p_344901_.getItem(i); -- ItemStack itemstack1 = itemstack.getItem().getCraftingRemainder(); -+ ItemStack itemstack1 = itemstack.getCraftingRemainder(); - if (!itemstack1.isEmpty()) { - nonnulllist.set(i, itemstack1); + ItemStack itemstack = input.getItem(i); +- ItemStackTemplate itemstacktemplate = itemstack.getItem().getCraftingRemainder(); ++ ItemStackTemplate itemstacktemplate = itemstack.getCraftingRemainder(); + if (itemstacktemplate != null) { + nonnulllist.set(i, itemstacktemplate.create()); } else if (itemstack.has(DataComponents.WRITTEN_BOOK_CONTENT)) { diff --git a/patches/minecraft/net/minecraft/world/item/crafting/CraftingRecipe.java.patch b/patches/minecraft/net/minecraft/world/item/crafting/CraftingRecipe.java.patch index 48caa1052d..6a1512f8e3 100644 --- a/patches/minecraft/net/minecraft/world/item/crafting/CraftingRecipe.java.patch +++ b/patches/minecraft/net/minecraft/world/item/crafting/CraftingRecipe.java.patch @@ -1,12 +1,12 @@ --- a/net/minecraft/world/item/crafting/CraftingRecipe.java +++ b/net/minecraft/world/item/crafting/CraftingRecipe.java -@@ -23,8 +_,7 @@ - NonNullList nonnulllist = NonNullList.withSize(p_368314_.size(), ItemStack.EMPTY); +@@ -27,8 +_,7 @@ + NonNullList nonnulllist = NonNullList.withSize(input.size(), ItemStack.EMPTY); for (int i = 0; i < nonnulllist.size(); i++) { -- Item item = p_368314_.getItem(i).getItem(); -- nonnulllist.set(i, item.getCraftingRemainder()); -+ nonnulllist.set(i, p_368314_.getItem(i).getCraftingRemainder()); +- Item item = input.getItem(i).getItem(); +- ItemStackTemplate itemstacktemplate = item.getCraftingRemainder(); ++ ItemStackTemplate itemstacktemplate = input.getItem(i).getCraftingRemainder(); + nonnulllist.set(i, itemstacktemplate != null ? itemstacktemplate.create() : ItemStack.EMPTY); } - return nonnulllist; diff --git a/patches/minecraft/net/minecraft/world/item/crafting/Ingredient.java.patch b/patches/minecraft/net/minecraft/world/item/crafting/Ingredient.java.patch index 5e0c8d5860..413a9fab4e 100644 --- a/patches/minecraft/net/minecraft/world/item/crafting/Ingredient.java.patch +++ b/patches/minecraft/net/minecraft/world/item/crafting/Ingredient.java.patch @@ -1,39 +1,39 @@ --- a/net/minecraft/world/item/crafting/Ingredient.java +++ b/net/minecraft/world/item/crafting/Ingredient.java -@@ -23,18 +_,26 @@ +@@ -24,18 +_,26 @@ import net.minecraft.world.level.ItemLike; - public class Ingredient implements StackedContents.IngredientInfo>, Predicate { + public class Ingredient implements Predicate, StackedContents.IngredientInfo> { - public static final StreamCodec CONTENTS_STREAM_CODEC = ByteBufCodecs.holderSet(Registries.ITEM) + private static final StreamCodec VANILLA_CONTENTS_STREAM_CODEC = ByteBufCodecs.holderSet(Registries.ITEM) - .map(Ingredient::new, p_359816_ -> p_359816_.values); + .map(Ingredient::new, i -> i.values); - public static final StreamCodec> OPTIONAL_CONTENTS_STREAM_CODEC = ByteBufCodecs.holderSet(Registries.ITEM) + public static final StreamCodec CONTENTS_STREAM_CODEC = net.minecraftforge.common.ForgeHooks.ingredientStreamCodec(); + public static final StreamCodec> OPTIONAL_CONTENTS_STREAM_CODEC = CONTENTS_STREAM_CODEC .map( -- p_359814_ -> p_359814_.size() == 0 ? Optional.empty() : Optional.of(new Ingredient((HolderSet)p_359814_)), -- p_359815_ -> p_359815_.>map(p_359810_ -> p_359810_.values).orElse(HolderSet.direct()) +- ingredient -> ingredient.size() == 0 ? Optional.empty() : Optional.of(new Ingredient((HolderSet)ingredient)), +- ingredient -> ingredient.>map(i -> i.values).orElse(HolderSet.empty()) + ingredient -> ingredient.items().count() == 0 ? Optional.empty() : Optional.of(ingredient), + ingredient -> ingredient.orElseGet(() -> Ingredient.of()) ); public static final Codec> NON_AIR_HOLDER_SET_CODEC = HolderSetCodec.create(Registries.ITEM, Item.CODEC, false); -- public static final Codec CODEC = ExtraCodecs.nonEmptyHolderSet(NON_AIR_HOLDER_SET_CODEC).xmap(Ingredient::new, p_359811_ -> p_359811_.values); +- public static final Codec CODEC = ExtraCodecs.nonEmptyHolderSet(NON_AIR_HOLDER_SET_CODEC).xmap(Ingredient::new, i -> i.values); - private final HolderSet values; -+ private static final Codec VANILLA_CODEC = ExtraCodecs.nonEmptyHolderSet(NON_AIR_HOLDER_SET_CODEC).xmap(Ingredient::new, p_359811_ -> p_359811_.values); ++ private static final Codec VANILLA_CODEC = ExtraCodecs.nonEmptyHolderSet(NON_AIR_HOLDER_SET_CODEC).xmap(Ingredient::new, i -> i.values); + private static final com.mojang.serialization.MapCodec VANILLA_MAP_CODEC = VANILLA_CODEC.fieldOf("value"); + public static final Codec CODEC = net.minecraftforge.common.ForgeHooks.ingredientBaseCodec(VANILLA_CODEC); + protected final HolderSet values; - protected Ingredient(HolderSet p_368516_) { -+ this(p_368516_, true); + protected Ingredient(final HolderSet values) { ++ this(values, true); + } + -+ protected Ingredient(HolderSet p_368516_, boolean validate) { ++ protected Ingredient(HolderSet values, boolean validate) { + if (validate) - p_368516_.unwrap().ifRight(p_359817_ -> { - if (p_359817_.isEmpty()) { + values.unwrap().ifRight(directValues -> { + if (directValues.isEmpty()) { throw new UnsupportedOperationException("Ingredients can't be empty"); -@@ -106,5 +_,50 @@ +@@ -107,5 +_,50 @@ } else { return slotdisplay; } diff --git a/patches/minecraft/net/minecraft/world/item/crafting/RecipeManager.java.patch b/patches/minecraft/net/minecraft/world/item/crafting/RecipeManager.java.patch index 97d34f6909..dfeb371ee6 100644 --- a/patches/minecraft/net/minecraft/world/item/crafting/RecipeManager.java.patch +++ b/patches/minecraft/net/minecraft/world/item/crafting/RecipeManager.java.patch @@ -1,32 +1,33 @@ --- a/net/minecraft/world/item/crafting/RecipeManager.java +++ b/net/minecraft/world/item/crafting/RecipeManager.java -@@ -63,14 +_,21 @@ +@@ -63,15 +_,22 @@ private SelectableRecipe.SingleInputSet stonecutterRecipes = SelectableRecipe.SingleInputSet.empty(); private List allDisplays = List.of(); private Map>, List> recipeToDisplay = Map.of(); + private final net.minecraftforge.common.crafting.conditions.ICondition.IContext context; //Forge: add context + /** @deprecated Forge: use {@linkplain RecipeManager#RecipeManager(net.minecraftforge.common.crafting.conditions.ICondition.IContext) constructor with context}. */ - public RecipeManager(HolderLookup.Provider p_330459_) { -+ this(p_330459_, net.minecraftforge.common.crafting.conditions.ICondition.IContext.EMPTY); + public RecipeManager(final HolderLookup.Provider registries) { ++ this(registries, net.minecraftforge.common.crafting.conditions.ICondition.IContext.EMPTY); + } + -+ public RecipeManager(HolderLookup.Provider p_330459_, net.minecraftforge.common.crafting.conditions.ICondition.IContext context) { - this.registries = p_330459_; ++ public RecipeManager(HolderLookup.Provider registries, net.minecraftforge.common.crafting.conditions.ICondition.IContext context) { + this.registries = registries; + this.context = context; } - protected RecipeMap prepare(ResourceManager p_368640_, ProfilerFiller p_361102_) { + protected RecipeMap prepare(final ResourceManager manager, final ProfilerFiller profiler) { SortedMap> sortedmap = new TreeMap<>(); -- SimpleJsonResourceReloadListener.scanDirectory(p_368640_, RECIPE_LISTER, this.registries.createSerializationContext(JsonOps.INSTANCE), Recipe.CODEC, sortedmap); -+ SimpleJsonResourceReloadListener.scanDirectory(p_368640_, RECIPE_LISTER, this.context.wrap(this.registries.createSerializationContext(JsonOps.INSTANCE)), Recipe.CODEC, sortedmap); + SimpleJsonResourceReloadListener.scanDirectory( +- manager, RECIPE_LISTER, this.registries.createSerializationContext(JsonOps.INSTANCE), Recipe.CODEC, sortedmap ++ manager, RECIPE_LISTER, this.context.wrap(this.registries.createSerializationContext(JsonOps.INSTANCE)), Recipe.CODEC, sortedmap + ); List> list = new ArrayList<>(sortedmap.size()); - sortedmap.forEach((p_449831_, p_449832_) -> { - ResourceKey> resourcekey = ResourceKey.create(Registries.RECIPE, p_449831_); -@@ -86,6 +_,7 @@ + sortedmap.forEach((id, recipe) -> { +@@ -88,6 +_,7 @@ } - public void finalizeRecipeLoading(FeatureFlagSet p_360842_) { + public void finalizeRecipeLoading(final FeatureFlagSet enabledFlags) { + //net.minecraftforge.event.ForgeEventFactory.onTagsUpdated(this.registries, false, false); List> list = new ArrayList<>(); List list1 = RECIPE_PROPERTY_SETS.entrySet() diff --git a/patches/minecraft/net/minecraft/world/item/crafting/ShapedRecipe.java.patch b/patches/minecraft/net/minecraft/world/item/crafting/ShapedRecipe.java.patch index 50da8986b7..44956beb32 100644 --- a/patches/minecraft/net/minecraft/world/item/crafting/ShapedRecipe.java.patch +++ b/patches/minecraft/net/minecraft/world/item/crafting/ShapedRecipe.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/item/crafting/ShapedRecipe.java +++ b/net/minecraft/world/item/crafting/ShapedRecipe.java -@@ -18,7 +_,19 @@ +@@ -16,7 +_,19 @@ + import net.minecraft.world.item.crafting.display.SlotDisplay; import net.minecraft.world.level.Level; - import org.jspecify.annotations.Nullable; --public class ShapedRecipe implements CraftingRecipe { -+public class ShapedRecipe implements CraftingRecipe, net.minecraftforge.common.crafting.IShapedRecipe { +-public class ShapedRecipe extends NormalCraftingRecipe { ++public class ShapedRecipe extends NormalCraftingRecipe implements net.minecraftforge.common.crafting.IShapedRecipe { + static int MAX_WIDTH = 3; + static int MAX_HEIGHT = 3; + /** @@ -18,13 +18,13 @@ + if (MAX_WIDTH < width) MAX_WIDTH = width; + if (MAX_HEIGHT < height) MAX_HEIGHT = height; + } - final ShapedRecipePattern pattern; - final ItemStack result; - final String group; -@@ -65,6 +_,16 @@ - } + public static final MapCodec MAP_CODEC = RecordCodecBuilder.mapCodec( + i -> i.group( + Recipe.CommonInfo.MAP_CODEC.forGetter(o -> o.commonInfo), +@@ -78,6 +_,16 @@ - return this.placementInfo; + public int getHeight() { + return this.pattern.height(); + } + + @Override diff --git a/patches/minecraft/net/minecraft/world/item/crafting/ShapedRecipePattern.java.patch b/patches/minecraft/net/minecraft/world/item/crafting/ShapedRecipePattern.java.patch index d97f857523..e0868266cd 100644 --- a/patches/minecraft/net/minecraft/world/item/crafting/ShapedRecipePattern.java.patch +++ b/patches/minecraft/net/minecraft/world/item/crafting/ShapedRecipePattern.java.patch @@ -9,17 +9,17 @@ + } + public record Data(Map key, List pattern) { - private static final Codec> PATTERN_CODEC = Codec.STRING.listOf().comapFlatMap(p_311191_ -> { -- if (p_311191_.size() > 3) { + private static final Codec> PATTERN_CODEC = Codec.STRING.listOf().comapFlatMap(strings -> { +- if (strings.size() > 3) { - return DataResult.error(() -> "Invalid pattern: too many rows, 3 is maximum"); -+ if (p_311191_.size() > ShapedRecipe.MAX_HEIGHT) { ++ if (strings.size() > ShapedRecipe.MAX_HEIGHT) { + return DataResult.error(() -> "Invalid pattern: too many rows, " + ShapedRecipe.MAX_HEIGHT + " is maximum"); - } else if (p_311191_.isEmpty()) { + } else if (strings.isEmpty()) { return DataResult.error(() -> "Invalid pattern: empty pattern not allowed"); } else { - int i = p_311191_.getFirst().length(); + int i = strings.getFirst().length(); - for (String s : p_311191_) { + for (String s : strings) { - if (s.length() > 3) { - return DataResult.error(() -> "Invalid pattern: too many columns, 3 is maximum"); + if (s.length() > ShapedRecipe.MAX_HEIGHT) { diff --git a/patches/minecraft/net/minecraft/world/item/crafting/ShapelessRecipe.java.patch b/patches/minecraft/net/minecraft/world/item/crafting/ShapelessRecipe.java.patch index 8eb9db1949..b9c2ceef46 100644 --- a/patches/minecraft/net/minecraft/world/item/crafting/ShapelessRecipe.java.patch +++ b/patches/minecraft/net/minecraft/world/item/crafting/ShapelessRecipe.java.patch @@ -1,42 +1,43 @@ --- a/net/minecraft/world/item/crafting/ShapelessRecipe.java +++ b/net/minecraft/world/item/crafting/ShapelessRecipe.java -@@ -23,12 +_,14 @@ - final ItemStack result; - final List ingredients; - private @Nullable PlacementInfo placementInfo; +@@ -21,7 +_,7 @@ + Recipe.CommonInfo.MAP_CODEC.forGetter(o -> o.commonInfo), + CraftingRecipe.CraftingBookInfo.MAP_CODEC.forGetter(o -> o.bookInfo), + ItemStackTemplate.CODEC.fieldOf("result").forGetter(o -> o.result), +- Ingredient.CODEC.listOf(1, 9).fieldOf("ingredients").forGetter(o -> o.ingredients) ++ Ingredient.CODEC.listOf(/*1, 9 Forge: Make this usable for larger crafting windows*/).fieldOf("ingredients").forGetter(o -> o.ingredients) + ) + .apply(i, ShapelessRecipe::new) + ); +@@ -39,6 +_,7 @@ + public static final RecipeSerializer SERIALIZER = new RecipeSerializer<>(MAP_CODEC, STREAM_CODEC); + private final ItemStackTemplate result; + private final List ingredients; + private final boolean isSimple; - public ShapelessRecipe(String p_249640_, CraftingBookCategory p_249390_, ItemStack p_252071_, List p_365863_) { - this.group = p_249640_; - this.category = p_249390_; - this.result = p_252071_; - this.ingredients = p_365863_; + public ShapelessRecipe( + final Recipe.CommonInfo commonInfo, final CraftingRecipe.CraftingBookInfo bookInfo, final ItemStackTemplate result, final List ingredients +@@ -46,6 +_,7 @@ + super(commonInfo, bookInfo); + this.result = result; + this.ingredients = ingredients; + this.isSimple = this.ingredients.stream().allMatch(Ingredient::isSimple); } @Override -@@ -58,10 +_,12 @@ - public boolean matches(CraftingInput p_345423_, Level p_44263_) { - if (p_345423_.ingredientCount() != this.ingredients.size()) { +@@ -61,10 +_,12 @@ + public boolean matches(final CraftingInput input, final Level level) { + if (input.ingredientCount() != this.ingredients.size()) { return false; -+ } else if (p_345423_.size() == 1 && this.ingredients.size() == 1) { -+ return this.ingredients.getFirst().test(p_345423_.getItem(0)); ++ } else if (input.size() == 1 && this.ingredients.size() == 1) { ++ return this.ingredients.getFirst().test(input.getItem(0)); + } else if (!isSimple) { -+ return net.minecraftforge.common.util.RecipeMatcher.findMatches(p_345423_.items(), this.ingredients) != null; ++ return net.minecraftforge.common.util.RecipeMatcher.findMatches(input.items(), this.ingredients) != null; } else { -- return p_345423_.size() == 1 && this.ingredients.size() == 1 -- ? this.ingredients.getFirst().test(p_345423_.getItem(0)) -- : p_345423_.stackedContents().canCraft(this, null); -+ return p_345423_.stackedContents().canCraft(this, null); +- return input.size() == 1 && this.ingredients.size() == 1 +- ? this.ingredients.getFirst().test(input.getItem(0)) +- : input.stackedContents().canCraft(this, null); ++ return input.stackedContents().canCraft(this, null); } } -@@ -86,7 +_,7 @@ - Codec.STRING.optionalFieldOf("group", "").forGetter(p_299460_ -> p_299460_.group), - CraftingBookCategory.CODEC.fieldOf("category").orElse(CraftingBookCategory.MISC).forGetter(p_297437_ -> p_297437_.category), - ItemStack.STRICT_CODEC.fieldOf("result").forGetter(p_300770_ -> p_300770_.result), -- Ingredient.CODEC.listOf(1, 9).fieldOf("ingredients").forGetter(p_359857_ -> p_359857_.ingredients) -+ Ingredient.CODEC.listOf(/*1, 9 Forge: Make this usable for larger crafting windows*/).fieldOf("ingredients").forGetter(p_359857_ -> p_359857_.ingredients) - ) - .apply(p_359856_, ShapelessRecipe::new) - ); diff --git a/patches/minecraft/net/minecraft/world/item/enchantment/EnchantmentHelper.java.patch b/patches/minecraft/net/minecraft/world/item/enchantment/EnchantmentHelper.java.patch index 75acf09a5e..c6a9267b6d 100644 --- a/patches/minecraft/net/minecraft/world/item/enchantment/EnchantmentHelper.java.patch +++ b/patches/minecraft/net/minecraft/world/item/enchantment/EnchantmentHelper.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/item/enchantment/EnchantmentHelper.java +++ b/net/minecraft/world/item/enchantment/EnchantmentHelper.java -@@ -582,7 +_,7 @@ - public static List getAvailableEnchantmentResults(int p_44818_, ItemStack p_44819_, Stream> p_342857_) { +@@ -612,7 +_,7 @@ + public static List getAvailableEnchantmentResults(final int value, final ItemStack itemStack, final Stream> source) { List list = Lists.newArrayList(); - boolean flag = p_44819_.is(Items.BOOK); -- p_342857_.filter(p_341799_ -> p_341799_.value().isPrimaryItem(p_44819_) || flag).forEach(p_341708_ -> { -+ p_342857_.filter(p_341799_ -> p_44819_.canApplyAtEnchantingTable(p_341799_) || flag).forEach(p_341708_ -> { - Enchantment enchantment = p_341708_.value(); + boolean flag = itemStack.is(Items.BOOK); +- source.filter(enchantment -> enchantment.value().isPrimaryItem(itemStack) || flag).forEach(holder -> { ++ source.filter(enchantment -> itemStack.canApplyAtEnchantingTable(enchantment) || flag).forEach(holder -> { + Enchantment enchantment = holder.value(); for (int i = enchantment.getMaxLevel(); i >= enchantment.getMinLevel(); i--) { diff --git a/patches/minecraft/net/minecraft/world/item/enchantment/effects/ReplaceDisk.java.patch b/patches/minecraft/net/minecraft/world/item/enchantment/effects/ReplaceDisk.java.patch index 175219cc72..f18a22f854 100644 --- a/patches/minecraft/net/minecraft/world/item/enchantment/effects/ReplaceDisk.java.patch +++ b/patches/minecraft/net/minecraft/world/item/enchantment/effects/ReplaceDisk.java.patch @@ -2,9 +2,9 @@ +++ b/net/minecraft/world/item/enchantment/effects/ReplaceDisk.java @@ -48,6 +_,7 @@ for (BlockPos blockpos1 : BlockPos.betweenClosed(blockpos.offset(-i, 0, -i), blockpos.offset(i, Math.min(j - 1, 0), i))) { - if (blockpos1.distToCenterSqr(p_342913_.x(), blockpos1.getY() + 0.5, p_342913_.z()) < Mth.square(i) - && this.predicate.map(p_343365_ -> p_343365_.test(p_343394_, blockpos1)).orElse(true) -+ && !net.minecraftforge.event.ForgeEventFactory.onBlockPlace(p_343742_, net.minecraftforge.common.util.BlockSnapshot.create(p_343394_.dimension(), p_343394_, blockpos), net.minecraft.core.Direction.UP) - && p_343394_.setBlockAndUpdate(blockpos1, this.blockState.getState(randomsource, blockpos1))) { - this.triggerGameEvent.ifPresent(p_344749_ -> p_343394_.gameEvent(p_343742_, (Holder)p_344749_, blockpos1)); + if (blockpos1.distToCenterSqr(position.x(), blockpos1.getY() + 0.5, position.z()) < Mth.square(i) + && this.predicate.map(p -> p.test(serverLevel, blockpos1)).orElse(true) ++ && !net.minecraftforge.event.ForgeEventFactory.onBlockPlace(entity, net.minecraftforge.common.util.BlockSnapshot.create(serverLevel.dimension(), serverLevel, blockpos), net.minecraft.core.Direction.UP) + && serverLevel.setBlockAndUpdate(blockpos1, this.blockState.getState(serverLevel, randomsource, blockpos1))) { + this.triggerGameEvent.ifPresent(event -> serverLevel.gameEvent(entity, (Holder)event, blockpos1)); } diff --git a/patches/minecraft/net/minecraft/world/level/BaseSpawner.java.patch b/patches/minecraft/net/minecraft/world/level/BaseSpawner.java.patch index 9c91bb9469..ddb16b6f1e 100644 --- a/patches/minecraft/net/minecraft/world/level/BaseSpawner.java.patch +++ b/patches/minecraft/net/minecraft/world/level/BaseSpawner.java.patch @@ -1,25 +1,26 @@ --- a/net/minecraft/world/level/BaseSpawner.java +++ b/net/minecraft/world/level/BaseSpawner.java -@@ -154,13 +_,15 @@ +@@ -146,14 +_,15 @@ entity.snapTo(entity.getX(), entity.getY(), entity.getZ(), randomsource.nextFloat() * 360.0F, 0.0F); if (entity instanceof Mob mob) { -- if (spawndata.getCustomSpawnRules().isEmpty() && !mob.checkSpawnRules(p_151312_, EntitySpawnReason.SPAWNER) || !mob.checkSpawnObstruction(p_151312_)) { -+ if (!net.minecraftforge.event.ForgeEventFactory.checkSpawnPositionSpawner(mob, p_151312_, EntitySpawnReason.SPAWNER, spawndata, this)) { +- if (spawndata.getCustomSpawnRules().isEmpty() && !mob.checkSpawnRules(level, EntitySpawnReason.SPAWNER) +- || !mob.checkSpawnObstruction(level)) { ++ if (!net.minecraftforge.event.ForgeEventFactory.checkSpawnPositionSpawner(mob, level, EntitySpawnReason.SPAWNER, spawndata, this)) { continue; } boolean flag1 = spawndata.getEntityToSpawn().size() == 1 && spawndata.getEntityToSpawn().getString("id").isPresent(); - if (flag1) { -- ((Mob)entity).finalizeSpawn(p_151312_, p_151312_.getCurrentDifficultyAt(entity.blockPosition()), EntitySpawnReason.SPAWNER, null); +- ((Mob)entity).finalizeSpawn(level, level.getCurrentDifficultyAt(entity.blockPosition()), EntitySpawnReason.SPAWNER, null); + // Forge: Patch in FinalizeSpawn for spawners so it may be fired unconditionally, instead of only when vanilla normally would trigger it. -+ var event = net.minecraftforge.event.ForgeEventFactory.onFinalizeSpawnSpawner(mob, p_151312_, p_151312_.getCurrentDifficultyAt(entity.blockPosition()), null, valueinput, this); ++ var event = net.minecraftforge.event.ForgeEventFactory.onFinalizeSpawnSpawner(mob, level, level.getCurrentDifficultyAt(entity.blockPosition()), null, valueinput, this); + if (event != null && flag1) { -+ mob.finalizeSpawn(p_151312_, event.getDifficulty(), EntitySpawnReason.SPAWNER, null); ++ mob.finalizeSpawn(level, event.getDifficulty(), EntitySpawnReason.SPAWNER, null); } spawndata.getEquipment().ifPresent(mob::equip); -@@ -277,5 +_,14 @@ +@@ -270,5 +_,14 @@ public double getOSpin() { return this.oSpin; diff --git a/patches/minecraft/net/minecraft/world/level/BlockGetter.java.patch b/patches/minecraft/net/minecraft/world/level/BlockGetter.java.patch index b4dbf3f4d4..b882756ced 100644 --- a/patches/minecraft/net/minecraft/world/level/BlockGetter.java.patch +++ b/patches/minecraft/net/minecraft/world/level/BlockGetter.java.patch @@ -6,15 +6,15 @@ -public interface BlockGetter extends LevelHeightAccessor { +public interface BlockGetter extends LevelHeightAccessor, net.minecraftforge.common.extensions.IForgeBlockGetter { - @Nullable BlockEntity getBlockEntity(BlockPos p_45570_); + @Nullable BlockEntity getBlockEntity(BlockPos pos); - default Optional getBlockEntity(BlockPos p_151367_, BlockEntityType p_151368_) { + default Optional getBlockEntity(final BlockPos pos, final BlockEntityType type) { @@ -34,7 +_,7 @@ - FluidState getFluidState(BlockPos p_45569_); + FluidState getFluidState(BlockPos pos); - default int getLightEmission(BlockPos p_45572_) { -- return this.getBlockState(p_45572_).getLightEmission(); -+ return this.getBlockState(p_45572_).getLightEmission(this, p_45572_); + default int getLightEmission(final BlockPos pos) { +- return this.getBlockState(pos).getLightEmission(); ++ return this.getBlockState(pos).getLightEmission(this, pos); } - default Stream getBlockStates(AABB p_45557_) { + default Stream getBlockStates(final AABB box) { diff --git a/patches/minecraft/net/minecraft/world/level/DataPackConfig.java.patch b/patches/minecraft/net/minecraft/world/level/DataPackConfig.java.patch index 9194011a4d..270fd943b1 100644 --- a/patches/minecraft/net/minecraft/world/level/DataPackConfig.java.patch +++ b/patches/minecraft/net/minecraft/world/level/DataPackConfig.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/world/level/DataPackConfig.java +++ b/net/minecraft/world/level/DataPackConfig.java -@@ -19,7 +_,7 @@ +@@ -16,7 +_,7 @@ private final List disabled; - public DataPackConfig(List p_45848_, List p_45849_) { -- this.enabled = ImmutableList.copyOf(p_45848_); -+ this.enabled = new java.util.ArrayList<>(p_45848_); - this.disabled = ImmutableList.copyOf(p_45849_); + public DataPackConfig(final List enabled, final List disabled) { +- this.enabled = ImmutableList.copyOf(enabled); ++ this.enabled = new java.util.ArrayList<>(enabled); + this.disabled = ImmutableList.copyOf(disabled); } -@@ -29,5 +_,9 @@ +@@ -26,5 +_,9 @@ public List getDisabled() { return this.disabled; diff --git a/patches/minecraft/net/minecraft/world/level/ExplosionDamageCalculator.java.patch b/patches/minecraft/net/minecraft/world/level/ExplosionDamageCalculator.java.patch index 510dce6c54..ebeaeb6226 100644 --- a/patches/minecraft/net/minecraft/world/level/ExplosionDamageCalculator.java.patch +++ b/patches/minecraft/net/minecraft/world/level/ExplosionDamageCalculator.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/level/ExplosionDamageCalculator.java +++ b/net/minecraft/world/level/ExplosionDamageCalculator.java -@@ -9,7 +_,7 @@ - - public class ExplosionDamageCalculator { - public Optional getBlockExplosionResistance(Explosion p_46099_, BlockGetter p_46100_, BlockPos p_46101_, BlockState p_46102_, FluidState p_46103_) { -- return p_46102_.isAir() && p_46103_.isEmpty() ? Optional.empty() : Optional.of(Math.max(p_46102_.getBlock().getExplosionResistance(), p_46103_.getExplosionResistance())); -+ return p_46102_.isAir() && p_46103_.isEmpty() ? Optional.empty() : Optional.of(Math.max(p_46102_.getExplosionResistance(p_46100_, p_46101_, p_46099_), p_46103_.getExplosionResistance(p_46100_, p_46101_, p_46099_))); +@@ -13,7 +_,7 @@ + ) { + return block.isAir() && fluid.isEmpty() + ? Optional.empty() +- : Optional.of(Math.max(block.getBlock().getExplosionResistance(), fluid.getExplosionResistance())); ++ : Optional.of(Math.max(block.getBlock().getExplosionResistance(block, level, pos, explosion), fluid.getExplosionResistance(level, pos, explosion))); } - public boolean shouldBlockExplode(Explosion p_46094_, BlockGetter p_46095_, BlockPos p_46096_, BlockState p_46097_, float p_46098_) { + public boolean shouldBlockExplode(final Explosion explosion, final BlockGetter level, final BlockPos pos, final BlockState state, final float power) { diff --git a/patches/minecraft/net/minecraft/world/level/Level.java.patch b/patches/minecraft/net/minecraft/world/level/Level.java.patch index c8f5a899ba..86cf72c35b 100644 --- a/patches/minecraft/net/minecraft/world/level/Level.java.patch +++ b/patches/minecraft/net/minecraft/world/level/Level.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -85,7 +_,7 @@ +@@ -90,7 +_,7 @@ import org.apache.commons.lang3.mutable.MutableBoolean; import org.jspecify.annotations.Nullable; @@ -9,7 +9,7 @@ public static final Codec> RESOURCE_KEY_CODEC = ResourceKey.codec(Registries.DIMENSION); public static final ResourceKey OVERWORLD = ResourceKey.create(Registries.DIMENSION, Identifier.withDefaultNamespace("overworld")); public static final ResourceKey NETHER = ResourceKey.create(Registries.DIMENSION, Identifier.withDefaultNamespace("the_nether")); -@@ -125,6 +_,11 @@ +@@ -130,6 +_,11 @@ private final DamageSources damageSources; private final PalettedContainerFactory palettedContainerFactory; private long subTickCount; @@ -20,35 +20,36 @@ + private final java.util.ArrayList pendingFreshBlockEntities = new java.util.ArrayList<>(); protected Level( - WritableLevelData p_270739_, -@@ -136,6 +_,7 @@ - long p_270248_, - int p_270466_ - ) { -+ super(); - this.levelData = p_270739_; - this.dimensionTypeRegistration = p_270240_; - this.dimension = p_270683_; -@@ -217,11 +_,35 @@ + final WritableLevelData levelData, +@@ -214,7 +_,7 @@ + } + + @Override +- public boolean setBlock(final BlockPos pos, final BlockState blockState, @Block.UpdateFlags final int updateFlags, final int updateLimit) { ++ public boolean setBlock(BlockPos pos, final BlockState blockState, @Block.UpdateFlags final int updateFlags, final int updateLimit) { + if (!this.isInValidBounds(pos)) { + return false; + } else if (!this.isClientSide() && this.isDebug()) { +@@ -222,11 +_,35 @@ } else { - LevelChunk levelchunk = this.getChunkAt(p_46605_); - Block block = p_46606_.getBlock(); + LevelChunk levelchunk = this.getChunkAt(pos); + Block block = blockState.getBlock(); + -+ p_46605_ = p_46605_.immutable(); // Forge - prevent mutable BlockPos leaks ++ pos = pos.immutable(); // Forge - prevent mutable BlockPos leaks + net.minecraftforge.common.util.BlockSnapshot blockSnapshot = null; + if (this.captureBlockSnapshots && !this.isClientSide) { -+ blockSnapshot = net.minecraftforge.common.util.BlockSnapshot.create(this.dimension, this, p_46605_, p_46607_); ++ blockSnapshot = net.minecraftforge.common.util.BlockSnapshot.create(this.dimension, this, pos, updateFlags); + this.capturedBlockSnapshots.add(blockSnapshot); + } + - BlockState blockstate = levelchunk.setBlockState(p_46605_, p_46606_, p_46607_); + BlockState blockstate = levelchunk.setBlockState(pos, blockState, updateFlags); if (blockstate == null) { + if (blockSnapshot != null) this.capturedBlockSnapshots.remove(blockSnapshot); return false; } else { - BlockState blockstate1 = this.getBlockState(p_46605_); + BlockState blockstate1 = this.getBlockState(pos); + if (blockSnapshot == null) { // Don't notify clients or update physics while capturing blockstates -+ this.markAndNotifyBlock(p_46605_, levelchunk, blockstate, p_46606_, p_46607_, p_46608_); ++ this.markAndNotifyBlock(pos, levelchunk, blockstate, blockState, updateFlags, updateLimit); + } + + return true; @@ -57,27 +58,27 @@ + } + + // Split off from original setBlockState(BlockPos, BlockState, int, int) method in order to directly send client and physic updates -+ public void markAndNotifyBlock(BlockPos p_46605_, @Nullable LevelChunk levelchunk, BlockState blockstate, BlockState p_46606_, int p_46607_, int p_46608_) { -+ Block block = p_46606_.getBlock(); -+ BlockState blockstate1 = getBlockState(p_46605_); ++ public void markAndNotifyBlock(final BlockPos pos, final @Nullable LevelChunk levelchunk, final BlockState blockstate, final BlockState blockState, @Block.UpdateFlags final int updateFlags, final int updateLimit) { ++ Block block = blockState.getBlock(); ++ BlockState blockstate1 = getBlockState(pos); + { + { - if (blockstate1 == p_46606_) { + if (blockstate1 == blockState) { if (blockstate != blockstate1) { - this.setBlocksDirty(p_46605_, blockstate, blockstate1); -@@ -248,9 +_,8 @@ + this.setBlocksDirty(pos, blockstate, blockstate1); +@@ -253,9 +_,8 @@ } - this.updatePOIOnBlockStateChange(p_46605_, blockstate, blockstate1); -+ p_46606_.onBlockStateChange(this, p_46605_, blockstate); + this.updatePOIOnBlockStateChange(pos, blockstate, blockstate1); ++ blockState.onBlockStateChange(this, pos, blockstate); } - - return true; } } } -@@ -484,8 +_,28 @@ - (this.tickingBlockEntities ? this.pendingBlockEntityTickers : this.blockEntityTickers).add(p_151526_); +@@ -524,8 +_,27 @@ + (this.tickingBlockEntities ? this.pendingBlockEntityTickers : this.blockEntityTickers).add(ticker); } + public void addFreshBlockEntities(java.util.Collection beList) { @@ -89,7 +90,6 @@ + } + public void tickBlockEntities() { -+ + if (!this.pendingFreshBlockEntities.isEmpty()) { + this.freshBlockEntities.addAll(this.pendingFreshBlockEntities); + this.pendingFreshBlockEntities.clear(); @@ -105,84 +105,84 @@ if (!this.pendingBlockEntityTickers.isEmpty()) { this.blockEntityTickers.addAll(this.pendingBlockEntityTickers); this.pendingBlockEntityTickers.clear(); -@@ -508,12 +_,19 @@ +@@ -548,12 +_,19 @@ - public void guardEntityTick(Consumer p_46654_, T p_46655_) { + public void guardEntityTick(final Consumer tick, final T entity) { try { -+ net.minecraftforge.server.timings.TimeTracker.ENTITY_UPDATE.trackStart(p_46655_); - p_46654_.accept(p_46655_); ++ net.minecraftforge.server.timings.TimeTracker.ENTITY_UPDATE.trackStart(entity); + tick.accept(entity); } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Ticking entity"); CrashReportCategory crashreportcategory = crashreport.addCategory("Entity being ticked"); - p_46655_.fillCrashReportCategory(crashreportcategory); + entity.fillCrashReportCategory(crashreportcategory); + if (net.minecraftforge.common.ForgeConfig.SERVER.removeErroringEntities.get()) { + com.mojang.logging.LogUtils.getLogger().error("{}", crashreport.getFriendlyReport(net.minecraft.ReportType.CRASH)); -+ p_46655_.discard(); ++ entity.discard(); + } else throw new ReportedException(crashreport); + } finally { -+ net.minecraftforge.server.timings.TimeTracker.ENTITY_UPDATE.trackEnd(p_46655_); ++ net.minecraftforge.server.timings.TimeTracker.ENTITY_UPDATE.trackEnd(entity); } } -@@ -669,6 +_,7 @@ - if (this.isInValidBounds(p_46748_)) { - this.getChunkAt(p_46748_).removeBlockEntity(p_46748_); +@@ -709,6 +_,7 @@ + if (this.isInValidBounds(pos)) { + this.getChunkAt(pos).removeBlockEntity(pos); } -+ this.updateNeighbourForOutputSignal(p_46748_, getBlockState(p_46748_).getBlock()); //Notify neighbors of changes ++ this.updateNeighbourForOutputSignal(pos, getBlockState(pos).getBlock()); //Notify neighbors of changes } - public boolean isLoaded(BlockPos p_46750_) { -@@ -743,9 +_,9 @@ + public boolean isLoaded(final BlockPos pos) { +@@ -776,9 +_,9 @@ } }); - for (EnderDragonPart enderdragonpart : this.dragonParts()) { + for (var enderdragonpart : this.getPartEntities()) { - if (enderdragonpart != p_46536_ -- && enderdragonpart.parentMob != p_46536_ -+ && enderdragonpart.getParent() != p_46536_ - && p_46538_.test(enderdragonpart) - && p_46537_.intersects(enderdragonpart.getBoundingBox())) { + if (enderdragonpart != except +- && enderdragonpart.parentMob != except ++ && enderdragonpart.getParent() != except + && selector.test(enderdragonpart) + && bb.intersects(enderdragonpart.getBoundingBox())) { list.add(enderdragonpart); -@@ -778,8 +_,8 @@ +@@ -813,8 +_,8 @@ } } -- if (p_261454_ instanceof EnderDragon enderdragon) { +- if (e instanceof EnderDragon enderdragon) { - for (EnderDragonPart enderdragonpart : enderdragon.getSubEntities()) { -+ if (p_261454_ .isMultipartEntity()) { -+ for (var enderdragonpart : p_261454_.getParts()) { - T t = p_261885_.tryCast(enderdragonpart); - if (t != null && p_261688_.test(t)) { - p_262071_.add(t); -@@ -952,17 +_,16 @@ ++ if (e.isMultipartEntity()) { ++ for (var enderdragonpart : e.getParts()) { + T t = type.tryCast(enderdragonpart); + if (t != null && selector.test(t)) { + output.add(t); +@@ -1000,17 +_,16 @@ public abstract Scoreboard getScoreboard(); - public void updateNeighbourForOutputSignal(BlockPos p_46718_, Block p_46719_) { + public void updateNeighbourForOutputSignal(final BlockPos pos, final Block changedBlock) { - for (Direction direction : Direction.Plane.HORIZONTAL) { + for (Direction direction : Direction.getUpdateOrder()) { - BlockPos blockpos = p_46718_.relative(direction); + BlockPos blockpos = pos.relative(direction); if (this.hasChunkAt(blockpos)) { BlockState blockstate = this.getBlockState(blockpos); - if (blockstate.is(Blocks.COMPARATOR)) { -- this.neighborChanged(blockstate, blockpos, p_46719_, null, false); +- this.neighborChanged(blockstate, blockpos, changedBlock, null, false); - } else if (blockstate.isRedstoneConductor(this, blockpos)) { -+ blockstate.onNeighborChange(this, blockpos, p_46718_); ++ blockstate.onNeighborChange(this, blockpos, pos); + if (blockstate.isRedstoneConductor(this, blockpos)) { blockpos = blockpos.relative(direction); blockstate = this.getBlockState(blockpos); - if (blockstate.is(Blocks.COMPARATOR)) { -- this.neighborChanged(blockstate, blockpos, p_46719_, null, false); +- this.neighborChanged(blockstate, blockpos, changedBlock, null, false); + if (blockstate.getWeakChanges(this, blockpos)) { -+ blockstate.onNeighborChange(this, blockpos, p_46718_); ++ blockstate.onNeighborChange(this, blockpos, pos); } } } -@@ -1047,6 +_,20 @@ +@@ -1095,6 +_,20 @@ } - public abstract EnvironmentAttributeSystem environmentAttributes(); + public abstract ClockManager clockManager(); + + private double maxEntityRadius = 2.0D; + @@ -198,5 +198,5 @@ + return maxEntityRadius; + } - public abstract PotionBrewing potionBrewing(); + public abstract EnvironmentAttributeSystem environmentAttributes(); diff --git a/patches/minecraft/net/minecraft/world/level/LevelReader.java.patch b/patches/minecraft/net/minecraft/world/level/LevelReader.java.patch index 25d7ad83d8..bdbe1d6a2b 100644 --- a/patches/minecraft/net/minecraft/world/level/LevelReader.java.patch +++ b/patches/minecraft/net/minecraft/world/level/LevelReader.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/LevelReader.java +++ b/net/minecraft/world/level/LevelReader.java -@@ -176,6 +_,11 @@ +@@ -175,6 +_,11 @@ } @Deprecated @@ -9,6 +9,6 @@ + } + + @Deprecated - default boolean hasChunkAt(int p_151578_, int p_151579_) { - return this.hasChunk(SectionPos.blockToSectionCoord(p_151578_), SectionPos.blockToSectionCoord(p_151579_)); + default boolean hasChunkAt(final int blockX, final int blockZ) { + return this.hasChunk(SectionPos.blockToSectionCoord(blockX), SectionPos.blockToSectionCoord(blockZ)); } diff --git a/patches/minecraft/net/minecraft/world/level/LevelSettings.java.patch b/patches/minecraft/net/minecraft/world/level/LevelSettings.java.patch index 12bcc24c8d..0b313df067 100644 --- a/patches/minecraft/net/minecraft/world/level/LevelSettings.java.patch +++ b/patches/minecraft/net/minecraft/world/level/LevelSettings.java.patch @@ -1,73 +1,67 @@ --- a/net/minecraft/world/level/LevelSettings.java +++ b/net/minecraft/world/level/LevelSettings.java -@@ -15,9 +_,16 @@ - private final boolean allowCommands; - private final GameRules gameRules; - private final WorldDataConfiguration dataConfiguration; -- -- public LevelSettings( -- String p_250485_, GameType p_250207_, boolean p_251631_, Difficulty p_252122_, boolean p_248961_, GameRules p_457827_, WorldDataConfiguration p_249797_ -+ private final com.mojang.serialization.Lifecycle lifecycle; -+ -+ public LevelSettings( -+ String p_250485_, GameType p_250207_, boolean p_251631_, Difficulty p_252122_, boolean p_248961_, GameRules p_248536_, WorldDataConfiguration p_249797_ -+ ) { -+ this(p_250485_, p_250207_, p_251631_, p_252122_, p_248961_, p_248536_, p_249797_, com.mojang.serialization.Lifecycle.stable()); +@@ -7,8 +_,12 @@ + import net.minecraft.world.Difficulty; + + public record LevelSettings( +- String levelName, GameType gameType, LevelSettings.DifficultySettings difficultySettings, boolean allowCommands, WorldDataConfiguration dataConfiguration ++ String levelName, GameType gameType, LevelSettings.DifficultySettings difficultySettings, boolean allowCommands, WorldDataConfiguration dataConfiguration, com.mojang.serialization.Lifecycle lifecycle + ) { ++ public LevelSettings(String levelName, GameType gameType, LevelSettings.DifficultySettings difficultySettings, boolean allowCommands, WorldDataConfiguration dataConfiguration) { ++ this(levelName, gameType, difficultySettings, allowCommands, dataConfiguration, com.mojang.serialization.Lifecycle.stable()); + } + -+ public LevelSettings( -+ String p_250485_, GameType p_250207_, boolean p_251631_, Difficulty p_252122_, boolean p_248961_, GameRules p_457827_, WorldDataConfiguration p_249797_, com.mojang.serialization.Lifecycle lifecycle - ) { - this.levelName = p_250485_; - this.gameType = p_250207_; -@@ -26,6 +_,7 @@ - this.allowCommands = p_248961_; - this.gameRules = p_457827_; - this.dataConfiguration = p_249797_; -+ this.lifecycle = lifecycle; - } - - public static LevelSettings parse(Dynamic p_46925_, WorldDataConfiguration p_251697_) { -@@ -37,7 +_,8 @@ - p_46925_.get("Difficulty").asNumber().map(p_46928_ -> Difficulty.byId(p_46928_.byteValue())).result().orElse(Difficulty.NORMAL), - p_46925_.get("allowCommands").asBoolean(gametype == GameType.CREATIVE), - GameRules.codec(p_251697_.enabledFeatures()).parse(p_46925_.get("game_rules").orElseEmptyMap()).resultOrPartial(LOGGER::warn).orElseThrow(), -- p_251697_ -+ p_251697_, -+ net.minecraftforge.common.ForgeHooks.parseLifecycle(p_46925_.get("forgeLifecycle").asString("stable")) + public static LevelSettings parse(final Dynamic input, final WorldDataConfiguration loadConfig) { + GameType gametype = GameType.byId(input.get("GameType").asInt(0)); + return new LevelSettings( +@@ -16,12 +_,13 @@ + gametype, + input.get("difficulty_settings").read(LevelSettings.DifficultySettings.CODEC).result().orElse(LevelSettings.DifficultySettings.DEFAULT), + input.get("allowCommands").asBoolean(gametype == GameType.CREATIVE), +- loadConfig ++ loadConfig, ++ net.minecraftforge.common.ForgeHooks.parseLifecycle(input.get("forgeLifecycle").asString("stable")) ); } -@@ -70,20 +_,28 @@ + public LevelSettings withGameType(final GameType gameType) { +- return new LevelSettings(this.levelName, gameType, this.difficultySettings, this.allowCommands, this.dataConfiguration); ++ return new LevelSettings(this.levelName, gameType, this.difficultySettings, this.allowCommands, this.dataConfiguration, this.lifecycle); } - public LevelSettings withGameType(GameType p_46923_) { -- return new LevelSettings(this.levelName, p_46923_, this.hardcore, this.difficulty, this.allowCommands, this.gameRules, this.dataConfiguration); -+ return new LevelSettings(this.levelName, p_46923_, this.hardcore, this.difficulty, this.allowCommands, this.gameRules, this.dataConfiguration, this.lifecycle); + public LevelSettings withDifficulty(final Difficulty difficulty) { +@@ -30,7 +_,8 @@ + this.gameType, + new LevelSettings.DifficultySettings(difficulty, this.difficultySettings.hardcore(), this.difficultySettings.locked()), + this.allowCommands, +- this.dataConfiguration ++ this.dataConfiguration, ++ this.lifecycle + ); } - public LevelSettings withDifficulty(Difficulty p_46919_) { -- return new LevelSettings(this.levelName, this.gameType, this.hardcore, p_46919_, this.allowCommands, this.gameRules, this.dataConfiguration); -+ return new LevelSettings(this.levelName, this.gameType, this.hardcore, p_46919_, this.allowCommands, this.gameRules, this.dataConfiguration, this.lifecycle); +@@ -40,16 +_,21 @@ + this.gameType, + new LevelSettings.DifficultySettings(this.difficultySettings.difficulty(), this.difficultySettings.hardcore(), locked), + this.allowCommands, +- this.dataConfiguration ++ this.dataConfiguration, ++ this.lifecycle + ); } - public LevelSettings withDataConfiguration(WorldDataConfiguration p_250867_) { -- return new LevelSettings(this.levelName, this.gameType, this.hardcore, this.difficulty, this.allowCommands, this.gameRules, p_250867_); -+ return new LevelSettings(this.levelName, this.gameType, this.hardcore, this.difficulty, this.allowCommands, this.gameRules, p_250867_, this.lifecycle); + public LevelSettings withDataConfiguration(final WorldDataConfiguration dataConfiguration) { +- return new LevelSettings(this.levelName, this.gameType, this.difficultySettings, this.allowCommands, dataConfiguration); ++ return new LevelSettings(this.levelName, this.gameType, this.difficultySettings, this.allowCommands, dataConfiguration, this.lifecycle); } public LevelSettings copy() { - return new LevelSettings( -- this.levelName, this.gameType, this.hardcore, this.difficulty, this.allowCommands, this.gameRules.copy(this.dataConfiguration.enabledFeatures()), this.dataConfiguration -+ this.levelName, this.gameType, this.hardcore, this.difficulty, this.allowCommands, this.gameRules.copy(this.dataConfiguration.enabledFeatures()), this.dataConfiguration, this.lifecycle - ); +- return new LevelSettings(this.levelName, this.gameType, this.difficultySettings, this.allowCommands, this.dataConfiguration); ++ return new LevelSettings(this.levelName, this.gameType, this.difficultySettings, this.allowCommands, this.dataConfiguration, this.lifecycle); + } + -+ public LevelSettings withLifecycle(com.mojang.serialization.Lifecycle lifecycle) { -+ return new LevelSettings(this.levelName, this.gameType, this.hardcore, this.difficulty, this.allowCommands, this.gameRules, this.dataConfiguration, lifecycle); -+ } -+ -+ public com.mojang.serialization.Lifecycle getLifecycle() { -+ return this.lifecycle; ++ public LevelSettings withLifecycle(final com.mojang.serialization.Lifecycle lifecycle) { ++ return new LevelSettings(this.levelName, this.gameType, this.difficultySettings, this.allowCommands, this.dataConfiguration, lifecycle); } - } + + public record DifficultySettings(Difficulty difficulty, boolean hardcore, boolean locked) { diff --git a/patches/minecraft/net/minecraft/world/level/NaturalSpawner.java.patch b/patches/minecraft/net/minecraft/world/level/NaturalSpawner.java.patch index 02120817f7..afe44eabfc 100644 --- a/patches/minecraft/net/minecraft/world/level/NaturalSpawner.java.patch +++ b/patches/minecraft/net/minecraft/world/level/NaturalSpawner.java.patch @@ -1,64 +1,63 @@ --- a/net/minecraft/world/level/NaturalSpawner.java +++ b/net/minecraft/world/level/NaturalSpawner.java -@@ -72,7 +_,7 @@ +@@ -75,7 +_,7 @@ - for (Entity entity : p_186526_) { + for (Entity entity : entities) { if (!(entity instanceof Mob mob && (mob.isPersistenceRequired() || mob.requiresCustomPersistence()))) { - MobCategory mobcategory = entity.getType().getCategory(); + MobCategory mobcategory = entity.getClassification(true); if (mobcategory != MobCategory.MISC) { BlockPos blockpos = entity.blockPosition(); - p_186527_.query(ChunkPos.asLong(blockpos), p_275163_ -> { -@@ -203,7 +_,7 @@ + chunkGetter.query( +@@ -222,7 +_,7 @@ l1++; - p_47040_.addFreshEntityWithPassengers(mob); - p_47044_.run(mob, p_47041_); + level.addFreshEntityWithPassengers(mob); + spawnCallback.run(mob, chunk); - if (j >= mob.getMaxSpawnClusterSize()) { + if (j >= net.minecraftforge.event.ForgeEventFactory.getMaxSpawnPackSize(mob)) { return; } -@@ -276,7 +_,7 @@ - private static boolean isValidPositionForMob(ServerLevel p_46992_, Mob p_46993_, double p_46994_) { - return p_46994_ > p_46993_.getType().getCategory().getDespawnDistance() * p_46993_.getType().getCategory().getDespawnDistance() && p_46993_.removeWhenFarAway(p_46994_) +@@ -299,7 +_,7 @@ + return nearestPlayerDistanceSqr > mob.getType().getCategory().getDespawnDistance() * mob.getType().getCategory().getDespawnDistance() + && mob.removeWhenFarAway(nearestPlayerDistanceSqr) ? false -- : p_46993_.checkSpawnRules(p_46992_, EntitySpawnReason.NATURAL) && p_46993_.checkSpawnObstruction(p_46992_); -+ : net.minecraftforge.event.ForgeEventFactory.checkSpawnPosition(p_46993_, p_46992_, EntitySpawnReason.NATURAL); +- : mob.checkSpawnRules(level, EntitySpawnReason.NATURAL) && mob.checkSpawnObstruction(level); ++ : net.minecraftforge.event.ForgeEventFactory.checkSpawnPosition(mob, level, EntitySpawnReason.NATURAL); } private static Optional getRandomSpawnMobAt( -@@ -307,9 +_,13 @@ - BlockPos p_220448_, - @Nullable Holder p_220449_ +@@ -335,9 +_,11 @@ + final BlockPos pos, + final @Nullable Holder biome ) { -- return isInNetherFortressBounds(p_220448_, p_220444_, p_220447_, p_220445_) +- return isInNetherFortressBounds(pos, level, mobCategory, structureManager) - ? NetherFortressStructure.FORTRESS_ENEMIES -- : p_220446_.getMobsAt(p_220449_ != null ? p_220449_ : p_220444_.getBiome(p_220448_), p_220445_, p_220447_, p_220448_); -+ // Forge: Add in potential spawns, and replace hardcoded nether fortress mob list -+ return net.minecraftforge.event.ForgeEventFactory.getPotentialSpawns(p_220444_, p_220447_, p_220448_, -+ isInNetherFortressBounds(p_220448_, p_220444_, p_220447_, p_220445_) -+ ? p_220445_.registryAccess().lookupOrThrow(Registries.STRUCTURE).getOrThrow(BuiltinStructures.FORTRESS) -+ .get().spawnOverrides().get(MobCategory.MONSTER).spawns() -+ : p_220446_.getMobsAt(p_220449_ != null ? p_220449_ : p_220444_.getBiome(p_220448_), p_220445_, p_220447_, p_220448_) +- : generator.getMobsAt(biome != null ? biome : level.getBiome(pos), structureManager, mobCategory, pos); ++ return net.minecraftforge.event.ForgeEventFactory.getPotentialSpawns(level, mobCategory, pos, ++ isInNetherFortressBounds(pos, level, mobCategory, structureManager) ++ ? structureManager.registryAccess().lookupOrThrow(Registries.STRUCTURE).getOrThrow(BuiltinStructures.FORTRESS).get().spawnOverrides().get(MobCategory.MONSTER).spawns() ++ : generator.getMobsAt(biome != null ? biome : level.getBiome(pos), structureManager, mobCategory, pos) + ); } - public static boolean isInNetherFortressBounds(BlockPos p_220456_, ServerLevel p_220457_, MobCategory p_220458_, StructureManager p_220459_) { -@@ -395,7 +_,7 @@ - } + public static boolean isInNetherFortressBounds( +@@ -430,8 +_,7 @@ - entity.snapTo(d0, blockpos.getY(), d1, p_220454_.nextFloat() * 360.0F, 0.0F); -- if (entity instanceof Mob mob && mob.checkSpawnRules(p_220451_, EntitySpawnReason.CHUNK_GENERATION) && mob.checkSpawnObstruction(p_220451_)) { -+ if (entity instanceof Mob mob && net.minecraftforge.event.ForgeEventFactory.checkSpawnPosition(mob, p_220451_, EntitySpawnReason.CHUNK_GENERATION)) { + entity.snapTo(d0, blockpos.getY(), d1, random.nextFloat() * 360.0F, 0.0F); + if (entity instanceof Mob mob +- && mob.checkSpawnRules(level, EntitySpawnReason.CHUNK_GENERATION) +- && mob.checkSpawnObstruction(level)) { ++ && net.minecraftforge.event.ForgeEventFactory.checkSpawnPosition(mob, level, EntitySpawnReason.CHUNK_GENERATION)) { spawngroupdata = mob.finalizeSpawn( - p_220451_, p_220451_.getCurrentDifficultyAt(mob.blockPosition()), EntitySpawnReason.CHUNK_GENERATION, spawngroupdata + level, level.getCurrentDifficultyAt(mob.blockPosition()), EntitySpawnReason.CHUNK_GENERATION, spawngroupdata ); -@@ -499,7 +_,7 @@ +@@ -542,7 +_,7 @@ } this.spawnPotential.addCharge(blockpos, d0); - MobCategory mobcategory = entitytype.getCategory(); -+ MobCategory mobcategory = p_47132_.getClassification(true); ++ MobCategory mobcategory = mob.getClassification(true); this.mobCategoryCounts.addTo(mobcategory, 1); - this.localMobCapCalculator.addMob(new ChunkPos(blockpos), mobcategory); + this.localMobCapCalculator.addMob(ChunkPos.containing(blockpos), mobcategory); } diff --git a/patches/minecraft/net/minecraft/world/level/ServerExplosion.java.patch b/patches/minecraft/net/minecraft/world/level/ServerExplosion.java.patch index 1c584b034e..a26d1b7f6a 100644 --- a/patches/minecraft/net/minecraft/world/level/ServerExplosion.java.patch +++ b/patches/minecraft/net/minecraft/world/level/ServerExplosion.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/ServerExplosion.java +++ b/net/minecraft/world/level/ServerExplosion.java -@@ -169,7 +_,7 @@ +@@ -167,7 +_,7 @@ return new ObjectArrayList<>(set); } @@ -9,7 +9,7 @@ if (!(this.radius < 1.0E-5F)) { float f = this.radius * 2.0F; int i = Mth.floor(this.center.x - f - 1.0); -@@ -179,7 +_,9 @@ +@@ -177,7 +_,9 @@ int i1 = Mth.floor(this.center.z - f - 1.0); int j1 = Mth.floor(this.center.z + f + 1.0); @@ -20,7 +20,7 @@ if (!entity.ignoreExplosion(this)) { double d0 = Math.sqrt(entity.distanceToSqr(this.center)) / f; if (!(d0 > 1.0)) { -@@ -235,7 +_,7 @@ +@@ -233,7 +_,7 @@ public int explode() { this.level.gameEvent(this.source, GameEvent.EXPLODE, this.center); List list = this.calculateExplodedPositions(); diff --git a/patches/minecraft/net/minecraft/world/level/SignalGetter.java.patch b/patches/minecraft/net/minecraft/world/level/SignalGetter.java.patch index 610631297d..4e4b9d6ea4 100644 --- a/patches/minecraft/net/minecraft/world/level/SignalGetter.java.patch +++ b/patches/minecraft/net/minecraft/world/level/SignalGetter.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/level/SignalGetter.java +++ b/net/minecraft/world/level/SignalGetter.java @@ -65,7 +_,7 @@ - default int getSignal(BlockPos p_277961_, Direction p_277351_) { - BlockState blockstate = this.getBlockState(p_277961_); - int i = blockstate.getSignal(this, p_277961_, p_277351_); -- return blockstate.isRedstoneConductor(this, p_277961_) ? Math.max(i, this.getDirectSignalTo(p_277961_)) : i; -+ return blockstate.shouldCheckWeakPower(this, p_277961_, p_277351_) ? Math.max(i, this.getDirectSignalTo(p_277961_)) : i; + default int getSignal(final BlockPos pos, final Direction direction) { + BlockState blockstate = this.getBlockState(pos); + int i = blockstate.getSignal(this, pos, direction); +- return blockstate.isRedstoneConductor(this, pos) ? Math.max(i, this.getDirectSignalTo(pos)) : i; ++ return blockstate.shouldCheckWeakPower(this, pos, direction) ? Math.max(i, this.getDirectSignalTo(pos)) : i; } - default boolean hasNeighborSignal(BlockPos p_277626_) { + default boolean hasNeighborSignal(final BlockPos blockPos) { diff --git a/patches/minecraft/net/minecraft/world/level/biome/Biome.java.patch b/patches/minecraft/net/minecraft/world/level/biome/Biome.java.patch index 6f7de28896..e78aab7828 100644 --- a/patches/minecraft/net/minecraft/world/level/biome/Biome.java.patch +++ b/patches/minecraft/net/minecraft/world/level/biome/Biome.java.patch @@ -1,18 +1,18 @@ --- a/net/minecraft/world/level/biome/Biome.java +++ b/net/minecraft/world/level/biome/Biome.java -@@ -36,9 +_,9 @@ +@@ -37,9 +_,9 @@ public final class Biome { public static final Codec DIRECT_CODEC = RecordCodecBuilder.create( - p_449877_ -> p_449877_.group( -- Biome.ClimateSettings.CODEC.forGetter(p_151717_ -> p_151717_.climateSettings), -+ Biome.ClimateSettings.CODEC.forGetter(p_151717_ -> p_151717_.modifiableBiomeInfo().getOriginalBiomeInfo().climateSettings()), // FORGE: Patch codec to ignore field redirect coremods. - EnvironmentAttributeMap.CODEC_ONLY_POSITIONAL.optionalFieldOf("attributes", EnvironmentAttributeMap.EMPTY).forGetter(p_449873_ -> p_449873_.attributes), -- BiomeSpecialEffects.CODEC.fieldOf("effects").forGetter(p_220550_ -> p_220550_.specialEffects), -+ BiomeSpecialEffects.CODEC.fieldOf("effects").forGetter(p_220550_ -> p_220550_.modifiableBiomeInfo().getOriginalBiomeInfo().effects()), // FORGE: Patch codec to ignore field redirect coremods. - BiomeGenerationSettings.CODEC.forGetter(p_220548_ -> p_220548_.generationSettings), - MobSpawnSettings.CODEC.forGetter(p_220546_ -> p_220546_.mobSettings) + i -> i.group( +- Biome.ClimateSettings.CODEC.forGetter(b -> b.climateSettings), ++ Biome.ClimateSettings.CODEC.forGetter(b -> b.modifiableBiomeInfo().getOriginalBiomeInfo().climateSettings()), // FORGE: Patch codec to ignore field redirect coremods. + EnvironmentAttributeMap.CODEC_ONLY_POSITIONAL.optionalFieldOf("attributes", EnvironmentAttributeMap.EMPTY).forGetter(b -> b.attributes), +- BiomeSpecialEffects.CODEC.fieldOf("effects").forGetter(b -> b.specialEffects), ++ BiomeSpecialEffects.CODEC.fieldOf("effects").forGetter(b -> b.modifiableBiomeInfo().getOriginalBiomeInfo().effects()), // FORGE: Patch codec to ignore field redirect coremods. + BiomeGenerationSettings.CODEC.forGetter(b -> b.generationSettings), + MobSpawnSettings.CODEC.forGetter(b -> b.mobSettings) ) -@@ -62,8 +_,10 @@ +@@ -67,8 +_,10 @@ @Deprecated(forRemoval = true) public static final PerlinSimplexNoise BIOME_INFO_NOISE = new PerlinSimplexNoise(new WorldgenRandom(new LegacyRandomSource(2345L)), ImmutableList.of(0)); private static final int TEMPERATURE_CACHE_SIZE = 1024; @@ -23,19 +23,19 @@ private final MobSpawnSettings mobSettings; private final EnvironmentAttributeMap attributes; private final BiomeSpecialEffects specialEffects; -@@ -76,6 +_,7 @@ +@@ -85,6 +_,7 @@ long2floatlinkedopenhashmap.defaultReturnValue(Float.NaN); return long2floatlinkedopenhashmap; }); + private final net.minecraftforge.common.world.ModifiableBiomeInfo modifiableBiomeInfo; - Biome( - Biome.ClimateSettings p_220530_, -@@ -89,10 +_,11 @@ - this.mobSettings = p_220533_; - this.attributes = p_455689_; - this.specialEffects = p_220531_; -+ this.modifiableBiomeInfo = new net.minecraftforge.common.world.ModifiableBiomeInfo(new net.minecraftforge.common.world.ModifiableBiomeInfo.BiomeInfo(p_220530_, p_220531_, p_220532_, p_220533_)); // FORGE: cache original biome info on construction so we can bypass our field read coremods where necessary + private Biome( + final Biome.ClimateSettings climateSettings, +@@ -98,10 +_,11 @@ + this.mobSettings = mobSettings; + this.attributes = attributes; + this.specialEffects = specialEffects; ++ this.modifiableBiomeInfo = new net.minecraftforge.common.world.ModifiableBiomeInfo(new net.minecraftforge.common.world.ModifiableBiomeInfo.BiomeInfo(climateSettings, specialEffects, generationSettings, mobSettings)); // FORGE: cache original biome info on construction so we can bypass our field read coremods where necessary } public MobSpawnSettings getMobSettings() { @@ -44,7 +44,7 @@ } public boolean hasPrecipitation() { -@@ -194,7 +_,7 @@ +@@ -200,7 +_,7 @@ } public BiomeGenerationSettings getGenerationSettings() { @@ -52,8 +52,8 @@ + return this.modifiableBiomeInfo().get().generationSettings(); } - public int getGrassColor(double p_47465_, double p_47466_) { -@@ -247,6 +_,31 @@ + public int getGrassColor(final double x, final double z) { +@@ -253,6 +_,31 @@ public int getWaterColor() { return this.specialEffects.waterColor(); diff --git a/patches/minecraft/net/minecraft/world/level/biome/BiomeGenerationSettings.java.patch b/patches/minecraft/net/minecraft/world/level/biome/BiomeGenerationSettings.java.patch index 3a0ab5621a..ecb47140dd 100644 --- a/patches/minecraft/net/minecraft/world/level/biome/BiomeGenerationSettings.java.patch +++ b/patches/minecraft/net/minecraft/world/level/biome/BiomeGenerationSettings.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/biome/BiomeGenerationSettings.java +++ b/net/minecraft/world/level/biome/BiomeGenerationSettings.java -@@ -99,6 +_,17 @@ +@@ -93,6 +_,17 @@ protected final List>> carvers = new ArrayList<>(); protected final List>> features = new ArrayList<>(); @@ -15,12 +15,12 @@ + return this; + } + - public BiomeGenerationSettings.PlainBuilder addFeature(GenerationStep.Decoration p_256360_, Holder p_256577_) { - return this.addFeature(p_256360_.ordinal(), p_256577_); + public BiomeGenerationSettings.PlainBuilder addFeature(final GenerationStep.Decoration step, final Holder feature) { + return this.addFeature(step.ordinal(), feature); } -@@ -107,6 +_,11 @@ - this.addFeatureStepsUpTo(p_256305_); - this.features.get(p_256305_).add(p_255636_); +@@ -101,6 +_,11 @@ + this.addFeatureStepsUpTo(index); + this.features.get(index).add(feature); return this; + } + @@ -29,4 +29,4 @@ + return this.features.get(stage.ordinal()); } - public BiomeGenerationSettings.PlainBuilder addCarver(Holder> p_256082_) { + public BiomeGenerationSettings.PlainBuilder addCarver(final Holder> carver) { diff --git a/patches/minecraft/net/minecraft/world/level/biome/BiomeSpecialEffects.java.patch b/patches/minecraft/net/minecraft/world/level/biome/BiomeSpecialEffects.java.patch index 4dd164fe4d..2823eb2266 100644 --- a/patches/minecraft/net/minecraft/world/level/biome/BiomeSpecialEffects.java.patch +++ b/patches/minecraft/net/minecraft/world/level/biome/BiomeSpecialEffects.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/world/level/biome/BiomeSpecialEffects.java +++ b/net/minecraft/world/level/biome/BiomeSpecialEffects.java -@@ -24,6 +_,10 @@ - .apply(p_449881_, BiomeSpecialEffects::new) +@@ -29,6 +_,10 @@ + .apply(i, BiomeSpecialEffects::new) ); + public net.minecraftforge.common.world.BiomeSpecialEffectsBuilder copy() { @@ -11,7 +11,7 @@ public static class Builder { protected OptionalInt waterColor = OptionalInt.empty(); protected Optional foliageColorOverride = Optional.empty(); -@@ -31,6 +_,10 @@ +@@ -36,6 +_,10 @@ protected Optional grassColorOverride = Optional.empty(); protected BiomeSpecialEffects.GrassColorModifier grassColorModifier = BiomeSpecialEffects.GrassColorModifier.NONE; @@ -19,10 +19,10 @@ + return net.minecraftforge.common.world.BiomeSpecialEffectsBuilder.create(); + } + - public BiomeSpecialEffects.Builder waterColor(int p_48035_) { - this.waterColor = OptionalInt.of(p_48035_); + public BiomeSpecialEffects.Builder waterColor(final int waterColor) { + this.waterColor = OptionalInt.of(waterColor); return this; -@@ -67,7 +_,7 @@ +@@ -72,7 +_,7 @@ } } @@ -30,28 +30,27 @@ + public static enum GrassColorModifier implements StringRepresentable, net.minecraftforge.common.IExtensibleEnum { NONE("none") { @Override - public int modifyColor(double p_48081_, double p_48082_, int p_48083_) { -@@ -89,11 +_,16 @@ + public int modifyColor(final double x, final double z, final int baseColor) { +@@ -94,9 +_,16 @@ }; private final String name; -- public static final Codec CODEC = StringRepresentable.fromEnum( -- BiomeSpecialEffects.GrassColorModifier::values +- public static final Codec CODEC = StringRepresentable.fromEnum(BiomeSpecialEffects.GrassColorModifier::values); + public static final Codec CODEC = net.minecraftforge.common.IExtensibleEnum.createCodecForExtensibleEnum( + BiomeSpecialEffects.GrassColorModifier::values, + BiomeSpecialEffects.GrassColorModifier::byName - ); ++ ); + private static final java.util.Map BY_NAME = java.util.Arrays.stream(values()).collect(java.util.stream.Collectors.toMap(BiomeSpecialEffects.GrassColorModifier::getName, grassColorModifier -> grassColorModifier)); + private ColorModifier delegate; -- public abstract int modifyColor(double p_48065_, double p_48066_, int p_48067_); -+ public int modifyColor(double p_48065_, double p_48066_, int p_48067_) { -+ return delegate.modifyGrassColor(p_48065_, p_48066_, p_48067_); +- public abstract int modifyColor(final double x, final double z, final int baseColor); ++ public int modifyColor(final double x, final double z, final int baseColor) { ++ return delegate.modifyGrassColor(x, z, baseColor); + } - GrassColorModifier(final String p_48058_) { - this.name = p_48058_; -@@ -106,6 +_,30 @@ + private GrassColorModifier(final String name) { + this.name = name; +@@ -109,6 +_,30 @@ @Override public String getSerializedName() { return this.name; diff --git a/patches/minecraft/net/minecraft/world/level/biome/MobSpawnSettings.java.patch b/patches/minecraft/net/minecraft/world/level/biome/MobSpawnSettings.java.patch index 8fa43b8e89..fa2f93ca8d 100644 --- a/patches/minecraft/net/minecraft/world/level/biome/MobSpawnSettings.java.patch +++ b/patches/minecraft/net/minecraft/world/level/biome/MobSpawnSettings.java.patch @@ -7,18 +7,18 @@ + private final java.util.Set typesView; + private final java.util.Set> costView; - MobSpawnSettings( - float p_196689_, Map> p_196690_, Map, MobSpawnSettings.MobSpawnCost> p_196691_ -@@ -51,6 +_,8 @@ - this.creatureGenerationProbability = p_196689_; - this.spawners = ImmutableMap.copyOf(p_196690_); - this.mobSpawnCosts = ImmutableMap.copyOf(p_196691_); + private MobSpawnSettings( + final float creatureGenerationProbability, +@@ -53,6 +_,8 @@ + this.creatureGenerationProbability = creatureGenerationProbability; + this.spawners = ImmutableMap.copyOf(spawners); + this.mobSpawnCosts = ImmutableMap.copyOf(mobSpawnCosts); + this.typesView = java.util.Collections.unmodifiableSet(this.spawners.keySet()); + this.costView = java.util.Collections.unmodifiableSet(this.mobSpawnCosts.keySet()); } - public WeightedList getMobs(MobCategory p_151799_) { -@@ -63,6 +_,14 @@ + public WeightedList getMobs(final MobCategory category) { +@@ -65,6 +_,14 @@ public float getCreatureProbability() { return this.creatureGenerationProbability; diff --git a/patches/minecraft/net/minecraft/world/level/block/AttachedStemBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/AttachedStemBlock.java.patch index dd5de85507..63995d9cd6 100644 --- a/patches/minecraft/net/minecraft/world/level/block/AttachedStemBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/AttachedStemBlock.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/level/block/AttachedStemBlock.java +++ b/net/minecraft/world/level/block/AttachedStemBlock.java -@@ -81,7 +_,7 @@ +@@ -91,7 +_,7 @@ @Override - protected boolean mayPlaceOn(BlockState p_48863_, BlockGetter p_48864_, BlockPos p_48865_) { -- return p_48863_.is(Blocks.FARMLAND); -+ return p_48863_.getBlock() instanceof net.minecraft.world.level.block.FarmBlock; + protected boolean mayPlaceOn(final BlockState state, final BlockGetter level, final BlockPos pos) { +- return state.is(this.supportBlocks); ++ return state.getBlock() instanceof FarmlandBlock; } @Override diff --git a/patches/minecraft/net/minecraft/world/level/block/BambooStalkBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/BambooStalkBlock.java.patch index e663ab770d..3332f9b5ed 100644 --- a/patches/minecraft/net/minecraft/world/level/block/BambooStalkBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/BambooStalkBlock.java.patch @@ -11,20 +11,20 @@ private static final VoxelShape SHAPE_LARGE = Block.column(10.0, 0.0, 16.0); @@ -119,10 +_,12 @@ @Override - protected void randomTick(BlockState p_261931_, ServerLevel p_261751_, BlockPos p_261616_, RandomSource p_261766_) { - if (p_261931_.getValue(STAGE) == 0) { -- if (p_261766_.nextInt(3) == 0 && p_261751_.isEmptyBlock(p_261616_.above()) && p_261751_.getRawBrightness(p_261616_.above(), 0) >= 9) { -+ boolean vanilla = p_261766_.nextInt(3) == 0; -+ if (p_261751_.isEmptyBlock(p_261616_.above()) && p_261751_.getRawBrightness(p_261616_.above(), 0) >= 9) { - int i = this.getHeightBelowUpToMax(p_261751_, p_261616_) + 1; + protected void randomTick(final BlockState state, final ServerLevel level, final BlockPos pos, final RandomSource random) { + if (state.getValue(STAGE) == 0) { +- if (random.nextInt(3) == 0 && level.isEmptyBlock(pos.above()) && level.getRawBrightness(pos.above(), 0) >= 9) { ++ boolean vanilla = random.nextInt(3) == 0; ++ if (level.isEmptyBlock(pos.above()) && level.getRawBrightness(pos.above(), 0) >= 9) { + int i = this.getHeightBelowUpToMax(level, pos) + 1; - if (i < 16) { -+ if (i < 16 && net.minecraftforge.common.ForgeHooks.onCropsGrowPre(p_261751_, p_261616_, p_261931_, vanilla)) { - this.growBamboo(p_261931_, p_261751_, p_261616_, p_261766_, i); -+ net.minecraftforge.common.ForgeHooks.onCropsGrowPost(p_261751_, p_261616_, p_261931_); ++ if (i < 16 && net.minecraftforge.common.ForgeHooks.onCropsGrowPre(level, pos, state, vanilla)) { + this.growBamboo(state, level, pos, random, i); ++ net.minecraftforge.common.ForgeHooks.onCropsGrowPost(level, pos, state); } } } -@@ -225,5 +_,11 @@ +@@ -227,5 +_,11 @@ } return i; diff --git a/patches/minecraft/net/minecraft/world/level/block/BaseFireBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/BaseFireBlock.java.patch index 045538f3cf..db922be865 100644 --- a/patches/minecraft/net/minecraft/world/level/block/BaseFireBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/BaseFireBlock.java.patch @@ -1,19 +1,19 @@ --- a/net/minecraft/world/level/block/BaseFireBlock.java +++ b/net/minecraft/world/level/block/BaseFireBlock.java -@@ -154,6 +_,7 @@ - if (!p_49282_.is(p_49279_.getBlock())) { - if (inPortalDimension(p_49280_)) { - Optional optional = PortalShape.findEmptyPortalShape(p_49280_, p_49281_, Direction.Axis.X); -+ optional = net.minecraftforge.event.ForgeEventFactory.onTrySpawnPortal(p_49280_, p_49281_, optional); +@@ -161,6 +_,7 @@ + if (!oldState.is(state.getBlock())) { + if (inPortalDimension(level)) { + Optional optional = PortalShape.findEmptyPortalShape(level, pos, Direction.Axis.X); ++ optional = net.minecraftforge.event.ForgeEventFactory.onTrySpawnPortal(level, pos, optional); if (optional.isPresent()) { - optional.get().createPortalBlocks(p_49280_); + optional.get().createPortalBlocks(level); return; -@@ -196,7 +_,7 @@ +@@ -203,7 +_,7 @@ boolean flag = false; for (Direction direction : Direction.values()) { -- if (p_49270_.getBlockState(blockpos$mutableblockpos.set(p_49271_).move(direction)).is(Blocks.OBSIDIAN)) { -+ if (p_49270_.getBlockState(blockpos$mutableblockpos.set(p_49271_).move(direction)).isPortalFrame(p_49270_, blockpos$mutableblockpos)) { +- if (level.getBlockState(blockpos$mutableblockpos.set(pos).move(direction)).is(Blocks.OBSIDIAN)) { ++ if (level.getBlockState(blockpos$mutableblockpos.set(pos).move(direction)).isPortalFrame(level, blockpos$mutableblockpos)) { flag = true; break; } diff --git a/patches/minecraft/net/minecraft/world/level/block/BaseRailBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/BaseRailBlock.java.patch index 33240a7469..d43f09eb68 100644 --- a/patches/minecraft/net/minecraft/world/level/block/BaseRailBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/BaseRailBlock.java.patch @@ -9,25 +9,25 @@ public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; private static final VoxelShape SHAPE_FLAT = Block.column(16.0, 0.0, 2.0); private static final VoxelShape SHAPE_SLOPE = Block.column(16.0, 0.0, 8.0); -@@ -79,7 +_,7 @@ +@@ -81,7 +_,7 @@ + final BlockState state, final Level level, final BlockPos pos, final Block block, final @Nullable Orientation orientation, final boolean movedByPiston + ) { + if (!level.isClientSide() && level.getBlockState(pos).is(this)) { +- RailShape railshape = state.getValue(this.getShapeProperty()); ++ RailShape railshape = getRailDirection(state, level, pos, null); + if (shouldBeRemoved(pos, level, railshape)) { + dropResources(state, level, pos); + level.removeBlock(pos, movedByPiston); +@@ -125,7 +_,7 @@ @Override - protected void neighborChanged(BlockState p_49377_, Level p_49378_, BlockPos p_49379_, Block p_49380_, @Nullable Orientation p_362860_, boolean p_49382_) { - if (!p_49378_.isClientSide() && p_49378_.getBlockState(p_49379_).is(this)) { -- RailShape railshape = p_49377_.getValue(this.getShapeProperty()); -+ RailShape railshape = getRailDirection(p_49377_, p_49378_, p_49379_, null); - if (shouldBeRemoved(p_49379_, p_49378_, railshape)) { - dropResources(p_49377_, p_49378_, p_49379_); - p_49378_.removeBlock(p_49379_, p_49382_); -@@ -123,7 +_,7 @@ - @Override - protected void affectNeighborsAfterRemoval(BlockState p_397007_, ServerLevel p_395211_, BlockPos p_393934_, boolean p_393188_) { - if (!p_393188_) { -- if (p_397007_.getValue(this.getShapeProperty()).isSlope()) { -+ if (getRailDirection(p_397007_, p_395211_, p_393934_, null).isSlope()) { - p_395211_.updateNeighborsAt(p_393934_.above(), this); + protected void affectNeighborsAfterRemoval(final BlockState state, final ServerLevel level, final BlockPos pos, final boolean movedByPiston) { + if (!movedByPiston) { +- if (state.getValue(this.getShapeProperty()).isSlope()) { ++ if (getRailDirection(state, level, pos, null).isSlope()) { + level.updateNeighborsAt(pos.above(), this); } -@@ -144,6 +_,11 @@ +@@ -146,6 +_,11 @@ return blockstate.setValue(this.getShapeProperty(), flag1 ? RailShape.EAST_WEST : RailShape.NORTH_SOUTH).setValue(WATERLOGGED, flag); } @@ -38,20 +38,20 @@ + @Deprecated public abstract Property getShapeProperty(); - protected RailShape rotate(RailShape p_409491_, Rotation p_408760_) { -@@ -299,5 +_,15 @@ + protected RailShape rotate(final RailShape shape, final Rotation rotation) { +@@ -301,5 +_,15 @@ @Override - protected FluidState getFluidState(BlockState p_152158_) { - return p_152158_.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(p_152158_); + protected FluidState getFluidState(final BlockState state) { + return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(state); + } + + @Override -+ public boolean isFlexibleRail(BlockState state, BlockGetter world, BlockPos pos) { ++ public boolean isFlexibleRail(final BlockState state, final BlockGetter level, final BlockPos pos) { + return !this.isStraight; + } + + @Override -+ public RailShape getRailDirection(BlockState state, BlockGetter world, BlockPos pos, net.minecraft.world.entity.vehicle.minecart.@Nullable AbstractMinecart cart) { ++ public RailShape getRailDirection(final BlockState state, final BlockGetter level, final BlockPos pos, final net.minecraft.world.entity.vehicle.minecart.@Nullable AbstractMinecart cart) { + return state.getValue(getShapeProperty()); } } diff --git a/patches/minecraft/net/minecraft/world/level/block/BeehiveBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/BeehiveBlock.java.patch index f8c40511f1..1d595e181a 100644 --- a/patches/minecraft/net/minecraft/world/level/block/BeehiveBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/BeehiveBlock.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/level/block/BeehiveBlock.java +++ b/net/minecraft/world/level/block/BeehiveBlock.java -@@ -146,7 +_,7 @@ +@@ -160,7 +_,7 @@ boolean flag = false; if (i >= 5) { - Item item = p_331014_.getItem(); -- if (p_329187_ instanceof ServerLevel serverlevel && p_331014_.is(Items.SHEARS)) { -+ if (p_329187_ instanceof ServerLevel serverlevel && p_331014_.canPerformAction(net.minecraftforge.common.ToolActions.SHEARS_HARVEST)) { - dropHoneycomb(serverlevel, p_331014_, p_328141_, p_329187_.getBlockEntity(p_335985_), p_336201_, p_335985_); - p_329187_.playSound(null, p_336201_.getX(), p_336201_.getY(), p_336201_.getZ(), SoundEvents.BEEHIVE_SHEAR, SoundSource.BLOCKS, 1.0F, 1.0F); - p_331014_.hurtAndBreak(1, p_336201_, p_333071_.asEquipmentSlot()); + Item item = itemStack.getItem(); +- if (level instanceof ServerLevel serverlevel && itemStack.is(Items.SHEARS)) { ++ if (level instanceof ServerLevel serverlevel && itemStack.canPerformAction(net.minecraftforge.common.ToolActions.SHEARS_HARVEST)) { + dropHoneycomb(serverlevel, itemStack, state, level.getBlockEntity(pos), player, pos); + level.playSound(null, player.getX(), player.getY(), player.getZ(), SoundEvents.BEEHIVE_SHEAR, SoundSource.BLOCKS, 1.0F, 1.0F); + itemStack.hurtAndBreak(1, player, hand.asEquipmentSlot()); diff --git a/patches/minecraft/net/minecraft/world/level/block/Block.java.patch b/patches/minecraft/net/minecraft/world/level/block/Block.java.patch index 1de3d532b1..70dbd9ad41 100644 --- a/patches/minecraft/net/minecraft/world/level/block/Block.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/Block.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/Block.java +++ b/net/minecraft/world/level/block/Block.java -@@ -74,11 +_,12 @@ +@@ -75,11 +_,12 @@ import org.jspecify.annotations.Nullable; import org.slf4j.Logger; @@ -15,65 +15,68 @@ private static final LoadingCache SHAPE_FULL_BLOCK_CACHE = CacheBuilder.newBuilder() .maximumSize(512L) .weakKeys() -@@ -245,6 +_,7 @@ +@@ -253,6 +_,7 @@ LOGGER.error("Block classes should end with Block and {} doesn't.", s); } } + initClient(); } - public static boolean isExceptionForConnection(BlockState p_152464_) { -@@ -295,12 +_,19 @@ + public static boolean isExceptionForConnection(final BlockState state) { +@@ -303,7 +_,12 @@ } } + @Deprecated // FORGE: use shouldRenderFace with level and block pos instead - public static boolean shouldRenderFace(BlockState p_152445_, BlockState p_362730_, Direction p_152448_) { -+ return shouldRenderFace(net.minecraft.world.level.EmptyBlockGetter.INSTANCE, BlockPos.ZERO, p_152445_, p_362730_, p_152448_); + public static boolean shouldRenderFace(final BlockState state, final BlockState neighborState, final Direction direction) { ++ return shouldRenderFace(net.minecraft.world.level.EmptyBlockGetter.INSTANCE, BlockPos.ZERO, state, neighborState, direction); + } + -+ public static boolean shouldRenderFace(BlockGetter level, BlockPos pos, BlockState p_152445_, BlockState p_362730_, Direction p_152448_) { - VoxelShape voxelshape = p_362730_.getFaceOcclusionShape(p_152448_.getOpposite()); ++ public static boolean shouldRenderFace(final BlockGetter level, final BlockPos pos, final BlockState state, final BlockState neighborState, final Direction direction) { + VoxelShape voxelshape = neighborState.getFaceOcclusionShape(direction.getOpposite()); if (voxelshape == Shapes.block()) { return false; - } else if (p_152445_.skipRendering(p_362730_, p_152448_)) { - return false; -+ } else if (p_152445_.supportsExternalFaceHiding() && p_362730_.hidesNeighborFace(level, pos.relative(p_152448_), p_152445_, p_152448_.getOpposite())) { -+ return false; - } else if (voxelshape == Shapes.empty()) { - return true; - } else { -@@ -388,9 +_,13 @@ - public static void dropResources( - BlockState p_49882_, Level p_49883_, BlockPos p_49884_, @Nullable BlockEntity p_49885_, @Nullable Entity p_49886_, ItemStack p_49887_ - ) { -+ dropResources(p_49882_, p_49883_, p_49884_, p_49885_, p_49886_, p_49887_, true); -+ } -+ -+ public static void dropResources(BlockState p_49882_, Level p_49883_, BlockPos p_49884_, @Nullable BlockEntity p_49885_, @Nullable Entity p_49886_, ItemStack p_49887_, boolean dropXp) { - if (p_49883_ instanceof ServerLevel) { - getDrops(p_49882_, (ServerLevel)p_49883_, p_49884_, p_49885_, p_49886_, p_49887_).forEach(p_49944_ -> popResource(p_49883_, p_49884_, p_49944_)); -- p_49882_.spawnAfterBreak((ServerLevel)p_49883_, p_49884_, p_49887_, true); -+ p_49882_.spawnAfterBreak((ServerLevel)p_49883_, p_49884_, p_49887_, dropXp); +@@ -398,17 +_,22 @@ } } -@@ -418,7 +_,7 @@ ++ public static void dropResources(final BlockState state, final Level level, final BlockPos pos, final @Nullable BlockEntity blockEntity, final @Nullable Entity breaker, final ItemStack tool) { ++ dropResources(state, level, pos, blockEntity, breaker, tool, true); ++ } ++ + public static void dropResources( + final BlockState state, + final Level level, + final BlockPos pos, + final @Nullable BlockEntity blockEntity, + final @Nullable Entity breaker, +- final ItemStack tool ++ final ItemStack tool, ++ final boolean dropXp + ) { + if (level instanceof ServerLevel serverlevel) { + getDrops(state, serverlevel, pos, blockEntity, breaker, tool).forEach(stack -> popResource(level, pos, stack)); +- state.spawnAfterBreak(serverlevel, pos, tool, true); ++ state.spawnAfterBreak(serverlevel, pos, tool, dropXp); + } } - private static void popResource(Level p_152441_, Supplier p_152442_, ItemStack p_152443_) { -- if (p_152441_ instanceof ServerLevel serverlevel && !p_152443_.isEmpty() && serverlevel.getGameRules().get(GameRules.BLOCK_DROPS)) { -+ if (p_152441_ instanceof ServerLevel serverlevel && !p_152443_.isEmpty() && serverlevel.getGameRules().get(GameRules.BLOCK_DROPS) && !p_152441_.restoringBlockSnapshots) { - ItemEntity itementity = p_152442_.get(); +@@ -438,7 +_,7 @@ + } + + private static void popResource(final Level level, final Supplier entityFactory, final ItemStack itemStack) { +- if (level instanceof ServerLevel serverlevel && !itemStack.isEmpty() && serverlevel.getGameRules().get(GameRules.BLOCK_DROPS)) { ++ if (level instanceof ServerLevel serverlevel && !itemStack.isEmpty() && serverlevel.getGameRules().get(GameRules.BLOCK_DROPS) && !level.restoringBlockSnapshots) { + ItemEntity itementity = entityFactory.get(); itementity.setDefaultPickUpDelay(); - p_152441_.addFreshEntity(itementity); -@@ -426,11 +_,12 @@ + level.addFreshEntity(itementity); +@@ -446,11 +_,12 @@ } - public void popExperience(ServerLevel p_49806_, BlockPos p_49807_, int p_49808_) { -- if (p_49806_.getGameRules().get(GameRules.BLOCK_DROPS)) { -+ if (p_49806_.getGameRules().get(GameRules.BLOCK_DROPS) && !p_49806_.restoringBlockSnapshots) { - ExperienceOrb.award(p_49806_, Vec3.atCenterOf(p_49807_), p_49808_); + public void popExperience(final ServerLevel level, final BlockPos pos, final int amount) { +- if (level.getGameRules().get(GameRules.BLOCK_DROPS)) { ++ if (level.getGameRules().get(GameRules.BLOCK_DROPS) && !level.restoringBlockSnapshots) { + ExperienceOrb.award(level, Vec3.atCenterOf(pos), amount); } } @@ -81,25 +84,25 @@ public float getExplosionResistance() { return this.explosionResistance; } -@@ -448,7 +_,8 @@ - public void playerDestroy(Level p_49827_, Player p_49828_, BlockPos p_49829_, BlockState p_49830_, @Nullable BlockEntity p_49831_, ItemStack p_49832_) { - p_49828_.awardStat(Stats.BLOCK_MINED.get(this)); - p_49828_.causeFoodExhaustion(0.005F); -- dropResources(p_49830_, p_49827_, p_49829_, p_49831_, p_49828_, p_49832_); +@@ -475,7 +_,8 @@ + ) { + player.awardStat(Stats.BLOCK_MINED.get(this)); + player.causeFoodExhaustion(0.005F); +- dropResources(state, level, pos, blockEntity, player, destroyedWith); + //Forge: Don't drop xp as part of the resources as it is handled by the patches in ServerPlayerGameMode#destroyBlock -+ dropResources(p_49830_, p_49827_, p_49829_, p_49831_, p_49828_, p_49832_, false); ++ dropResources(state, level, pos, blockEntity, player, destroyedWith, false); } - public void setPlacedBy(Level p_49847_, BlockPos p_49848_, BlockState p_49849_, @Nullable LivingEntity p_49850_, ItemStack p_49851_) { -@@ -470,6 +_,7 @@ - p_49822_.setDeltaMovement(p_49822_.getDeltaMovement().multiply(1.0, 0.0, 1.0)); + public void setPlacedBy(final Level level, final BlockPos pos, final BlockState state, final @Nullable LivingEntity by, final ItemStack itemStack) { +@@ -497,6 +_,7 @@ + entity.setDeltaMovement(entity.getDeltaMovement().multiply(1.0, 0.0, 1.0)); } + /** @deprecated Forge: use {@link net.minecraftforge.common.extensions.IForgeBlockState#getFriction(LevelReader, BlockPos, Entity)}*/ public float getFriction() { return this.friction; } -@@ -540,7 +_,7 @@ +@@ -567,7 +_,7 @@ this.item = Item.byBlock(this); } @@ -108,7 +111,7 @@ } public boolean hasDynamicShape() { -@@ -606,6 +_,79 @@ +@@ -632,6 +_,79 @@ public int hashCode() { return System.identityHashCode(this.first) * 31 + System.identityHashCode(this.second); } @@ -157,7 +160,7 @@ + } else if (net.minecraftforge.common.PlantType.FUNGUS.equals(type)) { + return state.is(BlockTags.NYLIUM) || this == Blocks.MYCELIUM || this == Blocks.SOUL_SOIL; + } else if (net.minecraftforge.common.PlantType.CROP.equals(type)) { -+ return state.is(Blocks.FARMLAND); ++ return state.is(BlockTags.GROWS_CROPS); + } else if (net.minecraftforge.common.PlantType.CAVE.equals(type)) { + return state.isFaceSturdy(world, pos, Direction.UP) && state.canOcclude(); + } else if (net.minecraftforge.common.PlantType.PLAINS.equals(type)) { diff --git a/patches/minecraft/net/minecraft/world/level/block/Blocks.java.patch b/patches/minecraft/net/minecraft/world/level/block/Blocks.java.patch index 575709c767..2ef4a20ddc 100644 --- a/patches/minecraft/net/minecraft/world/level/block/Blocks.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/Blocks.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/Blocks.java +++ b/net/minecraft/world/level/block/Blocks.java -@@ -769,7 +_,7 @@ +@@ -686,7 +_,7 @@ public static final Block RED_BED = registerBed("red_bed", DyeColor.RED); public static final Block BLACK_BED = registerBed("black_bed", DyeColor.BLACK); public static final Block POWERED_RAIL = register( @@ -9,10 +9,10 @@ ); public static final Block DETECTOR_RAIL = register( "detector_rail", DetectorRailBlock::new, BlockBehaviour.Properties.of().noCollision().strength(0.7F).sound(SoundType.METAL) -@@ -6949,14 +_,5 @@ +@@ -7218,14 +_,5 @@ - private static Block register(String p_50796_, BlockBehaviour.Properties p_362760_) { - return register(p_50796_, Block::new, p_362760_); + private static Block register(final String id, final BlockBehaviour.Properties properties) { + return register(id, Block::new, properties); - } - - static { diff --git a/patches/minecraft/net/minecraft/world/level/block/BucketPickup.java.patch b/patches/minecraft/net/minecraft/world/level/block/BucketPickup.java.patch index 343ca9a931..3a06261700 100644 --- a/patches/minecraft/net/minecraft/world/level/block/BucketPickup.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/BucketPickup.java.patch @@ -6,7 +6,7 @@ -public interface BucketPickup { +public interface BucketPickup extends net.minecraftforge.common.extensions.IForgeBucketPickup { - ItemStack pickupBlock(@Nullable LivingEntity p_391402_, LevelAccessor p_152719_, BlockPos p_152720_, BlockState p_152721_); + ItemStack pickupBlock(@Nullable LivingEntity user, LevelAccessor level, BlockPos pos, BlockState state); + /** @deprecated Forge: Use state-sensitive variant instead */ + @Deprecated diff --git a/patches/minecraft/net/minecraft/world/level/block/CactusBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/CactusBlock.java.patch index 2600b9ede9..3652b5d983 100644 --- a/patches/minecraft/net/minecraft/world/level/block/CactusBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/CactusBlock.java.patch @@ -12,39 +12,39 @@ @@ -45,6 +_,7 @@ @Override - protected void tick(BlockState p_220908_, ServerLevel p_220909_, BlockPos p_220910_, RandomSource p_220911_) { -+ if (!p_220909_.isAreaLoaded(p_220910_, 1)) return; // Forge: prevent growing cactus from loading unloaded chunks with block update - if (!p_220908_.canSurvive(p_220909_, p_220910_)) { - p_220909_.destroyBlock(p_220910_, true); + protected void tick(final BlockState state, final ServerLevel level, final BlockPos pos, final RandomSource random) { ++ if (!level.isAreaLoaded(pos, 1)) return; // Forge: prevent growing cactus from loading unloaded chunks with block update + if (!state.canSurvive(level, pos)) { + level.destroyBlock(pos, true); } @@ -63,6 +_,7 @@ } } -+ if (!net.minecraftforge.common.ForgeHooks.onCropsGrowPre(p_220914_, blockpos, p_220913_, true)) return; - if (j == 8 && this.canSurvive(this.defaultBlockState(), p_220914_, p_220915_.above())) { ++ if (!net.minecraftforge.common.ForgeHooks.onCropsGrowPre(level, pos, state, true)) return; + if (j == 8 && this.canSurvive(this.defaultBlockState(), level, pos.above())) { double d0 = i >= 3 ? 0.25 : 0.1; - if (p_220916_.nextDouble() <= d0) { + if (random.nextDouble() <= d0) { @@ -78,6 +_,7 @@ if (j < 15) { - p_220914_.setBlock(p_220915_, p_220913_.setValue(AGE, j + 1), 260); + level.setBlock(pos, state.setValue(AGE, j + 1), 260); } -+ net.minecraftforge.common.ForgeHooks.onCropsGrowPost(p_220914_, p_220915_, p_220913_); ++ net.minecraftforge.common.ForgeHooks.onCropsGrowPost(level, pos, state); } } @@ -119,7 +_,7 @@ } - BlockState blockstate1 = p_51154_.getBlockState(p_51155_.below()); -- return (blockstate1.is(Blocks.CACTUS) || blockstate1.is(BlockTags.SAND)) && !p_51154_.getBlockState(p_51155_.above()).liquid(); -+ return blockstate1.canSustainPlant(p_51154_, p_51155_, Direction.UP, this) && !p_51154_.getBlockState(p_51155_.above()).liquid(); + BlockState blockstate1 = level.getBlockState(pos.below()); +- return (blockstate1.is(this) || blockstate1.is(BlockTags.SUPPORTS_CACTUS)) && !level.getBlockState(pos.above()).liquid(); ++ return blockstate1.canSustainPlant(level, pos, Direction.UP, this) && !level.getBlockState(pos.above()).liquid(); } @Override -@@ -135,5 +_,15 @@ +@@ -142,5 +_,15 @@ @Override - protected boolean isPathfindable(BlockState p_51143_, PathComputationType p_51146_) { + protected boolean isPathfindable(final BlockState state, final PathComputationType type) { return false; + } + diff --git a/patches/minecraft/net/minecraft/world/level/block/CactusFlowerBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/CactusFlowerBlock.java.patch index d5c1e8e2b8..055b7915b4 100644 --- a/patches/minecraft/net/minecraft/world/level/block/CactusFlowerBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/CactusFlowerBlock.java.patch @@ -1,11 +1,10 @@ --- a/net/minecraft/world/level/block/CactusFlowerBlock.java +++ b/net/minecraft/world/level/block/CactusFlowerBlock.java -@@ -31,7 +_,7 @@ - protected boolean mayPlaceOn(BlockState p_395694_, BlockGetter p_391810_, BlockPos p_391352_) { - BlockState blockstate = p_391810_.getBlockState(p_391352_); - return blockstate.is(Blocks.CACTUS) -- || blockstate.is(Blocks.FARMLAND) -+ || blockstate.getBlock() instanceof net.minecraft.world.level.block.FarmBlock - || blockstate.isFaceSturdy(p_391810_, p_391352_, Direction.UP, SupportType.CENTER); +@@ -31,6 +_,6 @@ + @Override + protected boolean mayPlaceOn(final BlockState state, final BlockGetter level, final BlockPos pos) { + BlockState blockstate = level.getBlockState(pos); +- return blockstate.is(BlockTags.SUPPORT_OVERRIDE_CACTUS_FLOWER) || blockstate.isFaceSturdy(level, pos, Direction.UP, SupportType.CENTER); ++ return blockstate.is(BlockTags.SUPPORT_OVERRIDE_CACTUS_FLOWER) || blockstate.isFaceSturdy(level, pos, Direction.UP, SupportType.CENTER) || blockstate.getBlock() instanceof FarmlandBlock; } } diff --git a/patches/minecraft/net/minecraft/world/level/block/CampfireBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/CampfireBlock.java.patch index 054d255374..940ff7a907 100644 --- a/patches/minecraft/net/minecraft/world/level/block/CampfireBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/CampfireBlock.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/level/block/CampfireBlock.java +++ b/net/minecraft/world/level/block/CampfireBlock.java -@@ -262,7 +_,7 @@ +@@ -271,7 +_,7 @@ return true; } -- boolean flag = Shapes.joinIsNotEmpty(SHAPE_VIRTUAL_POST, blockstate.getCollisionShape(p_51249_, p_51250_, CollisionContext.empty()), BooleanOp.AND); -+ boolean flag = Shapes.joinIsNotEmpty(SHAPE_VIRTUAL_POST, blockstate.getCollisionShape(p_51249_, blockpos, CollisionContext.empty()), BooleanOp.AND); // FORGE: Fix MC-201374 +- boolean flag = Shapes.joinIsNotEmpty(SHAPE_VIRTUAL_POST, blockstate.getCollisionShape(level, pos, CollisionContext.empty()), BooleanOp.AND); ++ boolean flag = Shapes.joinIsNotEmpty(SHAPE_VIRTUAL_POST, blockstate.getCollisionShape(level, blockpos, CollisionContext.empty()), BooleanOp.AND); // FORGE: Fix MC-201374 if (flag) { - BlockState blockstate1 = p_51249_.getBlockState(blockpos.below()); + BlockState blockstate1 = level.getBlockState(blockpos.below()); return isLitCampfire(blockstate1); diff --git a/patches/minecraft/net/minecraft/world/level/block/ChestBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/ChestBlock.java.patch index 2b5940a586..d246058089 100644 --- a/patches/minecraft/net/minecraft/world/level/block/ChestBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/ChestBlock.java.patch @@ -1,12 +1,12 @@ --- a/net/minecraft/world/level/block/ChestBlock.java +++ b/net/minecraft/world/level/block/ChestBlock.java -@@ -371,7 +_,8 @@ +@@ -369,7 +_,8 @@ @Override - protected BlockState mirror(BlockState p_51549_, Mirror p_51550_) { -- return p_51549_.rotate(p_51550_.getRotation(p_51549_.getValue(FACING))); -+ BlockState rotated = p_51549_.rotate(p_51550_.getRotation(p_51549_.getValue(FACING))); -+ return p_51550_ == Mirror.NONE ? rotated : rotated.setValue(TYPE, rotated.getValue(TYPE).getOpposite()); // Forge: Fixed MC-134110 Structure mirroring breaking apart double chests + protected BlockState mirror(final BlockState state, final Mirror mirror) { +- return state.rotate(mirror.getRotation(state.getValue(FACING))); ++ BlockState rotated = state.rotate(mirror.getRotation(state.getValue(FACING))); ++ return mirror == Mirror.NONE ? rotated : rotated.setValue(TYPE, rotated.getValue(TYPE).getOpposite()); // Forge: Fixed MC-134110 Structure mirroring breaking apart double chests } @Override diff --git a/patches/minecraft/net/minecraft/world/level/block/ChorusFlowerBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/ChorusFlowerBlock.java.patch index a07221c1b5..d64303969e 100644 --- a/patches/minecraft/net/minecraft/world/level/block/ChorusFlowerBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/ChorusFlowerBlock.java.patch @@ -1,42 +1,19 @@ --- a/net/minecraft/world/level/block/ChorusFlowerBlock.java +++ b/net/minecraft/world/level/block/ChorusFlowerBlock.java -@@ -66,11 +_,11 @@ - BlockPos blockpos = p_220982_.above(); - if (p_220981_.isEmptyBlock(blockpos) && blockpos.getY() <= p_220981_.getMaxY()) { - int i = p_220980_.getValue(AGE); +@@ -66,7 +_,7 @@ + BlockPos blockpos = pos.above(); + if (level.isEmptyBlock(blockpos) && blockpos.getY() <= level.getMaxY()) { + int i = state.getValue(AGE); - if (i < 5) { -+ if (i < 5 && net.minecraftforge.common.ForgeHooks.onCropsGrowPre(p_220981_, blockpos, p_220980_, true)) { ++ if (i < 5 && net.minecraftforge.common.ForgeHooks.onCropsGrowPre(level, blockpos, state, true)) { boolean flag = false; boolean flag1 = false; - BlockState blockstate = p_220981_.getBlockState(p_220982_.below()); -- if (blockstate.is(Blocks.END_STONE)) { -+ if (blockstate.is(Blocks.END_STONE) || blockstate.is(net.minecraftforge.common.Tags.Blocks.CHORUS_ADDITIONALLY_GROWS_ON)) { - flag = true; - } else if (blockstate.is(this.plant)) { - int j = 1; -@@ -78,7 +_,7 @@ - for (int k = 0; k < 4; k++) { - BlockState blockstate1 = p_220981_.getBlockState(p_220982_.below(j + 1)); - if (!blockstate1.is(this.plant)) { -- if (blockstate1.is(Blocks.END_STONE)) { -+ if (blockstate1.is(Blocks.END_STONE) || blockstate1.is(net.minecraftforge.common.Tags.Blocks.CHORUS_ADDITIONALLY_GROWS_ON)) { - flag1 = true; - } - break; -@@ -122,6 +_,7 @@ + BlockState blockstate = level.getBlockState(pos.below()); +@@ -124,6 +_,7 @@ } else { - this.placeDeadFlower(p_220981_, p_220982_); + this.placeDeadFlower(level, pos); } -+ net.minecraftforge.common.ForgeHooks.onCropsGrowPost(p_220981_, p_220982_, p_220980_); ++ net.minecraftforge.common.ForgeHooks.onCropsGrowPost(level, pos, state); } } } -@@ -167,7 +_,7 @@ - @Override - protected boolean canSurvive(BlockState p_51683_, LevelReader p_51684_, BlockPos p_51685_) { - BlockState blockstate = p_51684_.getBlockState(p_51685_.below()); -- if (!blockstate.is(this.plant) && !blockstate.is(Blocks.END_STONE)) { -+ if (!blockstate.is(this.plant) && !blockstate.is(Blocks.END_STONE) && !blockstate.is(net.minecraftforge.common.Tags.Blocks.CHORUS_ADDITIONALLY_GROWS_ON)) { - if (!blockstate.isAir()) { - return false; - } else { diff --git a/patches/minecraft/net/minecraft/world/level/block/ChorusPlantBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/ChorusPlantBlock.java.patch deleted file mode 100644 index 1364279a15..0000000000 --- a/patches/minecraft/net/minecraft/world/level/block/ChorusPlantBlock.java.patch +++ /dev/null @@ -1,36 +0,0 @@ ---- a/net/minecraft/world/level/block/ChorusPlantBlock.java -+++ b/net/minecraft/world/level/block/ChorusPlantBlock.java -@@ -49,7 +_,7 @@ - BlockState blockstate4 = p_51711_.getBlockState(p_51712_.south()); - BlockState blockstate5 = p_51711_.getBlockState(p_51712_.west()); - Block block = p_312378_.getBlock(); -- return p_312378_.trySetValue(DOWN, blockstate.is(block) || blockstate.is(Blocks.CHORUS_FLOWER) || blockstate.is(Blocks.END_STONE)) -+ return p_312378_.trySetValue(DOWN, blockstate.is(block) || blockstate.is(Blocks.CHORUS_FLOWER) || blockstate.is(Blocks.END_STONE) || blockstate.is(net.minecraftforge.common.Tags.Blocks.CHORUS_ADDITIONALLY_GROWS_ON)) - .trySetValue(UP, blockstate1.is(block) || blockstate1.is(Blocks.CHORUS_FLOWER)) - .trySetValue(NORTH, blockstate2.is(block) || blockstate2.is(Blocks.CHORUS_FLOWER)) - .trySetValue(EAST, blockstate3.is(block) || blockstate3.is(Blocks.CHORUS_FLOWER)) -@@ -72,7 +_,7 @@ - p_364837_.scheduleTick(p_51732_, this, 1); - return super.updateShape(p_51728_, p_369826_, p_364837_, p_51732_, p_51729_, p_51733_, p_51730_, p_368636_); - } else { -- boolean flag = p_51730_.is(this) || p_51730_.is(Blocks.CHORUS_FLOWER) || p_51729_ == Direction.DOWN && p_51730_.is(Blocks.END_STONE); -+ boolean flag = p_51730_.is(this) || p_51730_.is(Blocks.CHORUS_FLOWER) || p_51729_ == Direction.DOWN && (p_51730_.is(Blocks.END_STONE) || p_51730_.is(net.minecraftforge.common.Tags.Blocks.CHORUS_ADDITIONALLY_GROWS_ON)); - return p_51728_.setValue(PROPERTY_BY_DIRECTION.get(p_51729_), flag); - } - } -@@ -98,13 +_,13 @@ - } - - BlockState blockstate2 = p_51725_.getBlockState(blockpos.below()); -- if (blockstate2.is(this) || blockstate2.is(Blocks.END_STONE)) { -+ if (blockstate2.is(this) || blockstate2.is(Blocks.END_STONE) || blockstate2.is(net.minecraftforge.common.Tags.Blocks.CHORUS_ADDITIONALLY_GROWS_ON)) { - return true; - } - } - } - -- return blockstate.is(this) || blockstate.is(Blocks.END_STONE); -+ return blockstate.is(this) || blockstate.is(Blocks.END_STONE) || blockstate.is(net.minecraftforge.common.Tags.Blocks.CHORUS_ADDITIONALLY_GROWS_ON); - } - - @Override diff --git a/patches/minecraft/net/minecraft/world/level/block/CocoaBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/CocoaBlock.java.patch index de814765d7..e66c11da26 100644 --- a/patches/minecraft/net/minecraft/world/level/block/CocoaBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/CocoaBlock.java.patch @@ -1,16 +1,16 @@ --- a/net/minecraft/world/level/block/CocoaBlock.java +++ b/net/minecraft/world/level/block/CocoaBlock.java -@@ -52,10 +_,11 @@ +@@ -50,10 +_,11 @@ @Override - protected void randomTick(BlockState p_221000_, ServerLevel p_221001_, BlockPos p_221002_, RandomSource p_221003_) { -- if (p_221001_.random.nextInt(5) == 0) { + protected void randomTick(final BlockState state, final ServerLevel level, final BlockPos pos, final RandomSource random) { +- if (level.getRandom().nextInt(5) == 0) { + { - int i = p_221000_.getValue(AGE); + int i = state.getValue(AGE); - if (i < 2) { -+ if (i < 2 && net.minecraftforge.common.ForgeHooks.onCropsGrowPre(p_221001_, p_221002_, p_221000_, p_221001_.random.nextInt(5) == 0)) { - p_221001_.setBlock(p_221002_, p_221000_.setValue(AGE, i + 1), 2); -+ net.minecraftforge.common.ForgeHooks.onCropsGrowPost(p_221001_, p_221002_, p_221000_); ++ if (i < 2 && net.minecraftforge.common.ForgeHooks.onCropsGrowPre(level, pos, state, level.getRandom().nextInt(5) == 0)) { + level.setBlock(pos, state.setValue(AGE, i + 1), 2); ++ net.minecraftforge.common.ForgeHooks.onCropsGrowPost(level, pos, state); } } } diff --git a/patches/minecraft/net/minecraft/world/level/block/ComparatorBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/ComparatorBlock.java.patch index c26336914c..9e6cb3e253 100644 --- a/patches/minecraft/net/minecraft/world/level/block/ComparatorBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/ComparatorBlock.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/world/level/block/ComparatorBlock.java +++ b/net/minecraft/world/level/block/ComparatorBlock.java -@@ -199,4 +_,16 @@ - protected void createBlockStateDefinition(StateDefinition.Builder p_51887_) { - p_51887_.add(FACING, MODE, POWERED); +@@ -197,4 +_,16 @@ + protected void createBlockStateDefinition(final StateDefinition.Builder builder) { + builder.add(FACING, MODE, POWERED); } + + @Override diff --git a/patches/minecraft/net/minecraft/world/level/block/ConcretePowderBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/ConcretePowderBlock.java.patch index 2d470e1600..559288e26a 100644 --- a/patches/minecraft/net/minecraft/world/level/block/ConcretePowderBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/ConcretePowderBlock.java.patch @@ -3,47 +3,47 @@ @@ -36,7 +_,7 @@ @Override - public void onLand(Level p_52068_, BlockPos p_52069_, BlockState p_52070_, BlockState p_52071_, FallingBlockEntity p_52072_) { -- if (shouldSolidify(p_52068_, p_52069_, p_52071_)) { -+ if (shouldSolidify(p_52068_, p_52069_, p_52070_, p_52071_.getFluidState())) { // Forge: Use block of falling entity instead of block at replaced position, and check if shouldSolidify with the FluidState of the replaced block - p_52068_.setBlock(p_52069_, this.concrete.defaultBlockState(), 3); + public void onLand(final Level level, final BlockPos pos, final BlockState state, final BlockState replacedBlock, final FallingBlockEntity entity) { +- if (shouldSolidify(level, pos, replacedBlock)) { ++ if (shouldSolidify(level, pos, state, replacedBlock.getFluidState())) { // Forge: Use block of falling entity instead of block at replaced position, and check if shouldSolidify with the FluidState of the replaced block + level.setBlock(pos, this.concrete.defaultBlockState(), 3); } } @@ -49,20 +_,24 @@ - return shouldSolidify(blockgetter, blockpos, blockstate) ? this.concrete.defaultBlockState() : super.getStateForPlacement(p_52063_); + return shouldSolidify(blockgetter, blockpos, blockstate) ? this.concrete.defaultBlockState() : super.getStateForPlacement(context); } -+ private static boolean shouldSolidify(BlockGetter p_52081_, BlockPos p_52082_, BlockState p_52083_, net.minecraft.world.level.material.FluidState fluidState) { -+ return p_52083_.canBeHydrated(p_52081_, p_52082_, fluidState, p_52082_) || touchesLiquid(p_52081_, p_52082_, p_52083_); ++ private static boolean shouldSolidify(final BlockGetter level, final BlockPos pos, final BlockState state, final net.minecraft.world.level.material.FluidState fluidState) { ++ return state.canBeHydrated(level, pos, fluidState, pos) || touchesLiquid(level, pos, state); + } + - private static boolean shouldSolidify(BlockGetter p_52081_, BlockPos p_52082_, BlockState p_52083_) { -- return canSolidify(p_52083_) || touchesLiquid(p_52081_, p_52082_); -+ return shouldSolidify(p_52081_, p_52082_, p_52083_, p_52081_.getFluidState(p_52082_)); + private static boolean shouldSolidify(final BlockGetter level, final BlockPos pos, final BlockState replacedBlock) { +- return canSolidify(replacedBlock) || touchesLiquid(level, pos); ++ return shouldSolidify(level, pos, replacedBlock, level.getFluidState(pos)); } -- private static boolean touchesLiquid(BlockGetter p_52065_, BlockPos p_52066_) { -+ private static boolean touchesLiquid(BlockGetter p_52065_, BlockPos p_52066_, BlockState state) { +- private static boolean touchesLiquid(final BlockGetter level, final BlockPos pos) { ++ private static boolean touchesLiquid(final BlockGetter level, BlockPos pos, BlockState state) { boolean flag = false; - BlockPos.MutableBlockPos blockpos$mutableblockpos = p_52066_.mutable(); + BlockPos.MutableBlockPos blockpos$mutableblockpos = pos.mutable(); for (Direction direction : Direction.values()) { - BlockState blockstate = p_52065_.getBlockState(blockpos$mutableblockpos); + BlockState blockstate = level.getBlockState(blockpos$mutableblockpos); - if (direction != Direction.DOWN || canSolidify(blockstate)) { -+ if (direction != Direction.DOWN || state.canBeHydrated(p_52065_, p_52066_, blockstate.getFluidState(), blockpos$mutableblockpos)) { - blockpos$mutableblockpos.setWithOffset(p_52066_, direction); - blockstate = p_52065_.getBlockState(blockpos$mutableblockpos); -- if (canSolidify(blockstate) && !blockstate.isFaceSturdy(p_52065_, p_52066_, direction.getOpposite())) { -+ if (state.canBeHydrated(p_52065_, p_52066_, blockstate.getFluidState(), blockpos$mutableblockpos) && !blockstate.isFaceSturdy(p_52065_, p_52066_, direction.getOpposite())) { ++ if (direction != Direction.DOWN || state.canBeHydrated(level, pos, blockstate.getFluidState(), blockpos$mutableblockpos)) { + blockpos$mutableblockpos.setWithOffset(pos, direction); + blockstate = level.getBlockState(blockpos$mutableblockpos); +- if (canSolidify(blockstate) && !blockstate.isFaceSturdy(level, pos, direction.getOpposite())) { ++ if (state.canBeHydrated(level, pos, blockstate.getFluidState(), blockpos$mutableblockpos) && !blockstate.isFaceSturdy(level, pos, direction.getOpposite())) { flag = true; break; } @@ -87,7 +_,7 @@ - BlockState p_52076_, - RandomSource p_369257_ + final BlockState neighbourState, + final RandomSource random ) { -- return touchesLiquid(p_361484_, p_52078_) -+ return touchesLiquid(p_361484_, p_52078_, p_52074_) +- return touchesLiquid(level, pos) ++ return touchesLiquid(level, pos, state) ? this.concrete.defaultBlockState() - : super.updateShape(p_52074_, p_361484_, p_362145_, p_52078_, p_52075_, p_52079_, p_52076_, p_369257_); + : super.updateShape(state, level, ticks, pos, directionToNeighbour, neighbourPos, neighbourState, random); } diff --git a/patches/minecraft/net/minecraft/world/level/block/CoralBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/CoralBlock.java.patch index ea6a1bed14..886c415d29 100644 --- a/patches/minecraft/net/minecraft/world/level/block/CoralBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/CoralBlock.java.patch @@ -3,12 +3,12 @@ @@ -61,9 +_,10 @@ } - protected boolean scanForWater(BlockGetter p_52135_, BlockPos p_52136_) { -+ BlockState state = p_52135_.getBlockState(p_52136_); + protected boolean scanForWater(final BlockGetter level, final BlockPos blockPos) { ++ BlockState state = level.getBlockState(blockPos); for (Direction direction : Direction.values()) { - FluidState fluidstate = p_52135_.getFluidState(p_52136_.relative(direction)); + FluidState fluidstate = level.getFluidState(blockPos.relative(direction)); - if (fluidstate.is(FluidTags.WATER)) { -+ if (state.canBeHydrated(p_52135_, p_52136_, fluidstate, p_52136_.relative(direction))) { ++ if (state.canBeHydrated(level, blockPos, fluidstate, blockPos.relative(direction))) { return true; } } diff --git a/patches/minecraft/net/minecraft/world/level/block/CrafterBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/CrafterBlock.java.patch index f3d45a8a6d..93bdc523f5 100644 --- a/patches/minecraft/net/minecraft/world/level/block/CrafterBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/CrafterBlock.java.patch @@ -1,25 +1,25 @@ --- a/net/minecraft/world/level/block/CrafterBlock.java +++ b/net/minecraft/world/level/block/CrafterBlock.java -@@ -184,12 +_,15 @@ - ServerLevel p_336186_, BlockPos p_312358_, CrafterBlockEntity p_309887_, ItemStack p_310474_, BlockState p_310667_, RecipeHolder p_329387_ +@@ -193,12 +_,15 @@ + final RecipeHolder recipe ) { - Direction direction = p_310667_.getValue(ORIENTATION).front(); -+ var itemhandler = net.minecraftforge.items.VanillaInventoryCodeHooks.getItemHandler(p_336186_, p_312358_.relative(direction), direction.getOpposite()).orElse(null); - Container container = HopperBlockEntity.getContainerAt(p_336186_, p_312358_.relative(direction)); - ItemStack itemstack = p_310474_.copy(); - if (container != null && (container instanceof CrafterBlockEntity || p_310474_.getCount() > container.getMaxStackSize(p_310474_))) { + Direction direction = blockState.getValue(ORIENTATION).front(); ++ var itemhandler = net.minecraftforge.items.VanillaInventoryCodeHooks.getItemHandler(level, pos.relative(direction), direction.getOpposite()).orElse(null); + Container container = HopperBlockEntity.getContainerAt(level, pos.relative(direction)); + ItemStack itemstack = results.copy(); + if (container != null && (container instanceof CrafterBlockEntity || results.getCount() > container.getMaxStackSize(results))) { while (!itemstack.isEmpty()) { ItemStack itemstack2 = itemstack.copyWithCount(1); - ItemStack itemstack1 = HopperBlockEntity.addItem(p_309887_, container, itemstack2, direction.getOpposite()); + ItemStack itemstack1 = HopperBlockEntity.addItem(blockEntity, container, itemstack2, direction.getOpposite()); + if (itemhandler != null && !itemstack1.isEmpty()) // Vanilla insert failed, try IItemHandler + itemstack1 = net.minecraftforge.items.ItemHandlerHelper.insertItem(itemhandler, itemstack1, false); if (!itemstack1.isEmpty()) { break; } -@@ -200,10 +_,14 @@ +@@ -209,10 +_,14 @@ while (!itemstack.isEmpty()) { int i = itemstack.getCount(); - itemstack = HopperBlockEntity.addItem(p_309887_, container, itemstack, direction.getOpposite()); + itemstack = HopperBlockEntity.addItem(blockEntity, container, itemstack, direction.getOpposite()); + if (itemhandler != null && i == itemstack.getCount()) // Vanilla insert failed, try IItemHandler + itemstack = net.minecraftforge.items.ItemHandlerHelper.insertItem(itemhandler, itemstack, false); if (i == itemstack.getCount()) { diff --git a/patches/minecraft/net/minecraft/world/level/block/CropBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/CropBlock.java.patch index d0e0a1446f..e24e03bb40 100644 --- a/patches/minecraft/net/minecraft/world/level/block/CropBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/CropBlock.java.patch @@ -1,43 +1,43 @@ --- a/net/minecraft/world/level/block/CropBlock.java +++ b/net/minecraft/world/level/block/CropBlock.java -@@ -46,7 +_,7 @@ +@@ -47,7 +_,7 @@ @Override - protected boolean mayPlaceOn(BlockState p_52302_, BlockGetter p_52303_, BlockPos p_52304_) { -- return p_52302_.is(Blocks.FARMLAND); -+ return p_52302_.getBlock() instanceof net.minecraft.world.level.block.FarmBlock; + protected boolean mayPlaceOn(final BlockState state, final BlockGetter level, final BlockPos pos) { +- return state.is(BlockTags.SUPPORTS_CROPS); ++ return state.getBlock() instanceof FarmlandBlock; } protected IntegerProperty getAgeProperty() { -@@ -80,8 +_,9 @@ - int i = this.getAge(p_221050_); +@@ -81,8 +_,9 @@ + int i = this.getAge(state); if (i < this.getMaxAge()) { - float f = getGrowthSpeed(this, p_221051_, p_221052_); -- if (p_221053_.nextInt((int)(25.0F / f) + 1) == 0) { -+ if (net.minecraftforge.common.ForgeHooks.onCropsGrowPre(p_221051_, p_221052_, p_221050_, p_221053_.nextInt((int)(25.0F / f) + 1) == 0)) { - p_221051_.setBlock(p_221052_, this.getStateForAge(i + 1), 2); -+ net.minecraftforge.common.ForgeHooks.onCropsGrowPost(p_221051_, p_221052_, p_221050_); + float f = getGrowthSpeed(this, level, pos); +- if (random.nextInt((int)(25.0F / f) + 1) == 0) { ++ if (net.minecraftforge.common.ForgeHooks.onCropsGrowPre(level, pos, state, random.nextInt((int)(25.0F / f) + 1) == 0)) { + level.setBlock(pos, this.getStateForAge(i + 1), 2); ++ net.minecraftforge.common.ForgeHooks.onCropsGrowPost(level, pos, state); } } } -@@ -104,9 +_,9 @@ +@@ -105,9 +_,9 @@ for (int j = -1; j <= 1; j++) { float f1 = 0.0F; - BlockState blockstate = p_52274_.getBlockState(blockpos.offset(i, 0, j)); -- if (blockstate.is(Blocks.FARMLAND)) { -+ if (blockstate.canSustainPlant(p_52274_, blockpos.offset(i, 0, j), net.minecraft.core.Direction.UP, (net.minecraftforge.common.IPlantable) p_52273_)) { + BlockState blockstate = level.getBlockState(blockpos.offset(i, 0, j)); +- if (blockstate.is(BlockTags.GROWS_CROPS)) { ++ if (blockstate.canSustainPlant(level, blockpos.offset(i, 0, j), net.minecraft.core.Direction.UP, (net.minecraftforge.common.IPlantable)type)) { f1 = 1.0F; -- if (blockstate.getValue(FarmBlock.MOISTURE) > 0) { -+ if (blockstate.isFertile(p_52274_, p_52275_.offset(i, 0, j))) { +- if (blockstate.getValueOrElse(FarmlandBlock.MOISTURE, 0) > 0) { ++ if (blockstate.isFertile(level, blockpos.offset(i, 0, j))) { f1 = 3.0F; } } -@@ -151,7 +_,7 @@ - - @Override - protected void entityInside(BlockState p_52277_, Level p_52278_, BlockPos p_52279_, Entity p_52280_, InsideBlockEffectApplier p_391246_, boolean p_432051_) { -- if (p_52278_ instanceof ServerLevel serverlevel && p_52280_ instanceof Ravager && serverlevel.getGameRules().get(GameRules.MOB_GRIEFING)) { -+ if (p_52278_ instanceof ServerLevel serverlevel && p_52280_ instanceof Ravager && net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(serverlevel, p_52280_)) { - serverlevel.destroyBlock(p_52279_, true, p_52280_); +@@ -159,7 +_,7 @@ + final InsideBlockEffectApplier effectApplier, + final boolean isPrecise + ) { +- if (level instanceof ServerLevel serverlevel && entity instanceof Ravager && serverlevel.getGameRules().get(GameRules.MOB_GRIEFING)) { ++ if (level instanceof ServerLevel serverlevel && entity instanceof Ravager && net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(serverlevel, entity)) { + serverlevel.destroyBlock(pos, true, entity); } diff --git a/patches/minecraft/net/minecraft/world/level/block/DetectorRailBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/DetectorRailBlock.java.patch index a416bf6616..6f6dc6505e 100644 --- a/patches/minecraft/net/minecraft/world/level/block/DetectorRailBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/DetectorRailBlock.java.patch @@ -2,8 +2,8 @@ +++ b/net/minecraft/world/level/block/DetectorRailBlock.java @@ -39,6 +_,10 @@ - public DetectorRailBlock(BlockBehaviour.Properties p_52431_) { - super(true, p_52431_); + public DetectorRailBlock(final BlockBehaviour.Properties properties) { + super(true, properties); + this.registerDefaultState(); + } + @@ -11,23 +11,23 @@ this.registerDefaultState(this.stateDefinition.any().setValue(POWERED, false).setValue(SHAPE, RailShape.NORTH_SOUTH).setValue(WATERLOGGED, false)); } -@@ -147,7 +_,10 @@ +@@ -154,7 +_,10 @@ return list.get(0).getCommandBlock().getSuccessCount(); } -- List list1 = this.getInteractingMinecartOfType(p_52455_, p_52456_, AbstractMinecart.class, EntitySelector.CONTAINER_ENTITY_SELECTOR); -+ List carts = this.getInteractingMinecartOfType(p_52455_, p_52456_, AbstractMinecart.class, e -> e.isAlive()); +- List list1 = this.getInteractingMinecartOfType(level, pos, AbstractMinecart.class, EntitySelector.CONTAINER_ENTITY_SELECTOR); ++ List carts = this.getInteractingMinecartOfType(level, pos, AbstractMinecart.class, e -> e.isAlive()); + if (!carts.isEmpty() && carts.get(0).getComparatorLevel() > -1) return carts.get(0).getComparatorLevel(); + List list1 = carts.stream().filter(EntitySelector.CONTAINER_ENTITY_SELECTOR).toList(); + if (!list1.isEmpty()) { return AbstractContainerMenu.getRedstoneSignalFromContainer((Container)list1.get(0)); } -@@ -188,6 +_,6 @@ +@@ -190,6 +_,6 @@ @Override - protected void createBlockStateDefinition(StateDefinition.Builder p_52469_) { -- p_52469_.add(SHAPE, POWERED, WATERLOGGED); -+ p_52469_.add(getShapeProperty(), POWERED, WATERLOGGED); + protected void createBlockStateDefinition(final StateDefinition.Builder builder) { +- builder.add(SHAPE, POWERED, WATERLOGGED); ++ builder.add(getShapeProperty(), POWERED, WATERLOGGED); } } diff --git a/patches/minecraft/net/minecraft/world/level/block/DiodeBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/DiodeBlock.java.patch index 4ba66c754b..4706c7c0a9 100644 --- a/patches/minecraft/net/minecraft/world/level/block/DiodeBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/DiodeBlock.java.patch @@ -1,12 +1,12 @@ --- a/net/minecraft/world/level/block/DiodeBlock.java +++ b/net/minecraft/world/level/block/DiodeBlock.java -@@ -175,6 +_,9 @@ - Direction direction = p_52583_.getValue(FACING); - BlockPos blockpos = p_52582_.relative(direction.getOpposite()); - Orientation orientation = ExperimentalRedstoneUtils.initialOrientation(p_52581_, direction.getOpposite(), Direction.UP); -+ if (net.minecraftforge.event.ForgeEventFactory.onNeighborNotify(p_52581_, p_52582_, p_52581_.getBlockState(p_52582_), java.util.EnumSet.of(direction.getOpposite()), false)) { +@@ -177,6 +_,9 @@ + Direction direction = state.getValue(FACING); + BlockPos blockpos = pos.relative(direction.getOpposite()); + Orientation orientation = ExperimentalRedstoneUtils.initialOrientation(level, direction.getOpposite(), Direction.UP); ++ if (net.minecraftforge.event.ForgeEventFactory.onNeighborNotify(level, pos, level.getBlockState(pos), java.util.EnumSet.of(direction.getOpposite()), false)) { + return; + } - p_52581_.neighborChanged(blockpos, this, orientation); - p_52581_.updateNeighborsAtExceptFromFacing(blockpos, this, direction, orientation); + level.neighborChanged(blockpos, this, orientation); + level.updateNeighborsAtExceptFromFacing(blockpos, this, direction, orientation); } diff --git a/patches/minecraft/net/minecraft/world/level/block/DoublePlantBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/DoublePlantBlock.java.patch index ae6f75ef2c..40a99dd83c 100644 --- a/patches/minecraft/net/minecraft/world/level/block/DoublePlantBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/DoublePlantBlock.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/world/level/block/DoublePlantBlock.java +++ b/net/minecraft/world/level/block/DoublePlantBlock.java @@ -79,6 +_,7 @@ - return super.canSurvive(p_52887_, p_52888_, p_52889_); + return super.canSurvive(state, level, pos); } else { - BlockState blockstate = p_52888_.getBlockState(p_52889_.below()); -+ if (p_52887_.getBlock() != this) return super.canSurvive(p_52887_, p_52888_, p_52889_); //Forge: This function is called during world gen and placement, before this block is set, so if we are not 'here' then assume it's the pre-check. + BlockState blockstate = level.getBlockState(pos.below()); ++ if (state.getBlock() != this) return super.canSurvive(state, level, pos); //Forge: This function is called during world gen and placement, before this block is set, so if we are not 'here' then assume it's the pre-check. return blockstate.is(this) && blockstate.getValue(HALF) == DoubleBlockHalf.LOWER; } } diff --git a/patches/minecraft/net/minecraft/world/level/block/DropExperienceBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/DropExperienceBlock.java.patch index 9c378753c0..31148742c9 100644 --- a/patches/minecraft/net/minecraft/world/level/block/DropExperienceBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/DropExperienceBlock.java.patch @@ -2,11 +2,11 @@ +++ b/net/minecraft/world/level/block/DropExperienceBlock.java @@ -30,8 +_,13 @@ @Override - protected void spawnAfterBreak(BlockState p_221086_, ServerLevel p_221087_, BlockPos p_221088_, ItemStack p_221089_, boolean p_221090_) { - super.spawnAfterBreak(p_221086_, p_221087_, p_221088_, p_221089_, p_221090_); -- if (p_221090_) { -+ if (false && p_221090_) { // Forge: moved to getExpDrop - this.tryDropExperience(p_221087_, p_221088_, p_221089_, this.xpRange); + protected void spawnAfterBreak(final BlockState state, final ServerLevel level, final BlockPos pos, final ItemStack tool, final boolean dropExperience) { + super.spawnAfterBreak(state, level, pos, tool, dropExperience); +- if (dropExperience) { ++ if (false && dropExperience) { // Forge: moved to getExpDrop + this.tryDropExperience(level, pos, tool, this.xpRange); } + } + diff --git a/patches/minecraft/net/minecraft/world/level/block/DropperBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/DropperBlock.java.patch index a395e4b7e9..4f1ef406d8 100644 --- a/patches/minecraft/net/minecraft/world/level/block/DropperBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/DropperBlock.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/level/block/DropperBlock.java +++ b/net/minecraft/world/level/block/DropperBlock.java @@ -56,7 +_,7 @@ - p_52944_.levelEvent(1001, p_52945_, 0); + level.levelEvent(1001, pos, 0); } else { ItemStack itemstack = dispenserblockentity.getItem(i); - if (!itemstack.isEmpty()) { -+ if (!itemstack.isEmpty() && net.minecraftforge.items.VanillaInventoryCodeHooks.dropperInsertHook(p_52944_, p_52945_, dispenserblockentity, i, itemstack)) { - Direction direction = p_52944_.getBlockState(p_52945_).getValue(FACING); - Container container = HopperBlockEntity.getContainerAt(p_52944_, p_52945_.relative(direction)); ++ if (!itemstack.isEmpty() && net.minecraftforge.items.VanillaInventoryCodeHooks.dropperInsertHook(level, pos, dispenserblockentity, i, itemstack)) { + Direction direction = level.getBlockState(pos).getValue(FACING); + Container container = HopperBlockEntity.getContainerAt(level, pos.relative(direction)); ItemStack itemstack1; diff --git a/patches/minecraft/net/minecraft/world/level/block/EnchantingTableBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/EnchantingTableBlock.java.patch index 7dfb7f2916..c87f502932 100644 --- a/patches/minecraft/net/minecraft/world/level/block/EnchantingTableBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/EnchantingTableBlock.java.patch @@ -3,9 +3,9 @@ @@ -46,7 +_,7 @@ } - public static boolean isValidBookShelf(Level p_328191_, BlockPos p_328702_, BlockPos p_336071_) { -- return p_328191_.getBlockState(p_328702_.offset(p_336071_)).is(BlockTags.ENCHANTMENT_POWER_PROVIDER) -+ return p_328191_.getBlockState(p_328702_.offset(p_336071_)).getEnchantPowerBonus(p_328191_, p_328702_.offset(p_336071_)) != 0 - && p_328191_.getBlockState(p_328702_.offset(p_336071_.getX() / 2, p_336071_.getY(), p_336071_.getZ() / 2)).is(BlockTags.ENCHANTMENT_POWER_TRANSMITTER); + public static boolean isValidBookShelf(final Level level, final BlockPos pos, final BlockPos offset) { +- return level.getBlockState(pos.offset(offset)).is(BlockTags.ENCHANTMENT_POWER_PROVIDER) ++ return level.getBlockState(pos.offset(offset)).getEnchantPowerBonus(level, pos.offset(offset)) != 0 + && level.getBlockState(pos.offset(offset.getX() / 2, offset.getY(), offset.getZ() / 2)).is(BlockTags.ENCHANTMENT_POWER_TRANSMITTER); } diff --git a/patches/minecraft/net/minecraft/world/level/block/FarmBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/FarmBlock.java.patch deleted file mode 100644 index c1f0d92e38..0000000000 --- a/patches/minecraft/net/minecraft/world/level/block/FarmBlock.java.patch +++ /dev/null @@ -1,38 +0,0 @@ ---- a/net/minecraft/world/level/block/FarmBlock.java -+++ b/net/minecraft/world/level/block/FarmBlock.java -@@ -107,10 +_,7 @@ - @Override - public void fallOn(Level p_153227_, BlockState p_153228_, BlockPos p_153229_, Entity p_153230_, double p_394537_) { - if (p_153227_ instanceof ServerLevel serverlevel -- && p_153227_.random.nextFloat() < p_394537_ - 0.5 -- && p_153230_ instanceof LivingEntity -- && (p_153230_ instanceof Player || serverlevel.getGameRules().get(GameRules.MOB_GRIEFING)) -- && p_153230_.getBbWidth() * p_153230_.getBbWidth() * p_153230_.getBbHeight() > 0.512F) { -+ && net.minecraftforge.common.ForgeHooks.onFarmlandTrample(serverlevel, p_153229_, Blocks.DIRT.defaultBlockState(), p_394537_, p_153230_)) { // Forge: Move logic to Entity#canTrample - turnToDirt(p_153230_, p_153228_, p_153227_, p_153229_); - } - -@@ -124,17 +_,20 @@ - } - - private static boolean shouldMaintainFarmland(BlockGetter p_279219_, BlockPos p_279209_) { -- return p_279219_.getBlockState(p_279209_.above()).is(BlockTags.MAINTAINS_FARMLAND); -+ BlockState plant = p_279219_.getBlockState(p_279209_.above()); -+ BlockState state = p_279219_.getBlockState(p_279209_); -+ return plant.getBlock() instanceof net.minecraftforge.common.IPlantable plantable && state.canSustainPlant(p_279219_, p_279209_, Direction.UP, plantable); - } - - private static boolean isNearWater(LevelReader p_53259_, BlockPos p_53260_) { -+ BlockState state = p_53259_.getBlockState(p_53260_); - for (BlockPos blockpos : BlockPos.betweenClosed(p_53260_.offset(-4, 0, -4), p_53260_.offset(4, 1, 4))) { -- if (p_53259_.getFluidState(blockpos).is(FluidTags.WATER)) { -+ if (state.canBeHydrated(p_53259_, p_53260_, p_53259_.getFluidState(blockpos), blockpos)) { - return true; - } - } - -- return false; -+ return net.minecraftforge.common.FarmlandWaterManager.hasBlockWaterTicket(p_53259_, p_53260_); - } - - @Override diff --git a/patches/minecraft/net/minecraft/world/level/block/FarmlandBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/FarmlandBlock.java.patch new file mode 100644 index 0000000000..e6e9db89cb --- /dev/null +++ b/patches/minecraft/net/minecraft/world/level/block/FarmlandBlock.java.patch @@ -0,0 +1,39 @@ +--- a/net/minecraft/world/level/block/FarmlandBlock.java ++++ b/net/minecraft/world/level/block/FarmlandBlock.java +@@ -108,10 +_,7 @@ + @Override + public void fallOn(final Level level, final BlockState state, final BlockPos pos, final Entity entity, final double fallDistance) { + if (level instanceof ServerLevel serverlevel +- && level.getRandom().nextFloat() < fallDistance - 0.5 +- && entity instanceof LivingEntity +- && (entity instanceof Player || serverlevel.getGameRules().get(GameRules.MOB_GRIEFING)) +- && entity.getBbWidth() * entity.getBbWidth() * entity.getBbHeight() > 0.512F) { ++ && net.minecraftforge.common.ForgeHooks.onFarmlandTrample(serverlevel, pos, state, fallDistance, entity)) { // Forge: Move logic to Entity#canTrample + turnToDirt(entity, state, level, pos); + } + +@@ -125,17 +_,22 @@ + } + + private static boolean shouldMaintainFarmland(final BlockGetter level, final BlockPos pos) { ++ BlockState plant = level.getBlockState(pos.above()); ++ BlockState state = level.getBlockState(pos); ++ if (plant.getBlock() instanceof net.minecraftforge.common.IPlantable plantable && state.canSustainPlant(level, pos, Direction.UP, plantable)) ++ return true; + return level.getBlockState(pos.above()).is(BlockTags.MAINTAINS_FARMLAND); + } + + private static boolean isNearWater(final LevelReader level, final BlockPos pos) { ++ BlockState state = level.getBlockState(pos); + for (BlockPos blockpos : BlockPos.betweenClosed(pos.offset(-4, 0, -4), pos.offset(4, 1, 4))) { +- if (level.getFluidState(blockpos).is(FluidTags.WATER)) { ++ if (state.canBeHydrated(level, pos, level.getFluidState(blockpos), blockpos)) { + return true; + } + } + +- return false; ++ return net.minecraftforge.common.FarmlandWaterManager.hasBlockWaterTicket(level, pos); + } + + @Override diff --git a/patches/minecraft/net/minecraft/world/level/block/FenceGateBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/FenceGateBlock.java.patch index d208aee5e4..a7954ff440 100644 --- a/patches/minecraft/net/minecraft/world/level/block/FenceGateBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/FenceGateBlock.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/world/level/block/FenceGateBlock.java +++ b/net/minecraft/world/level/block/FenceGateBlock.java -@@ -59,6 +_,8 @@ - Util.mapValues(SHAPE_OCCLUSION, p_390935_ -> p_390935_.move(0.0, -0.1875, 0.0).optimize()) +@@ -58,6 +_,8 @@ + Util.mapValues(SHAPE_OCCLUSION, v -> v.move(0.0, -0.1875, 0.0).optimize()) ); private final WoodType type; + private final net.minecraft.sounds.SoundEvent openSound; @@ -9,46 +9,46 @@ @Override public MapCodec codec() { -@@ -66,8 +_,14 @@ +@@ -65,8 +_,14 @@ } - public FenceGateBlock(WoodType p_273340_, BlockBehaviour.Properties p_273352_) { -- super(p_273352_.sound(p_273340_.soundType())); -+ this(p_273340_, p_273352_, p_273340_.fenceGateOpen(), p_273340_.fenceGateClose()); + public FenceGateBlock(final WoodType type, final BlockBehaviour.Properties properties) { +- super(properties.sound(type.soundType())); ++ this(type, properties, type.fenceGateOpen(), type.fenceGateClose()); + } + -+ public FenceGateBlock(WoodType p_273340_, BlockBehaviour.Properties p_273352_, net.minecraft.sounds.SoundEvent openSound, net.minecraft.sounds.SoundEvent closeSound) { -+ super(p_273352_); - this.type = p_273340_; ++ public FenceGateBlock(final WoodType type, final BlockBehaviour.Properties properties, final net.minecraft.sounds.SoundEvent openSound, final net.minecraft.sounds.SoundEvent closeSound) { ++ super(properties); + this.type = type; + this.openSound = openSound; + this.closeSound = closeSound; this.registerDefaultState(this.stateDefinition.any().setValue(OPEN, false).setValue(POWERED, false).setValue(IN_WALL, false)); } -@@ -165,7 +_,7 @@ - p_53366_.playSound( - p_53368_, - p_53367_, -- flag ? this.type.fenceGateOpen() : this.type.fenceGateClose(), -+ flag ? this.openSound : this.closeSound, - SoundSource.BLOCKS, - 1.0F, - p_53366_.getRandom().nextFloat() * 0.1F + 0.9F -@@ -182,7 +_,7 @@ - p_368190_.playSound( - null, - p_311232_, -- flag ? this.type.fenceGateClose() : this.type.fenceGateOpen(), -+ flag ? this.closeSound : this.openSound, - SoundSource.BLOCKS, - 1.0F, - p_368190_.getRandom().nextFloat() * 0.1F + 0.9F -@@ -203,7 +_,7 @@ - p_53373_.playSound( +@@ -162,7 +_,7 @@ + + boolean flag = state.getValue(OPEN); + level.playSound( +- player, pos, flag ? this.type.fenceGateOpen() : this.type.fenceGateClose(), SoundSource.BLOCKS, 1.0F, level.getRandom().nextFloat() * 0.1F + 0.9F ++ player, pos, flag ? this.openSound : this.closeSound, SoundSource.BLOCKS, 1.0F, level.getRandom().nextFloat() * 0.1F + 0.9F + ); + level.gameEvent(player, flag ? GameEvent.BLOCK_OPEN : GameEvent.BLOCK_CLOSE, pos); + return InteractionResult.SUCCESS; +@@ -176,7 +_,7 @@ + boolean flag = state.getValue(OPEN); + level.setBlockAndUpdate(pos, state.setValue(OPEN, !flag)); + level.playSound( +- null, pos, flag ? this.type.fenceGateClose() : this.type.fenceGateOpen(), SoundSource.BLOCKS, 1.0F, level.getRandom().nextFloat() * 0.1F + 0.9F ++ null, pos, flag ? this.openSound : this.closeSound, SoundSource.BLOCKS, 1.0F, level.getRandom().nextFloat() * 0.1F + 0.9F + ); + level.gameEvent(flag ? GameEvent.BLOCK_CLOSE : GameEvent.BLOCK_OPEN, pos, GameEvent.Context.of(state)); + } +@@ -196,7 +_,7 @@ + level.playSound( null, - p_53374_, + pos, - flag ? this.type.fenceGateOpen() : this.type.fenceGateClose(), + flag ? this.openSound : this.closeSound, SoundSource.BLOCKS, 1.0F, - p_53373_.getRandom().nextFloat() * 0.1F + 0.9F + level.getRandom().nextFloat() * 0.1F + 0.9F diff --git a/patches/minecraft/net/minecraft/world/level/block/FireBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/FireBlock.java.patch index 483dd82a6a..076bae73be 100644 --- a/patches/minecraft/net/minecraft/world/level/block/FireBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/FireBlock.java.patch @@ -1,112 +1,112 @@ --- a/net/minecraft/world/level/block/FireBlock.java +++ b/net/minecraft/world/level/block/FireBlock.java @@ -115,13 +_,13 @@ - protected BlockState getStateForPlacement(BlockGetter p_53471_, BlockPos p_53472_) { - BlockPos blockpos = p_53472_.below(); - BlockState blockstate = p_53471_.getBlockState(blockpos); -- if (!this.canBurn(blockstate) && !blockstate.isFaceSturdy(p_53471_, blockpos, Direction.UP)) { -+ if (!this.canCatchFire(p_53471_, p_53472_, Direction.UP) && !blockstate.isFaceSturdy(p_53471_, blockpos, Direction.UP)) { + protected BlockState getStateForPlacement(final BlockGetter level, final BlockPos pos) { + BlockPos blockpos = pos.below(); + BlockState blockstate = level.getBlockState(blockpos); +- if (!this.canBurn(blockstate) && !blockstate.isFaceSturdy(level, blockpos, Direction.UP)) { ++ if (!this.canCatchFire(level, pos, Direction.UP) && !blockstate.isFaceSturdy(level, blockpos, Direction.UP)) { BlockState blockstate1 = this.defaultBlockState(); for (Direction direction : Direction.values()) { BooleanProperty booleanproperty = PROPERTY_BY_DIRECTION.get(direction); if (booleanproperty != null) { -- blockstate1 = blockstate1.setValue(booleanproperty, this.canBurn(p_53471_.getBlockState(p_53472_.relative(direction)))); -+ blockstate1 = blockstate1.setValue(booleanproperty, Boolean.valueOf(this.canCatchFire(p_53471_, p_53472_.relative(direction), direction.getOpposite()))); +- blockstate1 = blockstate1.setValue(booleanproperty, this.canBurn(level.getBlockState(pos.relative(direction)))); ++ blockstate1 = blockstate1.setValue(booleanproperty, Boolean.valueOf(this.canCatchFire(level, pos.relative(direction), direction.getOpposite()))); } } @@ -146,7 +_,7 @@ } - BlockState blockstate = p_221161_.getBlockState(p_221162_.below()); -- boolean flag = blockstate.is(p_221161_.dimensionType().infiniburn()); -+ boolean flag = blockstate.isFireSource(p_221161_, p_221162_, Direction.UP); - int i = p_221160_.getValue(AGE); - if (!flag && p_221161_.isRaining() && this.isNearRain(p_221161_, p_221162_) && p_221163_.nextFloat() < 0.2F + i * 0.03F) { - p_221161_.removeBlock(p_221162_, false); + BlockState blockstate = level.getBlockState(pos.below()); +- boolean flag = blockstate.is(level.dimensionType().infiniburn()); ++ boolean flag = blockstate.isFireSource(level, pos, Direction.UP); + int i = state.getValue(AGE); + if (!flag && level.isRaining() && this.isNearRain(level, pos) && random.nextFloat() < 0.2F + i * 0.03F) { + level.removeBlock(pos, false); @@ -167,7 +_,7 @@ return; } -- if (i == 15 && p_221163_.nextInt(4) == 0 && !this.canBurn(p_221161_.getBlockState(p_221162_.below()))) { -+ if (i == 15 && p_221163_.nextInt(4) == 0 && !this.canCatchFire(p_221161_, p_221162_.below(), Direction.UP)) { - p_221161_.removeBlock(p_221162_, false); +- if (i == 15 && random.nextInt(4) == 0 && !this.canBurn(level.getBlockState(pos.below()))) { ++ if (i == 15 && random.nextInt(4) == 0 && !this.canCatchFire(level, pos.below(), Direction.UP)) { + level.removeBlock(pos, false); return; } @@ -175,12 +_,12 @@ - boolean flag1 = p_221161_.environmentAttributes().getValue(EnvironmentAttributes.INCREASED_FIRE_BURNOUT, p_221162_); + boolean flag1 = level.environmentAttributes().getValue(EnvironmentAttributes.INCREASED_FIRE_BURNOUT, pos); int k = flag1 ? -50 : 0; -- this.checkBurnOut(p_221161_, p_221162_.east(), 300 + k, p_221163_, i); -- this.checkBurnOut(p_221161_, p_221162_.west(), 300 + k, p_221163_, i); -- this.checkBurnOut(p_221161_, p_221162_.below(), 250 + k, p_221163_, i); -- this.checkBurnOut(p_221161_, p_221162_.above(), 250 + k, p_221163_, i); -- this.checkBurnOut(p_221161_, p_221162_.north(), 300 + k, p_221163_, i); -- this.checkBurnOut(p_221161_, p_221162_.south(), 300 + k, p_221163_, i); -+ this.checkBurnOut(p_221161_, p_221162_.east(), 300 + k, p_221163_, i, Direction.WEST); -+ this.checkBurnOut(p_221161_, p_221162_.west(), 300 + k, p_221163_, i, Direction.EAST); -+ this.checkBurnOut(p_221161_, p_221162_.below(), 250 + k, p_221163_, i, Direction.UP); -+ this.checkBurnOut(p_221161_, p_221162_.above(), 250 + k, p_221163_, i, Direction.DOWN); -+ this.checkBurnOut(p_221161_, p_221162_.north(), 300 + k, p_221163_, i, Direction.SOUTH); -+ this.checkBurnOut(p_221161_, p_221162_.south(), 300 + k, p_221163_, i, Direction.NORTH); +- this.checkBurnOut(level, pos.east(), 300 + k, random, i); +- this.checkBurnOut(level, pos.west(), 300 + k, random, i); +- this.checkBurnOut(level, pos.below(), 250 + k, random, i); +- this.checkBurnOut(level, pos.above(), 250 + k, random, i); +- this.checkBurnOut(level, pos.north(), 300 + k, random, i); +- this.checkBurnOut(level, pos.south(), 300 + k, random, i); ++ this.checkBurnOut(level, pos.east(), 300 + k, random, i, Direction.WEST); ++ this.checkBurnOut(level, pos.west(), 300 + k, random, i, Direction.EAST); ++ this.checkBurnOut(level, pos.below(), 250 + k, random, i, Direction.UP); ++ this.checkBurnOut(level, pos.above(), 250 + k, random, i, Direction.DOWN); ++ this.checkBurnOut(level, pos.north(), 300 + k, random, i, Direction.SOUTH); ++ this.checkBurnOut(level, pos.south(), 300 + k, random, i, Direction.NORTH); BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); for (int l = -1; l <= 1; l++) { -@@ -223,33 +_,31 @@ - || p_53429_.isRainingAt(p_53430_.south()); +@@ -221,33 +_,31 @@ + || level.isRainingAt(testPos.south()); } + @Deprecated //Forge: Use IForgeBlockState.getFlammability, Public for default implementation only. - public int getBurnOdds(BlockState p_221165_) { - return p_221165_.hasProperty(BlockStateProperties.WATERLOGGED) && p_221165_.getValue(BlockStateProperties.WATERLOGGED) + public int getBurnOdds(final BlockState state) { + return state.hasProperty(BlockStateProperties.WATERLOGGED) && state.getValue(BlockStateProperties.WATERLOGGED) ? 0 - : this.burnOdds.getInt(p_221165_.getBlock()); + : this.burnOdds.getInt(state.getBlock()); } + @Deprecated //Forge: Use IForgeBlockState.getFireSpreadSpeed - public int getIgniteOdds(BlockState p_221167_) { - return p_221167_.hasProperty(BlockStateProperties.WATERLOGGED) && p_221167_.getValue(BlockStateProperties.WATERLOGGED) + public int getIgniteOdds(final BlockState state) { + return state.hasProperty(BlockStateProperties.WATERLOGGED) && state.getValue(BlockStateProperties.WATERLOGGED) ? 0 - : this.igniteOdds.getInt(p_221167_.getBlock()); + : this.igniteOdds.getInt(state.getBlock()); } -- private void checkBurnOut(Level p_221151_, BlockPos p_221152_, int p_221153_, RandomSource p_221154_, int p_221155_) { -- int i = this.getBurnOdds(p_221151_.getBlockState(p_221152_)); -+ private void checkBurnOut(Level p_221151_, BlockPos p_221152_, int p_221153_, RandomSource p_221154_, int p_221155_, Direction face) { -+ int i = p_221151_.getBlockState(p_221152_).getFlammability(p_221151_, p_221152_, face); - if (p_221154_.nextInt(p_221153_) < i) { - BlockState blockstate = p_221151_.getBlockState(p_221152_); -+ blockstate.onCaughtFire(p_221151_, p_221152_, face, null); - if (p_221154_.nextInt(p_221155_ + 10) < 5 && !p_221151_.isRainingAt(p_221152_)) { - int j = Math.min(p_221155_ + p_221154_.nextInt(5) / 4, 15); - p_221151_.setBlock(p_221152_, this.getStateWithAge(p_221151_, p_221152_, j), 3); +- private void checkBurnOut(final Level level, final BlockPos pos, final int chance, final RandomSource random, final int age) { +- int i = this.getBurnOdds(level.getBlockState(pos)); ++ private void checkBurnOut(final Level level, final BlockPos pos, final int chance, final RandomSource random, final int age, final Direction face) { ++ int i = level.getBlockState(pos).getFlammability(level, pos, face); + if (random.nextInt(chance) < i) { + BlockState blockstate = level.getBlockState(pos); ++ blockstate.onCaughtFire(level, pos, face, null); + if (random.nextInt(age + 10) < 5 && !level.isRainingAt(pos)) { + int j = Math.min(age + random.nextInt(5) / 4, 15); + level.setBlock(pos, this.getStateWithAge(level, pos, j), 3); } else { - p_221151_.removeBlock(p_221152_, false); + level.removeBlock(pos, false); } - - Block block = blockstate.getBlock(); - if (block instanceof TntBlock) { -- TntBlock.prime(p_221151_, p_221152_); +- TntBlock.prime(level, pos); - } } } -@@ -260,7 +_,7 @@ +@@ -258,7 +_,7 @@ - private boolean isValidFireLocation(BlockGetter p_53486_, BlockPos p_53487_) { + private boolean isValidFireLocation(final BlockGetter level, final BlockPos pos) { for (Direction direction : Direction.values()) { -- if (this.canBurn(p_53486_.getBlockState(p_53487_.relative(direction)))) { -+ if (this.canCatchFire(p_53486_, p_53487_.relative(direction), direction.getOpposite())) { +- if (this.canBurn(level.getBlockState(pos.relative(direction)))) { ++ if (this.canCatchFire(level, pos.relative(direction), direction.getOpposite())) { return true; } } -@@ -276,13 +_,14 @@ +@@ -274,13 +_,14 @@ for (Direction direction : Direction.values()) { - BlockState blockstate = p_221157_.getBlockState(p_221158_.relative(direction)); + BlockState blockstate = level.getBlockState(pos.relative(direction)); - i = Math.max(this.getIgniteOdds(blockstate), i); -+ i = Math.max(blockstate.getFireSpreadSpeed(p_221157_, p_221158_.relative(direction), direction.getOpposite()), i); ++ i = Math.max(blockstate.getFireSpreadSpeed(level, pos.relative(direction), direction.getOpposite()), i); } return i; @@ -115,15 +115,15 @@ + @Deprecated //Forge: Use canCatchFire with more context @Override - protected boolean canBurn(BlockState p_53489_) { - return this.getIgniteOdds(p_53489_) > 0; -@@ -304,8 +_,21 @@ + protected boolean canBurn(final BlockState state) { + return this.getIgniteOdds(state) > 0; +@@ -302,8 +_,21 @@ } - public void setFlammable(Block p_53445_, int p_53446_, int p_53447_) { -+ if (p_53445_ == Blocks.AIR) throw new IllegalArgumentException("Tried to set air on fire... This is bad."); - this.igniteOdds.put(p_53445_, p_53446_); - this.burnOdds.put(p_53445_, p_53447_); + private void setFlammable(final Block block, final int igniteOdds, final int burnOdds) { ++ if (block == Blocks.AIR) throw new IllegalArgumentException("Tried to set air on fire... This is bad."); + this.igniteOdds.put(block, igniteOdds); + this.burnOdds.put(block, burnOdds); + } + + /** diff --git a/patches/minecraft/net/minecraft/world/level/block/FlowerPotBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/FlowerPotBlock.java.patch index d411d232a1..9c1e316842 100644 --- a/patches/minecraft/net/minecraft/world/level/block/FlowerPotBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/FlowerPotBlock.java.patch @@ -1,15 +1,12 @@ --- a/net/minecraft/world/level/block/FlowerPotBlock.java +++ b/net/minecraft/world/level/block/FlowerPotBlock.java -@@ -45,9 +_,31 @@ +@@ -44,9 +_,31 @@ } - public FlowerPotBlock(Block p_53528_, BlockBehaviour.Properties p_53529_) { -- super(p_53529_); -- this.potted = p_53528_; -- POTTED_BY_CONTENT.put(p_53528_, this); -+ this(Blocks.FLOWER_POT == null ? null : () -> (FlowerPotBlock) net.minecraftforge.registries.ForgeRegistries.BLOCKS.getDelegateOrThrow(Blocks.FLOWER_POT).get(), () -> net.minecraftforge.registries.ForgeRegistries.BLOCKS.getDelegateOrThrow(p_53528_).get(), p_53529_); + public FlowerPotBlock(final Block potted, final BlockBehaviour.Properties properties) { ++ this(Blocks.FLOWER_POT == null ? null : () -> (FlowerPotBlock) net.minecraftforge.registries.ForgeRegistries.BLOCKS.getDelegateOrThrow(Blocks.FLOWER_POT).get(), () -> net.minecraftforge.registries.ForgeRegistries.BLOCKS.getDelegateOrThrow(potted).get(), properties); + if (Blocks.FLOWER_POT != null) { -+ ((FlowerPotBlock)Blocks.FLOWER_POT).addPlant(net.minecraftforge.registries.ForgeRegistries.BLOCKS.getKey(p_53528_), () -> this); ++ ((FlowerPotBlock)Blocks.FLOWER_POT).addPlant(net.minecraftforge.registries.ForgeRegistries.BLOCKS.getKey(potted), () -> this); + } + } + @@ -22,7 +19,9 @@ + * @param properties + */ + public FlowerPotBlock(@org.jetbrains.annotations.Nullable java.util.function.Supplier emptyPot, java.util.function.Supplier p_53528_, BlockBehaviour.Properties properties) { -+ super(properties); + super(properties); +- this.potted = potted; +- POTTED_BY_CONTENT.put(potted, this); + this.potted = null; // Unused, redirected by coremod + this.flowerDelegate = p_53528_; + if (emptyPot == null) { @@ -35,25 +34,25 @@ } @Override -@@ -60,7 +_,7 @@ - ItemStack p_329639_, BlockState p_328047_, Level p_328816_, BlockPos p_334572_, Player p_329206_, InteractionHand p_329142_, BlockHitResult p_330607_ +@@ -65,7 +_,7 @@ + final BlockHitResult hitResult ) { - BlockState blockstate = (p_329639_.getItem() instanceof BlockItem blockitem + BlockState blockstate = (itemStack.getItem() instanceof BlockItem blockitem - ? POTTED_BY_CONTENT.getOrDefault(blockitem.getBlock(), Blocks.AIR) + ? getEmptyPot().fullPots.getOrDefault(net.minecraftforge.registries.ForgeRegistries.BLOCKS.getKey(blockitem.getBlock()), net.minecraftforge.registries.ForgeRegistries.BLOCKS.getDelegateOrThrow(Blocks.AIR)).get() : Blocks.AIR) .defaultBlockState(); if (blockstate.isAir()) { -@@ -86,7 +_,7 @@ - p_333787_.drop(itemstack, false); +@@ -93,7 +_,7 @@ + player.drop(itemstack, false); } -- p_334489_.setBlock(p_330334_, Blocks.FLOWER_POT.defaultBlockState(), 3); -+ p_334489_.setBlock(p_330334_, getEmptyPot().defaultBlockState(), 3); - p_334489_.gameEvent(p_333787_, GameEvent.BLOCK_CHANGE, p_330334_); +- level.setBlock(pos, Blocks.FLOWER_POT.defaultBlockState(), 3); ++ level.setBlock(pos, getEmptyPot().defaultBlockState(), 3); + level.gameEvent(player, GameEvent.BLOCK_CHANGE, pos); return InteractionResult.SUCCESS; } -@@ -118,7 +_,7 @@ +@@ -125,7 +_,7 @@ } public Block getPotted() { @@ -62,9 +61,9 @@ } @Override -@@ -153,5 +_,24 @@ +@@ -160,5 +_,24 @@ } else { - return p_376074_.is(Blocks.POTTED_CLOSED_EYEBLOSSOM) ? Blocks.POTTED_OPEN_EYEBLOSSOM.defaultBlockState() : p_376074_; + return state.is(Blocks.POTTED_CLOSED_EYEBLOSSOM) ? Blocks.POTTED_OPEN_EYEBLOSSOM.defaultBlockState() : state; } + } + diff --git a/patches/minecraft/net/minecraft/world/level/block/FungusBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/FungusBlock.java.patch deleted file mode 100644 index 470e064d1e..0000000000 --- a/patches/minecraft/net/minecraft/world/level/block/FungusBlock.java.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- a/net/minecraft/world/level/block/FungusBlock.java -+++ b/net/minecraft/world/level/block/FungusBlock.java -@@ -76,6 +_,10 @@ - - @Override - public void performBonemeal(ServerLevel p_221243_, RandomSource p_221244_, BlockPos p_221245_, BlockState p_221246_) { -- this.getFeature(p_221243_).ifPresent(p_256352_ -> p_256352_.value().place(p_221243_, p_221243_.getChunkSource().getGenerator(), p_221244_, p_221245_)); -+ this.getFeature(p_221243_).ifPresent(p_256352_ -> { -+ var event = net.minecraftforge.event.ForgeEventFactory.blockGrowFeature(p_221243_, p_221244_, p_221245_, p_256352_); -+ if (event.getResult().isDenied()) return; -+ event.getFeature().value().place(p_221243_, p_221243_.getChunkSource().getGenerator(), p_221244_, p_221245_); -+ }); - } - } diff --git a/patches/minecraft/net/minecraft/world/level/block/GrowingPlantHeadBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/GrowingPlantHeadBlock.java.patch index 9a16ca6843..c974ea5f03 100644 --- a/patches/minecraft/net/minecraft/world/level/block/GrowingPlantHeadBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/GrowingPlantHeadBlock.java.patch @@ -1,17 +1,17 @@ --- a/net/minecraft/world/level/block/GrowingPlantHeadBlock.java +++ b/net/minecraft/world/level/block/GrowingPlantHeadBlock.java -@@ -42,10 +_,13 @@ +@@ -48,10 +_,13 @@ @Override - protected void randomTick(BlockState p_221350_, ServerLevel p_221351_, BlockPos p_221352_, RandomSource p_221353_) { -- if (p_221350_.getValue(AGE) < 25 && p_221353_.nextDouble() < this.growPerTickProbability) { -+ var vanilla = p_221353_.nextDouble() < this.growPerTickProbability; -+ var target = p_221352_.relative(this.growthDirection); -+ if (p_221350_.getValue(AGE) < 25 && net.minecraftforge.common.ForgeHooks.onCropsGrowPre(p_221351_, target, p_221351_.getBlockState(target), vanilla)) { - BlockPos blockpos = p_221352_.relative(this.growthDirection); - if (this.canGrowInto(p_221351_.getBlockState(blockpos))) { - p_221351_.setBlockAndUpdate(blockpos, this.getGrowIntoState(p_221350_, p_221351_.random)); -+ net.minecraftforge.common.ForgeHooks.onCropsGrowPost(p_221351_, blockpos, p_221351_.getBlockState(blockpos)); + protected void randomTick(final BlockState state, final ServerLevel level, final BlockPos pos, final RandomSource random) { +- if (state.getValue(AGE) < 25 && random.nextDouble() < this.growPerTickProbability) { ++ var vanilla = random.nextDouble() < this.growPerTickProbability; ++ var target = pos.relative(this.growthDirection); ++ if (state.getValue(AGE) < 25 && net.minecraftforge.common.ForgeHooks.onCropsGrowPre(level, target, level.getBlockState(target), vanilla)) { + BlockPos blockpos = pos.relative(this.growthDirection); + if (this.canGrowInto(level.getBlockState(blockpos))) { + level.setBlockAndUpdate(blockpos, this.getGrowIntoState(state, level.getRandom())); ++ net.minecraftforge.common.ForgeHooks.onCropsGrowPost(level, blockpos, level.getBlockState(blockpos)); } } } diff --git a/patches/minecraft/net/minecraft/world/level/block/LiquidBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/LiquidBlock.java.patch index a5fe8e1b69..c80ec25edb 100644 --- a/patches/minecraft/net/minecraft/world/level/block/LiquidBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/LiquidBlock.java.patch @@ -1,75 +1,78 @@ --- a/net/minecraft/world/level/block/LiquidBlock.java +++ b/net/minecraft/world/level/block/LiquidBlock.java @@ -53,7 +_,8 @@ - p_422116_ -> p_422116_.group(FLOWING_FLUID.fieldOf("fluid").forGetter(p_312827_ -> p_312827_.fluid), propertiesCodec()).apply(p_422116_, LiquidBlock::new) + i -> i.group(FLOWING_FLUID.fieldOf("fluid").forGetter(b -> b.fluid), propertiesCodec()).apply(i, LiquidBlock::new) ); public static final IntegerProperty LEVEL = BlockStateProperties.LEVEL; - protected final FlowingFluid fluid; + @Deprecated // Use getFluid + private final FlowingFluid fluid; private final List stateCache; - public static final VoxelShape SHAPE_STABLE = Block.column(16.0, 0.0, 8.0); - public static final ImmutableList POSSIBLE_FLOW_DIRECTIONS = ImmutableList.of(Direction.DOWN, Direction.SOUTH, Direction.NORTH, Direction.EAST, Direction.WEST); -@@ -63,6 +_,7 @@ + public static final ImmutableList POSSIBLE_FLOW_DIRECTIONS = ImmutableList.of( + Direction.DOWN, Direction.SOUTH, Direction.NORTH, Direction.EAST, Direction.WEST +@@ -65,6 +_,7 @@ return CODEC; } + @Deprecated // Forge: Use the constructor that takes a supplier - public LiquidBlock(FlowingFluid p_54694_, BlockBehaviour.Properties p_54695_) { - super(p_54695_); - this.fluid = p_54694_; -@@ -75,6 +_,19 @@ + public LiquidBlock(final FlowingFluid fluid, final BlockBehaviour.Properties properties) { + super(properties); + this.fluid = fluid; +@@ -77,6 +_,19 @@ - this.stateCache.add(p_54694_.getFlowing(8, true)); + this.stateCache.add(fluid.getFlowing(8, true)); this.registerDefaultState(this.stateDefinition.any().setValue(LEVEL, 0)); + fluidStateCacheInitialized = true; -+ supplier = () -> p_54694_; ++ supplier = () -> fluid; + } + + /** -+ * @param p_54694_ A fluid supplier such as {@link net.minecraftforge.registries.RegistryObject} ++ * @param fluid A fluid supplier such as {@link net.minecraftforge.registries.RegistryObject} + */ -+ public LiquidBlock(java.util.function.Supplier p_54694_, BlockBehaviour.Properties p_54695_) { -+ super(p_54695_); ++ public LiquidBlock(final java.util.function.Supplier fluid, final BlockBehaviour.Properties properties) { ++ super(properties); + this.fluid = null; + this.stateCache = Lists.newArrayList(); + this.registerDefaultState(this.stateDefinition.any().setValue(LEVEL, Integer.valueOf(0))); -+ this.supplier = p_54694_; ++ this.supplier = fluid; } @Override -@@ -113,6 +_,7 @@ +@@ -125,6 +_,7 @@ @Override - protected FluidState getFluidState(BlockState p_54765_) { - int i = p_54765_.getValue(LEVEL); + protected FluidState getFluidState(final BlockState state) { + int i = state.getValue(LEVEL); + if (!fluidStateCacheInitialized) initFluidStateCache(); return this.stateCache.get(Math.min(i, 8)); } -@@ -138,7 +_,7 @@ +@@ -150,7 +_,7 @@ @Override - protected void onPlace(BlockState p_54754_, Level p_54755_, BlockPos p_54756_, BlockState p_54757_, boolean p_54758_) { -- if (this.shouldSpreadLiquid(p_54755_, p_54756_, p_54754_)) { -+ if (!net.minecraftforge.fluids.FluidInteractionRegistry.canInteract(p_54755_, p_54756_)) { - p_54755_.scheduleTick(p_54756_, p_54754_.getFluidState().getType(), this.fluid.getTickDelay(p_54755_)); + protected void onPlace(final BlockState state, final Level level, final BlockPos pos, final BlockState oldState, final boolean movedByPiston) { +- if (this.shouldSpreadLiquid(level, pos, state)) { ++ if (!net.minecraftforge.fluids.FluidInteractionRegistry.canInteract(level, pos)) { + level.scheduleTick(pos, state.getFluidState().getType(), this.fluid.getTickDelay(level)); } - } -@@ -163,11 +_,12 @@ - @Override - protected void neighborChanged(BlockState p_54709_, Level p_54710_, BlockPos p_54711_, Block p_54712_, @Nullable Orientation p_368724_, boolean p_54714_) { -- if (this.shouldSpreadLiquid(p_54710_, p_54711_, p_54709_)) { -+ if (!net.minecraftforge.fluids.FluidInteractionRegistry.canInteract(p_54710_, p_54711_)) { - p_54710_.scheduleTick(p_54711_, p_54709_.getFluidState().getType(), this.fluid.getTickDelay(p_54710_)); +@@ -198,7 +_,7 @@ + protected void neighborChanged( + final BlockState state, final Level level, final BlockPos pos, final Block block, final @Nullable Orientation orientation, final boolean movedByPiston + ) { +- if (this.shouldSpreadLiquid(level, pos, state)) { ++ if (!net.minecraftforge.fluids.FluidInteractionRegistry.canInteract(level, pos)) { + level.scheduleTick(pos, state.getFluidState().getType(), this.fluid.getTickDelay(level)); + } + +@@ -214,6 +_,7 @@ } } + @Deprecated // FORGE: Use FluidInteractionRegistry#canInteract instead - private boolean shouldSpreadLiquid(Level p_54697_, BlockPos p_54698_, BlockState p_54699_) { + private boolean shouldSpreadLiquid(final Level level, final BlockPos pos, final BlockState state) { if (this.fluid.is(FluidTags.LAVA)) { - boolean flag = p_54697_.getBlockState(p_54698_.below()).is(Blocks.SOUL_SOIL); -@@ -214,5 +_,24 @@ + boolean flag = level.getBlockState(pos.below()).is(Blocks.SOUL_SOIL); +@@ -260,5 +_,24 @@ @Override public Optional getPickupSound() { return this.fluid.getPickupSound(); diff --git a/patches/minecraft/net/minecraft/world/level/block/MushroomBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/MushroomBlock.java.patch index 89ae290aa8..d808cb38f3 100644 --- a/patches/minecraft/net/minecraft/world/level/block/MushroomBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/MushroomBlock.java.patch @@ -1,23 +1,23 @@ --- a/net/minecraft/world/level/block/MushroomBlock.java +++ b/net/minecraft/world/level/block/MushroomBlock.java -@@ -82,7 +_,7 @@ - protected boolean canSurvive(BlockState p_54880_, LevelReader p_54881_, BlockPos p_54882_) { - BlockPos blockpos = p_54882_.below(); - BlockState blockstate = p_54881_.getBlockState(blockpos); -- return blockstate.is(BlockTags.MUSHROOM_GROW_BLOCK) ? true : p_54881_.getRawBrightness(p_54882_, 0) < 13 && this.mayPlaceOn(blockstate, p_54881_, blockpos); -+ return blockstate.is(BlockTags.MUSHROOM_GROW_BLOCK) ? true : p_54881_.getRawBrightness(p_54882_, 0) < 13 && blockstate.canSustainPlant(p_54881_, blockpos, net.minecraft.core.Direction.UP, this); +@@ -86,7 +_,7 @@ + BlockState blockstate = level.getBlockState(blockpos); + return blockstate.is(BlockTags.OVERRIDES_MUSHROOM_LIGHT_REQUIREMENT) + ? true +- : level.getRawBrightness(pos, 0) < 13 && this.mayPlaceOn(blockstate, level, blockpos); ++ : level.getRawBrightness(pos, 0) < 13 && blockstate.canSustainPlant(level, blockpos, net.minecraft.core.Direction.UP, this); } - public boolean growMushroom(ServerLevel p_221774_, BlockPos p_221775_, BlockState p_221776_, RandomSource p_221777_) { -@@ -90,8 +_,10 @@ + public boolean growMushroom(final ServerLevel level, final BlockPos pos, final BlockState state, final RandomSource random) { +@@ -94,8 +_,10 @@ if (optional.isEmpty()) { return false; } else { -+ var event = net.minecraftforge.event.ForgeEventFactory.blockGrowFeature(p_221774_, p_221777_, p_221775_, optional.get()); ++ var event = net.minecraftforge.event.ForgeEventFactory.blockGrowFeature(level, random, pos, optional.get()); + if (event.getResult().isDenied()) return false; - p_221774_.removeBlock(p_221775_, false); -- if (optional.get().value().place(p_221774_, p_221774_.getChunkSource().getGenerator(), p_221777_, p_221775_)) { -+ if (event.getFeature().value().place(p_221774_, p_221774_.getChunkSource().getGenerator(), p_221777_, p_221775_)) { + level.removeBlock(pos, false); +- if (optional.get().value().place(level, level.getChunkSource().getGenerator(), random, pos)) { ++ if (event.getFeature().value().place(level, level.getChunkSource().getGenerator(), random, pos)) { return true; } else { - p_221774_.setBlock(p_221775_, p_221776_, 3); + level.setBlock(pos, state, 3); diff --git a/patches/minecraft/net/minecraft/world/level/block/NetherFungusBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/NetherFungusBlock.java.patch new file mode 100644 index 0000000000..26a4807f44 --- /dev/null +++ b/patches/minecraft/net/minecraft/world/level/block/NetherFungusBlock.java.patch @@ -0,0 +1,13 @@ +--- a/net/minecraft/world/level/block/NetherFungusBlock.java ++++ b/net/minecraft/world/level/block/NetherFungusBlock.java +@@ -82,5 +_,10 @@ + @Override + public void performBonemeal(final ServerLevel level, final RandomSource random, final BlockPos pos, final BlockState state) { + this.getFeature(level).ifPresent(feature -> feature.value().place(level, level.getChunkSource().getGenerator(), random, pos)); ++ this.getFeature(level).ifPresent(feature -> { ++ var event = net.minecraftforge.event.ForgeEventFactory.blockGrowFeature(level, random, pos, feature); ++ if (event.getResult().isDenied()) return; ++ event.getFeature().value().place(level, level.getChunkSource().getGenerator(), random, pos); ++ }); + } + } diff --git a/patches/minecraft/net/minecraft/world/level/block/NetherWartBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/NetherWartBlock.java.patch index 7e84ccf5f1..46dc3bb4e8 100644 --- a/patches/minecraft/net/minecraft/world/level/block/NetherWartBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/NetherWartBlock.java.patch @@ -1,14 +1,14 @@ --- a/net/minecraft/world/level/block/NetherWartBlock.java +++ b/net/minecraft/world/level/block/NetherWartBlock.java -@@ -50,9 +_,10 @@ +@@ -51,9 +_,10 @@ @Override - protected void randomTick(BlockState p_221806_, ServerLevel p_221807_, BlockPos p_221808_, RandomSource p_221809_) { - int i = p_221806_.getValue(AGE); -- if (i < 3 && p_221809_.nextInt(10) == 0) { -+ if (i < 3 && net.minecraftforge.common.ForgeHooks.onCropsGrowPre(p_221807_, p_221808_, p_221806_, p_221809_.nextInt(10) == 0)) { - p_221806_ = p_221806_.setValue(AGE, i + 1); - p_221807_.setBlock(p_221808_, p_221806_, 2); -+ net.minecraftforge.common.ForgeHooks.onCropsGrowPost(p_221807_, p_221808_, p_221806_); + protected void randomTick(BlockState state, final ServerLevel level, final BlockPos pos, final RandomSource random) { + int i = state.getValue(AGE); +- if (i < 3 && random.nextInt(10) == 0) { ++ if (i < 3 && net.minecraftforge.common.ForgeHooks.onCropsGrowPre(level, pos, state, random.nextInt(10) == 0)) { + state = state.setValue(AGE, i + 1); + level.setBlock(pos, state, 2); ++ net.minecraftforge.common.ForgeHooks.onCropsGrowPost(level, pos, state); } } diff --git a/patches/minecraft/net/minecraft/world/level/block/NoteBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/NoteBlock.java.patch index 83c9a6f116..50b155b569 100644 --- a/patches/minecraft/net/minecraft/world/level/block/NoteBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/NoteBlock.java.patch @@ -1,23 +1,29 @@ --- a/net/minecraft/world/level/block/NoteBlock.java +++ b/net/minecraft/world/level/block/NoteBlock.java -@@ -115,7 +_,9 @@ +@@ -123,7 +_,9 @@ @Override - protected InteractionResult useWithoutItem(BlockState p_331116_, Level p_332131_, BlockPos p_333586_, Player p_329332_, BlockHitResult p_331978_) { - if (!p_332131_.isClientSide()) { -- p_331116_ = p_331116_.cycle(NOTE); -+ int _new = net.minecraftforge.common.ForgeHooks.onNoteChange(p_332131_, p_333586_, p_331116_, p_331116_.getValue(NOTE), p_331116_.cycle(NOTE).getValue(NOTE)); + protected InteractionResult useWithoutItem(BlockState state, final Level level, final BlockPos pos, final Player player, final BlockHitResult hitResult) { + if (!level.isClientSide()) { +- state = state.cycle(NOTE); ++ int _new = net.minecraftforge.common.ForgeHooks.onNoteChange(level, pos, state, state.getValue(NOTE), state.cycle(NOTE).getValue(NOTE)); + if (_new == -1) return InteractionResult.FAIL; -+ p_331116_ = p_331116_.setValue(NOTE, _new); - p_332131_.setBlock(p_333586_, p_331116_, 3); - this.playNote(p_329332_, p_331116_, p_332131_, p_333586_); - p_329332_.awardStat(Stats.TUNE_NOTEBLOCK); -@@ -138,6 +_,9 @@ ++ state = state.setValue(NOTE, _new); + level.setBlock(pos, state, 3); + this.playNote(player, state, level, pos); + player.awardStat(Stats.TUNE_NOTEBLOCK); +@@ -146,10 +_,13 @@ @Override - protected boolean triggerEvent(BlockState p_55023_, Level p_55024_, BlockPos p_55025_, int p_55026_, int p_55027_) { -+ var event = net.minecraftforge.event.ForgeEventFactory.onNotePlay(p_55024_, p_55025_, p_55023_, p_55023_.getValue(NOTE), p_55023_.getValue(INSTRUMENT)); + protected boolean triggerEvent(final BlockState state, final Level level, final BlockPos pos, final int b0, final int b1) { +- NoteBlockInstrument noteblockinstrument = state.getValue(INSTRUMENT); ++ var event = net.minecraftforge.event.ForgeEventFactory.onNotePlay(level, pos, state, state.getValue(NOTE), state.getValue(INSTRUMENT)); + if (event == null) return false; -+ p_55023_ = p_55023_.setValue(NOTE, event.getVanillaNoteId()).setValue(INSTRUMENT, event.getInstrument()); - NoteBlockInstrument noteblockinstrument = p_55023_.getValue(INSTRUMENT); ++ var newState = state.setValue(NOTE, event.getVanillaNoteId()).setValue(INSTRUMENT, event.getInstrument()); ++ NoteBlockInstrument noteblockinstrument = newState.getValue(INSTRUMENT); float f; if (noteblockinstrument.isTunable()) { +- int i = state.getValue(NOTE); ++ int i = newState.getValue(NOTE); + f = getPitchFromNote(i); + level.addParticle(ParticleTypes.NOTE, pos.getX() + 0.5, pos.getY() + 1.2, pos.getZ() + 0.5, i / 24.0, 0.0, 0.0); + } else { diff --git a/patches/minecraft/net/minecraft/world/level/block/PitcherCropBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/PitcherCropBlock.java.patch index b0989645a5..5364f59da5 100644 --- a/patches/minecraft/net/minecraft/world/level/block/PitcherCropBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/PitcherCropBlock.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/level/block/PitcherCropBlock.java +++ b/net/minecraft/world/level/block/PitcherCropBlock.java -@@ -106,7 +_,7 @@ +@@ -107,7 +_,7 @@ @Override - protected boolean mayPlaceOn(BlockState p_277418_, BlockGetter p_277461_, BlockPos p_277608_) { -- return p_277418_.is(Blocks.FARMLAND); -+ return p_277418_.getBlock() instanceof net.minecraft.world.level.block.FarmBlock; + protected boolean mayPlaceOn(final BlockState state, final BlockGetter level, final BlockPos pos) { +- return state.is(BlockTags.SUPPORTS_CROPS); ++ return state.getBlock() instanceof FarmlandBlock; } @Override diff --git a/patches/minecraft/net/minecraft/world/level/block/PowderSnowBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/PowderSnowBlock.java.patch index a5fc424b97..5ec3357886 100644 --- a/patches/minecraft/net/minecraft/world/level/block/PowderSnowBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/PowderSnowBlock.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/level/block/PowderSnowBlock.java +++ b/net/minecraft/world/level/block/PowderSnowBlock.java -@@ -138,7 +_,7 @@ - if (p_154256_.getType().is(EntityTypeTags.POWDER_SNOW_WALKABLE_MOBS)) { +@@ -145,7 +_,7 @@ + if (entity.is(EntityTypeTags.POWDER_SNOW_WALKABLE_MOBS)) { return true; } else { -- return p_154256_ instanceof LivingEntity ? ((LivingEntity)p_154256_).getItemBySlot(EquipmentSlot.FEET).is(Items.LEATHER_BOOTS) : false; -+ return p_154256_ instanceof LivingEntity ? ((LivingEntity)p_154256_).getItemBySlot(EquipmentSlot.FEET).canWalkOnPowderedSnow((LivingEntity)p_154256_) : false; +- return entity instanceof LivingEntity ? ((LivingEntity)entity).getItemBySlot(EquipmentSlot.FEET).is(Items.LEATHER_BOOTS) : false; ++ return entity instanceof LivingEntity ? ((LivingEntity)entity).getItemBySlot(EquipmentSlot.FEET).canWalkOnPowderedSnow((LivingEntity)entity) : false; } } diff --git a/patches/minecraft/net/minecraft/world/level/block/PoweredRailBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/PoweredRailBlock.java.patch index 08e6a86491..dd15e2e28a 100644 --- a/patches/minecraft/net/minecraft/world/level/block/PoweredRailBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/PoweredRailBlock.java.patch @@ -11,12 +11,12 @@ @@ -23,7 +_,16 @@ } - public PoweredRailBlock(BlockBehaviour.Properties p_55218_) { -+ this(p_55218_, false); + public PoweredRailBlock(final BlockBehaviour.Properties properties) { ++ this(properties, false); + } + -+ protected PoweredRailBlock(BlockBehaviour.Properties p_55218_, boolean isPoweredRail) { - super(true, p_55218_); ++ protected PoweredRailBlock(final BlockBehaviour.Properties properties, boolean isPoweredRail) { + super(true, properties); + this.isActivator = !isPoweredRail; + this.registerDefaultState(); + } @@ -26,51 +26,51 @@ } @@ -35,7 +_,7 @@ - int j = p_55221_.getY(); - int k = p_55221_.getZ(); + int j = pos.getY(); + int k = pos.getZ(); boolean flag = true; -- RailShape railshape = p_55222_.getValue(SHAPE); -+ RailShape railshape = p_55222_.getValue(getShapeProperty()); +- RailShape railshape = state.getValue(SHAPE); ++ RailShape railshape = state.getValue(getShapeProperty()); switch (railshape) { case NORTH_SOUTH: - if (p_55223_) { + if (forward) { @@ -104,10 +_,10 @@ - protected boolean isSameRailWithPower(Level p_55226_, BlockPos p_55227_, boolean p_55228_, int p_55229_, RailShape p_55230_) { - BlockState blockstate = p_55226_.getBlockState(p_55227_); + protected boolean isSameRailWithPower(final Level level, final BlockPos pos, final boolean forward, final int searchDepth, final RailShape dir) { + BlockState blockstate = level.getBlockState(pos); - if (!blockstate.is(this)) { + if (!(blockstate.getBlock() instanceof PoweredRailBlock other) || this.isActivatorRail() != other.isActivatorRail()) { return false; } else { - RailShape railshape = blockstate.getValue(SHAPE); -+ RailShape railshape = other.getRailDirection(blockstate, p_55226_, p_55227_, null); - if (p_55230_ != RailShape.EAST_WEST ++ RailShape railshape = other.getRailDirection(blockstate, level, pos, null); + if (dir != RailShape.EAST_WEST || railshape != RailShape.NORTH_SOUTH && railshape != RailShape.ASCENDING_NORTH && railshape != RailShape.ASCENDING_SOUTH) { - if (p_55230_ != RailShape.NORTH_SOUTH + if (dir != RailShape.NORTH_SOUTH @@ -115,7 +_,7 @@ if (!blockstate.getValue(POWERED)) { return false; } else { -- return p_55226_.hasNeighborSignal(p_55227_) ? true : this.findPoweredRailSignal(p_55226_, p_55227_, blockstate, p_55228_, p_55229_ + 1); -+ return p_55226_.hasNeighborSignal(p_55227_) ? true : other.findPoweredRailSignal(p_55226_, p_55227_, blockstate, p_55228_, p_55229_ + 1); +- return level.hasNeighborSignal(pos) ? true : this.findPoweredRailSignal(level, pos, blockstate, forward, searchDepth + 1); ++ return level.hasNeighborSignal(pos) ? true : other.findPoweredRailSignal(level, pos, blockstate, forward, searchDepth + 1); } } else { return false; @@ -135,7 +_,7 @@ if (flag1 != flag) { - p_55233_.setBlock(p_55234_, p_55232_.setValue(POWERED, flag1), 3); - p_55233_.updateNeighborsAt(p_55234_.below(), this); -- if (p_55232_.getValue(SHAPE).isSlope()) { -+ if (p_55232_.getValue(getShapeProperty()).isSlope()) { - p_55233_.updateNeighborsAt(p_55234_.above(), this); + level.setBlock(pos, state.setValue(POWERED, flag1), 3); + level.updateNeighborsAt(pos.below(), this); +- if (state.getValue(SHAPE).isSlope()) { ++ if (state.getValue(getShapeProperty()).isSlope()) { + level.updateNeighborsAt(pos.above(), this); } } @@ -162,6 +_,10 @@ @Override - protected void createBlockStateDefinition(StateDefinition.Builder p_55243_) { -- p_55243_.add(SHAPE, POWERED, WATERLOGGED); -+ p_55243_.add(getShapeProperty(), POWERED, WATERLOGGED); + protected void createBlockStateDefinition(final StateDefinition.Builder builder) { +- builder.add(SHAPE, POWERED, WATERLOGGED); ++ builder.add(getShapeProperty(), POWERED, WATERLOGGED); + } + + public boolean isActivatorRail() { diff --git a/patches/minecraft/net/minecraft/world/level/block/PumpkinBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/PumpkinBlock.java.patch index 2e9a974903..1083fad13e 100644 --- a/patches/minecraft/net/minecraft/world/level/block/PumpkinBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/PumpkinBlock.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/level/block/PumpkinBlock.java +++ b/net/minecraft/world/level/block/PumpkinBlock.java -@@ -36,7 +_,7 @@ - protected InteractionResult useItemOn( - ItemStack p_330568_, BlockState p_330263_, Level p_327756_, BlockPos p_328675_, Player p_334049_, InteractionHand p_331851_, BlockHitResult p_329008_ +@@ -43,7 +_,7 @@ + final InteractionHand hand, + final BlockHitResult hitResult ) { -- if (!p_330568_.is(Items.SHEARS)) { -+ if (!p_330568_.canPerformAction(net.minecraftforge.common.ToolActions.SHEARS_CARVE)) { - return super.useItemOn(p_330568_, p_330263_, p_327756_, p_328675_, p_334049_, p_331851_, p_329008_); - } else if (p_327756_ instanceof ServerLevel serverlevel) { - Direction direction = p_329008_.getDirection(); +- if (!itemStack.is(Items.SHEARS)) { ++ if (!itemStack.canPerformAction(net.minecraftforge.common.ToolActions.SHEARS_CARVE)) { + return super.useItemOn(itemStack, state, level, pos, player, hand, hitResult); + } else if (level instanceof ServerLevel serverlevel) { + Direction direction = hitResult.getDirection(); diff --git a/patches/minecraft/net/minecraft/world/level/block/RailState.java.patch b/patches/minecraft/net/minecraft/world/level/block/RailState.java.patch index a87024673a..53327dbcbd 100644 --- a/patches/minecraft/net/minecraft/world/level/block/RailState.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/RailState.java.patch @@ -6,20 +6,20 @@ private final List connections = Lists.newArrayList(); + private final boolean canMakeSlopes; - public RailState(Level p_55421_, BlockPos p_55422_, BlockState p_55423_) { - this.level = p_55421_; - this.pos = p_55422_; - this.state = p_55423_; - this.block = (BaseRailBlock)p_55423_.getBlock(); -- RailShape railshape = p_55423_.getValue(this.block.getShapeProperty()); + public RailState(final Level level, final BlockPos pos, final BlockState state) { + this.level = level; + this.pos = pos; + this.state = state; + this.block = (BaseRailBlock)state.getBlock(); +- RailShape railshape = state.getValue(this.block.getShapeProperty()); - this.isStraight = this.block.isStraight(); -+ RailShape railshape = this.block.getRailDirection(state, p_55421_, p_55422_, null); -+ this.isStraight = !this.block.isFlexibleRail(state, p_55421_, p_55422_); -+ this.canMakeSlopes = this.block.canMakeSlopes(state, p_55421_, p_55422_); ++ RailShape railshape = this.block.getRailDirection(state, level, pos, null); ++ this.isStraight = !this.block.isFlexibleRail(state, level, pos); ++ this.canMakeSlopes = this.block.canMakeSlopes(state, level, pos); this.updateConnections(railshape); } -@@ -178,7 +_,7 @@ +@@ -176,7 +_,7 @@ } } @@ -28,7 +28,7 @@ if (BaseRailBlock.isRail(this.level, blockpos.above())) { railshape = RailShape.ASCENDING_NORTH; } -@@ -188,7 +_,7 @@ +@@ -186,7 +_,7 @@ } } @@ -37,19 +37,19 @@ if (BaseRailBlock.isRail(this.level, blockpos3.above())) { railshape = RailShape.ASCENDING_EAST; } -@@ -200,6 +_,11 @@ +@@ -198,6 +_,11 @@ if (railshape == null) { railshape = RailShape.NORTH_SOUTH; + } + + if (!this.block.isValidRailShape(railshape)) { // Forge: allow rail block to decide if the new shape is valid -+ this.connections.remove(p_55442_.pos); ++ this.connections.remove(rail.pos); + return; } this.state = this.state.setValue(this.block.getShapeProperty(), railshape); -@@ -304,7 +_,7 @@ +@@ -302,7 +_,7 @@ } } @@ -58,7 +58,7 @@ if (BaseRailBlock.isRail(this.level, blockpos.above())) { railshape = RailShape.ASCENDING_NORTH; } -@@ -314,7 +_,7 @@ +@@ -312,7 +_,7 @@ } } @@ -67,12 +67,12 @@ if (BaseRailBlock.isRail(this.level, blockpos3.above())) { railshape = RailShape.ASCENDING_EAST; } -@@ -324,7 +_,7 @@ +@@ -322,7 +_,7 @@ } } - if (railshape == null) { + if (railshape == null || !this.block.isValidRailShape(railshape)) { // Forge: allow rail block to decide if the new shape is valid - railshape = p_55434_; + railshape = defaultShape; } diff --git a/patches/minecraft/net/minecraft/world/level/block/RedStoneOreBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/RedStoneOreBlock.java.patch index b9d8f1c263..0f803fc4b1 100644 --- a/patches/minecraft/net/minecraft/world/level/block/RedStoneOreBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/RedStoneOreBlock.java.patch @@ -1,17 +1,17 @@ --- a/net/minecraft/world/level/block/RedStoneOreBlock.java +++ b/net/minecraft/world/level/block/RedStoneOreBlock.java -@@ -87,7 +_,7 @@ +@@ -93,7 +_,7 @@ @Override - protected void spawnAfterBreak(BlockState p_221907_, ServerLevel p_221908_, BlockPos p_221909_, ItemStack p_221910_, boolean p_221911_) { - super.spawnAfterBreak(p_221907_, p_221908_, p_221909_, p_221910_, p_221911_); -- if (p_221911_) { -+ if (false && p_221911_) { // Forge: moved to getExpDrop - this.tryDropExperience(p_221908_, p_221909_, p_221910_, UniformInt.of(1, 5)); + protected void spawnAfterBreak(final BlockState state, final ServerLevel level, final BlockPos pos, final ItemStack tool, final boolean dropExperience) { + super.spawnAfterBreak(state, level, pos, tool, dropExperience); +- if (dropExperience) { ++ if (false && dropExperience) { // Forge: moved to getExpDrop + this.tryDropExperience(level, pos, tool, UniformInt.of(1, 5)); } } -@@ -119,4 +_,10 @@ - protected void createBlockStateDefinition(StateDefinition.Builder p_55484_) { - p_55484_.add(LIT); +@@ -125,4 +_,10 @@ + protected void createBlockStateDefinition(final StateDefinition.Builder builder) { + builder.add(LIT); } + + @Override diff --git a/patches/minecraft/net/minecraft/world/level/block/RedStoneWireBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/RedStoneWireBlock.java.patch index 7a6dd0f0ef..108ccb12bd 100644 --- a/patches/minecraft/net/minecraft/world/level/block/RedStoneWireBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/RedStoneWireBlock.java.patch @@ -1,28 +1,29 @@ --- a/net/minecraft/world/level/block/RedStoneWireBlock.java +++ b/net/minecraft/world/level/block/RedStoneWireBlock.java -@@ -238,7 +_,7 @@ - BlockState blockstate = p_55523_.getBlockState(blockpos); - if (p_55526_) { - boolean flag = blockstate.getBlock() instanceof TrapDoorBlock || this.canSurviveOn(p_55523_, blockpos, blockstate); -- if (flag && shouldConnectTo(p_55523_.getBlockState(blockpos.above()))) { -+ if (flag && p_55523_.getBlockState(blockpos.above()).canRedstoneConnectTo(p_55523_, blockpos.above(), null)) { - if (blockstate.isFaceSturdy(p_55523_, blockpos, p_55525_.getOpposite())) { +@@ -244,7 +_,7 @@ + BlockState blockstate = level.getBlockState(blockpos); + if (canConnectUp) { + boolean flag = blockstate.getBlock() instanceof TrapDoorBlock || this.canSurviveOn(level, blockpos, blockstate); +- if (flag && shouldConnectTo(level.getBlockState(blockpos.above()))) { ++ if (flag && level.getBlockState(blockpos.above()).canRedstoneConnectTo(level, blockpos.above(), null)) { + if (blockstate.isFaceSturdy(level, blockpos, direction.getOpposite())) { return RedstoneSide.UP; } -@@ -247,9 +_,14 @@ +@@ -253,10 +_,14 @@ } } -- return !shouldConnectTo(blockstate, p_55525_) && (blockstate.isRedstoneConductor(p_55523_, blockpos) || !shouldConnectTo(p_55523_.getBlockState(blockpos.below()))) +- return !shouldConnectTo(blockstate, direction) +- && (blockstate.isRedstoneConductor(level, blockpos) || !shouldConnectTo(level.getBlockState(blockpos.below()))) - ? RedstoneSide.NONE - : RedstoneSide.SIDE; -+ if (blockstate.canRedstoneConnectTo(p_55523_, blockpos, p_55525_)) { ++ if (blockstate.canRedstoneConnectTo(level, blockpos, direction)) { + return RedstoneSide.SIDE; -+ } else if (blockstate.isRedstoneConductor(p_55523_, blockpos)) { ++ } else if (blockstate.isRedstoneConductor(level, blockpos)) { + return RedstoneSide.NONE; + } else { + BlockPos blockPosBelow = blockpos.below(); -+ return p_55523_.getBlockState(blockPosBelow).canRedstoneConnectTo(p_55523_, blockPosBelow, null) ? RedstoneSide.SIDE : RedstoneSide.NONE; ++ return level.getBlockState(blockPosBelow).canRedstoneConnectTo(level, blockPosBelow, null) ? RedstoneSide.SIDE : RedstoneSide.NONE; + } } diff --git a/patches/minecraft/net/minecraft/world/level/block/SaplingBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/SaplingBlock.java.patch index e1f462acdd..cc52c409f2 100644 --- a/patches/minecraft/net/minecraft/world/level/block/SaplingBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/SaplingBlock.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/world/level/block/SaplingBlock.java +++ b/net/minecraft/world/level/block/SaplingBlock.java -@@ -45,6 +_,7 @@ +@@ -44,6 +_,7 @@ @Override - protected void randomTick(BlockState p_222011_, ServerLevel p_222012_, BlockPos p_222013_, RandomSource p_222014_) { -+ if (!p_222012_.isAreaLoaded(p_222013_, 1)) return; // Forge: prevent loading unloaded chunks when checking neighbor's light - if (p_222012_.getMaxLocalRawBrightness(p_222013_.above()) >= 9 && p_222014_.nextInt(7) == 0) { - this.advanceTree(p_222012_, p_222013_, p_222011_, p_222014_); + protected void randomTick(final BlockState state, final ServerLevel level, final BlockPos pos, final RandomSource random) { ++ if (!level.isAreaLoaded(pos, 1)) return; // Forge: prevent loading unloaded chunks when checking neighbor's light + if (level.getMaxLocalRawBrightness(pos.above()) >= 9 && random.nextInt(7) == 0) { + this.advanceTree(level, pos, state, random); } diff --git a/patches/minecraft/net/minecraft/world/level/block/SculkCatalystBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/SculkCatalystBlock.java.patch index ba6a3d25cc..4c76d9a712 100644 --- a/patches/minecraft/net/minecraft/world/level/block/SculkCatalystBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/SculkCatalystBlock.java.patch @@ -2,11 +2,11 @@ +++ b/net/minecraft/world/level/block/SculkCatalystBlock.java @@ -59,8 +_,13 @@ @Override - protected void spawnAfterBreak(BlockState p_222109_, ServerLevel p_222110_, BlockPos p_222111_, ItemStack p_222112_, boolean p_222113_) { - super.spawnAfterBreak(p_222109_, p_222110_, p_222111_, p_222112_, p_222113_); -- if (p_222113_) { -+ if (false && p_222113_) { // Forge Moved to getExpDrop - this.tryDropExperience(p_222110_, p_222111_, p_222112_, this.xpRange); + protected void spawnAfterBreak(final BlockState state, final ServerLevel level, final BlockPos pos, final ItemStack tool, final boolean dropExperience) { + super.spawnAfterBreak(state, level, pos, tool, dropExperience); +- if (dropExperience) { ++ if (false && dropExperience) { // Forge Moved to getExpDrop + this.tryDropExperience(level, pos, tool, this.xpRange); } + } + diff --git a/patches/minecraft/net/minecraft/world/level/block/SculkSensorBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/SculkSensorBlock.java.patch index 1eafb2b4ec..51d7f66788 100644 --- a/patches/minecraft/net/minecraft/world/level/block/SculkSensorBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/SculkSensorBlock.java.patch @@ -1,12 +1,12 @@ --- a/net/minecraft/world/level/block/SculkSensorBlock.java +++ b/net/minecraft/world/level/block/SculkSensorBlock.java -@@ -280,8 +_,13 @@ +@@ -287,8 +_,13 @@ @Override - protected void spawnAfterBreak(BlockState p_222142_, ServerLevel p_222143_, BlockPos p_222144_, ItemStack p_222145_, boolean p_222146_) { - super.spawnAfterBreak(p_222142_, p_222143_, p_222144_, p_222145_, p_222146_); -- if (p_222146_) { -+ if (false && p_222146_) { // Forge: Moved to getExpDrop - this.tryDropExperience(p_222143_, p_222144_, p_222145_, ConstantInt.of(5)); + protected void spawnAfterBreak(final BlockState state, final ServerLevel level, final BlockPos pos, final ItemStack tool, final boolean dropExperience) { + super.spawnAfterBreak(state, level, pos, tool, dropExperience); +- if (dropExperience) { ++ if (false && dropExperience) { // Forge: Moved to getExpDrop + this.tryDropExperience(level, pos, tool, ConstantInt.of(5)); } + } + diff --git a/patches/minecraft/net/minecraft/world/level/block/SculkShriekerBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/SculkShriekerBlock.java.patch index 86d8ae810e..4b9bbc3160 100644 --- a/patches/minecraft/net/minecraft/world/level/block/SculkShriekerBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/SculkShriekerBlock.java.patch @@ -2,15 +2,15 @@ +++ b/net/minecraft/world/level/block/SculkShriekerBlock.java @@ -126,7 +_,7 @@ @Override - protected void spawnAfterBreak(BlockState p_222192_, ServerLevel p_222193_, BlockPos p_222194_, ItemStack p_222195_, boolean p_222196_) { - super.spawnAfterBreak(p_222192_, p_222193_, p_222194_, p_222195_, p_222196_); -- if (p_222196_) { -+ if (false && p_222196_) { // Forge: Moved to getExpDrop - this.tryDropExperience(p_222193_, p_222194_, p_222195_, ConstantInt.of(5)); + protected void spawnAfterBreak(final BlockState state, final ServerLevel level, final BlockPos pos, final ItemStack tool, final boolean dropExperience) { + super.spawnAfterBreak(state, level, pos, tool, dropExperience); +- if (dropExperience) { ++ if (false && dropExperience) { // Forge: Moved to getExpDrop + this.tryDropExperience(level, pos, tool, ConstantInt.of(5)); } } @@ -140,5 +_,10 @@ - (p_281134_, p_281135_, p_281136_, p_281137_) -> VibrationSystem.Ticker.tick(p_281134_, p_281137_.getVibrationData(), p_281137_.getVibrationUser()) + (innerLevel, pos, state, entity) -> VibrationSystem.Ticker.tick(innerLevel, entity.getVibrationData(), entity.getVibrationUser()) ) : null; + } diff --git a/patches/minecraft/net/minecraft/world/level/block/SeagrassBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/SeagrassBlock.java.patch index ebc600e967..f8b570e664 100644 --- a/patches/minecraft/net/minecraft/world/level/block/SeagrassBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/SeagrassBlock.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/SeagrassBlock.java +++ b/net/minecraft/world/level/block/SeagrassBlock.java -@@ -23,7 +_,7 @@ +@@ -24,7 +_,7 @@ import net.minecraft.world.phys.shapes.VoxelShape; import org.jspecify.annotations.Nullable; diff --git a/patches/minecraft/net/minecraft/world/level/block/SoundType.java.patch b/patches/minecraft/net/minecraft/world/level/block/SoundType.java.patch index 402e3f848c..998f15ccf0 100644 --- a/patches/minecraft/net/minecraft/world/level/block/SoundType.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/SoundType.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/world/level/block/SoundType.java +++ b/net/minecraft/world/level/block/SoundType.java -@@ -381,6 +_,7 @@ +@@ -831,6 +_,7 @@ private final SoundEvent hitSound; private final SoundEvent fallSound; -+ @Deprecated // Forge: Use {@link net.minecraftforge.common.util.ForgeSoundType} instead for suppliers - public SoundType(float p_56766_, float p_56767_, SoundEvent p_56768_, SoundEvent p_56769_, SoundEvent p_56770_, SoundEvent p_56771_, SoundEvent p_56772_) { - this.volume = p_56766_; - this.pitch = p_56767_; ++ /** @deprecated Forge: Use {@link net.minecraftforge.common.util.ForgeSoundType} instead for suppliers */ + public SoundType( + final float volume, + final float pitch, diff --git a/patches/minecraft/net/minecraft/world/level/block/SpawnerBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/SpawnerBlock.java.patch index db83564374..4d8cda0d3b 100644 --- a/patches/minecraft/net/minecraft/world/level/block/SpawnerBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/SpawnerBlock.java.patch @@ -1,13 +1,14 @@ --- a/net/minecraft/world/level/block/SpawnerBlock.java +++ b/net/minecraft/world/level/block/SpawnerBlock.java -@@ -38,9 +_,14 @@ +@@ -39,10 +_,15 @@ @Override - protected void spawnAfterBreak(BlockState p_222477_, ServerLevel p_222478_, BlockPos p_222479_, ItemStack p_222480_, boolean p_222481_) { - super.spawnAfterBreak(p_222477_, p_222478_, p_222479_, p_222480_, p_222481_); -- if (p_222481_) { -+ if (false && p_222481_) { // Forge: moved to getExpDrop - int i = 15 + p_222478_.random.nextInt(15) + p_222478_.random.nextInt(15); - this.popExperience(p_222478_, p_222479_, i); + protected void spawnAfterBreak(final BlockState state, final ServerLevel level, final BlockPos pos, final ItemStack tool, final boolean dropExperience) { + super.spawnAfterBreak(state, level, pos, tool, dropExperience); +- if (dropExperience) { ++ if (false && dropExperience) { // Forge: moved to getExpDrop + RandomSource randomsource = level.getRandom(); + int i = 15 + randomsource.nextInt(15) + randomsource.nextInt(15); + this.popExperience(level, pos, i); } + } + diff --git a/patches/minecraft/net/minecraft/world/level/block/SpongeBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/SpongeBlock.java.patch index 4b053b12c7..0fc44ada10 100644 --- a/patches/minecraft/net/minecraft/world/level/block/SpongeBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/SpongeBlock.java.patch @@ -1,19 +1,19 @@ --- a/net/minecraft/world/level/block/SpongeBlock.java +++ b/net/minecraft/world/level/block/SpongeBlock.java -@@ -51,6 +_,7 @@ +@@ -53,6 +_,7 @@ } - private boolean removeWaterBreadthFirstSearch(Level p_56808_, BlockPos p_56809_) { -+ BlockState spongeState = p_56808_.getBlockState(p_56809_); + private boolean removeWaterBreadthFirstSearch(final Level level, final BlockPos startPos) { ++ BlockState spongeState = level.getBlockState(startPos); return BlockPos.breadthFirstTraversal( - p_56809_, + startPos, 6, -@@ -66,7 +_,7 @@ +@@ -68,7 +_,7 @@ } else { - BlockState blockstate = p_56808_.getBlockState(p_296944_); - FluidState fluidstate = p_56808_.getFluidState(p_296944_); + BlockState blockstate = level.getBlockState(pos); + FluidState fluidstate = level.getFluidState(pos); - if (!fluidstate.is(FluidTags.WATER)) { -+ if (!spongeState.canBeHydrated(p_56808_, p_56809_, fluidstate, p_296944_)) { ++ if (!spongeState.canBeHydrated(level, startPos, fluidstate, pos)) { return BlockPos.TraversalNodeStatus.SKIP; } else if (blockstate.getBlock() instanceof BucketPickup bucketpickup - && !bucketpickup.pickupBlock(null, p_56808_, p_296944_, blockstate).isEmpty()) { + && !bucketpickup.pickupBlock(null, level, pos, blockstate).isEmpty()) { diff --git a/patches/minecraft/net/minecraft/world/level/block/SpreadingSnowyBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/SpreadingSnowyBlock.java.patch new file mode 100644 index 0000000000..f662040538 --- /dev/null +++ b/patches/minecraft/net/minecraft/world/level/block/SpreadingSnowyBlock.java.patch @@ -0,0 +1,13 @@ +--- a/net/minecraft/world/level/block/SpreadingSnowyBlock.java ++++ b/net/minecraft/world/level/block/SpreadingSnowyBlock.java +@@ -50,8 +_,10 @@ + Optional optional = registry.getOptional(this.baseBlock); + if (!optional.isEmpty()) { + if (!canStayAlive(state, level, pos)) { ++ if (!level.isAreaLoaded(pos, 1)) return; // Forge: prevent loading unloaded chunks when checking neighbor's light and spreading + level.setBlockAndUpdate(pos, optional.get().defaultBlockState()); + } else { ++ if (!level.isAreaLoaded(pos, 3)) return; // Forge: prevent loading unloaded chunks when checking neighbor's light and spreading + if (level.getMaxLocalRawBrightness(pos.above()) >= 9) { + BlockState blockstate = this.defaultBlockState(); + diff --git a/patches/minecraft/net/minecraft/world/level/block/SpreadingSnowyDirtBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/SpreadingSnowyDirtBlock.java.patch deleted file mode 100644 index 0c7f4162b8..0000000000 --- a/patches/minecraft/net/minecraft/world/level/block/SpreadingSnowyDirtBlock.java.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/net/minecraft/world/level/block/SpreadingSnowyDirtBlock.java -+++ b/net/minecraft/world/level/block/SpreadingSnowyDirtBlock.java -@@ -40,8 +_,10 @@ - @Override - protected void randomTick(BlockState p_222508_, ServerLevel p_222509_, BlockPos p_222510_, RandomSource p_222511_) { - if (!canBeGrass(p_222508_, p_222509_, p_222510_)) { -+ if (!p_222509_.isAreaLoaded(p_222510_, 1)) return; // Forge: prevent loading unloaded chunks when checking neighbor's light and spreading - p_222509_.setBlockAndUpdate(p_222510_, Blocks.DIRT.defaultBlockState()); - } else { -+ if (!p_222509_.isAreaLoaded(p_222510_, 3)) return; // Forge: prevent loading unloaded chunks when checking neighbor's light and spreading - if (p_222509_.getMaxLocalRawBrightness(p_222510_.above()) >= 9) { - BlockState blockstate = this.defaultBlockState(); - diff --git a/patches/minecraft/net/minecraft/world/level/block/StemBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/StemBlock.java.patch index e20f611ea8..24f643571d 100644 --- a/patches/minecraft/net/minecraft/world/level/block/StemBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/StemBlock.java.patch @@ -1,45 +1,45 @@ --- a/net/minecraft/world/level/block/StemBlock.java +++ b/net/minecraft/world/level/block/StemBlock.java -@@ -64,14 +_,16 @@ +@@ -77,14 +_,16 @@ @Override - protected boolean mayPlaceOn(BlockState p_57053_, BlockGetter p_57054_, BlockPos p_57055_) { -- return p_57053_.is(Blocks.FARMLAND); -+ return p_57053_.getBlock() instanceof net.minecraft.world.level.block.FarmBlock; + protected boolean mayPlaceOn(final BlockState state, final BlockGetter level, final BlockPos pos) { +- return state.is(this.stemSupportBlocks); ++ return state.is(this.stemSupportBlocks) || state.getBlock() instanceof FarmlandBlock; } @Override - protected void randomTick(BlockState p_222538_, ServerLevel p_222539_, BlockPos p_222540_, RandomSource p_222541_) { -+ if (!p_222539_.isAreaLoaded(p_222540_, 1)) return; // Forge: prevent loading unloaded chunks when checking neighbor's light - if (p_222539_.getRawBrightness(p_222540_, 0) >= 9) { - float f = CropBlock.getGrowthSpeed(this, p_222539_, p_222540_); -- if (p_222541_.nextInt((int)(25.0F / f) + 1) == 0) { -+ var vanilla = p_222541_.nextInt((int)(25.0F / f) + 1) == 0; -+ if (net.minecraftforge.common.ForgeHooks.onCropsGrowPre(p_222539_, p_222540_, p_222538_, vanilla)) { - int i = p_222538_.getValue(AGE); + protected void randomTick(BlockState state, final ServerLevel level, final BlockPos pos, final RandomSource random) { ++ if (!level.isAreaLoaded(pos, 1)) return; // Forge: prevent loading unloaded chunks when checking neighbor's light + if (level.getRawBrightness(pos, 0) >= 9) { + float f = CropBlock.getGrowthSpeed(this, level, pos); +- if (random.nextInt((int)(25.0F / f) + 1) == 0) { ++ var vanilla = random.nextInt((int)(25.0F / f) + 1) == 0; ++ if (net.minecraftforge.common.ForgeHooks.onCropsGrowPre(level, pos, state, vanilla)) { + int i = state.getValue(AGE); if (i < 7) { - p_222538_ = p_222538_.setValue(AGE, i + 1); -@@ -80,7 +_,7 @@ - Direction direction = Direction.Plane.HORIZONTAL.getRandomDirection(p_222541_); - BlockPos blockpos = p_222540_.relative(direction); - BlockState blockstate = p_222539_.getBlockState(blockpos.below()); -- if (p_222539_.getBlockState(blockpos).isAir() && (blockstate.is(Blocks.FARMLAND) || blockstate.is(BlockTags.DIRT))) { -+ if (p_222539_.getBlockState(blockpos).isAir() && (blockstate.getBlock() instanceof net.minecraft.world.level.block.FarmBlock || blockstate.is(BlockTags.DIRT))) { - Registry registry = p_222539_.registryAccess().lookupOrThrow(Registries.BLOCK); + state = state.setValue(AGE, i + 1); +@@ -93,7 +_,7 @@ + Direction direction = Direction.Plane.HORIZONTAL.getRandomDirection(random); + BlockPos blockpos = pos.relative(direction); + BlockState blockstate = level.getBlockState(blockpos.below()); +- if (level.getBlockState(blockpos).isAir() && blockstate.is(this.fruitSupportBlocks)) { ++ if (level.getBlockState(blockpos).isAir() && (blockstate.is(this.fruitSupportBlocks) || blockstate.getBlock() instanceof FarmlandBlock)) { + Registry registry = level.registryAccess().lookupOrThrow(Registries.BLOCK); Optional optional = registry.getOptional(this.fruit); Optional optional1 = registry.getOptional(this.attachedStem); -@@ -90,6 +_,7 @@ +@@ -103,6 +_,7 @@ } } } -+ net.minecraftforge.common.ForgeHooks.onCropsGrowPost(p_222539_, p_222540_, p_222538_); ++ net.minecraftforge.common.ForgeHooks.onCropsGrowPost(level, pos, state); } } } -@@ -122,5 +_,10 @@ +@@ -135,5 +_,10 @@ @Override - protected void createBlockStateDefinition(StateDefinition.Builder p_57040_) { - p_57040_.add(AGE); + protected void createBlockStateDefinition(final StateDefinition.Builder builder) { + builder.add(AGE); + } + + @Override diff --git a/patches/minecraft/net/minecraft/world/level/block/SugarCaneBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/SugarCaneBlock.java.patch index b3df9ca591..f8e563c098 100644 --- a/patches/minecraft/net/minecraft/world/level/block/SugarCaneBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/SugarCaneBlock.java.patch @@ -12,14 +12,14 @@ @@ -57,12 +_,15 @@ if (i < 3) { - int j = p_222548_.getValue(AGE); -+ if (net.minecraftforge.common.ForgeHooks.onCropsGrowPre(p_222549_, p_222550_, p_222548_, true)) { + int j = state.getValue(AGE); ++ if (net.minecraftforge.common.ForgeHooks.onCropsGrowPre(level, pos, state, true)) { if (j == 15) { - p_222549_.setBlockAndUpdate(p_222550_.above(), this.defaultBlockState()); -+ net.minecraftforge.common.ForgeHooks.onCropsGrowPost(p_222549_, p_222550_.above(), this.defaultBlockState()); - p_222549_.setBlock(p_222550_, p_222548_.setValue(AGE, 0), 260); + level.setBlockAndUpdate(pos.above(), this.defaultBlockState()); ++ net.minecraftforge.common.ForgeHooks.onCropsGrowPost(level, pos.above(), this.defaultBlockState()); + level.setBlock(pos, state.setValue(AGE, 0), 260); } else { - p_222549_.setBlock(p_222550_, p_222548_.setValue(AGE, j + 1), 260); + level.setBlock(pos, state.setValue(AGE, j + 1), 260); } + } } @@ -28,25 +28,25 @@ @@ -87,6 +_,8 @@ @Override - protected boolean canSurvive(BlockState p_57175_, LevelReader p_57176_, BlockPos p_57177_) { -+ BlockState soil = p_57176_.getBlockState(p_57177_.below()); -+ if (soil.canSustainPlant(p_57176_, p_57177_.below(), Direction.UP, this)) return true; - BlockState blockstate = p_57176_.getBlockState(p_57177_.below()); + protected boolean canSurvive(final BlockState state, final LevelReader level, final BlockPos pos) { ++ BlockState soil = level.getBlockState(pos.below()); ++ if (soil.canSustainPlant(level, pos.below(), Direction.UP, this)) return true; + BlockState blockstate = level.getBlockState(pos.below()); if (blockstate.is(this)) { return true; @@ -97,7 +_,7 @@ for (Direction direction : Direction.Plane.HORIZONTAL) { - BlockState blockstate1 = p_57176_.getBlockState(blockpos.relative(direction)); - FluidState fluidstate = p_57176_.getFluidState(blockpos.relative(direction)); -- if (fluidstate.is(FluidTags.WATER) || blockstate1.is(Blocks.FROSTED_ICE)) { -+ if (p_57175_.canBeHydrated(p_57176_, p_57177_, fluidstate, blockpos.relative(direction)) || blockstate1.is(Blocks.FROSTED_ICE)) { + BlockState blockstate1 = level.getBlockState(blockpos.relative(direction)); + FluidState fluidstate = level.getFluidState(blockpos.relative(direction)); +- if (fluidstate.is(FluidTags.SUPPORTS_SUGAR_CANE_ADJACENTLY) || blockstate1.is(BlockTags.SUPPORTS_SUGAR_CANE_ADJACENTLY)) { ++ if (fluidstate.is(FluidTags.SUPPORTS_SUGAR_CANE_ADJACENTLY) || blockstate1.is(BlockTags.SUPPORTS_SUGAR_CANE_ADJACENTLY) || state.canBeHydrated(level, pos, fluidstate, blockpos.relative(direction))) { return true; } } @@ -110,5 +_,15 @@ @Override - protected void createBlockStateDefinition(StateDefinition.Builder p_57186_) { - p_57186_.add(AGE); + protected void createBlockStateDefinition(final StateDefinition.Builder builder) { + builder.add(AGE); + } + + @Override diff --git a/patches/minecraft/net/minecraft/world/level/block/SweetBerryBushBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/SweetBerryBushBlock.java.patch index 7a53fe205a..949a436983 100644 --- a/patches/minecraft/net/minecraft/world/level/block/SweetBerryBushBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/SweetBerryBushBlock.java.patch @@ -2,14 +2,14 @@ +++ b/net/minecraft/world/level/block/SweetBerryBushBlock.java @@ -71,10 +_,11 @@ @Override - protected void randomTick(BlockState p_222563_, ServerLevel p_222564_, BlockPos p_222565_, RandomSource p_222566_) { - int i = p_222563_.getValue(AGE); -- if (i < 3 && p_222566_.nextInt(5) == 0 && p_222564_.getRawBrightness(p_222565_.above(), 0) >= 9) { -+ if (i < 3 && p_222564_.getRawBrightness(p_222565_.above(), 0) >= 9 && net.minecraftforge.common.ForgeHooks.onCropsGrowPre(p_222564_, p_222565_, p_222563_, p_222566_.nextInt(5) == 0)) { - BlockState blockstate = p_222563_.setValue(AGE, i + 1); - p_222564_.setBlock(p_222565_, blockstate, 2); - p_222564_.gameEvent(GameEvent.BLOCK_CHANGE, p_222565_, GameEvent.Context.of(blockstate)); -+ net.minecraftforge.common.ForgeHooks.onCropsGrowPost(p_222564_, p_222565_, p_222563_); + protected void randomTick(final BlockState state, final ServerLevel level, final BlockPos pos, final RandomSource random) { + int i = state.getValue(AGE); +- if (i < 3 && random.nextInt(5) == 0 && level.getRawBrightness(pos.above(), 0) >= 9) { ++ if (i < 3 && level.getRawBrightness(pos.above(), 0) >= 9 && net.minecraftforge.common.ForgeHooks.onCropsGrowPre(level, pos, state, random.nextInt(5) == 0)) { + BlockState blockstate = state.setValue(AGE, i + 1); + level.setBlock(pos, blockstate, 2); + level.gameEvent(GameEvent.BLOCK_CHANGE, pos, GameEvent.Context.of(blockstate)); ++ net.minecraftforge.common.ForgeHooks.onCropsGrowPost(level, pos, state); } } diff --git a/patches/minecraft/net/minecraft/world/level/block/TntBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/TntBlock.java.patch index 63964f8641..3aec1d172c 100644 --- a/patches/minecraft/net/minecraft/world/level/block/TntBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/TntBlock.java.patch @@ -2,69 +2,69 @@ +++ b/net/minecraft/world/level/block/TntBlock.java @@ -47,7 +_,7 @@ @Override - protected void onPlace(BlockState p_57466_, Level p_57467_, BlockPos p_57468_, BlockState p_57469_, boolean p_57470_) { - if (!p_57469_.is(p_57466_.getBlock())) { -- if (p_57467_.hasNeighborSignal(p_57468_) && prime(p_57467_, p_57468_)) { -+ if (p_57467_.hasNeighborSignal(p_57468_) && onCaughtFire(p_57466_, p_57467_, p_57468_, null, null)) { - p_57467_.removeBlock(p_57468_, false); + protected void onPlace(final BlockState state, final Level level, final BlockPos pos, final BlockState oldState, final boolean movedByPiston) { + if (!oldState.is(state.getBlock())) { +- if (level.hasNeighborSignal(pos) && prime(level, pos)) { ++ if (level.hasNeighborSignal(pos) && onCaughtFire(state, level, pos, null, null)) { + level.removeBlock(pos, false); } } -@@ -55,7 +_,7 @@ - - @Override - protected void neighborChanged(BlockState p_57457_, Level p_57458_, BlockPos p_57459_, Block p_57460_, @Nullable Orientation p_362896_, boolean p_57462_) { -- if (p_57458_.hasNeighborSignal(p_57459_) && prime(p_57458_, p_57459_)) { -+ if (p_57458_.hasNeighborSignal(p_57459_) && onCaughtFire(p_57457_, p_57458_, p_57459_, null, null)) { - p_57458_.removeBlock(p_57459_, false); +@@ -57,7 +_,7 @@ + protected void neighborChanged( + final BlockState state, final Level level, final BlockPos pos, final Block block, final @Nullable Orientation orientation, final boolean movedByPiston + ) { +- if (level.hasNeighborSignal(pos) && prime(level, pos)) { ++ if (level.hasNeighborSignal(pos) && onCaughtFire(state, level, pos, null, null)) { + level.removeBlock(pos, false); } } -@@ -63,7 +_,7 @@ +@@ -65,7 +_,7 @@ @Override - public BlockState playerWillDestroy(Level p_57445_, BlockPos p_57446_, BlockState p_57447_, Player p_57448_) { - if (!p_57445_.isClientSide() && !p_57448_.getAbilities().instabuild && p_57447_.getValue(UNSTABLE)) { -- prime(p_57445_, p_57446_); -+ onCaughtFire(p_57447_, p_57445_, p_57446_, null, null); + public BlockState playerWillDestroy(final Level level, final BlockPos pos, final BlockState state, final Player player) { + if (!level.isClientSide() && !player.getAbilities().instabuild && state.getValue(UNSTABLE)) { +- prime(level, pos); ++ onCaughtFire(state, level, pos, null, null); } - return super.playerWillDestroy(p_57445_, p_57446_, p_57447_, p_57448_); -@@ -79,10 +_,12 @@ + return super.playerWillDestroy(level, pos, state, player); +@@ -81,10 +_,12 @@ } } + @Deprecated //Forge: Prefer using IForgeBlock#onCaughtFire - public static boolean prime(Level p_392759_, BlockPos p_392607_) { - return prime(p_392759_, p_392607_, null); + public static boolean prime(final Level level, final BlockPos pos) { + return prime(level, pos, null); } + @Deprecated //Forge: Prefer using IForgeBlock#onCaughtFire - private static boolean prime(Level p_396831_, BlockPos p_393566_, @Nullable LivingEntity p_395667_) { - if (p_396831_ instanceof ServerLevel serverlevel && serverlevel.getGameRules().get(GameRules.TNT_EXPLODES)) { - PrimedTnt primedtnt = new PrimedTnt(p_396831_, p_393566_.getX() + 0.5, p_393566_.getY(), p_393566_.getZ() + 0.5, p_395667_); -@@ -102,7 +_,7 @@ - if (!p_329029_.is(Items.FLINT_AND_STEEL) && !p_329029_.is(Items.FIRE_CHARGE)) { - return super.useItemOn(p_329029_, p_331413_, p_329038_, p_333168_, p_335932_, p_331663_, p_330020_); + private static boolean prime(final Level level, final BlockPos pos, final @Nullable LivingEntity source) { + if (level instanceof ServerLevel serverlevel && serverlevel.getGameRules().get(GameRules.TNT_EXPLODES)) { + PrimedTnt primedtnt = new PrimedTnt(level, pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5, source); +@@ -110,7 +_,7 @@ + if (!itemStack.is(Items.FLINT_AND_STEEL) && !itemStack.is(Items.FIRE_CHARGE)) { + return super.useItemOn(itemStack, state, level, pos, player, hand, hitResult); } else { -- if (prime(p_329038_, p_333168_, p_335932_)) { -+ if (onCaughtFire(p_331413_, p_329038_, p_333168_, p_330020_.getDirection(), p_335932_)) { - p_329038_.setBlock(p_333168_, Blocks.AIR.defaultBlockState(), 11); - Item item = p_329029_.getItem(); - if (p_329029_.is(Items.FLINT_AND_STEEL)) { -@@ -128,7 +_,7 @@ - Entity entity = p_57432_.getOwner(); - if (p_57432_.isOnFire() - && p_57432_.mayInteract(serverlevel, blockpos) -- && prime(p_57429_, blockpos, entity instanceof LivingEntity ? (LivingEntity)entity : null)) { -+ && onCaughtFire(p_57430_, p_57429_, blockpos, null, entity instanceof LivingEntity ? (LivingEntity)entity : null)) { - p_57429_.removeBlock(blockpos, false); +- if (prime(level, pos, player)) { ++ if (onCaughtFire(state, level, pos, hitResult.getDirection(), player)) { + level.setBlock(pos, Blocks.AIR.defaultBlockState(), 11); + Item item = itemStack.getItem(); + if (itemStack.is(Items.FLINT_AND_STEEL)) { +@@ -136,7 +_,7 @@ + Entity entity = projectile.getOwner(); + if (projectile.isOnFire() + && projectile.mayInteract(serverlevel, blockpos) +- && prime(level, blockpos, entity instanceof LivingEntity ? (LivingEntity)entity : null)) { ++ && onCaughtFire(state, level, blockpos, null, entity instanceof LivingEntity ? (LivingEntity)entity : null)) { + level.removeBlock(blockpos, false); } } -@@ -142,5 +_,9 @@ +@@ -150,5 +_,9 @@ @Override - protected void createBlockStateDefinition(StateDefinition.Builder p_57464_) { - p_57464_.add(UNSTABLE); + protected void createBlockStateDefinition(final StateDefinition.Builder builder) { + builder.add(UNSTABLE); + } + -+ public boolean onCaughtFire(BlockState state, Level level, BlockPos pos, net.minecraft.core.@Nullable Direction face, @Nullable LivingEntity igniter) { ++ public boolean onCaughtFire(final BlockState state, final Level level, final BlockPos pos, final net.minecraft.core.@Nullable Direction face, final @Nullable LivingEntity igniter) { + return prime(level, pos, igniter); } } diff --git a/patches/minecraft/net/minecraft/world/level/block/TrapDoorBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/TrapDoorBlock.java.patch index 4b74bd3eb0..4bf4f864d7 100644 --- a/patches/minecraft/net/minecraft/world/level/block/TrapDoorBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/TrapDoorBlock.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/TrapDoorBlock.java +++ b/net/minecraft/world/level/block/TrapDoorBlock.java -@@ -199,4 +_,14 @@ +@@ -198,4 +_,14 @@ protected BlockSetType getType() { return this.type; } diff --git a/patches/minecraft/net/minecraft/world/level/block/TripWireBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/TripWireBlock.java.patch index 2c92f09ff9..d591c0be6b 100644 --- a/patches/minecraft/net/minecraft/world/level/block/TripWireBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/TripWireBlock.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/level/block/TripWireBlock.java +++ b/net/minecraft/world/level/block/TripWireBlock.java -@@ -115,7 +_,7 @@ +@@ -114,7 +_,7 @@ @Override - public BlockState playerWillDestroy(Level p_57615_, BlockPos p_57616_, BlockState p_57617_, Player p_57618_) { -- if (!p_57615_.isClientSide() && !p_57618_.getMainHandItem().isEmpty() && p_57618_.getMainHandItem().is(Items.SHEARS)) { -+ if (!p_57615_.isClientSide() && !p_57618_.getMainHandItem().isEmpty() && p_57618_.getMainHandItem().canPerformAction(net.minecraftforge.common.ToolActions.SHEARS_DISARM)) { - p_57615_.setBlock(p_57616_, p_57617_.setValue(DISARMED, true), 260); - p_57615_.gameEvent(p_57618_, GameEvent.SHEAR, p_57616_); + public BlockState playerWillDestroy(final Level level, final BlockPos pos, final BlockState state, final Player player) { +- if (!level.isClientSide() && !player.getMainHandItem().isEmpty() && player.getMainHandItem().is(Items.SHEARS)) { ++ if (!level.isClientSide() && !player.getMainHandItem().isEmpty() && player.getMainHandItem().canPerformAction(net.minecraftforge.common.ToolActions.SHEARS_DISARM)) { + level.setBlock(pos, state.setValue(DISARMED, true), 260); + level.gameEvent(player, GameEvent.SHEAR, pos); } diff --git a/patches/minecraft/net/minecraft/world/level/block/TurtleEggBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/TurtleEggBlock.java.patch index cb2efac4ce..df863bdede 100644 --- a/patches/minecraft/net/minecraft/world/level/block/TurtleEggBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/TurtleEggBlock.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/level/block/TurtleEggBlock.java +++ b/net/minecraft/world/level/block/TurtleEggBlock.java -@@ -171,7 +_,7 @@ - if (p_57769_ instanceof Turtle || p_57769_ instanceof Bat) { +@@ -178,7 +_,7 @@ + if (entity instanceof Turtle || entity instanceof Bat) { return false; } else { -- return !(p_57769_ instanceof LivingEntity) ? false : p_57769_ instanceof Player || p_366354_.getGameRules().get(GameRules.MOB_GRIEFING); -+ return !(p_57769_ instanceof LivingEntity) ? false : p_57769_ instanceof Player || net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(p_366354_, p_57769_); +- return !(entity instanceof LivingEntity) ? false : entity instanceof Player || level.getGameRules().get(GameRules.MOB_GRIEFING); ++ return !(entity instanceof LivingEntity) ? false : entity instanceof Player || net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(level, entity); } } } diff --git a/patches/minecraft/net/minecraft/world/level/block/VegetationBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/VegetationBlock.java.patch index 9bc1678f90..c6e9af1307 100644 --- a/patches/minecraft/net/minecraft/world/level/block/VegetationBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/VegetationBlock.java.patch @@ -6,32 +6,32 @@ -public abstract class VegetationBlock extends Block { +public abstract class VegetationBlock extends Block implements net.minecraftforge.common.IPlantable { - protected VegetationBlock(BlockBehaviour.Properties p_395394_) { - super(p_395394_); + protected VegetationBlock(final BlockBehaviour.Properties properties) { + super(properties); } @@ -21,7 +_,7 @@ protected abstract MapCodec codec(); - protected boolean mayPlaceOn(BlockState p_395950_, BlockGetter p_394817_, BlockPos p_393668_) { -- return p_395950_.is(BlockTags.DIRT) || p_395950_.is(Blocks.FARMLAND); -+ return p_395950_.is(BlockTags.DIRT) || p_395950_.getBlock() instanceof net.minecraft.world.level.block.FarmBlock; + protected boolean mayPlaceOn(final BlockState state, final BlockGetter level, final BlockPos pos) { +- return state.is(BlockTags.SUPPORTS_VEGETATION); ++ return state.is(BlockTags.SUPPORTS_VEGETATION) || state.getBlock() instanceof FarmlandBlock; } @Override @@ -43,6 +_,9 @@ @Override - protected boolean canSurvive(BlockState p_397664_, LevelReader p_395119_, BlockPos p_393561_) { - BlockPos blockpos = p_393561_.below(); -+ if (p_397664_.getBlock() == this) { //Forge: This function is called during world gen and placement, before this block is set, so if we are not 'here' then assume it's the pre-check. -+ return p_395119_.getBlockState(blockpos).canSustainPlant(p_395119_, blockpos, Direction.UP, this); + protected boolean canSurvive(final BlockState state, final LevelReader level, final BlockPos pos) { + BlockPos blockpos = pos.below(); ++ if (state.getBlock() == this) { //Forge: This function is called during world gen and placement, before this block is set, so if we are not 'here' then assume it's the pre-check. ++ return level.getBlockState(blockpos).canSustainPlant(level, blockpos, Direction.UP, this); + } - return this.mayPlaceOn(p_395119_.getBlockState(blockpos), p_395119_, blockpos); + return this.mayPlaceOn(level.getBlockState(blockpos), level, blockpos); } @@ -54,5 +_,11 @@ @Override - protected boolean isPathfindable(BlockState p_392416_, PathComputationType p_395772_) { - return p_395772_ == PathComputationType.AIR && !this.hasCollision ? true : super.isPathfindable(p_392416_, p_395772_); + protected boolean isPathfindable(final BlockState state, final PathComputationType type) { + return type == PathComputationType.AIR && !this.hasCollision ? true : super.isPathfindable(state, type); + } + + @Override diff --git a/patches/minecraft/net/minecraft/world/level/block/VineBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/VineBlock.java.patch index 87477d0b46..60710b01a8 100644 --- a/patches/minecraft/net/minecraft/world/level/block/VineBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/VineBlock.java.patch @@ -9,12 +9,12 @@ public static final MapCodec CODEC = simpleCodec(VineBlock::new); public static final BooleanProperty UP = PipeBlock.UP; public static final BooleanProperty NORTH = PipeBlock.NORTH; -@@ -172,7 +_,7 @@ +@@ -166,7 +_,7 @@ @Override - protected void randomTick(BlockState p_222655_, ServerLevel p_222656_, BlockPos p_222657_, RandomSource p_222658_) { - if (p_222656_.getGameRules().get(GameRules.SPREAD_VINES)) { -- if (p_222658_.nextInt(4) == 0) { -+ if (p_222656_.random.nextInt(4) == 0 && p_222656_.isAreaLoaded(p_222657_, 4)) { // Forge: check area to prevent loading unloaded chunks - Direction direction = Direction.getRandom(p_222658_); - BlockPos blockpos = p_222657_.above(); - if (direction.getAxis().isHorizontal() && !p_222655_.getValue(getPropertyForFace(direction))) { + protected void randomTick(final BlockState state, final ServerLevel level, final BlockPos pos, final RandomSource random) { + if (level.getGameRules().get(GameRules.SPREAD_VINES)) { +- if (random.nextInt(4) == 0) { ++ if (random.nextInt(4) == 0 && level.isAreaLoaded(pos, 4)) { // Forge: check area to prevent loading unloaded chunks + Direction direction = Direction.getRandom(random); + BlockPos blockpos = pos.above(); + if (direction.getAxis().isHorizontal() && !state.getValue(getPropertyForFace(direction))) { diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch index 47d1fe2db8..cf902c3caf 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch @@ -6,124 +6,105 @@ private static final short DEFAULT_LIT_TOTAL_TIME = 0; + private final RecipeType recipeType; protected NonNullList items = NonNullList.withSize(3, ItemStack.EMPTY); - int litTimeRemaining; - int litTotalTime; -@@ -110,6 +_,7 @@ + private int litTimeRemaining; + private int litTotalTime; +@@ -114,6 +_,7 @@ ) { - super(p_154991_, p_154992_, p_154993_); - this.quickCheck = RecipeManager.createCheck((RecipeType)p_154994_); -+ this.recipeType = p_154994_; + super(type, worldPosition, blockState); + this.quickCheck = RecipeManager.createCheck(recipeType); ++ this.recipeType = recipeType; } - private boolean isLit() { + @Override @@ -121,10 +_,10 @@ - super.loadAdditional(p_405853_); + super.loadAdditional(input); this.items = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); - ContainerHelper.loadAllItems(p_405853_, this.items); -- this.cookingTimer = p_405853_.getShortOr("cooking_time_spent", (short)0); -- this.cookingTotalTime = p_405853_.getShortOr("cooking_total_time", (short)0); -- this.litTimeRemaining = p_405853_.getShortOr("lit_time_remaining", (short)0); -- this.litTotalTime = p_405853_.getShortOr("lit_total_time", (short)0); -+ this.cookingTimer = p_405853_.getIntOr("cooking_time_spent", (short)0); -+ this.cookingTotalTime = p_405853_.getIntOr("cooking_total_time", (short)0); -+ this.litTimeRemaining = p_405853_.getIntOr("lit_time_remaining", (short)0); -+ this.litTotalTime = p_405853_.getIntOr("lit_total_time", (short)0); + ContainerHelper.loadAllItems(input, this.items); +- this.cookingTimer = input.getShortOr("cooking_time_spent", (short)0); +- this.cookingTotalTime = input.getShortOr("cooking_total_time", (short)0); +- this.litTimeRemaining = input.getShortOr("lit_time_remaining", (short)0); +- this.litTotalTime = input.getShortOr("lit_total_time", (short)0); ++ this.cookingTimer = input.getIntOr("cooking_time_spent", (short)0); ++ this.cookingTotalTime = input.getIntOr("cooking_total_time", (short)0); ++ this.litTimeRemaining = input.getIntOr("lit_time_remaining", (short)0); ++ this.litTotalTime = input.getIntOr("lit_total_time", (short)0); this.recipesUsed.clear(); - this.recipesUsed.putAll(p_405853_.read("RecipesUsed", RECIPES_USED_CODEC).orElse(Map.of())); + this.recipesUsed.putAll(input.read("RecipesUsed", RECIPES_USED_CODEC).orElse(Map.of())); } @@ -132,10 +_,10 @@ @Override - protected void saveAdditional(ValueOutput p_406502_) { - super.saveAdditional(p_406502_); -- p_406502_.putShort("cooking_time_spent", (short)this.cookingTimer); -- p_406502_.putShort("cooking_total_time", (short)this.cookingTotalTime); -- p_406502_.putShort("lit_time_remaining", (short)this.litTimeRemaining); -- p_406502_.putShort("lit_total_time", (short)this.litTotalTime); -+ p_406502_.putInt("cooking_time_spent", this.cookingTimer); -+ p_406502_.putInt("cooking_total_time", this.cookingTotalTime); -+ p_406502_.putInt("lit_time_remaining", this.litTimeRemaining); -+ p_406502_.putInt("lit_total_time", this.litTotalTime); - ContainerHelper.saveAllItems(p_406502_, this.items); - p_406502_.store("RecipesUsed", RECIPES_USED_CODEC, this.recipesUsed); + protected void saveAdditional(final ValueOutput output) { + super.saveAdditional(output); +- output.putShort("cooking_time_spent", (short)this.cookingTimer); +- output.putShort("cooking_total_time", (short)this.cookingTotalTime); +- output.putShort("lit_time_remaining", (short)this.litTimeRemaining); +- output.putShort("lit_total_time", (short)this.litTotalTime); ++ output.putInt("cooking_time_spent", this.cookingTimer); ++ output.putInt("cooking_total_time", this.cookingTotalTime); ++ output.putInt("lit_time_remaining", this.litTimeRemaining); ++ output.putInt("lit_total_time", this.litTotalTime); + ContainerHelper.saveAllItems(output, this.items); + output.store("RecipesUsed", RECIPES_USED_CODEC, this.recipesUsed); } -@@ -161,27 +_,31 @@ - } - - int i = p_155017_.getMaxStackSize(); -- if (!p_155017_.isLit() && canBurn(p_364207_.registryAccess(), recipeholder, singlerecipeinput, p_155017_.items, i)) { -+ if (!p_155017_.isLit() && p_155017_.canBurn(p_364207_.registryAccess(), recipeholder, singlerecipeinput, p_155017_.items, i)) { - p_155017_.litTimeRemaining = p_155017_.getBurnDuration(p_364207_.fuelValues(), itemstack); - p_155017_.litTotalTime = p_155017_.litTimeRemaining; - if (p_155017_.isLit()) { - flag1 = true; -+ var remainder = itemstack.getCraftingRemainder(); -+ if (!remainder.isEmpty()) { -+ p_155017_.items.set(1, remainder); -+ } else - if (flag3) { - Item item = itemstack.getItem(); - itemstack.shrink(1); - if (itemstack.isEmpty()) { -- p_155017_.items.set(1, item.getCraftingRemainder()); -+ p_155017_.items.set(1, remainder); - } - } - } - } - -- if (p_155017_.isLit() && canBurn(p_364207_.registryAccess(), recipeholder, singlerecipeinput, p_155017_.items, i)) { -+ if (p_155017_.isLit() && p_155017_.canBurn(p_364207_.registryAccess(), recipeholder, singlerecipeinput, p_155017_.items, i)) { - p_155017_.cookingTimer++; - if (p_155017_.cookingTimer == p_155017_.cookingTotalTime) { - p_155017_.cookingTimer = 0; - p_155017_.cookingTotalTime = getTotalCookTime(p_364207_, p_155017_); -- if (burn(p_364207_.registryAccess(), recipeholder, singlerecipeinput, p_155017_.items, i)) { -+ if (p_155017_.burn(p_364207_.registryAccess(), recipeholder, singlerecipeinput, p_155017_.items, i)) { - p_155017_.setRecipeUsed(recipeholder); - } - -@@ -205,7 +_,7 @@ +@@ -164,13 +_,13 @@ + if (recipeholder != null) { + int i = entity.getMaxStackSize(); + ItemStack itemstack2 = recipeholder.value().assemble(singlerecipeinput); +- if (!itemstack2.isEmpty() && canBurn(entity.items, i, itemstack2)) { ++ if (!itemstack2.isEmpty() && entity.canBurn(entity.items, i, itemstack2)) { + if (!flag1) { + int j = entity.getBurnDuration(level.fuelValues(), itemstack); + entity.litTimeRemaining = j; + entity.litTotalTime = j; + if (j > 0) { +- consumeFuel(entity.items, itemstack); ++ entity.consumeFuel(entity.items, itemstack); + flag1 = true; + flag = true; + } +@@ -181,7 +_,7 @@ + if (entity.cookingTimer == entity.cookingTotalTime) { + entity.cookingTimer = 0; + entity.cookingTotalTime = recipeholder.value().cookingTime(); +- burn(entity.items, itemstack1, itemstack2); ++ entity.burn(entity.items, itemstack1, itemstack2); + entity.setRecipeUsed(recipeholder); + flag = true; + } +@@ -210,16 +_,16 @@ } } -- private static boolean canBurn( -+ private boolean canBurn( - RegistryAccess p_266924_, - @Nullable RecipeHolder p_299207_, - SingleRecipeInput p_364069_, -@@ -223,9 +_,9 @@ - } else if (!ItemStack.isSameItemSameComponents(itemstack1, itemstack)) { - return false; - } else { -- return itemstack1.getCount() < p_155008_ && itemstack1.getCount() < itemstack1.getMaxStackSize() -+ return (itemstack1.getCount() + itemstack.getCount() <= p_155008_ && itemstack1.getCount() + itemstack.getCount() <= itemstack1.getMaxStackSize()) // Forge fix: make furnace respect stack sizes in furnace recipes - ? true -- : itemstack1.getCount() < itemstack.getMaxStackSize(); -+ : itemstack1.getCount() + itemstack.getCount() <= itemstack.getMaxStackSize(); // Forge fix: make furnace respect stack sizes in furnace recipes - } - } - } else { -@@ -233,7 +_,7 @@ +- private static void consumeFuel(final NonNullList items, final ItemStack fuel) { ++ protected void consumeFuel(final NonNullList items, final ItemStack fuel) { + Item item = fuel.getItem(); +- fuel.shrink(1); +- if (fuel.isEmpty()) { +- ItemStackTemplate itemstacktemplate = item.getCraftingRemainder(); ++ if (fuel.count() == 1) { ++ ItemStackTemplate itemstacktemplate = fuel.getCraftingRemainder(); + items.set(1, itemstacktemplate != null ? itemstacktemplate.create() : ItemStack.EMPTY); + } ++ fuel.shrink(1); + } + +- private static boolean canBurn(final NonNullList items, final int maxStackSize, final ItemStack burnResult) { ++ protected boolean canBurn(final NonNullList items, final int maxStackSize, final ItemStack burnResult) { + ItemStack itemstack = items.get(2); + if (itemstack.isEmpty()) { + return true; +@@ -232,7 +_,7 @@ } } -- private static boolean burn( -+ private boolean burn( - RegistryAccess p_266740_, - @Nullable RecipeHolder p_299450_, - SingleRecipeInput p_364092_, -@@ -247,7 +_,7 @@ - if (itemstack2.isEmpty()) { - p_267073_.set(2, itemstack1.copy()); - } else if (ItemStack.isSameItemSameComponents(itemstack2, itemstack1)) { -- itemstack2.grow(1); -+ itemstack2.grow(itemstack1.getCount()); - } - - if (itemstack.is(Blocks.WET_SPONGE.asItem()) && !p_267073_.get(1).isEmpty() && p_267073_.get(1).is(Items.BUCKET)) { -@@ -385,6 +_,35 @@ +- private static void burn(final NonNullList items, final ItemStack inputItemStack, final ItemStack result) { ++ protected void burn(final NonNullList items, final ItemStack inputItemStack, final ItemStack result) { + ItemStack itemstack = items.get(2); + if (itemstack.isEmpty()) { + items.set(2, result.copy()); +@@ -371,6 +_,35 @@ for (ItemStack itemstack : this.items) { - p_363325_.accountStack(itemstack); + contents.accountStack(itemstack); } + } + diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java.patch index f302f8ba12..a0b2d6e1d1 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java +++ b/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java @@ -170,4 +_,27 @@ - p_407613_.discard("lock"); - p_407613_.discard("Items"); + output.discard("lock"); + output.discard("Items"); } + + private net.minecraftforge.common.util.LazyOptional itemHandler = net.minecraftforge.common.util.LazyOptional.of(() -> createUnSidedHandler()); diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/BeaconBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/BeaconBlockEntity.java.patch index 8687f0cde2..be4c757c69 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/BeaconBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/BeaconBlockEntity.java.patch @@ -1,13 +1,13 @@ --- a/net/minecraft/world/level/block/entity/BeaconBlockEntity.java +++ b/net/minecraft/world/level/block/entity/BeaconBlockEntity.java -@@ -135,8 +_,8 @@ +@@ -141,8 +_,8 @@ for (int i1 = 0; i1 < 10 && blockpos.getY() <= l; i1++) { - BlockState blockstate = p_155108_.getBlockState(blockpos); + BlockState blockstate = level.getBlockState(blockpos); - if (blockstate.getBlock() instanceof BeaconBeamBlock beaconbeamblock) { - int j1 = beaconbeamblock.getColor().getTextureDiffuseColor(); -+ int j1 = blockstate.getBeaconColorMultiplier(p_155108_, blockpos, p_155109_); ++ int j1 = blockstate.getBeaconColorMultiplier(level, blockpos, pos); + if (j1 != -1) { - if (p_155111_.checkingBeamSections.size() <= 1) { + if (entity.checkingBeamSections.size() <= 1) { beaconbeamowner$section = new BeaconBeamOwner.Section(j1); - p_155111_.checkingBeamSections.add(beaconbeamowner$section); + entity.checkingBeamSections.add(beaconbeamowner$section); diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/BlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/BlockEntity.java.patch index f199babc96..a427d27062 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/BlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/BlockEntity.java.patch @@ -1,53 +1,48 @@ --- a/net/minecraft/world/level/block/entity/BlockEntity.java +++ b/net/minecraft/world/level/block/entity/BlockEntity.java -@@ -36,7 +_,7 @@ +@@ -39,7 +_,7 @@ import org.jspecify.annotations.Nullable; import org.slf4j.Logger; --public abstract class BlockEntity implements DebugValueSource { -+public abstract class BlockEntity extends net.minecraftforge.common.capabilities.CapabilityProvider.BlockEntities implements DebugValueSource, net.minecraftforge.common.extensions.IForgeBlockEntity { +-public abstract class BlockEntity implements DebugValueSource, TypedInstance> { ++public abstract class BlockEntity extends net.minecraftforge.common.capabilities.CapabilityProvider.BlockEntities implements DebugValueSource, TypedInstance>, net.minecraftforge.common.extensions.IForgeBlockEntity { private static final Codec> TYPE_CODEC = BuiltInRegistries.BLOCK_ENTITY_TYPE.byNameCodec(); private static final Logger LOGGER = LogUtils.getLogger(); private final BlockEntityType type; -@@ -47,10 +_,12 @@ - private DataComponentMap components = DataComponentMap.EMPTY; - - public BlockEntity(BlockEntityType p_155228_, BlockPos p_155229_, BlockState p_155230_) { -+ super(); - this.type = p_155228_; - this.worldPosition = p_155229_.immutable(); - this.validateBlockState(p_155230_); - this.blockState = p_155230_; +@@ -54,6 +_,7 @@ + this.worldPosition = worldPosition.immutable(); + this.validateBlockState(blockState); + this.blockState = blockState; + this.gatherCapabilities(); } - private void validateBlockState(BlockState p_345558_) { -@@ -60,7 +_,7 @@ + private void validateBlockState(final BlockState blockState) { +@@ -63,7 +_,7 @@ } - public boolean isValidBlockState(BlockState p_345570_) { -- return this.type.isValid(p_345570_); -+ return this.getType().isValid(p_345570_); + public boolean isValidBlockState(final BlockState blockState) { +- return this.type.isValid(blockState); ++ return this.getType().isValid(blockState); } - public static BlockPos getPosFromTag(ChunkPos p_396083_, CompoundTag p_187473_) { -@@ -91,6 +_,7 @@ + public static BlockPos getPosFromTag(final ChunkPos base, final CompoundTag entityTag) { +@@ -94,6 +_,7 @@ } - protected void loadAdditional(ValueInput p_409136_) { -+ if (getCapabilities() != null) p_409136_.read("ForgeCaps", CompoundTag.CODEC).ifPresent(caps -> deserializeCaps(p_409136_.lookup(), caps)); + protected void loadAdditional(final ValueInput input) { ++ if (getCapabilities() != null) input.read("ForgeCaps", CompoundTag.CODEC).ifPresent(caps -> deserializeCaps(input.lookup(), caps)); } - public final void loadWithComponents(ValueInput p_409893_) { -@@ -103,6 +_,7 @@ + public final void loadWithComponents(final ValueInput input) { +@@ -106,6 +_,7 @@ } - protected void saveAdditional(ValueOutput p_407573_) { -+ if (getCapabilities() != null) p_407573_.storeNullable("ForgeCaps", CompoundTag.CODEC, serializeCaps(p_407573_)); + protected void saveAdditional(final ValueOutput output) { ++ if (getCapabilities() != null) output.storeNullable("ForgeCaps", CompoundTag.CODEC, serializeCaps(output)); } - public final CompoundTag saveWithFullMetadata(HolderLookup.Provider p_331193_) { -@@ -236,6 +_,13 @@ + public final CompoundTag saveWithFullMetadata(final HolderLookup.Provider registries) { +@@ -239,6 +_,13 @@ public void setRemoved() { this.remove = true; diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java.patch index 7bddbf19eb..a87441d396 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java.patch @@ -1,40 +1,31 @@ --- a/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java +++ b/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java -@@ -174,15 +_,18 @@ +@@ -180,9 +_,10 @@ for (int i = 0; i < 3; i++) { - p_155293_.set(i, potionbrewing.mix(itemstack, p_155293_.get(i))); + items.set(i, potionbrewing.mix(itemstack, items.get(i))); } -+ net.minecraftforge.event.ForgeEventFactory.onPotionBrewed(p_155293_); ++ net.minecraftforge.event.ForgeEventFactory.onPotionBrewed(items); -- itemstack.shrink(1); -- ItemStack itemstack1 = itemstack.getItem().getCraftingRemainder(); -+ ItemStack itemstack1 = itemstack.getCraftingRemainder(); - if (!itemstack1.isEmpty()) { -+ itemstack.shrink(1); ++ ItemStackTemplate itemstacktemplate = itemstack.getCraftingRemainder(); + itemstack.shrink(1); +- ItemStackTemplate itemstacktemplate = itemstack.getItem().getCraftingRemainder(); + if (itemstacktemplate != null) { if (itemstack.isEmpty()) { - itemstack = itemstack1; - } else { - Containers.dropItemStack(p_155291_, p_155292_.getX(), p_155292_.getY(), p_155292_.getZ(), itemstack1); - } -+ } else { -+ itemstack.shrink(1); - } - - p_155293_.set(3, itemstack); -@@ -215,6 +_,9 @@ - if (p_59017_ == 3) { + itemstack = itemstacktemplate.create(); +@@ -221,6 +_,9 @@ + if (slot == 3) { PotionBrewing potionbrewing = this.level != null ? this.level.potionBrewing() : PotionBrewing.EMPTY; - return potionbrewing.isIngredient(p_59018_); -+ } else if (p_59017_ != 4) { + return potionbrewing.isIngredient(itemStack); ++ } else if (slot != 4) { + PotionBrewing potionbrewing = this.level != null ? this.level.potionBrewing() : PotionBrewing.EMPTY; -+ return this.getItem(p_59017_).isEmpty() && potionbrewing.isValidInput(p_59018_); ++ return this.getItem(slot).isEmpty() && potionbrewing.isValidInput(itemStack); } else { - return p_59017_ == 4 - ? p_59018_.is(ItemTags.BREWING_FUEL) -@@ -250,5 +_,34 @@ + return slot == 4 + ? itemStack.is(ItemTags.BREWING_FUEL) +@@ -251,5 +_,34 @@ @Override - protected AbstractContainerMenu createMenu(int p_58990_, Inventory p_58991_) { - return new BrewingStandMenu(p_58990_, p_58991_, this, this.dataAccess); + protected AbstractContainerMenu createMenu(final int containerId, final Inventory inventory) { + return new BrewingStandMenu(containerId, inventory, this, this.dataAccess); + } + + net.minecraftforge.common.util.LazyOptional[] handlers = diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/ChestBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/ChestBlockEntity.java.patch index 43631d1675..71820d3a76 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/ChestBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/ChestBlockEntity.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/world/level/block/entity/ChestBlockEntity.java +++ b/net/minecraft/world/level/block/entity/ChestBlockEntity.java -@@ -194,4 +_,43 @@ - Block block = p_155335_.getBlock(); - p_155333_.blockEvent(p_155334_, block, 1, p_155337_); +@@ -202,4 +_,43 @@ + Block block = blockState.getBlock(); + level.blockEvent(pos, block, 1, current); } + + private net.minecraftforge.common.util.LazyOptional chestHandler; diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity.java.patch index b23a9cf71f..9d1dca33bf 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity.java +++ b/net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity.java @@ -135,4 +_,28 @@ - public void removeComponentsFromTag(ValueOutput p_405909_) { - p_405909_.discard("Items"); + public void removeComponentsFromTag(final ValueOutput output) { + output.discard("Items"); } + + private net.minecraftforge.common.util.LazyOptional itemHandler = net.minecraftforge.common.util.LazyOptional.of(this::createUnSidedHandler); diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/ConduitBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/ConduitBlockEntity.java.patch index 97e6cf97fb..cc6b2a7fb7 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/ConduitBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/ConduitBlockEntity.java.patch @@ -1,13 +1,13 @@ --- a/net/minecraft/world/level/block/entity/ConduitBlockEntity.java +++ b/net/minecraft/world/level/block/entity/ConduitBlockEntity.java @@ -148,8 +_,8 @@ - BlockPos blockpos1 = p_155416_.offset(j1, k1, l1); - BlockState blockstate = p_155415_.getBlockState(blockpos1); + BlockPos blockpos1 = worldPosition.offset(j1, k1, l1); + BlockState blockstate = level.getBlockState(blockpos1); - for (Block block : VALID_BLOCKS) { - if (blockstate.is(block)) { + { -+ if (blockstate.isConduitFrame(p_155415_, blockpos1, p_155416_)) { - p_155417_.add(blockpos1); ++ if (blockstate.isConduitFrame(level, blockpos1, worldPosition)) { + effectBlocks.add(blockpos1); } } diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/FuelValues.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/FuelValues.java.patch index 27435798a9..4d99d967ce 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/FuelValues.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/FuelValues.java.patch @@ -3,9 +3,9 @@ @@ -25,7 +_,11 @@ } - public boolean isFuel(ItemStack p_369912_) { -- return this.values.containsKey(p_369912_.getItem()); -+ return isFuel(p_369912_, null); + public boolean isFuel(final ItemStack itemStack) { +- return this.values.containsKey(itemStack.getItem()); ++ return isFuel(itemStack, null); + } + + public boolean isFuel(ItemStack stack, @org.jetbrains.annotations.Nullable net.minecraft.world.item.crafting.RecipeType type) { @@ -16,18 +16,18 @@ @@ -33,7 +_,16 @@ } - public int burnDuration(ItemStack p_368393_) { -- return p_368393_.isEmpty() ? 0 : this.values.getInt(p_368393_.getItem()); -+ return burnDuration(p_368393_, null); + public int burnDuration(final ItemStack itemStack) { +- return itemStack.isEmpty() ? 0 : this.values.getInt(itemStack.getItem()); ++ return burnDuration(itemStack, null); + } + -+ public int burnDuration(ItemStack stack, @org.jetbrains.annotations.Nullable net.minecraft.world.item.crafting.RecipeType type) { -+ if (stack.isEmpty()) ++ public int burnDuration(final ItemStack itemStack, final @org.jetbrains.annotations.Nullable net.minecraft.world.item.crafting.RecipeType type) { ++ if (itemStack.isEmpty()) + return 0; -+ int ret = stack.getBurnTime(type); ++ int ret = itemStack.getBurnTime(type); + if (ret == -1) -+ ret = this.values.getInt(stack.getItem()); -+ return net.minecraftforge.event.ForgeEventFactory.getItemBurnTime(stack, ret, type); ++ ret = this.values.getInt(itemStack.getItem()); ++ return net.minecraftforge.event.ForgeEventFactory.getItemBurnTime(itemStack, ret, type); } - public static FuelValues vanillaBurnTimes(HolderLookup.Provider p_363816_, FeatureFlagSet p_367705_) { + public static FuelValues vanillaBurnTimes(final HolderLookup.Provider registries, final FeatureFlagSet enabledFeatures) { diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/HangingSignBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/HangingSignBlockEntity.java.patch index a8b66f875e..e56b943f39 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/HangingSignBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/HangingSignBlockEntity.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/world/level/block/entity/HangingSignBlockEntity.java +++ b/net/minecraft/world/level/block/entity/HangingSignBlockEntity.java @@ -13,6 +_,10 @@ - super(BlockEntityType.HANGING_SIGN, p_250603_, p_251674_); + super(BlockEntityType.HANGING_SIGN, worldPosition, blockState); } -+ public HangingSignBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { ++ public HangingSignBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { + super(type, pos, state); + } + diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/HopperBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/HopperBlockEntity.java.patch index 36a3dfd7ec..b3fdae3c79 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/HopperBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/HopperBlockEntity.java.patch @@ -1,26 +1,26 @@ --- a/net/minecraft/world/level/block/entity/HopperBlockEntity.java +++ b/net/minecraft/world/level/block/entity/HopperBlockEntity.java -@@ -139,6 +_,7 @@ +@@ -141,6 +_,7 @@ } - private static boolean ejectItems(Level p_155563_, BlockPos p_155564_, HopperBlockEntity p_329427_) { -+ if (net.minecraftforge.items.VanillaInventoryCodeHooks.insertHook(p_329427_)) return true; - Container container = getAttachedContainer(p_155563_, p_155564_, p_329427_); + private static boolean ejectItems(final Level level, final BlockPos blockPos, final HopperBlockEntity self) { ++ if (net.minecraftforge.items.VanillaInventoryCodeHooks.insertHook(self)) return true; + Container container = getAttachedContainer(level, blockPos, self); if (container == null) { return false; -@@ -214,6 +_,8 @@ +@@ -216,6 +_,8 @@ } - public static boolean suckInItems(Level p_155553_, Hopper p_155554_) { -+ Boolean ret = net.minecraftforge.items.VanillaInventoryCodeHooks.extractHook(p_155553_, p_155554_); + public static boolean suckInItems(final Level level, final Hopper hopper) { ++ Boolean ret = net.minecraftforge.items.VanillaInventoryCodeHooks.extractHook(level, hopper); + if (ret != null) return ret; - BlockPos blockpos = BlockPos.containing(p_155554_.getLevelX(), p_155554_.getLevelY() + 1.0, p_155554_.getLevelZ()); - BlockState blockstate = p_155553_.getBlockState(blockpos); - Container container = getSourceContainer(p_155553_, p_155554_, blockpos, blockstate); -@@ -446,5 +_,14 @@ + BlockPos blockpos = BlockPos.containing(hopper.getLevelX(), hopper.getLevelY() + 1.0, hopper.getLevelZ()); + BlockState blockstate = level.getBlockState(blockpos); + Container container = getSourceContainer(level, hopper, blockpos, blockstate); +@@ -452,5 +_,14 @@ @Override - protected AbstractContainerMenu createMenu(int p_59312_, Inventory p_59313_) { - return new HopperMenu(p_59312_, p_59313_, this); + protected AbstractContainerMenu createMenu(final int containerId, final Inventory inventory) { + return new HopperMenu(containerId, inventory, this); + } + + @Override diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java.patch index 5777676d36..c702df30ae 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java +++ b/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java -@@ -234,7 +_,7 @@ +@@ -240,7 +_,7 @@ @Override - public boolean canPlaceItemThroughFace(int p_59663_, ItemStack p_59664_, @Nullable Direction p_59665_) { -- return !(Block.byItem(p_59664_.getItem()) instanceof ShulkerBoxBlock); -+ return !(Block.byItem(p_59664_.getItem()) instanceof ShulkerBoxBlock) && p_59664_.getItem().canFitInsideContainerItems(); // FORGE: Make shulker boxes respect Item#canFitInsideContainerItems + public boolean canPlaceItemThroughFace(final int slot, final ItemStack itemStack, final @Nullable Direction direction) { +- return !(Block.byItem(itemStack.getItem()) instanceof ShulkerBoxBlock); ++ return !(Block.byItem(itemStack.getItem()) instanceof ShulkerBoxBlock) && itemStack.getItem().canFitInsideContainerItems(); // FORGE: Make shulker boxes respect Item#canFitInsideContainerItems } @Override -@@ -257,6 +_,11 @@ +@@ -263,6 +_,11 @@ public boolean isClosed() { return this.animationStatus == ShulkerBoxBlockEntity.AnimationStatus.CLOSED; diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/SignBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/SignBlockEntity.java.patch index 56359d16a1..cc6abc4d65 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/SignBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/SignBlockEntity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/entity/SignBlockEntity.java +++ b/net/minecraft/world/level/block/entity/SignBlockEntity.java -@@ -281,6 +_,11 @@ +@@ -274,6 +_,11 @@ } } diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/SpawnerBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/SpawnerBlockEntity.java.patch index 9f014a24a4..2ddd14150f 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/SpawnerBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/SpawnerBlockEntity.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/world/level/block/entity/SpawnerBlockEntity.java +++ b/net/minecraft/world/level/block/entity/SpawnerBlockEntity.java -@@ -32,6 +_,13 @@ - p_155771_.sendBlockUpdated(p_155772_, blockstate, blockstate, 260); +@@ -37,6 +_,13 @@ + level.sendBlockUpdated(pos, blockstate, blockstate, 260); } } + @@ -13,4 +13,4 @@ + } }; - public SpawnerBlockEntity(BlockPos p_155752_, BlockState p_155753_) { + public SpawnerBlockEntity(final BlockPos worldPosition, final BlockState blockState) { diff --git a/patches/minecraft/net/minecraft/world/level/block/grower/TreeGrower.java.patch b/patches/minecraft/net/minecraft/world/level/block/grower/TreeGrower.java.patch index f27797fe79..1381d170a6 100644 --- a/patches/minecraft/net/minecraft/world/level/block/grower/TreeGrower.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/grower/TreeGrower.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/world/level/block/grower/TreeGrower.java +++ b/net/minecraft/world/level/block/grower/TreeGrower.java @@ -128,6 +_,9 @@ - ResourceKey> resourcekey = this.getConfiguredMegaFeature(p_309951_); + ResourceKey> resourcekey = this.getConfiguredMegaFeature(random); if (resourcekey != null) { - Holder> holder = p_309830_.registryAccess().lookupOrThrow(Registries.CONFIGURED_FEATURE).get(resourcekey).orElse(null); -+ var event = net.minecraftforge.event.ForgeEventFactory.blockGrowFeature(p_309830_, p_309951_, p_310327_, holder); + Holder> holder = level.registryAccess().lookupOrThrow(Registries.CONFIGURED_FEATURE).get(resourcekey).orElse(null); ++ var event = net.minecraftforge.event.ForgeEventFactory.blockGrowFeature(level, random, pos, holder); + holder = event.getFeature(); + if (event.getResult().isDenied()) return false; if (holder != null) { diff --git a/patches/minecraft/net/minecraft/world/level/block/piston/PistonBaseBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/piston/PistonBaseBlock.java.patch index b0ae6d3617..6ce710b0c8 100644 --- a/patches/minecraft/net/minecraft/world/level/block/piston/PistonBaseBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/piston/PistonBaseBlock.java.patch @@ -1,33 +1,33 @@ --- a/net/minecraft/world/level/block/piston/PistonBaseBlock.java +++ b/net/minecraft/world/level/block/piston/PistonBaseBlock.java -@@ -166,6 +_,7 @@ - } +@@ -169,6 +_,7 @@ - if (p_60195_ == 0) { -+ if (net.minecraftforge.event.ForgeEventFactory.onPistonMovePre(p_60193_, p_60194_, direction, true)) return false; - if (!this.moveBlocks(p_60193_, p_60194_, direction, true)) { + RandomSource randomsource = level.getRandom(); + if (b0 == 0) { ++ if (net.minecraftforge.event.ForgeEventFactory.onPistonMovePre(level, pos, direction, true)) return false; + if (!this.moveBlocks(level, pos, direction, true)) { return false; } -@@ -174,6 +_,7 @@ - p_60193_.playSound(null, p_60194_, SoundEvents.PISTON_EXTEND, SoundSource.BLOCKS, 0.5F, p_60193_.random.nextFloat() * 0.25F + 0.6F); - p_60193_.gameEvent(GameEvent.BLOCK_ACTIVATE, p_60194_, GameEvent.Context.of(blockstate)); - } else if (p_60195_ == 1 || p_60195_ == 2) { -+ if (net.minecraftforge.event.ForgeEventFactory.onPistonMovePre(p_60193_, p_60194_, direction, false)) return false; - BlockEntity blockentity = p_60193_.getBlockEntity(p_60194_.relative(direction)); +@@ -177,6 +_,7 @@ + level.playSound(null, pos, SoundEvents.PISTON_EXTEND, SoundSource.BLOCKS, 0.5F, randomsource.nextFloat() * 0.25F + 0.6F); + level.gameEvent(GameEvent.BLOCK_ACTIVATE, pos, GameEvent.Context.of(blockstate)); + } else if (b0 == 1 || b0 == 2) { ++ if (net.minecraftforge.event.ForgeEventFactory.onPistonMovePre(level, pos, direction, false)) return false; + BlockEntity blockentity = level.getBlockEntity(pos.relative(direction)); if (blockentity instanceof PistonMovingBlockEntity) { ((PistonMovingBlockEntity)blockentity).finalTick(); -@@ -221,6 +_,7 @@ - p_60193_.gameEvent(GameEvent.BLOCK_DEACTIVATE, p_60194_, GameEvent.Context.of(blockstate1)); +@@ -226,6 +_,7 @@ + level.gameEvent(GameEvent.BLOCK_DEACTIVATE, pos, GameEvent.Context.of(blockstate1)); } -+ net.minecraftforge.event.ForgeEventFactory.onPistonMovePost(p_60193_, p_60194_, direction, (p_60195_ == 0)); ++ net.minecraftforge.event.ForgeEventFactory.onPistonMovePost(level, pos, direction, (b0 == 0)); return true; } -@@ -365,6 +_,11 @@ +@@ -377,6 +_,11 @@ @Override - protected BlockState rotate(BlockState p_60215_, Rotation p_60216_) { - return p_60215_.setValue(FACING, p_60216_.rotate(p_60215_.getValue(FACING))); + protected BlockState rotate(final BlockState state, final Rotation rotation) { + return state.setValue(FACING, rotation.rotate(state.getValue(FACING))); + } + + @Override diff --git a/patches/minecraft/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java.patch index 7b571e917b..013a0b0852 100644 --- a/patches/minecraft/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java +++ b/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java -@@ -119,7 +_,7 @@ - List list = p_155911_.getEntities(null, PistonMath.getMovementArea(aabb, direction, d0).minmax(aabb)); +@@ -126,7 +_,7 @@ + List list = level.getEntities(null, PistonMath.getMovementArea(aabb, direction, d0).minmax(aabb)); if (!list.isEmpty()) { List list1 = voxelshape.toAabbs(); -- boolean flag = p_155914_.movedState.is(Blocks.SLIME_BLOCK); -+ boolean flag = p_155914_.movedState.isSlimeBlock(); //TODO: is this patch really needed the logic of the original seems sound revisit later +- boolean flag = self.movedState.is(Blocks.SLIME_BLOCK); ++ boolean flag = self.movedState.isSlimeBlock(); Iterator iterator = list.iterator(); while (true) { diff --git a/patches/minecraft/net/minecraft/world/level/block/piston/PistonStructureResolver.java.patch b/patches/minecraft/net/minecraft/world/level/block/piston/PistonStructureResolver.java.patch index 776b3d8a74..8a68473bd0 100644 --- a/patches/minecraft/net/minecraft/world/level/block/piston/PistonStructureResolver.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/piston/PistonStructureResolver.java.patch @@ -13,24 +13,24 @@ } } -- private static boolean isSticky(BlockState p_155938_) { -- return p_155938_.is(Blocks.SLIME_BLOCK) || p_155938_.is(Blocks.HONEY_BLOCK); +- private static boolean isSticky(final BlockState state) { +- return state.is(Blocks.SLIME_BLOCK) || state.is(Blocks.HONEY_BLOCK); - } - -- private static boolean canStickToEachOther(BlockState p_155940_, BlockState p_155941_) { -- if (p_155940_.is(Blocks.HONEY_BLOCK) && p_155941_.is(Blocks.SLIME_BLOCK)) { +- private static boolean canStickToEachOther(final BlockState state1, final BlockState state2) { +- if (state1.is(Blocks.HONEY_BLOCK) && state2.is(Blocks.SLIME_BLOCK)) { - return false; - } else { -- return p_155940_.is(Blocks.SLIME_BLOCK) && p_155941_.is(Blocks.HONEY_BLOCK) ? false : isSticky(p_155940_) || isSticky(p_155941_); +- return state1.is(Blocks.SLIME_BLOCK) && state2.is(Blocks.HONEY_BLOCK) ? false : isSticky(state1) || isSticky(state2); - } - } - - private boolean addBlockLine(BlockPos p_60434_, Direction p_60435_) { - BlockState blockstate = this.level.getBlockState(p_60434_); + private boolean addBlockLine(final BlockPos start, final Direction direction) { + BlockState blockstate = this.level.getBlockState(start); - if (blockstate.isAir()) { -+ if (level.isEmptyBlock(p_60434_)) { ++ if (level.isEmptyBlock(start)) { return true; - } else if (!PistonBaseBlock.isPushable(blockstate, this.level, p_60434_, this.pushDirection, false, p_60435_)) { + } else if (!PistonBaseBlock.isPushable(blockstate, this.level, start, this.pushDirection, false, direction)) { return true; @@ -86,12 +_,12 @@ if (i + this.toPush.size() > 12) { @@ -38,7 +38,7 @@ } else { - while (isSticky(blockstate)) { + while (blockstate.isStickyBlock()) { - BlockPos blockpos = p_60434_.relative(this.pushDirection.getOpposite(), i); + BlockPos blockpos = start.relative(this.pushDirection.getOpposite(), i); BlockState blockstate1 = blockstate; blockstate = this.level.getBlockState(blockpos); if (blockstate.isAir() @@ -56,9 +56,9 @@ return false; } } -@@ -173,7 +_,7 @@ +@@ -174,7 +_,7 @@ if (direction.getAxis() != this.pushDirection.getAxis()) { - BlockPos blockpos = p_60432_.relative(direction); + BlockPos blockpos = fromPos.relative(direction); BlockState blockstate1 = this.level.getBlockState(blockpos); - if (canStickToEachOther(blockstate1, blockstate) && !this.addBlockLine(blockpos, direction)) { + if (blockstate1.canStickTo(blockstate) && blockstate.canStickTo(blockstate1) && !this.addBlockLine(blockpos, direction)) { diff --git a/patches/minecraft/net/minecraft/world/level/block/state/BlockBehaviour.java.patch b/patches/minecraft/net/minecraft/world/level/block/state/BlockBehaviour.java.patch index ca9befbd7d..31425e5253 100644 --- a/patches/minecraft/net/minecraft/world/level/block/state/BlockBehaviour.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/state/BlockBehaviour.java.patch @@ -1,52 +1,52 @@ --- a/net/minecraft/world/level/block/state/BlockBehaviour.java +++ b/net/minecraft/world/level/block/state/BlockBehaviour.java -@@ -177,7 +_,7 @@ - if (!p_310712_.isAir() && p_312709_.getBlockInteraction() != Explosion.BlockInteraction.TRIGGER_BLOCK) { - Block block = p_310712_.getBlock(); - boolean flag = p_312709_.getIndirectSourceEntity() instanceof Player; -- if (block.dropFromExplosion(p_312709_)) { -+ if (p_310712_.canDropFromExplosion(p_367589_, p_311490_, p_312709_)) { - BlockEntity blockentity = p_310712_.hasBlockEntity() ? p_367589_.getBlockEntity(p_311490_) : null; - LootParams.Builder lootparams$builder = new LootParams.Builder(p_367589_) - .withParameter(LootContextParams.ORIGIN, Vec3.atCenterOf(p_311490_)) -@@ -192,8 +_,7 @@ - p_310712_.getDrops(lootparams$builder).forEach(p_309419_ -> p_311277_.accept(p_309419_, p_311490_)); +@@ -181,7 +_,7 @@ + if (!state.isAir() && explosion.getBlockInteraction() != Explosion.BlockInteraction.TRIGGER_BLOCK) { + Block block = state.getBlock(); + boolean flag = explosion.getIndirectSourceEntity() instanceof Player; +- if (block.dropFromExplosion(explosion)) { ++ if (state.canDropFromExplosion(level, pos, explosion)) { + BlockEntity blockentity = state.hasBlockEntity() ? level.getBlockEntity(pos) : null; + LootParams.Builder lootparams$builder = new LootParams.Builder(level) + .withParameter(LootContextParams.ORIGIN, Vec3.atCenterOf(pos)) +@@ -196,8 +_,7 @@ + state.getDrops(lootparams$builder).forEach(stack -> onHit.accept(stack, pos)); } -- p_367589_.setBlock(p_311490_, Blocks.AIR.defaultBlockState(), 3); -- block.wasExploded(p_367589_, p_311490_, p_312709_); -+ p_310712_.onBlockExploded(p_367589_, p_311490_, p_312709_); +- level.setBlock(pos, Blocks.AIR.defaultBlockState(), 3); +- block.wasExploded(level, pos, explosion); ++ state.onBlockExploded(level, pos, explosion); } } -@@ -346,12 +_,15 @@ +@@ -358,12 +_,15 @@ if (f == -1.0F) { return 0.0F; } else { -- int i = p_60467_.hasCorrectToolForDrops(p_60466_) ? 30 : 100; -- return p_60467_.getDestroySpeed(p_60466_) / f / i; -+ int i = net.minecraftforge.common.ForgeHooks.isCorrectToolForDrops(p_60466_, p_60467_) ? 30 : 100; -+ return p_60467_.getDestroySpeed(p_60466_, p_60469_) / f / (float)i; +- int i = player.hasCorrectToolForDrops(state) ? 30 : 100; +- return player.getDestroySpeed(state) / f / i; ++ int i = net.minecraftforge.common.ForgeHooks.isCorrectToolForDrops(state, player) ? 30 : 100; ++ return player.getDestroySpeed(state, pos) / f / (float)i; } } - protected void spawnAfterBreak(BlockState p_222949_, ServerLevel p_222950_, BlockPos p_222951_, ItemStack p_222952_, boolean p_222953_) { -+ if (p_222953_) { -+ net.minecraftforge.common.ForgeHooks.dropXpForBlock(p_222949_, p_222950_, p_222951_, p_222952_); + protected void spawnAfterBreak(final BlockState state, final ServerLevel level, final BlockPos pos, final ItemStack tool, final boolean dropExperience) { ++ if (dropExperience) { ++ net.minecraftforge.common.ForgeHooks.dropXpForBlock(state, level, pos, tool); + } } - protected void attack(BlockState p_60499_, Level p_60500_, BlockPos p_60501_, Player p_60502_) { -@@ -387,6 +_,8 @@ + protected void attack(final BlockState state, final Level level, final BlockPos pos, final Player player) { +@@ -406,6 +_,8 @@ return this.isRandomlyTicking; } + /** @deprecated Forge: Use more sensitive version {@link net.minecraftforge.common.extensions.IForgeBlockState#getSoundType(LevelReader, BlockPos, Entity) } */ + @Deprecated - protected SoundType getSoundType(BlockState p_328629_) { + protected SoundType getSoundType(final BlockState state) { return this.soundType; } -@@ -407,6 +_,10 @@ +@@ -426,6 +_,10 @@ return this.properties.destroyTime; } @@ -54,10 +54,10 @@ + return ((BlockStateBase)state).isAir; + } + - public abstract static class BlockStateBase extends StateHolder { + public abstract static class BlockStateBase extends StateHolder implements TypedInstance { private static final Direction[] DIRECTIONS = Direction.values(); - private static final VoxelShape[] EMPTY_OCCLUSION_SHAPES = Util.make(new VoxelShape[DIRECTIONS.length], p_368402_ -> Arrays.fill(p_368402_, Shapes.empty())); -@@ -557,12 +_,14 @@ + private static final VoxelShape[] EMPTY_OCCLUSION_SHAPES = Util.make(new VoxelShape[DIRECTIONS.length], s -> Arrays.fill(s, Shapes.empty())); +@@ -577,12 +_,14 @@ return this.useShapeForLightOcclusion; } @@ -73,20 +73,20 @@ } public boolean ignitedByLava() { -@@ -575,9 +_,11 @@ +@@ -595,9 +_,11 @@ } - public MapColor getMapColor(BlockGetter p_285002_, BlockPos p_285293_) { + public MapColor getMapColor(final BlockGetter level, final BlockPos pos) { - return this.mapColor; -+ return getBlock().getMapColor(this.asState(), p_285002_, p_285293_, this.mapColor); ++ return getBlock().getMapColor(this.asState(), level, pos, this.mapColor); } + /** @deprecated use {@link BlockState#rotate(LevelAccessor, BlockPos, Rotation)} */ + @Deprecated - public BlockState rotate(Rotation p_60718_) { - return this.getBlock().rotate(this.asState(), p_60718_); + public BlockState rotate(final Rotation rotation) { + return this.getBlock().rotate(this.asState(), rotation); } -@@ -631,6 +_,8 @@ +@@ -651,6 +_,8 @@ } public PushReaction getPistonPushReaction() { @@ -95,12 +95,12 @@ return this.pushReaction; } -@@ -996,7 +_,7 @@ - BlockBehaviour.StateArgumentPredicate> isValidSpawn = (p_360542_, p_360543_, p_360544_, p_360545_) -> p_360542_.isFaceSturdy( - p_360543_, p_360544_, Direction.UP +@@ -1005,7 +_,7 @@ + private BlockBehaviour.StateArgumentPredicate> isValidSpawn = (state, level, pos, entityType) -> state.isFaceSturdy( + level, pos, Direction.UP ) -- && p_360542_.getLightEmission() < 14; -+ && p_360542_.getLightEmission(p_360543_, p_360544_) < 14; - BlockBehaviour.StatePredicate isRedstoneConductor = (p_360546_, p_360547_, p_360548_) -> p_360546_.isCollisionShapeFullBlock(p_360547_, p_360548_); - BlockBehaviour.StatePredicate isSuffocating = (p_360539_, p_360540_, p_360541_) -> p_360539_.blocksMotion() && p_360539_.isCollisionShapeFullBlock(p_360540_, p_360541_); - BlockBehaviour.StatePredicate isViewBlocking = this.isSuffocating; +- && state.getLightEmission() < 14; ++ && state.getLightEmission(level, pos) < 14; + private BlockBehaviour.StatePredicate isRedstoneConductor = BlockBehaviour.BlockStateBase::isCollisionShapeFullBlock; + private BlockBehaviour.StatePredicate isSuffocating = (state, level, pos) -> state.blocksMotion() && state.isCollisionShapeFullBlock(level, pos); + private BlockBehaviour.StatePredicate isViewBlocking = this.isSuffocating; diff --git a/patches/minecraft/net/minecraft/world/level/block/state/BlockState.java.patch b/patches/minecraft/net/minecraft/world/level/block/state/BlockState.java.patch index f068008450..217df8df28 100644 --- a/patches/minecraft/net/minecraft/world/level/block/state/BlockState.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/state/BlockState.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/level/block/state/BlockState.java +++ b/net/minecraft/world/level/block/state/BlockState.java -@@ -7,7 +_,7 @@ +@@ -5,7 +_,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.properties.Property; -public class BlockState extends BlockBehaviour.BlockStateBase { +public class BlockState extends BlockBehaviour.BlockStateBase implements net.minecraftforge.common.extensions.IForgeBlockState { - public static final Codec CODEC = codec(BuiltInRegistries.BLOCK.byNameCodec(), Block::defaultBlockState).stable(); + public static final Codec CODEC = codec(BuiltInRegistries.BLOCK.byNameCodec(), Block::defaultBlockState, Block::getStateDefinition).stable(); - public BlockState(Block p_61042_, Reference2ObjectArrayMap, Comparable> p_328252_, MapCodec p_61044_) { + public BlockState(final Block owner, final Property[] propertyKeys, final Comparable[] propertyValues) { diff --git a/patches/minecraft/net/minecraft/world/level/chunk/ChunkAccess.java.patch b/patches/minecraft/net/minecraft/world/level/chunk/ChunkAccess.java.patch index 701236a2cd..9c38e0a8c9 100644 --- a/patches/minecraft/net/minecraft/world/level/chunk/ChunkAccess.java.patch +++ b/patches/minecraft/net/minecraft/world/level/chunk/ChunkAccess.java.patch @@ -3,33 +3,33 @@ @@ -318,23 +_,28 @@ @Override - public final void findBlockLightSources(BiConsumer p_285269_) { -- this.findBlocks(p_360555_ -> p_360555_.getLightEmission() != 0, p_285269_); -+ this.findBlocks((p_360555_, pos) -> p_360555_.getLightEmission(this, pos) != 0, p_285269_); + public final void findBlockLightSources(final BiConsumer consumer) { +- this.findBlocks(state -> state.getLightEmission() != 0, consumer); ++ this.findBlocks((state, pos) -> state.getLightEmission(this, pos) != 0, consumer); } - public void findBlocks(Predicate p_285343_, BiConsumer p_285030_) { -+ findBlocks((state, pos) -> p_285343_.test(state), p_285030_); + public void findBlocks(final Predicate predicate, final BiConsumer consumer) { ++ findBlocks((state, pos) -> predicate.test(state), consumer); + } + -+ public void findBlocks(java.util.function.BiPredicate p_285343_, BiConsumer p_285030_) { ++ public void findBlocks(final java.util.function.BiPredicate predicate, final BiConsumer consumer) { BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); for (int i = this.getMinSectionY(); i <= this.getMaxSectionY(); i++) { LevelChunkSection levelchunksection = this.getSection(this.getSectionIndexFromSectionY(i)); -- if (levelchunksection.maybeHas(p_285343_)) { -+ if (levelchunksection.maybeHas(state -> p_285343_.test(state, BlockPos.ZERO))) { +- if (levelchunksection.maybeHas(predicate)) { ++ if (levelchunksection.maybeHas(state -> predicate.test(state, BlockPos.ZERO))) { BlockPos blockpos = SectionPos.of(this.chunkPos, i).origin(); for (int j = 0; j < 16; j++) { for (int k = 0; k < 16; k++) { for (int l = 0; l < 16; l++) { BlockState blockstate = levelchunksection.getBlockState(l, j, k); -- if (p_285343_.test(blockstate)) { -- p_285030_.accept(blockpos$mutableblockpos.setWithOffset(blockpos, l, j, k), blockstate); +- if (predicate.test(blockstate)) { +- consumer.accept(blockpos$mutableblockpos.setWithOffset(blockpos, l, j, k), blockstate); + blockpos$mutableblockpos.setWithOffset(blockpos, l, j, k); -+ if (p_285343_.test(blockstate, blockpos$mutableblockpos.immutable())) { -+ p_285030_.accept(blockpos$mutableblockpos, blockstate); ++ if (predicate.test(blockstate, blockpos$mutableblockpos.immutable())) { ++ consumer.accept(blockpos$mutableblockpos, blockstate); } } } diff --git a/patches/minecraft/net/minecraft/world/level/chunk/ChunkGenerator.java.patch b/patches/minecraft/net/minecraft/world/level/chunk/ChunkGenerator.java.patch index 81c159a836..76bbd27b2d 100644 --- a/patches/minecraft/net/minecraft/world/level/chunk/ChunkGenerator.java.patch +++ b/patches/minecraft/net/minecraft/world/level/chunk/ChunkGenerator.java.patch @@ -1,21 +1,21 @@ --- a/net/minecraft/world/level/chunk/ChunkGenerator.java +++ b/net/minecraft/world/level/chunk/ChunkGenerator.java -@@ -81,7 +_,7 @@ - public abstract class ChunkGenerator { - public static final Codec CODEC = BuiltInRegistries.CHUNK_GENERATOR.byNameCodec().dispatchStable(ChunkGenerator::codec, Function.identity()); +@@ -84,7 +_,7 @@ + .byNameCodec() + .dispatchStable(ChunkGenerator::codec, Function.identity()); protected final BiomeSource biomeSource; - private final Supplier> featuresPerStep; + private final net.minecraftforge.common.util.ClearableLazy> featuresPerStep; private final Function, BiomeGenerationSettings> generationSettingsGetter; - public ChunkGenerator(BiomeSource p_256133_) { -@@ -91,9 +_,14 @@ - public ChunkGenerator(BiomeSource p_255838_, Function, BiomeGenerationSettings> p_256216_) { - this.biomeSource = p_255838_; - this.generationSettingsGetter = p_256216_; + public ChunkGenerator(final BiomeSource biomeSource) { +@@ -94,9 +_,14 @@ + public ChunkGenerator(final BiomeSource biomeSource, final Function, BiomeGenerationSettings> generationSettingsGetter) { + this.biomeSource = biomeSource; + this.generationSettingsGetter = generationSettingsGetter; - this.featuresPerStep = Suppliers.memoize( + this.featuresPerStep = net.minecraftforge.common.util.ClearableLazy.concurrentOf( - () -> FeatureSorter.buildFeaturesPerStep(List.copyOf(p_255838_.possibleBiomes()), p_223216_ -> p_256216_.apply(p_223216_).features(), true) + () -> FeatureSorter.buildFeaturesPerStep(List.copyOf(biomeSource.possibleBiomes()), b -> generationSettingsGetter.apply(b).features(), true) ); + } + diff --git a/patches/minecraft/net/minecraft/world/level/chunk/LevelChunk.java.patch b/patches/minecraft/net/minecraft/world/level/chunk/LevelChunk.java.patch index 8f33ba71eb..a814638c00 100644 --- a/patches/minecraft/net/minecraft/world/level/chunk/LevelChunk.java.patch +++ b/patches/minecraft/net/minecraft/world/level/chunk/LevelChunk.java.patch @@ -1,65 +1,65 @@ --- a/net/minecraft/world/level/chunk/LevelChunk.java +++ b/net/minecraft/world/level/chunk/LevelChunk.java -@@ -63,7 +_,7 @@ +@@ -64,7 +_,7 @@ import org.jspecify.annotations.Nullable; import org.slf4j.Logger; -public class LevelChunk extends ChunkAccess implements DebugValueSource { +public class LevelChunk extends ChunkAccess implements DebugValueSource, net.minecraftforge.common.capabilities.ICapabilityProviderImpl { - static final Logger LOGGER = LogUtils.getLogger(); + private static final Logger LOGGER = LogUtils.getLogger(); private static final TickingBlockEntity NULL_TICKER = new TickingBlockEntity() { @Override -@@ -123,6 +_,7 @@ - this.postLoad = p_196861_; - this.blockTicks = p_196857_; - this.fluidTicks = p_196858_; +@@ -124,6 +_,7 @@ + this.postLoad = postLoad; + this.blockTicks = blockTicks; + this.fluidTicks = fluidTicks; + this.capProvider.initInternal(); } - public LevelChunk(ServerLevel p_196850_, ProtoChunk p_196851_, LevelChunk.@Nullable PostLoadProcessor p_196852_) { -@@ -319,7 +_,7 @@ + public LevelChunk(final ServerLevel level, final ProtoChunk protoChunk, final LevelChunk.@Nullable PostLoadProcessor postLoad) { +@@ -321,7 +_,7 @@ if (!levelchunksection.getBlockState(j, k, l).is(block)) { return null; } else { -- if (!this.level.isClientSide() && (p_393998_ & 512) == 0) { -+ if (!this.level.isClientSide() && (p_393998_ & 512) == 0 && !this.level.captureBlockSnapshots) { - p_62866_.onPlace(this.level, p_62865_, blockstate, flag2); +- if (!this.level.isClientSide() && (flags & 512) == 0) { ++ if (!this.level.isClientSide() && (flags & 512) == 0 && !this.level.captureBlockSnapshots) { + state.onPlace(this.level, pos, blockstate, flag2); } -@@ -371,6 +_,12 @@ +@@ -368,6 +_,12 @@ - public @Nullable BlockEntity getBlockEntity(BlockPos p_62868_, LevelChunk.EntityCreationType p_62869_) { - BlockEntity blockentity = this.blockEntities.get(p_62868_); + public @Nullable BlockEntity getBlockEntity(final BlockPos pos, final LevelChunk.EntityCreationType creationType) { + BlockEntity blockentity = this.blockEntities.get(pos); + + if (blockentity != null && blockentity.isRemoved()) { -+ blockEntities.remove(p_62868_); ++ blockEntities.remove(pos); + blockentity = null; + } + if (blockentity == null) { - CompoundTag compoundtag = this.pendingBlockEntities.remove(p_62868_); + CompoundTag compoundtag = this.pendingBlockEntities.remove(pos); if (compoundtag != null) { -@@ -388,9 +_,6 @@ +@@ -385,9 +_,6 @@ this.addAndRegisterBlockEntity(blockentity); } } - } else if (blockentity.isRemoved()) { -- this.blockEntities.remove(p_62868_); +- this.blockEntities.remove(pos); - return null; } return blockentity; -@@ -405,6 +_,7 @@ +@@ -402,6 +_,7 @@ - this.level.onBlockEntityAdded(p_156391_); - this.updateBlockEntityTicker(p_156391_); -+ p_156391_.onLoad(); + this.level.onBlockEntityAdded(blockEntity); + this.updateBlockEntityTicker(blockEntity); ++ blockEntity.onLoad(); } } -@@ -456,9 +_,14 @@ - public @Nullable CompoundTag getBlockEntityNbtForSaving(BlockPos p_62932_, HolderLookup.Provider p_329605_) { - BlockEntity blockentity = this.getBlockEntity(p_62932_); +@@ -453,9 +_,14 @@ + public @Nullable CompoundTag getBlockEntityNbtForSaving(final BlockPos blockPos, final HolderLookup.Provider registryAccess) { + BlockEntity blockentity = this.getBlockEntity(blockPos); if (blockentity != null && !blockentity.isRemoved()) { + try { CompoundTag compoundtag1 = blockentity.saveWithFullMetadata(this.level.registryAccess()); @@ -70,38 +70,38 @@ + return null; + } } else { - CompoundTag compoundtag = this.pendingBlockEntities.get(p_62932_); + CompoundTag compoundtag = this.pendingBlockEntities.get(blockPos); if (compoundtag != null) { -@@ -538,9 +_,10 @@ - (p_405747_, p_405748_, p_405749_) -> { - BlockEntity blockentity = this.getBlockEntity(p_405747_, LevelChunk.EntityCreationType.IMMEDIATE); - if (blockentity != null && p_405749_ != null && blockentity.getType() == p_405748_) { +@@ -537,9 +_,10 @@ + (pos, type, tag) -> { + BlockEntity blockentity = this.getBlockEntity(pos, LevelChunk.EntityCreationType.IMMEDIATE); + if (blockentity != null && tag != null && blockentity.getType() == type) { - blockentity.loadWithComponents( + var input = ( - TagValueInput.create(problemreporter$scopedcollector.forChild(blockentity.problemPath()), this.level.registryAccess(), p_405749_) + TagValueInput.create(problemreporter$scopedcollector.forChild(blockentity.problemPath()), this.level.registryAccess(), tag) ); + blockentity.handleUpdateTag(input, this.level.registryAccess()); } } ); -@@ -678,6 +_,7 @@ +@@ -679,6 +_,7 @@ } public void clearAllBlockEntities() { + this.blockEntities.values().forEach(BlockEntity::onChunkUnloaded); this.blockEntities.values().forEach(BlockEntity::setRemoved); this.blockEntities.clear(); - this.tickersInLevel.values().forEach(p_187966_ -> p_187966_.rebind(NULL_TICKER)); -@@ -685,6 +_,7 @@ + this.tickersInLevel.values().forEach(ticker -> ticker.rebind(NULL_TICKER)); +@@ -686,6 +_,7 @@ } public void registerAllBlockEntitiesAfterLevelLoad() { + this.level.addFreshBlockEntities(this.blockEntities.values()); - this.blockEntities.values().forEach(p_405750_ -> { + this.blockEntities.values().forEach(blockEntity -> { if (this.level instanceof ServerLevel serverlevel) { - this.addGameEventListener(p_405750_, serverlevel); -@@ -737,6 +_,24 @@ - return new LevelChunk.BoundTickingBlockEntity<>(p_156376_, p_156377_); + this.addGameEventListener(blockEntity, serverlevel); +@@ -738,6 +_,24 @@ + return new LevelChunk.BoundTickingBlockEntity<>(blockEntity, ticker); } + private final net.minecraftforge.common.capabilities.CapabilityProvider.AsField.LevelChunks capProvider = new net.minecraftforge.common.capabilities.CapabilityProvider.AsField.LevelChunks(this); @@ -122,10 +122,10 @@ + capProvider.reviveCaps(); + } + - class BoundTickingBlockEntity implements TickingBlockEntity { + private class BoundTickingBlockEntity implements TickingBlockEntity { private final T blockEntity; private final BlockEntityTicker ticker; -@@ -754,6 +_,7 @@ +@@ -757,6 +_,7 @@ if (LevelChunk.this.isTicking(blockpos)) { try { ProfilerFiller profilerfiller = Profiler.get(); @@ -133,7 +133,7 @@ profilerfiller.push(this::getType); BlockState blockstate = LevelChunk.this.getBlockState(blockpos); if (this.blockEntity.getType().isValid(blockstate)) { -@@ -775,6 +_,11 @@ +@@ -778,6 +_,11 @@ CrashReport crashreport = CrashReport.forThrowable(throwable, "Ticking block entity"); CrashReportCategory crashreportcategory = crashreport.addCategory("Block entity being ticked"); this.blockEntity.fillCrashReportCategory(crashreportcategory); @@ -145,7 +145,7 @@ throw new ReportedException(crashreport); } } -@@ -848,6 +_,33 @@ +@@ -851,6 +_,33 @@ public String toString() { return this.ticker + " "; } diff --git a/patches/minecraft/net/minecraft/world/level/chunk/status/ChunkStatusTasks.java.patch b/patches/minecraft/net/minecraft/world/level/chunk/status/ChunkStatusTasks.java.patch index d5fa13b353..1bad85c6fd 100644 --- a/patches/minecraft/net/minecraft/world/level/chunk/status/ChunkStatusTasks.java.patch +++ b/patches/minecraft/net/minecraft/world/level/chunk/status/ChunkStatusTasks.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/chunk/status/ChunkStatusTasks.java +++ b/net/minecraft/world/level/chunk/status/ChunkStatusTasks.java -@@ -203,9 +_,15 @@ +@@ -215,9 +_,15 @@ levelchunk.setFullStatus(generationchunkholder::getFullStatus); levelchunk.runPostLoad(); levelchunk.setLoaded(true); @@ -8,11 +8,11 @@ + generationchunkholder.currentlyLoading = levelchunk; // Forge - bypass the future chain when getChunk is called, this prevents deadlocks. levelchunk.registerAllBlockEntitiesAfterLevelLoad(); levelchunk.registerTickContainerInLevel(serverlevel); - levelchunk.setUnsavedListener(p_342042_.unsavedListener()); + levelchunk.setUnsavedListener(context.unsavedListener()); + net.minecraftforge.event.ForgeEventFactory.onChunkLoad(levelchunk, !(protochunk instanceof ImposterProtoChunk)); + } finally { + generationchunkholder.currentlyLoading = null; // Forge - Stop bypassing the future chain. + } return levelchunk; }, - p_342042_.mainThreadExecutor() + context.mainThreadExecutor() diff --git a/patches/minecraft/net/minecraft/world/level/chunk/storage/EntityStorage.java.patch b/patches/minecraft/net/minecraft/world/level/chunk/storage/EntityStorage.java.patch index ee3e56961e..55f8e8d5f3 100644 --- a/patches/minecraft/net/minecraft/world/level/chunk/storage/EntityStorage.java.patch +++ b/patches/minecraft/net/minecraft/world/level/chunk/storage/EntityStorage.java.patch @@ -2,15 +2,15 @@ +++ b/net/minecraft/world/level/chunk/storage/EntityStorage.java @@ -108,9 +_,13 @@ TagValueOutput tagvalueoutput = TagValueOutput.createWithContext( - problemreporter$scopedcollector.forChild(p_405760_.problemPath()), p_405760_.registryAccess() + problemreporter$scopedcollector.forChild(e.problemPath()), e.registryAccess() ); + try { - if (p_405760_.save(tagvalueoutput)) { + if (e.save(tagvalueoutput)) { CompoundTag compoundtag1 = tagvalueoutput.buildResult(); listtag.add(compoundtag1); + } -+ } catch (Exception e) { -+ LOGGER.error("An Entity type {} has thrown an exception trying to write state. It will not persist. Report this to the mod author", p_405760_.getType(), e); ++ } catch (Exception exception) { ++ LOGGER.error("An Entity type {} has thrown an exception trying to write state. It will not persist. Report this to the mod author", e.getType(), exception); } } ); diff --git a/patches/minecraft/net/minecraft/world/level/dimension/end/EndDragonFight.java.patch b/patches/minecraft/net/minecraft/world/level/dimension/end/EnderDragonFight.java.patch similarity index 58% rename from patches/minecraft/net/minecraft/world/level/dimension/end/EndDragonFight.java.patch rename to patches/minecraft/net/minecraft/world/level/dimension/end/EnderDragonFight.java.patch index 20e99700e9..12e2a5402f 100644 --- a/patches/minecraft/net/minecraft/world/level/dimension/end/EndDragonFight.java.patch +++ b/patches/minecraft/net/minecraft/world/level/dimension/end/EnderDragonFight.java.patch @@ -1,6 +1,6 @@ ---- a/net/minecraft/world/level/dimension/end/EndDragonFight.java -+++ b/net/minecraft/world/level/dimension/end/EndDragonFight.java -@@ -535,6 +_,14 @@ +--- a/net/minecraft/world/level/dimension/end/EnderDragonFight.java ++++ b/net/minecraft/world/level/dimension/end/EnderDragonFight.java +@@ -586,6 +_,14 @@ } } @@ -12,6 +12,6 @@ + this.dragonEvent.removePlayer(player); + } + - public @Nullable UUID getDragonUUID() { + public @Nullable UUID dragonUUID() { return this.dragonUUID; } diff --git a/patches/minecraft/net/minecraft/world/level/entity/PersistentEntitySectionManager.java.patch b/patches/minecraft/net/minecraft/world/level/entity/PersistentEntitySectionManager.java.patch index 1fa9fe6938..f7431c229d 100644 --- a/patches/minecraft/net/minecraft/world/level/entity/PersistentEntitySectionManager.java.patch +++ b/patches/minecraft/net/minecraft/world/level/entity/PersistentEntitySectionManager.java.patch @@ -1,50 +1,52 @@ --- a/net/minecraft/world/level/entity/PersistentEntitySectionManager.java +++ b/net/minecraft/world/level/entity/PersistentEntitySectionManager.java -@@ -71,7 +_,18 @@ - return this.addEntity(p_157534_, false); +@@ -72,7 +_,18 @@ + return this.addEntity(entity, false); } + public boolean addNewEntityWithoutEvent(T entity) { + return this.addEntityWithoutEvent(entity, false); + } + - private boolean addEntity(T p_157539_, boolean p_157540_) { -+ if (p_157539_ instanceof Entity entity && net.minecraftforge.event.ForgeEventFactory.onEntityJoinLevel(entity, entity.level(), p_157540_)) { + private boolean addEntity(final T entity, final boolean loaded) { ++ if (entity instanceof Entity && net.minecraftforge.event.ForgeEventFactory.onEntityJoinLevel((Entity)entity, ((Entity)entity).level(), loaded)) { + return false; + } -+ return addEntityWithoutEvent(p_157539_, p_157540_); ++ return addEntityWithoutEvent(entity, loaded); + } + -+ private boolean addEntityWithoutEvent(T p_157539_, boolean p_157540_) { - if (!this.addEntityUuid(p_157539_)) { ++ private boolean addEntityWithoutEvent(final T entity, final boolean loaded) { + if (!this.addEntityUuid(entity)) { return false; } else { -@@ -92,6 +_,10 @@ - this.startTicking(p_157539_); +@@ -93,6 +_,10 @@ + this.startTicking(entity); } -+ if (p_157539_ instanceof Entity entity) { -+ entity.onAddedToWorld(); ++ if (entity instanceof Entity) { ++ ((Entity)entity).onAddedToLevel(); + } + return true; } } -@@ -369,11 +_,13 @@ +@@ -370,6 +_,7 @@ - class Callback implements EntityInLevelCallback { + private class Callback implements EntityInLevelCallback { private final T entity; + private final Entity realEntity; private long currentSectionKey; private EntitySection currentSection; - Callback(final T p_157614_, final long p_157615_, final EntitySection p_157616_) { - this.entity = p_157614_; -+ this.realEntity = p_157614_ instanceof Entity e ? e : null; - this.currentSectionKey = p_157615_; - this.currentSection = p_157616_; +@@ -377,6 +_,7 @@ + Objects.requireNonNull(PersistentEntitySectionManager.this); + super(); + this.entity = entity; ++ this.realEntity = entity instanceof Entity e ? e : null; + this.currentSectionKey = currentSectionKey; + this.currentSection = currentSection; } -@@ -392,9 +_,13 @@ +@@ -395,9 +_,13 @@ PersistentEntitySectionManager.this.removeSectionIfEmpty(this.currentSectionKey, this.currentSection); EntitySection entitysection = PersistentEntitySectionManager.this.sectionStorage.getOrCreateSection(i); entitysection.add(this.entity); diff --git a/patches/minecraft/net/minecraft/world/level/entity/TransientEntitySectionManager.java.patch b/patches/minecraft/net/minecraft/world/level/entity/TransientEntitySectionManager.java.patch index 6048c4e89c..63426b7617 100644 --- a/patches/minecraft/net/minecraft/world/level/entity/TransientEntitySectionManager.java.patch +++ b/patches/minecraft/net/minecraft/world/level/entity/TransientEntitySectionManager.java.patch @@ -1,20 +1,22 @@ --- a/net/minecraft/world/level/entity/TransientEntitySectionManager.java +++ b/net/minecraft/world/level/entity/TransientEntitySectionManager.java -@@ -82,11 +_,13 @@ +@@ -83,6 +_,7 @@ - class Callback implements EntityInLevelCallback { + private class Callback implements EntityInLevelCallback { private final T entity; + private final Entity realEntity; private long currentSectionKey; private EntitySection currentSection; - Callback(final T p_157673_, final long p_157674_, final EntitySection p_157675_) { - this.entity = p_157673_; -+ this.realEntity = p_157673_ instanceof Entity ? (Entity) p_157673_ : null; - this.currentSectionKey = p_157674_; - this.currentSection = p_157675_; +@@ -90,6 +_,7 @@ + Objects.requireNonNull(TransientEntitySectionManager.this); + super(); + this.entity = entity; ++ this.realEntity = entity instanceof Entity ? (Entity)entity : null; + this.currentSectionKey = currentSectionKey; + this.currentSection = currentSection; } -@@ -105,6 +_,7 @@ +@@ -108,6 +_,7 @@ TransientEntitySectionManager.this.removeSectionIfEmpty(this.currentSectionKey, this.currentSection); EntitySection entitysection = TransientEntitySectionManager.this.sectionStorage.getOrCreateSection(i); entitysection.add(this.entity); @@ -22,7 +24,7 @@ this.currentSection = entitysection; this.currentSectionKey = i; TransientEntitySectionManager.this.callbacks.onSectionChange(this.entity); -@@ -116,6 +_,9 @@ +@@ -119,6 +_,9 @@ } else if (!flag && flag1) { TransientEntitySectionManager.this.callbacks.onTickingStart(this.entity); } diff --git a/patches/minecraft/net/minecraft/world/level/levelgen/Beardifier.java.patch b/patches/minecraft/net/minecraft/world/level/levelgen/Beardifier.java.patch index fe7162dca5..81292972f6 100644 --- a/patches/minecraft/net/minecraft/world/level/levelgen/Beardifier.java.patch +++ b/patches/minecraft/net/minecraft/world/level/levelgen/Beardifier.java.patch @@ -3,7 +3,7 @@ @@ -52,6 +_,11 @@ for (StructurePiece structurepiece : structurestart.getPieces()) { - if (structurepiece.isCloseToChunk(p_223939_, 12)) { + if (structurepiece.isCloseToChunk(chunkPos, 12)) { + if (structurepiece instanceof net.minecraftforge.common.world.PieceBeardifierModifier pieceBeardifierModifier) { + if (pieceBeardifierModifier.getTerrainAdjustment() != TerrainAdjustment.NONE) { + list1.add(new Beardifier.Rigid(pieceBeardifierModifier.getBeardifierBox(), pieceBeardifierModifier.getTerrainAdjustment(), pieceBeardifierModifier.getGroundLevelDelta())); diff --git a/patches/minecraft/net/minecraft/world/level/levelgen/DebugLevelSource.java.patch b/patches/minecraft/net/minecraft/world/level/levelgen/DebugLevelSource.java.patch index 0d33c3dcf3..bdcd391b23 100644 --- a/patches/minecraft/net/minecraft/world/level/levelgen/DebugLevelSource.java.patch +++ b/patches/minecraft/net/minecraft/world/level/levelgen/DebugLevelSource.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/levelgen/DebugLevelSource.java +++ b/net/minecraft/world/level/levelgen/DebugLevelSource.java -@@ -135,4 +_,10 @@ +@@ -142,4 +_,10 @@ public int getSeaLevel() { return 63; } diff --git a/patches/minecraft/net/minecraft/world/level/levelgen/PhantomSpawner.java.patch b/patches/minecraft/net/minecraft/world/level/levelgen/PhantomSpawner.java.patch index 7f227935d9..61aa7eb110 100644 --- a/patches/minecraft/net/minecraft/world/level/levelgen/PhantomSpawner.java.patch +++ b/patches/minecraft/net/minecraft/world/level/levelgen/PhantomSpawner.java.patch @@ -1,12 +1,12 @@ --- a/net/minecraft/world/level/levelgen/PhantomSpawner.java +++ b/net/minecraft/world/level/levelgen/PhantomSpawner.java @@ -33,13 +_,18 @@ - for (ServerPlayer serverplayer : p_64576_.players()) { + for (ServerPlayer serverplayer : level.players()) { if (!serverplayer.isSpectator()) { BlockPos blockpos = serverplayer.blockPosition(); -- if (!p_64576_.dimensionType().hasSkyLight() || blockpos.getY() >= p_64576_.getSeaLevel() && p_64576_.canSeeSky(blockpos)) { - DifficultyInstance difficultyinstance = p_64576_.getCurrentDifficultyAt(blockpos); -+ var vanillaPosition = (!p_64576_.dimensionType().hasSkyLight() || blockpos.getY() >= p_64576_.getSeaLevel() && p_64576_.canSeeSky(blockpos)); +- if (!level.dimensionType().hasSkyLight() || blockpos.getY() >= level.getSeaLevel() && level.canSeeSky(blockpos)) { + DifficultyInstance difficultyinstance = level.getCurrentDifficultyAt(blockpos); ++ var vanillaPosition = (!level.dimensionType().hasSkyLight() || blockpos.getY() >= level.getSeaLevel() && level.canSeeSky(blockpos)); + var count = 1 + randomsource.nextInt(difficultyinstance.getDifficulty().getId() + 1); + var event = net.minecraftforge.event.ForgeEventFactory.onPlayerSpawnPhantom(serverplayer, count); + var eventResult = event.getResult(); @@ -22,11 +22,11 @@ .east(-10 + randomsource.nextInt(21)) .south(-10 + randomsource.nextInt(21)); @@ -47,7 +_,7 @@ - FluidState fluidstate = p_64576_.getFluidState(blockpos1); - if (NaturalSpawner.isValidEmptySpawnBlock(p_64576_, blockpos1, blockstate, fluidstate, EntityType.PHANTOM)) { + FluidState fluidstate = level.getFluidState(blockpos1); + if (NaturalSpawner.isValidEmptySpawnBlock(level, blockpos1, blockstate, fluidstate, EntityType.PHANTOM)) { SpawnGroupData spawngroupdata = null; - int k = 1 + randomsource.nextInt(difficultyinstance.getDifficulty().getId() + 1); + int k = event.getPhantomsToSpawn(); for (int l = 0; l < k; l++) { - Phantom phantom = EntityType.PHANTOM.create(p_64576_, EntitySpawnReason.NATURAL); + Phantom phantom = EntityType.PHANTOM.create(level, EntitySpawnReason.NATURAL); diff --git a/patches/minecraft/net/minecraft/world/level/levelgen/WorldDimensions.java.patch b/patches/minecraft/net/minecraft/world/level/levelgen/WorldDimensions.java.patch index a2e8a52a41..01c1b2026a 100644 --- a/patches/minecraft/net/minecraft/world/level/levelgen/WorldDimensions.java.patch +++ b/patches/minecraft/net/minecraft/world/level/levelgen/WorldDimensions.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/level/levelgen/WorldDimensions.java +++ b/net/minecraft/world/level/levelgen/WorldDimensions.java @@ -37,7 +_,7 @@ + public record WorldDimensions(Map, LevelStem> dimensions) { public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( - p_327457_ -> p_327457_.group( -- Codec.unboundedMap(ResourceKey.codec(Registries.LEVEL_STEM), LevelStem.CODEC).fieldOf("dimensions").forGetter(WorldDimensions::dimensions) -+ new net.minecraftforge.common.LenientUnboundedMapCodec<>(ResourceKey.codec(Registries.LEVEL_STEM), LevelStem.CODEC).fieldOf("dimensions").forGetter(WorldDimensions::dimensions) // FORGE: Fix MC-197860 - ) - .apply(p_327457_, p_327457_.stable(WorldDimensions::new)) +- i -> i.group(Codec.unboundedMap(ResourceKey.codec(Registries.LEVEL_STEM), LevelStem.CODEC).fieldOf("dimensions").forGetter(WorldDimensions::dimensions)) ++ i -> i.group(new net.minecraftforge.common.LenientUnboundedMapCodec<>(ResourceKey.codec(Registries.LEVEL_STEM), LevelStem.CODEC).fieldOf("dimensions").forGetter(WorldDimensions::dimensions)) // FORGE: Fix MC-197860 + .apply(i, i.stable(WorldDimensions::new)) ); + private static final Set> BUILTIN_ORDER = ImmutableSet.of(LevelStem.OVERWORLD, LevelStem.NETHER, LevelStem.END); diff --git a/patches/minecraft/net/minecraft/world/level/levelgen/feature/Feature.java.patch b/patches/minecraft/net/minecraft/world/level/levelgen/feature/Feature.java.patch deleted file mode 100644 index 98244132c1..0000000000 --- a/patches/minecraft/net/minecraft/world/level/levelgen/feature/Feature.java.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/net/minecraft/world/level/levelgen/feature/Feature.java -+++ b/net/minecraft/world/level/levelgen/feature/Feature.java -@@ -189,7 +_,9 @@ - } - - protected static boolean isStone(BlockState p_159748_) { -- return p_159748_.is(BlockTags.BASE_STONE_OVERWORLD); -+ // Forge deprecation notice: this patch is deprecated for removal since 1.21. -+ // After that version, Vanilla behaviour will be used (checking against BlockTags.BASE_STONE_OVERWORLD) to better align with other loaders -+ return p_159748_.is(net.minecraftforge.common.Tags.Blocks.STONES); - } - - public static boolean isDirt(BlockState p_159760_) { diff --git a/patches/minecraft/net/minecraft/world/level/levelgen/feature/MonsterRoomFeature.java.patch b/patches/minecraft/net/minecraft/world/level/levelgen/feature/MonsterRoomFeature.java.patch index 013c85cdb3..0663badd03 100644 --- a/patches/minecraft/net/minecraft/world/level/levelgen/feature/MonsterRoomFeature.java.patch +++ b/patches/minecraft/net/minecraft/world/level/levelgen/feature/MonsterRoomFeature.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/world/level/levelgen/feature/MonsterRoomFeature.java +++ b/net/minecraft/world/level/levelgen/feature/MonsterRoomFeature.java -@@ -129,6 +_,6 @@ +@@ -131,6 +_,6 @@ } - private EntityType randomEntityId(RandomSource p_225154_) { -- return Util.getRandom(MOBS, p_225154_); -+ return net.minecraftforge.common.DungeonHooks.getRandomDungeonMob(p_225154_); + private EntityType randomEntityId(final RandomSource random) { +- return Util.getRandom(MOBS, random); ++ return net.minecraftforge.common.DungeonHooks.getRandomDungeonMob(random); } } diff --git a/patches/minecraft/net/minecraft/world/level/levelgen/feature/treedecorators/AlterGroundDecorator.java.patch b/patches/minecraft/net/minecraft/world/level/levelgen/feature/treedecorators/AlterGroundDecorator.java.patch index aacdc8fa61..6355a3511c 100644 --- a/patches/minecraft/net/minecraft/world/level/levelgen/feature/treedecorators/AlterGroundDecorator.java.patch +++ b/patches/minecraft/net/minecraft/world/level/levelgen/feature/treedecorators/AlterGroundDecorator.java.patch @@ -1,13 +1,10 @@ --- a/net/minecraft/world/level/levelgen/feature/treedecorators/AlterGroundDecorator.java +++ b/net/minecraft/world/level/levelgen/feature/treedecorators/AlterGroundDecorator.java -@@ -59,7 +_,9 @@ - for (int i = 2; i >= -3; i--) { - BlockPos blockpos = p_225975_.above(i); - if (Feature.isGrassOrDirt(p_225974_.level(), blockpos)) { -- p_225974_.setBlock(blockpos, this.provider.getState(p_225974_.random(), p_225975_)); -+ var state = this.provider.getState(p_225974_.random(), p_225975_); -+ state = net.minecraftforge.event.ForgeEventFactory.alterGround(p_225974_.level(), p_225974_.random(), blockpos, state); -+ p_225974_.setBlock(blockpos, state); +@@ -58,6 +_,7 @@ + BlockPos blockpos = pos.above(i); + BlockState blockstate = this.provider.getOptionalState(context.level(), context.random(), blockpos); + if (blockstate != null) { ++ blockstate = net.minecraftforge.event.ForgeEventFactory.alterGround(context.level(), context.random(), blockpos, blockstate); + context.setBlock(blockpos, blockstate); break; } - diff --git a/patches/minecraft/net/minecraft/world/level/levelgen/feature/trunkplacers/TrunkPlacer.java.patch b/patches/minecraft/net/minecraft/world/level/levelgen/feature/trunkplacers/TrunkPlacer.java.patch index 4474b72c74..84ed98f18f 100644 --- a/patches/minecraft/net/minecraft/world/level/levelgen/feature/trunkplacers/TrunkPlacer.java.patch +++ b/patches/minecraft/net/minecraft/world/level/levelgen/feature/trunkplacers/TrunkPlacer.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/level/levelgen/feature/trunkplacers/TrunkPlacer.java +++ b/net/minecraft/world/level/levelgen/feature/trunkplacers/TrunkPlacer.java -@@ -64,6 +_,8 @@ - protected static void setDirtAt( - LevelSimulatedReader p_226170_, BiConsumer p_226171_, RandomSource p_226172_, BlockPos p_226173_, TreeConfiguration p_226174_ +@@ -68,6 +_,8 @@ ) { -+ var levelReader = (net.minecraft.world.level.LevelReader)p_226170_; -+ if (!levelReader.getBlockState(p_226173_).onTreeGrow(levelReader, p_226171_, p_226172_, p_226173_, p_226174_)) - if (p_226174_.forceDirt || !isDirt(p_226170_, p_226173_)) { - p_226171_.accept(p_226173_, p_226174_.dirtProvider.getState(p_226172_, p_226173_)); + BlockState blockstate = config.belowTrunkProvider.getOptionalState(level, random, pos); + if (blockstate != null) { ++ var levelReader = (net.minecraft.world.level.LevelReader)level; ++ if (!levelReader.getBlockState(pos).onTreeGrow(levelReader, trunkSetter, random, pos, config)) + trunkSetter.accept(pos, blockstate); } + } diff --git a/patches/minecraft/net/minecraft/world/level/levelgen/structure/Structure.java.patch b/patches/minecraft/net/minecraft/world/level/levelgen/structure/Structure.java.patch index a4c8518628..49ebcafab9 100644 --- a/patches/minecraft/net/minecraft/world/level/levelgen/structure/Structure.java.patch +++ b/patches/minecraft/net/minecraft/world/level/levelgen/structure/Structure.java.patch @@ -10,17 +10,17 @@ + private final Structure.StructureSettings settings; + private final net.minecraftforge.common.world.ModifiableStructureInfo modifiableStructureInfo; - public static RecordCodecBuilder settingsCodec(Instance p_226568_) { -- return Structure.StructureSettings.CODEC.forGetter(p_226595_ -> p_226595_.settings); -+ return Structure.StructureSettings.CODEC.forGetter(p_226595_ -> p_226595_.modifiableStructureInfo().getOriginalStructureInfo().structureSettings()); // FORGE: Patch codec to ignore field redirect coremods. + public static RecordCodecBuilder settingsCodec(final Instance i) { +- return Structure.StructureSettings.CODEC.forGetter(e -> e.settings); ++ return Structure.StructureSettings.CODEC.forGetter(e -> e.modifiableStructureInfo().getOriginalStructureInfo().structureSettings()); // FORGE: Patch codec to ignore field redirect coremods. } - public static MapCodec simpleCodec(Function p_226608_) { + public static MapCodec simpleCodec(final Function constructor) { @@ -58,22 +_,23 @@ - protected Structure(Structure.StructureSettings p_226558_) { - this.settings = p_226558_; -+ this.modifiableStructureInfo = new net.minecraftforge.common.world.ModifiableStructureInfo(new net.minecraftforge.common.world.ModifiableStructureInfo.StructureInfo(p_226558_)); // FORGE: cache original structure info on construction so we can bypass our field read coremods where necessary + protected Structure(final Structure.StructureSettings settings) { + this.settings = settings; ++ this.modifiableStructureInfo = new net.minecraftforge.common.world.ModifiableStructureInfo(new net.minecraftforge.common.world.ModifiableStructureInfo.StructureInfo(settings)); // FORGE: cache original structure info on construction so we can bypass our field read coremods where necessary } public HolderSet biomes() { @@ -43,7 +43,7 @@ + return this.getModifiedStructureSettings().terrainAdaptation; } - public BoundingBox adjustBoundingBox(BoundingBox p_226570_) { + public BoundingBox adjustBoundingBox(final BoundingBox boundingBox) { @@ -209,6 +_,22 @@ } diff --git a/patches/minecraft/net/minecraft/world/level/levelgen/structure/StructurePiece.java.patch b/patches/minecraft/net/minecraft/world/level/levelgen/structure/StructurePiece.java.patch index 8d0ec8177a..408f6294c8 100644 --- a/patches/minecraft/net/minecraft/world/level/levelgen/structure/StructurePiece.java.patch +++ b/patches/minecraft/net/minecraft/world/level/levelgen/structure/StructurePiece.java.patch @@ -1,9 +1,9 @@ --- a/net/minecraft/world/level/levelgen/structure/StructurePiece.java +++ b/net/minecraft/world/level/levelgen/structure/StructurePiece.java -@@ -80,6 +_,9 @@ +@@ -82,6 +_,9 @@ } - public final CompoundTag createTag(StructurePieceSerializationContext p_192645_) { + public final CompoundTag createTag(final StructurePieceSerializationContext context) { + if (BuiltInRegistries.STRUCTURE_PIECE.getKey(this.getType()) == null) { // FORGE: Friendlier error then the Null String error below. + throw new RuntimeException("StructurePiece \"" + this.getClass().getName() + "\": \"" + this.getType() + "\" unregistered, serializing impossible."); + } diff --git a/patches/minecraft/net/minecraft/world/level/levelgen/structure/StructureStart.java.patch b/patches/minecraft/net/minecraft/world/level/levelgen/structure/StructureStart.java.patch index b105dc649d..ce30309de7 100644 --- a/patches/minecraft/net/minecraft/world/level/levelgen/structure/StructureStart.java.patch +++ b/patches/minecraft/net/minecraft/world/level/levelgen/structure/StructureStart.java.patch @@ -1,12 +1,12 @@ --- a/net/minecraft/world/level/levelgen/structure/StructureStart.java +++ b/net/minecraft/world/level/levelgen/structure/StructureStart.java -@@ -98,6 +_,9 @@ - public CompoundTag createTag(StructurePieceSerializationContext p_192661_, ChunkPos p_192662_) { +@@ -103,6 +_,9 @@ + public CompoundTag createTag(final StructurePieceSerializationContext context, final ChunkPos chunkPos) { CompoundTag compoundtag = new CompoundTag(); if (this.isValid()) { -+ if (p_192661_.registryAccess().lookupOrThrow(Registries.STRUCTURE).getKey(this.getStructure()) == null) { // FORGE: This is just a more friendly error instead of the 'Null String' below ++ if (context.registryAccess().lookupOrThrow(Registries.STRUCTURE).getKey(this.getStructure()) == null) { // FORGE: This is just a more friendly error instead of the 'Null String' below + throw new RuntimeException("StructureStart \"" + this.getClass().getName() + "\": \"" + this.getStructure() + "\" unregistered, serializing impossible."); + } - compoundtag.putString("id", p_192661_.registryAccess().lookupOrThrow(Registries.STRUCTURE).getKey(this.structure).toString()); - compoundtag.putInt("ChunkX", p_192662_.x); - compoundtag.putInt("ChunkZ", p_192662_.z); + compoundtag.putString("id", context.registryAccess().lookupOrThrow(Registries.STRUCTURE).getKey(this.structure).toString()); + compoundtag.putInt("ChunkX", chunkPos.x()); + compoundtag.putInt("ChunkZ", chunkPos.z()); diff --git a/patches/minecraft/net/minecraft/world/level/levelgen/structure/templatesystem/StructureProcessor.java.patch b/patches/minecraft/net/minecraft/world/level/levelgen/structure/templatesystem/StructureProcessor.java.patch index 3aa259379b..c167e58019 100644 --- a/patches/minecraft/net/minecraft/world/level/levelgen/structure/templatesystem/StructureProcessor.java.patch +++ b/patches/minecraft/net/minecraft/world/level/levelgen/structure/templatesystem/StructureProcessor.java.patch @@ -1,36 +1,50 @@ --- a/net/minecraft/world/level/levelgen/structure/templatesystem/StructureProcessor.java +++ b/net/minecraft/world/level/levelgen/structure/templatesystem/StructureProcessor.java -@@ -7,6 +_,11 @@ +@@ -7,6 +_,7 @@ import org.jspecify.annotations.Nullable; public abstract class StructureProcessor { -+ -+ /** -+ * @deprecated Forge: Use {@link #process(LevelReader, BlockPos, BlockPos, StructureTemplate.StructureBlockInfo, StructureTemplate.StructureBlockInfo, StructurePlaceSettings, StructureTemplate)} instead. -+ */ -+ @Deprecated ++ /** @deprecated Use variant with StructureTemplate argument */ public StructureTemplate.@Nullable StructureBlockInfo processBlock( - LevelReader p_74416_, - BlockPos p_74417_, -@@ -29,5 +_,21 @@ - StructurePlaceSettings p_277497_ + final LevelReader level, + final BlockPos targetPosition, +@@ -18,6 +_,18 @@ + return processedBlockInfo; + } + ++ public StructureTemplate.@Nullable StructureBlockInfo processBlock( ++ final LevelReader level, ++ final BlockPos targetPosition, ++ final BlockPos referencePos, ++ final StructureTemplate.StructureBlockInfo originalBlockInfo, ++ final StructureTemplate.StructureBlockInfo processedBlockInfo, ++ final StructurePlaceSettings settings, ++ final @Nullable StructureTemplate template ++ ) { ++ return processBlock(level, targetPosition, referencePos, originalBlockInfo, processedBlockInfo, settings); ++ } ++ + protected abstract StructureProcessorType getType(); + + public List finalizeProcessing( +@@ -29,5 +_,20 @@ + final StructurePlaceSettings settings ) { - return p_278053_; + return processedBlockInfoList; + } + + /** -+ * FORGE: Add entity processing. -+ *

+ * Use this method to process entities from a structure in much the same way as + * blocks, parameters are analogous. -+ * -+ * @see #process(LevelReader, BlockPos, BlockPos, StructureTemplate.StructureBlockInfo, StructureTemplate.StructureBlockInfo, StructurePlaceSettings, StructureTemplate) + */ -+ public StructureTemplate.StructureEntityInfo processEntity(LevelReader world, BlockPos seedPos, StructureTemplate.StructureEntityInfo rawEntityInfo, StructureTemplate.StructureEntityInfo entityInfo, StructurePlaceSettings placementSettings, StructureTemplate template) { -+ return entityInfo; -+ } -+ -+ public StructureTemplate.@Nullable StructureBlockInfo process(LevelReader level, BlockPos seed, BlockPos offset, StructureTemplate.StructureBlockInfo rawBlock, StructureTemplate.StructureBlockInfo block, StructurePlaceSettings settings, @Nullable StructureTemplate template) { -+ return processBlock(level, seed, offset, rawBlock, block, settings); ++ public StructureTemplate.@Nullable StructureEntityInfo processEntity( ++ final LevelReader level, ++ final BlockPos targetPosition, ++ final StructureTemplate.StructureEntityInfo originalEntityInfo, ++ final StructureTemplate.StructureEntityInfo processedEntityInfo, ++ final StructurePlaceSettings settings, ++ final @Nullable StructureTemplate template ++ ) { ++ return processedEntityInfo; } } diff --git a/patches/minecraft/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java.patch b/patches/minecraft/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java.patch index 41829fb986..8bf52c77d6 100644 --- a/patches/minecraft/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java.patch +++ b/patches/minecraft/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java +++ b/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java -@@ -262,6 +_,10 @@ - return transform(p_74565_, p_74564_.getMirror(), p_74564_.getRotation(), p_74564_.getRotationPivot()); +@@ -256,6 +_,10 @@ + return transform(pos, settings.getMirror(), settings.getRotation(), settings.getRotationPivot()); } + public static Vec3 transformedVec3d(StructurePlaceSettings placementIn, Vec3 pos) { @@ -9,31 +9,31 @@ + } + public boolean placeInWorld( - ServerLevelAccessor p_230329_, - BlockPos p_230330_, -@@ -288,7 +_,7 @@ + final ServerLevelAccessor level, + final BlockPos position, +@@ -282,7 +_,7 @@ int l = Integer.MIN_VALUE; int i1 = Integer.MIN_VALUE; int j1 = Integer.MIN_VALUE; -- List list4 = processBlockInfos(p_230329_, p_230330_, p_230331_, p_230332_, list); -+ List list4 = processBlockInfos(p_230329_, p_230330_, p_230331_, p_230332_, list, this); +- List list4 = processBlockInfos(level, position, referencePos, settings, list); ++ List list4 = processBlockInfos(level, position, referencePos, settings, list, this); try (ProblemReporter.ScopedCollector problemreporter$scopedcollector = new ProblemReporter.ScopedCollector(LOGGER)) { for (StructureTemplate.StructureBlockInfo structuretemplate$structureblockinfo : list4) { -@@ -412,10 +_,10 @@ - p_230330_, - p_230332_.getMirror(), - p_230332_.getRotation(), -- p_230332_.getRotationPivot(), +@@ -406,10 +_,10 @@ + position, + settings.getMirror(), + settings.getRotation(), +- settings.getRotationPivot(), boundingbox, - p_230332_.shouldFinalizeEntities(), + settings.shouldFinalizeEntities(), - problemreporter$scopedcollector + problemreporter$scopedcollector, -+ p_230332_ ++ settings ); } } -@@ -457,12 +_,21 @@ +@@ -458,12 +_,21 @@ ); } @@ -41,67 +41,73 @@ + * @deprecated Forge: Use {@link #processBlockInfos(ServerLevelAccessor, BlockPos, BlockPos, StructurePlaceSettings, List, StructureTemplate)} instead. + */ + @Deprecated -+ public static List processBlockInfos(ServerLevelAccessor p_278297_, BlockPos p_74519_, BlockPos p_74520_, StructurePlaceSettings p_74521_, List p_74522_) { -+ return processBlockInfos(p_278297_, p_74519_, p_74520_, p_74521_, p_74522_, null); ++ public static List processBlockInfos(final ServerLevelAccessor level, final BlockPos position, final BlockPos referencePos, final StructurePlaceSettings settings, final List blockInfoList) { ++ return processBlockInfos(level, position, referencePos, settings, blockInfoList, null); + } + public static List processBlockInfos( - ServerLevelAccessor p_278297_, - BlockPos p_74519_, - BlockPos p_74520_, - StructurePlaceSettings p_74521_, -- List p_74522_ -+ List p_74522_, + final ServerLevelAccessor level, + final BlockPos position, + final BlockPos referencePos, + final StructurePlaceSettings settings, +- final List blockInfoList ++ List blockInfoList, + @Nullable StructureTemplate template ) { List list = new ArrayList<>(); List list1 = new ArrayList<>(); -@@ -478,7 +_,7 @@ +@@ -479,7 +_,7 @@ while (structuretemplate$structureblockinfo1 != null && iterator.hasNext()) { structuretemplate$structureblockinfo1 = iterator.next() -- .processBlock(p_278297_, p_74519_, p_74520_, structuretemplate$structureblockinfo, structuretemplate$structureblockinfo1, p_74521_); -+ .process(p_278297_, p_74519_, p_74520_, structuretemplate$structureblockinfo, structuretemplate$structureblockinfo1, p_74521_, template); +- .processBlock(level, position, referencePos, structuretemplate$structureblockinfo, structuretemplate$structureblockinfo1, settings); ++ .processBlock(level, position, referencePos, structuretemplate$structureblockinfo, structuretemplate$structureblockinfo1, settings, template); } if (structuretemplate$structureblockinfo1 != null) { -@@ -499,17 +_,17 @@ - BlockPos p_74525_, - Mirror p_74526_, - Rotation p_74527_, -- BlockPos p_74528_, - @Nullable BoundingBox p_74529_, - boolean p_74530_, -- ProblemReporter p_408312_ -+ ProblemReporter p_408312_, -+ StructurePlaceSettings placementIn +@@ -500,17 +_,17 @@ + final BlockPos position, + final Mirror mirror, + final Rotation rotation, +- final BlockPos pivot, + final @Nullable BoundingBox boundingBox, + final boolean finalizeEntities, +- final ProblemReporter problemReporter ++ final ProblemReporter problemReporter, ++ final StructurePlaceSettings placementIn ) { - for (StructureTemplate.StructureEntityInfo structuretemplate$structureentityinfo : this.entityInfoList) { -- BlockPos blockpos = transform(structuretemplate$structureentityinfo.blockPos, p_74526_, p_74527_, p_74528_).offset(p_74525_); -+ var entities = processEntityInfos(this, p_74524_, p_74525_, placementIn, this.entityInfoList); +- BlockPos blockpos = transform(structuretemplate$structureentityinfo.blockPos, mirror, rotation, pivot).offset(position); ++ var entities = processEntityInfos(this, level, position, placementIn, this.entityInfoList); + for (StructureTemplate.StructureEntityInfo structuretemplate$structureentityinfo : entities) { + BlockPos blockpos = structuretemplate$structureentityinfo.blockPos; // FORGE: Position will have already been transformed by processEntityInfos - if (p_74529_ == null || p_74529_.isInside(blockpos)) { + if (boundingBox == null || boundingBox.isInside(blockpos)) { CompoundTag compoundtag = structuretemplate$structureentityinfo.nbt.copy(); -- Vec3 vec3 = transform(structuretemplate$structureentityinfo.pos, p_74526_, p_74527_, p_74528_); -- Vec3 vec31 = vec3.add(p_74525_.getX(), p_74525_.getY(), p_74525_.getZ()); +- Vec3 vec3 = transform(structuretemplate$structureentityinfo.pos, mirror, rotation, pivot); +- Vec3 vec31 = vec3.add(position.getX(), position.getY(), position.getZ()); + Vec3 vec31 = structuretemplate$structureentityinfo.pos; // FORGE: Position will have already been transformed by processEntityInfos ListTag listtag = new ListTag(); listtag.add(DoubleTag.valueOf(vec31.x)); listtag.add(DoubleTag.valueOf(vec31.y)); -@@ -531,6 +_,24 @@ +@@ -532,6 +_,30 @@ } } } + -+ public static List processEntityInfos(@Nullable StructureTemplate template, LevelAccessor level, BlockPos seedPos, StructurePlaceSettings settings, List entities) { ++ public static List processEntityInfos( ++ @Nullable StructureTemplate template, ++ final LevelAccessor level, ++ final BlockPos targetPos, ++ final StructurePlaceSettings settings, ++ final List entities ++ ) { + var list = new ArrayList(); + for (var entityInfo : entities) { -+ var pos = transformedVec3d(settings, entityInfo.pos).add(Vec3.atLowerCornerOf(seedPos)); -+ var blockpos = calculateRelativePosition(settings, entityInfo.blockPos).offset(seedPos); ++ var pos = transformedVec3d(settings, entityInfo.pos).add(Vec3.atLowerCornerOf(targetPos)); ++ var blockpos = calculateRelativePosition(settings, entityInfo.blockPos).offset(targetPos); + var info = new StructureTemplate.StructureEntityInfo(pos, blockpos, entityInfo.nbt); + for (var proc : settings.getProcessors()) { -+ info = proc.processEntity(level, seedPos, entityInfo, info, settings, template); ++ info = proc.processEntity(level, targetPos, entityInfo, info, settings, template); + if (info == null) + break; + } @@ -112,5 +118,5 @@ + } + - private static Optional createEntityIgnoreException(ProblemReporter p_410558_, ServerLevelAccessor p_74544_, CompoundTag p_74545_) { + private static Optional createEntityIgnoreException(final ProblemReporter reporter, final ServerLevelAccessor level, final CompoundTag tag) { try { diff --git a/patches/minecraft/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplateManager.java.patch b/patches/minecraft/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplateManager.java.patch index 2670169129..d080f2ddf0 100644 --- a/patches/minecraft/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplateManager.java.patch +++ b/patches/minecraft/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplateManager.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplateManager.java +++ b/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplateManager.java -@@ -78,6 +_,7 @@ +@@ -77,6 +_,7 @@ } - builder.add(new StructureTemplateManager.Source(this::loadFromResource, this::listResources)); -+ builder.add(new StructureTemplateManager.Source(net.minecraftforge.common.ForgeHooks::createEmptyStructure, Stream::empty)); + builder.add(this.resourceManagerSource); ++ builder.add(net.minecraftforge.common.ForgeHooks.emptyStructureSource()); this.sources = builder.build(); } diff --git a/patches/minecraft/net/minecraft/world/level/lighting/BlockLightEngine.java.patch b/patches/minecraft/net/minecraft/world/level/lighting/BlockLightEngine.java.patch index 2825019033..157ec10d2b 100644 --- a/patches/minecraft/net/minecraft/world/level/lighting/BlockLightEngine.java.patch +++ b/patches/minecraft/net/minecraft/world/level/lighting/BlockLightEngine.java.patch @@ -1,20 +1,20 @@ --- a/net/minecraft/world/level/lighting/BlockLightEngine.java +++ b/net/minecraft/world/level/lighting/BlockLightEngine.java -@@ -107,7 +_,7 @@ +@@ -109,7 +_,7 @@ } - private int getEmission(long p_285243_, BlockState p_284973_) { -- int i = p_284973_.getLightEmission(); -+ int i = p_284973_.getLightEmission(chunkSource.getLevel(), mutablePos); - return i > 0 && this.storage.lightOnInSection(SectionPos.blockToSection(p_285243_)) ? i : 0; + private int getEmission(final long blockNode, final BlockState state) { +- int i = state.getLightEmission(); ++ int i = state.getLightEmission(chunkSource.getLevel(), mutablePos); + return i > 0 && this.storage.lightOnInSection(SectionPos.blockToSection(blockNode)) ? i : 0; } -@@ -117,7 +_,7 @@ - LightChunk lightchunk = this.chunkSource.getChunkForLighting(p_285274_.x, p_285274_.z); +@@ -119,7 +_,7 @@ + LightChunk lightchunk = this.chunkSource.getChunkForLighting(pos.x(), pos.z()); if (lightchunk != null) { - lightchunk.findBlockLightSources((p_360638_, p_360639_) -> { -- int i = p_360639_.getLightEmission(); -+ int i = p_360639_.getLightEmission(chunkSource.getLevel(), p_360638_); - this.enqueueIncrease(p_360638_.asLong(), LightEngine.QueueEntry.increaseLightFromEmission(i, isEmptyShape(p_360639_))); + lightchunk.findBlockLightSources((lightPos, state) -> { +- int i = state.getLightEmission(); ++ int i = state.getLightEmission(chunkSource.getLevel(), lightPos); + this.enqueueIncrease(lightPos.asLong(), LightEngine.QueueEntry.increaseLightFromEmission(i, isEmptyShape(state))); }); } diff --git a/patches/minecraft/net/minecraft/world/level/material/FlowingFluid.java.patch b/patches/minecraft/net/minecraft/world/level/material/FlowingFluid.java.patch index 8b5b2cf18b..b95cbf6518 100644 --- a/patches/minecraft/net/minecraft/world/level/material/FlowingFluid.java.patch +++ b/patches/minecraft/net/minecraft/world/level/material/FlowingFluid.java.patch @@ -1,25 +1,25 @@ --- a/net/minecraft/world/level/material/FlowingFluid.java +++ b/net/minecraft/world/level/material/FlowingFluid.java -@@ -171,7 +_,7 @@ - BlockState blockstate = p_369574_.getBlockState(blockpos); +@@ -172,7 +_,7 @@ + BlockState blockstate = level.getBlockState(blockpos); FluidState fluidstate = blockstate.getFluidState(); - if (fluidstate.getType().isSame(this) && canPassThroughWall(direction, p_369574_, p_76037_, p_76038_, blockpos, blockstate)) { + if (fluidstate.getType().isSame(this) && canPassThroughWall(direction, level, pos, state, blockpos, blockstate)) { - if (fluidstate.isSource()) { -+ if (fluidstate.isSource() && net.minecraftforge.event.ForgeEventFactory.canCreateFluidSource(p_369574_, blockpos, blockstate, fluidstate.canConvertToSource(p_369574_, blockpos))) { ++ if (fluidstate.isSource() && net.minecraftforge.event.ForgeEventFactory.canCreateFluidSource(level, blockpos, blockstate, fluidstate.canConvertToSource(level, blockpos))) { j++; } -@@ -179,7 +_,7 @@ +@@ -180,7 +_,7 @@ } } -- if (j >= 2 && this.canConvertToSource(p_369574_)) { +- if (j >= 2 && this.canConvertToSource(level)) { + if (j >= 2) { - BlockState blockstate1 = p_369574_.getBlockState(blockpos$mutableblockpos.setWithOffset(p_76037_, Direction.DOWN)); + BlockState blockstate1 = level.getBlockState(blockpos$mutableblockpos.setWithOffset(pos, Direction.DOWN)); FluidState fluidstate1 = blockstate1.getFluidState(); if (blockstate1.isSolid() || this.isSourceBlockOfThisType(fluidstate1)) { -@@ -257,6 +_,15 @@ - return this.getSource().defaultFluidState().setValue(FALLING, p_76069_); +@@ -265,6 +_,15 @@ + return this.getSource().defaultFluidState().setValue(FALLING, falling); } + @Override @@ -31,6 +31,6 @@ + * @deprecated Forge: Use {@link #canConvertToSource(FluidState, Level, BlockPos)} instead. + */ + @Deprecated - protected abstract boolean canConvertToSource(ServerLevel p_369955_); + protected abstract boolean canConvertToSource(ServerLevel level); - protected void spreadTo(LevelAccessor p_76005_, BlockPos p_76006_, BlockState p_76007_, Direction p_76008_, FluidState p_76009_) { + protected void spreadTo(final LevelAccessor level, final BlockPos pos, final BlockState state, final Direction direction, final FluidState target) { diff --git a/patches/minecraft/net/minecraft/world/level/material/Fluid.java.patch b/patches/minecraft/net/minecraft/world/level/material/Fluid.java.patch index 6a9de15436..40013d245b 100644 --- a/patches/minecraft/net/minecraft/world/level/material/Fluid.java.patch +++ b/patches/minecraft/net/minecraft/world/level/material/Fluid.java.patch @@ -12,13 +12,13 @@ @@ -64,6 +_,8 @@ } - protected void entityInside(Level p_394813_, BlockPos p_394655_, Entity p_396881_, InsideBlockEffectApplier p_395108_) { -+ if (p_396881_.canFluidExtinguish(getFluidType())) -+ p_395108_.apply(net.minecraft.world.entity.InsideBlockEffectType.EXTINGUISH); + protected void entityInside(final Level level, final BlockPos pos, final Entity entity, final InsideBlockEffectApplier effectApplier) { ++ if (entity.canFluidExtinguish(getFluidType())) ++ effectApplier.apply(net.minecraft.world.entity.InsideBlockEffectType.EXTINGUISH); } protected @Nullable ParticleOptions getDripParticle() { -@@ -130,5 +_,12 @@ +@@ -123,5 +_,12 @@ @Deprecated public Holder.Reference builtInRegistryHolder() { return this.builtInRegistryHolder; diff --git a/patches/minecraft/net/minecraft/world/level/material/FluidState.java.patch b/patches/minecraft/net/minecraft/world/level/material/FluidState.java.patch index 74725d9260..d92d39eccc 100644 --- a/patches/minecraft/net/minecraft/world/level/material/FluidState.java.patch +++ b/patches/minecraft/net/minecraft/world/level/material/FluidState.java.patch @@ -1,16 +1,16 @@ --- a/net/minecraft/world/level/material/FluidState.java +++ b/net/minecraft/world/level/material/FluidState.java -@@ -25,7 +_,7 @@ +@@ -21,7 +_,7 @@ import net.minecraft.world.phys.shapes.VoxelShape; import org.jspecify.annotations.Nullable; --public final class FluidState extends StateHolder { -+public final class FluidState extends StateHolder implements net.minecraftforge.common.extensions.IForgeFluidState { - public static final Codec CODEC = codec(BuiltInRegistries.FLUID.byNameCodec(), Fluid::defaultFluidState).stable(); +-public final class FluidState extends StateHolder implements TypedInstance { ++public final class FluidState extends StateHolder implements TypedInstance, net.minecraftforge.common.extensions.IForgeFluidState { + public static final Codec CODEC = codec(BuiltInRegistries.FLUID.byNameCodec(), Fluid::defaultFluidState, Fluid::getStateDefinition).stable(); public static final int AMOUNT_MAX = 9; public static final int AMOUNT_FULL = 8; -@@ -116,6 +_,7 @@ - return this.getType() == p_192918_; +@@ -109,6 +_,7 @@ + return this.getType().builtInRegistryHolder(); } + @Deprecated //Forge: Use more sensitive version diff --git a/patches/minecraft/net/minecraft/world/level/material/LavaFluid.java.patch b/patches/minecraft/net/minecraft/world/level/material/LavaFluid.java.patch index 520a3faf73..bb5082301f 100644 --- a/patches/minecraft/net/minecraft/world/level/material/LavaFluid.java.patch +++ b/patches/minecraft/net/minecraft/world/level/material/LavaFluid.java.patch @@ -1,59 +1,59 @@ --- a/net/minecraft/world/level/material/LavaFluid.java +++ b/net/minecraft/world/level/material/LavaFluid.java -@@ -92,7 +_,7 @@ - BlockState blockstate = p_367000_.getBlockState(blockpos); +@@ -93,7 +_,7 @@ + BlockState blockstate = level.getBlockState(blockpos); if (blockstate.isAir()) { - if (this.hasFlammableNeighbours(p_367000_, blockpos)) { -- p_367000_.setBlockAndUpdate(blockpos, BaseFireBlock.getState(p_367000_, blockpos)); -+ p_367000_.setBlockAndUpdate(blockpos, net.minecraftforge.event.ForgeEventFactory.fireFluidPlaceBlockEvent(p_367000_, blockpos, p_230573_, Blocks.FIRE.defaultBlockState())); + if (this.hasFlammableNeighbours(level, blockpos)) { +- level.setBlockAndUpdate(blockpos, BaseFireBlock.getState(level, blockpos)); ++ level.setBlockAndUpdate(blockpos, net.minecraftforge.event.ForgeEventFactory.fireFluidPlaceBlockEvent(level, blockpos, pos, Blocks.FIRE.defaultBlockState())); return; } } else if (blockstate.blocksMotion()) { -@@ -106,8 +_,8 @@ +@@ -107,8 +_,8 @@ return; } -- if (p_367000_.isEmptyBlock(blockpos1.above()) && this.isFlammable(p_367000_, blockpos1)) { -- p_367000_.setBlockAndUpdate(blockpos1.above(), BaseFireBlock.getState(p_367000_, blockpos1)); -+ if (p_367000_.isEmptyBlock(blockpos1.above()) && this.isFlammable(p_367000_, blockpos1, Direction.UP)) { -+ p_367000_.setBlockAndUpdate(blockpos1.above(), net.minecraftforge.event.ForgeEventFactory.fireFluidPlaceBlockEvent(p_367000_, blockpos1.above(), p_230573_, Blocks.FIRE.defaultBlockState())); +- if (level.isEmptyBlock(blockpos1.above()) && this.isFlammable(level, blockpos1)) { +- level.setBlockAndUpdate(blockpos1.above(), BaseFireBlock.getState(level, blockpos1)); ++ if (level.isEmptyBlock(blockpos1.above()) && this.isFlammable(level, blockpos1, Direction.UP)) { ++ level.setBlockAndUpdate(blockpos1.above(), net.minecraftforge.event.ForgeEventFactory.fireFluidPlaceBlockEvent(level, blockpos1.above(), pos, Blocks.FIRE.defaultBlockState())); } } } -@@ -123,7 +_,7 @@ +@@ -124,7 +_,7 @@ - private boolean hasFlammableNeighbours(LevelReader p_76228_, BlockPos p_76229_) { + private boolean hasFlammableNeighbours(final LevelReader level, final BlockPos pos) { for (Direction direction : Direction.values()) { -- if (this.isFlammable(p_76228_, p_76229_.relative(direction))) { -+ if (this.isFlammable(p_76228_, p_76229_.relative(direction), direction.getOpposite())) { +- if (this.isFlammable(level, pos.relative(direction))) { ++ if (this.isFlammable(level, pos.relative(direction), direction.getOpposite())) { return true; } } -@@ -131,10 +_,17 @@ +@@ -132,10 +_,17 @@ return false; } + /** @deprecated Forge: use {@link LavaFluid#isFlammable(LevelReader,BlockPos,Direction)} instead */ - private boolean isFlammable(LevelReader p_76246_, BlockPos p_76247_) { - return p_76246_.isInsideBuildHeight(p_76247_.getY()) && !p_76246_.hasChunkAt(p_76247_) ? false : p_76246_.getBlockState(p_76247_).ignitedByLava(); + private boolean isFlammable(final LevelReader level, final BlockPos pos) { + return level.isInsideBuildHeight(pos.getY()) && !level.hasChunkAt(pos) ? false : level.getBlockState(pos).ignitedByLava(); } -+ private boolean isFlammable(LevelReader p_76246_, BlockPos p_76247_, Direction face) { -+ return p_76246_.isInsideBuildHeight(p_76247_.getY()) && !p_76246_.hasChunkAt(p_76247_) ++ private boolean isFlammable(final LevelReader level, final BlockPos pos, Direction face) { ++ return level.isInsideBuildHeight(pos.getY()) && !level.hasChunkAt(pos) + ? false -+ : p_76246_.getBlockState(p_76247_).ignitedByLava() && p_76246_.getBlockState(p_76247_).isFlammable(p_76246_, p_76247_, face); ++ : level.getBlockState(pos).ignitedByLava() && level.getBlockState(pos).isFlammable(level, pos, face); + } + @Override public @Nullable ParticleOptions getDripParticle() { return ParticleTypes.DRIPPING_LAVA; -@@ -205,7 +_,8 @@ - FluidState fluidstate = p_76220_.getFluidState(p_76221_); +@@ -206,7 +_,8 @@ + FluidState fluidstate = level.getFluidState(pos); if (this.is(FluidTags.LAVA) && fluidstate.is(FluidTags.WATER)) { - if (p_76222_.getBlock() instanceof LiquidBlock) { -- p_76220_.setBlock(p_76221_, Blocks.STONE.defaultBlockState(), 3); -+ p_76220_.setBlock(p_76221_, net.minecraftforge.event.ForgeEventFactory.fireFluidPlaceBlockEvent(p_76220_, p_76221_, p_76221_, Blocks.STONE.defaultBlockState()), 3); + if (state.getBlock() instanceof LiquidBlock) { +- level.setBlock(pos, Blocks.STONE.defaultBlockState(), 3); ++ level.setBlock(pos, net.minecraftforge.event.ForgeEventFactory.fireFluidPlaceBlockEvent(level, pos, pos, Blocks.STONE.defaultBlockState()), 3); + } - this.fizz(p_76220_, p_76221_); + this.fizz(level, pos); diff --git a/patches/minecraft/net/minecraft/world/level/pathfinder/PathType.java.patch b/patches/minecraft/net/minecraft/world/level/pathfinder/PathType.java.patch index 410f737542..afe10d46ef 100644 --- a/patches/minecraft/net/minecraft/world/level/pathfinder/PathType.java.patch +++ b/patches/minecraft/net/minecraft/world/level/pathfinder/PathType.java.patch @@ -8,20 +8,12 @@ BLOCKED(-1.0F), OPEN(0.0F), WALKABLE(0.0F), -@@ -36,5 +_,17 @@ +@@ -37,5 +_,9 @@ public float getMalus() { return this.malus; + } + -+ @org.jetbrains.annotations.Nullable -+ public PathType getDanger() { -+ return (this == DAMAGE_FIRE || this == DANGER_FIRE ) ? DANGER_FIRE : -+ (this == DAMAGE_OTHER || this == DANGER_OTHER ) ? DANGER_OTHER : -+ (this == LAVA) ? DAMAGE_FIRE : -+ null; -+ } -+ + public static PathType create(String name, float malus) { + throw new IllegalArgumentException("Enum not extended"); } diff --git a/patches/minecraft/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java.patch b/patches/minecraft/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java.patch index b69c4f1bc6..9e983b6a82 100644 --- a/patches/minecraft/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java.patch +++ b/patches/minecraft/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java.patch @@ -1,47 +1,47 @@ --- a/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java +++ b/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java -@@ -471,6 +_,16 @@ +@@ -484,6 +_,16 @@ for (int k = -1; k <= 1; k++) { if (i != 0 || k != 0) { - PathType pathtype = p_334221_.getPathTypeFromState(p_336062_ + i, p_335259_ + j, p_336315_ + k); + PathType pathtype = context.getPathTypeFromState(x + i, y + j, z + k); + -+ var pos = new BlockPos(p_336062_ + i, p_335259_ + j, p_336315_ + k); -+ var blockstate = p_334221_.level().getBlockState(pos); ++ var pos = new BlockPos(x + i, y + j, z + k); ++ var blockstate = context.level().getBlockState(pos); + -+ var blockPathType = blockstate.getAdjacentBlockPathType(p_334221_.level(), pos, null, p_333971_); -+ if (blockPathType != null) return blockPathType; ++ var adjacentBlockPathType = blockstate.getAdjacentBlockPathType(context.level(), pos, null, blockPathType); ++ if (adjacentBlockPathType != null) return adjacentBlockPathType; + -+ var fluidPathType = blockstate.getFluidState().getAdjacentBlockPathType(p_334221_.level(), pos, null, p_333971_); -+ if (fluidPathType != null) return fluidPathType; ++ var adjacentFluidPathType = blockstate.getFluidState().getAdjacentBlockPathType(context.level(), pos, null, blockPathType); ++ if (adjacentFluidPathType != null) return adjacentFluidPathType; + - if (pathtype == PathType.DAMAGE_OTHER) { - return PathType.DANGER_OTHER; + if (pathtype == PathType.DAMAGING) { + return PathType.DAMAGING_IN_NEIGHBOR; } -@@ -497,6 +_,10 @@ - protected static PathType getPathTypeFromState(BlockGetter p_335222_, BlockPos p_331935_) { - BlockState blockstate = p_335222_.getBlockState(p_331935_); +@@ -510,6 +_,10 @@ + protected static PathType getPathTypeFromState(final BlockGetter level, final BlockPos pos) { + BlockState blockstate = level.getBlockState(pos); Block block = blockstate.getBlock(); + -+ var type = blockstate.getBlockPathType(p_335222_, p_331935_, null); ++ var type = blockstate.getBlockPathType(level, pos, null); + if (type != null) return type; + if (blockstate.isAir()) { return PathType.OPEN; } else if (blockstate.is(BlockTags.TRAPDOORS) || blockstate.is(Blocks.LILY_PAD) || blockstate.is(Blocks.BIG_DRIPLEAF)) { -@@ -511,6 +_,8 @@ +@@ -524,6 +_,8 @@ return PathType.COCOA; } else if (!blockstate.is(Blocks.WITHER_ROSE) && !blockstate.is(Blocks.POINTED_DRIPSTONE)) { FluidState fluidstate = blockstate.getFluidState(); -+ var nonLoggableFluidPathType = fluidstate.getBlockPathType(p_335222_, p_331935_, null, false); ++ var nonLoggableFluidPathType = fluidstate.getBlockPathType(level, pos, null, false); + if (nonLoggableFluidPathType != null) return nonLoggableFluidPathType; if (fluidstate.is(FluidTags.LAVA)) { return PathType.LAVA; } else if (isBurningBlock(blockstate)) { -@@ -531,6 +_,8 @@ +@@ -544,6 +_,8 @@ if (!blockstate.isPathfindable(PathComputationType.LAND)) { return PathType.BLOCKED; } else { -+ var loggableFluidPathType = fluidstate.getBlockPathType(p_335222_, p_331935_, null, true); ++ var loggableFluidPathType = fluidstate.getBlockPathType(level, pos, null, true); + if (loggableFluidPathType != null) return loggableFluidPathType; return fluidstate.is(FluidTags.WATER) ? PathType.WATER : PathType.OPEN; } diff --git a/patches/minecraft/net/minecraft/world/level/portal/PortalShape.java.patch b/patches/minecraft/net/minecraft/world/level/portal/PortalShape.java.patch index eb09eeb89d..3d5eded0bd 100644 --- a/patches/minecraft/net/minecraft/world/level/portal/PortalShape.java.patch +++ b/patches/minecraft/net/minecraft/world/level/portal/PortalShape.java.patch @@ -4,8 +4,8 @@ public static final int MAX_WIDTH = 21; private static final int MIN_HEIGHT = 3; public static final int MAX_HEIGHT = 21; -- private static final BlockBehaviour.StatePredicate FRAME = (p_77720_, p_77721_, p_77722_) -> p_77720_.is(Blocks.OBSIDIAN); -+ private static final BlockBehaviour.StatePredicate FRAME = (p_77720_, p_77721_, p_77722_) -> p_77720_.isPortalFrame(p_77721_, p_77722_); +- private static final BlockBehaviour.StatePredicate FRAME = (state, level, pos) -> state.is(Blocks.OBSIDIAN); ++ private static final BlockBehaviour.StatePredicate FRAME = (state, level, pos) -> state.isPortalFrame(level, pos); private static final float SAFE_TRAVEL_MAX_ENTITY_XY = 4.0F; private static final double SAFE_TRAVEL_MAX_VERTICAL_DELTA = 1.0; private final Direction.Axis axis; diff --git a/patches/minecraft/net/minecraft/world/level/storage/LevelStorageSource.java.patch b/patches/minecraft/net/minecraft/world/level/storage/LevelStorageSource.java.patch index 70a7d40342..a9aadca86b 100644 --- a/patches/minecraft/net/minecraft/world/level/storage/LevelStorageSource.java.patch +++ b/patches/minecraft/net/minecraft/world/level/storage/LevelStorageSource.java.patch @@ -1,26 +1,26 @@ --- a/net/minecraft/world/level/storage/LevelStorageSource.java +++ b/net/minecraft/world/level/storage/LevelStorageSource.java -@@ -475,6 +_,11 @@ - return this.getDataTag(true); +@@ -571,6 +_,11 @@ + return dynamic; } -+ public CompoundTag getDataTagRaw(boolean fallback) throws IOException { ++ public CompoundTag getDataTagRaw(final boolean useFallback) throws IOException { + this.checkLock(); -+ return LevelStorageSource.readLevelDataTagRaw(fallback ? this.levelDirectory.oldDataFile() : this.levelDirectory.dataFile()); ++ return LevelStorageSource.readLevelDataTagRaw(this.getDataFile(useFallback)); + } + - private Dynamic getDataTag(boolean p_310699_) throws IOException { + public Dynamic getUnfixedDataTag(final boolean useFallback) throws IOException { this.checkLock(); - return LevelStorageSource.readLevelDataTagFixed(p_310699_ ? this.levelDirectory.oldDataFile() : this.levelDirectory.dataFile(), LevelStorageSource.this.fixerUpper); -@@ -488,6 +_,7 @@ - CompoundTag compoundtag = p_78292_.createTag(p_78291_, p_78293_); + Path path = this.getDataFile(useFallback); +@@ -590,6 +_,7 @@ + CompoundTag compoundtag = levelData.createTag(singleplayerUUID); CompoundTag compoundtag1 = new CompoundTag(); compoundtag1.put("Data", compoundtag); -+ net.minecraftforge.common.ForgeHooks.writeAdditionalLevelSaveData(p_78292_, compoundtag1); ++ net.minecraftforge.common.ForgeHooks.writeAdditionalLevelSaveData(levelData, compoundtag1); this.saveLevelData(compoundtag1); } -@@ -507,6 +_,10 @@ +@@ -616,6 +_,10 @@ public Optional getIconFile() { return !this.lock.isValid() ? Optional.empty() : Optional.of(this.levelDirectory.iconFile()); diff --git a/patches/minecraft/net/minecraft/world/level/storage/LevelSummary.java.patch b/patches/minecraft/net/minecraft/world/level/storage/LevelSummary.java.patch index 4c69b872bf..c636bf9385 100644 --- a/patches/minecraft/net/minecraft/world/level/storage/LevelSummary.java.patch +++ b/patches/minecraft/net/minecraft/world/level/storage/LevelSummary.java.patch @@ -1,24 +1,11 @@ --- a/net/minecraft/world/level/storage/LevelSummary.java +++ b/net/minecraft/world/level/storage/LevelSummary.java -@@ -14,7 +_,7 @@ +@@ -15,7 +_,7 @@ import org.apache.commons.lang3.StringUtils; import org.jspecify.annotations.Nullable; -public class LevelSummary implements Comparable { +public class LevelSummary implements Comparable, net.minecraftforge.common.extensions.IForgeLevelSummary { public static final Component PLAY_WORLD = Component.translatable("selectWorld.select"); + public static final Component UPGRADE_AND_PLAY_WORLD = Component.translatable("selectWorld.upgrade_and_play"); private final LevelSettings settings; - private final LevelVersion levelVersion; -@@ -274,6 +_,12 @@ - public boolean canRecreate() { - return false; - } -+ } -+ -+ // TODO Forge: Remove in 1.22. It is kept here for binary compatibility, but already exists in IForgeLevelSummary -+ @Deprecated(forRemoval = true, since = "1.21.4") -+ public boolean isLifecycleExperimental() { -+ return net.minecraftforge.common.extensions.IForgeLevelSummary.super.isLifecycleExperimental(); - } - - public static class SymlinkLevelSummary extends LevelSummary { diff --git a/patches/minecraft/net/minecraft/world/level/storage/PlayerDataStorage.java.patch b/patches/minecraft/net/minecraft/world/level/storage/PlayerDataStorage.java.patch index 2161bb9b81..c8b6ac29ae 100644 --- a/patches/minecraft/net/minecraft/world/level/storage/PlayerDataStorage.java.patch +++ b/patches/minecraft/net/minecraft/world/level/storage/PlayerDataStorage.java.patch @@ -1,16 +1,16 @@ --- a/net/minecraft/world/level/storage/PlayerDataStorage.java +++ b/net/minecraft/world/level/storage/PlayerDataStorage.java @@ -41,6 +_,7 @@ - Path path2 = path.resolve(p_78434_.getStringUUID() + ".dat"); - Path path3 = path.resolve(p_78434_.getStringUUID() + ".dat_old"); + Path path2 = path.resolve(player.getStringUUID() + ".dat"); + Path path3 = path.resolve(player.getStringUUID() + ".dat_old"); Util.safeReplaceFile(path2, path1, path3); -+ net.minecraftforge.event.ForgeEventFactory.firePlayerSavingEvent(p_78434_, playerDir, p_78434_.getStringUUID()); ++ net.minecraftforge.event.ForgeEventFactory.firePlayerSavingEvent(player, playerDir, player.getStringUUID()); } catch (Exception exception) { - LOGGER.warn("Failed to save player data for {}", p_78434_.getPlainTextName()); + LOGGER.warn("Failed to save player data for {}", player.getPlainTextName()); } @@ -83,5 +_,9 @@ - int i = NbtUtils.getDataVersion(p_450065_); - return DataFixTypes.PLAYER.updateToCurrentVersion(this.fixerUpper, p_450065_, i); + int i = NbtUtils.getDataVersion(tag); + return DataFixTypes.PLAYER.updateToCurrentVersion(this.fixerUpper, tag, i); }); + } + diff --git a/patches/minecraft/net/minecraft/world/level/storage/PrimaryLevelData.java.patch b/patches/minecraft/net/minecraft/world/level/storage/PrimaryLevelData.java.patch index bfe7ef6f73..a4a91e9342 100644 --- a/patches/minecraft/net/minecraft/world/level/storage/PrimaryLevelData.java.patch +++ b/patches/minecraft/net/minecraft/world/level/storage/PrimaryLevelData.java.patch @@ -1,32 +1,32 @@ --- a/net/minecraft/world/level/storage/PrimaryLevelData.java +++ b/net/minecraft/world/level/storage/PrimaryLevelData.java -@@ -70,6 +_,7 @@ +@@ -42,6 +_,7 @@ + private final Set knownServerBrands; private boolean wasModded; private final Set removedFeatureFlags; - private final TimerQueue scheduledEvents; + private boolean confirmedExperimentalWarning = false; private PrimaryLevelData( - @Nullable CompoundTag p_277888_, -@@ -192,7 +_,7 @@ - p_251864_, - p_250651_, - p_78538_ + final @Nullable UUID singlePlayerUUID, +@@ -105,7 +_,7 @@ + settings, + specialWorldProperty, + worldGenSettingsLifecycle - ); -+ ).withConfirmedWarning(p_78538_ != Lifecycle.stable() && p_78531_.get("confirmedExperimentalSettings").asBoolean(false)); ++ ).withConfirmedWarning(worldGenSettingsLifecycle != Lifecycle.stable() && input.get("confirmedExperimentalSettings").asBoolean(false)); } @Override -@@ -257,6 +_,8 @@ - p_78547_.putInt("WanderingTraderSpawnDelay", this.wanderingTraderSpawnDelay); - p_78547_.putInt("WanderingTraderSpawnChance", this.wanderingTraderSpawnChance); - p_78547_.storeNullable("WanderingTraderId", UUIDUtil.CODEC, this.wanderingTraderId); -+ p_78547_.putString("forgeLifecycle", net.minecraftforge.common.ForgeHooks.encodeLifecycle(this.settings.getLifecycle())); -+ p_78547_.putBoolean("confirmedExperimentalSettings", this.confirmedExperimentalWarning); +@@ -142,6 +_,8 @@ + } + + tag.store(WorldDataConfiguration.MAP_CODEC, this.settings.dataConfiguration()); ++ tag.putString("forgeLifecycle", net.minecraftforge.common.ForgeHooks.encodeLifecycle(this.settings.lifecycle())); ++ tag.putBoolean("confirmedExperimentalSettings", this.confirmedExperimentalWarning); } - private static ListTag stringCollectionToTag(Set p_277880_) { -@@ -546,6 +_,16 @@ + public static void writeLastPlayed(final CompoundTag tag) { +@@ -322,6 +_,16 @@ public LevelSettings getLevelSettings() { return this.settings.copy(); } diff --git a/patches/minecraft/net/minecraft/world/level/storage/DimensionDataStorage.java.patch b/patches/minecraft/net/minecraft/world/level/storage/SavedDataStorage.java.patch similarity index 51% rename from patches/minecraft/net/minecraft/world/level/storage/DimensionDataStorage.java.patch rename to patches/minecraft/net/minecraft/world/level/storage/SavedDataStorage.java.patch index 3221b7d6e7..809dbcc9dd 100644 --- a/patches/minecraft/net/minecraft/world/level/storage/DimensionDataStorage.java.patch +++ b/patches/minecraft/net/minecraft/world/level/storage/SavedDataStorage.java.patch @@ -1,13 +1,13 @@ ---- a/net/minecraft/world/level/storage/DimensionDataStorage.java -+++ b/net/minecraft/world/level/storage/DimensionDataStorage.java -@@ -114,6 +_,10 @@ +--- a/net/minecraft/world/level/storage/SavedDataStorage.java ++++ b/net/minecraft/world/level/storage/SavedDataStorage.java +@@ -122,6 +_,10 @@ } int i = NbtUtils.getDataVersion(compoundtag, 1343); + // Forge: Allow the data fixer to be null, leaving the modder responsible for keeping track of their own data formats -+ if (p_301060_ == null) ++ if (type == null) + compoundtag1 = compoundtag; + else - compoundtag1 = p_301060_.update(this.fixerUpper, compoundtag, i, p_78160_); + compoundtag1 = type.update(this.fixerUpper, compoundtag, i, newVersion); } diff --git a/patches/minecraft/net/minecraft/world/level/storage/TagValueOutput.java.patch b/patches/minecraft/net/minecraft/world/level/storage/TagValueOutput.java.patch index 2f00de52bf..09edaa2282 100644 --- a/patches/minecraft/net/minecraft/world/level/storage/TagValueOutput.java.patch +++ b/patches/minecraft/net/minecraft/world/level/storage/TagValueOutput.java.patch @@ -6,20 +6,20 @@ private final CompoundTag output; + public final HolderLookup.@org.jspecify.annotations.Nullable Provider lookup; - TagValueOutput(ProblemReporter p_407091_, DynamicOps p_407083_, CompoundTag p_409593_) { -+ this(p_407091_, p_407083_, p_409593_, null); + private TagValueOutput(final ProblemReporter problemReporter, final DynamicOps ops, final CompoundTag output) { ++ this(problemReporter, ops, output, null); + } + -+ TagValueOutput(ProblemReporter p_407091_, DynamicOps p_407083_, CompoundTag p_409593_, HolderLookup.@org.jspecify.annotations.Nullable Provider lookup) { - this.problemReporter = p_407091_; - this.ops = p_407083_; - this.output = p_409593_; ++ TagValueOutput(final ProblemReporter problemReporter, final DynamicOps ops, final CompoundTag output, final HolderLookup.@org.jspecify.annotations.Nullable Provider lookup) { + this.problemReporter = problemReporter; + this.ops = ops; + this.output = output; + this.lookup = lookup; } - public static TagValueOutput createWithContext(ProblemReporter p_409887_, HolderLookup.Provider p_409738_) { -- return new TagValueOutput(p_409887_, p_409738_.createSerializationContext(NbtOps.INSTANCE), new CompoundTag()); -+ return new TagValueOutput(p_409887_, p_409738_.createSerializationContext(NbtOps.INSTANCE), new CompoundTag(), p_409738_); + public static TagValueOutput createWithContext(final ProblemReporter problemReporter, final HolderLookup.Provider provider) { +- return new TagValueOutput(problemReporter, provider.createSerializationContext(NbtOps.INSTANCE), new CompoundTag()); ++ return new TagValueOutput(problemReporter, provider.createSerializationContext(NbtOps.INSTANCE), new CompoundTag(), provider); } - public static TagValueOutput createWithoutContext(ProblemReporter p_405875_) { + public static TagValueOutput createWithoutContext(final ProblemReporter problemReporter) { diff --git a/patches/minecraft/net/minecraft/world/level/storage/loot/LootContext.java.patch b/patches/minecraft/net/minecraft/world/level/storage/loot/LootContext.java.patch index 509d91bd07..d64b673fbb 100644 --- a/patches/minecraft/net/minecraft/world/level/storage/loot/LootContext.java.patch +++ b/patches/minecraft/net/minecraft/world/level/storage/loot/LootContext.java.patch @@ -1,24 +1,24 @@ --- a/net/minecraft/world/level/storage/loot/LootContext.java +++ b/net/minecraft/world/level/storage/loot/LootContext.java -@@ -24,11 +_,17 @@ +@@ -25,11 +_,17 @@ private final RandomSource random; private final HolderGetter.Provider lootDataResolver; private final Set> visitedElements = Sets.newLinkedHashSet(); + private Identifier queriedLootTableId; - LootContext(LootParams p_287722_, RandomSource p_287702_, HolderGetter.Provider p_330439_) { -+ this(p_287722_, p_287702_, p_330439_, null); + private LootContext(final LootParams params, final RandomSource random, final HolderGetter.Provider lootDataResolver) { ++ this(params, random, lootDataResolver, null); + } + -+ LootContext(LootParams p_287722_, RandomSource p_287702_, HolderGetter.Provider p_330439_, Identifier queriedLootTableId) { - this.params = p_287722_; - this.random = p_287702_; - this.lootDataResolver = p_330439_; ++ LootContext(final LootParams params, final RandomSource random, final HolderGetter.Provider lootDataResolver, final Identifier queriedLootTableId) { + this.params = params; + this.random = random; + this.lootDataResolver = lootDataResolver; + this.queriedLootTableId = queriedLootTableId; } - public boolean hasParameter(ContextKey p_368930_) { -@@ -75,6 +_,10 @@ + public boolean hasParameter(final ContextKey key) { +@@ -76,6 +_,10 @@ return this.params.getLevel(); } @@ -26,11 +26,11 @@ + return this.params; + } + - public static LootContext.VisitedEntry createVisitedEntry(LootTable p_279327_) { - return new LootContext.VisitedEntry<>(LootDataType.TABLE, p_279327_); + public static LootContext.VisitedEntry createVisitedEntry(final LootTable table) { + return new LootContext.VisitedEntry<>(LootDataType.TABLE, table); } -@@ -87,6 +_,18 @@ - return new LootContext.VisitedEntry<>(LootDataType.MODIFIER, p_279163_); +@@ -88,6 +_,18 @@ + return new LootContext.VisitedEntry<>(LootDataType.MODIFIER, table); } + public int getLootingModifier() { @@ -48,14 +48,14 @@ public static enum BlockEntityTarget implements StringRepresentable, LootContextArg.SimpleGetter { BLOCK_ENTITY("block_entity", LootContextParams.BLOCK_ENTITY); -@@ -112,11 +_,18 @@ +@@ -113,11 +_,18 @@ public static class Builder { private final LootParams params; private @Nullable RandomSource random; + private Identifier queriedLootTableId; // Forge: correctly pass around loot table ID with copy constructor - public Builder(LootParams p_287628_) { - this.params = p_287628_; + public Builder(final LootParams params) { + this.params = params; } + public Builder(LootContext context) { @@ -64,10 +64,10 @@ + this.queriedLootTableId = context.queriedLootTableId; + } + - public LootContext.Builder withOptionalRandomSeed(long p_78966_) { - if (p_78966_ != 0L) { - this.random = RandomSource.create(p_78966_); -@@ -130,6 +_,11 @@ + public LootContext.Builder withOptionalRandomSeed(final long seed) { + if (seed != 0L) { + this.random = RandomSource.create(seed); +@@ -131,6 +_,11 @@ return this; } @@ -79,10 +79,10 @@ public ServerLevel getLevel() { return this.params.getLevel(); } -@@ -138,7 +_,7 @@ - ServerLevel serverlevel = this.getLevel(); - MinecraftServer minecraftserver = serverlevel.getServer(); - RandomSource randomsource = Optional.ofNullable(this.random).or(() -> p_299315_.map(serverlevel::getRandomSequence)).orElseGet(serverlevel::getRandom); +@@ -141,7 +_,7 @@ + RandomSource randomsource = Optional.ofNullable(this.random) + .or(() -> randomSequenceKey.map(minecraftserver::getRandomSequence)) + .orElseGet(serverlevel::getRandom); - return new LootContext(this.params, randomsource, minecraftserver.reloadableRegistries().lookup()); + return new LootContext(this.params, randomsource, minecraftserver.reloadableRegistries().lookup(), queriedLootTableId); } diff --git a/patches/minecraft/net/minecraft/world/level/storage/loot/LootParams.java.patch b/patches/minecraft/net/minecraft/world/level/storage/loot/LootParams.java.patch index 1c1ee23ac2..71222d49dc 100644 --- a/patches/minecraft/net/minecraft/world/level/storage/loot/LootParams.java.patch +++ b/patches/minecraft/net/minecraft/world/level/storage/loot/LootParams.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/world/level/storage/loot/LootParams.java +++ b/net/minecraft/world/level/storage/loot/LootParams.java @@ -53,6 +_,15 @@ - this.level = p_287594_; + this.level = level; } + @SuppressWarnings("unchecked") @@ -17,8 +17,8 @@ return this.level; } @@ -92,6 +_,10 @@ - public LootParams create(ContextKeySet p_367827_) { - ContextMap contextmap = this.params.create(p_367827_); + public LootParams create(final ContextKeySet contextKeySet) { + ContextMap contextmap = this.params.create(contextKeySet); return new LootParams(this.level, contextmap, this.dynamicDrops, this.luck); + } + diff --git a/patches/minecraft/net/minecraft/world/level/storage/loot/LootPool.java.patch b/patches/minecraft/net/minecraft/world/level/storage/loot/LootPool.java.patch index 9d73e9ffa0..a1116b8098 100644 --- a/patches/minecraft/net/minecraft/world/level/storage/loot/LootPool.java.patch +++ b/patches/minecraft/net/minecraft/world/level/storage/loot/LootPool.java.patch @@ -1,53 +1,58 @@ --- a/net/minecraft/world/level/storage/loot/LootPool.java +++ b/net/minecraft/world/level/storage/loot/LootPool.java -@@ -34,10 +_,13 @@ - LootItemCondition.DIRECT_CODEC.listOf().optionalFieldOf("conditions", List.of()).forGetter(p_297008_ -> p_297008_.conditions), - LootItemFunctions.ROOT_CODEC.listOf().optionalFieldOf("functions", List.of()).forGetter(p_297009_ -> p_297009_.functions), - NumberProviders.CODEC.fieldOf("rolls").forGetter(p_297004_ -> p_297004_.rolls), -- NumberProviders.CODEC.fieldOf("bonus_rolls").orElse(ConstantValue.exactly(0.0F)).forGetter(p_297006_ -> p_297006_.bonusRolls) -+ NumberProviders.CODEC.fieldOf("bonus_rolls").orElse(ConstantValue.exactly(0.0F)).forGetter(p_297006_ -> p_297006_.bonusRolls), +@@ -33,10 +_,13 @@ + LootItemCondition.DIRECT_CODEC.listOf().optionalFieldOf("conditions", List.of()).forGetter(p -> p.conditions), + LootItemFunctions.ROOT_CODEC.listOf().optionalFieldOf("functions", List.of()).forGetter(p -> p.functions), + NumberProviders.CODEC.fieldOf("rolls").forGetter(p -> p.rolls), +- NumberProviders.CODEC.fieldOf("bonus_rolls").orElse(ConstantValue.exactly(0.0F)).forGetter(p -> p.bonusRolls) ++ NumberProviders.CODEC.fieldOf("bonus_rolls").orElse(ConstantValue.exactly(0.0F)).forGetter(p -> p.bonusRolls), + Codec.STRING.optionalFieldOf("name").forGetter(p -> p.name.filter(n -> !n.startsWith("custom#"))), + net.minecraftforge.common.crafting.conditions.ICondition.OPTIONAL_FEILD_CODEC.forGetter(p -> p.forge_condition) ) - .apply(p_341975_, LootPool::new) + .apply(i, LootPool::new) ); + public static final Codec CONDITIONAL_CODEC = net.minecraftforge.common.crafting.conditions.ConditionCodec.checkingDecode(CODEC, () -> lootPool().build()); private final List entries; private final List conditions; private final Predicate compositeCondition; -@@ -45,13 +_,21 @@ +@@ -44,6 +_,8 @@ private final BiFunction compositeFunction; private NumberProvider rolls; private NumberProvider bonusRolls; + private java.util.Optional name; + private java.util.Optional forge_condition; -+ -+ LootPool(List p_298341_, List p_297697_, List p_299722_, NumberProvider p_165131_, NumberProvider p_165132_) { -+ this(p_298341_, p_297697_, p_299722_, p_165131_, p_165132_, java.util.Optional.empty(), java.util.Optional.empty()); -+ } - LootPool( - List p_298341_, - List p_297697_, - List p_299722_, - NumberProvider p_165131_, -- NumberProvider p_165132_ -+ NumberProvider p_165132_, -+ java.util.Optional name, -+ java.util.Optional forge_condition + private LootPool( + final List entries, +@@ -52,6 +_,18 @@ + final NumberProvider rolls, + final NumberProvider bonusRolls ) { - this.entries = p_298341_; - this.conditions = p_297697_; -@@ -60,6 +_,8 @@ - this.compositeFunction = LootItemFunctions.compose(p_299722_); - this.rolls = p_165131_; - this.bonusRolls = p_165132_; ++ this(entries, conditions, functions, rolls, bonusRolls, java.util.Optional.empty(), java.util.Optional.empty()); ++ } ++ ++ private LootPool( ++ final List entries, ++ final List conditions, ++ final List functions, ++ final NumberProvider rolls, ++ final NumberProvider bonusRolls, ++ final java.util.Optional name, ++ final java.util.Optional forge_condition ++ ) { + this.entries = entries; + this.conditions = conditions; + this.compositeCondition = Util.allOf(conditions); +@@ -59,6 +_,8 @@ + this.compositeFunction = LootItemFunctions.compose(functions); + this.rolls = rolls; + this.bonusRolls = bonusRolls; + this.name = name; + this.forge_condition = forge_condition; } - private void addRandomItem(Consumer p_79059_, LootContext p_79060_) { -@@ -127,12 +_,35 @@ + private void addRandomItem(final Consumer result, final LootContext context) { +@@ -118,12 +_,35 @@ return new LootPool.Builder(); } @@ -81,9 +86,9 @@ + @org.jetbrains.annotations.Nullable + private net.minecraftforge.common.crafting.conditions.ICondition forge_condition; - public LootPool.Builder setRolls(NumberProvider p_165134_) { - this.rolls = p_165134_; -@@ -163,8 +_,18 @@ + public LootPool.Builder setRolls(final NumberProvider rolls) { + this.rolls = rolls; +@@ -154,8 +_,18 @@ return this; } diff --git a/patches/minecraft/net/minecraft/world/level/storage/loot/LootTable.java.patch b/patches/minecraft/net/minecraft/world/level/storage/loot/LootTable.java.patch index 76f70d25ed..3a4b7e54c1 100644 --- a/patches/minecraft/net/minecraft/world/level/storage/loot/LootTable.java.patch +++ b/patches/minecraft/net/minecraft/world/level/storage/loot/LootTable.java.patch @@ -1,62 +1,67 @@ --- a/net/minecraft/world/level/storage/loot/LootTable.java +++ b/net/minecraft/world/level/storage/loot/LootTable.java -@@ -41,7 +_,7 @@ - p_450068_ -> p_450068_.group( - LootContextParamSets.CODEC.lenientOptionalFieldOf("type", DEFAULT_PARAM_SET).forGetter(p_297013_ -> p_297013_.paramSet), - Identifier.CODEC.optionalFieldOf("random_sequence").forGetter(p_297014_ -> p_297014_.randomSequence), -- LootPool.CODEC.listOf().optionalFieldOf("pools", List.of()).forGetter(p_297012_ -> p_297012_.pools), -+ LootPool.CONDITIONAL_CODEC.listOf().optionalFieldOf("pools", List.of()).forGetter(p_297012_ -> p_297012_.pools), - LootItemFunctions.ROOT_CODEC.listOf().optionalFieldOf("functions", List.of()).forGetter(p_297010_ -> p_297010_.functions) +@@ -40,7 +_,7 @@ + i -> i.group( + LootContextParamSets.CODEC.lenientOptionalFieldOf("type", DEFAULT_PARAM_SET).forGetter(t -> t.paramSet), + Identifier.CODEC.optionalFieldOf("random_sequence").forGetter(t -> t.randomSequence), +- LootPool.CODEC.listOf().optionalFieldOf("pools", List.of()).forGetter(t -> t.pools), ++ LootPool.CONDITIONAL_CODEC.listOf().optionalFieldOf("pools", List.of()).forGetter(t -> t.pools), + LootItemFunctions.ROOT_CODEC.listOf().optionalFieldOf("functions", List.of()).forGetter(t -> t.functions) ) - .apply(p_450068_, LootTable::new) -@@ -58,7 +_,7 @@ - LootTable(ContextKeySet p_365565_, Optional p_298628_, List p_298771_, List p_301234_) { - this.paramSet = p_365565_; - this.randomSequence = p_298628_; -- this.pools = p_298771_; -+ this.pools = Lists.newArrayList(p_298771_); - this.functions = p_301234_; - this.compositeFunction = LootItemFunctions.compose(p_301234_); + .apply(i, LootTable::new) +@@ -59,7 +_,7 @@ + ) { + this.paramSet = paramSet; + this.randomSequence = randomSequence; +- this.pools = pools; ++ this.pools = Lists.newArrayList(pools); + this.functions = functions; + this.compositeFunction = LootItemFunctions.compose(functions); } -@@ -81,10 +_,12 @@ +@@ -82,10 +_,12 @@ }; } + @Deprecated // Use a non-'Raw' version of 'getRandomItems', so that the Forge Global Loot Modifiers will be applied - public void getRandomItemsRaw(LootParams p_287669_, Consumer p_287781_) { - this.getRandomItemsRaw(new LootContext.Builder(p_287669_).create(this.randomSequence), p_287781_); + public void getRandomItemsRaw(final LootParams params, final Consumer output) { + this.getRandomItemsRaw(new LootContext.Builder(params).create(this.randomSequence), output); } + @Deprecated // Use a non-'Raw' version of 'getRandomItems', so that the Forge Global Loot Modifiers will be applied - public void getRandomItemsRaw(LootContext p_79132_, Consumer p_79133_) { + public void getRandomItemsRaw(final LootContext context, final Consumer output) { LootContext.VisitedEntry visitedentry = LootContext.createVisitedEntry(this); - if (p_79132_.pushVisitedElement(visitedentry)) { -@@ -101,15 +_,15 @@ + if (context.pushVisitedElement(visitedentry)) { +@@ -102,18 +_,19 @@ } - public void getRandomItems(LootParams p_287748_, long p_287729_, Consumer p_287583_) { -- this.getRandomItemsRaw(new LootContext.Builder(p_287748_).withOptionalRandomSeed(p_287729_).create(this.randomSequence), createStackSplitter(p_287748_.getLevel(), p_287583_)); -+ this.getRandomItems(new LootContext.Builder(p_287748_).withOptionalRandomSeed(p_287729_).create(this.randomSequence)).forEach(p_287583_); + public void getRandomItems(final LootParams params, final long optionalLootTableSeed, final Consumer output) { +- this.getRandomItemsRaw( +- new LootContext.Builder(params).withOptionalRandomSeed(optionalLootTableSeed).create(this.randomSequence), ++ this.getRandomItems( ++ new LootContext.Builder(params).withOptionalRandomSeed(optionalLootTableSeed).create(this.randomSequence) ++ ).forEach( + createStackSplitter(params.getLevel(), output) + ); } - public void getRandomItems(LootParams p_287704_, Consumer p_287617_) { -- this.getRandomItemsRaw(p_287704_, createStackSplitter(p_287704_.getLevel(), p_287617_)); -+ this.getRandomItems(p_287704_).forEach(p_287617_); + public void getRandomItems(final LootParams params, final Consumer output) { +- this.getRandomItemsRaw(params, createStackSplitter(params.getLevel(), output)); ++ this.getRandomItems(params).forEach(createStackSplitter(params.getLevel(), output)); } - public void getRandomItems(LootContext p_79149_, Consumer p_79150_) { -- this.getRandomItemsRaw(p_79149_, createStackSplitter(p_79149_.getLevel(), p_79150_)); -+ this.getRandomItems(p_79149_).forEach(p_79150_); + public void getRandomItems(final LootContext context, final Consumer output) { +- this.getRandomItemsRaw(context, createStackSplitter(context.getLevel(), output)); ++ this.getRandomItems(context).forEach(createStackSplitter(context.getLevel(), output)); } - public ObjectArrayList getRandomItems(LootParams p_345012_, RandomSource p_344559_) { -@@ -126,7 +_,8 @@ + public ObjectArrayList getRandomItems(final LootParams params, final RandomSource randomSource) { +@@ -130,7 +_,8 @@ - private ObjectArrayList getRandomItems(LootContext p_230923_) { + private ObjectArrayList getRandomItems(final LootContext context) { ObjectArrayList objectarraylist = new ObjectArrayList<>(); -- this.getRandomItems(p_230923_, objectarraylist::add); -+ this.getRandomItemsRaw(p_230923_, createStackSplitter(p_230923_.getLevel(), objectarraylist::add)); -+ objectarraylist = net.minecraftforge.common.ForgeHooks.modifyLoot(this, objectarraylist, p_230923_); +- this.getRandomItems(context, objectarraylist::add); ++ this.getRandomItemsRaw(context, createStackSplitter(context.getLevel(), objectarraylist::add)); ++ objectarraylist = net.minecraftforge.common.ForgeHooks.modifyLoot(this, objectarraylist, context); return objectarraylist; } diff --git a/patches/minecraft/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java.patch b/patches/minecraft/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java.patch index 1b36a1be69..754a85516f 100644 --- a/patches/minecraft/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java.patch +++ b/patches/minecraft/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java.patch @@ -1,25 +1,25 @@ --- a/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java +++ b/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java -@@ -65,8 +_,12 @@ +@@ -73,8 +_,12 @@ @Override - public ItemStack run(ItemStack p_344964_, LootContext p_345394_) { - Entity entity = p_345394_.getOptionalParameter(LootContextParams.ATTACKING_ENTITY); + public ItemStack run(final ItemStack itemStack, final LootContext context) { + Entity entity = context.getOptionalParameter(LootContextParams.ATTACKING_ENTITY); - if (entity instanceof LivingEntity livingentity) { - int i = EnchantmentHelper.getEnchantmentLevel(this.enchantment, livingentity); + int i = 0; + if (this.enchantment.is(Enchantments.LOOTING)) -+ i = p_345394_.getLootingModifier(); ++ i = context.getLootingModifier(); + else if (entity instanceof LivingEntity livingentity) + i = EnchantmentHelper.getEnchantmentLevel(this.enchantment, livingentity); + if (i == 0) { - return p_344964_; + return itemStack; } -@@ -76,7 +_,6 @@ +@@ -84,7 +_,6 @@ if (this.hasLimit()) { - p_344964_.limitSize(this.limit); + itemStack.limitSize(this.limit); } - } - return p_344964_; + return itemStack; } diff --git a/patches/minecraft/net/minecraft/world/level/storage/loot/functions/SmeltItemFunction.java.patch b/patches/minecraft/net/minecraft/world/level/storage/loot/functions/SmeltItemFunction.java.patch deleted file mode 100644 index 0851d8d1ab..0000000000 --- a/patches/minecraft/net/minecraft/world/level/storage/loot/functions/SmeltItemFunction.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/minecraft/world/level/storage/loot/functions/SmeltItemFunction.java -+++ b/net/minecraft/world/level/storage/loot/functions/SmeltItemFunction.java -@@ -42,7 +_,7 @@ - if (optional.isPresent()) { - ItemStack itemstack = optional.get().value().assemble(singlerecipeinput, p_81269_.getLevel().registryAccess()); - if (!itemstack.isEmpty()) { -- return itemstack.copyWithCount(p_81268_.getCount()); -+ return itemstack.copyWithCount(p_81268_.getCount() * itemstack.getCount()); // Forge: Support smelting returning multiple - } - } - diff --git a/patches/minecraft/net/minecraft/world/level/storage/loot/parameters/LootContextParamSets.java.patch b/patches/minecraft/net/minecraft/world/level/storage/loot/parameters/LootContextParamSets.java.patch index 3c14722dfa..6613f8eca5 100644 --- a/patches/minecraft/net/minecraft/world/level/storage/loot/parameters/LootContextParamSets.java.patch +++ b/patches/minecraft/net/minecraft/world/level/storage/loot/parameters/LootContextParamSets.java.patch @@ -1,20 +1,20 @@ --- a/net/minecraft/world/level/storage/loot/parameters/LootContextParamSets.java +++ b/net/minecraft/world/level/storage/loot/parameters/LootContextParamSets.java -@@ -20,7 +_,7 @@ +@@ -19,7 +_,7 @@ + REGISTRY.inverse()::get ); - public static final ContextKeySet EMPTY = register("empty", p_367081_ -> {}); - public static final ContextKeySet CHEST = register( -- "chest", p_360697_ -> p_360697_.required(LootContextParams.ORIGIN).optional(LootContextParams.THIS_ENTITY) -+ "chest", p_360697_ -> p_360697_.required(LootContextParams.ORIGIN).optional(LootContextParams.THIS_ENTITY).optional(LootContextParams.ATTACKING_ENTITY) //Forge: Chest Minecarts can have killers. - ); + public static final ContextKeySet EMPTY = register("empty", builder -> {}); +- public static final ContextKeySet CHEST = register("chest", builder -> builder.required(LootContextParams.ORIGIN).optional(LootContextParams.THIS_ENTITY)); ++ public static final ContextKeySet CHEST = register("chest", builder -> builder.required(LootContextParams.ORIGIN).optional(LootContextParams.THIS_ENTITY).optional(LootContextParams.ATTACKING_ENTITY)); //Forge: Chest Minecarts can have killers. public static final ContextKeySet COMMAND = register( - "command", p_360688_ -> p_360688_.required(LootContextParams.ORIGIN).optional(LootContextParams.THIS_ENTITY) -@@ -29,7 +_,7 @@ - "selector", p_360687_ -> p_360687_.required(LootContextParams.ORIGIN).required(LootContextParams.THIS_ENTITY) + "command", builder -> builder.required(LootContextParams.ORIGIN).optional(LootContextParams.THIS_ENTITY) + ); +@@ -33,7 +_,7 @@ + .required(LootContextParams.ADDITIONAL_COST_COMPONENT_ALLOWED) ); public static final ContextKeySet FISHING = register( -- "fishing", p_360682_ -> p_360682_.required(LootContextParams.ORIGIN).required(LootContextParams.TOOL).optional(LootContextParams.THIS_ENTITY) -+ "fishing", p_360682_ -> p_360682_.required(LootContextParams.ORIGIN).required(LootContextParams.TOOL).optional(LootContextParams.THIS_ENTITY).optional(LootContextParams.ATTACKING_ENTITY).optional(LootContextParams.THIS_ENTITY) //Forge: Allow fisher, and bobber +- "fishing", builder -> builder.required(LootContextParams.ORIGIN).required(LootContextParams.TOOL).optional(LootContextParams.THIS_ENTITY) ++ "fishing", builder -> builder.required(LootContextParams.ORIGIN).required(LootContextParams.TOOL).optional(LootContextParams.THIS_ENTITY).optional(LootContextParams.ATTACKING_ENTITY).optional(LootContextParams.THIS_ENTITY) //Forge: Allow fisher, and bobber ); public static final ContextKeySet ENTITY = register( "entity", diff --git a/patches/minecraft/net/minecraft/world/level/storage/loot/predicates/LootItemRandomChanceWithEnchantedBonusCondition.java.patch b/patches/minecraft/net/minecraft/world/level/storage/loot/predicates/LootItemRandomChanceWithEnchantedBonusCondition.java.patch index 0eb94cd445..ff80c549ac 100644 --- a/patches/minecraft/net/minecraft/world/level/storage/loot/predicates/LootItemRandomChanceWithEnchantedBonusCondition.java.patch +++ b/patches/minecraft/net/minecraft/world/level/storage/loot/predicates/LootItemRandomChanceWithEnchantedBonusCondition.java.patch @@ -2,14 +2,14 @@ +++ b/net/minecraft/world/level/storage/loot/predicates/LootItemRandomChanceWithEnchantedBonusCondition.java @@ -41,7 +_,11 @@ - public boolean test(LootContext p_343845_) { - Entity entity = p_343845_.getOptionalParameter(LootContextParams.ATTACKING_ENTITY); + public boolean test(final LootContext context) { + Entity entity = context.getOptionalParameter(LootContextParams.ATTACKING_ENTITY); - int i = entity instanceof LivingEntity livingentity ? EnchantmentHelper.getEnchantmentLevel(this.enchantment, livingentity) : 0; + int i = 0; + if (this.enchantment.is(Enchantments.LOOTING)) -+ i = p_343845_.getLootingModifier(); ++ i = context.getLootingModifier(); + else if (entity instanceof LivingEntity livingentity) + i = EnchantmentHelper.getEnchantmentLevel(this.enchantment, livingentity); float f = i > 0 ? this.enchantedChance.calculate(i) : this.unenchantedChance; - return p_343845_.getRandom().nextFloat() < f; + return context.getRandom().nextFloat() < f; } diff --git a/server_files/args.txt b/server_files/args.txt index 0437f563a2..af830f6a54 100644 --- a/server_files/args.txt +++ b/server_files/args.txt @@ -1 +1 @@ --Djava.net.preferIPv6Addresses=system -jar @SHIM_JAR_FILE@ +-Djava.net.preferIPv6Addresses=system -XX:+UseCompactObjectHeaders -jar @SHIM_JAR_FILE@ diff --git a/settings.gradle b/settings.gradle index 434cafd1e2..631180f095 100644 --- a/settings.gradle +++ b/settings.gradle @@ -102,7 +102,7 @@ dependencyResolutionManagement { library('jopt-simple', 'net.sf.jopt-simple:jopt-simple:5.0.4') library('commons-io', 'commons-io:commons-io:2.17.0') - version('lwjgl', '3.3.3') + version('lwjgl', '3.4.1') library('lwjgl', 'org.lwjgl', 'lwjgl' ).versionRef('lwjgl') library('lwjgl-glfw', 'org.lwjgl', 'lwjgl-glfw' ).versionRef('lwjgl') library('lwjgl-opengl', 'org.lwjgl', 'lwjgl-opengl').versionRef('lwjgl') diff --git a/src/main/generated/data/c/tags/block/barrels.json b/src/main/generated/data/c/tags/block/barrels.json index 94bded15d8..5e84e807f6 100644 --- a/src/main/generated/data/c/tags/block/barrels.json +++ b/src/main/generated/data/c/tags/block/barrels.json @@ -1,9 +1,5 @@ { "values": [ - "#c:barrels/wooden", - { - "id": "#forge:barrels", - "required": false - } + "#c:barrels/wooden" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/barrels/wooden.json b/src/main/generated/data/c/tags/block/barrels/wooden.json index fedbc8ac53..b07daae1c0 100644 --- a/src/main/generated/data/c/tags/block/barrels/wooden.json +++ b/src/main/generated/data/c/tags/block/barrels/wooden.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:barrel", - { - "id": "#forge:barrels/wooden", - "required": false - } + "minecraft:barrel" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/bookshelves.json b/src/main/generated/data/c/tags/block/bookshelves.json index 68f756dba9..c09b2185bd 100644 --- a/src/main/generated/data/c/tags/block/bookshelves.json +++ b/src/main/generated/data/c/tags/block/bookshelves.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:bookshelf", - { - "id": "#forge:bookshelves", - "required": false - } + "minecraft:bookshelf" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/chests.json b/src/main/generated/data/c/tags/block/chests.json index b5adbfcc12..16ea314685 100644 --- a/src/main/generated/data/c/tags/block/chests.json +++ b/src/main/generated/data/c/tags/block/chests.json @@ -1,11 +1,8 @@ { "values": [ - "#forge:chests/ender", - "#forge:chests/trapped", - "#c:chests/wooden", - { - "id": "#forge:chests", - "required": false - } + "minecraft:copper_chest", + "#c:chests/ender", + "#c:chests/trapped", + "#c:chests/wooden" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/chests/ender.json b/src/main/generated/data/c/tags/block/chests/ender.json similarity index 100% rename from src/main/generated/data/forge/tags/block/chests/ender.json rename to src/main/generated/data/c/tags/block/chests/ender.json diff --git a/src/main/generated/data/forge/tags/block/chests/trapped.json b/src/main/generated/data/c/tags/block/chests/trapped.json similarity index 100% rename from src/main/generated/data/forge/tags/block/chests/trapped.json rename to src/main/generated/data/c/tags/block/chests/trapped.json diff --git a/src/main/generated/data/c/tags/block/chests/wooden.json b/src/main/generated/data/c/tags/block/chests/wooden.json index 0659e860e6..86533f935b 100644 --- a/src/main/generated/data/c/tags/block/chests/wooden.json +++ b/src/main/generated/data/c/tags/block/chests/wooden.json @@ -1,10 +1,6 @@ { "values": [ "minecraft:chest", - "minecraft:trapped_chest", - { - "id": "#forge:chests/wooden", - "required": false - } + "minecraft:trapped_chest" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/cobblestones.json b/src/main/generated/data/c/tags/block/cobblestones.json index 3e7ff322a0..6019d0d40e 100644 --- a/src/main/generated/data/c/tags/block/cobblestones.json +++ b/src/main/generated/data/c/tags/block/cobblestones.json @@ -1,12 +1,8 @@ { "values": [ - "#forge:cobblestone/normal", - "#forge:cobblestone/infested", - "#forge:cobblestone/mossy", - "#forge:cobblestone/deepslate", - { - "id": "#forge:cobblestone", - "required": false - } + "#c:cobblestones/normal", + "#c:cobblestones/infested", + "#c:cobblestones/mossy", + "#c:cobblestones/deepslate" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/cobblestone/deepslate.json b/src/main/generated/data/c/tags/block/cobblestones/deepslate.json similarity index 100% rename from src/main/generated/data/forge/tags/block/cobblestone/deepslate.json rename to src/main/generated/data/c/tags/block/cobblestones/deepslate.json diff --git a/src/main/generated/data/forge/tags/block/cobblestone/infested.json b/src/main/generated/data/c/tags/block/cobblestones/infested.json similarity index 100% rename from src/main/generated/data/forge/tags/block/cobblestone/infested.json rename to src/main/generated/data/c/tags/block/cobblestones/infested.json diff --git a/src/main/generated/data/forge/tags/block/cobblestone/mossy.json b/src/main/generated/data/c/tags/block/cobblestones/mossy.json similarity index 100% rename from src/main/generated/data/forge/tags/block/cobblestone/mossy.json rename to src/main/generated/data/c/tags/block/cobblestones/mossy.json diff --git a/src/main/generated/data/forge/tags/block/cobblestone/normal.json b/src/main/generated/data/c/tags/block/cobblestones/normal.json similarity index 100% rename from src/main/generated/data/forge/tags/block/cobblestone/normal.json rename to src/main/generated/data/c/tags/block/cobblestones/normal.json diff --git a/src/main/generated/data/forge/tags/block/end_stones.json b/src/main/generated/data/c/tags/block/end_stones.json similarity index 100% rename from src/main/generated/data/forge/tags/block/end_stones.json rename to src/main/generated/data/c/tags/block/end_stones.json diff --git a/src/main/generated/data/c/tags/block/fence_gates.json b/src/main/generated/data/c/tags/block/fence_gates.json new file mode 100644 index 0000000000..42dca6b914 --- /dev/null +++ b/src/main/generated/data/c/tags/block/fence_gates.json @@ -0,0 +1,5 @@ +{ + "values": [ + "#c:fence_gates/wooden" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/fence_gates/wooden.json b/src/main/generated/data/c/tags/block/fence_gates/wooden.json similarity index 100% rename from src/main/generated/data/forge/tags/block/fence_gates/wooden.json rename to src/main/generated/data/c/tags/block/fence_gates/wooden.json diff --git a/src/main/generated/data/c/tags/block/fences.json b/src/main/generated/data/c/tags/block/fences.json new file mode 100644 index 0000000000..3185a1f46b --- /dev/null +++ b/src/main/generated/data/c/tags/block/fences.json @@ -0,0 +1,6 @@ +{ + "values": [ + "#c:fences/nether_brick", + "#c:fences/wooden" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/fences/nether_brick.json b/src/main/generated/data/c/tags/block/fences/nether_brick.json similarity index 100% rename from src/main/generated/data/forge/tags/block/fences/nether_brick.json rename to src/main/generated/data/c/tags/block/fences/nether_brick.json diff --git a/src/main/generated/data/forge/tags/block/fences/wooden.json b/src/main/generated/data/c/tags/block/fences/wooden.json similarity index 100% rename from src/main/generated/data/forge/tags/block/fences/wooden.json rename to src/main/generated/data/c/tags/block/fences/wooden.json diff --git a/src/main/generated/data/c/tags/block/flowers/small.json b/src/main/generated/data/c/tags/block/flowers/small.json index bdd6b47dd1..f2252429ca 100644 --- a/src/main/generated/data/c/tags/block/flowers/small.json +++ b/src/main/generated/data/c/tags/block/flowers/small.json @@ -15,10 +15,6 @@ "minecraft:wither_rose", "minecraft:torchflower", "minecraft:open_eyeblossom", - "minecraft:closed_eyeblossom", - { - "id": "#minecraft:small_flowers", - "required": false - } + "minecraft:closed_eyeblossom" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/flowers/tall.json b/src/main/generated/data/c/tags/block/flowers/tall.json index 156bf722ac..1944a475be 100644 --- a/src/main/generated/data/c/tags/block/flowers/tall.json +++ b/src/main/generated/data/c/tags/block/flowers/tall.json @@ -6,7 +6,7 @@ "minecraft:rose_bush", "minecraft:pitcher_plant", { - "id": "#minecraft:tall_flowers", + "id": "minecraft:tall_flowers", "required": false } ] diff --git a/src/main/generated/data/c/tags/block/glass_blocks.json b/src/main/generated/data/c/tags/block/glass_blocks.json index 55b243f654..61618a7498 100644 --- a/src/main/generated/data/c/tags/block/glass_blocks.json +++ b/src/main/generated/data/c/tags/block/glass_blocks.json @@ -2,10 +2,6 @@ "values": [ "#c:glass_blocks/colorless", "#c:glass_blocks/cheap", - "#c:glass_blocks/tinted", - { - "id": "#forge:glass", - "required": false - } + "#c:glass_blocks/tinted" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/glass_blocks/cheap.json b/src/main/generated/data/c/tags/block/glass_blocks/cheap.json index 067bd8f78d..3465b3884b 100644 --- a/src/main/generated/data/c/tags/block/glass_blocks/cheap.json +++ b/src/main/generated/data/c/tags/block/glass_blocks/cheap.json @@ -16,10 +16,6 @@ "minecraft:brown_stained_glass", "minecraft:green_stained_glass", "minecraft:red_stained_glass", - "minecraft:black_stained_glass", - { - "id": "#forge:glass/silica", - "required": false - } + "minecraft:black_stained_glass" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/glass_blocks/colorless.json b/src/main/generated/data/c/tags/block/glass_blocks/colorless.json index e46e8e25ba..ac8b5e5086 100644 --- a/src/main/generated/data/c/tags/block/glass_blocks/colorless.json +++ b/src/main/generated/data/c/tags/block/glass_blocks/colorless.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:glass", - { - "id": "#forge:glass/colorless", - "required": false - } + "minecraft:glass" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/glass_blocks/tinted.json b/src/main/generated/data/c/tags/block/glass_blocks/tinted.json index e7fe6f40f0..4075a1556b 100644 --- a/src/main/generated/data/c/tags/block/glass_blocks/tinted.json +++ b/src/main/generated/data/c/tags/block/glass_blocks/tinted.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:tinted_glass", - { - "id": "#forge:glass/tinted", - "required": false - } + "minecraft:tinted_glass" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/glass_panes.json b/src/main/generated/data/c/tags/block/glass_panes.json index 869c6fe993..c4bdf8ea3f 100644 --- a/src/main/generated/data/c/tags/block/glass_panes.json +++ b/src/main/generated/data/c/tags/block/glass_panes.json @@ -16,10 +16,6 @@ "minecraft:brown_stained_glass_pane", "minecraft:green_stained_glass_pane", "minecraft:red_stained_glass_pane", - "minecraft:black_stained_glass_pane", - { - "id": "#forge:glass_panes", - "required": false - } + "minecraft:black_stained_glass_pane" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/glass_panes/colorless.json b/src/main/generated/data/c/tags/block/glass_panes/colorless.json index 5390c3bbd6..eb5756f964 100644 --- a/src/main/generated/data/c/tags/block/glass_panes/colorless.json +++ b/src/main/generated/data/c/tags/block/glass_panes/colorless.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:glass_pane", - { - "id": "#forge:glass_panes/colorless", - "required": false - } + "minecraft:glass_pane" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/gravel.json b/src/main/generated/data/c/tags/block/gravels.json similarity index 100% rename from src/main/generated/data/forge/tags/block/gravel.json rename to src/main/generated/data/c/tags/block/gravels.json diff --git a/src/main/generated/data/c/tags/block/natural_logs.json b/src/main/generated/data/c/tags/block/natural_logs.json new file mode 100644 index 0000000000..e03c0c2a6a --- /dev/null +++ b/src/main/generated/data/c/tags/block/natural_logs.json @@ -0,0 +1,6 @@ +{ + "values": [ + "#c:natural_logs/nether", + "#c:natural_logs/overworld" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/natural_logs/nether.json b/src/main/generated/data/c/tags/block/natural_logs/nether.json new file mode 100644 index 0000000000..192679af78 --- /dev/null +++ b/src/main/generated/data/c/tags/block/natural_logs/nether.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:crimson_stem", + "minecraft:warped_stem" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/natural_logs/overworld.json b/src/main/generated/data/c/tags/block/natural_logs/overworld.json new file mode 100644 index 0000000000..c351b11bb3 --- /dev/null +++ b/src/main/generated/data/c/tags/block/natural_logs/overworld.json @@ -0,0 +1,13 @@ +{ + "values": [ + "minecraft:acacia_log", + "minecraft:birch_log", + "minecraft:cherry_log", + "minecraft:dark_oak_log", + "minecraft:jungle_log", + "minecraft:mangrove_log", + "minecraft:oak_log", + "minecraft:pale_oak_log", + "minecraft:spruce_log" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/natural_woods.json b/src/main/generated/data/c/tags/block/natural_woods.json new file mode 100644 index 0000000000..46efd3c3f6 --- /dev/null +++ b/src/main/generated/data/c/tags/block/natural_woods.json @@ -0,0 +1,15 @@ +{ + "values": [ + "minecraft:acacia_wood", + "minecraft:birch_wood", + "minecraft:cherry_wood", + "minecraft:crimson_hyphae", + "minecraft:dark_oak_wood", + "minecraft:jungle_wood", + "minecraft:mangrove_wood", + "minecraft:oak_wood", + "minecraft:pale_oak_wood", + "minecraft:spruce_wood", + "minecraft:warped_hyphae" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/netherrack.json b/src/main/generated/data/c/tags/block/netherracks.json similarity index 100% rename from src/main/generated/data/forge/tags/block/netherrack.json rename to src/main/generated/data/c/tags/block/netherracks.json diff --git a/src/main/generated/data/c/tags/block/obsidians.json b/src/main/generated/data/c/tags/block/obsidians.json index 3986b73df1..5df539fb0e 100644 --- a/src/main/generated/data/c/tags/block/obsidians.json +++ b/src/main/generated/data/c/tags/block/obsidians.json @@ -1,10 +1,6 @@ { "values": [ "#c:obsidians/normal", - "#c:obsidians/crying", - { - "id": "#forge:obsidian", - "required": false - } + "#c:obsidians/crying" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/ore_bearing_ground/deepslate.json b/src/main/generated/data/c/tags/block/ore_bearing_ground/deepslate.json similarity index 100% rename from src/main/generated/data/forge/tags/block/ore_bearing_ground/deepslate.json rename to src/main/generated/data/c/tags/block/ore_bearing_ground/deepslate.json diff --git a/src/main/generated/data/forge/tags/block/ore_bearing_ground/netherrack.json b/src/main/generated/data/c/tags/block/ore_bearing_ground/netherrack.json similarity index 100% rename from src/main/generated/data/forge/tags/block/ore_bearing_ground/netherrack.json rename to src/main/generated/data/c/tags/block/ore_bearing_ground/netherrack.json diff --git a/src/main/generated/data/forge/tags/block/ore_bearing_ground/stone.json b/src/main/generated/data/c/tags/block/ore_bearing_ground/stone.json similarity index 100% rename from src/main/generated/data/forge/tags/block/ore_bearing_ground/stone.json rename to src/main/generated/data/c/tags/block/ore_bearing_ground/stone.json diff --git a/src/main/generated/data/forge/tags/block/ore_rates/dense.json b/src/main/generated/data/c/tags/block/ore_rates/dense.json similarity index 100% rename from src/main/generated/data/forge/tags/block/ore_rates/dense.json rename to src/main/generated/data/c/tags/block/ore_rates/dense.json diff --git a/src/main/generated/data/forge/tags/block/ore_rates/singular.json b/src/main/generated/data/c/tags/block/ore_rates/singular.json similarity index 100% rename from src/main/generated/data/forge/tags/block/ore_rates/singular.json rename to src/main/generated/data/c/tags/block/ore_rates/singular.json diff --git a/src/main/generated/data/forge/tags/block/ore_rates/sparse.json b/src/main/generated/data/c/tags/block/ore_rates/sparse.json similarity index 100% rename from src/main/generated/data/forge/tags/block/ore_rates/sparse.json rename to src/main/generated/data/c/tags/block/ore_rates/sparse.json diff --git a/src/main/generated/data/c/tags/block/ores.json b/src/main/generated/data/c/tags/block/ores.json index 7397864c1a..3b2293aa8d 100644 --- a/src/main/generated/data/c/tags/block/ores.json +++ b/src/main/generated/data/c/tags/block/ores.json @@ -1,18 +1,14 @@ { "values": [ - "#forge:ores/coal", - "#forge:ores/copper", - "#forge:ores/diamond", - "#forge:ores/emerald", - "#forge:ores/gold", - "#forge:ores/iron", - "#forge:ores/lapis", + "#c:ores/coal", + "#c:ores/copper", + "#c:ores/diamond", + "#c:ores/emerald", + "#c:ores/gold", + "#c:ores/iron", + "#c:ores/lapis", "#c:ores/netherite_scrap", - "#forge:ores/redstone", - "#c:ores/quartz", - { - "id": "#forge:ores", - "required": false - } + "#c:ores/redstone", + "#c:ores/quartz" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/ores/coal.json b/src/main/generated/data/c/tags/block/ores/coal.json similarity index 100% rename from src/main/generated/data/forge/tags/block/ores/coal.json rename to src/main/generated/data/c/tags/block/ores/coal.json diff --git a/src/main/generated/data/forge/tags/block/ores/copper.json b/src/main/generated/data/c/tags/block/ores/copper.json similarity index 100% rename from src/main/generated/data/forge/tags/block/ores/copper.json rename to src/main/generated/data/c/tags/block/ores/copper.json diff --git a/src/main/generated/data/forge/tags/block/ores/diamond.json b/src/main/generated/data/c/tags/block/ores/diamond.json similarity index 100% rename from src/main/generated/data/forge/tags/block/ores/diamond.json rename to src/main/generated/data/c/tags/block/ores/diamond.json diff --git a/src/main/generated/data/forge/tags/block/ores/emerald.json b/src/main/generated/data/c/tags/block/ores/emerald.json similarity index 100% rename from src/main/generated/data/forge/tags/block/ores/emerald.json rename to src/main/generated/data/c/tags/block/ores/emerald.json diff --git a/src/main/generated/data/forge/tags/block/ores/gold.json b/src/main/generated/data/c/tags/block/ores/gold.json similarity index 100% rename from src/main/generated/data/forge/tags/block/ores/gold.json rename to src/main/generated/data/c/tags/block/ores/gold.json diff --git a/src/main/generated/data/forge/tags/block/ores/iron.json b/src/main/generated/data/c/tags/block/ores/iron.json similarity index 100% rename from src/main/generated/data/forge/tags/block/ores/iron.json rename to src/main/generated/data/c/tags/block/ores/iron.json diff --git a/src/main/generated/data/forge/tags/block/ores/lapis.json b/src/main/generated/data/c/tags/block/ores/lapis.json similarity index 100% rename from src/main/generated/data/forge/tags/block/ores/lapis.json rename to src/main/generated/data/c/tags/block/ores/lapis.json diff --git a/src/main/generated/data/c/tags/block/ores/netherite_scrap.json b/src/main/generated/data/c/tags/block/ores/netherite_scrap.json index 6cc208db8e..910d1fb8e6 100644 --- a/src/main/generated/data/c/tags/block/ores/netherite_scrap.json +++ b/src/main/generated/data/c/tags/block/ores/netherite_scrap.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:ancient_debris", - { - "id": "#forge:ores/netherite_scrap", - "required": false - } + "minecraft:ancient_debris" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/ores/quartz.json b/src/main/generated/data/c/tags/block/ores/quartz.json index 5433b2ed6f..f0bc7a4657 100644 --- a/src/main/generated/data/c/tags/block/ores/quartz.json +++ b/src/main/generated/data/c/tags/block/ores/quartz.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:nether_quartz_ore", - { - "id": "#forge:ores/quartz", - "required": false - } + "minecraft:nether_quartz_ore" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/ores/redstone.json b/src/main/generated/data/c/tags/block/ores/redstone.json similarity index 100% rename from src/main/generated/data/forge/tags/block/ores/redstone.json rename to src/main/generated/data/c/tags/block/ores/redstone.json diff --git a/src/main/generated/data/forge/tags/block/ores_in_ground/deepslate.json b/src/main/generated/data/c/tags/block/ores_in_ground/deepslate.json similarity index 100% rename from src/main/generated/data/forge/tags/block/ores_in_ground/deepslate.json rename to src/main/generated/data/c/tags/block/ores_in_ground/deepslate.json diff --git a/src/main/generated/data/forge/tags/block/ores_in_ground/netherrack.json b/src/main/generated/data/c/tags/block/ores_in_ground/netherrack.json similarity index 100% rename from src/main/generated/data/forge/tags/block/ores_in_ground/netherrack.json rename to src/main/generated/data/c/tags/block/ores_in_ground/netherrack.json diff --git a/src/main/generated/data/forge/tags/block/ores_in_ground/stone.json b/src/main/generated/data/c/tags/block/ores_in_ground/stone.json similarity index 100% rename from src/main/generated/data/forge/tags/block/ores_in_ground/stone.json rename to src/main/generated/data/c/tags/block/ores_in_ground/stone.json diff --git a/src/main/generated/data/c/tags/block/sands.json b/src/main/generated/data/c/tags/block/sands.json new file mode 100644 index 0000000000..f4b6e6a769 --- /dev/null +++ b/src/main/generated/data/c/tags/block/sands.json @@ -0,0 +1,6 @@ +{ + "values": [ + "#c:sands/colorless", + "#c:sands/red" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/sand/colorless.json b/src/main/generated/data/c/tags/block/sands/colorless.json similarity index 100% rename from src/main/generated/data/forge/tags/block/sand/colorless.json rename to src/main/generated/data/c/tags/block/sands/colorless.json diff --git a/src/main/generated/data/forge/tags/block/sand/red.json b/src/main/generated/data/c/tags/block/sands/red.json similarity index 100% rename from src/main/generated/data/forge/tags/block/sand/red.json rename to src/main/generated/data/c/tags/block/sands/red.json diff --git a/src/main/generated/data/c/tags/block/sandstone/blocks.json b/src/main/generated/data/c/tags/block/sandstone/blocks.json index 5684db6caf..df1b934e5c 100644 --- a/src/main/generated/data/c/tags/block/sandstone/blocks.json +++ b/src/main/generated/data/c/tags/block/sandstone/blocks.json @@ -1,10 +1,6 @@ { "values": [ "#c:sandstone/red_blocks", - "#c:sandstone/uncolored_blocks", - { - "id": "#forge:sandstone", - "required": false - } + "#c:sandstone/uncolored_blocks" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/storage_blocks.json b/src/main/generated/data/c/tags/block/storage_blocks.json index 4354b34619..54cd9d84ad 100644 --- a/src/main/generated/data/c/tags/block/storage_blocks.json +++ b/src/main/generated/data/c/tags/block/storage_blocks.json @@ -16,53 +16,6 @@ "#c:storage_blocks/redstone", "#c:storage_blocks/slime", "#c:storage_blocks/wheat", - { - "id": "#forge:storage_blocks/coal", - "required": false - }, - { - "id": "#forge:storage_blocks/copper", - "required": false - }, - { - "id": "#forge:storage_blocks/diamond", - "required": false - }, - { - "id": "#forge:storage_blocks/emerald", - "required": false - }, - { - "id": "#forge:storage_blocks/gold", - "required": false - }, - { - "id": "#forge:storage_blocks/iron", - "required": false - }, - { - "id": "#forge:storage_blocks/lapis", - "required": false - }, - { - "id": "#forge:storage_blocks/netherite", - "required": false - }, - { - "id": "#forge:storage_blocks/raw_copper", - "required": false - }, - { - "id": "#forge:storage_blocks/raw_gold", - "required": false - }, - { - "id": "#forge:storage_blocks/raw_iron", - "required": false - }, - { - "id": "#forge:storage_blocks/redstone", - "required": false - } + "#c:storage_blocks/resin" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/storage_blocks/coal.json b/src/main/generated/data/c/tags/block/storage_blocks/coal.json index b8479ced38..4b7921705b 100644 --- a/src/main/generated/data/c/tags/block/storage_blocks/coal.json +++ b/src/main/generated/data/c/tags/block/storage_blocks/coal.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:coal_block", - { - "id": "#forge:storage_blocks/coal", - "required": false - } + "minecraft:coal_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/storage_blocks/copper.json b/src/main/generated/data/c/tags/block/storage_blocks/copper.json index acd2a6a7a4..015bec70c3 100644 --- a/src/main/generated/data/c/tags/block/storage_blocks/copper.json +++ b/src/main/generated/data/c/tags/block/storage_blocks/copper.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:copper_block", - { - "id": "#forge:storage_blocks/copper", - "required": false - } + "minecraft:copper_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/storage_blocks/diamond.json b/src/main/generated/data/c/tags/block/storage_blocks/diamond.json index 76426ba425..acd7f52de5 100644 --- a/src/main/generated/data/c/tags/block/storage_blocks/diamond.json +++ b/src/main/generated/data/c/tags/block/storage_blocks/diamond.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:diamond_block", - { - "id": "#forge:storage_blocks/diamond", - "required": false - } + "minecraft:diamond_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/storage_blocks/emerald.json b/src/main/generated/data/c/tags/block/storage_blocks/emerald.json index 7a41454d94..152063ec6c 100644 --- a/src/main/generated/data/c/tags/block/storage_blocks/emerald.json +++ b/src/main/generated/data/c/tags/block/storage_blocks/emerald.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:emerald_block", - { - "id": "#forge:storage_blocks/emerald", - "required": false - } + "minecraft:emerald_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/storage_blocks/gold.json b/src/main/generated/data/c/tags/block/storage_blocks/gold.json index a4116fc77f..546dde03c9 100644 --- a/src/main/generated/data/c/tags/block/storage_blocks/gold.json +++ b/src/main/generated/data/c/tags/block/storage_blocks/gold.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:gold_block", - { - "id": "#forge:storage_blocks/gold", - "required": false - } + "minecraft:gold_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/storage_blocks/iron.json b/src/main/generated/data/c/tags/block/storage_blocks/iron.json index f0e9fcca1f..01fb2965f2 100644 --- a/src/main/generated/data/c/tags/block/storage_blocks/iron.json +++ b/src/main/generated/data/c/tags/block/storage_blocks/iron.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:iron_block", - { - "id": "#forge:storage_blocks/iron", - "required": false - } + "minecraft:iron_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/storage_blocks/lapis.json b/src/main/generated/data/c/tags/block/storage_blocks/lapis.json index b5f41d8d4e..f4ca82bbd4 100644 --- a/src/main/generated/data/c/tags/block/storage_blocks/lapis.json +++ b/src/main/generated/data/c/tags/block/storage_blocks/lapis.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:lapis_block", - { - "id": "#forge:storage_blocks/lapis", - "required": false - } + "minecraft:lapis_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/storage_blocks/netherite.json b/src/main/generated/data/c/tags/block/storage_blocks/netherite.json index a3dfe0d53c..83433d44eb 100644 --- a/src/main/generated/data/c/tags/block/storage_blocks/netherite.json +++ b/src/main/generated/data/c/tags/block/storage_blocks/netherite.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:netherite_block", - { - "id": "#forge:storage_blocks/netherite", - "required": false - } + "minecraft:netherite_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/storage_blocks/raw_copper.json b/src/main/generated/data/c/tags/block/storage_blocks/raw_copper.json index 8f12fb63a7..1a21e230ef 100644 --- a/src/main/generated/data/c/tags/block/storage_blocks/raw_copper.json +++ b/src/main/generated/data/c/tags/block/storage_blocks/raw_copper.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:raw_copper_block", - { - "id": "#forge:storage_blocks/raw_copper", - "required": false - } + "minecraft:raw_copper_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/storage_blocks/raw_gold.json b/src/main/generated/data/c/tags/block/storage_blocks/raw_gold.json index dcee1e225b..80781ce667 100644 --- a/src/main/generated/data/c/tags/block/storage_blocks/raw_gold.json +++ b/src/main/generated/data/c/tags/block/storage_blocks/raw_gold.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:raw_gold_block", - { - "id": "#forge:storage_blocks/raw_gold", - "required": false - } + "minecraft:raw_gold_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/storage_blocks/raw_iron.json b/src/main/generated/data/c/tags/block/storage_blocks/raw_iron.json index 3f0ecf27ad..13ed9fc651 100644 --- a/src/main/generated/data/c/tags/block/storage_blocks/raw_iron.json +++ b/src/main/generated/data/c/tags/block/storage_blocks/raw_iron.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:raw_iron_block", - { - "id": "#forge:storage_blocks/raw_iron", - "required": false - } + "minecraft:raw_iron_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/storage_blocks/redstone.json b/src/main/generated/data/c/tags/block/storage_blocks/redstone.json index 49fa7a5a26..f5fd89c541 100644 --- a/src/main/generated/data/c/tags/block/storage_blocks/redstone.json +++ b/src/main/generated/data/c/tags/block/storage_blocks/redstone.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:redstone_block", - { - "id": "#forge:storage_blocks/redstone", - "required": false - } + "minecraft:redstone_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/storage_blocks/resin.json b/src/main/generated/data/c/tags/block/storage_blocks/resin.json new file mode 100644 index 0000000000..7b95c08f1f --- /dev/null +++ b/src/main/generated/data/c/tags/block/storage_blocks/resin.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:resin_block" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/stripped_logs.json b/src/main/generated/data/c/tags/block/stripped_logs.json index ae69c996ad..95f74cbc5e 100644 --- a/src/main/generated/data/c/tags/block/stripped_logs.json +++ b/src/main/generated/data/c/tags/block/stripped_logs.json @@ -4,10 +4,13 @@ "minecraft:stripped_bamboo_block", "minecraft:stripped_birch_log", "minecraft:stripped_cherry_log", + "minecraft:stripped_crimson_stem", "minecraft:stripped_dark_oak_log", "minecraft:stripped_jungle_log", "minecraft:stripped_mangrove_log", "minecraft:stripped_oak_log", - "minecraft:stripped_spruce_log" + "minecraft:stripped_pale_oak_log", + "minecraft:stripped_spruce_log", + "minecraft:stripped_warped_stem" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/block/stripped_woods.json b/src/main/generated/data/c/tags/block/stripped_woods.json index 197542891d..0336fc751d 100644 --- a/src/main/generated/data/c/tags/block/stripped_woods.json +++ b/src/main/generated/data/c/tags/block/stripped_woods.json @@ -3,10 +3,13 @@ "minecraft:stripped_acacia_wood", "minecraft:stripped_birch_wood", "minecraft:stripped_cherry_wood", + "minecraft:stripped_crimson_hyphae", "minecraft:stripped_dark_oak_wood", "minecraft:stripped_jungle_wood", "minecraft:stripped_mangrove_wood", "minecraft:stripped_oak_wood", - "minecraft:stripped_spruce_wood" + "minecraft:stripped_pale_oak_wood", + "minecraft:stripped_spruce_wood", + "minecraft:stripped_warped_hyphae" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/entity_type/boats.json b/src/main/generated/data/c/tags/entity_type/boats.json index 1e97228009..728a29826c 100644 --- a/src/main/generated/data/c/tags/entity_type/boats.json +++ b/src/main/generated/data/c/tags/entity_type/boats.json @@ -2,6 +2,8 @@ "values": [ "minecraft:acacia_boat", "minecraft:acacia_chest_boat", + "minecraft:bamboo_chest_raft", + "minecraft:bamboo_raft", "minecraft:birch_boat", "minecraft:birch_chest_boat", "minecraft:cherry_boat", diff --git a/src/main/generated/data/c/tags/entity_type/bosses.json b/src/main/generated/data/c/tags/entity_type/bosses.json index 5b52cfe527..4be4cce831 100644 --- a/src/main/generated/data/c/tags/entity_type/bosses.json +++ b/src/main/generated/data/c/tags/entity_type/bosses.json @@ -1,10 +1,6 @@ { "values": [ "minecraft:ender_dragon", - "minecraft:wither", - { - "id": "#forge:bosses", - "required": false - } + "minecraft:wither" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/entity_type/item_frames.json b/src/main/generated/data/c/tags/entity_type/item_frames.json new file mode 100644 index 0000000000..245eede509 --- /dev/null +++ b/src/main/generated/data/c/tags/entity_type/item_frames.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:item_frame", + "minecraft:glow_item_frame" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/fluid/beetroot_soup.json b/src/main/generated/data/c/tags/fluid/beetroot_soup.json similarity index 100% rename from src/main/generated/data/forge/tags/fluid/beetroot_soup.json rename to src/main/generated/data/c/tags/fluid/beetroot_soup.json diff --git a/src/main/generated/data/forge/tags/fluid/gaseous.json b/src/main/generated/data/c/tags/fluid/experience.json similarity index 100% rename from src/main/generated/data/forge/tags/fluid/gaseous.json rename to src/main/generated/data/c/tags/fluid/experience.json diff --git a/src/main/generated/data/forge/tags/fluid/mushroom_stew.json b/src/main/generated/data/c/tags/fluid/gaseous.json similarity index 100% rename from src/main/generated/data/forge/tags/fluid/mushroom_stew.json rename to src/main/generated/data/c/tags/fluid/gaseous.json diff --git a/src/main/generated/data/forge/tags/fluid/potion.json b/src/main/generated/data/c/tags/fluid/mushroom_stew.json similarity index 100% rename from src/main/generated/data/forge/tags/fluid/potion.json rename to src/main/generated/data/c/tags/fluid/mushroom_stew.json diff --git a/src/main/generated/data/forge/tags/fluid/rabbit_stew.json b/src/main/generated/data/c/tags/fluid/potion.json similarity index 100% rename from src/main/generated/data/forge/tags/fluid/rabbit_stew.json rename to src/main/generated/data/c/tags/fluid/potion.json diff --git a/src/main/generated/data/forge/tags/fluid/suspicious_stew.json b/src/main/generated/data/c/tags/fluid/rabbit_stew.json similarity index 100% rename from src/main/generated/data/forge/tags/fluid/suspicious_stew.json rename to src/main/generated/data/c/tags/fluid/rabbit_stew.json diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_cold/nether.json b/src/main/generated/data/c/tags/fluid/suspicious_stew.json similarity index 100% rename from src/main/generated/data/forge/tags/worldgen/biome/is_cold/nether.json rename to src/main/generated/data/c/tags/fluid/suspicious_stew.json diff --git a/src/main/generated/data/c/tags/item/armors.json b/src/main/generated/data/c/tags/item/armors.json index a1f3ac1ce1..34e6862f93 100644 --- a/src/main/generated/data/c/tags/item/armors.json +++ b/src/main/generated/data/c/tags/item/armors.json @@ -4,9 +4,9 @@ "#minecraft:chest_armor", "#minecraft:leg_armor", "#minecraft:foot_armor", - { - "id": "#forge:armors", - "required": false - } + "#c:armors/horse", + "#c:armors/nautilus", + "#c:armors/wolf", + "#c:armors/humanoid" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/armors/horse.json b/src/main/generated/data/c/tags/item/armors/horse.json new file mode 100644 index 0000000000..7f6b8ff97e --- /dev/null +++ b/src/main/generated/data/c/tags/item/armors/horse.json @@ -0,0 +1,10 @@ +{ + "values": [ + "minecraft:copper_horse_armor", + "minecraft:diamond_horse_armor", + "minecraft:golden_horse_armor", + "minecraft:iron_horse_armor", + "minecraft:leather_horse_armor", + "minecraft:netherite_horse_armor" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/armors/humanoid.json b/src/main/generated/data/c/tags/item/armors/humanoid.json new file mode 100644 index 0000000000..5eb7c77a36 --- /dev/null +++ b/src/main/generated/data/c/tags/item/armors/humanoid.json @@ -0,0 +1,33 @@ +{ + "values": [ + "minecraft:chainmail_boots", + "minecraft:chainmail_chestplate", + "minecraft:chainmail_helmet", + "minecraft:chainmail_leggings", + "minecraft:copper_boots", + "minecraft:copper_chestplate", + "minecraft:copper_helmet", + "minecraft:copper_leggings", + "minecraft:diamond_boots", + "minecraft:diamond_chestplate", + "minecraft:diamond_helmet", + "minecraft:diamond_leggings", + "minecraft:golden_boots", + "minecraft:golden_chestplate", + "minecraft:golden_helmet", + "minecraft:golden_leggings", + "minecraft:iron_boots", + "minecraft:iron_chestplate", + "minecraft:iron_helmet", + "minecraft:iron_leggings", + "minecraft:leather_boots", + "minecraft:leather_chestplate", + "minecraft:leather_helmet", + "minecraft:leather_leggings", + "minecraft:netherite_boots", + "minecraft:netherite_chestplate", + "minecraft:netherite_helmet", + "minecraft:netherite_leggings", + "minecraft:turtle_helmet" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/armors/nautilus.json b/src/main/generated/data/c/tags/item/armors/nautilus.json new file mode 100644 index 0000000000..6b3bfa1f26 --- /dev/null +++ b/src/main/generated/data/c/tags/item/armors/nautilus.json @@ -0,0 +1,9 @@ +{ + "values": [ + "minecraft:copper_nautilus_armor", + "minecraft:diamond_nautilus_armor", + "minecraft:golden_nautilus_armor", + "minecraft:iron_nautilus_armor", + "minecraft:netherite_nautilus_armor" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/armors/wolf.json b/src/main/generated/data/c/tags/item/armors/wolf.json new file mode 100644 index 0000000000..1aed8bde94 --- /dev/null +++ b/src/main/generated/data/c/tags/item/armors/wolf.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:wolf_armor" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/barrels.json b/src/main/generated/data/c/tags/item/barrels.json index 94bded15d8..5e84e807f6 100644 --- a/src/main/generated/data/c/tags/item/barrels.json +++ b/src/main/generated/data/c/tags/item/barrels.json @@ -1,9 +1,5 @@ { "values": [ - "#c:barrels/wooden", - { - "id": "#forge:barrels", - "required": false - } + "#c:barrels/wooden" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/barrels/wooden.json b/src/main/generated/data/c/tags/item/barrels/wooden.json index fedbc8ac53..b07daae1c0 100644 --- a/src/main/generated/data/c/tags/item/barrels/wooden.json +++ b/src/main/generated/data/c/tags/item/barrels/wooden.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:barrel", - { - "id": "#forge:barrels/wooden", - "required": false - } + "minecraft:barrel" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/bones.json b/src/main/generated/data/c/tags/item/bones.json similarity index 100% rename from src/main/generated/data/forge/tags/item/bones.json rename to src/main/generated/data/c/tags/item/bones.json diff --git a/src/main/generated/data/c/tags/item/bookshelves.json b/src/main/generated/data/c/tags/item/bookshelves.json index 68f756dba9..c09b2185bd 100644 --- a/src/main/generated/data/c/tags/item/bookshelves.json +++ b/src/main/generated/data/c/tags/item/bookshelves.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:bookshelf", - { - "id": "#forge:bookshelves", - "required": false - } + "minecraft:bookshelf" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/bricks.json b/src/main/generated/data/c/tags/item/bricks.json index ba6a10fc02..49e3c14ed5 100644 --- a/src/main/generated/data/c/tags/item/bricks.json +++ b/src/main/generated/data/c/tags/item/bricks.json @@ -1,6 +1,7 @@ { "values": [ "#c:bricks/normal", - "#c:bricks/nether" + "#c:bricks/nether", + "#c:bricks/resin" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/bricks/resin.json b/src/main/generated/data/c/tags/item/bricks/resin.json new file mode 100644 index 0000000000..56a6448fb1 --- /dev/null +++ b/src/main/generated/data/c/tags/item/bricks/resin.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:resin_brick" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/chests.json b/src/main/generated/data/c/tags/item/chests.json index b5adbfcc12..16ea314685 100644 --- a/src/main/generated/data/c/tags/item/chests.json +++ b/src/main/generated/data/c/tags/item/chests.json @@ -1,11 +1,8 @@ { "values": [ - "#forge:chests/ender", - "#forge:chests/trapped", - "#c:chests/wooden", - { - "id": "#forge:chests", - "required": false - } + "minecraft:copper_chest", + "#c:chests/ender", + "#c:chests/trapped", + "#c:chests/wooden" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/chests/ender.json b/src/main/generated/data/c/tags/item/chests/ender.json similarity index 100% rename from src/main/generated/data/forge/tags/item/chests/ender.json rename to src/main/generated/data/c/tags/item/chests/ender.json diff --git a/src/main/generated/data/forge/tags/item/chests/trapped.json b/src/main/generated/data/c/tags/item/chests/trapped.json similarity index 100% rename from src/main/generated/data/forge/tags/item/chests/trapped.json rename to src/main/generated/data/c/tags/item/chests/trapped.json diff --git a/src/main/generated/data/c/tags/item/chests/wooden.json b/src/main/generated/data/c/tags/item/chests/wooden.json index 0659e860e6..86533f935b 100644 --- a/src/main/generated/data/c/tags/item/chests/wooden.json +++ b/src/main/generated/data/c/tags/item/chests/wooden.json @@ -1,10 +1,6 @@ { "values": [ "minecraft:chest", - "minecraft:trapped_chest", - { - "id": "#forge:chests/wooden", - "required": false - } + "minecraft:trapped_chest" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/clumps.json b/src/main/generated/data/c/tags/item/clumps.json new file mode 100644 index 0000000000..b5b9c68a30 --- /dev/null +++ b/src/main/generated/data/c/tags/item/clumps.json @@ -0,0 +1,5 @@ +{ + "values": [ + "#c:clumps/resin" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/clumps/resin.json b/src/main/generated/data/c/tags/item/clumps/resin.json new file mode 100644 index 0000000000..a3986bda86 --- /dev/null +++ b/src/main/generated/data/c/tags/item/clumps/resin.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:resin_clump" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/cobblestones.json b/src/main/generated/data/c/tags/item/cobblestones.json index 3e7ff322a0..6019d0d40e 100644 --- a/src/main/generated/data/c/tags/item/cobblestones.json +++ b/src/main/generated/data/c/tags/item/cobblestones.json @@ -1,12 +1,8 @@ { "values": [ - "#forge:cobblestone/normal", - "#forge:cobblestone/infested", - "#forge:cobblestone/mossy", - "#forge:cobblestone/deepslate", - { - "id": "#forge:cobblestone", - "required": false - } + "#c:cobblestones/normal", + "#c:cobblestones/infested", + "#c:cobblestones/mossy", + "#c:cobblestones/deepslate" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/cobblestone/deepslate.json b/src/main/generated/data/c/tags/item/cobblestones/deepslate.json similarity index 100% rename from src/main/generated/data/forge/tags/item/cobblestone/deepslate.json rename to src/main/generated/data/c/tags/item/cobblestones/deepslate.json diff --git a/src/main/generated/data/forge/tags/item/cobblestone/infested.json b/src/main/generated/data/c/tags/item/cobblestones/infested.json similarity index 100% rename from src/main/generated/data/forge/tags/item/cobblestone/infested.json rename to src/main/generated/data/c/tags/item/cobblestones/infested.json diff --git a/src/main/generated/data/forge/tags/item/cobblestone/mossy.json b/src/main/generated/data/c/tags/item/cobblestones/mossy.json similarity index 100% rename from src/main/generated/data/forge/tags/item/cobblestone/mossy.json rename to src/main/generated/data/c/tags/item/cobblestones/mossy.json diff --git a/src/main/generated/data/forge/tags/item/cobblestone/normal.json b/src/main/generated/data/c/tags/item/cobblestones/normal.json similarity index 100% rename from src/main/generated/data/forge/tags/item/cobblestone/normal.json rename to src/main/generated/data/c/tags/item/cobblestones/normal.json diff --git a/src/main/generated/data/c/tags/item/crops.json b/src/main/generated/data/c/tags/item/crops.json index 7a0bad9cab..452317ff33 100644 --- a/src/main/generated/data/c/tags/item/crops.json +++ b/src/main/generated/data/c/tags/item/crops.json @@ -9,10 +9,6 @@ "#c:crops/potato", "#c:crops/pumpkin", "#c:crops/sugar_cane", - "#c:crops/wheat", - { - "id": "#forge:crops", - "required": false - } + "#c:crops/wheat" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/crops/beetroot.json b/src/main/generated/data/c/tags/item/crops/beetroot.json index cc56242351..b28b723c4b 100644 --- a/src/main/generated/data/c/tags/item/crops/beetroot.json +++ b/src/main/generated/data/c/tags/item/crops/beetroot.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:beetroot", - { - "id": "#forge:crops/beetroot", - "required": false - } + "minecraft:beetroot" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/crops/carrot.json b/src/main/generated/data/c/tags/item/crops/carrot.json index 9a637ed3cc..f9630d1347 100644 --- a/src/main/generated/data/c/tags/item/crops/carrot.json +++ b/src/main/generated/data/c/tags/item/crops/carrot.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:carrot", - { - "id": "#forge:crops/carrot", - "required": false - } + "minecraft:carrot" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/crops/nether_wart.json b/src/main/generated/data/c/tags/item/crops/nether_wart.json index 9e8eb9e036..5960d80cb9 100644 --- a/src/main/generated/data/c/tags/item/crops/nether_wart.json +++ b/src/main/generated/data/c/tags/item/crops/nether_wart.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:nether_wart", - { - "id": "#forge:crops/nether_wart", - "required": false - } + "minecraft:nether_wart" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/crops/potato.json b/src/main/generated/data/c/tags/item/crops/potato.json index fca8ec880c..47fc151cd1 100644 --- a/src/main/generated/data/c/tags/item/crops/potato.json +++ b/src/main/generated/data/c/tags/item/crops/potato.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:potato", - { - "id": "#forge:crops/potato", - "required": false - } + "minecraft:potato" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/crops/wheat.json b/src/main/generated/data/c/tags/item/crops/wheat.json index 05dac35cc1..498cb445f6 100644 --- a/src/main/generated/data/c/tags/item/crops/wheat.json +++ b/src/main/generated/data/c/tags/item/crops/wheat.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:wheat", - { - "id": "#forge:crops/wheat", - "required": false - } + "minecraft:wheat" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/drinks.json b/src/main/generated/data/c/tags/item/drinks.json new file mode 100644 index 0000000000..47b197fc27 --- /dev/null +++ b/src/main/generated/data/c/tags/item/drinks.json @@ -0,0 +1,11 @@ +{ + "values": [ + "#c:drinks/honey", + "#c:drinks/juice", + "#c:drinks/magic", + "#c:drinks/milk", + "#c:drinks/ominous", + "#c:drinks/water", + "#c:drinks/watery" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/drinks/honey.json b/src/main/generated/data/c/tags/item/drinks/honey.json new file mode 100644 index 0000000000..6049f1a5d4 --- /dev/null +++ b/src/main/generated/data/c/tags/item/drinks/honey.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:honey_bottle" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_dead.json b/src/main/generated/data/c/tags/item/drinks/juice.json similarity index 100% rename from src/main/generated/data/forge/tags/worldgen/biome/is_dead.json rename to src/main/generated/data/c/tags/item/drinks/juice.json diff --git a/src/main/generated/data/c/tags/item/drinks/magic.json b/src/main/generated/data/c/tags/item/drinks/magic.json new file mode 100644 index 0000000000..01667a1a94 --- /dev/null +++ b/src/main/generated/data/c/tags/item/drinks/magic.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:ominous_bottle", + "minecraft:potion" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/drinks/milk.json b/src/main/generated/data/c/tags/item/drinks/milk.json new file mode 100644 index 0000000000..899451cb24 --- /dev/null +++ b/src/main/generated/data/c/tags/item/drinks/milk.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:milk_bucket" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/drinks/ominous.json b/src/main/generated/data/c/tags/item/drinks/ominous.json new file mode 100644 index 0000000000..0f2f793e75 --- /dev/null +++ b/src/main/generated/data/c/tags/item/drinks/ominous.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:ominous_bottle" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_dense/end.json b/src/main/generated/data/c/tags/item/drinks/water.json similarity index 100% rename from src/main/generated/data/forge/tags/worldgen/biome/is_dense/end.json rename to src/main/generated/data/c/tags/item/drinks/water.json diff --git a/src/main/generated/data/c/tags/item/drinks/watery.json b/src/main/generated/data/c/tags/item/drinks/watery.json new file mode 100644 index 0000000000..c7307d8407 --- /dev/null +++ b/src/main/generated/data/c/tags/item/drinks/watery.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:potion" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/dusts/glowstone.json b/src/main/generated/data/c/tags/item/dusts/glowstone.json index b7bd60b026..668258c523 100644 --- a/src/main/generated/data/c/tags/item/dusts/glowstone.json +++ b/src/main/generated/data/c/tags/item/dusts/glowstone.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:glowstone_dust", - { - "id": "#forge:dusts/glowstone", - "required": false - } + "minecraft:glowstone_dust" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/dusts/redstone.json b/src/main/generated/data/c/tags/item/dusts/redstone.json index ec7a3ceb0a..a096239ec1 100644 --- a/src/main/generated/data/c/tags/item/dusts/redstone.json +++ b/src/main/generated/data/c/tags/item/dusts/redstone.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:redstone", - { - "id": "#forge:dusts/redstone", - "required": false - } + "minecraft:redstone" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/eggs.json b/src/main/generated/data/c/tags/item/eggs.json new file mode 100644 index 0000000000..828fbcc152 --- /dev/null +++ b/src/main/generated/data/c/tags/item/eggs.json @@ -0,0 +1,7 @@ +{ + "values": [ + "minecraft:egg", + "minecraft:blue_egg", + "minecraft:brown_egg" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/end_stones.json b/src/main/generated/data/c/tags/item/end_stones.json similarity index 100% rename from src/main/generated/data/forge/tags/item/end_stones.json rename to src/main/generated/data/c/tags/item/end_stones.json diff --git a/src/main/generated/data/c/tags/item/ender_pearls.json b/src/main/generated/data/c/tags/item/ender_pearls.json index bd8b93cf85..135cd1d776 100644 --- a/src/main/generated/data/c/tags/item/ender_pearls.json +++ b/src/main/generated/data/c/tags/item/ender_pearls.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:ender_pearl", - { - "id": "#forge:ender_pearls", - "required": false - } + "minecraft:ender_pearl" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/feathers.json b/src/main/generated/data/c/tags/item/feathers.json new file mode 100644 index 0000000000..8086200700 --- /dev/null +++ b/src/main/generated/data/c/tags/item/feathers.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:feather" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/fence_gates.json b/src/main/generated/data/c/tags/item/fence_gates.json new file mode 100644 index 0000000000..42dca6b914 --- /dev/null +++ b/src/main/generated/data/c/tags/item/fence_gates.json @@ -0,0 +1,5 @@ +{ + "values": [ + "#c:fence_gates/wooden" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/fence_gates/wooden.json b/src/main/generated/data/c/tags/item/fence_gates/wooden.json similarity index 100% rename from src/main/generated/data/forge/tags/item/fence_gates/wooden.json rename to src/main/generated/data/c/tags/item/fence_gates/wooden.json diff --git a/src/main/generated/data/c/tags/item/fences.json b/src/main/generated/data/c/tags/item/fences.json new file mode 100644 index 0000000000..3185a1f46b --- /dev/null +++ b/src/main/generated/data/c/tags/item/fences.json @@ -0,0 +1,6 @@ +{ + "values": [ + "#c:fences/nether_brick", + "#c:fences/wooden" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/fences/nether_brick.json b/src/main/generated/data/c/tags/item/fences/nether_brick.json similarity index 100% rename from src/main/generated/data/forge/tags/item/fences/nether_brick.json rename to src/main/generated/data/c/tags/item/fences/nether_brick.json diff --git a/src/main/generated/data/forge/tags/item/fences/wooden.json b/src/main/generated/data/c/tags/item/fences/wooden.json similarity index 100% rename from src/main/generated/data/forge/tags/item/fences/wooden.json rename to src/main/generated/data/c/tags/item/fences/wooden.json diff --git a/src/main/generated/data/c/tags/item/flowers/small.json b/src/main/generated/data/c/tags/item/flowers/small.json index bdd6b47dd1..f2252429ca 100644 --- a/src/main/generated/data/c/tags/item/flowers/small.json +++ b/src/main/generated/data/c/tags/item/flowers/small.json @@ -15,10 +15,6 @@ "minecraft:wither_rose", "minecraft:torchflower", "minecraft:open_eyeblossom", - "minecraft:closed_eyeblossom", - { - "id": "#minecraft:small_flowers", - "required": false - } + "minecraft:closed_eyeblossom" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/flowers/tall.json b/src/main/generated/data/c/tags/item/flowers/tall.json index 156bf722ac..144eb89e0a 100644 --- a/src/main/generated/data/c/tags/item/flowers/tall.json +++ b/src/main/generated/data/c/tags/item/flowers/tall.json @@ -4,10 +4,6 @@ "minecraft:lilac", "minecraft:peony", "minecraft:rose_bush", - "minecraft:pitcher_plant", - { - "id": "#minecraft:tall_flowers", - "required": false - } + "minecraft:pitcher_plant" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/foods/pie.json b/src/main/generated/data/c/tags/item/foods/pie.json index 35482dd5e2..7589c5f241 100644 --- a/src/main/generated/data/c/tags/item/foods/pie.json +++ b/src/main/generated/data/c/tags/item/foods/pie.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:pumpkin_pie", - { - "id": "#forge:foods/pie", - "required": false - } + "minecraft:pumpkin_pie" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/gems.json b/src/main/generated/data/c/tags/item/gems.json index 6f340c553c..fb57888221 100644 --- a/src/main/generated/data/c/tags/item/gems.json +++ b/src/main/generated/data/c/tags/item/gems.json @@ -5,10 +5,6 @@ "#c:gems/emerald", "#c:gems/lapis", "#c:gems/prismarine", - "#c:gems/quartz", - { - "id": "#forge:gems", - "required": false - } + "#c:gems/quartz" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/gems/amethyst.json b/src/main/generated/data/c/tags/item/gems/amethyst.json index d222353687..742ef896d5 100644 --- a/src/main/generated/data/c/tags/item/gems/amethyst.json +++ b/src/main/generated/data/c/tags/item/gems/amethyst.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:amethyst_shard", - { - "id": "#forge:gems/amethyst", - "required": false - } + "minecraft:amethyst_shard" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/gems/diamond.json b/src/main/generated/data/c/tags/item/gems/diamond.json index 1ca2673f21..f44f30dd55 100644 --- a/src/main/generated/data/c/tags/item/gems/diamond.json +++ b/src/main/generated/data/c/tags/item/gems/diamond.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:diamond", - { - "id": "#forge:gems/diamond", - "required": false - } + "minecraft:diamond" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/gems/emerald.json b/src/main/generated/data/c/tags/item/gems/emerald.json index de1e12af1b..07a0982118 100644 --- a/src/main/generated/data/c/tags/item/gems/emerald.json +++ b/src/main/generated/data/c/tags/item/gems/emerald.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:emerald", - { - "id": "#forge:gems/emerald", - "required": false - } + "minecraft:emerald" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/gems/lapis.json b/src/main/generated/data/c/tags/item/gems/lapis.json index 0e92612548..614441df46 100644 --- a/src/main/generated/data/c/tags/item/gems/lapis.json +++ b/src/main/generated/data/c/tags/item/gems/lapis.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:lapis_lazuli", - { - "id": "#forge:gems/lapis", - "required": false - } + "minecraft:lapis_lazuli" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/gems/prismarine.json b/src/main/generated/data/c/tags/item/gems/prismarine.json index df7aa66312..150e7ff711 100644 --- a/src/main/generated/data/c/tags/item/gems/prismarine.json +++ b/src/main/generated/data/c/tags/item/gems/prismarine.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:prismarine_crystals", - { - "id": "#forge:gems/prismarine", - "required": false - } + "minecraft:prismarine_crystals" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/gems/quartz.json b/src/main/generated/data/c/tags/item/gems/quartz.json index d0604485bd..aad2eef95b 100644 --- a/src/main/generated/data/c/tags/item/gems/quartz.json +++ b/src/main/generated/data/c/tags/item/gems/quartz.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:quartz", - { - "id": "#forge:gems/quartz", - "required": false - } + "minecraft:quartz" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/glass_blocks.json b/src/main/generated/data/c/tags/item/glass_blocks.json index 55b243f654..61618a7498 100644 --- a/src/main/generated/data/c/tags/item/glass_blocks.json +++ b/src/main/generated/data/c/tags/item/glass_blocks.json @@ -2,10 +2,6 @@ "values": [ "#c:glass_blocks/colorless", "#c:glass_blocks/cheap", - "#c:glass_blocks/tinted", - { - "id": "#forge:glass", - "required": false - } + "#c:glass_blocks/tinted" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/glass_blocks/cheap.json b/src/main/generated/data/c/tags/item/glass_blocks/cheap.json index 067bd8f78d..3465b3884b 100644 --- a/src/main/generated/data/c/tags/item/glass_blocks/cheap.json +++ b/src/main/generated/data/c/tags/item/glass_blocks/cheap.json @@ -16,10 +16,6 @@ "minecraft:brown_stained_glass", "minecraft:green_stained_glass", "minecraft:red_stained_glass", - "minecraft:black_stained_glass", - { - "id": "#forge:glass/silica", - "required": false - } + "minecraft:black_stained_glass" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/glass_blocks/colorless.json b/src/main/generated/data/c/tags/item/glass_blocks/colorless.json index e46e8e25ba..ac8b5e5086 100644 --- a/src/main/generated/data/c/tags/item/glass_blocks/colorless.json +++ b/src/main/generated/data/c/tags/item/glass_blocks/colorless.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:glass", - { - "id": "#forge:glass/colorless", - "required": false - } + "minecraft:glass" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/glass_blocks/tinted.json b/src/main/generated/data/c/tags/item/glass_blocks/tinted.json index e7fe6f40f0..4075a1556b 100644 --- a/src/main/generated/data/c/tags/item/glass_blocks/tinted.json +++ b/src/main/generated/data/c/tags/item/glass_blocks/tinted.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:tinted_glass", - { - "id": "#forge:glass/tinted", - "required": false - } + "minecraft:tinted_glass" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/glass_panes.json b/src/main/generated/data/c/tags/item/glass_panes.json index 869c6fe993..c4bdf8ea3f 100644 --- a/src/main/generated/data/c/tags/item/glass_panes.json +++ b/src/main/generated/data/c/tags/item/glass_panes.json @@ -16,10 +16,6 @@ "minecraft:brown_stained_glass_pane", "minecraft:green_stained_glass_pane", "minecraft:red_stained_glass_pane", - "minecraft:black_stained_glass_pane", - { - "id": "#forge:glass_panes", - "required": false - } + "minecraft:black_stained_glass_pane" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/glass_panes/colorless.json b/src/main/generated/data/c/tags/item/glass_panes/colorless.json index 5390c3bbd6..eb5756f964 100644 --- a/src/main/generated/data/c/tags/item/glass_panes/colorless.json +++ b/src/main/generated/data/c/tags/item/glass_panes/colorless.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:glass_pane", - { - "id": "#forge:glass_panes/colorless", - "required": false - } + "minecraft:glass_pane" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/gravel.json b/src/main/generated/data/c/tags/item/gravels.json similarity index 100% rename from src/main/generated/data/forge/tags/item/gravel.json rename to src/main/generated/data/c/tags/item/gravels.json diff --git a/src/main/generated/data/forge/tags/item/gunpowder.json b/src/main/generated/data/c/tags/item/gunpowders.json similarity index 63% rename from src/main/generated/data/forge/tags/item/gunpowder.json rename to src/main/generated/data/c/tags/item/gunpowders.json index 7120fe3fba..d5835ce7f9 100644 --- a/src/main/generated/data/forge/tags/item/gunpowder.json +++ b/src/main/generated/data/c/tags/item/gunpowders.json @@ -1,6 +1,5 @@ { "values": [ - "minecraft:gunpowder", "minecraft:gunpowder" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/ingots/copper.json b/src/main/generated/data/c/tags/item/ingots/copper.json index 2043a331d0..1cc1f065c5 100644 --- a/src/main/generated/data/c/tags/item/ingots/copper.json +++ b/src/main/generated/data/c/tags/item/ingots/copper.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:copper_ingot", - { - "id": "#forge:ingots/copper", - "required": false - } + "minecraft:copper_ingot" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/ingots/gold.json b/src/main/generated/data/c/tags/item/ingots/gold.json index 70299fe304..07e9f66a30 100644 --- a/src/main/generated/data/c/tags/item/ingots/gold.json +++ b/src/main/generated/data/c/tags/item/ingots/gold.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:gold_ingot", - { - "id": "#forge:ingots/gold", - "required": false - } + "minecraft:gold_ingot" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/ingots/iron.json b/src/main/generated/data/c/tags/item/ingots/iron.json index 7fa35c33e3..c656021bdb 100644 --- a/src/main/generated/data/c/tags/item/ingots/iron.json +++ b/src/main/generated/data/c/tags/item/ingots/iron.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:iron_ingot", - { - "id": "#forge:ingots/iron", - "required": false - } + "minecraft:iron_ingot" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/ingots/netherite.json b/src/main/generated/data/c/tags/item/ingots/netherite.json index 61b250abae..bd6929df75 100644 --- a/src/main/generated/data/c/tags/item/ingots/netherite.json +++ b/src/main/generated/data/c/tags/item/ingots/netherite.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:netherite_ingot", - { - "id": "#forge:ingots/netherite", - "required": false - } + "minecraft:netherite_ingot" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/leathers.json b/src/main/generated/data/c/tags/item/leathers.json index 71f8c03e09..71b797d35b 100644 --- a/src/main/generated/data/c/tags/item/leathers.json +++ b/src/main/generated/data/c/tags/item/leathers.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:leather", - { - "id": "#forge:leather", - "required": false - } + "minecraft:leather" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/mushrooms.json b/src/main/generated/data/c/tags/item/mushrooms.json new file mode 100644 index 0000000000..471cd77f07 --- /dev/null +++ b/src/main/generated/data/c/tags/item/mushrooms.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:brown_mushroom", + "minecraft:red_mushroom" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/music_discs.json b/src/main/generated/data/c/tags/item/music_discs.json index 4cfc035e4f..b5626ae05b 100644 --- a/src/main/generated/data/c/tags/item/music_discs.json +++ b/src/main/generated/data/c/tags/item/music_discs.json @@ -18,6 +18,8 @@ "minecraft:music_disc_relic", "minecraft:music_disc_creator", "minecraft:music_disc_creator_music_box", - "minecraft:music_disc_precipice" + "minecraft:music_disc_precipice", + "minecraft:music_disc_lava_chicken", + "minecraft:music_disc_tears" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/natural_logs.json b/src/main/generated/data/c/tags/item/natural_logs.json new file mode 100644 index 0000000000..e03c0c2a6a --- /dev/null +++ b/src/main/generated/data/c/tags/item/natural_logs.json @@ -0,0 +1,6 @@ +{ + "values": [ + "#c:natural_logs/nether", + "#c:natural_logs/overworld" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/natural_logs/nether.json b/src/main/generated/data/c/tags/item/natural_logs/nether.json new file mode 100644 index 0000000000..192679af78 --- /dev/null +++ b/src/main/generated/data/c/tags/item/natural_logs/nether.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:crimson_stem", + "minecraft:warped_stem" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/natural_logs/overworld.json b/src/main/generated/data/c/tags/item/natural_logs/overworld.json new file mode 100644 index 0000000000..c351b11bb3 --- /dev/null +++ b/src/main/generated/data/c/tags/item/natural_logs/overworld.json @@ -0,0 +1,13 @@ +{ + "values": [ + "minecraft:acacia_log", + "minecraft:birch_log", + "minecraft:cherry_log", + "minecraft:dark_oak_log", + "minecraft:jungle_log", + "minecraft:mangrove_log", + "minecraft:oak_log", + "minecraft:pale_oak_log", + "minecraft:spruce_log" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/natural_woods.json b/src/main/generated/data/c/tags/item/natural_woods.json new file mode 100644 index 0000000000..46efd3c3f6 --- /dev/null +++ b/src/main/generated/data/c/tags/item/natural_woods.json @@ -0,0 +1,15 @@ +{ + "values": [ + "minecraft:acacia_wood", + "minecraft:birch_wood", + "minecraft:cherry_wood", + "minecraft:crimson_hyphae", + "minecraft:dark_oak_wood", + "minecraft:jungle_wood", + "minecraft:mangrove_wood", + "minecraft:oak_wood", + "minecraft:pale_oak_wood", + "minecraft:spruce_wood", + "minecraft:warped_hyphae" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/nether_stars.json b/src/main/generated/data/c/tags/item/nether_stars.json new file mode 100644 index 0000000000..737a95d083 --- /dev/null +++ b/src/main/generated/data/c/tags/item/nether_stars.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:nether_star" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/netherrack.json b/src/main/generated/data/c/tags/item/netherracks.json similarity index 100% rename from src/main/generated/data/forge/tags/item/netherrack.json rename to src/main/generated/data/c/tags/item/netherracks.json diff --git a/src/main/generated/data/c/tags/item/nuggets.json b/src/main/generated/data/c/tags/item/nuggets.json index bc49078393..0cadd63785 100644 --- a/src/main/generated/data/c/tags/item/nuggets.json +++ b/src/main/generated/data/c/tags/item/nuggets.json @@ -2,10 +2,6 @@ "values": [ "#c:nuggets/gold", "#c:nuggets/iron", - "#c:nuggets/copper", - { - "id": "#forge:nuggets", - "required": false - } + "#c:nuggets/copper" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/nuggets/gold.json b/src/main/generated/data/c/tags/item/nuggets/gold.json index 77eb151909..4d94345957 100644 --- a/src/main/generated/data/c/tags/item/nuggets/gold.json +++ b/src/main/generated/data/c/tags/item/nuggets/gold.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:gold_nugget", - { - "id": "#forge:nuggets/gold", - "required": false - } + "minecraft:gold_nugget" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/nuggets/iron.json b/src/main/generated/data/c/tags/item/nuggets/iron.json index 0f529f154f..cbd20ac6e4 100644 --- a/src/main/generated/data/c/tags/item/nuggets/iron.json +++ b/src/main/generated/data/c/tags/item/nuggets/iron.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:iron_nugget", - { - "id": "#forge:nuggets/iron", - "required": false - } + "minecraft:iron_nugget" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/obsidians.json b/src/main/generated/data/c/tags/item/obsidians.json index 3986b73df1..5df539fb0e 100644 --- a/src/main/generated/data/c/tags/item/obsidians.json +++ b/src/main/generated/data/c/tags/item/obsidians.json @@ -1,10 +1,6 @@ { "values": [ "#c:obsidians/normal", - "#c:obsidians/crying", - { - "id": "#forge:obsidian", - "required": false - } + "#c:obsidians/crying" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/ore_bearing_ground/deepslate.json b/src/main/generated/data/c/tags/item/ore_bearing_ground/deepslate.json similarity index 100% rename from src/main/generated/data/forge/tags/item/ore_bearing_ground/deepslate.json rename to src/main/generated/data/c/tags/item/ore_bearing_ground/deepslate.json diff --git a/src/main/generated/data/forge/tags/item/ore_bearing_ground/netherrack.json b/src/main/generated/data/c/tags/item/ore_bearing_ground/netherrack.json similarity index 100% rename from src/main/generated/data/forge/tags/item/ore_bearing_ground/netherrack.json rename to src/main/generated/data/c/tags/item/ore_bearing_ground/netherrack.json diff --git a/src/main/generated/data/forge/tags/item/ore_bearing_ground/stone.json b/src/main/generated/data/c/tags/item/ore_bearing_ground/stone.json similarity index 100% rename from src/main/generated/data/forge/tags/item/ore_bearing_ground/stone.json rename to src/main/generated/data/c/tags/item/ore_bearing_ground/stone.json diff --git a/src/main/generated/data/forge/tags/item/ore_rates/dense.json b/src/main/generated/data/c/tags/item/ore_rates/dense.json similarity index 100% rename from src/main/generated/data/forge/tags/item/ore_rates/dense.json rename to src/main/generated/data/c/tags/item/ore_rates/dense.json diff --git a/src/main/generated/data/forge/tags/item/ore_rates/singular.json b/src/main/generated/data/c/tags/item/ore_rates/singular.json similarity index 100% rename from src/main/generated/data/forge/tags/item/ore_rates/singular.json rename to src/main/generated/data/c/tags/item/ore_rates/singular.json diff --git a/src/main/generated/data/forge/tags/item/ore_rates/sparse.json b/src/main/generated/data/c/tags/item/ore_rates/sparse.json similarity index 100% rename from src/main/generated/data/forge/tags/item/ore_rates/sparse.json rename to src/main/generated/data/c/tags/item/ore_rates/sparse.json diff --git a/src/main/generated/data/c/tags/item/ores.json b/src/main/generated/data/c/tags/item/ores.json index 7397864c1a..3b2293aa8d 100644 --- a/src/main/generated/data/c/tags/item/ores.json +++ b/src/main/generated/data/c/tags/item/ores.json @@ -1,18 +1,14 @@ { "values": [ - "#forge:ores/coal", - "#forge:ores/copper", - "#forge:ores/diamond", - "#forge:ores/emerald", - "#forge:ores/gold", - "#forge:ores/iron", - "#forge:ores/lapis", + "#c:ores/coal", + "#c:ores/copper", + "#c:ores/diamond", + "#c:ores/emerald", + "#c:ores/gold", + "#c:ores/iron", + "#c:ores/lapis", "#c:ores/netherite_scrap", - "#forge:ores/redstone", - "#c:ores/quartz", - { - "id": "#forge:ores", - "required": false - } + "#c:ores/redstone", + "#c:ores/quartz" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/ores/coal.json b/src/main/generated/data/c/tags/item/ores/coal.json similarity index 100% rename from src/main/generated/data/forge/tags/item/ores/coal.json rename to src/main/generated/data/c/tags/item/ores/coal.json diff --git a/src/main/generated/data/forge/tags/item/ores/copper.json b/src/main/generated/data/c/tags/item/ores/copper.json similarity index 100% rename from src/main/generated/data/forge/tags/item/ores/copper.json rename to src/main/generated/data/c/tags/item/ores/copper.json diff --git a/src/main/generated/data/forge/tags/item/ores/diamond.json b/src/main/generated/data/c/tags/item/ores/diamond.json similarity index 100% rename from src/main/generated/data/forge/tags/item/ores/diamond.json rename to src/main/generated/data/c/tags/item/ores/diamond.json diff --git a/src/main/generated/data/forge/tags/item/ores/emerald.json b/src/main/generated/data/c/tags/item/ores/emerald.json similarity index 100% rename from src/main/generated/data/forge/tags/item/ores/emerald.json rename to src/main/generated/data/c/tags/item/ores/emerald.json diff --git a/src/main/generated/data/forge/tags/item/ores/gold.json b/src/main/generated/data/c/tags/item/ores/gold.json similarity index 100% rename from src/main/generated/data/forge/tags/item/ores/gold.json rename to src/main/generated/data/c/tags/item/ores/gold.json diff --git a/src/main/generated/data/forge/tags/item/ores/iron.json b/src/main/generated/data/c/tags/item/ores/iron.json similarity index 100% rename from src/main/generated/data/forge/tags/item/ores/iron.json rename to src/main/generated/data/c/tags/item/ores/iron.json diff --git a/src/main/generated/data/forge/tags/item/ores/lapis.json b/src/main/generated/data/c/tags/item/ores/lapis.json similarity index 100% rename from src/main/generated/data/forge/tags/item/ores/lapis.json rename to src/main/generated/data/c/tags/item/ores/lapis.json diff --git a/src/main/generated/data/c/tags/item/ores/netherite_scrap.json b/src/main/generated/data/c/tags/item/ores/netherite_scrap.json index 6cc208db8e..910d1fb8e6 100644 --- a/src/main/generated/data/c/tags/item/ores/netherite_scrap.json +++ b/src/main/generated/data/c/tags/item/ores/netherite_scrap.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:ancient_debris", - { - "id": "#forge:ores/netherite_scrap", - "required": false - } + "minecraft:ancient_debris" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/ores/quartz.json b/src/main/generated/data/c/tags/item/ores/quartz.json index 5433b2ed6f..f0bc7a4657 100644 --- a/src/main/generated/data/c/tags/item/ores/quartz.json +++ b/src/main/generated/data/c/tags/item/ores/quartz.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:nether_quartz_ore", - { - "id": "#forge:ores/quartz", - "required": false - } + "minecraft:nether_quartz_ore" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/ores/redstone.json b/src/main/generated/data/c/tags/item/ores/redstone.json similarity index 100% rename from src/main/generated/data/forge/tags/item/ores/redstone.json rename to src/main/generated/data/c/tags/item/ores/redstone.json diff --git a/src/main/generated/data/forge/tags/item/ores_in_ground/deepslate.json b/src/main/generated/data/c/tags/item/ores_in_ground/deepslate.json similarity index 100% rename from src/main/generated/data/forge/tags/item/ores_in_ground/deepslate.json rename to src/main/generated/data/c/tags/item/ores_in_ground/deepslate.json diff --git a/src/main/generated/data/forge/tags/item/ores_in_ground/netherrack.json b/src/main/generated/data/c/tags/item/ores_in_ground/netherrack.json similarity index 100% rename from src/main/generated/data/forge/tags/item/ores_in_ground/netherrack.json rename to src/main/generated/data/c/tags/item/ores_in_ground/netherrack.json diff --git a/src/main/generated/data/forge/tags/item/ores_in_ground/stone.json b/src/main/generated/data/c/tags/item/ores_in_ground/stone.json similarity index 100% rename from src/main/generated/data/forge/tags/item/ores_in_ground/stone.json rename to src/main/generated/data/c/tags/item/ores_in_ground/stone.json diff --git a/src/main/generated/data/c/tags/item/potions.json b/src/main/generated/data/c/tags/item/potions.json new file mode 100644 index 0000000000..139353d5ad --- /dev/null +++ b/src/main/generated/data/c/tags/item/potions.json @@ -0,0 +1,5 @@ +{ + "values": [ + "#c:potions/bottle" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/potions/bottle.json b/src/main/generated/data/c/tags/item/potions/bottle.json new file mode 100644 index 0000000000..592e0eb9db --- /dev/null +++ b/src/main/generated/data/c/tags/item/potions/bottle.json @@ -0,0 +1,7 @@ +{ + "values": [ + "minecraft:potion", + "minecraft:splash_potion", + "minecraft:lingering_potion" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/raw_materials.json b/src/main/generated/data/c/tags/item/raw_materials.json index de258a264b..d0b9991efe 100644 --- a/src/main/generated/data/c/tags/item/raw_materials.json +++ b/src/main/generated/data/c/tags/item/raw_materials.json @@ -2,10 +2,6 @@ "values": [ "#c:raw_materials/copper", "#c:raw_materials/gold", - "#c:raw_materials/iron", - { - "id": "#forge:raw_materials", - "required": false - } + "#c:raw_materials/iron" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/raw_materials/copper.json b/src/main/generated/data/c/tags/item/raw_materials/copper.json index ce2a8c25b9..3e03ab9ca8 100644 --- a/src/main/generated/data/c/tags/item/raw_materials/copper.json +++ b/src/main/generated/data/c/tags/item/raw_materials/copper.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:raw_copper", - { - "id": "#forge:raw_materials/copper", - "required": false - } + "minecraft:raw_copper" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/raw_materials/gold.json b/src/main/generated/data/c/tags/item/raw_materials/gold.json index 555e287358..3d1252e5f9 100644 --- a/src/main/generated/data/c/tags/item/raw_materials/gold.json +++ b/src/main/generated/data/c/tags/item/raw_materials/gold.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:raw_gold", - { - "id": "#forge:raw_materials/gold", - "required": false - } + "minecraft:raw_gold" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/raw_materials/iron.json b/src/main/generated/data/c/tags/item/raw_materials/iron.json index def08c1dac..8f9af48d8e 100644 --- a/src/main/generated/data/c/tags/item/raw_materials/iron.json +++ b/src/main/generated/data/c/tags/item/raw_materials/iron.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:raw_iron", - { - "id": "#forge:raw_materials/iron", - "required": false - } + "minecraft:raw_iron" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/rods.json b/src/main/generated/data/c/tags/item/rods.json index 4bf89f59ff..84ee8864fc 100644 --- a/src/main/generated/data/c/tags/item/rods.json +++ b/src/main/generated/data/c/tags/item/rods.json @@ -2,10 +2,6 @@ "values": [ "#c:rods/wooden", "#c:rods/blaze", - "#c:rods/breeze", - { - "id": "#forge:rods", - "required": false - } + "#c:rods/breeze" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/rods/blaze.json b/src/main/generated/data/c/tags/item/rods/blaze.json index cda6278df8..5d2eff8311 100644 --- a/src/main/generated/data/c/tags/item/rods/blaze.json +++ b/src/main/generated/data/c/tags/item/rods/blaze.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:blaze_rod", - { - "id": "#forge:rods/blaze", - "required": false - } + "minecraft:blaze_rod" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/rods/wooden.json b/src/main/generated/data/c/tags/item/rods/wooden.json index 348d18d33d..019b63dd31 100644 --- a/src/main/generated/data/c/tags/item/rods/wooden.json +++ b/src/main/generated/data/c/tags/item/rods/wooden.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:stick", - { - "id": "#forge:rods/wooden", - "required": false - } + "minecraft:stick" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/sands.json b/src/main/generated/data/c/tags/item/sands.json new file mode 100644 index 0000000000..f4b6e6a769 --- /dev/null +++ b/src/main/generated/data/c/tags/item/sands.json @@ -0,0 +1,6 @@ +{ + "values": [ + "#c:sands/colorless", + "#c:sands/red" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/sand/colorless.json b/src/main/generated/data/c/tags/item/sands/colorless.json similarity index 100% rename from src/main/generated/data/forge/tags/item/sand/colorless.json rename to src/main/generated/data/c/tags/item/sands/colorless.json diff --git a/src/main/generated/data/forge/tags/item/sand/red.json b/src/main/generated/data/c/tags/item/sands/red.json similarity index 100% rename from src/main/generated/data/forge/tags/item/sand/red.json rename to src/main/generated/data/c/tags/item/sands/red.json diff --git a/src/main/generated/data/c/tags/item/sandstone/blocks.json b/src/main/generated/data/c/tags/item/sandstone/blocks.json index 5684db6caf..df1b934e5c 100644 --- a/src/main/generated/data/c/tags/item/sandstone/blocks.json +++ b/src/main/generated/data/c/tags/item/sandstone/blocks.json @@ -1,10 +1,6 @@ { "values": [ "#c:sandstone/red_blocks", - "#c:sandstone/uncolored_blocks", - { - "id": "#forge:sandstone", - "required": false - } + "#c:sandstone/uncolored_blocks" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/seeds.json b/src/main/generated/data/c/tags/item/seeds.json new file mode 100644 index 0000000000..e422d061f3 --- /dev/null +++ b/src/main/generated/data/c/tags/item/seeds.json @@ -0,0 +1,14 @@ +{ + "values": [ + "#c:seeds/beetroot", + "#c:seeds/melon", + "#c:seeds/pumpkin", + "#c:seeds/wheat", + "#c:seeds/beetroot", + "#c:seeds/melon", + "#c:seeds/pumpkin", + "#c:seeds/wheat", + "#c:seeds/pitcher_plant", + "#c:seeds/torchflower" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/seeds/beetroot.json b/src/main/generated/data/c/tags/item/seeds/beetroot.json similarity index 100% rename from src/main/generated/data/forge/tags/item/seeds/beetroot.json rename to src/main/generated/data/c/tags/item/seeds/beetroot.json diff --git a/src/main/generated/data/forge/tags/item/seeds/melon.json b/src/main/generated/data/c/tags/item/seeds/melon.json similarity index 100% rename from src/main/generated/data/forge/tags/item/seeds/melon.json rename to src/main/generated/data/c/tags/item/seeds/melon.json diff --git a/src/main/generated/data/c/tags/item/seeds/pitcher_plant.json b/src/main/generated/data/c/tags/item/seeds/pitcher_plant.json new file mode 100644 index 0000000000..e81489b0df --- /dev/null +++ b/src/main/generated/data/c/tags/item/seeds/pitcher_plant.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:pitcher_pod" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/seeds/pumpkin.json b/src/main/generated/data/c/tags/item/seeds/pumpkin.json similarity index 100% rename from src/main/generated/data/forge/tags/item/seeds/pumpkin.json rename to src/main/generated/data/c/tags/item/seeds/pumpkin.json diff --git a/src/main/generated/data/c/tags/item/seeds/torchflower.json b/src/main/generated/data/c/tags/item/seeds/torchflower.json new file mode 100644 index 0000000000..e02282a32c --- /dev/null +++ b/src/main/generated/data/c/tags/item/seeds/torchflower.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:torchflower_seeds" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/seeds/wheat.json b/src/main/generated/data/c/tags/item/seeds/wheat.json similarity index 100% rename from src/main/generated/data/forge/tags/item/seeds/wheat.json rename to src/main/generated/data/c/tags/item/seeds/wheat.json diff --git a/src/main/generated/data/c/tags/item/slime_balls.json b/src/main/generated/data/c/tags/item/slime_balls.json index e81d459385..533c25d916 100644 --- a/src/main/generated/data/c/tags/item/slime_balls.json +++ b/src/main/generated/data/c/tags/item/slime_balls.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:slime_ball", - { - "id": "#forge:slimeballs", - "required": false - } + "minecraft:slime_ball" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/storage_blocks.json b/src/main/generated/data/c/tags/item/storage_blocks.json index 4354b34619..54cd9d84ad 100644 --- a/src/main/generated/data/c/tags/item/storage_blocks.json +++ b/src/main/generated/data/c/tags/item/storage_blocks.json @@ -16,53 +16,6 @@ "#c:storage_blocks/redstone", "#c:storage_blocks/slime", "#c:storage_blocks/wheat", - { - "id": "#forge:storage_blocks/coal", - "required": false - }, - { - "id": "#forge:storage_blocks/copper", - "required": false - }, - { - "id": "#forge:storage_blocks/diamond", - "required": false - }, - { - "id": "#forge:storage_blocks/emerald", - "required": false - }, - { - "id": "#forge:storage_blocks/gold", - "required": false - }, - { - "id": "#forge:storage_blocks/iron", - "required": false - }, - { - "id": "#forge:storage_blocks/lapis", - "required": false - }, - { - "id": "#forge:storage_blocks/netherite", - "required": false - }, - { - "id": "#forge:storage_blocks/raw_copper", - "required": false - }, - { - "id": "#forge:storage_blocks/raw_gold", - "required": false - }, - { - "id": "#forge:storage_blocks/raw_iron", - "required": false - }, - { - "id": "#forge:storage_blocks/redstone", - "required": false - } + "#c:storage_blocks/resin" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/storage_blocks/coal.json b/src/main/generated/data/c/tags/item/storage_blocks/coal.json index b8479ced38..4b7921705b 100644 --- a/src/main/generated/data/c/tags/item/storage_blocks/coal.json +++ b/src/main/generated/data/c/tags/item/storage_blocks/coal.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:coal_block", - { - "id": "#forge:storage_blocks/coal", - "required": false - } + "minecraft:coal_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/storage_blocks/copper.json b/src/main/generated/data/c/tags/item/storage_blocks/copper.json index acd2a6a7a4..015bec70c3 100644 --- a/src/main/generated/data/c/tags/item/storage_blocks/copper.json +++ b/src/main/generated/data/c/tags/item/storage_blocks/copper.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:copper_block", - { - "id": "#forge:storage_blocks/copper", - "required": false - } + "minecraft:copper_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/storage_blocks/diamond.json b/src/main/generated/data/c/tags/item/storage_blocks/diamond.json index 76426ba425..acd7f52de5 100644 --- a/src/main/generated/data/c/tags/item/storage_blocks/diamond.json +++ b/src/main/generated/data/c/tags/item/storage_blocks/diamond.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:diamond_block", - { - "id": "#forge:storage_blocks/diamond", - "required": false - } + "minecraft:diamond_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/storage_blocks/emerald.json b/src/main/generated/data/c/tags/item/storage_blocks/emerald.json index 7a41454d94..152063ec6c 100644 --- a/src/main/generated/data/c/tags/item/storage_blocks/emerald.json +++ b/src/main/generated/data/c/tags/item/storage_blocks/emerald.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:emerald_block", - { - "id": "#forge:storage_blocks/emerald", - "required": false - } + "minecraft:emerald_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/storage_blocks/gold.json b/src/main/generated/data/c/tags/item/storage_blocks/gold.json index a4116fc77f..546dde03c9 100644 --- a/src/main/generated/data/c/tags/item/storage_blocks/gold.json +++ b/src/main/generated/data/c/tags/item/storage_blocks/gold.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:gold_block", - { - "id": "#forge:storage_blocks/gold", - "required": false - } + "minecraft:gold_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/storage_blocks/iron.json b/src/main/generated/data/c/tags/item/storage_blocks/iron.json index f0e9fcca1f..01fb2965f2 100644 --- a/src/main/generated/data/c/tags/item/storage_blocks/iron.json +++ b/src/main/generated/data/c/tags/item/storage_blocks/iron.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:iron_block", - { - "id": "#forge:storage_blocks/iron", - "required": false - } + "minecraft:iron_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/storage_blocks/lapis.json b/src/main/generated/data/c/tags/item/storage_blocks/lapis.json index b5f41d8d4e..f4ca82bbd4 100644 --- a/src/main/generated/data/c/tags/item/storage_blocks/lapis.json +++ b/src/main/generated/data/c/tags/item/storage_blocks/lapis.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:lapis_block", - { - "id": "#forge:storage_blocks/lapis", - "required": false - } + "minecraft:lapis_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/storage_blocks/netherite.json b/src/main/generated/data/c/tags/item/storage_blocks/netherite.json index a3dfe0d53c..83433d44eb 100644 --- a/src/main/generated/data/c/tags/item/storage_blocks/netherite.json +++ b/src/main/generated/data/c/tags/item/storage_blocks/netherite.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:netherite_block", - { - "id": "#forge:storage_blocks/netherite", - "required": false - } + "minecraft:netherite_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/storage_blocks/raw_copper.json b/src/main/generated/data/c/tags/item/storage_blocks/raw_copper.json index 8f12fb63a7..1a21e230ef 100644 --- a/src/main/generated/data/c/tags/item/storage_blocks/raw_copper.json +++ b/src/main/generated/data/c/tags/item/storage_blocks/raw_copper.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:raw_copper_block", - { - "id": "#forge:storage_blocks/raw_copper", - "required": false - } + "minecraft:raw_copper_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/storage_blocks/raw_gold.json b/src/main/generated/data/c/tags/item/storage_blocks/raw_gold.json index dcee1e225b..80781ce667 100644 --- a/src/main/generated/data/c/tags/item/storage_blocks/raw_gold.json +++ b/src/main/generated/data/c/tags/item/storage_blocks/raw_gold.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:raw_gold_block", - { - "id": "#forge:storage_blocks/raw_gold", - "required": false - } + "minecraft:raw_gold_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/storage_blocks/raw_iron.json b/src/main/generated/data/c/tags/item/storage_blocks/raw_iron.json index 3f0ecf27ad..13ed9fc651 100644 --- a/src/main/generated/data/c/tags/item/storage_blocks/raw_iron.json +++ b/src/main/generated/data/c/tags/item/storage_blocks/raw_iron.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:raw_iron_block", - { - "id": "#forge:storage_blocks/raw_iron", - "required": false - } + "minecraft:raw_iron_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/storage_blocks/redstone.json b/src/main/generated/data/c/tags/item/storage_blocks/redstone.json index 49fa7a5a26..f5fd89c541 100644 --- a/src/main/generated/data/c/tags/item/storage_blocks/redstone.json +++ b/src/main/generated/data/c/tags/item/storage_blocks/redstone.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:redstone_block", - { - "id": "#forge:storage_blocks/redstone", - "required": false - } + "minecraft:redstone_block" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/storage_blocks/resin.json b/src/main/generated/data/c/tags/item/storage_blocks/resin.json new file mode 100644 index 0000000000..7b95c08f1f --- /dev/null +++ b/src/main/generated/data/c/tags/item/storage_blocks/resin.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:resin_block" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/strings.json b/src/main/generated/data/c/tags/item/strings.json index 89b40c31c5..d018256cf8 100644 --- a/src/main/generated/data/c/tags/item/strings.json +++ b/src/main/generated/data/c/tags/item/strings.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:string", - { - "id": "#forge:strings", - "required": false - } + "minecraft:string" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/stripped_logs.json b/src/main/generated/data/c/tags/item/stripped_logs.json index ae69c996ad..95f74cbc5e 100644 --- a/src/main/generated/data/c/tags/item/stripped_logs.json +++ b/src/main/generated/data/c/tags/item/stripped_logs.json @@ -4,10 +4,13 @@ "minecraft:stripped_bamboo_block", "minecraft:stripped_birch_log", "minecraft:stripped_cherry_log", + "minecraft:stripped_crimson_stem", "minecraft:stripped_dark_oak_log", "minecraft:stripped_jungle_log", "minecraft:stripped_mangrove_log", "minecraft:stripped_oak_log", - "minecraft:stripped_spruce_log" + "minecraft:stripped_pale_oak_log", + "minecraft:stripped_spruce_log", + "minecraft:stripped_warped_stem" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/stripped_woods.json b/src/main/generated/data/c/tags/item/stripped_woods.json index 197542891d..0336fc751d 100644 --- a/src/main/generated/data/c/tags/item/stripped_woods.json +++ b/src/main/generated/data/c/tags/item/stripped_woods.json @@ -3,10 +3,13 @@ "minecraft:stripped_acacia_wood", "minecraft:stripped_birch_wood", "minecraft:stripped_cherry_wood", + "minecraft:stripped_crimson_hyphae", "minecraft:stripped_dark_oak_wood", "minecraft:stripped_jungle_wood", "minecraft:stripped_mangrove_wood", "minecraft:stripped_oak_wood", - "minecraft:stripped_spruce_wood" + "minecraft:stripped_pale_oak_wood", + "minecraft:stripped_spruce_wood", + "minecraft:stripped_warped_hyphae" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/tools.json b/src/main/generated/data/c/tags/item/tools.json index 98a56516e0..093ece2873 100644 --- a/src/main/generated/data/c/tags/item/tools.json +++ b/src/main/generated/data/c/tags/item/tools.json @@ -16,6 +16,7 @@ "#c:tools/mace", "#c:tools/mining_tool", "#c:tools/melee_weapon", - "#c:tools/ranged_weapon" + "#c:tools/ranged_weapon", + "#c:tools/wrench" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/tools/bow.json b/src/main/generated/data/c/tags/item/tools/bow.json index e46556b3d2..a1c8a443dc 100644 --- a/src/main/generated/data/c/tags/item/tools/bow.json +++ b/src/main/generated/data/c/tags/item/tools/bow.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:bow", - { - "id": "#forge:tools/bows", - "required": false - } + "minecraft:bow" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/tools/crossbow.json b/src/main/generated/data/c/tags/item/tools/crossbow.json index d1e63bc584..848f97bc22 100644 --- a/src/main/generated/data/c/tags/item/tools/crossbow.json +++ b/src/main/generated/data/c/tags/item/tools/crossbow.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:crossbow", - { - "id": "#forge:tools/crossbows", - "required": false - } + "minecraft:crossbow" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/tools/fishing_rod.json b/src/main/generated/data/c/tags/item/tools/fishing_rod.json index efafba4845..e97941e9dc 100644 --- a/src/main/generated/data/c/tags/item/tools/fishing_rod.json +++ b/src/main/generated/data/c/tags/item/tools/fishing_rod.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:fishing_rod", - { - "id": "#forge:tools/fishing_rods", - "required": false - } + "minecraft:fishing_rod" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/tools/melee_weapon.json b/src/main/generated/data/c/tags/item/tools/melee_weapon.json index 1b166a3b4a..2bb3c599d0 100644 --- a/src/main/generated/data/c/tags/item/tools/melee_weapon.json +++ b/src/main/generated/data/c/tags/item/tools/melee_weapon.json @@ -4,12 +4,14 @@ "minecraft:trident", "minecraft:wooden_sword", "minecraft:stone_sword", + "minecraft:copper_sword", "minecraft:golden_sword", "minecraft:iron_sword", "minecraft:diamond_sword", "minecraft:netherite_sword", "minecraft:wooden_axe", "minecraft:stone_axe", + "minecraft:copper_axe", "minecraft:golden_axe", "minecraft:iron_axe", "minecraft:diamond_axe", diff --git a/src/main/generated/data/c/tags/item/tools/mining_tool.json b/src/main/generated/data/c/tags/item/tools/mining_tool.json index c10d395032..ec25c003e9 100644 --- a/src/main/generated/data/c/tags/item/tools/mining_tool.json +++ b/src/main/generated/data/c/tags/item/tools/mining_tool.json @@ -2,6 +2,7 @@ "values": [ "minecraft:wooden_pickaxe", "minecraft:stone_pickaxe", + "minecraft:copper_pickaxe", "minecraft:iron_pickaxe", "minecraft:golden_pickaxe", "minecraft:diamond_pickaxe", diff --git a/src/main/generated/data/c/tags/item/tools/shear.json b/src/main/generated/data/c/tags/item/tools/shear.json index 6ee404543e..2400078166 100644 --- a/src/main/generated/data/c/tags/item/tools/shear.json +++ b/src/main/generated/data/c/tags/item/tools/shear.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:shears", - { - "id": "#forge:tools/shears", - "required": false - } + "minecraft:shears" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/item/tools/shield.json b/src/main/generated/data/c/tags/item/tools/shield.json index f0b441428b..0f2454ce04 100644 --- a/src/main/generated/data/c/tags/item/tools/shield.json +++ b/src/main/generated/data/c/tags/item/tools/shield.json @@ -1,9 +1,5 @@ { "values": [ - "minecraft:shield", - { - "id": "#forge:tools/shields", - "required": false - } + "minecraft:shield" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_dense/nether.json b/src/main/generated/data/c/tags/item/tools/wrench.json similarity index 100% rename from src/main/generated/data/forge/tags/worldgen/biome/is_dense/nether.json rename to src/main/generated/data/c/tags/item/tools/wrench.json diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_cave.json b/src/main/generated/data/c/tags/worldgen/biome/is_cave.json index 14acf097ed..21a70cfeec 100644 --- a/src/main/generated/data/c/tags/worldgen/biome/is_cave.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_cave.json @@ -2,10 +2,6 @@ "values": [ "minecraft:lush_caves", "minecraft:dripstone_caves", - "minecraft:deep_dark", - { - "id": "#forge:is_cave", - "required": false - } + "minecraft:deep_dark" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_cold.json b/src/main/generated/data/c/tags/worldgen/biome/is_cold.json index 09882a2325..d58cc9f774 100644 --- a/src/main/generated/data/c/tags/worldgen/biome/is_cold.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_cold.json @@ -1,10 +1,7 @@ { "values": [ "#c:is_cold/overworld", - { - "id": "#forge:is_cold/nether", - "required": false - }, + "#c:is_cold/nether", "#c:is_cold/end" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_cold/end.json b/src/main/generated/data/c/tags/worldgen/biome/is_cold/end.json index 5598c65b7f..73d3eff3b0 100644 --- a/src/main/generated/data/c/tags/worldgen/biome/is_cold/end.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_cold/end.json @@ -4,10 +4,6 @@ "minecraft:small_end_islands", "minecraft:end_midlands", "minecraft:end_highlands", - "minecraft:end_barrens", - { - "id": "#forge:is_cold/end", - "required": false - } + "minecraft:end_barrens" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_sparse/nether.json b/src/main/generated/data/c/tags/worldgen/biome/is_cold/nether.json similarity index 100% rename from src/main/generated/data/forge/tags/worldgen/biome/is_sparse/nether.json rename to src/main/generated/data/c/tags/worldgen/biome/is_cold/nether.json diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_cold/overworld.json b/src/main/generated/data/c/tags/worldgen/biome/is_cold/overworld.json index 67e6574044..0a747bbcfe 100644 --- a/src/main/generated/data/c/tags/worldgen/biome/is_cold/overworld.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_cold/overworld.json @@ -19,10 +19,6 @@ "minecraft:cold_ocean", "minecraft:frozen_ocean", "minecraft:deep_cold_ocean", - "minecraft:deep_frozen_ocean", - { - "id": "#forge:is_cold/overworld", - "required": false - } + "minecraft:deep_frozen_ocean" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_dark_forest.json b/src/main/generated/data/c/tags/worldgen/biome/is_dark_forest.json new file mode 100644 index 0000000000..33519bb4c2 --- /dev/null +++ b/src/main/generated/data/c/tags/worldgen/biome/is_dark_forest.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:dark_forest", + "minecraft:pale_garden" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_dead.json b/src/main/generated/data/c/tags/worldgen/biome/is_dead.json index 019f7a17c7..f72d209df7 100644 --- a/src/main/generated/data/c/tags/worldgen/biome/is_dead.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_dead.json @@ -1,8 +1,3 @@ { - "values": [ - { - "id": "#forge:is_dead", - "required": false - } - ] + "values": [] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_dense_vegetation.json b/src/main/generated/data/c/tags/worldgen/biome/is_dense_vegetation.json index 078ef904dd..7d98565504 100644 --- a/src/main/generated/data/c/tags/worldgen/biome/is_dense_vegetation.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_dense_vegetation.json @@ -1,13 +1,7 @@ { "values": [ "#c:is_dense_vegetation/overworld", - { - "id": "#forge:is_dense/nether", - "required": false - }, - { - "id": "#forge:is_dense/end", - "required": false - } + "#c:is_dense_vegetation/nether", + "#c:is_dense_vegetation/end" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_hot/end.json b/src/main/generated/data/c/tags/worldgen/biome/is_dense_vegetation/end.json similarity index 100% rename from src/main/generated/data/forge/tags/worldgen/biome/is_hot/end.json rename to src/main/generated/data/c/tags/worldgen/biome/is_dense_vegetation/end.json diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_wet/nether.json b/src/main/generated/data/c/tags/worldgen/biome/is_dense_vegetation/nether.json similarity index 100% rename from src/main/generated/data/forge/tags/worldgen/biome/is_wet/nether.json rename to src/main/generated/data/c/tags/worldgen/biome/is_dense_vegetation/nether.json diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_dense_vegetation/overworld.json b/src/main/generated/data/c/tags/worldgen/biome/is_dense_vegetation/overworld.json index 3af2bdd5e4..54f339aa4c 100644 --- a/src/main/generated/data/c/tags/worldgen/biome/is_dense_vegetation/overworld.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_dense_vegetation/overworld.json @@ -5,10 +5,6 @@ "minecraft:old_growth_spruce_taiga", "minecraft:jungle", "minecraft:bamboo_jungle", - "minecraft:mangrove_swamp", - { - "id": "#forge:is_dense/overworld", - "required": false - } + "minecraft:mangrove_swamp" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_dry.json b/src/main/generated/data/c/tags/worldgen/biome/is_dry.json index d1e491ae50..fb8b1f1309 100644 --- a/src/main/generated/data/c/tags/worldgen/biome/is_dry.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_dry.json @@ -2,10 +2,6 @@ "values": [ "#c:is_dry/overworld", "#c:is_dry/nether", - "#c:is_dry/end", - { - "id": "#forge:is_dry", - "required": false - } + "#c:is_dry/end" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_dry/end.json b/src/main/generated/data/c/tags/worldgen/biome/is_dry/end.json index ce1b28ee59..73d3eff3b0 100644 --- a/src/main/generated/data/c/tags/worldgen/biome/is_dry/end.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_dry/end.json @@ -4,10 +4,6 @@ "minecraft:small_end_islands", "minecraft:end_midlands", "minecraft:end_highlands", - "minecraft:end_barrens", - { - "id": "#forge:is_dry/end", - "required": false - } + "minecraft:end_barrens" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_dry/nether.json b/src/main/generated/data/c/tags/worldgen/biome/is_dry/nether.json index c490dcb1af..d8cf8f5e34 100644 --- a/src/main/generated/data/c/tags/worldgen/biome/is_dry/nether.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_dry/nether.json @@ -4,10 +4,6 @@ "minecraft:crimson_forest", "minecraft:warped_forest", "minecraft:soul_sand_valley", - "minecraft:basalt_deltas", - { - "id": "#forge:is_dry/nether", - "required": false - } + "minecraft:basalt_deltas" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_dry/overworld.json b/src/main/generated/data/c/tags/worldgen/biome/is_dry/overworld.json index 66049f8928..56ca6781da 100644 --- a/src/main/generated/data/c/tags/worldgen/biome/is_dry/overworld.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_dry/overworld.json @@ -6,10 +6,6 @@ "minecraft:eroded_badlands", "minecraft:savanna", "minecraft:savanna_plateau", - "minecraft:windswept_savanna", - { - "id": "#forge:is_dry/overworld", - "required": false - } + "minecraft:windswept_savanna" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_hot.json b/src/main/generated/data/c/tags/worldgen/biome/is_hot.json index 5a591ca1bc..28dd24912a 100644 --- a/src/main/generated/data/c/tags/worldgen/biome/is_hot.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_hot.json @@ -2,9 +2,6 @@ "values": [ "#c:is_hot/overworld", "#c:is_hot/nether", - { - "id": "#forge:is_hot/end", - "required": false - } + "#c:is_hot/end" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_sparse/end.json b/src/main/generated/data/c/tags/worldgen/biome/is_hot/end.json similarity index 100% rename from src/main/generated/data/forge/tags/worldgen/biome/is_sparse/end.json rename to src/main/generated/data/c/tags/worldgen/biome/is_hot/end.json diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_hot/nether.json b/src/main/generated/data/c/tags/worldgen/biome/is_hot/nether.json index 48cf5e7bec..d8cf8f5e34 100644 --- a/src/main/generated/data/c/tags/worldgen/biome/is_hot/nether.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_hot/nether.json @@ -4,10 +4,6 @@ "minecraft:crimson_forest", "minecraft:warped_forest", "minecraft:soul_sand_valley", - "minecraft:basalt_deltas", - { - "id": "#forge:is_hot/nether", - "required": false - } + "minecraft:basalt_deltas" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_hot/overworld.json b/src/main/generated/data/c/tags/worldgen/biome/is_hot/overworld.json index 58a85ef951..bfba134fa9 100644 --- a/src/main/generated/data/c/tags/worldgen/biome/is_hot/overworld.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_hot/overworld.json @@ -1,7 +1,6 @@ { "values": [ - "minecraft:swamp", - "minecraft:mangrove_swamp", + "minecraft:mushroom_fields", "minecraft:jungle", "minecraft:bamboo_jungle", "minecraft:sparse_jungle", @@ -13,10 +12,6 @@ "minecraft:savanna_plateau", "minecraft:windswept_savanna", "minecraft:stony_peaks", - "minecraft:warm_ocean", - { - "id": "#forge:is_hot/overworld", - "required": false - } + "minecraft:warm_ocean" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_lush.json b/src/main/generated/data/c/tags/worldgen/biome/is_lush.json similarity index 63% rename from src/main/generated/data/forge/tags/worldgen/biome/is_lush.json rename to src/main/generated/data/c/tags/worldgen/biome/is_lush.json index c91691a230..14035f0a54 100644 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_lush.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_lush.json @@ -1,6 +1,5 @@ { "values": [ - "minecraft:lush_caves", "minecraft:lush_caves" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_magical.json b/src/main/generated/data/c/tags/worldgen/biome/is_magical.json similarity index 100% rename from src/main/generated/data/forge/tags/worldgen/biome/is_magical.json rename to src/main/generated/data/c/tags/worldgen/biome/is_magical.json diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_mountain/peak.json b/src/main/generated/data/c/tags/worldgen/biome/is_mountain/peak.json index 60454a4666..c9597b86d0 100644 --- a/src/main/generated/data/c/tags/worldgen/biome/is_mountain/peak.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_mountain/peak.json @@ -2,10 +2,6 @@ "values": [ "minecraft:jagged_peaks", "minecraft:frozen_peaks", - "minecraft:stony_peaks", - { - "id": "#forge:is_peak", - "required": false - } + "minecraft:stony_peaks" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_plateau.json b/src/main/generated/data/c/tags/worldgen/biome/is_plateau.json similarity index 60% rename from src/main/generated/data/forge/tags/worldgen/biome/is_plateau.json rename to src/main/generated/data/c/tags/worldgen/biome/is_plateau.json index 0f5655a8c3..7228fbfd2b 100644 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_plateau.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_plateau.json @@ -3,9 +3,6 @@ "minecraft:wooded_badlands", "minecraft:savanna_plateau", "minecraft:cherry_grove", - "minecraft:meadow", - "minecraft:savanna_plateau", - "minecraft:wooded_badlands", "minecraft:meadow" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_rare.json b/src/main/generated/data/c/tags/worldgen/biome/is_rare.json similarity index 51% rename from src/main/generated/data/forge/tags/worldgen/biome/is_rare.json rename to src/main/generated/data/c/tags/worldgen/biome/is_rare.json index fa912d7481..2fc37cea54 100644 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_rare.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_rare.json @@ -13,18 +13,6 @@ "minecraft:windswept_gravelly_hills", "minecraft:mushroom_fields", "minecraft:deep_dark", - "minecraft:mushroom_fields", - "minecraft:sparse_jungle", - "minecraft:savanna_plateau", - "minecraft:sunflower_plains", - "minecraft:windswept_gravelly_hills", - "minecraft:flower_forest", - "minecraft:ice_spikes", - "minecraft:old_growth_birch_forest", - "minecraft:old_growth_spruce_taiga", - "minecraft:windswept_savanna", - "minecraft:eroded_badlands", - "minecraft:bamboo_jungle", - "minecraft:deep_dark" + "minecraft:pale_garden" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_dry/overworld.json b/src/main/generated/data/c/tags/worldgen/biome/is_sandy.json similarity index 60% rename from src/main/generated/data/forge/tags/worldgen/biome/is_dry/overworld.json rename to src/main/generated/data/c/tags/worldgen/biome/is_sandy.json index 5f0fa0bfee..5380f1372e 100644 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_dry/overworld.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_sandy.json @@ -3,7 +3,7 @@ "minecraft:desert", "minecraft:badlands", "minecraft:wooded_badlands", - "minecraft:windswept_savanna", - "minecraft:eroded_badlands" + "minecraft:eroded_badlands", + "minecraft:beach" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_sparse_vegetation.json b/src/main/generated/data/c/tags/worldgen/biome/is_sparse_vegetation.json index 370b410454..3f05a1cd7a 100644 --- a/src/main/generated/data/c/tags/worldgen/biome/is_sparse_vegetation.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_sparse_vegetation.json @@ -1,13 +1,7 @@ { "values": [ "#c:is_sparse_vegetation/overworld", - { - "id": "#forge:is_sparse/nether", - "required": false - }, - { - "id": "#forge:is_sparse/end", - "required": false - } + "#c:is_sparse_vegetation/nether", + "#c:is_sparse_vegetation/end" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_wet/end.json b/src/main/generated/data/c/tags/worldgen/biome/is_sparse_vegetation/end.json similarity index 100% rename from src/main/generated/data/forge/tags/worldgen/biome/is_wet/end.json rename to src/main/generated/data/c/tags/worldgen/biome/is_sparse_vegetation/end.json diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_modified.json b/src/main/generated/data/c/tags/worldgen/biome/is_sparse_vegetation/nether.json similarity index 100% rename from src/main/generated/data/forge/tags/worldgen/biome/is_modified.json rename to src/main/generated/data/c/tags/worldgen/biome/is_sparse_vegetation/nether.json diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_spooky.json b/src/main/generated/data/c/tags/worldgen/biome/is_spooky.json similarity index 58% rename from src/main/generated/data/forge/tags/worldgen/biome/is_spooky.json rename to src/main/generated/data/c/tags/worldgen/biome/is_spooky.json index 05c4f74dc5..138e9348a7 100644 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_spooky.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_spooky.json @@ -2,7 +2,6 @@ "values": [ "minecraft:dark_forest", "minecraft:deep_dark", - "minecraft:dark_forest", - "minecraft:deep_dark" + "minecraft:pale_garden" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_temperate.json b/src/main/generated/data/c/tags/worldgen/biome/is_temperate.json new file mode 100644 index 0000000000..fe845d3378 --- /dev/null +++ b/src/main/generated/data/c/tags/worldgen/biome/is_temperate.json @@ -0,0 +1,7 @@ +{ + "values": [ + "#c:is_temperate/overworld", + "#c:is_temperate/nether", + "#c:is_temperate/end" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_temperate/end.json b/src/main/generated/data/c/tags/worldgen/biome/is_temperate/end.json new file mode 100644 index 0000000000..f72d209df7 --- /dev/null +++ b/src/main/generated/data/c/tags/worldgen/biome/is_temperate/end.json @@ -0,0 +1,3 @@ +{ + "values": [] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_temperate/nether.json b/src/main/generated/data/c/tags/worldgen/biome/is_temperate/nether.json new file mode 100644 index 0000000000..f72d209df7 --- /dev/null +++ b/src/main/generated/data/c/tags/worldgen/biome/is_temperate/nether.json @@ -0,0 +1,3 @@ +{ + "values": [] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_temperate/overworld.json b/src/main/generated/data/c/tags/worldgen/biome/is_temperate/overworld.json new file mode 100644 index 0000000000..ce06201698 --- /dev/null +++ b/src/main/generated/data/c/tags/worldgen/biome/is_temperate/overworld.json @@ -0,0 +1,18 @@ +{ + "values": [ + "minecraft:beach", + "minecraft:birch_forest", + "minecraft:cherry_grove", + "minecraft:dark_forest", + "minecraft:deep_ocean", + "minecraft:flower_forest", + "minecraft:forest", + "minecraft:mangrove_swamp", + "minecraft:meadow", + "minecraft:ocean", + "minecraft:old_growth_birch_forest", + "minecraft:plains", + "minecraft:sunflower_plains", + "minecraft:swamp" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_tree/coniferous.json b/src/main/generated/data/c/tags/worldgen/biome/is_tree/coniferous.json index 490b4750b0..56f639f895 100644 --- a/src/main/generated/data/c/tags/worldgen/biome/is_tree/coniferous.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_tree/coniferous.json @@ -1,10 +1,6 @@ { "values": [ "#c:is_taiga", - "minecraft:grove", - { - "id": "#forge:is_coniferous", - "required": false - } + "minecraft:grove" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_tree/deciduous.json b/src/main/generated/data/c/tags/worldgen/biome/is_tree/deciduous.json index 0db7a3e9b6..ecf64e56d0 100644 --- a/src/main/generated/data/c/tags/worldgen/biome/is_tree/deciduous.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_tree/deciduous.json @@ -5,6 +5,7 @@ "minecraft:birch_forest", "minecraft:dark_forest", "minecraft:old_growth_birch_forest", + "minecraft:pale_garden", "minecraft:windswept_forest" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_wet.json b/src/main/generated/data/c/tags/worldgen/biome/is_wet.json index 259e57decf..c451f70640 100644 --- a/src/main/generated/data/c/tags/worldgen/biome/is_wet.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_wet.json @@ -1,13 +1,7 @@ { "values": [ "#c:is_wet/overworld", - { - "id": "#forge:is_wet/nether", - "required": false - }, - { - "id": "#forge:is_wet/end", - "required": false - } + "#c:is_wet/nether", + "#c:is_wet/end" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_wet/end.json b/src/main/generated/data/c/tags/worldgen/biome/is_wet/end.json new file mode 100644 index 0000000000..f72d209df7 --- /dev/null +++ b/src/main/generated/data/c/tags/worldgen/biome/is_wet/end.json @@ -0,0 +1,3 @@ +{ + "values": [] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_wet/nether.json b/src/main/generated/data/c/tags/worldgen/biome/is_wet/nether.json new file mode 100644 index 0000000000..f72d209df7 --- /dev/null +++ b/src/main/generated/data/c/tags/worldgen/biome/is_wet/nether.json @@ -0,0 +1,3 @@ +{ + "values": [] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/is_wet/overworld.json b/src/main/generated/data/c/tags/worldgen/biome/is_wet/overworld.json index 6bb610406d..ee6eef2723 100644 --- a/src/main/generated/data/c/tags/worldgen/biome/is_wet/overworld.json +++ b/src/main/generated/data/c/tags/worldgen/biome/is_wet/overworld.json @@ -7,10 +7,6 @@ "minecraft:sparse_jungle", "minecraft:beach", "minecraft:lush_caves", - "minecraft:dripstone_caves", - { - "id": "#forge:is_wet/overworld", - "required": false - } + "minecraft:dripstone_caves" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type.json b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type.json new file mode 100644 index 0000000000..4ff9f90241 --- /dev/null +++ b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type.json @@ -0,0 +1,16 @@ +{ + "values": [ + "#c:primary_wood_type/acacia", + "#c:primary_wood_type/bamboo", + "#c:primary_wood_type/birch", + "#c:primary_wood_type/cherry", + "#c:primary_wood_type/crimson", + "#c:primary_wood_type/dark_oak", + "#c:primary_wood_type/jungle", + "#c:primary_wood_type/mangrove", + "#c:primary_wood_type/oak", + "#c:primary_wood_type/pale_oak", + "#c:primary_wood_type/spruce", + "#c:primary_wood_type/warped" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/acacia.json b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/acacia.json new file mode 100644 index 0000000000..fc71cb5235 --- /dev/null +++ b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/acacia.json @@ -0,0 +1,7 @@ +{ + "values": [ + "minecraft:savanna", + "minecraft:savanna_plateau", + "minecraft:windswept_savanna" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/bamboo.json b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/bamboo.json new file mode 100644 index 0000000000..8e983ce126 --- /dev/null +++ b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/bamboo.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:bamboo_jungle" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/birch.json b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/birch.json new file mode 100644 index 0000000000..1d080779b6 --- /dev/null +++ b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/birch.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:birch_forest", + "minecraft:old_growth_birch_forest" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/cherry.json b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/cherry.json new file mode 100644 index 0000000000..4c834357d6 --- /dev/null +++ b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/cherry.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:cherry_grove" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/crimson.json b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/crimson.json new file mode 100644 index 0000000000..1189e61dc8 --- /dev/null +++ b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/crimson.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:crimson_forest" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/dark_oak.json b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/dark_oak.json new file mode 100644 index 0000000000..2d31b9e8e4 --- /dev/null +++ b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/dark_oak.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:dark_forest" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/jungle.json b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/jungle.json new file mode 100644 index 0000000000..a8108abf38 --- /dev/null +++ b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/jungle.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:jungle", + "minecraft:sparse_jungle" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_swamp.json b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/mangrove.json similarity index 69% rename from src/main/generated/data/forge/tags/worldgen/biome/is_swamp.json rename to src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/mangrove.json index 0f5eb22e0c..d862033bbc 100644 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_swamp.json +++ b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/mangrove.json @@ -1,6 +1,5 @@ { "values": [ - "minecraft:swamp", "minecraft:mangrove_swamp" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/oak.json b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/oak.json new file mode 100644 index 0000000000..b8a2bbf20e --- /dev/null +++ b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/oak.json @@ -0,0 +1,8 @@ +{ + "values": [ + "minecraft:flower_forest", + "minecraft:forest", + "minecraft:swamp", + "minecraft:wooded_badlands" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/pale_oak.json b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/pale_oak.json new file mode 100644 index 0000000000..16abb77c70 --- /dev/null +++ b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/pale_oak.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:pale_garden" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_coniferous.json b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/spruce.json similarity index 50% rename from src/main/generated/data/forge/tags/worldgen/biome/is_coniferous.json rename to src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/spruce.json index 6c114dbc65..1e5262fe12 100644 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_coniferous.json +++ b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/spruce.json @@ -1,8 +1,9 @@ { "values": [ - "minecraft:taiga", - "minecraft:snowy_taiga", + "minecraft:grove", "minecraft:old_growth_pine_taiga", - "minecraft:grove" + "minecraft:old_growth_spruce_taiga", + "minecraft:snowy_taiga", + "minecraft:taiga" ] } \ No newline at end of file diff --git a/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/warped.json b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/warped.json new file mode 100644 index 0000000000..42ad4efa88 --- /dev/null +++ b/src/main/generated/data/c/tags/worldgen/biome/primary_wood_type/warped.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:warped_forest" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/barrels.json b/src/main/generated/data/forge/tags/block/barrels.json deleted file mode 100644 index 1cfb5782c5..0000000000 --- a/src/main/generated/data/forge/tags/block/barrels.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "#forge:barrels/wooden" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/barrels/wooden.json b/src/main/generated/data/forge/tags/block/barrels/wooden.json deleted file mode 100644 index b07daae1c0..0000000000 --- a/src/main/generated/data/forge/tags/block/barrels/wooden.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:barrel" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/bookshelves.json b/src/main/generated/data/forge/tags/block/bookshelves.json deleted file mode 100644 index c09b2185bd..0000000000 --- a/src/main/generated/data/forge/tags/block/bookshelves.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:bookshelf" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/chests.json b/src/main/generated/data/forge/tags/block/chests.json deleted file mode 100644 index 9afff2b15a..0000000000 --- a/src/main/generated/data/forge/tags/block/chests.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "values": [ - "#forge:chests/ender", - "#forge:chests/trapped", - "#forge:chests/wooden" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/chests/wooden.json b/src/main/generated/data/forge/tags/block/chests/wooden.json deleted file mode 100644 index 86533f935b..0000000000 --- a/src/main/generated/data/forge/tags/block/chests/wooden.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "values": [ - "minecraft:chest", - "minecraft:trapped_chest" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/chorus_additionally_grows_on.json b/src/main/generated/data/forge/tags/block/chorus_additionally_grows_on.json deleted file mode 100644 index 4451697d12..0000000000 --- a/src/main/generated/data/forge/tags/block/chorus_additionally_grows_on.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "#forge:end_stones" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/cobblestone.json b/src/main/generated/data/forge/tags/block/cobblestone.json deleted file mode 100644 index f0ae95b5fc..0000000000 --- a/src/main/generated/data/forge/tags/block/cobblestone.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "values": [ - "#forge:cobblestone/normal", - "#forge:cobblestone/infested", - "#forge:cobblestone/mossy", - "#forge:cobblestone/deepslate" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/fence_gates.json b/src/main/generated/data/forge/tags/block/fence_gates.json deleted file mode 100644 index b9a57ac0ef..0000000000 --- a/src/main/generated/data/forge/tags/block/fence_gates.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "#forge:fence_gates/wooden" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/fences.json b/src/main/generated/data/forge/tags/block/fences.json deleted file mode 100644 index 44358edb04..0000000000 --- a/src/main/generated/data/forge/tags/block/fences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "values": [ - "#forge:fences/nether_brick", - "#forge:fences/wooden" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass.json b/src/main/generated/data/forge/tags/block/glass.json deleted file mode 100644 index fec31169ee..0000000000 --- a/src/main/generated/data/forge/tags/block/glass.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "values": [ - "#forge:glass/colorless", - "#forge:stained_glass", - "#forge:glass/tinted" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass/black.json b/src/main/generated/data/forge/tags/block/glass/black.json deleted file mode 100644 index 9965b5e8b4..0000000000 --- a/src/main/generated/data/forge/tags/block/glass/black.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:black_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass/blue.json b/src/main/generated/data/forge/tags/block/glass/blue.json deleted file mode 100644 index f59e58c6bf..0000000000 --- a/src/main/generated/data/forge/tags/block/glass/blue.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:blue_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass/brown.json b/src/main/generated/data/forge/tags/block/glass/brown.json deleted file mode 100644 index 490015cbb5..0000000000 --- a/src/main/generated/data/forge/tags/block/glass/brown.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:brown_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass/colorless.json b/src/main/generated/data/forge/tags/block/glass/colorless.json deleted file mode 100644 index ac8b5e5086..0000000000 --- a/src/main/generated/data/forge/tags/block/glass/colorless.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass/cyan.json b/src/main/generated/data/forge/tags/block/glass/cyan.json deleted file mode 100644 index 24d84747fa..0000000000 --- a/src/main/generated/data/forge/tags/block/glass/cyan.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:cyan_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass/gray.json b/src/main/generated/data/forge/tags/block/glass/gray.json deleted file mode 100644 index 2f309170ca..0000000000 --- a/src/main/generated/data/forge/tags/block/glass/gray.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:gray_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass/green.json b/src/main/generated/data/forge/tags/block/glass/green.json deleted file mode 100644 index d7946c1aca..0000000000 --- a/src/main/generated/data/forge/tags/block/glass/green.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:green_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass/light_blue.json b/src/main/generated/data/forge/tags/block/glass/light_blue.json deleted file mode 100644 index dc8e6b7148..0000000000 --- a/src/main/generated/data/forge/tags/block/glass/light_blue.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:light_blue_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass/light_gray.json b/src/main/generated/data/forge/tags/block/glass/light_gray.json deleted file mode 100644 index f165a46c90..0000000000 --- a/src/main/generated/data/forge/tags/block/glass/light_gray.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:light_gray_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass/lime.json b/src/main/generated/data/forge/tags/block/glass/lime.json deleted file mode 100644 index b6bb1d9415..0000000000 --- a/src/main/generated/data/forge/tags/block/glass/lime.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:lime_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass/magenta.json b/src/main/generated/data/forge/tags/block/glass/magenta.json deleted file mode 100644 index aa6a4825e8..0000000000 --- a/src/main/generated/data/forge/tags/block/glass/magenta.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:magenta_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass/orange.json b/src/main/generated/data/forge/tags/block/glass/orange.json deleted file mode 100644 index 9322f51fe4..0000000000 --- a/src/main/generated/data/forge/tags/block/glass/orange.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:orange_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass/pink.json b/src/main/generated/data/forge/tags/block/glass/pink.json deleted file mode 100644 index 58b65891fc..0000000000 --- a/src/main/generated/data/forge/tags/block/glass/pink.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:pink_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass/purple.json b/src/main/generated/data/forge/tags/block/glass/purple.json deleted file mode 100644 index d75a9e7308..0000000000 --- a/src/main/generated/data/forge/tags/block/glass/purple.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:purple_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass/red.json b/src/main/generated/data/forge/tags/block/glass/red.json deleted file mode 100644 index 72af78c029..0000000000 --- a/src/main/generated/data/forge/tags/block/glass/red.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:red_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass/silica.json b/src/main/generated/data/forge/tags/block/glass/silica.json deleted file mode 100644 index 3465b3884b..0000000000 --- a/src/main/generated/data/forge/tags/block/glass/silica.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "values": [ - "minecraft:glass", - "minecraft:white_stained_glass", - "minecraft:orange_stained_glass", - "minecraft:magenta_stained_glass", - "minecraft:light_blue_stained_glass", - "minecraft:yellow_stained_glass", - "minecraft:lime_stained_glass", - "minecraft:pink_stained_glass", - "minecraft:gray_stained_glass", - "minecraft:light_gray_stained_glass", - "minecraft:cyan_stained_glass", - "minecraft:purple_stained_glass", - "minecraft:blue_stained_glass", - "minecraft:brown_stained_glass", - "minecraft:green_stained_glass", - "minecraft:red_stained_glass", - "minecraft:black_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass/tinted.json b/src/main/generated/data/forge/tags/block/glass/tinted.json deleted file mode 100644 index 4075a1556b..0000000000 --- a/src/main/generated/data/forge/tags/block/glass/tinted.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:tinted_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass/white.json b/src/main/generated/data/forge/tags/block/glass/white.json deleted file mode 100644 index fb180e703e..0000000000 --- a/src/main/generated/data/forge/tags/block/glass/white.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:white_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass/yellow.json b/src/main/generated/data/forge/tags/block/glass/yellow.json deleted file mode 100644 index 0831bea4cc..0000000000 --- a/src/main/generated/data/forge/tags/block/glass/yellow.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:yellow_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass_panes.json b/src/main/generated/data/forge/tags/block/glass_panes.json deleted file mode 100644 index 4b95330d4f..0000000000 --- a/src/main/generated/data/forge/tags/block/glass_panes.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "values": [ - "#forge:glass_panes/colorless", - "#forge:stained_glass_panes" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass_panes/black.json b/src/main/generated/data/forge/tags/block/glass_panes/black.json deleted file mode 100644 index ebda555dcd..0000000000 --- a/src/main/generated/data/forge/tags/block/glass_panes/black.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:black_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass_panes/blue.json b/src/main/generated/data/forge/tags/block/glass_panes/blue.json deleted file mode 100644 index 2762890aa9..0000000000 --- a/src/main/generated/data/forge/tags/block/glass_panes/blue.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:blue_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass_panes/brown.json b/src/main/generated/data/forge/tags/block/glass_panes/brown.json deleted file mode 100644 index 0b5b727491..0000000000 --- a/src/main/generated/data/forge/tags/block/glass_panes/brown.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:brown_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass_panes/colorless.json b/src/main/generated/data/forge/tags/block/glass_panes/colorless.json deleted file mode 100644 index eb5756f964..0000000000 --- a/src/main/generated/data/forge/tags/block/glass_panes/colorless.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass_panes/cyan.json b/src/main/generated/data/forge/tags/block/glass_panes/cyan.json deleted file mode 100644 index 9913e90a96..0000000000 --- a/src/main/generated/data/forge/tags/block/glass_panes/cyan.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:cyan_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass_panes/gray.json b/src/main/generated/data/forge/tags/block/glass_panes/gray.json deleted file mode 100644 index 9fe30b26a8..0000000000 --- a/src/main/generated/data/forge/tags/block/glass_panes/gray.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:gray_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass_panes/green.json b/src/main/generated/data/forge/tags/block/glass_panes/green.json deleted file mode 100644 index ab91321028..0000000000 --- a/src/main/generated/data/forge/tags/block/glass_panes/green.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:green_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass_panes/light_blue.json b/src/main/generated/data/forge/tags/block/glass_panes/light_blue.json deleted file mode 100644 index cd6d399022..0000000000 --- a/src/main/generated/data/forge/tags/block/glass_panes/light_blue.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:light_blue_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass_panes/light_gray.json b/src/main/generated/data/forge/tags/block/glass_panes/light_gray.json deleted file mode 100644 index 7be6a4ce81..0000000000 --- a/src/main/generated/data/forge/tags/block/glass_panes/light_gray.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:light_gray_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass_panes/lime.json b/src/main/generated/data/forge/tags/block/glass_panes/lime.json deleted file mode 100644 index 46dec64b22..0000000000 --- a/src/main/generated/data/forge/tags/block/glass_panes/lime.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:lime_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass_panes/magenta.json b/src/main/generated/data/forge/tags/block/glass_panes/magenta.json deleted file mode 100644 index 7504bc3fa3..0000000000 --- a/src/main/generated/data/forge/tags/block/glass_panes/magenta.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:magenta_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass_panes/orange.json b/src/main/generated/data/forge/tags/block/glass_panes/orange.json deleted file mode 100644 index 1c47e34616..0000000000 --- a/src/main/generated/data/forge/tags/block/glass_panes/orange.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:orange_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass_panes/pink.json b/src/main/generated/data/forge/tags/block/glass_panes/pink.json deleted file mode 100644 index 28e36b973f..0000000000 --- a/src/main/generated/data/forge/tags/block/glass_panes/pink.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:pink_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass_panes/purple.json b/src/main/generated/data/forge/tags/block/glass_panes/purple.json deleted file mode 100644 index a3cff33a14..0000000000 --- a/src/main/generated/data/forge/tags/block/glass_panes/purple.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:purple_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass_panes/red.json b/src/main/generated/data/forge/tags/block/glass_panes/red.json deleted file mode 100644 index 5edd855d71..0000000000 --- a/src/main/generated/data/forge/tags/block/glass_panes/red.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:red_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass_panes/white.json b/src/main/generated/data/forge/tags/block/glass_panes/white.json deleted file mode 100644 index b514a2839f..0000000000 --- a/src/main/generated/data/forge/tags/block/glass_panes/white.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:white_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/glass_panes/yellow.json b/src/main/generated/data/forge/tags/block/glass_panes/yellow.json deleted file mode 100644 index a293eb9dc8..0000000000 --- a/src/main/generated/data/forge/tags/block/glass_panes/yellow.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:yellow_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/obsidian.json b/src/main/generated/data/forge/tags/block/obsidian.json deleted file mode 100644 index 170248454b..0000000000 --- a/src/main/generated/data/forge/tags/block/obsidian.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:obsidian" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/ores.json b/src/main/generated/data/forge/tags/block/ores.json deleted file mode 100644 index 2c4beabc55..0000000000 --- a/src/main/generated/data/forge/tags/block/ores.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "values": [ - "#forge:ores/coal", - "#forge:ores/copper", - "#forge:ores/diamond", - "#forge:ores/emerald", - "#forge:ores/gold", - "#forge:ores/iron", - "#forge:ores/lapis", - "#forge:ores/redstone", - "#forge:ores/quartz", - "#forge:ores/netherite_scrap" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/ores/netherite_scrap.json b/src/main/generated/data/forge/tags/block/ores/netherite_scrap.json deleted file mode 100644 index 910d1fb8e6..0000000000 --- a/src/main/generated/data/forge/tags/block/ores/netherite_scrap.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:ancient_debris" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/ores/quartz.json b/src/main/generated/data/forge/tags/block/ores/quartz.json deleted file mode 100644 index f0bc7a4657..0000000000 --- a/src/main/generated/data/forge/tags/block/ores/quartz.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:nether_quartz_ore" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/sand.json b/src/main/generated/data/forge/tags/block/sand.json deleted file mode 100644 index 8b04916283..0000000000 --- a/src/main/generated/data/forge/tags/block/sand.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "values": [ - "#forge:sand/colorless", - "#forge:sand/red" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/sandstone.json b/src/main/generated/data/forge/tags/block/sandstone.json deleted file mode 100644 index bb7fb03ee3..0000000000 --- a/src/main/generated/data/forge/tags/block/sandstone.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "values": [ - "minecraft:sandstone", - "minecraft:cut_sandstone", - "minecraft:chiseled_sandstone", - "minecraft:smooth_sandstone", - "minecraft:red_sandstone", - "minecraft:cut_red_sandstone", - "minecraft:chiseled_red_sandstone", - "minecraft:smooth_red_sandstone" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/stained_glass.json b/src/main/generated/data/forge/tags/block/stained_glass.json deleted file mode 100644 index 2db7aef9df..0000000000 --- a/src/main/generated/data/forge/tags/block/stained_glass.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "values": [ - "minecraft:white_stained_glass", - "minecraft:orange_stained_glass", - "minecraft:magenta_stained_glass", - "minecraft:light_blue_stained_glass", - "minecraft:yellow_stained_glass", - "minecraft:lime_stained_glass", - "minecraft:pink_stained_glass", - "minecraft:gray_stained_glass", - "minecraft:light_gray_stained_glass", - "minecraft:cyan_stained_glass", - "minecraft:purple_stained_glass", - "minecraft:blue_stained_glass", - "minecraft:brown_stained_glass", - "minecraft:green_stained_glass", - "minecraft:red_stained_glass", - "minecraft:black_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/stained_glass_panes.json b/src/main/generated/data/forge/tags/block/stained_glass_panes.json deleted file mode 100644 index 65f2adb8f9..0000000000 --- a/src/main/generated/data/forge/tags/block/stained_glass_panes.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "values": [ - "minecraft:white_stained_glass_pane", - "minecraft:orange_stained_glass_pane", - "minecraft:magenta_stained_glass_pane", - "minecraft:light_blue_stained_glass_pane", - "minecraft:yellow_stained_glass_pane", - "minecraft:lime_stained_glass_pane", - "minecraft:pink_stained_glass_pane", - "minecraft:gray_stained_glass_pane", - "minecraft:light_gray_stained_glass_pane", - "minecraft:cyan_stained_glass_pane", - "minecraft:purple_stained_glass_pane", - "minecraft:blue_stained_glass_pane", - "minecraft:brown_stained_glass_pane", - "minecraft:green_stained_glass_pane", - "minecraft:red_stained_glass_pane", - "minecraft:black_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/stone.json b/src/main/generated/data/forge/tags/block/stone.json deleted file mode 100644 index 958f6e25c7..0000000000 --- a/src/main/generated/data/forge/tags/block/stone.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "values": [ - "minecraft:andesite", - "minecraft:diorite", - "minecraft:granite", - "minecraft:infested_stone", - "minecraft:stone", - "minecraft:polished_andesite", - "minecraft:polished_diorite", - "minecraft:polished_granite", - "minecraft:deepslate", - "minecraft:polished_deepslate", - "minecraft:infested_deepslate", - "minecraft:tuff" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/storage_blocks.json b/src/main/generated/data/forge/tags/block/storage_blocks.json deleted file mode 100644 index 5f2a7d417e..0000000000 --- a/src/main/generated/data/forge/tags/block/storage_blocks.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "values": [ - "#forge:storage_blocks/amethyst", - "#forge:storage_blocks/coal", - "#forge:storage_blocks/copper", - "#forge:storage_blocks/diamond", - "#forge:storage_blocks/emerald", - "#forge:storage_blocks/gold", - "#forge:storage_blocks/iron", - "#forge:storage_blocks/lapis", - "#forge:storage_blocks/quartz", - "#forge:storage_blocks/raw_copper", - "#forge:storage_blocks/raw_gold", - "#forge:storage_blocks/raw_iron", - "#forge:storage_blocks/redstone", - "#forge:storage_blocks/netherite" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/storage_blocks/coal.json b/src/main/generated/data/forge/tags/block/storage_blocks/coal.json deleted file mode 100644 index 4b7921705b..0000000000 --- a/src/main/generated/data/forge/tags/block/storage_blocks/coal.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:coal_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/storage_blocks/copper.json b/src/main/generated/data/forge/tags/block/storage_blocks/copper.json deleted file mode 100644 index 015bec70c3..0000000000 --- a/src/main/generated/data/forge/tags/block/storage_blocks/copper.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:copper_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/storage_blocks/diamond.json b/src/main/generated/data/forge/tags/block/storage_blocks/diamond.json deleted file mode 100644 index acd7f52de5..0000000000 --- a/src/main/generated/data/forge/tags/block/storage_blocks/diamond.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:diamond_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/storage_blocks/emerald.json b/src/main/generated/data/forge/tags/block/storage_blocks/emerald.json deleted file mode 100644 index 152063ec6c..0000000000 --- a/src/main/generated/data/forge/tags/block/storage_blocks/emerald.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:emerald_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/storage_blocks/gold.json b/src/main/generated/data/forge/tags/block/storage_blocks/gold.json deleted file mode 100644 index 546dde03c9..0000000000 --- a/src/main/generated/data/forge/tags/block/storage_blocks/gold.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:gold_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/storage_blocks/iron.json b/src/main/generated/data/forge/tags/block/storage_blocks/iron.json deleted file mode 100644 index 01fb2965f2..0000000000 --- a/src/main/generated/data/forge/tags/block/storage_blocks/iron.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:iron_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/storage_blocks/lapis.json b/src/main/generated/data/forge/tags/block/storage_blocks/lapis.json deleted file mode 100644 index f4ca82bbd4..0000000000 --- a/src/main/generated/data/forge/tags/block/storage_blocks/lapis.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:lapis_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/storage_blocks/netherite.json b/src/main/generated/data/forge/tags/block/storage_blocks/netherite.json deleted file mode 100644 index 83433d44eb..0000000000 --- a/src/main/generated/data/forge/tags/block/storage_blocks/netherite.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:netherite_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/storage_blocks/raw_copper.json b/src/main/generated/data/forge/tags/block/storage_blocks/raw_copper.json deleted file mode 100644 index 1a21e230ef..0000000000 --- a/src/main/generated/data/forge/tags/block/storage_blocks/raw_copper.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:raw_copper_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/storage_blocks/raw_gold.json b/src/main/generated/data/forge/tags/block/storage_blocks/raw_gold.json deleted file mode 100644 index 80781ce667..0000000000 --- a/src/main/generated/data/forge/tags/block/storage_blocks/raw_gold.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:raw_gold_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/storage_blocks/raw_iron.json b/src/main/generated/data/forge/tags/block/storage_blocks/raw_iron.json deleted file mode 100644 index 13ed9fc651..0000000000 --- a/src/main/generated/data/forge/tags/block/storage_blocks/raw_iron.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:raw_iron_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/block/storage_blocks/redstone.json b/src/main/generated/data/forge/tags/block/storage_blocks/redstone.json deleted file mode 100644 index f5fd89c541..0000000000 --- a/src/main/generated/data/forge/tags/block/storage_blocks/redstone.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:redstone_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/entity_type/bosses.json b/src/main/generated/data/forge/tags/entity_type/bosses.json deleted file mode 100644 index 4be4cce831..0000000000 --- a/src/main/generated/data/forge/tags/entity_type/bosses.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "values": [ - "minecraft:ender_dragon", - "minecraft:wither" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/fluid/milk.json b/src/main/generated/data/forge/tags/fluid/milk.json deleted file mode 100644 index 3bab1951b3..0000000000 --- a/src/main/generated/data/forge/tags/fluid/milk.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "values": [ - { - "id": "minecraft:milk", - "required": false - }, - { - "id": "minecraft:flowing_milk", - "required": false - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/armors.json b/src/main/generated/data/forge/tags/item/armors.json deleted file mode 100644 index 1f895dcedf..0000000000 --- a/src/main/generated/data/forge/tags/item/armors.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "values": [ - "#forge:armors/helmets", - "#forge:armors/chestplates", - "#forge:armors/leggings", - "#forge:armors/boots" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/armors/boots.json b/src/main/generated/data/forge/tags/item/armors/boots.json deleted file mode 100644 index b68cf3908d..0000000000 --- a/src/main/generated/data/forge/tags/item/armors/boots.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "values": [ - "minecraft:leather_boots", - "minecraft:chainmail_boots", - "minecraft:iron_boots", - "minecraft:golden_boots", - "minecraft:diamond_boots", - "minecraft:netherite_boots" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/armors/chestplates.json b/src/main/generated/data/forge/tags/item/armors/chestplates.json deleted file mode 100644 index 3f17463c56..0000000000 --- a/src/main/generated/data/forge/tags/item/armors/chestplates.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "values": [ - "minecraft:leather_chestplate", - "minecraft:chainmail_chestplate", - "minecraft:iron_chestplate", - "minecraft:golden_chestplate", - "minecraft:diamond_chestplate", - "minecraft:netherite_chestplate" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/armors/helmets.json b/src/main/generated/data/forge/tags/item/armors/helmets.json deleted file mode 100644 index 9c9b657c45..0000000000 --- a/src/main/generated/data/forge/tags/item/armors/helmets.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "values": [ - "minecraft:leather_helmet", - "minecraft:turtle_helmet", - "minecraft:chainmail_helmet", - "minecraft:iron_helmet", - "minecraft:golden_helmet", - "minecraft:diamond_helmet", - "minecraft:netherite_helmet" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/armors/leggings.json b/src/main/generated/data/forge/tags/item/armors/leggings.json deleted file mode 100644 index 8969323c7c..0000000000 --- a/src/main/generated/data/forge/tags/item/armors/leggings.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "values": [ - "minecraft:leather_leggings", - "minecraft:chainmail_leggings", - "minecraft:iron_leggings", - "minecraft:golden_leggings", - "minecraft:diamond_leggings", - "minecraft:netherite_leggings" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/barrels.json b/src/main/generated/data/forge/tags/item/barrels.json deleted file mode 100644 index 1cfb5782c5..0000000000 --- a/src/main/generated/data/forge/tags/item/barrels.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "#forge:barrels/wooden" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/barrels/wooden.json b/src/main/generated/data/forge/tags/item/barrels/wooden.json deleted file mode 100644 index b07daae1c0..0000000000 --- a/src/main/generated/data/forge/tags/item/barrels/wooden.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:barrel" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/bookshelves.json b/src/main/generated/data/forge/tags/item/bookshelves.json deleted file mode 100644 index c09b2185bd..0000000000 --- a/src/main/generated/data/forge/tags/item/bookshelves.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:bookshelf" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/chests.json b/src/main/generated/data/forge/tags/item/chests.json deleted file mode 100644 index 9afff2b15a..0000000000 --- a/src/main/generated/data/forge/tags/item/chests.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "values": [ - "#forge:chests/ender", - "#forge:chests/trapped", - "#forge:chests/wooden" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/chests/wooden.json b/src/main/generated/data/forge/tags/item/chests/wooden.json deleted file mode 100644 index 86533f935b..0000000000 --- a/src/main/generated/data/forge/tags/item/chests/wooden.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "values": [ - "minecraft:chest", - "minecraft:trapped_chest" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/cobblestone.json b/src/main/generated/data/forge/tags/item/cobblestone.json deleted file mode 100644 index f0ae95b5fc..0000000000 --- a/src/main/generated/data/forge/tags/item/cobblestone.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "values": [ - "#forge:cobblestone/normal", - "#forge:cobblestone/infested", - "#forge:cobblestone/mossy", - "#forge:cobblestone/deepslate" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/crops.json b/src/main/generated/data/forge/tags/item/crops.json deleted file mode 100644 index ae5f647fbe..0000000000 --- a/src/main/generated/data/forge/tags/item/crops.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "values": [ - "#forge:crops/beetroot", - "#forge:crops/carrot", - "#forge:crops/nether_wart", - "#forge:crops/potato", - "#forge:crops/wheat" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/crops/beetroot.json b/src/main/generated/data/forge/tags/item/crops/beetroot.json deleted file mode 100644 index b28b723c4b..0000000000 --- a/src/main/generated/data/forge/tags/item/crops/beetroot.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:beetroot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/crops/carrot.json b/src/main/generated/data/forge/tags/item/crops/carrot.json deleted file mode 100644 index f9630d1347..0000000000 --- a/src/main/generated/data/forge/tags/item/crops/carrot.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:carrot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/crops/nether_wart.json b/src/main/generated/data/forge/tags/item/crops/nether_wart.json deleted file mode 100644 index 5960d80cb9..0000000000 --- a/src/main/generated/data/forge/tags/item/crops/nether_wart.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:nether_wart" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/crops/potato.json b/src/main/generated/data/forge/tags/item/crops/potato.json deleted file mode 100644 index 47fc151cd1..0000000000 --- a/src/main/generated/data/forge/tags/item/crops/potato.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:potato" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/crops/wheat.json b/src/main/generated/data/forge/tags/item/crops/wheat.json deleted file mode 100644 index 498cb445f6..0000000000 --- a/src/main/generated/data/forge/tags/item/crops/wheat.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:wheat" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/dusts.json b/src/main/generated/data/forge/tags/item/dusts.json deleted file mode 100644 index 87f0fee447..0000000000 --- a/src/main/generated/data/forge/tags/item/dusts.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "values": [ - "#forge:dusts/glowstone", - "#forge:dusts/prismarine", - "#forge:dusts/redstone" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/dusts/glowstone.json b/src/main/generated/data/forge/tags/item/dusts/glowstone.json deleted file mode 100644 index 668258c523..0000000000 --- a/src/main/generated/data/forge/tags/item/dusts/glowstone.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:glowstone_dust" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/dusts/prismarine.json b/src/main/generated/data/forge/tags/item/dusts/prismarine.json deleted file mode 100644 index 3773c1f116..0000000000 --- a/src/main/generated/data/forge/tags/item/dusts/prismarine.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:prismarine_shard" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/dusts/redstone.json b/src/main/generated/data/forge/tags/item/dusts/redstone.json deleted file mode 100644 index a096239ec1..0000000000 --- a/src/main/generated/data/forge/tags/item/dusts/redstone.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:redstone" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/eggs.json b/src/main/generated/data/forge/tags/item/eggs.json deleted file mode 100644 index 4cc54b7acb..0000000000 --- a/src/main/generated/data/forge/tags/item/eggs.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "values": [ - "minecraft:egg", - "minecraft:egg" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/enchanting_fuels.json b/src/main/generated/data/forge/tags/item/enchanting_fuels.json index 5ee9fdf84e..9083586809 100644 --- a/src/main/generated/data/forge/tags/item/enchanting_fuels.json +++ b/src/main/generated/data/forge/tags/item/enchanting_fuels.json @@ -1,6 +1,5 @@ { "values": [ - "#c:gems/lapis", - "#forge:gems/lapis" + "#c:gems/lapis" ] } \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/ender_pearls.json b/src/main/generated/data/forge/tags/item/ender_pearls.json deleted file mode 100644 index 135cd1d776..0000000000 --- a/src/main/generated/data/forge/tags/item/ender_pearls.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:ender_pearl" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/feathers.json b/src/main/generated/data/forge/tags/item/feathers.json deleted file mode 100644 index 0a7bf89c15..0000000000 --- a/src/main/generated/data/forge/tags/item/feathers.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "values": [ - "minecraft:feather", - { - "id": "#forge:feathers", - "required": false - }, - "minecraft:feather" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/fence_gates.json b/src/main/generated/data/forge/tags/item/fence_gates.json deleted file mode 100644 index b9a57ac0ef..0000000000 --- a/src/main/generated/data/forge/tags/item/fence_gates.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "#forge:fence_gates/wooden" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/fences.json b/src/main/generated/data/forge/tags/item/fences.json deleted file mode 100644 index 44358edb04..0000000000 --- a/src/main/generated/data/forge/tags/item/fences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "values": [ - "#forge:fences/nether_brick", - "#forge:fences/wooden" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/foods/pie.json b/src/main/generated/data/forge/tags/item/foods/pie.json deleted file mode 100644 index 7589c5f241..0000000000 --- a/src/main/generated/data/forge/tags/item/foods/pie.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:pumpkin_pie" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/gems.json b/src/main/generated/data/forge/tags/item/gems.json deleted file mode 100644 index 60af4bab68..0000000000 --- a/src/main/generated/data/forge/tags/item/gems.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "values": [ - "#forge:gems/amethyst", - "#forge:gems/diamond", - "#forge:gems/emerald", - "#forge:gems/lapis", - "#forge:gems/prismarine", - "#forge:gems/quartz" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/gems/amethyst.json b/src/main/generated/data/forge/tags/item/gems/amethyst.json deleted file mode 100644 index 742ef896d5..0000000000 --- a/src/main/generated/data/forge/tags/item/gems/amethyst.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:amethyst_shard" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/gems/diamond.json b/src/main/generated/data/forge/tags/item/gems/diamond.json deleted file mode 100644 index f44f30dd55..0000000000 --- a/src/main/generated/data/forge/tags/item/gems/diamond.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:diamond" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/gems/emerald.json b/src/main/generated/data/forge/tags/item/gems/emerald.json deleted file mode 100644 index 07a0982118..0000000000 --- a/src/main/generated/data/forge/tags/item/gems/emerald.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:emerald" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/gems/lapis.json b/src/main/generated/data/forge/tags/item/gems/lapis.json deleted file mode 100644 index 614441df46..0000000000 --- a/src/main/generated/data/forge/tags/item/gems/lapis.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:lapis_lazuli" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/gems/prismarine.json b/src/main/generated/data/forge/tags/item/gems/prismarine.json deleted file mode 100644 index 150e7ff711..0000000000 --- a/src/main/generated/data/forge/tags/item/gems/prismarine.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:prismarine_crystals" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/gems/quartz.json b/src/main/generated/data/forge/tags/item/gems/quartz.json deleted file mode 100644 index aad2eef95b..0000000000 --- a/src/main/generated/data/forge/tags/item/gems/quartz.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:quartz" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass.json b/src/main/generated/data/forge/tags/item/glass.json deleted file mode 100644 index fec31169ee..0000000000 --- a/src/main/generated/data/forge/tags/item/glass.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "values": [ - "#forge:glass/colorless", - "#forge:stained_glass", - "#forge:glass/tinted" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass/black.json b/src/main/generated/data/forge/tags/item/glass/black.json deleted file mode 100644 index 9965b5e8b4..0000000000 --- a/src/main/generated/data/forge/tags/item/glass/black.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:black_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass/blue.json b/src/main/generated/data/forge/tags/item/glass/blue.json deleted file mode 100644 index f59e58c6bf..0000000000 --- a/src/main/generated/data/forge/tags/item/glass/blue.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:blue_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass/brown.json b/src/main/generated/data/forge/tags/item/glass/brown.json deleted file mode 100644 index 490015cbb5..0000000000 --- a/src/main/generated/data/forge/tags/item/glass/brown.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:brown_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass/colorless.json b/src/main/generated/data/forge/tags/item/glass/colorless.json deleted file mode 100644 index ac8b5e5086..0000000000 --- a/src/main/generated/data/forge/tags/item/glass/colorless.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass/cyan.json b/src/main/generated/data/forge/tags/item/glass/cyan.json deleted file mode 100644 index 24d84747fa..0000000000 --- a/src/main/generated/data/forge/tags/item/glass/cyan.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:cyan_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass/gray.json b/src/main/generated/data/forge/tags/item/glass/gray.json deleted file mode 100644 index 2f309170ca..0000000000 --- a/src/main/generated/data/forge/tags/item/glass/gray.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:gray_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass/green.json b/src/main/generated/data/forge/tags/item/glass/green.json deleted file mode 100644 index d7946c1aca..0000000000 --- a/src/main/generated/data/forge/tags/item/glass/green.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:green_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass/light_blue.json b/src/main/generated/data/forge/tags/item/glass/light_blue.json deleted file mode 100644 index dc8e6b7148..0000000000 --- a/src/main/generated/data/forge/tags/item/glass/light_blue.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:light_blue_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass/light_gray.json b/src/main/generated/data/forge/tags/item/glass/light_gray.json deleted file mode 100644 index f165a46c90..0000000000 --- a/src/main/generated/data/forge/tags/item/glass/light_gray.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:light_gray_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass/lime.json b/src/main/generated/data/forge/tags/item/glass/lime.json deleted file mode 100644 index b6bb1d9415..0000000000 --- a/src/main/generated/data/forge/tags/item/glass/lime.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:lime_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass/magenta.json b/src/main/generated/data/forge/tags/item/glass/magenta.json deleted file mode 100644 index aa6a4825e8..0000000000 --- a/src/main/generated/data/forge/tags/item/glass/magenta.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:magenta_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass/orange.json b/src/main/generated/data/forge/tags/item/glass/orange.json deleted file mode 100644 index 9322f51fe4..0000000000 --- a/src/main/generated/data/forge/tags/item/glass/orange.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:orange_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass/pink.json b/src/main/generated/data/forge/tags/item/glass/pink.json deleted file mode 100644 index 58b65891fc..0000000000 --- a/src/main/generated/data/forge/tags/item/glass/pink.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:pink_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass/purple.json b/src/main/generated/data/forge/tags/item/glass/purple.json deleted file mode 100644 index d75a9e7308..0000000000 --- a/src/main/generated/data/forge/tags/item/glass/purple.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:purple_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass/red.json b/src/main/generated/data/forge/tags/item/glass/red.json deleted file mode 100644 index 72af78c029..0000000000 --- a/src/main/generated/data/forge/tags/item/glass/red.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:red_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass/silica.json b/src/main/generated/data/forge/tags/item/glass/silica.json deleted file mode 100644 index 3465b3884b..0000000000 --- a/src/main/generated/data/forge/tags/item/glass/silica.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "values": [ - "minecraft:glass", - "minecraft:white_stained_glass", - "minecraft:orange_stained_glass", - "minecraft:magenta_stained_glass", - "minecraft:light_blue_stained_glass", - "minecraft:yellow_stained_glass", - "minecraft:lime_stained_glass", - "minecraft:pink_stained_glass", - "minecraft:gray_stained_glass", - "minecraft:light_gray_stained_glass", - "minecraft:cyan_stained_glass", - "minecraft:purple_stained_glass", - "minecraft:blue_stained_glass", - "minecraft:brown_stained_glass", - "minecraft:green_stained_glass", - "minecraft:red_stained_glass", - "minecraft:black_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass/tinted.json b/src/main/generated/data/forge/tags/item/glass/tinted.json deleted file mode 100644 index 4075a1556b..0000000000 --- a/src/main/generated/data/forge/tags/item/glass/tinted.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:tinted_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass/white.json b/src/main/generated/data/forge/tags/item/glass/white.json deleted file mode 100644 index fb180e703e..0000000000 --- a/src/main/generated/data/forge/tags/item/glass/white.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:white_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass/yellow.json b/src/main/generated/data/forge/tags/item/glass/yellow.json deleted file mode 100644 index 0831bea4cc..0000000000 --- a/src/main/generated/data/forge/tags/item/glass/yellow.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:yellow_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass_panes.json b/src/main/generated/data/forge/tags/item/glass_panes.json deleted file mode 100644 index 4b95330d4f..0000000000 --- a/src/main/generated/data/forge/tags/item/glass_panes.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "values": [ - "#forge:glass_panes/colorless", - "#forge:stained_glass_panes" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass_panes/black.json b/src/main/generated/data/forge/tags/item/glass_panes/black.json deleted file mode 100644 index ebda555dcd..0000000000 --- a/src/main/generated/data/forge/tags/item/glass_panes/black.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:black_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass_panes/blue.json b/src/main/generated/data/forge/tags/item/glass_panes/blue.json deleted file mode 100644 index 2762890aa9..0000000000 --- a/src/main/generated/data/forge/tags/item/glass_panes/blue.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:blue_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass_panes/brown.json b/src/main/generated/data/forge/tags/item/glass_panes/brown.json deleted file mode 100644 index 0b5b727491..0000000000 --- a/src/main/generated/data/forge/tags/item/glass_panes/brown.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:brown_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass_panes/colorless.json b/src/main/generated/data/forge/tags/item/glass_panes/colorless.json deleted file mode 100644 index eb5756f964..0000000000 --- a/src/main/generated/data/forge/tags/item/glass_panes/colorless.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass_panes/cyan.json b/src/main/generated/data/forge/tags/item/glass_panes/cyan.json deleted file mode 100644 index 9913e90a96..0000000000 --- a/src/main/generated/data/forge/tags/item/glass_panes/cyan.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:cyan_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass_panes/gray.json b/src/main/generated/data/forge/tags/item/glass_panes/gray.json deleted file mode 100644 index 9fe30b26a8..0000000000 --- a/src/main/generated/data/forge/tags/item/glass_panes/gray.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:gray_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass_panes/green.json b/src/main/generated/data/forge/tags/item/glass_panes/green.json deleted file mode 100644 index ab91321028..0000000000 --- a/src/main/generated/data/forge/tags/item/glass_panes/green.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:green_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass_panes/light_blue.json b/src/main/generated/data/forge/tags/item/glass_panes/light_blue.json deleted file mode 100644 index cd6d399022..0000000000 --- a/src/main/generated/data/forge/tags/item/glass_panes/light_blue.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:light_blue_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass_panes/light_gray.json b/src/main/generated/data/forge/tags/item/glass_panes/light_gray.json deleted file mode 100644 index 7be6a4ce81..0000000000 --- a/src/main/generated/data/forge/tags/item/glass_panes/light_gray.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:light_gray_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass_panes/lime.json b/src/main/generated/data/forge/tags/item/glass_panes/lime.json deleted file mode 100644 index 46dec64b22..0000000000 --- a/src/main/generated/data/forge/tags/item/glass_panes/lime.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:lime_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass_panes/magenta.json b/src/main/generated/data/forge/tags/item/glass_panes/magenta.json deleted file mode 100644 index 7504bc3fa3..0000000000 --- a/src/main/generated/data/forge/tags/item/glass_panes/magenta.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:magenta_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass_panes/orange.json b/src/main/generated/data/forge/tags/item/glass_panes/orange.json deleted file mode 100644 index 1c47e34616..0000000000 --- a/src/main/generated/data/forge/tags/item/glass_panes/orange.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:orange_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass_panes/pink.json b/src/main/generated/data/forge/tags/item/glass_panes/pink.json deleted file mode 100644 index 28e36b973f..0000000000 --- a/src/main/generated/data/forge/tags/item/glass_panes/pink.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:pink_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass_panes/purple.json b/src/main/generated/data/forge/tags/item/glass_panes/purple.json deleted file mode 100644 index a3cff33a14..0000000000 --- a/src/main/generated/data/forge/tags/item/glass_panes/purple.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:purple_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass_panes/red.json b/src/main/generated/data/forge/tags/item/glass_panes/red.json deleted file mode 100644 index 5edd855d71..0000000000 --- a/src/main/generated/data/forge/tags/item/glass_panes/red.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:red_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass_panes/white.json b/src/main/generated/data/forge/tags/item/glass_panes/white.json deleted file mode 100644 index b514a2839f..0000000000 --- a/src/main/generated/data/forge/tags/item/glass_panes/white.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:white_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/glass_panes/yellow.json b/src/main/generated/data/forge/tags/item/glass_panes/yellow.json deleted file mode 100644 index a293eb9dc8..0000000000 --- a/src/main/generated/data/forge/tags/item/glass_panes/yellow.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:yellow_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/heads.json b/src/main/generated/data/forge/tags/item/heads.json deleted file mode 100644 index 430af37ee5..0000000000 --- a/src/main/generated/data/forge/tags/item/heads.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "values": [ - "minecraft:creeper_head", - "minecraft:dragon_head", - "minecraft:player_head", - "minecraft:skeleton_skull", - "minecraft:wither_skeleton_skull", - "minecraft:zombie_head" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/ingots.json b/src/main/generated/data/forge/tags/item/ingots.json deleted file mode 100644 index e9756bb39c..0000000000 --- a/src/main/generated/data/forge/tags/item/ingots.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "values": [ - "#forge:ingots/brick", - "#forge:ingots/copper", - "#forge:ingots/gold", - "#forge:ingots/iron", - "#forge:ingots/netherite", - "#forge:ingots/nether_brick" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/ingots/brick.json b/src/main/generated/data/forge/tags/item/ingots/brick.json deleted file mode 100644 index 8f632e499a..0000000000 --- a/src/main/generated/data/forge/tags/item/ingots/brick.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:brick" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/ingots/copper.json b/src/main/generated/data/forge/tags/item/ingots/copper.json deleted file mode 100644 index 1cc1f065c5..0000000000 --- a/src/main/generated/data/forge/tags/item/ingots/copper.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:copper_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/ingots/gold.json b/src/main/generated/data/forge/tags/item/ingots/gold.json deleted file mode 100644 index 07e9f66a30..0000000000 --- a/src/main/generated/data/forge/tags/item/ingots/gold.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:gold_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/ingots/iron.json b/src/main/generated/data/forge/tags/item/ingots/iron.json deleted file mode 100644 index c656021bdb..0000000000 --- a/src/main/generated/data/forge/tags/item/ingots/iron.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:iron_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/ingots/nether_brick.json b/src/main/generated/data/forge/tags/item/ingots/nether_brick.json deleted file mode 100644 index ec7ed3ee9a..0000000000 --- a/src/main/generated/data/forge/tags/item/ingots/nether_brick.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:nether_brick" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/ingots/netherite.json b/src/main/generated/data/forge/tags/item/ingots/netherite.json deleted file mode 100644 index bd6929df75..0000000000 --- a/src/main/generated/data/forge/tags/item/ingots/netherite.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:netherite_ingot" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/leather.json b/src/main/generated/data/forge/tags/item/leather.json deleted file mode 100644 index 71b797d35b..0000000000 --- a/src/main/generated/data/forge/tags/item/leather.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:leather" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/mushrooms.json b/src/main/generated/data/forge/tags/item/mushrooms.json deleted file mode 100644 index 67f853554a..0000000000 --- a/src/main/generated/data/forge/tags/item/mushrooms.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "values": [ - "minecraft:brown_mushroom", - "minecraft:red_mushroom", - { - "id": "#forge:mushrooms", - "required": false - }, - "minecraft:brown_mushroom", - "minecraft:red_mushroom" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/nether_stars.json b/src/main/generated/data/forge/tags/item/nether_stars.json deleted file mode 100644 index e28072445c..0000000000 --- a/src/main/generated/data/forge/tags/item/nether_stars.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "values": [ - "minecraft:nether_star", - { - "id": "#forge:nether_stars", - "required": false - }, - "minecraft:nether_star" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/nuggets.json b/src/main/generated/data/forge/tags/item/nuggets.json deleted file mode 100644 index fb0dc26ecd..0000000000 --- a/src/main/generated/data/forge/tags/item/nuggets.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "values": [ - "#forge:nuggets/iron", - "#forge:nuggets/gold" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/nuggets/gold.json b/src/main/generated/data/forge/tags/item/nuggets/gold.json deleted file mode 100644 index 4d94345957..0000000000 --- a/src/main/generated/data/forge/tags/item/nuggets/gold.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:gold_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/nuggets/iron.json b/src/main/generated/data/forge/tags/item/nuggets/iron.json deleted file mode 100644 index cbd20ac6e4..0000000000 --- a/src/main/generated/data/forge/tags/item/nuggets/iron.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:iron_nugget" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/obsidian.json b/src/main/generated/data/forge/tags/item/obsidian.json deleted file mode 100644 index 170248454b..0000000000 --- a/src/main/generated/data/forge/tags/item/obsidian.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:obsidian" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/ores.json b/src/main/generated/data/forge/tags/item/ores.json deleted file mode 100644 index 2c4beabc55..0000000000 --- a/src/main/generated/data/forge/tags/item/ores.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "values": [ - "#forge:ores/coal", - "#forge:ores/copper", - "#forge:ores/diamond", - "#forge:ores/emerald", - "#forge:ores/gold", - "#forge:ores/iron", - "#forge:ores/lapis", - "#forge:ores/redstone", - "#forge:ores/quartz", - "#forge:ores/netherite_scrap" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/ores/netherite_scrap.json b/src/main/generated/data/forge/tags/item/ores/netherite_scrap.json deleted file mode 100644 index 910d1fb8e6..0000000000 --- a/src/main/generated/data/forge/tags/item/ores/netherite_scrap.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:ancient_debris" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/ores/quartz.json b/src/main/generated/data/forge/tags/item/ores/quartz.json deleted file mode 100644 index f0bc7a4657..0000000000 --- a/src/main/generated/data/forge/tags/item/ores/quartz.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:nether_quartz_ore" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/raw_materials.json b/src/main/generated/data/forge/tags/item/raw_materials.json deleted file mode 100644 index 35208231e0..0000000000 --- a/src/main/generated/data/forge/tags/item/raw_materials.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "values": [ - "#forge:raw_materials/copper", - "#forge:raw_materials/gold", - "#forge:raw_materials/iron" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/raw_materials/copper.json b/src/main/generated/data/forge/tags/item/raw_materials/copper.json deleted file mode 100644 index 3e03ab9ca8..0000000000 --- a/src/main/generated/data/forge/tags/item/raw_materials/copper.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:raw_copper" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/raw_materials/gold.json b/src/main/generated/data/forge/tags/item/raw_materials/gold.json deleted file mode 100644 index 3d1252e5f9..0000000000 --- a/src/main/generated/data/forge/tags/item/raw_materials/gold.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:raw_gold" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/raw_materials/iron.json b/src/main/generated/data/forge/tags/item/raw_materials/iron.json deleted file mode 100644 index 8f9af48d8e..0000000000 --- a/src/main/generated/data/forge/tags/item/raw_materials/iron.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:raw_iron" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/rods.json b/src/main/generated/data/forge/tags/item/rods.json deleted file mode 100644 index 11b8cb3844..0000000000 --- a/src/main/generated/data/forge/tags/item/rods.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "values": [ - "#forge:rods/blaze", - "#forge:rods/wooden" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/rods/blaze.json b/src/main/generated/data/forge/tags/item/rods/blaze.json deleted file mode 100644 index 5d2eff8311..0000000000 --- a/src/main/generated/data/forge/tags/item/rods/blaze.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:blaze_rod" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/rods/wooden.json b/src/main/generated/data/forge/tags/item/rods/wooden.json deleted file mode 100644 index 019b63dd31..0000000000 --- a/src/main/generated/data/forge/tags/item/rods/wooden.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:stick" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/sand.json b/src/main/generated/data/forge/tags/item/sand.json deleted file mode 100644 index 8b04916283..0000000000 --- a/src/main/generated/data/forge/tags/item/sand.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "values": [ - "#forge:sand/colorless", - "#forge:sand/red" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/sandstone.json b/src/main/generated/data/forge/tags/item/sandstone.json deleted file mode 100644 index bb7fb03ee3..0000000000 --- a/src/main/generated/data/forge/tags/item/sandstone.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "values": [ - "minecraft:sandstone", - "minecraft:cut_sandstone", - "minecraft:chiseled_sandstone", - "minecraft:smooth_sandstone", - "minecraft:red_sandstone", - "minecraft:cut_red_sandstone", - "minecraft:chiseled_red_sandstone", - "minecraft:smooth_red_sandstone" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/seeds.json b/src/main/generated/data/forge/tags/item/seeds.json deleted file mode 100644 index 756a7a4dab..0000000000 --- a/src/main/generated/data/forge/tags/item/seeds.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "values": [ - "#forge:seeds/beetroot", - "#forge:seeds/melon", - "#forge:seeds/pumpkin", - "#forge:seeds/wheat", - "#forge:seeds/beetroot", - "#forge:seeds/melon", - "#forge:seeds/pumpkin", - "#forge:seeds/wheat" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/shears.json b/src/main/generated/data/forge/tags/item/shears.json deleted file mode 100644 index 2400078166..0000000000 --- a/src/main/generated/data/forge/tags/item/shears.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:shears" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/slimeballs.json b/src/main/generated/data/forge/tags/item/slimeballs.json deleted file mode 100644 index 533c25d916..0000000000 --- a/src/main/generated/data/forge/tags/item/slimeballs.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:slime_ball" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/stained_glass.json b/src/main/generated/data/forge/tags/item/stained_glass.json deleted file mode 100644 index 2db7aef9df..0000000000 --- a/src/main/generated/data/forge/tags/item/stained_glass.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "values": [ - "minecraft:white_stained_glass", - "minecraft:orange_stained_glass", - "minecraft:magenta_stained_glass", - "minecraft:light_blue_stained_glass", - "minecraft:yellow_stained_glass", - "minecraft:lime_stained_glass", - "minecraft:pink_stained_glass", - "minecraft:gray_stained_glass", - "minecraft:light_gray_stained_glass", - "minecraft:cyan_stained_glass", - "minecraft:purple_stained_glass", - "minecraft:blue_stained_glass", - "minecraft:brown_stained_glass", - "minecraft:green_stained_glass", - "minecraft:red_stained_glass", - "minecraft:black_stained_glass" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/stained_glass_panes.json b/src/main/generated/data/forge/tags/item/stained_glass_panes.json deleted file mode 100644 index 65f2adb8f9..0000000000 --- a/src/main/generated/data/forge/tags/item/stained_glass_panes.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "values": [ - "minecraft:white_stained_glass_pane", - "minecraft:orange_stained_glass_pane", - "minecraft:magenta_stained_glass_pane", - "minecraft:light_blue_stained_glass_pane", - "minecraft:yellow_stained_glass_pane", - "minecraft:lime_stained_glass_pane", - "minecraft:pink_stained_glass_pane", - "minecraft:gray_stained_glass_pane", - "minecraft:light_gray_stained_glass_pane", - "minecraft:cyan_stained_glass_pane", - "minecraft:purple_stained_glass_pane", - "minecraft:blue_stained_glass_pane", - "minecraft:brown_stained_glass_pane", - "minecraft:green_stained_glass_pane", - "minecraft:red_stained_glass_pane", - "minecraft:black_stained_glass_pane" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/stone.json b/src/main/generated/data/forge/tags/item/stone.json deleted file mode 100644 index 958f6e25c7..0000000000 --- a/src/main/generated/data/forge/tags/item/stone.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "values": [ - "minecraft:andesite", - "minecraft:diorite", - "minecraft:granite", - "minecraft:infested_stone", - "minecraft:stone", - "minecraft:polished_andesite", - "minecraft:polished_diorite", - "minecraft:polished_granite", - "minecraft:deepslate", - "minecraft:polished_deepslate", - "minecraft:infested_deepslate", - "minecraft:tuff" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/storage_blocks.json b/src/main/generated/data/forge/tags/item/storage_blocks.json deleted file mode 100644 index 5f2a7d417e..0000000000 --- a/src/main/generated/data/forge/tags/item/storage_blocks.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "values": [ - "#forge:storage_blocks/amethyst", - "#forge:storage_blocks/coal", - "#forge:storage_blocks/copper", - "#forge:storage_blocks/diamond", - "#forge:storage_blocks/emerald", - "#forge:storage_blocks/gold", - "#forge:storage_blocks/iron", - "#forge:storage_blocks/lapis", - "#forge:storage_blocks/quartz", - "#forge:storage_blocks/raw_copper", - "#forge:storage_blocks/raw_gold", - "#forge:storage_blocks/raw_iron", - "#forge:storage_blocks/redstone", - "#forge:storage_blocks/netherite" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/storage_blocks/coal.json b/src/main/generated/data/forge/tags/item/storage_blocks/coal.json deleted file mode 100644 index 4b7921705b..0000000000 --- a/src/main/generated/data/forge/tags/item/storage_blocks/coal.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:coal_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/storage_blocks/copper.json b/src/main/generated/data/forge/tags/item/storage_blocks/copper.json deleted file mode 100644 index 015bec70c3..0000000000 --- a/src/main/generated/data/forge/tags/item/storage_blocks/copper.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:copper_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/storage_blocks/diamond.json b/src/main/generated/data/forge/tags/item/storage_blocks/diamond.json deleted file mode 100644 index acd7f52de5..0000000000 --- a/src/main/generated/data/forge/tags/item/storage_blocks/diamond.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:diamond_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/storage_blocks/emerald.json b/src/main/generated/data/forge/tags/item/storage_blocks/emerald.json deleted file mode 100644 index 152063ec6c..0000000000 --- a/src/main/generated/data/forge/tags/item/storage_blocks/emerald.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:emerald_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/storage_blocks/gold.json b/src/main/generated/data/forge/tags/item/storage_blocks/gold.json deleted file mode 100644 index 546dde03c9..0000000000 --- a/src/main/generated/data/forge/tags/item/storage_blocks/gold.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:gold_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/storage_blocks/iron.json b/src/main/generated/data/forge/tags/item/storage_blocks/iron.json deleted file mode 100644 index 01fb2965f2..0000000000 --- a/src/main/generated/data/forge/tags/item/storage_blocks/iron.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:iron_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/storage_blocks/lapis.json b/src/main/generated/data/forge/tags/item/storage_blocks/lapis.json deleted file mode 100644 index f4ca82bbd4..0000000000 --- a/src/main/generated/data/forge/tags/item/storage_blocks/lapis.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:lapis_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/storage_blocks/netherite.json b/src/main/generated/data/forge/tags/item/storage_blocks/netherite.json deleted file mode 100644 index 83433d44eb..0000000000 --- a/src/main/generated/data/forge/tags/item/storage_blocks/netherite.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:netherite_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/storage_blocks/raw_copper.json b/src/main/generated/data/forge/tags/item/storage_blocks/raw_copper.json deleted file mode 100644 index 1a21e230ef..0000000000 --- a/src/main/generated/data/forge/tags/item/storage_blocks/raw_copper.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:raw_copper_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/storage_blocks/raw_gold.json b/src/main/generated/data/forge/tags/item/storage_blocks/raw_gold.json deleted file mode 100644 index 80781ce667..0000000000 --- a/src/main/generated/data/forge/tags/item/storage_blocks/raw_gold.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:raw_gold_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/storage_blocks/raw_iron.json b/src/main/generated/data/forge/tags/item/storage_blocks/raw_iron.json deleted file mode 100644 index 13ed9fc651..0000000000 --- a/src/main/generated/data/forge/tags/item/storage_blocks/raw_iron.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:raw_iron_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/storage_blocks/redstone.json b/src/main/generated/data/forge/tags/item/storage_blocks/redstone.json deleted file mode 100644 index f5fd89c541..0000000000 --- a/src/main/generated/data/forge/tags/item/storage_blocks/redstone.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:redstone_block" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/string.json b/src/main/generated/data/forge/tags/item/string.json deleted file mode 100644 index d018256cf8..0000000000 --- a/src/main/generated/data/forge/tags/item/string.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:string" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/tools.json b/src/main/generated/data/forge/tags/item/tools.json deleted file mode 100644 index acbfe2ae9d..0000000000 --- a/src/main/generated/data/forge/tags/item/tools.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "values": [ - "#minecraft:swords", - "#minecraft:axes", - "#minecraft:pickaxes", - "#minecraft:shovels", - "#minecraft:hoes", - "#forge:tools/shields", - "#forge:tools/bows", - "#forge:tools/crossbows", - "#forge:tools/fishing_rods", - "#forge:tools/tridents" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/tools/bows.json b/src/main/generated/data/forge/tags/item/tools/bows.json deleted file mode 100644 index a1c8a443dc..0000000000 --- a/src/main/generated/data/forge/tags/item/tools/bows.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:bow" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/tools/crossbows.json b/src/main/generated/data/forge/tags/item/tools/crossbows.json deleted file mode 100644 index 848f97bc22..0000000000 --- a/src/main/generated/data/forge/tags/item/tools/crossbows.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:crossbow" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/tools/fishing_rods.json b/src/main/generated/data/forge/tags/item/tools/fishing_rods.json deleted file mode 100644 index e97941e9dc..0000000000 --- a/src/main/generated/data/forge/tags/item/tools/fishing_rods.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:fishing_rod" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/tools/shields.json b/src/main/generated/data/forge/tags/item/tools/shields.json deleted file mode 100644 index 0f2454ce04..0000000000 --- a/src/main/generated/data/forge/tags/item/tools/shields.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:shield" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/item/tools/tridents.json b/src/main/generated/data/forge/tags/item/tools/tridents.json deleted file mode 100644 index 7a2c450bc7..0000000000 --- a/src/main/generated/data/forge/tags/item/tools/tridents.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:trident" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_cave.json b/src/main/generated/data/forge/tags/worldgen/biome/is_cave.json deleted file mode 100644 index 21a70cfeec..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_cave.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "values": [ - "minecraft:lush_caves", - "minecraft:dripstone_caves", - "minecraft:deep_dark" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_cold.json b/src/main/generated/data/forge/tags/worldgen/biome/is_cold.json deleted file mode 100644 index 75f9c80b3d..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_cold.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "values": [ - "#forge:is_cold/overworld", - { - "id": "#forge:is_cold/nether", - "required": false - }, - "#forge:is_cold/end" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_cold/end.json b/src/main/generated/data/forge/tags/worldgen/biome/is_cold/end.json deleted file mode 100644 index 73d3eff3b0..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_cold/end.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "values": [ - "minecraft:the_end", - "minecraft:small_end_islands", - "minecraft:end_midlands", - "minecraft:end_highlands", - "minecraft:end_barrens" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_cold/overworld.json b/src/main/generated/data/forge/tags/worldgen/biome/is_cold/overworld.json deleted file mode 100644 index 4d7cf8a957..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_cold/overworld.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "values": [ - "minecraft:taiga", - "minecraft:frozen_ocean", - "minecraft:frozen_river", - "minecraft:snowy_plains", - "minecraft:snowy_beach", - "minecraft:snowy_taiga", - "minecraft:old_growth_pine_taiga", - "minecraft:grove", - "minecraft:snowy_slopes", - "minecraft:jagged_peaks", - "minecraft:frozen_peaks", - "minecraft:cold_ocean", - "minecraft:deep_cold_ocean", - "minecraft:deep_frozen_ocean", - "minecraft:ice_spikes" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_dense.json b/src/main/generated/data/forge/tags/worldgen/biome/is_dense.json deleted file mode 100644 index fa16b4cc6b..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_dense.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "values": [ - "#forge:is_dense/overworld", - { - "id": "#forge:is_dense/nether", - "required": false - }, - { - "id": "#forge:is_dense/end", - "required": false - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_dense/overworld.json b/src/main/generated/data/forge/tags/worldgen/biome/is_dense/overworld.json deleted file mode 100644 index 9491a24bc8..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_dense/overworld.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "values": [ - "minecraft:jungle", - "minecraft:dark_forest", - "minecraft:old_growth_birch_forest", - "minecraft:old_growth_spruce_taiga" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_desert.json b/src/main/generated/data/forge/tags/worldgen/biome/is_desert.json deleted file mode 100644 index f1a8ccb642..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_desert.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:desert" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_dry.json b/src/main/generated/data/forge/tags/worldgen/biome/is_dry.json deleted file mode 100644 index 28d35de201..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_dry.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "values": [ - "#forge:is_dry/overworld", - "#forge:is_dry/nether", - "#forge:is_dry/end" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_dry/end.json b/src/main/generated/data/forge/tags/worldgen/biome/is_dry/end.json deleted file mode 100644 index 73d3eff3b0..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_dry/end.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "values": [ - "minecraft:the_end", - "minecraft:small_end_islands", - "minecraft:end_midlands", - "minecraft:end_highlands", - "minecraft:end_barrens" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_dry/nether.json b/src/main/generated/data/forge/tags/worldgen/biome/is_dry/nether.json deleted file mode 100644 index 340c9d161b..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_dry/nether.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "values": [ - "minecraft:nether_wastes", - "minecraft:soul_sand_valley", - "minecraft:crimson_forest", - "minecraft:warped_forest", - "minecraft:basalt_deltas" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_hot.json b/src/main/generated/data/forge/tags/worldgen/biome/is_hot.json deleted file mode 100644 index 6559f017e6..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_hot.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "values": [ - "#forge:is_hot/overworld", - "#forge:is_hot/nether", - { - "id": "#forge:is_hot/end", - "required": false - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_hot/nether.json b/src/main/generated/data/forge/tags/worldgen/biome/is_hot/nether.json deleted file mode 100644 index 340c9d161b..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_hot/nether.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "values": [ - "minecraft:nether_wastes", - "minecraft:soul_sand_valley", - "minecraft:crimson_forest", - "minecraft:warped_forest", - "minecraft:basalt_deltas" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_hot/overworld.json b/src/main/generated/data/forge/tags/worldgen/biome/is_hot/overworld.json deleted file mode 100644 index f283627eb9..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_hot/overworld.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "values": [ - "minecraft:desert", - "minecraft:jungle", - "minecraft:sparse_jungle", - "minecraft:savanna", - "minecraft:savanna_plateau", - "minecraft:stony_peaks", - "minecraft:warm_ocean", - "minecraft:windswept_savanna", - "minecraft:eroded_badlands", - "minecraft:bamboo_jungle", - "minecraft:mangrove_swamp" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_mountain.json b/src/main/generated/data/forge/tags/worldgen/biome/is_mountain.json deleted file mode 100644 index 859b350079..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_mountain.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "values": [ - "#forge:is_peak", - "#forge:is_slope" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_mushroom.json b/src/main/generated/data/forge/tags/worldgen/biome/is_mushroom.json deleted file mode 100644 index 05d85d951d..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_mushroom.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:mushroom_fields" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_peak.json b/src/main/generated/data/forge/tags/worldgen/biome/is_peak.json deleted file mode 100644 index c9597b86d0..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_peak.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "values": [ - "minecraft:jagged_peaks", - "minecraft:frozen_peaks", - "minecraft:stony_peaks" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_plains.json b/src/main/generated/data/forge/tags/worldgen/biome/is_plains.json deleted file mode 100644 index 9028b691af..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_plains.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "values": [ - "minecraft:plains", - "minecraft:snowy_plains", - "minecraft:meadow", - "minecraft:sunflower_plains" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_sandy.json b/src/main/generated/data/forge/tags/worldgen/biome/is_sandy.json deleted file mode 100644 index 1dd432aa43..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_sandy.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "values": [ - "minecraft:desert", - "minecraft:badlands", - "minecraft:wooded_badlands", - "minecraft:eroded_badlands", - "minecraft:beach", - "minecraft:desert", - "minecraft:beach", - "minecraft:badlands", - "minecraft:wooded_badlands" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_slope.json b/src/main/generated/data/forge/tags/worldgen/biome/is_slope.json deleted file mode 100644 index 453f828613..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_slope.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "values": [ - "minecraft:savanna_plateau", - "minecraft:wooded_badlands", - "minecraft:meadow", - "minecraft:grove", - "minecraft:snowy_slopes" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_snowy.json b/src/main/generated/data/forge/tags/worldgen/biome/is_snowy.json deleted file mode 100644 index e1310e08ee..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_snowy.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "values": [ - "minecraft:frozen_ocean", - "minecraft:frozen_river", - "minecraft:snowy_plains", - "minecraft:snowy_beach", - "minecraft:snowy_taiga", - "minecraft:grove", - "minecraft:snowy_slopes", - "minecraft:jagged_peaks", - "minecraft:frozen_peaks", - "minecraft:ice_spikes" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_sparse.json b/src/main/generated/data/forge/tags/worldgen/biome/is_sparse.json deleted file mode 100644 index 7680132431..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_sparse.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "values": [ - "#forge:is_sparse/overworld", - { - "id": "#forge:is_sparse/nether", - "required": false - }, - { - "id": "#forge:is_sparse/end", - "required": false - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_sparse/overworld.json b/src/main/generated/data/forge/tags/worldgen/biome/is_sparse/overworld.json deleted file mode 100644 index e9652824e6..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_sparse/overworld.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "values": [ - "minecraft:windswept_forest", - "minecraft:savanna", - "minecraft:savanna_plateau", - "minecraft:wooded_badlands", - "minecraft:snowy_slopes", - "minecraft:jagged_peaks", - "minecraft:frozen_peaks", - "minecraft:windswept_gravelly_hills", - "minecraft:windswept_savanna", - "minecraft:eroded_badlands", - "minecraft:dripstone_caves" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_underground.json b/src/main/generated/data/forge/tags/worldgen/biome/is_underground.json deleted file mode 100644 index c55f2d526e..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_underground.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "#forge:is_cave" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_void.json b/src/main/generated/data/forge/tags/worldgen/biome/is_void.json deleted file mode 100644 index f55aea6671..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_void.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:the_void" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_wasteland.json b/src/main/generated/data/forge/tags/worldgen/biome/is_wasteland.json deleted file mode 100644 index 05a22cb3c9..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_wasteland.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "minecraft:snowy_plains" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_water.json b/src/main/generated/data/forge/tags/worldgen/biome/is_water.json deleted file mode 100644 index 800c17196b..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_water.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "values": [ - "#minecraft:is_ocean", - "#minecraft:is_river" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_wet.json b/src/main/generated/data/forge/tags/worldgen/biome/is_wet.json deleted file mode 100644 index b355261275..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_wet.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "values": [ - "#forge:is_wet/overworld", - { - "id": "#forge:is_wet/nether", - "required": false - }, - { - "id": "#forge:is_wet/end", - "required": false - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/forge/tags/worldgen/biome/is_wet/overworld.json b/src/main/generated/data/forge/tags/worldgen/biome/is_wet/overworld.json deleted file mode 100644 index e5e5a885c5..0000000000 --- a/src/main/generated/data/forge/tags/worldgen/biome/is_wet/overworld.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "values": [ - "minecraft:swamp", - "minecraft:jungle", - "minecraft:sparse_jungle", - "minecraft:beach", - "minecraft:bamboo_jungle", - "minecraft:lush_caves", - "minecraft:mangrove_swamp" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/acacia_chest_boat.json b/src/main/generated/data/minecraft/recipe/acacia_chest_boat.json index 8b2b099633..ccdd3c5ead 100644 --- a/src/main/generated/data/minecraft/recipe/acacia_chest_boat.json +++ b/src/main/generated/data/minecraft/recipe/acacia_chest_boat.json @@ -7,7 +7,6 @@ "minecraft:acacia_boat" ], "result": { - "count": 1, "id": "minecraft:acacia_chest_boat" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/acacia_fence_gate.json b/src/main/generated/data/minecraft/recipe/acacia_fence_gate.json index af366bf332..e685099595 100644 --- a/src/main/generated/data/minecraft/recipe/acacia_fence_gate.json +++ b/src/main/generated/data/minecraft/recipe/acacia_fence_gate.json @@ -11,7 +11,6 @@ "#W#" ], "result": { - "count": 1, "id": "minecraft:acacia_fence_gate" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/andesite.json b/src/main/generated/data/minecraft/recipe/andesite.json index a73dac1c38..5dfdf07cd9 100644 --- a/src/main/generated/data/minecraft/recipe/andesite.json +++ b/src/main/generated/data/minecraft/recipe/andesite.json @@ -3,7 +3,7 @@ "category": "building", "ingredients": [ "minecraft:diorite", - "#forge:cobblestone/normal" + "#c:cobblestones/normal" ], "result": { "count": 2, diff --git a/src/main/generated/data/minecraft/recipe/anvil.json b/src/main/generated/data/minecraft/recipe/anvil.json index e50cd1febe..b6bbfbf821 100644 --- a/src/main/generated/data/minecraft/recipe/anvil.json +++ b/src/main/generated/data/minecraft/recipe/anvil.json @@ -11,7 +11,6 @@ "iii" ], "result": { - "count": 1, "id": "minecraft:anvil" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/armor_stand.json b/src/main/generated/data/minecraft/recipe/armor_stand.json index a3ad60d12c..938c8d80c4 100644 --- a/src/main/generated/data/minecraft/recipe/armor_stand.json +++ b/src/main/generated/data/minecraft/recipe/armor_stand.json @@ -11,7 +11,6 @@ "/_/" ], "result": { - "count": 1, "id": "minecraft:armor_stand" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/bamboo_chest_raft.json b/src/main/generated/data/minecraft/recipe/bamboo_chest_raft.json index 3715812774..eb6bf0e6c7 100644 --- a/src/main/generated/data/minecraft/recipe/bamboo_chest_raft.json +++ b/src/main/generated/data/minecraft/recipe/bamboo_chest_raft.json @@ -7,7 +7,6 @@ "minecraft:bamboo_raft" ], "result": { - "count": 1, "id": "minecraft:bamboo_chest_raft" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/bamboo_fence_gate.json b/src/main/generated/data/minecraft/recipe/bamboo_fence_gate.json index 444acda7be..4156b7fec1 100644 --- a/src/main/generated/data/minecraft/recipe/bamboo_fence_gate.json +++ b/src/main/generated/data/minecraft/recipe/bamboo_fence_gate.json @@ -11,7 +11,6 @@ "#W#" ], "result": { - "count": 1, "id": "minecraft:bamboo_fence_gate" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/birch_chest_boat.json b/src/main/generated/data/minecraft/recipe/birch_chest_boat.json index 8e41afa74c..fb964e091f 100644 --- a/src/main/generated/data/minecraft/recipe/birch_chest_boat.json +++ b/src/main/generated/data/minecraft/recipe/birch_chest_boat.json @@ -7,7 +7,6 @@ "minecraft:birch_boat" ], "result": { - "count": 1, "id": "minecraft:birch_chest_boat" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/birch_fence_gate.json b/src/main/generated/data/minecraft/recipe/birch_fence_gate.json index 55e6c5133a..df4e8880cd 100644 --- a/src/main/generated/data/minecraft/recipe/birch_fence_gate.json +++ b/src/main/generated/data/minecraft/recipe/birch_fence_gate.json @@ -11,7 +11,6 @@ "#W#" ], "result": { - "count": 1, "id": "minecraft:birch_fence_gate" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/black_banner.json b/src/main/generated/data/minecraft/recipe/black_banner.json index 7f67600216..20fa2d9737 100644 --- a/src/main/generated/data/minecraft/recipe/black_banner.json +++ b/src/main/generated/data/minecraft/recipe/black_banner.json @@ -12,7 +12,6 @@ " | " ], "result": { - "count": 1, "id": "minecraft:black_banner" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/blast_furnace.json b/src/main/generated/data/minecraft/recipe/blast_furnace.json index eb2c292aac..e6d456e1d3 100644 --- a/src/main/generated/data/minecraft/recipe/blast_furnace.json +++ b/src/main/generated/data/minecraft/recipe/blast_furnace.json @@ -12,7 +12,6 @@ "###" ], "result": { - "count": 1, "id": "minecraft:blast_furnace" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/blue_banner.json b/src/main/generated/data/minecraft/recipe/blue_banner.json index a98940c6b1..ef898a8586 100644 --- a/src/main/generated/data/minecraft/recipe/blue_banner.json +++ b/src/main/generated/data/minecraft/recipe/blue_banner.json @@ -12,7 +12,6 @@ " | " ], "result": { - "count": 1, "id": "minecraft:blue_banner" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/bow.json b/src/main/generated/data/minecraft/recipe/bow.json index 5831fc36f1..57e32ba264 100644 --- a/src/main/generated/data/minecraft/recipe/bow.json +++ b/src/main/generated/data/minecraft/recipe/bow.json @@ -11,7 +11,6 @@ " #X" ], "result": { - "count": 1, "id": "minecraft:bow" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/brown_banner.json b/src/main/generated/data/minecraft/recipe/brown_banner.json index 5394a3d33c..4fe52af768 100644 --- a/src/main/generated/data/minecraft/recipe/brown_banner.json +++ b/src/main/generated/data/minecraft/recipe/brown_banner.json @@ -12,7 +12,6 @@ " | " ], "result": { - "count": 1, "id": "minecraft:brown_banner" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/brush.json b/src/main/generated/data/minecraft/recipe/brush.json index 4fc5863cee..c66d1df5b6 100644 --- a/src/main/generated/data/minecraft/recipe/brush.json +++ b/src/main/generated/data/minecraft/recipe/brush.json @@ -12,7 +12,6 @@ "I" ], "result": { - "count": 1, "id": "minecraft:brush" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/bucket.json b/src/main/generated/data/minecraft/recipe/bucket.json index 692ea8b728..98599240ce 100644 --- a/src/main/generated/data/minecraft/recipe/bucket.json +++ b/src/main/generated/data/minecraft/recipe/bucket.json @@ -9,7 +9,6 @@ " # " ], "result": { - "count": 1, "id": "minecraft:bucket" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/bundle.json b/src/main/generated/data/minecraft/recipe/bundle.json index fb9cad8657..75cd477459 100644 --- a/src/main/generated/data/minecraft/recipe/bundle.json +++ b/src/main/generated/data/minecraft/recipe/bundle.json @@ -10,7 +10,6 @@ "#" ], "result": { - "count": 1, "id": "minecraft:bundle" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/calibrated_sculk_sensor.json b/src/main/generated/data/minecraft/recipe/calibrated_sculk_sensor.json index 7b748c17a2..b1ceef8b50 100644 --- a/src/main/generated/data/minecraft/recipe/calibrated_sculk_sensor.json +++ b/src/main/generated/data/minecraft/recipe/calibrated_sculk_sensor.json @@ -10,7 +10,6 @@ "#X#" ], "result": { - "count": 1, "id": "minecraft:calibrated_sculk_sensor" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/campfire.json b/src/main/generated/data/minecraft/recipe/campfire.json index fd2f337523..93372c24ec 100644 --- a/src/main/generated/data/minecraft/recipe/campfire.json +++ b/src/main/generated/data/minecraft/recipe/campfire.json @@ -12,7 +12,6 @@ "LLL" ], "result": { - "count": 1, "id": "minecraft:campfire" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/candle.json b/src/main/generated/data/minecraft/recipe/candle.json index 6cb6864e6b..953a680359 100644 --- a/src/main/generated/data/minecraft/recipe/candle.json +++ b/src/main/generated/data/minecraft/recipe/candle.json @@ -10,7 +10,6 @@ "H" ], "result": { - "count": 1, "id": "minecraft:candle" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/cauldron.json b/src/main/generated/data/minecraft/recipe/cauldron.json index 101a0b54d6..936cc35ecb 100644 --- a/src/main/generated/data/minecraft/recipe/cauldron.json +++ b/src/main/generated/data/minecraft/recipe/cauldron.json @@ -10,7 +10,6 @@ "###" ], "result": { - "count": 1, "id": "minecraft:cauldron" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/cherry_chest_boat.json b/src/main/generated/data/minecraft/recipe/cherry_chest_boat.json index df03568c18..841e525c6b 100644 --- a/src/main/generated/data/minecraft/recipe/cherry_chest_boat.json +++ b/src/main/generated/data/minecraft/recipe/cherry_chest_boat.json @@ -7,7 +7,6 @@ "minecraft:cherry_boat" ], "result": { - "count": 1, "id": "minecraft:cherry_chest_boat" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/cherry_fence_gate.json b/src/main/generated/data/minecraft/recipe/cherry_fence_gate.json index 7ad275d012..22f74cc665 100644 --- a/src/main/generated/data/minecraft/recipe/cherry_fence_gate.json +++ b/src/main/generated/data/minecraft/recipe/cherry_fence_gate.json @@ -11,7 +11,6 @@ "#W#" ], "result": { - "count": 1, "id": "minecraft:cherry_fence_gate" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/chest_minecart.json b/src/main/generated/data/minecraft/recipe/chest_minecart.json index 9da9c5c21d..53958c8406 100644 --- a/src/main/generated/data/minecraft/recipe/chest_minecart.json +++ b/src/main/generated/data/minecraft/recipe/chest_minecart.json @@ -6,7 +6,6 @@ "minecraft:minecart" ], "result": { - "count": 1, "id": "minecraft:chest_minecart" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/clock.json b/src/main/generated/data/minecraft/recipe/clock.json index 0ffa5dfe00..d7130bdfff 100644 --- a/src/main/generated/data/minecraft/recipe/clock.json +++ b/src/main/generated/data/minecraft/recipe/clock.json @@ -11,7 +11,6 @@ " # " ], "result": { - "count": 1, "id": "minecraft:clock" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/coast_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/coast_armor_trim_smithing_template.json index 8064692610..91af5fbabf 100644 --- a/src/main/generated/data/minecraft/recipe/coast_armor_trim_smithing_template.json +++ b/src/main/generated/data/minecraft/recipe/coast_armor_trim_smithing_template.json @@ -3,7 +3,7 @@ "category": "misc", "key": { "#": "#c:gems/diamond", - "C": "#forge:cobblestone/normal", + "C": "#c:cobblestones/normal", "S": "minecraft:coast_armor_trim_smithing_template" }, "pattern": [ diff --git a/src/main/generated/data/minecraft/recipe/compass.json b/src/main/generated/data/minecraft/recipe/compass.json index 89310bdf95..5dc4cc7981 100644 --- a/src/main/generated/data/minecraft/recipe/compass.json +++ b/src/main/generated/data/minecraft/recipe/compass.json @@ -11,7 +11,6 @@ " # " ], "result": { - "count": 1, "id": "minecraft:compass" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/copper_axe.json b/src/main/generated/data/minecraft/recipe/copper_axe.json index 98bae5923d..e74f15829a 100644 --- a/src/main/generated/data/minecraft/recipe/copper_axe.json +++ b/src/main/generated/data/minecraft/recipe/copper_axe.json @@ -11,7 +11,6 @@ " #" ], "result": { - "count": 1, "id": "minecraft:copper_axe" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/copper_boots.json b/src/main/generated/data/minecraft/recipe/copper_boots.json index d6dede53ee..46363bf8da 100644 --- a/src/main/generated/data/minecraft/recipe/copper_boots.json +++ b/src/main/generated/data/minecraft/recipe/copper_boots.json @@ -9,7 +9,6 @@ "X X" ], "result": { - "count": 1, "id": "minecraft:copper_boots" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/copper_chain.json b/src/main/generated/data/minecraft/recipe/copper_chain.json index 7b30fb1115..51909893cd 100644 --- a/src/main/generated/data/minecraft/recipe/copper_chain.json +++ b/src/main/generated/data/minecraft/recipe/copper_chain.json @@ -11,7 +11,6 @@ "N" ], "result": { - "count": 1, "id": "minecraft:copper_chain" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/copper_chest.json b/src/main/generated/data/minecraft/recipe/copper_chest.json index 543686cdd0..786c2104a4 100644 --- a/src/main/generated/data/minecraft/recipe/copper_chest.json +++ b/src/main/generated/data/minecraft/recipe/copper_chest.json @@ -11,7 +11,6 @@ "###" ], "result": { - "count": 1, "id": "minecraft:copper_chest" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/copper_chestplate.json b/src/main/generated/data/minecraft/recipe/copper_chestplate.json index 996c150fcf..c0af241259 100644 --- a/src/main/generated/data/minecraft/recipe/copper_chestplate.json +++ b/src/main/generated/data/minecraft/recipe/copper_chestplate.json @@ -10,7 +10,6 @@ "XXX" ], "result": { - "count": 1, "id": "minecraft:copper_chestplate" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/copper_helmet.json b/src/main/generated/data/minecraft/recipe/copper_helmet.json index fe31d6caca..7db88051e7 100644 --- a/src/main/generated/data/minecraft/recipe/copper_helmet.json +++ b/src/main/generated/data/minecraft/recipe/copper_helmet.json @@ -9,7 +9,6 @@ "X X" ], "result": { - "count": 1, "id": "minecraft:copper_helmet" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/copper_hoe.json b/src/main/generated/data/minecraft/recipe/copper_hoe.json index 4eaf00f663..8a16409b03 100644 --- a/src/main/generated/data/minecraft/recipe/copper_hoe.json +++ b/src/main/generated/data/minecraft/recipe/copper_hoe.json @@ -11,7 +11,6 @@ " #" ], "result": { - "count": 1, "id": "minecraft:copper_hoe" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/copper_leggings.json b/src/main/generated/data/minecraft/recipe/copper_leggings.json index aa4cb1e52f..fb2d240bd4 100644 --- a/src/main/generated/data/minecraft/recipe/copper_leggings.json +++ b/src/main/generated/data/minecraft/recipe/copper_leggings.json @@ -10,7 +10,6 @@ "X X" ], "result": { - "count": 1, "id": "minecraft:copper_leggings" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/copper_pickaxe.json b/src/main/generated/data/minecraft/recipe/copper_pickaxe.json index 2238f2cf5e..ba3fa4e56a 100644 --- a/src/main/generated/data/minecraft/recipe/copper_pickaxe.json +++ b/src/main/generated/data/minecraft/recipe/copper_pickaxe.json @@ -11,7 +11,6 @@ " # " ], "result": { - "count": 1, "id": "minecraft:copper_pickaxe" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/copper_shovel.json b/src/main/generated/data/minecraft/recipe/copper_shovel.json index 581a606f5d..fddf9c90e7 100644 --- a/src/main/generated/data/minecraft/recipe/copper_shovel.json +++ b/src/main/generated/data/minecraft/recipe/copper_shovel.json @@ -11,7 +11,6 @@ "#" ], "result": { - "count": 1, "id": "minecraft:copper_shovel" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/copper_spear.json b/src/main/generated/data/minecraft/recipe/copper_spear.json index 6a3b1446a0..833fdc4e61 100644 --- a/src/main/generated/data/minecraft/recipe/copper_spear.json +++ b/src/main/generated/data/minecraft/recipe/copper_spear.json @@ -11,7 +11,6 @@ "# " ], "result": { - "count": 1, "id": "minecraft:copper_spear" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/copper_sword.json b/src/main/generated/data/minecraft/recipe/copper_sword.json index 123e70b648..6d9608daaa 100644 --- a/src/main/generated/data/minecraft/recipe/copper_sword.json +++ b/src/main/generated/data/minecraft/recipe/copper_sword.json @@ -11,7 +11,6 @@ "#" ], "result": { - "count": 1, "id": "minecraft:copper_sword" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/copper_trapdoor.json b/src/main/generated/data/minecraft/recipe/copper_trapdoor.json index 00b43cd5a3..2128a38437 100644 --- a/src/main/generated/data/minecraft/recipe/copper_trapdoor.json +++ b/src/main/generated/data/minecraft/recipe/copper_trapdoor.json @@ -9,7 +9,6 @@ "##" ], "result": { - "count": 1, "id": "minecraft:copper_trapdoor" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/crafter.json b/src/main/generated/data/minecraft/recipe/crafter.json index 8db88e0466..96f30df790 100644 --- a/src/main/generated/data/minecraft/recipe/crafter.json +++ b/src/main/generated/data/minecraft/recipe/crafter.json @@ -13,7 +13,6 @@ "RDR" ], "result": { - "count": 1, "id": "minecraft:crafter" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/crimson_fence_gate.json b/src/main/generated/data/minecraft/recipe/crimson_fence_gate.json index fdbdfa0f4b..2411d23301 100644 --- a/src/main/generated/data/minecraft/recipe/crimson_fence_gate.json +++ b/src/main/generated/data/minecraft/recipe/crimson_fence_gate.json @@ -11,7 +11,6 @@ "#W#" ], "result": { - "count": 1, "id": "minecraft:crimson_fence_gate" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/crossbow.json b/src/main/generated/data/minecraft/recipe/crossbow.json index 96364225e1..05ab180df4 100644 --- a/src/main/generated/data/minecraft/recipe/crossbow.json +++ b/src/main/generated/data/minecraft/recipe/crossbow.json @@ -13,7 +13,6 @@ " # " ], "result": { - "count": 1, "id": "minecraft:crossbow" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/cyan_banner.json b/src/main/generated/data/minecraft/recipe/cyan_banner.json index 2efc2367e5..39eab34e3e 100644 --- a/src/main/generated/data/minecraft/recipe/cyan_banner.json +++ b/src/main/generated/data/minecraft/recipe/cyan_banner.json @@ -12,7 +12,6 @@ " | " ], "result": { - "count": 1, "id": "minecraft:cyan_banner" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/dark_oak_chest_boat.json b/src/main/generated/data/minecraft/recipe/dark_oak_chest_boat.json index dcdf6da42f..0cb611b14e 100644 --- a/src/main/generated/data/minecraft/recipe/dark_oak_chest_boat.json +++ b/src/main/generated/data/minecraft/recipe/dark_oak_chest_boat.json @@ -7,7 +7,6 @@ "minecraft:dark_oak_boat" ], "result": { - "count": 1, "id": "minecraft:dark_oak_chest_boat" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/dark_oak_fence_gate.json b/src/main/generated/data/minecraft/recipe/dark_oak_fence_gate.json index d7db1861f2..d43a8b5076 100644 --- a/src/main/generated/data/minecraft/recipe/dark_oak_fence_gate.json +++ b/src/main/generated/data/minecraft/recipe/dark_oak_fence_gate.json @@ -11,7 +11,6 @@ "#W#" ], "result": { - "count": 1, "id": "minecraft:dark_oak_fence_gate" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/diamond_axe.json b/src/main/generated/data/minecraft/recipe/diamond_axe.json index 81cfd04879..bbf68047c1 100644 --- a/src/main/generated/data/minecraft/recipe/diamond_axe.json +++ b/src/main/generated/data/minecraft/recipe/diamond_axe.json @@ -11,7 +11,6 @@ " #" ], "result": { - "count": 1, "id": "minecraft:diamond_axe" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/diamond_boots.json b/src/main/generated/data/minecraft/recipe/diamond_boots.json index 38ea7f8e5d..db05b15507 100644 --- a/src/main/generated/data/minecraft/recipe/diamond_boots.json +++ b/src/main/generated/data/minecraft/recipe/diamond_boots.json @@ -9,7 +9,6 @@ "X X" ], "result": { - "count": 1, "id": "minecraft:diamond_boots" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/diamond_chestplate.json b/src/main/generated/data/minecraft/recipe/diamond_chestplate.json index bace9a7d21..65ed426afc 100644 --- a/src/main/generated/data/minecraft/recipe/diamond_chestplate.json +++ b/src/main/generated/data/minecraft/recipe/diamond_chestplate.json @@ -10,7 +10,6 @@ "XXX" ], "result": { - "count": 1, "id": "minecraft:diamond_chestplate" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/diamond_helmet.json b/src/main/generated/data/minecraft/recipe/diamond_helmet.json index 59067194a0..ae369acd28 100644 --- a/src/main/generated/data/minecraft/recipe/diamond_helmet.json +++ b/src/main/generated/data/minecraft/recipe/diamond_helmet.json @@ -9,7 +9,6 @@ "X X" ], "result": { - "count": 1, "id": "minecraft:diamond_helmet" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/diamond_hoe.json b/src/main/generated/data/minecraft/recipe/diamond_hoe.json index 6a770c0452..baabf3d6ce 100644 --- a/src/main/generated/data/minecraft/recipe/diamond_hoe.json +++ b/src/main/generated/data/minecraft/recipe/diamond_hoe.json @@ -11,7 +11,6 @@ " #" ], "result": { - "count": 1, "id": "minecraft:diamond_hoe" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/diamond_leggings.json b/src/main/generated/data/minecraft/recipe/diamond_leggings.json index 7992a0d478..8d6eba381e 100644 --- a/src/main/generated/data/minecraft/recipe/diamond_leggings.json +++ b/src/main/generated/data/minecraft/recipe/diamond_leggings.json @@ -10,7 +10,6 @@ "X X" ], "result": { - "count": 1, "id": "minecraft:diamond_leggings" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/diamond_pickaxe.json b/src/main/generated/data/minecraft/recipe/diamond_pickaxe.json index bc06ce4af1..fa25c31047 100644 --- a/src/main/generated/data/minecraft/recipe/diamond_pickaxe.json +++ b/src/main/generated/data/minecraft/recipe/diamond_pickaxe.json @@ -11,7 +11,6 @@ " # " ], "result": { - "count": 1, "id": "minecraft:diamond_pickaxe" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/diamond_shovel.json b/src/main/generated/data/minecraft/recipe/diamond_shovel.json index ff947a6fd7..f4b7f3cf24 100644 --- a/src/main/generated/data/minecraft/recipe/diamond_shovel.json +++ b/src/main/generated/data/minecraft/recipe/diamond_shovel.json @@ -11,7 +11,6 @@ "#" ], "result": { - "count": 1, "id": "minecraft:diamond_shovel" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/diamond_spear.json b/src/main/generated/data/minecraft/recipe/diamond_spear.json index 38d7aa9389..eb350b7965 100644 --- a/src/main/generated/data/minecraft/recipe/diamond_spear.json +++ b/src/main/generated/data/minecraft/recipe/diamond_spear.json @@ -11,7 +11,6 @@ "# " ], "result": { - "count": 1, "id": "minecraft:diamond_spear" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/diamond_sword.json b/src/main/generated/data/minecraft/recipe/diamond_sword.json index cb872879e7..f04f283eae 100644 --- a/src/main/generated/data/minecraft/recipe/diamond_sword.json +++ b/src/main/generated/data/minecraft/recipe/diamond_sword.json @@ -11,7 +11,6 @@ "#" ], "result": { - "count": 1, "id": "minecraft:diamond_sword" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/diorite.json b/src/main/generated/data/minecraft/recipe/diorite.json index f26df80c2f..35427a7339 100644 --- a/src/main/generated/data/minecraft/recipe/diorite.json +++ b/src/main/generated/data/minecraft/recipe/diorite.json @@ -2,7 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "C": "#forge:cobblestone/normal", + "C": "#c:cobblestones/normal", "Q": "minecraft:quartz" }, "pattern": [ diff --git a/src/main/generated/data/minecraft/recipe/dispenser.json b/src/main/generated/data/minecraft/recipe/dispenser.json index bcffee112c..4eedc72fce 100644 --- a/src/main/generated/data/minecraft/recipe/dispenser.json +++ b/src/main/generated/data/minecraft/recipe/dispenser.json @@ -2,7 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "#": "#forge:cobblestone/normal", + "#": "#c:cobblestones/normal", "R": "minecraft:redstone", "X": "minecraft:bow" }, @@ -12,7 +12,6 @@ "#R#" ], "result": { - "count": 1, "id": "minecraft:dispenser" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/dropper.json b/src/main/generated/data/minecraft/recipe/dropper.json index 27ccdd1489..9af6ef7b51 100644 --- a/src/main/generated/data/minecraft/recipe/dropper.json +++ b/src/main/generated/data/minecraft/recipe/dropper.json @@ -2,7 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "#": "#forge:cobblestone/normal", + "#": "#c:cobblestones/normal", "R": "minecraft:redstone" }, "pattern": [ @@ -11,7 +11,6 @@ "#R#" ], "result": { - "count": 1, "id": "minecraft:dropper" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/enchanting_table.json b/src/main/generated/data/minecraft/recipe/enchanting_table.json index a18e62aa60..bfe6ac2770 100644 --- a/src/main/generated/data/minecraft/recipe/enchanting_table.json +++ b/src/main/generated/data/minecraft/recipe/enchanting_table.json @@ -12,7 +12,6 @@ "###" ], "result": { - "count": 1, "id": "minecraft:enchanting_table" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/fishing_rod.json b/src/main/generated/data/minecraft/recipe/fishing_rod.json index 8308c1ef46..c01dafa760 100644 --- a/src/main/generated/data/minecraft/recipe/fishing_rod.json +++ b/src/main/generated/data/minecraft/recipe/fishing_rod.json @@ -11,7 +11,6 @@ "# X" ], "result": { - "count": 1, "id": "minecraft:fishing_rod" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/flint_and_steel.json b/src/main/generated/data/minecraft/recipe/flint_and_steel.json index 291b18605e..00ba34c791 100644 --- a/src/main/generated/data/minecraft/recipe/flint_and_steel.json +++ b/src/main/generated/data/minecraft/recipe/flint_and_steel.json @@ -6,7 +6,6 @@ "minecraft:flint" ], "result": { - "count": 1, "id": "minecraft:flint_and_steel" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/golden_apple.json b/src/main/generated/data/minecraft/recipe/golden_apple.json index 0a029564aa..bc73ddf140 100644 --- a/src/main/generated/data/minecraft/recipe/golden_apple.json +++ b/src/main/generated/data/minecraft/recipe/golden_apple.json @@ -11,7 +11,6 @@ "###" ], "result": { - "count": 1, "id": "minecraft:golden_apple" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/golden_axe.json b/src/main/generated/data/minecraft/recipe/golden_axe.json index aad3355e76..0818c3cb61 100644 --- a/src/main/generated/data/minecraft/recipe/golden_axe.json +++ b/src/main/generated/data/minecraft/recipe/golden_axe.json @@ -11,7 +11,6 @@ " #" ], "result": { - "count": 1, "id": "minecraft:golden_axe" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/golden_boots.json b/src/main/generated/data/minecraft/recipe/golden_boots.json index baede9b2b0..5abe0af920 100644 --- a/src/main/generated/data/minecraft/recipe/golden_boots.json +++ b/src/main/generated/data/minecraft/recipe/golden_boots.json @@ -9,7 +9,6 @@ "X X" ], "result": { - "count": 1, "id": "minecraft:golden_boots" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/golden_chestplate.json b/src/main/generated/data/minecraft/recipe/golden_chestplate.json index 44610c5b75..7573b40a02 100644 --- a/src/main/generated/data/minecraft/recipe/golden_chestplate.json +++ b/src/main/generated/data/minecraft/recipe/golden_chestplate.json @@ -10,7 +10,6 @@ "XXX" ], "result": { - "count": 1, "id": "minecraft:golden_chestplate" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/golden_helmet.json b/src/main/generated/data/minecraft/recipe/golden_helmet.json index 77e0c12be8..a13d779537 100644 --- a/src/main/generated/data/minecraft/recipe/golden_helmet.json +++ b/src/main/generated/data/minecraft/recipe/golden_helmet.json @@ -9,7 +9,6 @@ "X X" ], "result": { - "count": 1, "id": "minecraft:golden_helmet" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/golden_hoe.json b/src/main/generated/data/minecraft/recipe/golden_hoe.json index 6a31db7ec1..6b390024a9 100644 --- a/src/main/generated/data/minecraft/recipe/golden_hoe.json +++ b/src/main/generated/data/minecraft/recipe/golden_hoe.json @@ -11,7 +11,6 @@ " #" ], "result": { - "count": 1, "id": "minecraft:golden_hoe" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/golden_leggings.json b/src/main/generated/data/minecraft/recipe/golden_leggings.json index 6ffc3edd1c..76ff024ef5 100644 --- a/src/main/generated/data/minecraft/recipe/golden_leggings.json +++ b/src/main/generated/data/minecraft/recipe/golden_leggings.json @@ -10,7 +10,6 @@ "X X" ], "result": { - "count": 1, "id": "minecraft:golden_leggings" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/golden_pickaxe.json b/src/main/generated/data/minecraft/recipe/golden_pickaxe.json index 7e88522f3e..ef13a0f17a 100644 --- a/src/main/generated/data/minecraft/recipe/golden_pickaxe.json +++ b/src/main/generated/data/minecraft/recipe/golden_pickaxe.json @@ -11,7 +11,6 @@ " # " ], "result": { - "count": 1, "id": "minecraft:golden_pickaxe" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/golden_shovel.json b/src/main/generated/data/minecraft/recipe/golden_shovel.json index ed7b535236..e4f71ef565 100644 --- a/src/main/generated/data/minecraft/recipe/golden_shovel.json +++ b/src/main/generated/data/minecraft/recipe/golden_shovel.json @@ -11,7 +11,6 @@ "#" ], "result": { - "count": 1, "id": "minecraft:golden_shovel" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/golden_spear.json b/src/main/generated/data/minecraft/recipe/golden_spear.json index 477bbb3f6b..bb65788d46 100644 --- a/src/main/generated/data/minecraft/recipe/golden_spear.json +++ b/src/main/generated/data/minecraft/recipe/golden_spear.json @@ -11,7 +11,6 @@ "# " ], "result": { - "count": 1, "id": "minecraft:golden_spear" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/golden_sword.json b/src/main/generated/data/minecraft/recipe/golden_sword.json index a400bb8117..510d5fd8bd 100644 --- a/src/main/generated/data/minecraft/recipe/golden_sword.json +++ b/src/main/generated/data/minecraft/recipe/golden_sword.json @@ -11,7 +11,6 @@ "#" ], "result": { - "count": 1, "id": "minecraft:golden_sword" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/gray_banner.json b/src/main/generated/data/minecraft/recipe/gray_banner.json index 75e5ac3ebe..5b383dfe15 100644 --- a/src/main/generated/data/minecraft/recipe/gray_banner.json +++ b/src/main/generated/data/minecraft/recipe/gray_banner.json @@ -12,7 +12,6 @@ " | " ], "result": { - "count": 1, "id": "minecraft:gray_banner" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/green_banner.json b/src/main/generated/data/minecraft/recipe/green_banner.json index e18d67a1f3..b39debf52e 100644 --- a/src/main/generated/data/minecraft/recipe/green_banner.json +++ b/src/main/generated/data/minecraft/recipe/green_banner.json @@ -12,7 +12,6 @@ " | " ], "result": { - "count": 1, "id": "minecraft:green_banner" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/grindstone.json b/src/main/generated/data/minecraft/recipe/grindstone.json index 5edf22f750..7bfe1abe16 100644 --- a/src/main/generated/data/minecraft/recipe/grindstone.json +++ b/src/main/generated/data/minecraft/recipe/grindstone.json @@ -11,7 +11,6 @@ "# #" ], "result": { - "count": 1, "id": "minecraft:grindstone" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/heavy_weighted_pressure_plate.json b/src/main/generated/data/minecraft/recipe/heavy_weighted_pressure_plate.json index e4c401e38e..0400715a6b 100644 --- a/src/main/generated/data/minecraft/recipe/heavy_weighted_pressure_plate.json +++ b/src/main/generated/data/minecraft/recipe/heavy_weighted_pressure_plate.json @@ -8,7 +8,6 @@ "##" ], "result": { - "count": 1, "id": "minecraft:heavy_weighted_pressure_plate" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/hopper.json b/src/main/generated/data/minecraft/recipe/hopper.json index 7cbd773bf6..bc8d837595 100644 --- a/src/main/generated/data/minecraft/recipe/hopper.json +++ b/src/main/generated/data/minecraft/recipe/hopper.json @@ -11,7 +11,6 @@ " I " ], "result": { - "count": 1, "id": "minecraft:hopper" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/iron_axe.json b/src/main/generated/data/minecraft/recipe/iron_axe.json index 535479a2ba..bb95203181 100644 --- a/src/main/generated/data/minecraft/recipe/iron_axe.json +++ b/src/main/generated/data/minecraft/recipe/iron_axe.json @@ -11,7 +11,6 @@ " #" ], "result": { - "count": 1, "id": "minecraft:iron_axe" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/iron_boots.json b/src/main/generated/data/minecraft/recipe/iron_boots.json index 459f753384..82ec93b74d 100644 --- a/src/main/generated/data/minecraft/recipe/iron_boots.json +++ b/src/main/generated/data/minecraft/recipe/iron_boots.json @@ -9,7 +9,6 @@ "X X" ], "result": { - "count": 1, "id": "minecraft:iron_boots" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/iron_chain.json b/src/main/generated/data/minecraft/recipe/iron_chain.json index 5aab56a86f..6ca1a0bda5 100644 --- a/src/main/generated/data/minecraft/recipe/iron_chain.json +++ b/src/main/generated/data/minecraft/recipe/iron_chain.json @@ -11,7 +11,6 @@ "N" ], "result": { - "count": 1, "id": "minecraft:iron_chain" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/iron_chestplate.json b/src/main/generated/data/minecraft/recipe/iron_chestplate.json index 42ac070a95..c04281055a 100644 --- a/src/main/generated/data/minecraft/recipe/iron_chestplate.json +++ b/src/main/generated/data/minecraft/recipe/iron_chestplate.json @@ -10,7 +10,6 @@ "XXX" ], "result": { - "count": 1, "id": "minecraft:iron_chestplate" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/iron_helmet.json b/src/main/generated/data/minecraft/recipe/iron_helmet.json index 67b4fa7229..227d97983b 100644 --- a/src/main/generated/data/minecraft/recipe/iron_helmet.json +++ b/src/main/generated/data/minecraft/recipe/iron_helmet.json @@ -9,7 +9,6 @@ "X X" ], "result": { - "count": 1, "id": "minecraft:iron_helmet" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/iron_hoe.json b/src/main/generated/data/minecraft/recipe/iron_hoe.json index 65fb6202de..be5921217f 100644 --- a/src/main/generated/data/minecraft/recipe/iron_hoe.json +++ b/src/main/generated/data/minecraft/recipe/iron_hoe.json @@ -11,7 +11,6 @@ " #" ], "result": { - "count": 1, "id": "minecraft:iron_hoe" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/iron_leggings.json b/src/main/generated/data/minecraft/recipe/iron_leggings.json index ca4c45bc62..232ad3cade 100644 --- a/src/main/generated/data/minecraft/recipe/iron_leggings.json +++ b/src/main/generated/data/minecraft/recipe/iron_leggings.json @@ -10,7 +10,6 @@ "X X" ], "result": { - "count": 1, "id": "minecraft:iron_leggings" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/iron_pickaxe.json b/src/main/generated/data/minecraft/recipe/iron_pickaxe.json index 169d8f7094..313311755f 100644 --- a/src/main/generated/data/minecraft/recipe/iron_pickaxe.json +++ b/src/main/generated/data/minecraft/recipe/iron_pickaxe.json @@ -11,7 +11,6 @@ " # " ], "result": { - "count": 1, "id": "minecraft:iron_pickaxe" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/iron_shovel.json b/src/main/generated/data/minecraft/recipe/iron_shovel.json index b436766778..3074e560c3 100644 --- a/src/main/generated/data/minecraft/recipe/iron_shovel.json +++ b/src/main/generated/data/minecraft/recipe/iron_shovel.json @@ -11,7 +11,6 @@ "#" ], "result": { - "count": 1, "id": "minecraft:iron_shovel" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/iron_spear.json b/src/main/generated/data/minecraft/recipe/iron_spear.json index eca0174318..4d4d17ea8f 100644 --- a/src/main/generated/data/minecraft/recipe/iron_spear.json +++ b/src/main/generated/data/minecraft/recipe/iron_spear.json @@ -11,7 +11,6 @@ "# " ], "result": { - "count": 1, "id": "minecraft:iron_spear" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/iron_sword.json b/src/main/generated/data/minecraft/recipe/iron_sword.json index 8c909bfa56..a676cd048c 100644 --- a/src/main/generated/data/minecraft/recipe/iron_sword.json +++ b/src/main/generated/data/minecraft/recipe/iron_sword.json @@ -11,7 +11,6 @@ "#" ], "result": { - "count": 1, "id": "minecraft:iron_sword" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/iron_trapdoor.json b/src/main/generated/data/minecraft/recipe/iron_trapdoor.json index a64774b455..ef32cfaa39 100644 --- a/src/main/generated/data/minecraft/recipe/iron_trapdoor.json +++ b/src/main/generated/data/minecraft/recipe/iron_trapdoor.json @@ -9,7 +9,6 @@ "##" ], "result": { - "count": 1, "id": "minecraft:iron_trapdoor" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/item_frame.json b/src/main/generated/data/minecraft/recipe/item_frame.json index 9daf39f512..3cbb9b2183 100644 --- a/src/main/generated/data/minecraft/recipe/item_frame.json +++ b/src/main/generated/data/minecraft/recipe/item_frame.json @@ -11,7 +11,6 @@ "###" ], "result": { - "count": 1, "id": "minecraft:item_frame" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/jukebox.json b/src/main/generated/data/minecraft/recipe/jukebox.json index c7c109d95f..389ac126c8 100644 --- a/src/main/generated/data/minecraft/recipe/jukebox.json +++ b/src/main/generated/data/minecraft/recipe/jukebox.json @@ -11,7 +11,6 @@ "###" ], "result": { - "count": 1, "id": "minecraft:jukebox" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/jungle_chest_boat.json b/src/main/generated/data/minecraft/recipe/jungle_chest_boat.json index cab5728082..70883bace5 100644 --- a/src/main/generated/data/minecraft/recipe/jungle_chest_boat.json +++ b/src/main/generated/data/minecraft/recipe/jungle_chest_boat.json @@ -7,7 +7,6 @@ "minecraft:jungle_boat" ], "result": { - "count": 1, "id": "minecraft:jungle_chest_boat" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/jungle_fence_gate.json b/src/main/generated/data/minecraft/recipe/jungle_fence_gate.json index 3f3ee533ed..b94a81ea03 100644 --- a/src/main/generated/data/minecraft/recipe/jungle_fence_gate.json +++ b/src/main/generated/data/minecraft/recipe/jungle_fence_gate.json @@ -11,7 +11,6 @@ "#W#" ], "result": { - "count": 1, "id": "minecraft:jungle_fence_gate" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/lever.json b/src/main/generated/data/minecraft/recipe/lever.json index f0cc6c54d5..69f1f2f36d 100644 --- a/src/main/generated/data/minecraft/recipe/lever.json +++ b/src/main/generated/data/minecraft/recipe/lever.json @@ -2,7 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "#": "#forge:cobblestone/normal", + "#": "#c:cobblestones/normal", "X": "#c:rods/wooden" }, "pattern": [ @@ -10,7 +10,6 @@ "#" ], "result": { - "count": 1, "id": "minecraft:lever" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/light_blue_banner.json b/src/main/generated/data/minecraft/recipe/light_blue_banner.json index b0fa080366..94fa7b212c 100644 --- a/src/main/generated/data/minecraft/recipe/light_blue_banner.json +++ b/src/main/generated/data/minecraft/recipe/light_blue_banner.json @@ -12,7 +12,6 @@ " | " ], "result": { - "count": 1, "id": "minecraft:light_blue_banner" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/light_gray_banner.json b/src/main/generated/data/minecraft/recipe/light_gray_banner.json index 7a16563cc0..e1a2400e0b 100644 --- a/src/main/generated/data/minecraft/recipe/light_gray_banner.json +++ b/src/main/generated/data/minecraft/recipe/light_gray_banner.json @@ -12,7 +12,6 @@ " | " ], "result": { - "count": 1, "id": "minecraft:light_gray_banner" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/light_weighted_pressure_plate.json b/src/main/generated/data/minecraft/recipe/light_weighted_pressure_plate.json index ef08a13e3f..ebff2fb7aa 100644 --- a/src/main/generated/data/minecraft/recipe/light_weighted_pressure_plate.json +++ b/src/main/generated/data/minecraft/recipe/light_weighted_pressure_plate.json @@ -8,7 +8,6 @@ "##" ], "result": { - "count": 1, "id": "minecraft:light_weighted_pressure_plate" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/lightning_rod.json b/src/main/generated/data/minecraft/recipe/lightning_rod.json index 614ed2737e..92b7699ca0 100644 --- a/src/main/generated/data/minecraft/recipe/lightning_rod.json +++ b/src/main/generated/data/minecraft/recipe/lightning_rod.json @@ -10,7 +10,6 @@ "#" ], "result": { - "count": 1, "id": "minecraft:lightning_rod" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/lime_banner.json b/src/main/generated/data/minecraft/recipe/lime_banner.json index 49b26aba09..828ccfcb50 100644 --- a/src/main/generated/data/minecraft/recipe/lime_banner.json +++ b/src/main/generated/data/minecraft/recipe/lime_banner.json @@ -12,7 +12,6 @@ " | " ], "result": { - "count": 1, "id": "minecraft:lime_banner" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/lodestone.json b/src/main/generated/data/minecraft/recipe/lodestone.json index 56532f2eed..8b353b4504 100644 --- a/src/main/generated/data/minecraft/recipe/lodestone.json +++ b/src/main/generated/data/minecraft/recipe/lodestone.json @@ -11,7 +11,6 @@ "SSS" ], "result": { - "count": 1, "id": "minecraft:lodestone" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/loom.json b/src/main/generated/data/minecraft/recipe/loom.json index 9b25eeb36f..21b2fa928a 100644 --- a/src/main/generated/data/minecraft/recipe/loom.json +++ b/src/main/generated/data/minecraft/recipe/loom.json @@ -10,7 +10,6 @@ "##" ], "result": { - "count": 1, "id": "minecraft:loom" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/magenta_banner.json b/src/main/generated/data/minecraft/recipe/magenta_banner.json index f09624c2ac..b0fee202d5 100644 --- a/src/main/generated/data/minecraft/recipe/magenta_banner.json +++ b/src/main/generated/data/minecraft/recipe/magenta_banner.json @@ -12,7 +12,6 @@ " | " ], "result": { - "count": 1, "id": "minecraft:magenta_banner" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/mangrove_chest_boat.json b/src/main/generated/data/minecraft/recipe/mangrove_chest_boat.json index e8bec29182..47eab0678b 100644 --- a/src/main/generated/data/minecraft/recipe/mangrove_chest_boat.json +++ b/src/main/generated/data/minecraft/recipe/mangrove_chest_boat.json @@ -7,7 +7,6 @@ "minecraft:mangrove_boat" ], "result": { - "count": 1, "id": "minecraft:mangrove_chest_boat" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/mangrove_fence_gate.json b/src/main/generated/data/minecraft/recipe/mangrove_fence_gate.json index 8510a15d3f..a2814dee24 100644 --- a/src/main/generated/data/minecraft/recipe/mangrove_fence_gate.json +++ b/src/main/generated/data/minecraft/recipe/mangrove_fence_gate.json @@ -11,7 +11,6 @@ "#W#" ], "result": { - "count": 1, "id": "minecraft:mangrove_fence_gate" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/minecart.json b/src/main/generated/data/minecraft/recipe/minecart.json index 3a407b046e..1ba7653387 100644 --- a/src/main/generated/data/minecraft/recipe/minecart.json +++ b/src/main/generated/data/minecraft/recipe/minecart.json @@ -9,7 +9,6 @@ "###" ], "result": { - "count": 1, "id": "minecraft:minecart" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/mossy_cobblestone_from_moss_block.json b/src/main/generated/data/minecraft/recipe/mossy_cobblestone_from_moss_block.json index 4ee8e0a4c2..b2d83bde40 100644 --- a/src/main/generated/data/minecraft/recipe/mossy_cobblestone_from_moss_block.json +++ b/src/main/generated/data/minecraft/recipe/mossy_cobblestone_from_moss_block.json @@ -3,11 +3,10 @@ "category": "building", "group": "mossy_cobblestone", "ingredients": [ - "#forge:cobblestone/normal", + "#c:cobblestones/normal", "minecraft:moss_block" ], "result": { - "count": 1, "id": "minecraft:mossy_cobblestone" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/mossy_cobblestone_from_vine.json b/src/main/generated/data/minecraft/recipe/mossy_cobblestone_from_vine.json index 03cf0e01c5..4ee78421da 100644 --- a/src/main/generated/data/minecraft/recipe/mossy_cobblestone_from_vine.json +++ b/src/main/generated/data/minecraft/recipe/mossy_cobblestone_from_vine.json @@ -3,11 +3,10 @@ "category": "building", "group": "mossy_cobblestone", "ingredients": [ - "#forge:cobblestone/normal", + "#c:cobblestones/normal", "minecraft:vine" ], "result": { - "count": 1, "id": "minecraft:mossy_cobblestone" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/netherite_ingot.json b/src/main/generated/data/minecraft/recipe/netherite_ingot.json index 839b4ad4f5..b99430fe50 100644 --- a/src/main/generated/data/minecraft/recipe/netherite_ingot.json +++ b/src/main/generated/data/minecraft/recipe/netherite_ingot.json @@ -13,7 +13,6 @@ "#c:ingots/gold" ], "result": { - "count": 1, "id": "minecraft:netherite_ingot" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/oak_chest_boat.json b/src/main/generated/data/minecraft/recipe/oak_chest_boat.json index 753ef643c4..135b0d1cb7 100644 --- a/src/main/generated/data/minecraft/recipe/oak_chest_boat.json +++ b/src/main/generated/data/minecraft/recipe/oak_chest_boat.json @@ -7,7 +7,6 @@ "minecraft:oak_boat" ], "result": { - "count": 1, "id": "minecraft:oak_chest_boat" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/oak_fence_gate.json b/src/main/generated/data/minecraft/recipe/oak_fence_gate.json index 36941138d7..8d1ab67ec0 100644 --- a/src/main/generated/data/minecraft/recipe/oak_fence_gate.json +++ b/src/main/generated/data/minecraft/recipe/oak_fence_gate.json @@ -11,7 +11,6 @@ "#W#" ], "result": { - "count": 1, "id": "minecraft:oak_fence_gate" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/observer.json b/src/main/generated/data/minecraft/recipe/observer.json index 435f76840d..2287dea5fd 100644 --- a/src/main/generated/data/minecraft/recipe/observer.json +++ b/src/main/generated/data/minecraft/recipe/observer.json @@ -2,7 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "#": "#forge:cobblestone/normal", + "#": "#c:cobblestones/normal", "Q": "minecraft:quartz", "R": "minecraft:redstone" }, @@ -12,7 +12,6 @@ "###" ], "result": { - "count": 1, "id": "minecraft:observer" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/orange_banner.json b/src/main/generated/data/minecraft/recipe/orange_banner.json index 8bbc0dbf42..22de227ea5 100644 --- a/src/main/generated/data/minecraft/recipe/orange_banner.json +++ b/src/main/generated/data/minecraft/recipe/orange_banner.json @@ -12,7 +12,6 @@ " | " ], "result": { - "count": 1, "id": "minecraft:orange_banner" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/painting.json b/src/main/generated/data/minecraft/recipe/painting.json index 64b32014dc..b8497c2de4 100644 --- a/src/main/generated/data/minecraft/recipe/painting.json +++ b/src/main/generated/data/minecraft/recipe/painting.json @@ -11,7 +11,6 @@ "###" ], "result": { - "count": 1, "id": "minecraft:painting" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/pale_oak_chest_boat.json b/src/main/generated/data/minecraft/recipe/pale_oak_chest_boat.json index 2b223559ee..b75a6247d3 100644 --- a/src/main/generated/data/minecraft/recipe/pale_oak_chest_boat.json +++ b/src/main/generated/data/minecraft/recipe/pale_oak_chest_boat.json @@ -7,7 +7,6 @@ "minecraft:pale_oak_boat" ], "result": { - "count": 1, "id": "minecraft:pale_oak_chest_boat" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/pale_oak_fence_gate.json b/src/main/generated/data/minecraft/recipe/pale_oak_fence_gate.json index b09f87fa2b..ae5182f114 100644 --- a/src/main/generated/data/minecraft/recipe/pale_oak_fence_gate.json +++ b/src/main/generated/data/minecraft/recipe/pale_oak_fence_gate.json @@ -11,7 +11,6 @@ "#W#" ], "result": { - "count": 1, "id": "minecraft:pale_oak_fence_gate" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/pink_banner.json b/src/main/generated/data/minecraft/recipe/pink_banner.json index 4fd7901e5d..b0640cb8ef 100644 --- a/src/main/generated/data/minecraft/recipe/pink_banner.json +++ b/src/main/generated/data/minecraft/recipe/pink_banner.json @@ -12,7 +12,6 @@ " | " ], "result": { - "count": 1, "id": "minecraft:pink_banner" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/piston.json b/src/main/generated/data/minecraft/recipe/piston.json index 5b7ddd117c..432146eef5 100644 --- a/src/main/generated/data/minecraft/recipe/piston.json +++ b/src/main/generated/data/minecraft/recipe/piston.json @@ -2,7 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "redstone", "key": { - "#": "#forge:cobblestone/normal", + "#": "#c:cobblestones/normal", "R": "minecraft:redstone", "T": "#minecraft:planks", "X": "#c:ingots/iron" @@ -13,7 +13,6 @@ "#R#" ], "result": { - "count": 1, "id": "minecraft:piston" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/polished_deepslate.json b/src/main/generated/data/minecraft/recipe/polished_deepslate.json index 3fb3c80730..10b6ccbff7 100644 --- a/src/main/generated/data/minecraft/recipe/polished_deepslate.json +++ b/src/main/generated/data/minecraft/recipe/polished_deepslate.json @@ -2,7 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "building", "key": { - "S": "#forge:cobblestone/deepslate" + "S": "#c:cobblestones/deepslate" }, "pattern": [ "SS", diff --git a/src/main/generated/data/minecraft/recipe/purple_banner.json b/src/main/generated/data/minecraft/recipe/purple_banner.json index ed4b36c136..8f1b072de3 100644 --- a/src/main/generated/data/minecraft/recipe/purple_banner.json +++ b/src/main/generated/data/minecraft/recipe/purple_banner.json @@ -12,7 +12,6 @@ " | " ], "result": { - "count": 1, "id": "minecraft:purple_banner" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/red_banner.json b/src/main/generated/data/minecraft/recipe/red_banner.json index 9b0643110e..16e01ce497 100644 --- a/src/main/generated/data/minecraft/recipe/red_banner.json +++ b/src/main/generated/data/minecraft/recipe/red_banner.json @@ -12,7 +12,6 @@ " | " ], "result": { - "count": 1, "id": "minecraft:red_banner" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/redstone_torch.json b/src/main/generated/data/minecraft/recipe/redstone_torch.json index ea402cb6e4..ed035e7db2 100644 --- a/src/main/generated/data/minecraft/recipe/redstone_torch.json +++ b/src/main/generated/data/minecraft/recipe/redstone_torch.json @@ -10,7 +10,6 @@ "#" ], "result": { - "count": 1, "id": "minecraft:redstone_torch" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/saddle.json b/src/main/generated/data/minecraft/recipe/saddle.json index 38171a6054..7aa4f31671 100644 --- a/src/main/generated/data/minecraft/recipe/saddle.json +++ b/src/main/generated/data/minecraft/recipe/saddle.json @@ -10,7 +10,6 @@ "X#X" ], "result": { - "count": 1, "id": "minecraft:saddle" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/sentry_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/sentry_armor_trim_smithing_template.json index 9619e872ce..e0a1a2a451 100644 --- a/src/main/generated/data/minecraft/recipe/sentry_armor_trim_smithing_template.json +++ b/src/main/generated/data/minecraft/recipe/sentry_armor_trim_smithing_template.json @@ -3,7 +3,7 @@ "category": "misc", "key": { "#": "#c:gems/diamond", - "C": "#forge:cobblestone/normal", + "C": "#c:cobblestones/normal", "S": "minecraft:sentry_armor_trim_smithing_template" }, "pattern": [ diff --git a/src/main/generated/data/minecraft/recipe/shears.json b/src/main/generated/data/minecraft/recipe/shears.json index ca02dfb8aa..08fc67bbe1 100644 --- a/src/main/generated/data/minecraft/recipe/shears.json +++ b/src/main/generated/data/minecraft/recipe/shears.json @@ -9,7 +9,6 @@ "# " ], "result": { - "count": 1, "id": "minecraft:shears" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/shield.json b/src/main/generated/data/minecraft/recipe/shield.json index e0cc4be9a4..6dc818bc94 100644 --- a/src/main/generated/data/minecraft/recipe/shield.json +++ b/src/main/generated/data/minecraft/recipe/shield.json @@ -11,7 +11,6 @@ " W " ], "result": { - "count": 1, "id": "minecraft:shield" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/shulker_box.json b/src/main/generated/data/minecraft/recipe/shulker_box.json index d95b64e916..7b35303f6e 100644 --- a/src/main/generated/data/minecraft/recipe/shulker_box.json +++ b/src/main/generated/data/minecraft/recipe/shulker_box.json @@ -11,7 +11,6 @@ "-" ], "result": { - "count": 1, "id": "minecraft:shulker_box" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/silence_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/silence_armor_trim_smithing_template.json index 26ec6d761c..364cdd75a6 100644 --- a/src/main/generated/data/minecraft/recipe/silence_armor_trim_smithing_template.json +++ b/src/main/generated/data/minecraft/recipe/silence_armor_trim_smithing_template.json @@ -3,7 +3,7 @@ "category": "misc", "key": { "#": "#c:gems/diamond", - "C": "#forge:cobblestone/deepslate", + "C": "#c:cobblestones/deepslate", "S": "minecraft:silence_armor_trim_smithing_template" }, "pattern": [ diff --git a/src/main/generated/data/minecraft/recipe/smithing_table.json b/src/main/generated/data/minecraft/recipe/smithing_table.json index cdf474dfc5..4642066634 100644 --- a/src/main/generated/data/minecraft/recipe/smithing_table.json +++ b/src/main/generated/data/minecraft/recipe/smithing_table.json @@ -11,7 +11,6 @@ "##" ], "result": { - "count": 1, "id": "minecraft:smithing_table" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/soul_campfire.json b/src/main/generated/data/minecraft/recipe/soul_campfire.json index 8daec84a10..a5630fbfe5 100644 --- a/src/main/generated/data/minecraft/recipe/soul_campfire.json +++ b/src/main/generated/data/minecraft/recipe/soul_campfire.json @@ -12,7 +12,6 @@ "LLL" ], "result": { - "count": 1, "id": "minecraft:soul_campfire" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/spruce_chest_boat.json b/src/main/generated/data/minecraft/recipe/spruce_chest_boat.json index ce964f8696..80f4e6e72b 100644 --- a/src/main/generated/data/minecraft/recipe/spruce_chest_boat.json +++ b/src/main/generated/data/minecraft/recipe/spruce_chest_boat.json @@ -7,7 +7,6 @@ "minecraft:spruce_boat" ], "result": { - "count": 1, "id": "minecraft:spruce_chest_boat" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/spruce_fence_gate.json b/src/main/generated/data/minecraft/recipe/spruce_fence_gate.json index ea1f612c1f..3a7d27c4ec 100644 --- a/src/main/generated/data/minecraft/recipe/spruce_fence_gate.json +++ b/src/main/generated/data/minecraft/recipe/spruce_fence_gate.json @@ -11,7 +11,6 @@ "#W#" ], "result": { - "count": 1, "id": "minecraft:spruce_fence_gate" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/spyglass.json b/src/main/generated/data/minecraft/recipe/spyglass.json index d2caaad362..b7e83ec960 100644 --- a/src/main/generated/data/minecraft/recipe/spyglass.json +++ b/src/main/generated/data/minecraft/recipe/spyglass.json @@ -11,7 +11,6 @@ " X " ], "result": { - "count": 1, "id": "minecraft:spyglass" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/stone_axe.json b/src/main/generated/data/minecraft/recipe/stone_axe.json index 8d557557d6..e3113ba751 100644 --- a/src/main/generated/data/minecraft/recipe/stone_axe.json +++ b/src/main/generated/data/minecraft/recipe/stone_axe.json @@ -11,7 +11,6 @@ " #" ], "result": { - "count": 1, "id": "minecraft:stone_axe" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/stone_hoe.json b/src/main/generated/data/minecraft/recipe/stone_hoe.json index 8ed74421de..c8cf52f38d 100644 --- a/src/main/generated/data/minecraft/recipe/stone_hoe.json +++ b/src/main/generated/data/minecraft/recipe/stone_hoe.json @@ -11,7 +11,6 @@ " #" ], "result": { - "count": 1, "id": "minecraft:stone_hoe" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/stone_pickaxe.json b/src/main/generated/data/minecraft/recipe/stone_pickaxe.json index cd245c22c4..0be8cd1618 100644 --- a/src/main/generated/data/minecraft/recipe/stone_pickaxe.json +++ b/src/main/generated/data/minecraft/recipe/stone_pickaxe.json @@ -11,7 +11,6 @@ " # " ], "result": { - "count": 1, "id": "minecraft:stone_pickaxe" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/stone_shovel.json b/src/main/generated/data/minecraft/recipe/stone_shovel.json index bde9b0a8be..98f9b03920 100644 --- a/src/main/generated/data/minecraft/recipe/stone_shovel.json +++ b/src/main/generated/data/minecraft/recipe/stone_shovel.json @@ -11,7 +11,6 @@ "#" ], "result": { - "count": 1, "id": "minecraft:stone_shovel" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/stone_spear.json b/src/main/generated/data/minecraft/recipe/stone_spear.json index c0f703f53d..f2fa601208 100644 --- a/src/main/generated/data/minecraft/recipe/stone_spear.json +++ b/src/main/generated/data/minecraft/recipe/stone_spear.json @@ -11,7 +11,6 @@ "# " ], "result": { - "count": 1, "id": "minecraft:stone_spear" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/stone_sword.json b/src/main/generated/data/minecraft/recipe/stone_sword.json index cdff3bf44e..9e5d697896 100644 --- a/src/main/generated/data/minecraft/recipe/stone_sword.json +++ b/src/main/generated/data/minecraft/recipe/stone_sword.json @@ -11,7 +11,6 @@ "#" ], "result": { - "count": 1, "id": "minecraft:stone_sword" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/stonecutter.json b/src/main/generated/data/minecraft/recipe/stonecutter.json index e2f95eecf4..1d1c6a2e34 100644 --- a/src/main/generated/data/minecraft/recipe/stonecutter.json +++ b/src/main/generated/data/minecraft/recipe/stonecutter.json @@ -10,7 +10,6 @@ "###" ], "result": { - "count": 1, "id": "minecraft:stonecutter" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/trapped_chest.json b/src/main/generated/data/minecraft/recipe/trapped_chest.json index 82cb55b53a..069ea4a9ae 100644 --- a/src/main/generated/data/minecraft/recipe/trapped_chest.json +++ b/src/main/generated/data/minecraft/recipe/trapped_chest.json @@ -6,7 +6,6 @@ "minecraft:tripwire_hook" ], "result": { - "count": 1, "id": "minecraft:trapped_chest" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/vex_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/vex_armor_trim_smithing_template.json index a150f73101..33b599c546 100644 --- a/src/main/generated/data/minecraft/recipe/vex_armor_trim_smithing_template.json +++ b/src/main/generated/data/minecraft/recipe/vex_armor_trim_smithing_template.json @@ -3,7 +3,7 @@ "category": "misc", "key": { "#": "#c:gems/diamond", - "C": "#forge:cobblestone/normal", + "C": "#c:cobblestones/normal", "S": "minecraft:vex_armor_trim_smithing_template" }, "pattern": [ diff --git a/src/main/generated/data/minecraft/recipe/ward_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/ward_armor_trim_smithing_template.json index e3a8c9db9d..9a4b94b40f 100644 --- a/src/main/generated/data/minecraft/recipe/ward_armor_trim_smithing_template.json +++ b/src/main/generated/data/minecraft/recipe/ward_armor_trim_smithing_template.json @@ -3,7 +3,7 @@ "category": "misc", "key": { "#": "#c:gems/diamond", - "C": "#forge:cobblestone/deepslate", + "C": "#c:cobblestones/deepslate", "S": "minecraft:ward_armor_trim_smithing_template" }, "pattern": [ diff --git a/src/main/generated/data/minecraft/recipe/warped_fence_gate.json b/src/main/generated/data/minecraft/recipe/warped_fence_gate.json index bd500ac089..aae3e2aeb4 100644 --- a/src/main/generated/data/minecraft/recipe/warped_fence_gate.json +++ b/src/main/generated/data/minecraft/recipe/warped_fence_gate.json @@ -11,7 +11,6 @@ "#W#" ], "result": { - "count": 1, "id": "minecraft:warped_fence_gate" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/white_banner.json b/src/main/generated/data/minecraft/recipe/white_banner.json index 0f87a1e878..fcae720d40 100644 --- a/src/main/generated/data/minecraft/recipe/white_banner.json +++ b/src/main/generated/data/minecraft/recipe/white_banner.json @@ -12,7 +12,6 @@ " | " ], "result": { - "count": 1, "id": "minecraft:white_banner" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/wooden_axe.json b/src/main/generated/data/minecraft/recipe/wooden_axe.json index 05fdaaad7e..dc06831065 100644 --- a/src/main/generated/data/minecraft/recipe/wooden_axe.json +++ b/src/main/generated/data/minecraft/recipe/wooden_axe.json @@ -11,7 +11,6 @@ " #" ], "result": { - "count": 1, "id": "minecraft:wooden_axe" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/wooden_hoe.json b/src/main/generated/data/minecraft/recipe/wooden_hoe.json index 6fd2085dda..bff2385c5a 100644 --- a/src/main/generated/data/minecraft/recipe/wooden_hoe.json +++ b/src/main/generated/data/minecraft/recipe/wooden_hoe.json @@ -11,7 +11,6 @@ " #" ], "result": { - "count": 1, "id": "minecraft:wooden_hoe" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/wooden_pickaxe.json b/src/main/generated/data/minecraft/recipe/wooden_pickaxe.json index ff84e265b6..1981ea719a 100644 --- a/src/main/generated/data/minecraft/recipe/wooden_pickaxe.json +++ b/src/main/generated/data/minecraft/recipe/wooden_pickaxe.json @@ -11,7 +11,6 @@ " # " ], "result": { - "count": 1, "id": "minecraft:wooden_pickaxe" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/wooden_shovel.json b/src/main/generated/data/minecraft/recipe/wooden_shovel.json index 3aac8226a5..43c48e78c1 100644 --- a/src/main/generated/data/minecraft/recipe/wooden_shovel.json +++ b/src/main/generated/data/minecraft/recipe/wooden_shovel.json @@ -11,7 +11,6 @@ "#" ], "result": { - "count": 1, "id": "minecraft:wooden_shovel" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/wooden_spear.json b/src/main/generated/data/minecraft/recipe/wooden_spear.json index 6c9f4220e0..cc7dbe09af 100644 --- a/src/main/generated/data/minecraft/recipe/wooden_spear.json +++ b/src/main/generated/data/minecraft/recipe/wooden_spear.json @@ -11,7 +11,6 @@ "# " ], "result": { - "count": 1, "id": "minecraft:wooden_spear" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/wooden_sword.json b/src/main/generated/data/minecraft/recipe/wooden_sword.json index 35a7a42140..ca80932c0a 100644 --- a/src/main/generated/data/minecraft/recipe/wooden_sword.json +++ b/src/main/generated/data/minecraft/recipe/wooden_sword.json @@ -11,7 +11,6 @@ "#" ], "result": { - "count": 1, "id": "minecraft:wooden_sword" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/yellow_banner.json b/src/main/generated/data/minecraft/recipe/yellow_banner.json index 6228650872..6b72a8f64a 100644 --- a/src/main/generated/data/minecraft/recipe/yellow_banner.json +++ b/src/main/generated/data/minecraft/recipe/yellow_banner.json @@ -12,7 +12,6 @@ " | " ], "result": { - "count": 1, "id": "minecraft:yellow_banner" } } \ No newline at end of file diff --git a/src/main/generated/pack.mcmeta b/src/main/generated/pack.mcmeta index bd6dcb1db5..8161ff9d70 100644 --- a/src/main/generated/pack.mcmeta +++ b/src/main/generated/pack.mcmeta @@ -3,9 +3,9 @@ "description": { "translate": "pack.forge.description" }, - "max_format": 94, + "max_format": 101, "min_format": [ - 94, + 101, 1 ] } diff --git a/src/main/java/net/minecraftforge/client/ClientCommandHandler.java b/src/main/java/net/minecraftforge/client/ClientCommandHandler.java index b08f53de82..e758aa8aed 100644 --- a/src/main/java/net/minecraftforge/client/ClientCommandHandler.java +++ b/src/main/java/net/minecraftforge/client/ClientCommandHandler.java @@ -109,7 +109,7 @@ public class ClientCommandHandler { new CommandSource() { @Override public void sendSystemMessage(Component message) { - mc.gui.getChat().addMessage(message); + mc.gui.getChat().addClientSystemMessage(message); } @Override @@ -188,7 +188,7 @@ public class ClientCommandHandler { // in case of unknown command, let the server try and handle it return false; } - mc.gui.getChat().addMessage( + mc.gui.getChat().addClientSystemMessage( Component.literal("").append(ComponentUtils.fromMessage(syntax.getRawMessage())).withStyle(ChatFormatting.RED) ); if (syntax.getInput() != null && syntax.getCursor() >= 0) { @@ -205,11 +205,11 @@ public class ClientCommandHandler { details.append(Component.literal(syntax.getInput().substring(position)).withStyle(ChatFormatting.RED, ChatFormatting.UNDERLINE)); details.append(Component.translatable("command.context.here").withStyle(ChatFormatting.RED, ChatFormatting.ITALIC)); - mc.gui.getChat().addMessage(Component.literal("").append(details).withStyle(ChatFormatting.RED)); + mc.gui.getChat().addClientSystemMessage(Component.literal("").append(details).withStyle(ChatFormatting.RED)); } } catch (Exception generic) { // Probably thrown by the command{ MutableComponent message = Component.literal(generic.getMessage() == null ? generic.getClass().getName() : generic.getMessage()); - mc.gui.getChat().addMessage( + mc.gui.getChat().addClientSystemMessage( Component.translatable("command.failed") .withStyle(ChatFormatting.RED) .withStyle(style -> style.withHoverEvent(new HoverEvent.ShowText(message))) diff --git a/src/main/java/net/minecraftforge/client/ClientCommandSourceStack.java b/src/main/java/net/minecraftforge/client/ClientCommandSourceStack.java index 12961b964a..88cd02a06c 100644 --- a/src/main/java/net/minecraftforge/client/ClientCommandSourceStack.java +++ b/src/main/java/net/minecraftforge/client/ClientCommandSourceStack.java @@ -41,7 +41,7 @@ public class ClientCommandSourceStack extends CommandSourceStack { @SuppressWarnings("resource") @Override public void sendSuccess(Supplier message, boolean sendToAdmins) { - Minecraft.getInstance().gui.getChat().addMessage(message.get()); + Minecraft.getInstance().gui.getChat().addClientSystemMessage(message.get()); } /** diff --git a/src/main/java/net/minecraftforge/client/ClientForgeMod.java b/src/main/java/net/minecraftforge/client/ClientForgeMod.java index 8f5239dec8..2ffd2a691f 100644 --- a/src/main/java/net/minecraftforge/client/ClientForgeMod.java +++ b/src/main/java/net/minecraftforge/client/ClientForgeMod.java @@ -6,14 +6,13 @@ package net.minecraftforge.client; import net.minecraft.client.renderer.chunk.ChunkSectionLayer; -import net.minecraft.client.resources.model.UnbakedGeometry; +import net.minecraft.client.resources.model.geometry.UnbakedGeometry; import net.minecraft.resources.Identifier; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.ModelEvent; import net.minecraftforge.client.event.RegisterClientReloadListenersEvent; import net.minecraftforge.client.event.RegisterNamedRenderTypesEvent; import net.minecraftforge.client.model.DynamicFluidContainerModel; -import net.minecraftforge.client.model.ItemLayerGeometry; import net.minecraftforge.client.model.obj.ObjLoader; import net.minecraftforge.eventbus.api.listener.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @@ -25,7 +24,6 @@ public class ClientForgeMod { event.register(forgeRL("empty"), (json, ctx) -> UnbakedGeometry.EMPTY); event.register(forgeRL("obj"), ObjLoader.INSTANCE); event.register(forgeRL("fluid_container"), DynamicFluidContainerModel.Loader.INSTANCE); - event.register(forgeRL("item_layers"), ItemLayerGeometry.Loader.INSTANCE); } @SubscribeEvent diff --git a/src/main/java/net/minecraftforge/client/ConfigScreenHandler.java b/src/main/java/net/minecraftforge/client/ConfigScreenHandler.java index 2d23601bd4..385b519cc5 100644 --- a/src/main/java/net/minecraftforge/client/ConfigScreenHandler.java +++ b/src/main/java/net/minecraftforge/client/ConfigScreenHandler.java @@ -39,7 +39,7 @@ public class ConfigScreenHandler public static Optional> getScreenFactoryFor(IModInfo selectedMod) { - return ModList.get().getModContainerById(selectedMod.getModId()). + return ModList.getModContainerById(selectedMod.getModId()). flatMap(mc -> mc.getCustomExtension(ConfigScreenFactory.class).map(ConfigScreenFactory::screenFunction)); } } diff --git a/src/main/java/net/minecraftforge/client/ForgeHooksClient.java b/src/main/java/net/minecraftforge/client/ForgeHooksClient.java index 93f6bd7fb6..65ae1fe6eb 100644 --- a/src/main/java/net/minecraftforge/client/ForgeHooksClient.java +++ b/src/main/java/net/minecraftforge/client/ForgeHooksClient.java @@ -23,11 +23,10 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.Options; import net.minecraft.client.color.block.BlockColors; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.ChatComponent; import net.minecraft.client.gui.components.LerpingBossEvent; import net.minecraft.client.gui.render.pip.PictureInPictureRenderer; -import net.minecraft.client.gui.render.state.pip.PictureInPictureRenderState; import net.minecraft.client.gui.screens.ConfirmScreen; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; @@ -51,11 +50,18 @@ import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.client.renderer.SubmitNodeCollector; -import net.minecraft.client.renderer.block.model.BlockModelPart; +import net.minecraft.client.renderer.block.BlockAndTintGetter; +import net.minecraft.client.renderer.block.FluidModel; +import net.minecraft.client.renderer.block.dispatch.BlockStateModel; +import net.minecraft.client.renderer.block.dispatch.BlockStateModelPart; import net.minecraft.client.renderer.chunk.ChunkSectionLayer; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.state.EntityRenderState; import net.minecraft.client.renderer.entity.state.HumanoidRenderState; import net.minecraft.client.renderer.fog.FogData; -import net.minecraft.client.renderer.state.LevelRenderState; +import net.minecraft.client.renderer.state.gui.pip.PictureInPictureRenderState; +import net.minecraft.client.renderer.state.level.CameraRenderState; +import net.minecraft.client.renderer.state.level.LevelRenderState; import net.minecraft.client.renderer.texture.SpriteContents; import net.minecraft.client.renderer.texture.TextureAtlas; import net.minecraft.client.renderer.texture.TextureAtlasSprite; @@ -64,11 +70,12 @@ import net.minecraft.client.resources.model.ModelBaker; import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.ModelManager; import net.minecraft.client.resources.model.ResolvedModel; -import net.minecraft.client.resources.model.SpriteGetter; -import net.minecraft.client.resources.model.UnbakedGeometry; +import net.minecraft.client.resources.model.geometry.UnbakedGeometry; +import net.minecraft.client.resources.model.sprite.MaterialBaker; import net.minecraft.client.resources.sounds.SoundInstance; import net.minecraft.client.sounds.SoundEngine; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.data.AtlasIds; import net.minecraft.locale.Language; import net.minecraft.network.Connection; @@ -94,10 +101,10 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.GameType; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.FogType; import net.minecraft.world.phys.BlockHitResult; @@ -277,6 +284,7 @@ public class ForgeHooksClient { RegisterColorHandlersEvent.Block.BUS.post(new RegisterColorHandlersEvent.Block(blockColors)); } + @SuppressWarnings("rawtypes") public static Model getArmorModel(HumanoidRenderState state, ItemStack itemStack, EquipmentSlot slot, HumanoidModel _default) { return IClientItemExtensions.of(itemStack).getGenericArmorModel(state, itemStack, slot, _default); } @@ -319,7 +327,7 @@ public class ForgeHooksClient { return PlaySoundEvent.BUS.fire(new PlaySoundEvent(manager, sound)).getSound(); } - public static void drawScreen(Screen screen, GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + public static void drawScreen(Screen screen, GuiGraphicsExtractor guiGraphics, int mouseX, int mouseY, float partialTick) { guiGraphics.pose().pushMatrix(); for (Screen layer : guiLayers) { // Prevent the background layers from thinking the mouse is over their controls and showing them as highlighted. @@ -330,9 +338,9 @@ public class ForgeHooksClient { guiGraphics.pose().popMatrix(); } - private static void drawScreenInternal(Screen screen, GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + private static void drawScreenInternal(Screen screen, GuiGraphicsExtractor guiGraphics, int mouseX, int mouseY, float partialTick) { if (!ScreenEvent.Render.Pre.BUS.post(new ScreenEvent.Render.Pre(screen, guiGraphics, mouseX, mouseY, partialTick))) - screen.renderWithTooltipAndSubtitles(guiGraphics, mouseX, mouseY, partialTick); + screen.extractRenderStateWithTooltipAndSubtitles(guiGraphics, mouseX, mouseY, partialTick); ScreenEvent.Render.Post.BUS.post(new ScreenEvent.Render.Post(screen, guiGraphics, mouseX, mouseY, partialTick)); } @@ -367,15 +375,13 @@ public class ForgeHooksClient { ModelEvent.BakingCompleted.BUS.post(new ModelEvent.BakingCompleted(modelManager, modelBakery)); } - public static TextureAtlasSprite[] getFluidSprites(BlockAndTintGetter level, BlockPos pos, FluidState fluidStateIn) { - IClientFluidTypeExtensions props = IClientFluidTypeExtensions.of(fluidStateIn); - Identifier overlayTexture = props.getOverlayTexture(fluidStateIn, level, pos); - var atlas = Minecraft.getInstance().getAtlasManager().getAtlasOrThrow(AtlasIds.BLOCKS); - return new TextureAtlasSprite[] { - atlas.getSprite(props.getStillTexture(fluidStateIn, level, pos)), - atlas.getSprite(props.getFlowingTexture(fluidStateIn, level, pos)), - overlayTexture == null ? null : atlas.getSprite(overlayTexture), - }; + public static Map onFluidModelBake(ModelBakery bakery, MaterialBaker materials, Map vanilla) { + var ret = new HashMap(); + ModelEvent.BakeFluidModels.BUS.post(new ModelEvent.BakeFluidModels(bakery, materials, ret)); + if (ret.isEmpty()) + return vanilla; + ret.putAll(vanilla); + return Map.copyOf(ret); } private static int slotMainHand = 0; @@ -395,24 +401,24 @@ public class ForgeHooksClient { return from.getItem().shouldCauseReequipAnimation(from, to, changed); } - public static @Nullable CustomizeGuiOverlayEvent.BossEventProgress onCustomizeBossEventProgress(GuiGraphics guiGraphics, Window window, LerpingBossEvent bossInfo, int x, int y, int increment) { + public static @Nullable CustomizeGuiOverlayEvent.BossEventProgress onCustomizeBossEventProgress(GuiGraphicsExtractor guiGraphics, Window window, LerpingBossEvent bossInfo, int x, int y, int increment) { var evt = new CustomizeGuiOverlayEvent.BossEventProgress(window, guiGraphics, Minecraft.getInstance().getDeltaTracker().getGameTimeDeltaPartialTick(false), bossInfo, x, y, increment); return CustomizeGuiOverlayEvent.BossEventProgress.BUS.post(evt) ? null : evt; } - public static void onCustomizeChatEvent(GuiGraphics guiGraphics, ChatComponent chat, Window window, int mouseX, int mouseY, int tickCount, Font font) { + public static void onCustomizeChatEvent(GuiGraphicsExtractor guiGraphics, ChatComponent chat, Window window, int mouseX, int mouseY, int tickCount, Font font) { var minecraft = Minecraft.getInstance(); var evt = new CustomizeGuiOverlayEvent.Chat(window, guiGraphics, minecraft.getDeltaTracker().getRealtimeDeltaTicks(), 0, chat.getHeight() - 40); CustomizeGuiOverlayEvent.Chat.BUS.post(evt); guiGraphics.pose().pushMatrix(); // We give the absolute Y position of the chat component in the event and account for the chat component's own offsetting here. guiGraphics.pose().translate(evt.getPosX(), (float) ((evt.getPosY() - chat.getHeight() + 40) / chat.getScale())); - chat.render(guiGraphics, font, tickCount, mouseX, mouseY, false, false); + chat.extractRenderState(guiGraphics, font, tickCount, mouseX, mouseY, ChatComponent.DisplayMode.BACKGROUND, false); guiGraphics.pose().popMatrix(); } - public static void onCustomizeDebugEvent(GuiGraphics guiGraphics, Window window, float partialTick, List text, boolean isLeft) { + public static void onCustomizeDebugEvent(GuiGraphicsExtractor guiGraphics, Window window, float partialTick, List text, boolean isLeft) { var evt = new CustomizeGuiOverlayEvent.DebugText(window, guiGraphics, partialTick, text, isLeft ? CustomizeGuiOverlayEvent.DebugText.Side.Left : CustomizeGuiOverlayEvent.DebugText.Side.Right); CustomizeGuiOverlayEvent.DebugText.BUS.post(evt); @@ -483,13 +489,12 @@ public class ForgeHooksClient { return null; } - @Nullable - public static TextureAtlasSprite loadTextureAtlasSprite(Identifier atlasName, SpriteContents contents, int atlasWidth, int atlasHeight, int spriteX, int spriteY, int padding, int mipmapLevel) { + public static TextureAtlasSprite loadTextureAtlasSprite(Identifier atlasName, SpriteContents contents, int atlasWidth, int atlasHeight, int x, int y, int padding) { + TextureAtlasSprite ret = null; var forgeMeta = contents.getAdditionalMetadata(ForgeTextureMetadata.TYPE).orElse(null); - if (forgeMeta == null || forgeMeta.loader() == null) - return null; - - return forgeMeta.loader().makeSprite(atlasName, contents, atlasWidth, atlasHeight, spriteX, spriteY, padding, mipmapLevel); + if (forgeMeta != null && forgeMeta.loader() != null) + ret = forgeMeta.loader().makeSprite(atlasName, contents, atlasWidth, atlasHeight, x, y, padding, contents.getMipLevel()); + return ret != null ? ret : new TextureAtlasSprite(atlasName, contents, atlasWidth, atlasHeight, x, y, padding); } private static final Map> layerDefinitions = new HashMap<>(); @@ -515,7 +520,7 @@ public class ForgeHooksClient { boolean channelsMatch = NetworkRegistry.checkListPingCompatibilityForClient(remoteChannels); AtomicBoolean result = new AtomicBoolean(true); final List extraClientMods = new ArrayList<>(); - ModList.get().forEachModContainer((modid, mc) -> + ModList.forEachModContainer((modid, mc) -> mc.getCustomExtension(IExtensionPoint.DisplayTest.class).ifPresent(ext-> { boolean foundModOnServer = ext.remoteVersionTest().test(mods.get(modid), true); result.compareAndSet(true, foundModOnServer); @@ -526,8 +531,8 @@ public class ForgeHooksClient { boolean modsMatch = result.get(); final Map extraServerMods = mods.entrySet().stream(). - filter(e -> !Objects.equals(IExtensionPoint.DisplayTest.IGNORESERVERONLY, e.getValue())). - filter(e -> !ModList.get().isLoaded(e.getKey())). + filter(e -> !IExtensionPoint.DisplayTest.IGNORESERVERONLY.equals(e.getValue())). + filter(e -> !ModList.isLoaded(e.getKey())). collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); LOGGER.debug(CLIENTHOOKS, "Received FML ping data from server at {}: FMLNETVER={}, mod list is compatible : {}, channel list is compatible: {}, extra server mods: {}", target.ip, fmlver, modsMatch, channelsMatch, extraServerMods); @@ -558,7 +563,7 @@ public class ForgeHooksClient { } private static final Identifier ICON_SHEET = Identifier.fromNamespaceAndPath(ForgeVersion.MOD_ID, "textures/gui/icons.png"); - public static void drawForgePingInfo(JoinMultiplayerScreen gui, ServerData target, GuiGraphics guiGraphics, int x, int y, int width, int relativeMouseX, int relativeMouseY) { + public static void drawForgePingInfo(JoinMultiplayerScreen gui, ServerData target, GuiGraphicsExtractor guiGraphics, int x, int y, int width, int relativeMouseX, int relativeMouseY) { int idx; String tooltip; if (target.forgeData == null) @@ -659,7 +664,7 @@ public class ForgeHooksClient { return stackFont == null ? fallbackFont : stackFont; } - public static @Nullable RenderTooltipEvent.Pre onRenderTooltipPre(@NotNull ItemStack stack, GuiGraphics graphics, int x, int y, int screenWidth, int screenHeight, @NotNull List components, @NotNull Font fallbackFont, @NotNull ClientTooltipPositioner positioner, @Nullable Identifier background) { + public static @Nullable RenderTooltipEvent.Pre onRenderTooltipPre(@NotNull ItemStack stack, GuiGraphicsExtractor graphics, int x, int y, int screenWidth, int screenHeight, @NotNull List components, @NotNull Font fallbackFont, @NotNull ClientTooltipPositioner positioner, @Nullable Identifier background) { var preEvent = new RenderTooltipEvent.Pre(stack, graphics, x, y, screenWidth, screenHeight, getTooltipFont(stack, fallbackFont), components, positioner, background); return RenderTooltipEvent.Pre.BUS.post(preEvent) ? null : preEvent; } @@ -730,11 +735,6 @@ public class ForgeHooksClient { return font.split(text, maxWidth).stream().map(ClientTooltipComponent::create); } - public static boolean isBlockInSolidLayer(BlockState state) { - var model = Minecraft.getInstance().getBlockRenderer().getBlockModel(state); - return model.getRenderTypes(state, RandomSource.create(), ModelData.EMPTY).contains(ChunkSectionLayer.SOLID); - } - public static void createWorldConfirmationScreen(Runnable doConfirmedWorldLoad) { Component title = Component.translatable("selectWorld.backupQuestion.experimental"); Component msg = Component.translatable("selectWorld.backupWarning.experimental") @@ -855,55 +855,6 @@ public class ForgeHooksClient { return new ForgeBlockModelData(transform, renderType, renderTypeFast, visibility); } - /** This is a dirty fucking hack, but it needs to send in the top most render type. */ - public static ModelBaker wrapRenderType(ModelBaker parent, RenderTypeGroup group) { - if (group == null || group == RenderTypeGroup.EMPTY || parent.renderType() != null) - return parent; - return new WrapedModelBaker(parent, group); - } - - public static ModelBaker wrapRenderType(ModelBaker parent, RenderTypeGroup group, RenderTypeGroup groupFast) { - if (group == null || group == RenderTypeGroup.EMPTY || parent.renderType() != null) - return parent; - return new WrapedModelBaker(parent, group, groupFast); - } - - // a record for performance reasons - private record WrapedModelBaker(ModelBaker parent, RenderTypeGroup group, RenderTypeGroup renderTypeFast) implements ModelBaker { - private WrapedModelBaker(ModelBaker parent, RenderTypeGroup group) { - this(parent, group, RenderTypeGroup.EMPTY); - } - - @Override - public RenderTypeGroup renderType() { - return group; - } - - @Override public ResolvedModel getModel(Identifier p_397309_) { - return parent.getModel(p_397309_); - } - - @Override - public SpriteGetter sprites() { - return parent.sprites(); - } - - @Override - public T compute(SharedOperationKey p_395456_) { - return parent.compute(p_395456_); - } - - @Override - public BlockModelPart missingBlockModelPart() { - return parent.missingBlockModelPart(); - } - - @Override - public PartCache parts() { - return parent.parts(); - } - } - public static void addFramePass(Identifier rl, FramePassManager.PassDefinition definition) { FramePassManager.addPass(rl, definition); } diff --git a/src/main/java/net/minecraftforge/client/ForgeRenderTypes.java b/src/main/java/net/minecraftforge/client/ForgeRenderTypes.java index 71da1042df..42a8e1d283 100644 --- a/src/main/java/net/minecraftforge/client/ForgeRenderTypes.java +++ b/src/main/java/net/minecraftforge/client/ForgeRenderTypes.java @@ -6,8 +6,8 @@ package net.minecraftforge.client; import com.mojang.blaze3d.pipeline.BlendFunction; +import com.mojang.blaze3d.pipeline.ColorTargetState; import com.mojang.blaze3d.pipeline.RenderPipeline; -import com.mojang.blaze3d.platform.DepthTestFunction; import com.mojang.blaze3d.platform.DestFactor; import com.mojang.blaze3d.platform.SourceFactor; import com.mojang.blaze3d.systems.RenderSystem; @@ -32,8 +32,6 @@ import org.jetbrains.annotations.ApiStatus; public enum ForgeRenderTypes { ITEM_LAYERED_SOLID(()-> getItemLayeredSolid(blockAtlas())), ITEM_LAYERED_CUTOUT(()-> getItemLayeredCutout(blockAtlas())), - ITEM_LAYERED_CUTOUT_MIPPED(()-> getItemLayeredCutoutMipped(blockAtlas())), - ITEM_LAYERED_TRANSLUCENT(()-> getItemLayeredTranslucent(blockAtlas())), ITEM_UNSORTED_TRANSLUCENT(()-> getUnsortedTranslucent(blockAtlas())), ITEM_UNLIT_TRANSLUCENT(()-> getUnlitTranslucent(blockAtlas())), ITEM_UNSORTED_UNLIT_TRANSLUCENT(()-> getUnlitTranslucent(blockAtlas(), false)); @@ -69,20 +67,6 @@ public enum ForgeRenderTypes { return Internal.LAYERED_ITEM_CUTOUT.apply(textureLocation); } - /** - * @return A RenderType fit for multi-layer cutout-mipped item rendering. - */ - public static RenderType getItemLayeredCutoutMipped(Identifier textureLocation) { - return Internal.LAYERED_ITEM_CUTOUT_MIPPED.apply(textureLocation); - } - - /** - * @return A RenderType fit for multi-layer translucent item rendering. - */ - public static RenderType getItemLayeredTranslucent(Identifier textureLocation) { - return Internal.LAYERED_ITEM_TRANSLUCENT.apply(textureLocation); - } - /** * @return A RenderType fit for translucent item/entity rendering, but with depth sorting disabled. */ @@ -107,13 +91,6 @@ public enum ForgeRenderTypes { return (sortingEnabled ? Internal.UNLIT_TRANSLUCENT_SORTED : Internal.UNLIT_TRANSLUCENT_UNSORTED).apply(textureLocation); } - /** - * @return Same as {@link RenderType#entityCutout(Identifier)}, but with mipmapping enabled. - */ - public static RenderType getEntityCutoutMipped(Identifier textureLocation) { - return Internal.LAYERED_ITEM_CUTOUT_MIPPED.apply(textureLocation); - } - /** * @see #enableTextTextureLinearFiltering * @@ -268,35 +245,6 @@ public enum ForgeRenderTypes { ); } - public static Function LAYERED_ITEM_CUTOUT_MIPPED = Util.memoize(Internal::layeredItemCutoutMipped); - private static RenderType layeredItemCutoutMipped(Identifier texture) { - return RenderType.create("forge_layered_item_cutout_mipped", - RenderSetup.builder(RenderPipelines.ENTITY_SMOOTH_CUTOUT) - .bufferSize(RenderType.TRANSIENT_BUFFER_SIZE) - .affectsCrumbling() - .withTexture("Sampler0", texture) // Used to have mipmap = true - .useLightmap() - .useOverlay() - .setOutline(RenderSetup.OutlineProperty.AFFECTS_OUTLINE) - .createRenderSetup() - ); - } - - public static Function LAYERED_ITEM_TRANSLUCENT = Util.memoize(Internal::layeredItemTranslucent); - private static RenderType layeredItemTranslucent(Identifier texture) { - return RenderType.create("forge_layered_item_translucent", - RenderSetup.builder(RenderPipelines.ITEM_ENTITY_TRANSLUCENT_CULL) - .bufferSize(RenderType.TRANSIENT_BUFFER_SIZE) - .affectsCrumbling() - .sortOnUpload() - .withTexture("Sampler0", texture) - .useLightmap() - .useOverlay() - .setOutline(RenderSetup.OutlineProperty.AFFECTS_OUTLINE) - .createRenderSetup() - ); - } - public static Function TEXT = Util.memoize(Internal::getText); private static RenderType getText(Identifier texture) { return RenderType.create( @@ -371,9 +319,7 @@ public enum ForgeRenderTypes { private static final RenderPipeline LOADING_PIPELINE = RenderPipeline.builder(RenderPipelines.GUI_TEXTURED_SNIPPET) .withLocation("pipeline/forge/loading_overlay") - .withBlend(new BlendFunction(SourceFactor.SRC_ALPHA, DestFactor.ONE)) - .withDepthTestFunction(DepthTestFunction.NO_DEPTH_TEST) - .withDepthWrite(false) + .withColorTargetState(new ColorTargetState(new BlendFunction(SourceFactor.SRC_ALPHA, DestFactor.ONE))) .build(); private static final GpuSampler LOADING_SAMPLER = RenderSystem.getSamplerCache().getSampler(AddressMode.REPEAT, AddressMode.REPEAT, FilterMode.NEAREST, FilterMode.NEAREST, false); diff --git a/src/main/java/net/minecraftforge/client/FramePassManager.java b/src/main/java/net/minecraftforge/client/FramePassManager.java index 37b28c2f80..626c47336b 100644 --- a/src/main/java/net/minecraftforge/client/FramePassManager.java +++ b/src/main/java/net/minecraftforge/client/FramePassManager.java @@ -7,13 +7,10 @@ package net.minecraftforge.client; import com.mojang.blaze3d.framegraph.FrameGraphBuilder; import com.mojang.blaze3d.framegraph.FramePass; -import com.mojang.blaze3d.resource.ResourceHandle; import net.minecraft.client.renderer.LevelTargetBundle; -import net.minecraft.client.renderer.state.LevelRenderState; +import net.minecraft.client.renderer.state.level.LevelRenderState; import net.minecraft.resources.Identifier; import org.jetbrains.annotations.ApiStatus; -import org.jspecify.annotations.Nullable; - import java.util.ArrayList; import java.util.List; @@ -45,28 +42,12 @@ public class FramePassManager { * A FramePass must bind to at least ONE target. Otherwise, you get freaky issues with >1 modded passes. * Additionally, this method should be used for extracting render states into instance variables if desired. */ - default void extracts(LevelTargetBundle bundle, FramePass pass) { - targets(bundle, pass); - } - - /** - * Prefer {@link PassDefinition#extracts} - */ - @Deprecated(forRemoval = true, since = "1.21.10") - default void targets(LevelTargetBundle bundle, FramePass pass) {} + void extracts(LevelTargetBundle bundle, FramePass pass); /** * Use to define what your pass does during the render stage. */ - default void executes(LevelRenderState state) { - executes(); - }; - - /** - * Use to define what your pass does during the render stage, prefer {@link PassDefinition#executes(LevelRenderState)}. - */ - @Deprecated(forRemoval = true, since = "1.21.10") - default void executes(){}; + void executes(LevelRenderState state); } private record PassInfo(String name, PassDefinition pass){} diff --git a/src/main/java/net/minecraftforge/client/IItemDecorator.java b/src/main/java/net/minecraftforge/client/IItemDecorator.java index 761fe87c79..7178734347 100644 --- a/src/main/java/net/minecraftforge/client/IItemDecorator.java +++ b/src/main/java/net/minecraftforge/client/IItemDecorator.java @@ -6,7 +6,7 @@ package net.minecraftforge.client; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ItemLike; import net.minecraftforge.client.event.RegisterItemDecorationsEvent; @@ -15,14 +15,13 @@ import net.minecraftforge.client.event.RegisterItemDecorationsEvent; * An ItemDecorator that is used to render something on specific items, when the DurabilityBar and StackCount is rendered. * Add it to an item using {@linkplain RegisterItemDecorationsEvent#register(ItemLike, IItemDecorator)}. */ -public interface IItemDecorator -{ +public interface IItemDecorator { /** - * Is called after {@linkplain GuiGraphics#renderItemDecorations(Font, ItemStack, int, int, String)} is done rendering. + * Is called after {@linkplain GuiGraphicsExtractor#itemDecorations(Font, ItemStack, int, int, String)} is done rendering. * The StackCount is rendered at blitOffset+200 so use the blitOffset with caution. *

* The RenderState during this call will be: enableTexture, enableDepthTest, enableBlend and defaultBlendFunc * @return true if you have modified the RenderState and it has to be reset for other ItemDecorators */ - boolean render(GuiGraphics guiGraphics, Font font, ItemStack stack, int xOffset, int yOffset); + boolean render(GuiGraphicsExtractor guiGraphics, Font font, ItemStack stack, int xOffset, int yOffset); } diff --git a/src/main/java/net/minecraftforge/client/ItemDecoratorHandler.java b/src/main/java/net/minecraftforge/client/ItemDecoratorHandler.java index f07e6e8f8a..0024a5d485 100644 --- a/src/main/java/net/minecraftforge/client/ItemDecoratorHandler.java +++ b/src/main/java/net/minecraftforge/client/ItemDecoratorHandler.java @@ -9,12 +9,12 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import net.minecraft.client.gui.GuiGraphics; import org.jetbrains.annotations.ApiStatus; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraftforge.client.event.RegisterItemDecorationsEvent; @@ -49,7 +49,7 @@ public final class ItemDecoratorHandler { return DECORATOR_LOOKUP.getOrDefault(stack.getItem(), EMPTY); } - public void render(GuiGraphics guiGraphics, Font font, ItemStack stack, int xOffset, int yOffset) { + public void render(GuiGraphicsExtractor guiGraphics, Font font, ItemStack stack, int xOffset, int yOffset) { resetRenderState(); for (IItemDecorator itemDecorator : itemDecorators) { if (itemDecorator.render(guiGraphics, font, stack, xOffset, yOffset)) diff --git a/src/main/java/net/minecraftforge/client/NamedRenderTypeManager.java b/src/main/java/net/minecraftforge/client/NamedRenderTypeManager.java index 56868bf6c9..a62835ba70 100644 --- a/src/main/java/net/minecraftforge/client/NamedRenderTypeManager.java +++ b/src/main/java/net/minecraftforge/client/NamedRenderTypeManager.java @@ -42,8 +42,6 @@ public final class NamedRenderTypeManager { private static void preRegisterVanillaRenderTypes(Map blockRenderTypes) { blockRenderTypes.put(rl("solid"), new RenderTypeGroup(ChunkSectionLayer.SOLID, ForgeRenderTypes.ITEM_LAYERED_SOLID.get())); blockRenderTypes.put(rl("cutout"), new RenderTypeGroup(ChunkSectionLayer.CUTOUT, ForgeRenderTypes.ITEM_LAYERED_CUTOUT.get())); - blockRenderTypes.put(rl("translucent_moving_block"), new RenderTypeGroup(ChunkSectionLayer.TRANSLUCENT, ForgeRenderTypes.ITEM_LAYERED_TRANSLUCENT.get())); - blockRenderTypes.put(rl("tripwire"), new RenderTypeGroup(ChunkSectionLayer.TRIPWIRE, ForgeRenderTypes.ITEM_LAYERED_TRANSLUCENT.get())); } private static Identifier rl(String path) { diff --git a/src/main/java/net/minecraftforge/client/RenderTypeHelper.java b/src/main/java/net/minecraftforge/client/RenderTypeHelper.java deleted file mode 100644 index 6a334a44ee..0000000000 --- a/src/main/java/net/minecraftforge/client/RenderTypeHelper.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) Forge Development LLC and contributors - * SPDX-License-Identifier: LGPL-2.1-only - */ - -package net.minecraftforge.client; - -import com.mojang.blaze3d.vertex.DefaultVertexFormat; -import net.minecraft.client.renderer.ItemBlockRenderTypes; -import net.minecraft.client.renderer.Sheets; -import net.minecraft.client.renderer.block.model.BlockStateModel; -import net.minecraft.client.renderer.chunk.ChunkSectionLayer; -import net.minecraft.client.renderer.rendertype.RenderType; -import net.minecraft.client.renderer.rendertype.RenderTypes; -import net.minecraft.util.RandomSource; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.client.model.data.ModelData; -import org.jetbrains.annotations.NotNull; - -/** - * Provides helper functions replacing those in {@link ItemBlockRenderTypes}. - */ -public final class RenderTypeHelper { - /** - * Provides a {@link RenderType} using {@link DefaultVertexFormat#NEW_ENTITY} for the given {@link DefaultVertexFormat#BLOCK} format. - * This should be called for each {@link RenderType} returned by {@link BakedModel#getRenderTypes(BlockState, RandomSource, ModelData)}. - *

- * Mimics the behavior of vanilla's {@link ItemBlockRenderTypes#getRenderType(BlockState)}. - */ - @NotNull - public static RenderType getEntityRenderType(ChunkSectionLayer layer) { - return layer == ChunkSectionLayer.TRANSLUCENT ? Sheets.translucentItemSheet() : Sheets.cutoutBlockSheet(); - } - - /** - * Provides a {@link RenderType} fit for rendering moving blocks given the specified chunk render type. - * This should be called for each {@link RenderType} returned by {@link BakedModel#getRenderTypes(BlockState, RandomSource, ModelData)}. - *

- * Mimics the behavior of vanilla's {@link ItemBlockRenderTypes#getMovingBlockRenderType(BlockState)}. - */ - @NotNull - public static RenderType getMovingBlockRenderType(ChunkSectionLayer layer) { - if (layer == null) - return RenderTypes.solidMovingBlock(); - - return switch (layer) { - case SOLID -> RenderTypes.solidMovingBlock(); - case CUTOUT -> RenderTypes.cutoutMovingBlock(); - case TRANSLUCENT -> RenderTypes.translucentMovingBlock(); - case TRIPWIRE -> RenderTypes.tripwireMovingBlock(); - }; - } - - /** - * Provides a fallback {@link RenderType} for the given {@link ItemStack} in the case that none is explicitly specified. - *

- * Mimics the behavior of vanilla's {@link ItemBlockRenderTypes#getRenderType(ItemStack, boolean)} - * but removes the need to query the model again if the item is a {@link BlockItem}. - */ - @NotNull - public static RenderType getFallbackItemRenderType(ItemStack stack, BlockStateModel model) { - if (stack.getItem() instanceof BlockItem blockItem) { - var renderTypes = model.getRenderTypes(blockItem.getBlock().defaultBlockState(), RandomSource.create(42), ModelData.EMPTY); - if (renderTypes.contains(ChunkSectionLayer.TRANSLUCENT)) - return getEntityRenderType(ChunkSectionLayer.TRANSLUCENT); - return Sheets.cutoutBlockSheet(); - } - return Sheets.translucentItemSheet(); - } - - private RenderTypeHelper() {} -} diff --git a/src/main/java/net/minecraftforge/client/event/AddGuiOverlayLayersEvent.java b/src/main/java/net/minecraftforge/client/event/AddGuiOverlayLayersEvent.java index 63620b878c..beb065f2b7 100644 --- a/src/main/java/net/minecraftforge/client/event/AddGuiOverlayLayersEvent.java +++ b/src/main/java/net/minecraftforge/client/event/AddGuiOverlayLayersEvent.java @@ -6,11 +6,9 @@ package net.minecraftforge.client.event; import net.minecraftforge.client.gui.overlay.ForgeLayeredDraw; -import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.RecordEvent; import net.minecraftforge.eventbus.api.event.characteristic.SelfDestructing; -import net.minecraftforge.fml.event.IModBusEvent; import org.jetbrains.annotations.ApiStatus; import org.jspecify.annotations.NullMarked; @@ -28,10 +26,4 @@ public record AddGuiOverlayLayersEvent(ForgeLayeredDraw getLayeredDraw) implemen @ApiStatus.Internal public AddGuiOverlayLayersEvent {} - - /** @deprecated {@link AddGuiOverlayLayersEvent} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } } diff --git a/src/main/java/net/minecraftforge/client/event/ClientChatReceivedEvent.java b/src/main/java/net/minecraftforge/client/event/ClientChatReceivedEvent.java index 50390e12ac..10a94d5bd5 100644 --- a/src/main/java/net/minecraftforge/client/event/ClientChatReceivedEvent.java +++ b/src/main/java/net/minecraftforge/client/event/ClientChatReceivedEvent.java @@ -5,7 +5,6 @@ package net.minecraftforge.client.event; -import net.minecraft.util.Util; import net.minecraft.network.chat.ChatType; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.PlayerChatMessage; @@ -75,17 +74,6 @@ public sealed class ClientChatReceivedEvent extends MutableEvent implements Canc return this.sender; } - /** - * {@return {@code true} if the message was sent by the system, {@code false} otherwise} - * - * @deprecated Mojang made ChatType a registry, which isn't always accessible when the System messages are sent. - * So moved to it's own event. {@link SystemMessageReceivedEvent} - */ - @Deprecated(forRemoval = true, since = "1.21.1") - public boolean isSystem() { - return this.sender.equals(Util.NIL_UUID); - } - /** * Fired when a player chat message is received on the client. * @@ -116,30 +104,4 @@ public sealed class ClientChatReceivedEvent extends MutableEvent implements Canc return this.playerChatMessage; } } - - /** - * Fired when a system message is received on the client. - * - * @deprecated Mojang made ChatType a registry, which isn't always accessible when the System messages are sent. - * So moved to its own event. {@link SystemMessageReceivedEvent} - */ - @Deprecated(forRemoval = true, since = "1.21.1") - public static final class System extends ClientChatReceivedEvent { - public static final CancellableEventBus BUS = CancellableEventBus.create(System.class); - - private final boolean overlay; - - @ApiStatus.Internal - public System(ChatType.Bound boundChatType, Component message, boolean overlay) { - super(boundChatType, message, Util.NIL_UUID); - this.overlay = overlay; - } - - /** - * {@return whether the message goes to the overlay} - */ - public boolean isOverlay() { - return this.overlay; - } - } } \ No newline at end of file diff --git a/src/main/java/net/minecraftforge/client/event/ContainerScreenEvent.java b/src/main/java/net/minecraftforge/client/event/ContainerScreenEvent.java index 7f0c06fd2f..6db26deaa7 100644 --- a/src/main/java/net/minecraftforge/client/event/ContainerScreenEvent.java +++ b/src/main/java/net/minecraftforge/client/event/ContainerScreenEvent.java @@ -5,7 +5,7 @@ package net.minecraftforge.client.event; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.bus.EventBus; @@ -43,7 +43,7 @@ public sealed interface ContainerScreenEvent { /** * {@return the gui graphics used for rendering} */ - GuiGraphics getGuiGraphics(); + GuiGraphicsExtractor getGuiGraphics(); /** * {@return the X coordinate of the mouse pointer} @@ -67,7 +67,7 @@ public sealed interface ContainerScreenEvent { */ record Foreground( AbstractContainerScreen getContainerScreen, - GuiGraphics getGuiGraphics, + GuiGraphicsExtractor getGuiGraphics, int getMouseX, int getMouseY ) implements RecordEvent, Render { @@ -86,7 +86,7 @@ public sealed interface ContainerScreenEvent { */ record Background( AbstractContainerScreen getContainerScreen, - GuiGraphics getGuiGraphics, + GuiGraphicsExtractor getGuiGraphics, int getMouseX, int getMouseY ) implements RecordEvent, Render { diff --git a/src/main/java/net/minecraftforge/client/event/CreateSpecialBlockRendererEvent.java b/src/main/java/net/minecraftforge/client/event/CreateSpecialBlockRendererEvent.java deleted file mode 100644 index 1a7d32df25..0000000000 --- a/src/main/java/net/minecraftforge/client/event/CreateSpecialBlockRendererEvent.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) Forge Development LLC and contributors - * SPDX-License-Identifier: LGPL-2.1-only - */ - -package net.minecraftforge.client.event; - -import java.util.Map; - -import net.minecraft.client.renderer.special.SpecialModelRenderer; -import net.minecraft.world.level.block.Block; -import net.minecraftforge.eventbus.api.bus.EventBus; -import net.minecraftforge.eventbus.api.event.MutableEvent; - -public final class CreateSpecialBlockRendererEvent extends MutableEvent { - public static final EventBus BUS = EventBus.create(CreateSpecialBlockRendererEvent.class); - - private final Map map; - - public CreateSpecialBlockRendererEvent(Map map) { - this.map = map; - } - - public void register(Block block, SpecialModelRenderer.Unbaked renderer) { - this.map.put(block, renderer); - } -} diff --git a/src/main/java/net/minecraftforge/client/event/CustomizeGuiOverlayEvent.java b/src/main/java/net/minecraftforge/client/event/CustomizeGuiOverlayEvent.java index bf674111c7..fad2e3f6c0 100644 --- a/src/main/java/net/minecraftforge/client/event/CustomizeGuiOverlayEvent.java +++ b/src/main/java/net/minecraftforge/client/event/CustomizeGuiOverlayEvent.java @@ -6,7 +6,7 @@ package net.minecraftforge.client.event; import com.mojang.blaze3d.platform.Window; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.LerpingBossEvent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.bus.CancellableEventBus; @@ -29,7 +29,7 @@ import java.util.List; public sealed interface CustomizeGuiOverlayEvent { Window getWindow(); - GuiGraphics getGuiGraphics(); + GuiGraphicsExtractor getGuiGraphics(); float getPartialTick(); @@ -46,7 +46,7 @@ public sealed interface CustomizeGuiOverlayEvent { public static final CancellableEventBus BUS = CancellableEventBus.create(BossEventProgress.class); private final Window window; - private final GuiGraphics guiGraphics; + private final GuiGraphicsExtractor guiGraphics; private final float partialTick; private final LerpingBossEvent bossEvent; private final int x; @@ -54,7 +54,7 @@ public sealed interface CustomizeGuiOverlayEvent { private int increment; @ApiStatus.Internal - public BossEventProgress(Window window, GuiGraphics guiGraphics, float partialTick, LerpingBossEvent bossEvent, int x, int y, int increment) { + public BossEventProgress(Window window, GuiGraphicsExtractor guiGraphics, float partialTick, LerpingBossEvent bossEvent, int x, int y, int increment) { this.window = window; this.guiGraphics = guiGraphics; this.partialTick = partialTick; @@ -70,7 +70,7 @@ public sealed interface CustomizeGuiOverlayEvent { } @Override - public GuiGraphics getGuiGraphics() { + public GuiGraphicsExtractor getGuiGraphics() { return guiGraphics; } @@ -129,7 +129,7 @@ public sealed interface CustomizeGuiOverlayEvent { */ record DebugText( Window getWindow, - GuiGraphics getGuiGraphics, + GuiGraphicsExtractor getGuiGraphics, float getPartialTick, List getText, Side getSide @@ -155,13 +155,13 @@ public sealed interface CustomizeGuiOverlayEvent { public static final EventBus BUS = EventBus.create(Chat.class); private final Window window; - private final GuiGraphics guiGraphics; + private final GuiGraphicsExtractor guiGraphics; private final float partialTick; private int posX; private int posY; @ApiStatus.Internal - public Chat(Window window, GuiGraphics guiGraphics, float partialTick, int posX, int posY) { + public Chat(Window window, GuiGraphicsExtractor guiGraphics, float partialTick, int posX, int posY) { this.window = window; this.guiGraphics = guiGraphics; this.partialTick = partialTick; @@ -175,7 +175,7 @@ public sealed interface CustomizeGuiOverlayEvent { } @Override - public GuiGraphics getGuiGraphics() { + public GuiGraphicsExtractor getGuiGraphics() { return guiGraphics; } diff --git a/src/main/java/net/minecraftforge/client/event/EntityRenderersEvent.java b/src/main/java/net/minecraftforge/client/event/EntityRenderersEvent.java index be52b81094..473d755357 100644 --- a/src/main/java/net/minecraftforge/client/event/EntityRenderersEvent.java +++ b/src/main/java/net/minecraftforge/client/event/EntityRenderersEvent.java @@ -32,13 +32,11 @@ import net.minecraft.world.level.block.SkullBlock.Type; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraftforge.client.ForgeHooksClient; -import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.MutableEvent; import net.minecraftforge.eventbus.api.event.RecordEvent; import net.minecraftforge.eventbus.api.event.characteristic.SelfDestructing; import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.fml.event.IModBusEvent; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; import org.jspecify.annotations.NullMarked; @@ -69,12 +67,6 @@ public sealed interface EntityRenderersEvent { record RegisterLayerDefinitions() implements SelfDestructing, RecordEvent, EntityRenderersEvent { public static final EventBus BUS = EventBus.create(RegisterLayerDefinitions.class); - /** @deprecated {@link EntityRenderersEvent.RegisterLayerDefinitions} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - @ApiStatus.Internal public RegisterLayerDefinitions {} @@ -103,12 +95,6 @@ public sealed interface EntityRenderersEvent { record RegisterRenderers() implements SelfDestructing, RecordEvent, EntityRenderersEvent { public static final EventBus BUS = EventBus.create(RegisterRenderers.class); - /** @deprecated {@link RegisterRenderers} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - @ApiStatus.Internal public RegisterRenderers {} @@ -142,12 +128,6 @@ public sealed interface EntityRenderersEvent { final class AddLayers extends MutableEvent implements EntityRenderersEvent { public static final EventBus BUS = EventBus.create(AddLayers.class); - /** @deprecated {@link EntityRenderersEvent.AddLayers} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - private final Map, EntityRenderer> renderers; private final Map> playerRenderers; private final Map> mannequinRenderers; @@ -234,12 +214,6 @@ public sealed interface EntityRenderersEvent { final class CreateSkullModels extends MutableEvent implements EntityRenderersEvent { public static final EventBus BUS = EventBus.create(CreateSkullModels.class); - /** @deprecated {@link EntityRenderersEvent.CreateSkullModels} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - private final ImmutableMap.Builder> builder; @ApiStatus.Internal diff --git a/src/main/java/net/minecraftforge/client/event/ForgeEventFactoryClient.java b/src/main/java/net/minecraftforge/client/event/ForgeEventFactoryClient.java index 4f8356a60b..36a920b3cd 100644 --- a/src/main/java/net/minecraftforge/client/event/ForgeEventFactoryClient.java +++ b/src/main/java/net/minecraftforge/client/event/ForgeEventFactoryClient.java @@ -24,7 +24,7 @@ import net.minecraft.client.KeyMapping; import net.minecraft.client.MouseHandler; import net.minecraft.client.entity.ClientAvatarEntity; import net.minecraft.client.entity.ClientMannequin; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.toasts.Toast; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; @@ -50,7 +50,7 @@ import net.minecraft.client.renderer.entity.state.EntityRenderState; import net.minecraft.client.renderer.entity.state.ItemFrameRenderState; import net.minecraft.client.renderer.entity.state.LivingEntityRenderState; import net.minecraft.client.renderer.special.SpecialModelRenderer; -import net.minecraft.client.renderer.state.CameraRenderState; +import net.minecraft.client.renderer.state.level.CameraRenderState; import net.minecraft.client.resources.sounds.SoundInstance; import net.minecraft.client.sounds.SoundEngine; import net.minecraft.network.Connection; @@ -169,11 +169,11 @@ public final class ForgeEventFactoryClient { return InputEvent.InteractionKeyMappingTriggered.BUS.post(event); } - public static void onContainerRenderBackground(AbstractContainerScreen screen, GuiGraphics graphics, int mouseX, int mouseY) { + public static void onContainerRenderBackground(AbstractContainerScreen screen, GuiGraphicsExtractor graphics, int mouseX, int mouseY) { ContainerScreenEvent.Render.Background.BUS.post(new ContainerScreenEvent.Render.Background(screen, graphics, mouseX, mouseY)); } - public static void onContainerRenderForeground(AbstractContainerScreen screen, GuiGraphics graphics, int mouseX, int mouseY) { + public static void onContainerRenderForeground(AbstractContainerScreen screen, GuiGraphicsExtractor graphics, int mouseX, int mouseY) { ContainerScreenEvent.Render.Foreground.BUS.post(new ContainerScreenEvent.Render.Foreground(screen, graphics, mouseX, mouseY)); } @@ -221,11 +221,11 @@ public final class ForgeEventFactoryClient { return RenderItemInFrameEvent.BUS.post(new RenderItemInFrameEvent(state, renderItemFrame, poseStack, nodeCollector, packedLight)); } - public static RenderNameTagEvent fireRenderNameTagEvent(EntityRenderState state, Component content, EntityRenderer entityRenderer, PoseStack poseStack, SubmitNodeCollector nodeCollector, CameraRenderState cameraState) { - return RenderNameTagEvent.BUS.fire(new RenderNameTagEvent(state, content, entityRenderer, poseStack, nodeCollector, cameraState)); + public static RenderNameTagEvent fireRenderNameTagEvent(EntityRenderState state, EntityRenderer entityRenderer, PoseStack poseStack, SubmitNodeCollector nodeCollector, CameraRenderState cameraState) { + return RenderNameTagEvent.BUS.fire(new RenderNameTagEvent(state, entityRenderer, poseStack, nodeCollector, cameraState)); } - public static void onRenderScreenBackground(Screen screen, GuiGraphics guiGraphics) { + public static void onRenderScreenBackground(Screen screen, GuiGraphicsExtractor guiGraphics) { ScreenEvent.BackgroundRendered.BUS.post(new ScreenEvent.BackgroundRendered(screen, guiGraphics)); } @@ -254,10 +254,6 @@ public final class ForgeEventFactoryClient { return ComputeFovModifierEvent.BUS.fire(new ComputeFovModifierEvent(entity, modifier, scale)); } - public static void onCreateSpecialBlockRenderers(Map map) { - CreateSpecialBlockRendererEvent.BUS.post(new CreateSpecialBlockRendererEvent(map)); - } - public static Map> onCreateSkullModels() { var builder = ImmutableMap.>builder(); EntityRenderersEvent.CreateSkullModels.BUS.post(new EntityRenderersEvent.CreateSkullModels(builder)); diff --git a/src/main/java/net/minecraftforge/client/event/ModelEvent.java b/src/main/java/net/minecraftforge/client/event/ModelEvent.java index bef1a40bc6..af9742717c 100644 --- a/src/main/java/net/minecraftforge/client/event/ModelEvent.java +++ b/src/main/java/net/minecraftforge/client/event/ModelEvent.java @@ -6,19 +6,21 @@ package net.minecraftforge.client.event; import com.google.common.base.Preconditions; + +import net.minecraft.client.renderer.block.FluidModel; import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.ModelManager; +import net.minecraft.client.resources.model.sprite.MaterialBaker; import net.minecraft.resources.Identifier; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.material.Fluid; import net.minecraftforge.client.model.geometry.IGeometryLoader; -import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.MutableEvent; import net.minecraftforge.eventbus.api.event.RecordEvent; import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.fml.event.IModBusEvent; import org.jetbrains.annotations.ApiStatus; import org.jspecify.annotations.NullMarked; @@ -50,12 +52,6 @@ public sealed interface ModelEvent { implements RecordEvent, ModelEvent { public static final EventBus BUS = EventBus.create(ModifyBakingResult.class); - /** @deprecated {@link ModelEvent.ModifyBakingResult} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - @ApiStatus.Internal public ModifyBakingResult {} } @@ -75,12 +71,6 @@ public sealed interface ModelEvent { implements RecordEvent, ModelEvent { public static final EventBus BUS = EventBus.create(BakingCompleted.class); - /** @deprecated {@link ModelEvent.BakingCompleted} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - @ApiStatus.Internal public BakingCompleted {} } @@ -96,12 +86,6 @@ public sealed interface ModelEvent { final class RegisterModelStateDefinitions extends MutableEvent implements ModelEvent { public static final EventBus BUS = EventBus.create(RegisterModelStateDefinitions.class); - /** @deprecated {@link ModelEvent.RegisterModelStateDefinitions} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - private final Map> states = new HashMap<>(); private final Map> view = Collections.unmodifiableMap(states); @@ -132,12 +116,6 @@ public sealed interface ModelEvent { final class RegisterGeometryLoaders extends MutableEvent implements ModelEvent { public static final EventBus BUS = EventBus.create(RegisterGeometryLoaders.class); - /** @deprecated {@link ModelEvent.RegisterGeometryLoaders} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - private final Map loaders; @ApiStatus.Internal @@ -154,4 +132,37 @@ public sealed interface ModelEvent { loaders.put(Identifier, loader); } } + + /** + * Allows users to register their own {@link FluidModel fluid models}. + * + *

This event is fired only on the {@linkplain LogicalSide#CLIENT logical client}.

+ */ + @NullMarked + final class BakeFluidModels extends MutableEvent implements ModelEvent { + public static final EventBus BUS = EventBus.create(BakeFluidModels.class); + + private final ModelBakery bakery; + private final MaterialBaker materials; + private final Map models; + + @ApiStatus.Internal + public BakeFluidModels(ModelBakery bakery, MaterialBaker materials, Map models) { + this.bakery = bakery; + this.materials = materials; + this.models = models; + } + + public ModelBakery bakery() { + return this.bakery; + } + + public MaterialBaker materials() { + return this.materials; + } + + public void register(Fluid fluid, FluidModel model) { + models.put(fluid, model); + } + } } diff --git a/src/main/java/net/minecraftforge/client/event/RegisterClientReloadListenersEvent.java b/src/main/java/net/minecraftforge/client/event/RegisterClientReloadListenersEvent.java index 8e9fdb51bb..5a8997d0e3 100644 --- a/src/main/java/net/minecraftforge/client/event/RegisterClientReloadListenersEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RegisterClientReloadListenersEvent.java @@ -9,12 +9,10 @@ import net.minecraft.client.Minecraft; import net.minecraft.server.packs.resources.PreparableReloadListener; import net.minecraft.server.packs.resources.ReloadableResourceManager; import net.minecraftforge.event.AddReloadListenerEvent; -import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.MutableEvent; import net.minecraftforge.eventbus.api.event.characteristic.SelfDestructing; import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.fml.event.IModBusEvent; import org.jetbrains.annotations.ApiStatus; import org.jspecify.annotations.NullMarked; @@ -30,12 +28,6 @@ import org.jspecify.annotations.NullMarked; public final class RegisterClientReloadListenersEvent extends MutableEvent implements SelfDestructing { public static final EventBus BUS = EventBus.create(RegisterClientReloadListenersEvent.class); - /** @deprecated {@link RegisterClientReloadListenersEvent} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - private final ReloadableResourceManager resourceManager; @ApiStatus.Internal diff --git a/src/main/java/net/minecraftforge/client/event/RegisterClientTooltipComponentFactoriesEvent.java b/src/main/java/net/minecraftforge/client/event/RegisterClientTooltipComponentFactoriesEvent.java index 79d590d97c..00682ee201 100644 --- a/src/main/java/net/minecraftforge/client/event/RegisterClientTooltipComponentFactoriesEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RegisterClientTooltipComponentFactoriesEvent.java @@ -7,12 +7,10 @@ package net.minecraftforge.client.event; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; import net.minecraft.world.inventory.tooltip.TooltipComponent; -import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.MutableEvent; import net.minecraftforge.eventbus.api.event.characteristic.SelfDestructing; import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.fml.event.IModBusEvent; import org.jetbrains.annotations.ApiStatus; import org.jspecify.annotations.NullMarked; @@ -29,12 +27,6 @@ import java.util.function.Function; public final class RegisterClientTooltipComponentFactoriesEvent extends MutableEvent implements SelfDestructing { public static final EventBus BUS = EventBus.create(RegisterClientTooltipComponentFactoriesEvent.class); - /** @deprecated {@link RegisterClientTooltipComponentFactoriesEvent} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - private final Map, Function> factories; @ApiStatus.Internal diff --git a/src/main/java/net/minecraftforge/client/event/RegisterColorHandlersEvent.java b/src/main/java/net/minecraftforge/client/event/RegisterColorHandlersEvent.java index 0aaee87643..9ef42e2666 100644 --- a/src/main/java/net/minecraftforge/client/event/RegisterColorHandlersEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RegisterColorHandlersEvent.java @@ -5,21 +5,20 @@ package net.minecraftforge.client.event; -import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.block.BlockColors; +import net.minecraft.client.color.block.BlockTintSource; import net.minecraft.core.BlockPos; import net.minecraft.world.level.ColorResolver; -import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.MutableEvent; import net.minecraftforge.eventbus.api.event.RecordEvent; import net.minecraftforge.eventbus.api.event.characteristic.SelfDestructing; import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.fml.event.IModBusEvent; import org.jetbrains.annotations.ApiStatus; import org.jspecify.annotations.NullMarked; import java.util.ArrayList; +import java.util.List; /** * Fired for registering block and item color handlers at the appropriate time. @@ -39,12 +38,6 @@ public sealed interface RegisterColorHandlersEvent { record Block(BlockColors getBlockColors) implements RecordEvent, RegisterColorHandlersEvent { public static final EventBus BUS = EventBus.create(Block.class); - /** @deprecated {@link RegisterColorHandlersEvent.Block} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - @ApiStatus.Internal public Block {} @@ -58,14 +51,14 @@ public sealed interface RegisterColorHandlersEvent { } /** - * Registers a {@link BlockColor} instance for a set of blocks. + * Registers {@link BlockTintSource} instances for a set of blocks. * - * @param blockColor The color provider - * @param blocks The blocks + * @param sources The tint sources + * @param blocks The blocks */ @SuppressWarnings("deprecation") - public void register(BlockColor blockColor, net.minecraft.world.level.block.Block... blocks) { - getBlockColors.register(blockColor, blocks); + public void register(List sources, net.minecraft.world.level.block.Block... blocks) { + getBlockColors.register(sources, blocks); } } @@ -77,12 +70,6 @@ public sealed interface RegisterColorHandlersEvent { final class ColorResolvers extends MutableEvent implements SelfDestructing, RegisterColorHandlersEvent { public static final EventBus BUS = EventBus.create(ColorResolvers.class); - /** @deprecated {@link RegisterColorHandlersEvent.ColorResolvers} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - private final ArrayList builder; @ApiStatus.Internal diff --git a/src/main/java/net/minecraftforge/client/event/RegisterEntitySpectatorShadersEvent.java b/src/main/java/net/minecraftforge/client/event/RegisterEntitySpectatorShadersEvent.java index 0b512a9600..603b367d52 100644 --- a/src/main/java/net/minecraftforge/client/event/RegisterEntitySpectatorShadersEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RegisterEntitySpectatorShadersEvent.java @@ -7,12 +7,10 @@ package net.minecraftforge.client.event; import net.minecraft.resources.Identifier; import net.minecraft.world.entity.EntityType; -import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.MutableEvent; import net.minecraftforge.eventbus.api.event.characteristic.SelfDestructing; import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.fml.event.IModBusEvent; import org.jetbrains.annotations.ApiStatus; import org.jspecify.annotations.NullMarked; @@ -28,12 +26,6 @@ import java.util.Map; public final class RegisterEntitySpectatorShadersEvent extends MutableEvent implements SelfDestructing { public static final EventBus BUS = EventBus.create(RegisterEntitySpectatorShadersEvent.class); - /** @deprecated {@link RegisterEntitySpectatorShadersEvent} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - private final Map, Identifier> shaders; @ApiStatus.Internal diff --git a/src/main/java/net/minecraftforge/client/event/RegisterItemDecorationsEvent.java b/src/main/java/net/minecraftforge/client/event/RegisterItemDecorationsEvent.java index 3ce3087478..4c69fadb63 100644 --- a/src/main/java/net/minecraftforge/client/event/RegisterItemDecorationsEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RegisterItemDecorationsEvent.java @@ -9,12 +9,10 @@ import net.minecraft.world.item.Item; import net.minecraft.world.level.ItemLike; import net.minecraftforge.client.IItemDecorator; -import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.MutableEvent; import net.minecraftforge.eventbus.api.event.characteristic.SelfDestructing; import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.fml.event.IModBusEvent; import org.jetbrains.annotations.ApiStatus; import org.jspecify.annotations.NullMarked; @@ -31,12 +29,6 @@ import java.util.Map; public final class RegisterItemDecorationsEvent extends MutableEvent implements SelfDestructing { public static final EventBus BUS = EventBus.create(RegisterItemDecorationsEvent.class); - /** @deprecated {@link RegisterItemDecorationsEvent} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - private final Map> decorators; @ApiStatus.Internal diff --git a/src/main/java/net/minecraftforge/client/event/RegisterKeyMappingsEvent.java b/src/main/java/net/minecraftforge/client/event/RegisterKeyMappingsEvent.java index 528aec2184..2045795ba6 100644 --- a/src/main/java/net/minecraftforge/client/event/RegisterKeyMappingsEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RegisterKeyMappingsEvent.java @@ -7,12 +7,10 @@ package net.minecraftforge.client.event; import net.minecraft.client.KeyMapping; import net.minecraft.client.Options; -import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.MutableEvent; import net.minecraftforge.eventbus.api.event.characteristic.SelfDestructing; import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.fml.event.IModBusEvent; import org.apache.commons.lang3.ArrayUtils; import org.jetbrains.annotations.ApiStatus; import org.jspecify.annotations.NullMarked; @@ -26,12 +24,6 @@ import org.jspecify.annotations.NullMarked; public final class RegisterKeyMappingsEvent extends MutableEvent implements SelfDestructing { public static final EventBus BUS = EventBus.create(RegisterKeyMappingsEvent.class); - /** @deprecated {@link RegisterKeyMappingsEvent} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - private final Options options; @ApiStatus.Internal diff --git a/src/main/java/net/minecraftforge/client/event/RegisterNamedRenderTypesEvent.java b/src/main/java/net/minecraftforge/client/event/RegisterNamedRenderTypesEvent.java index 610f4ca672..7547b7ec42 100644 --- a/src/main/java/net/minecraftforge/client/event/RegisterNamedRenderTypesEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RegisterNamedRenderTypesEvent.java @@ -50,14 +50,14 @@ public final class RegisterNamedRenderTypesEvent extends MutableEvent implements * * @param key The namespace should match your mod's namespace, such as your mod ID * @param blockRenderType What ChunkSectionLayer to render in - * @param entityRenderType A {@link RenderType} using {@link DefaultVertexFormat#NEW_ENTITY} - * @param fabulousEntityRenderType A {@link RenderType} using {@link DefaultVertexFormat#NEW_ENTITY} for use when + * @param entityRenderType A {@link RenderType} using {@link DefaultVertexFormat#ENTITY} + * @param fabulousEntityRenderType A {@link RenderType} using {@link DefaultVertexFormat#ENTITY} for use when * "fabulous" rendering is enabled */ public void register(Identifier key, ChunkSectionLayer blockRenderType, RenderType entityRenderType, RenderType fabulousEntityRenderType) { Preconditions.checkArgument(!renderTypes.containsKey(key), "Render type already registered: " + key); - Preconditions.checkArgument(entityRenderType.format() == DefaultVertexFormat.NEW_ENTITY, "The entity render type must use the NEW_ENTITY vertex format."); - Preconditions.checkArgument(fabulousEntityRenderType.format() == DefaultVertexFormat.NEW_ENTITY, "The fabulous entity render type must use the NEW_ENTITY vertex format."); + Preconditions.checkArgument(entityRenderType.format() == DefaultVertexFormat.ENTITY, "The entity render type must use the ENTITY vertex format."); + Preconditions.checkArgument(fabulousEntityRenderType.format() == DefaultVertexFormat.ENTITY, "The fabulous entity render type must use the ENTITY vertex format."); renderTypes.put(key, new RenderTypeGroup(blockRenderType, entityRenderType, fabulousEntityRenderType)); } } diff --git a/src/main/java/net/minecraftforge/client/event/RegisterParticleProvidersEvent.java b/src/main/java/net/minecraftforge/client/event/RegisterParticleProvidersEvent.java index 24f4c7d768..a72a322d1d 100644 --- a/src/main/java/net/minecraftforge/client/event/RegisterParticleProvidersEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RegisterParticleProvidersEvent.java @@ -9,11 +9,9 @@ import net.minecraft.client.particle.ParticleProvider; import net.minecraft.client.particle.ParticleResources; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleType; -import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.MutableEvent; import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.fml.event.IModBusEvent; import net.minecraftforge.registries.RegisterEvent; import org.jetbrains.annotations.ApiStatus; import org.jspecify.annotations.NullMarked; @@ -28,13 +26,7 @@ import org.jspecify.annotations.NullMarked; */ @NullMarked public final class RegisterParticleProvidersEvent extends MutableEvent { - public static EventBus BUS = EventBus.create(RegisterParticleProvidersEvent.class); - - /** @deprecated {@link RegisterParticleProvidersEvent} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } + public static final EventBus BUS = EventBus.create(RegisterParticleProvidersEvent.class); private final ParticleResources particles; diff --git a/src/main/java/net/minecraftforge/client/event/RegisterPictureInPictureRendererEvent.java b/src/main/java/net/minecraftforge/client/event/RegisterPictureInPictureRendererEvent.java index ad1df59263..a41610388b 100644 --- a/src/main/java/net/minecraftforge/client/event/RegisterPictureInPictureRendererEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RegisterPictureInPictureRendererEvent.java @@ -7,8 +7,8 @@ package net.minecraftforge.client.event; import com.google.common.collect.ImmutableMap; import net.minecraft.client.gui.render.pip.PictureInPictureRenderer; -import net.minecraft.client.gui.render.state.pip.PictureInPictureRenderState; import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.state.gui.pip.PictureInPictureRenderState; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.MutableEvent; import net.minecraftforge.eventbus.api.event.characteristic.SelfDestructing; diff --git a/src/main/java/net/minecraftforge/client/event/RegisterTextureAtlasSpriteLoadersEvent.java b/src/main/java/net/minecraftforge/client/event/RegisterTextureAtlasSpriteLoadersEvent.java index e2beaae1d1..0338d4885a 100644 --- a/src/main/java/net/minecraftforge/client/event/RegisterTextureAtlasSpriteLoadersEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RegisterTextureAtlasSpriteLoadersEvent.java @@ -10,12 +10,10 @@ import com.google.common.collect.BiMap; import net.minecraft.resources.Identifier; import net.minecraftforge.client.textures.ITextureAtlasSpriteLoader; -import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.MutableEvent; import net.minecraftforge.eventbus.api.event.characteristic.SelfDestructing; import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.fml.event.IModBusEvent; import org.jetbrains.annotations.ApiStatus; /** @@ -26,12 +24,6 @@ import org.jetbrains.annotations.ApiStatus; public final class RegisterTextureAtlasSpriteLoadersEvent extends MutableEvent implements SelfDestructing { public static final EventBus BUS = EventBus.create(RegisterTextureAtlasSpriteLoadersEvent.class); - /** {@link RegisterTextureAtlasSpriteLoadersEvent} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - private final BiMap loaders; @ApiStatus.Internal diff --git a/src/main/java/net/minecraftforge/client/event/RenderArmEvent.java b/src/main/java/net/minecraftforge/client/event/RenderArmEvent.java index 96e6db3750..c515c083ca 100644 --- a/src/main/java/net/minecraftforge/client/event/RenderArmEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RenderArmEvent.java @@ -6,7 +6,6 @@ package net.minecraftforge.client.event; import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.world.entity.HumanoidArm; import net.minecraftforge.eventbus.api.bus.CancellableEventBus; diff --git a/src/main/java/net/minecraftforge/client/event/RenderAvatarEvent.java b/src/main/java/net/minecraftforge/client/event/RenderAvatarEvent.java index 99b08612fa..430c948dc7 100644 --- a/src/main/java/net/minecraftforge/client/event/RenderAvatarEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RenderAvatarEvent.java @@ -11,7 +11,7 @@ import net.minecraft.client.entity.ClientAvatarEntity; import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.entity.player.AvatarRenderer; import net.minecraft.client.renderer.entity.state.AvatarRenderState; -import net.minecraft.client.renderer.state.CameraRenderState; +import net.minecraft.client.renderer.state.level.CameraRenderState; import net.minecraft.world.entity.Avatar; import net.minecraftforge.eventbus.api.bus.CancellableEventBus; import net.minecraftforge.eventbus.api.bus.EventBus; diff --git a/src/main/java/net/minecraftforge/client/event/RenderHandEvent.java b/src/main/java/net/minecraftforge/client/event/RenderHandEvent.java index b755dce91c..2cb4cfe893 100644 --- a/src/main/java/net/minecraftforge/client/event/RenderHandEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RenderHandEvent.java @@ -6,7 +6,6 @@ package net.minecraftforge.client.event; import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.world.InteractionHand; import net.minecraft.world.item.ItemStack; diff --git a/src/main/java/net/minecraftforge/client/event/RenderHighlightEvent.java b/src/main/java/net/minecraftforge/client/event/RenderHighlightEvent.java index b378a8ff52..55e811413a 100644 --- a/src/main/java/net/minecraftforge/client/event/RenderHighlightEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RenderHighlightEvent.java @@ -9,7 +9,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Camera; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource.BufferSource; -import net.minecraft.client.renderer.state.LevelRenderState; +import net.minecraft.client.renderer.state.level.LevelRenderState; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.EntityHitResult; import net.minecraft.world.phys.HitResult; diff --git a/src/main/java/net/minecraftforge/client/event/RenderItemInFrameEvent.java b/src/main/java/net/minecraftforge/client/event/RenderItemInFrameEvent.java index 531ac38432..55cace59e1 100644 --- a/src/main/java/net/minecraftforge/client/event/RenderItemInFrameEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RenderItemInFrameEvent.java @@ -6,7 +6,6 @@ package net.minecraftforge.client.event; import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.entity.ItemFrameRenderer; import net.minecraft.client.renderer.entity.state.ItemFrameRenderState; diff --git a/src/main/java/net/minecraftforge/client/event/RenderLivingEvent.java b/src/main/java/net/minecraftforge/client/event/RenderLivingEvent.java index a3122a1fa2..fd33050787 100644 --- a/src/main/java/net/minecraftforge/client/event/RenderLivingEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RenderLivingEvent.java @@ -7,11 +7,10 @@ package net.minecraftforge.client.event; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.model.EntityModel; -import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.entity.LivingEntityRenderer; import net.minecraft.client.renderer.entity.state.LivingEntityRenderState; -import net.minecraft.client.renderer.state.CameraRenderState; +import net.minecraft.client.renderer.state.level.CameraRenderState; import net.minecraft.world.entity.LivingEntity; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.bus.CancellableEventBus; diff --git a/src/main/java/net/minecraftforge/client/event/RenderNameTagEvent.java b/src/main/java/net/minecraftforge/client/event/RenderNameTagEvent.java index 0b332d3024..4cd782a551 100644 --- a/src/main/java/net/minecraftforge/client/event/RenderNameTagEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RenderNameTagEvent.java @@ -9,45 +9,45 @@ import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.client.renderer.entity.state.EntityRenderState; -import net.minecraft.client.renderer.state.CameraRenderState; +import net.minecraft.client.renderer.state.level.CameraRenderState; import net.minecraft.network.chat.Component; -import net.minecraftforge.common.util.HasResult; import net.minecraftforge.common.util.Result; +import net.minecraftforge.eventbus.api.bus.CancellableEventBus; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.MutableEvent; +import net.minecraftforge.eventbus.api.event.characteristic.Cancellable; import net.minecraftforge.fml.LogicalSide; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Nullable; /** * Fired before an entity renderer renders the nameplate of an entity. * - *

This event {@linkplain HasResult has a result}:

- *
    - *
  • {@link Result#ALLOW} - the nameplate will be forcibly rendered.
  • - *
  • {@link Result#DEFAULT} - the vanilla logic will be used.
  • - *
  • {@link Result#DENY} - the nameplate will not be rendered.
  • - *
- * *

This event is fired only on the {@linkplain LogicalSide#CLIENT logical client}.

* + * Setting any of the content to null will prevent that content from being rendered. + * If you wish to cancel both score and name tag, you can cancel the entire event. + * * @see EntityRenderer */ -public final class RenderNameTagEvent extends MutableEvent implements HasResult { - public static final EventBus BUS = EventBus.create(RenderNameTagEvent.class); +public final class RenderNameTagEvent extends MutableEvent implements Cancellable { + public static final EventBus BUS = CancellableEventBus.create(RenderNameTagEvent.class); private Component nameplateContent; + private Component scoreContent; private final EntityRenderState state; private final Component originalContent; + private final Component originalScoreContent; private final EntityRenderer entityRenderer; private final PoseStack poseStack; private final SubmitNodeCollector nodeCollector; private final CameraRenderState cameraState; - private Result result = Result.DEFAULT; @ApiStatus.Internal - public RenderNameTagEvent(EntityRenderState state, Component content, EntityRenderer entityRenderer, PoseStack poseStack, SubmitNodeCollector nodeCollector, CameraRenderState cameraState) { + public RenderNameTagEvent(EntityRenderState state, EntityRenderer entityRenderer, PoseStack poseStack, SubmitNodeCollector nodeCollector, CameraRenderState cameraState) { this.state = state; - this.originalContent = content; + this.originalContent = this.nameplateContent = state.nameTag; + this.originalScoreContent = this.scoreContent = state.scoreText; this.setContent(this.originalContent); this.entityRenderer = entityRenderer; this.poseStack = poseStack; @@ -65,24 +65,48 @@ public final class RenderNameTagEvent extends MutableEvent implements HasResult * * @param contents the new text */ - public void setContent(Component contents) { + public void setContent(@Nullable Component contents) { this.nameplateContent = contents; } /** * {@return the text on the nameplate that will be rendered, if the event is not {@link Result#DENY DENIED}} */ - public Component getContent() { + public @Nullable Component getContent() { return this.nameplateContent; } + /** + * Sets the new text for the score part of the nameplate. + * + * @param contents the new text + */ + public void setScoreContent(@Nullable Component contents) { + this.scoreContent = contents; + } + + /** + * {@return the text on the score part of the nameplate that will be rendered, if the event is not {@link Result#DENY DENIED}} + */ + public @Nullable Component getScoreContent() { + return this.scoreContent; + } + /** * {@return the original text on the nameplate} */ - public Component getOriginalContent() { + public @Nullable Component getOriginalContent() { return this.originalContent; } + /** + * {@return the original text of the score part of this nameplate} + */ + public @Nullable Component getOriginalScore() { + return this.originalScoreContent; + } + + /** * {@return the entity renderer rendering the nameplate} */ @@ -110,14 +134,4 @@ public final class RenderNameTagEvent extends MutableEvent implements HasResult public CameraRenderState getCameraState() { return this.cameraState; } - - @Override - public Result getResult() { - return this.result; - } - - @Override - public void setResult(Result result) { - this.result = result; - } } diff --git a/src/main/java/net/minecraftforge/client/event/RenderTooltipEvent.java b/src/main/java/net/minecraftforge/client/event/RenderTooltipEvent.java index 82fb1e26ea..5cd02c8aa8 100644 --- a/src/main/java/net/minecraftforge/client/event/RenderTooltipEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RenderTooltipEvent.java @@ -7,7 +7,7 @@ package net.minecraftforge.client.event; import com.mojang.datafixers.util.Either; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipPositioner; import net.minecraft.network.chat.FormattedText; @@ -41,14 +41,14 @@ public abstract sealed class RenderTooltipEvent extends MutableEvent implements public static final EventBus BUS = EventBus.create(RenderTooltipEvent.class); protected final ItemStack itemStack; - protected final GuiGraphics graphics; + protected final GuiGraphicsExtractor graphics; protected int x; protected int y; protected Font font; protected final List components; @ApiStatus.Internal - protected RenderTooltipEvent(ItemStack itemStack, GuiGraphics graphics, int x, int y, Font font, List components) { + protected RenderTooltipEvent(ItemStack itemStack, GuiGraphicsExtractor graphics, int x, int y, Font font, List components) { this.itemStack = itemStack; this.graphics = graphics; this.components = Collections.unmodifiableList(components); @@ -61,22 +61,15 @@ public abstract sealed class RenderTooltipEvent extends MutableEvent implements * {@return the item stack which the tooltip is being rendered for, or an {@linkplain ItemStack#isEmpty() empty * item stack} if there is no associated item stack} */ - + public ItemStack getItemStack() { return itemStack; } - /** - * {@return the gui graphics helper for the gui} - */ - public GuiGraphics getGuiGraphics() { - return graphics; - } - /** * {@return the graphics helper for the gui} */ - public GuiGraphics getGraphics() { + public GuiGraphicsExtractor getGraphics() { return graphics; } @@ -214,7 +207,7 @@ public abstract sealed class RenderTooltipEvent extends MutableEvent implements private Identifier originalBackground; @ApiStatus.Internal - public Pre(ItemStack stack, GuiGraphics graphics, int x, int y, int screenWidth, int screenHeight, Font font, List components, ClientTooltipPositioner positioner, @Nullable Identifier background) { + public Pre(ItemStack stack, GuiGraphicsExtractor graphics, int x, int y, int screenWidth, int screenHeight, Font font, List components, ClientTooltipPositioner positioner, @Nullable Identifier background) { super(stack, graphics, x, y, font, components); this.screenWidth = screenWidth; this.screenHeight = screenHeight; diff --git a/src/main/java/net/minecraftforge/client/event/ScreenEvent.java b/src/main/java/net/minecraftforge/client/event/ScreenEvent.java index 4a08eac6f0..96e9ce6d62 100644 --- a/src/main/java/net/minecraftforge/client/event/ScreenEvent.java +++ b/src/main/java/net/minecraftforge/client/event/ScreenEvent.java @@ -6,7 +6,7 @@ package net.minecraftforge.client.event; import com.mojang.blaze3d.platform.InputConstants; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.input.CharacterEvent; @@ -154,7 +154,7 @@ public sealed interface ScreenEvent { /** * {@return the gui graphics used for rendering} */ - GuiGraphics getGuiGraphics(); + GuiGraphicsExtractor getGuiGraphics(); /** * {@return the X coordinate of the mouse pointer} @@ -180,7 +180,7 @@ public sealed interface ScreenEvent { *

This event is fired on the {@linkplain MinecraftForge#EVENT_BUS main Forge event bus}, * only on the {@linkplain LogicalSide#CLIENT logical client}.

*/ - record Pre(Screen getScreen, GuiGraphics getGuiGraphics, int getMouseX, int getMouseY, float getPartialTick) + record Pre(Screen getScreen, GuiGraphicsExtractor getGuiGraphics, int getMouseX, int getMouseY, float getPartialTick) implements Cancellable, Render, RecordEvent { public static final CancellableEventBus
 BUS = CancellableEventBus.create(Pre.class);
 
@@ -194,7 +194,7 @@ public sealed interface ScreenEvent {
          * 

This event is fired on the {@linkplain MinecraftForge#EVENT_BUS main Forge event bus}, * only on the {@linkplain LogicalSide#CLIENT logical client}.

*/ - record Post(Screen getScreen, GuiGraphics getGuiGraphics, int getMouseX, int getMouseY, float getPartialTick) + record Post(Screen getScreen, GuiGraphicsExtractor getGuiGraphics, int getMouseX, int getMouseY, float getPartialTick) implements Render, RecordEvent { public static final EventBus BUS = EventBus.create(Post.class); @@ -212,7 +212,7 @@ public sealed interface ScreenEvent { * * @param getGuiGraphics the gui graphics used for rendering */ - record BackgroundRendered(Screen getScreen, GuiGraphics getGuiGraphics) implements RecordEvent, ScreenEvent { + record BackgroundRendered(Screen getScreen, GuiGraphicsExtractor getGuiGraphics) implements RecordEvent, ScreenEvent { public static final EventBus BUS = EventBus.create(BackgroundRendered.class); @ApiStatus.Internal @@ -762,21 +762,6 @@ public sealed interface ScreenEvent { return (char)getInfo().codepoint(); } - /** - * {@return a bit field representing the active modifier keys} - * - * @see InputConstants#MOD_CONTROL CTRL modifier key bit - * @see GLFW#GLFW_MOD_SHIFT SHIFT modifier key bit - * @see GLFW#GLFW_MOD_ALT ALT modifier key bit - * @see GLFW#GLFW_MOD_SUPER SUPER modifier key bit - * @see GLFW#GLFW_KEY_CAPS_LOCK CAPS LOCK modifier key bit - * @see GLFW#GLFW_KEY_NUM_LOCK NUM LOCK modifier key bit - * @see
the online GLFW documentation - */ - default int getModifiers() { - return getInfo().modifiers(); - } - /** * Fired before the character input is handled by the screen. * diff --git a/src/main/java/net/minecraftforge/client/event/TextureStitchEvent.java b/src/main/java/net/minecraftforge/client/event/TextureStitchEvent.java index 6a304ab686..75c979456e 100644 --- a/src/main/java/net/minecraftforge/client/event/TextureStitchEvent.java +++ b/src/main/java/net/minecraftforge/client/event/TextureStitchEvent.java @@ -6,11 +6,9 @@ package net.minecraftforge.client.event; import net.minecraft.client.renderer.texture.TextureAtlas; -import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.RecordEvent; import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.fml.event.IModBusEvent; import org.jetbrains.annotations.ApiStatus; import org.jspecify.annotations.NullMarked; @@ -64,12 +62,6 @@ public sealed interface TextureStitchEvent { record Post(TextureAtlas getAtlas) implements RecordEvent, TextureStitchEvent { public static final EventBus BUS = EventBus.create(Post.class); - /** @deprecated {@link TextureStitchEvent.Post} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - @ApiStatus.Internal public Post {} } diff --git a/src/main/java/net/minecraftforge/client/event/sound/SoundEngineLoadEvent.java b/src/main/java/net/minecraftforge/client/event/sound/SoundEngineLoadEvent.java index e5c96e0799..b68d4c9298 100644 --- a/src/main/java/net/minecraftforge/client/event/sound/SoundEngineLoadEvent.java +++ b/src/main/java/net/minecraftforge/client/event/sound/SoundEngineLoadEvent.java @@ -6,11 +6,9 @@ package net.minecraftforge.client.event.sound; import net.minecraft.client.sounds.SoundEngine; -import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.RecordEvent; import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.fml.event.IModBusEvent; import org.jetbrains.annotations.ApiStatus; import org.jspecify.annotations.NullMarked; @@ -24,12 +22,6 @@ import org.jspecify.annotations.NullMarked; public record SoundEngineLoadEvent(SoundEngine getEngine) implements RecordEvent, SoundEvent { public static final EventBus BUS = EventBus.create(SoundEngineLoadEvent.class); - /** @deprecated {@link SoundEngineLoadEvent} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - @ApiStatus.Internal public SoundEngineLoadEvent {} } diff --git a/src/main/java/net/minecraftforge/client/extensions/IForgeBlockModelPart.java b/src/main/java/net/minecraftforge/client/extensions/IForgeBlockModelPart.java deleted file mode 100644 index 9752010def..0000000000 --- a/src/main/java/net/minecraftforge/client/extensions/IForgeBlockModelPart.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (c) Forge Development LLC and contributors - * SPDX-License-Identifier: LGPL-2.1-only - */ - -package net.minecraftforge.client.extensions; - -import net.minecraft.client.renderer.chunk.ChunkSectionLayer; - -public interface IForgeBlockModelPart { - /* - private BlockModelPart self() { - return (BlockModelPart)this; - } - */ - - default ChunkSectionLayer layer() { - return null; - } - - default ChunkSectionLayer layerFast() { - return null; - } -} diff --git a/src/main/java/net/minecraftforge/client/extensions/IForgeBlockStateModel.java b/src/main/java/net/minecraftforge/client/extensions/IForgeBlockStateModel.java index bf9af02b42..7937fb478f 100644 --- a/src/main/java/net/minecraftforge/client/extensions/IForgeBlockStateModel.java +++ b/src/main/java/net/minecraftforge/client/extensions/IForgeBlockStateModel.java @@ -5,23 +5,15 @@ package net.minecraftforge.client.extensions; -import net.minecraft.client.renderer.ItemBlockRenderTypes; -import net.minecraft.client.renderer.rendertype.RenderType; -import net.minecraft.client.renderer.block.model.BlockModelPart; -import net.minecraft.client.renderer.block.model.BlockStateModel; -import net.minecraft.client.renderer.chunk.ChunkSectionLayer; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.block.BlockAndTintGetter; +import net.minecraft.client.renderer.block.dispatch.BlockStateModel; +import net.minecraft.client.renderer.block.dispatch.BlockStateModelPart; +import net.minecraft.client.resources.model.sprite.Material; import net.minecraft.core.BlockPos; import net.minecraft.util.RandomSource; -import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.client.model.data.ModelData; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import it.unimi.dsi.fastutil.objects.ObjectArrayList; - -import java.util.Collection; import java.util.List; @SuppressWarnings("deprecation") @@ -34,37 +26,16 @@ public interface IForgeBlockStateModel { return modelData; } - default TextureAtlasSprite particleIcon(@NotNull ModelData data) { - return self().particleIcon(); + default Material.Baked particleMaterial(@NotNull ModelData data) { + return self().particleMaterial(); } /** - * Gets the set of {@link RenderType render types} to use when drawing this block in the level. - * Supported types are those returned by {@link RenderType#chunkBufferLayers()}. - *

- * By default, defers query to {@link ItemBlockRenderTypes}. - */ - default Collection getRenderTypes(@NotNull BlockState state, @NotNull RandomSource rand, @NotNull ModelData data) { - return ItemBlockRenderTypes.getRenderLayers(state); - } - - /** - * Collects the parts of this model to render for the specified render type. - * Not all paths call this, or use a valid render type. So it is recommended to also implement a sane default in + * Collects the parts of this model with the specified ModelData. + * Not all paths call this, or pass in empty data. So it is recommended to also implement a sane default in * the normal {@link BlockStateModel#collectParts(RandomSource, List)} method. */ - default List collectParts(RandomSource random, ModelData data, @Nullable ChunkSectionLayer renderType) { - List list = new ObjectArrayList<>(); - this.collectParts(random, list, data, renderType); - return list; - } - - /** - * Collects the parts of this model to render for the specified render type. - * Not all paths call this, or use a valid render type. So it is recommended to also implement a sane default in - * the normal {@link BlockStateModel#collectParts(RandomSource, List)} method. - */ - default void collectParts(RandomSource random, List dest, ModelData data, @Nullable ChunkSectionLayer renderType) { - self().collectParts(random, dest); + default void collectParts(RandomSource random, List output, ModelData data) { + self().collectParts(random, output); } } diff --git a/src/main/java/net/minecraftforge/client/extensions/IForgeGuiGraphics.java b/src/main/java/net/minecraftforge/client/extensions/IForgeGuiGraphicsExtractor.java similarity index 97% rename from src/main/java/net/minecraftforge/client/extensions/IForgeGuiGraphics.java rename to src/main/java/net/minecraftforge/client/extensions/IForgeGuiGraphicsExtractor.java index b1b051b9b8..c1118b02bb 100644 --- a/src/main/java/net/minecraftforge/client/extensions/IForgeGuiGraphics.java +++ b/src/main/java/net/minecraftforge/client/extensions/IForgeGuiGraphicsExtractor.java @@ -5,16 +5,16 @@ package net.minecraftforge.client.extensions; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.resources.Identifier; /** * Extension interface for {@link GuiGraphics}. */ -public interface IForgeGuiGraphics { - private GuiGraphics self() { - return (GuiGraphics)this; +public interface IForgeGuiGraphicsExtractor { + private GuiGraphicsExtractor self() { + return (GuiGraphicsExtractor)this; } int DEFAULT_BACKGROUND_COLOR = 0xF0100010; diff --git a/src/main/java/net/minecraftforge/client/extensions/IForgePoseStack.java b/src/main/java/net/minecraftforge/client/extensions/IForgePoseStack.java index 8a1e83f0a3..855eb0c05c 100644 --- a/src/main/java/net/minecraftforge/client/extensions/IForgePoseStack.java +++ b/src/main/java/net/minecraftforge/client/extensions/IForgePoseStack.java @@ -26,14 +26,14 @@ public interface IForgePoseStack { final PoseStack self = self(); self.pushPose(); - var trans = transformation.getTranslation(); + var trans = transformation.translation(); self.translate(trans.x(), trans.y(), trans.z()); - self.mulPose(transformation.getLeftRotation()); + self.mulPose(transformation.leftRotation()); - var scale = transformation.getScale(); + var scale = transformation.scale(); self.scale(scale.x(), scale.y(), scale.z()); - self.mulPose(transformation.getRightRotation()); + self.mulPose(transformation.rightRotation()); } } diff --git a/src/main/java/net/minecraftforge/client/extensions/IForgeVertexConsumer.java b/src/main/java/net/minecraftforge/client/extensions/IForgeVertexConsumer.java deleted file mode 100644 index 2611e192c4..0000000000 --- a/src/main/java/net/minecraftforge/client/extensions/IForgeVertexConsumer.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (c) Forge Development LLC and contributors - * SPDX-License-Identifier: LGPL-2.1-only - */ - -package net.minecraftforge.client.extensions; - -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import net.minecraft.client.renderer.block.model.BakedQuad; - -/** - * Extension interface for {@link VertexConsumer}. - */ -public interface IForgeVertexConsumer { - private VertexConsumer self() { - return (VertexConsumer)this; - } - - /** - * Variant with no per-vertex shading. - */ - default void putBulkData(PoseStack.Pose pose, BakedQuad bakedQuad, float red, float green, float blue, float alpha, int packedLight, int packedOverlay) { - self().putBulkData(pose, bakedQuad, new float[] { 1.0F, 1.0F, 1.0F, 1.0F }, red, green, blue, alpha, new int[] { packedLight, packedLight, packedLight, packedLight }, packedOverlay); - } -} diff --git a/src/main/java/net/minecraftforge/client/extensions/IForgeVertexFormat.java b/src/main/java/net/minecraftforge/client/extensions/IForgeVertexFormat.java deleted file mode 100644 index 26e79177ee..0000000000 --- a/src/main/java/net/minecraftforge/client/extensions/IForgeVertexFormat.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) Forge Development LLC and contributors - * SPDX-License-Identifier: LGPL-2.1-only - */ - -package net.minecraftforge.client.extensions; - -import com.mojang.blaze3d.vertex.VertexFormat; -import com.mojang.blaze3d.vertex.VertexFormatElement; - -import java.util.List; - -/** - * Extension interface for {@link VertexFormat}. - */ -public interface IForgeVertexFormat { - List getElements(); - - default boolean hasPosition() { - return getElements().stream().anyMatch(e -> e.usage() == VertexFormatElement.Usage.POSITION); - } - - default boolean hasNormal() { - return getElements().stream().anyMatch(e -> e.usage() == VertexFormatElement.Usage.NORMAL); - } - - default boolean hasColor() { - return getElements().stream().anyMatch(e -> e.usage() == VertexFormatElement.Usage.COLOR); - } - - default boolean hasUV(int which) { - for (var e : getElements()) { - if (e.usage() == VertexFormatElement.Usage.UV && e.index() == which) { - return true; - } - } - return false; - } -} diff --git a/src/main/java/net/minecraftforge/client/extensions/common/IClientFluidTypeExtensions.java b/src/main/java/net/minecraftforge/client/extensions/common/IClientFluidTypeExtensions.java index 21494c0e3e..f8b0b1c149 100644 --- a/src/main/java/net/minecraftforge/client/extensions/common/IClientFluidTypeExtensions.java +++ b/src/main/java/net/minecraftforge/client/extensions/common/IClientFluidTypeExtensions.java @@ -12,10 +12,12 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.ScreenEffectRenderer; +import net.minecraft.client.renderer.block.BlockAndTintGetter; +import net.minecraft.client.renderer.block.FluidModel; +import net.minecraft.client.renderer.block.FluidRenderer; import net.minecraft.client.renderer.fog.FogData; import net.minecraft.core.BlockPos; import net.minecraft.resources.Identifier; -import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; @@ -171,76 +173,18 @@ public interface IClientFluidTypeExtensions { /* Level-Based Accessors */ /** - * Returns the reference of the texture to apply to a source fluid. + * Returns the location dependent FluidModel. * - *

This should return a reference to the texture and not the actual - * texture itself (e.g. {@code minecraft:block/water_still} will point to - * {@code assets/minecraft/textures/block/water_still.png}). - * - *

Important: This method should only return {@code null} for {@link Fluids#EMPTY}. - * All other implementations must define this property. - * - * @param state the state of the fluid - * @param getter the getter the fluid can be obtained from - * @param pos the position of the fluid - * @return the reference of the texture to apply to a source fluid - */ - default Identifier getStillTexture(FluidState state, BlockAndTintGetter getter, BlockPos pos) { - return this.getStillTexture(); - } - - /** - * Returns the reference of the texture to apply to a flowing fluid. - * - *

This should return a reference to the texture and not the actual - * texture itself (e.g. {@code minecraft:block/water_flow} will point to - * {@code assets/minecraft/textures/block/water_flow.png}). - * - *

Important: This method should only return {@code null} for {@link Fluids#EMPTY}. - * All other implementations must define this property. - * - * @param state the state of the fluid - * @param getter the getter the fluid can be obtained from - * @param pos the position of the fluid - * @return the reference of the texture to apply to a flowing fluid - */ - default Identifier getFlowingTexture(FluidState state, BlockAndTintGetter getter, BlockPos pos) { - return this.getFlowingTexture(); - } - - /** - * Returns the reference of the texture to apply to a fluid directly touching - * a non-opaque block other than air. If no reference is specified, either - * {@code #getStillTexture} or {@code #getFlowingTexture} will be applied - * instead. - * - *

This should return a reference to the texture and not the actual - * texture itself (e.g. {@code minecraft:block/water_overlay} will point to - * {@code assets/minecraft/textures/block/water_overlay.png}). - * - * @param state the state of the fluid - * @param getter the getter the fluid can be obtained from - * @param pos the position of the fluid - * @return the reference of the texture to apply to a fluid directly touching - * a non-opaque block - */ - default Identifier getOverlayTexture(FluidState state, BlockAndTintGetter getter, BlockPos pos) { - return this.getOverlayTexture(); - } - - /** - * Returns the tint applied to the fluid's textures. - * - *

The result represents a 32-bit integer where each 8-bits represent - * the alpha, red, green, and blue channel respectively. + *

The result will be queried for its textures and tinting. + * See {@link FluidRenderer#tesselate(BlockAndTintGetter,BlockPos,net.minecraft.client.renderer.block.FluidRenderer.Output,net.minecraft.world.level.block.state.BlockState,FluidState) FluidRenderer.tesselate} * * @param state the state of the fluid * @param getter the getter the fluid can be obtained from * @param pos the position of the fluid * @return the tint applied to the fluid's textures in ARGB format */ - default int getTintColor(FluidState state, BlockAndTintGetter getter, BlockPos pos) { - return this.getTintColor(); + default FluidModel getModel(FluidState state, BlockAndTintGetter getter, BlockPos pos, FluidModel vanilla) { + return vanilla; } /* Stack-Based Accessors */ diff --git a/src/main/java/net/minecraftforge/client/extensions/common/IClientMobEffectExtensions.java b/src/main/java/net/minecraftforge/client/extensions/common/IClientMobEffectExtensions.java index 79feb1250a..8ebe973a29 100644 --- a/src/main/java/net/minecraftforge/client/extensions/common/IClientMobEffectExtensions.java +++ b/src/main/java/net/minecraftforge/client/extensions/common/IClientMobEffectExtensions.java @@ -6,7 +6,7 @@ package net.minecraftforge.client.extensions.common; import net.minecraft.client.gui.Gui; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.screens.inventory.EffectsInInventory; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectInstance; @@ -52,14 +52,14 @@ public interface IClientMobEffectExtensions { * Renders the text and icon of the specified effect in the player's inventory. * * @param instance The effect instance - * @param effects The effect-rendering screen - * @param guiGraphics The gui graphics + * @param effects The effect-rendering screen + * @param graphics The gui graphics * @param x The x coordinate * @param y The y coordinate * @param blitOffset The blit offset * @return true to prevent default rendering, false otherwise */ - default boolean renderInventory(MobEffectInstance instance, EffectsInInventory effects, GuiGraphics guiGraphics, int x, int y, int blitOffset) { + default boolean extractInventory(MobEffectInstance instance, EffectsInInventory effects, GuiGraphicsExtractor graphics, int x, int y, int blitOffset) { return false; } @@ -69,14 +69,14 @@ public interface IClientMobEffectExtensions { * * @param instance The effect instance * @param gui The gui - * @param guiGraphics The gui graphics + * @param graphics The gui graphics * @param x The x coordinate * @param y The y coordinate * @param z The z depth * @param alpha The alpha value. Blinks when the effect is about to run out * @return true to prevent default rendering, false otherwise */ - default boolean renderGuiIcon(MobEffectInstance instance, Gui gui, GuiGraphics guiGraphics, int x, int y, float z, float alpha) { + default boolean extractGuiIcon(MobEffectInstance instance, Gui gui, GuiGraphicsExtractor graphics, int x, int y, float z, float alpha) { return false; } } diff --git a/src/main/java/net/minecraftforge/client/gui/LoadingErrorScreen.java b/src/main/java/net/minecraftforge/client/gui/LoadingErrorScreen.java index 89a1550f45..6c70a2f3eb 100644 --- a/src/main/java/net/minecraftforge/client/gui/LoadingErrorScreen.java +++ b/src/main/java/net/minecraftforge/client/gui/LoadingErrorScreen.java @@ -8,7 +8,7 @@ package net.minecraftforge.client.gui; import com.google.common.base.Strings; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.screens.ErrorScreen; import net.minecraft.client.gui.components.ObjectSelectionList; import net.minecraft.util.FormattedCharSequence; @@ -69,16 +69,16 @@ public class LoadingErrorScreen extends ErrorScreen { } @Override - public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { - this.renderBackground(guiGraphics, mouseX, mouseY, partialTick); - this.entryList.render(guiGraphics, mouseX, mouseY, partialTick); + public void extractRenderState(GuiGraphicsExtractor guiGraphics, int mouseX, int mouseY, float partialTick) { + this.extractRenderState(guiGraphics, mouseX, mouseY, partialTick); + this.entryList.extractRenderState(guiGraphics, mouseX, mouseY, partialTick); drawMultiLineCenteredString(guiGraphics, font, this.modLoadErrors.isEmpty() ? warningHeader : errorHeader, this.width / 2, 10); - this.renderables.forEach(button -> button.render(guiGraphics, mouseX, mouseY, partialTick)); + this.renderables.forEach(button -> button.extractRenderState(guiGraphics, mouseX, mouseY, partialTick)); } - private void drawMultiLineCenteredString(GuiGraphics guiGraphics, Font fr, Component str, int x, int y) { + private void drawMultiLineCenteredString(GuiGraphicsExtractor guiGraphics, Font fr, Component str, int x, int y) { for (FormattedCharSequence s : fr.split(str, this.width)) { - guiGraphics.drawString(fr, s, x - fr.width(s) / 2, y, 0xFFFFFFFF); + guiGraphics.text(fr, s, x - fr.width(s) / 2, y, 0xFFFFFFFF); y += fr.lineHeight; } } @@ -127,7 +127,7 @@ public class LoadingErrorScreen extends ErrorScreen { } @Override - public void renderContent(GuiGraphics guiGraphics, int mouseX, int mouseY, boolean isMouseOver, float partialTick) { + public void extractContent(GuiGraphicsExtractor guiGraphics, int mouseX, int mouseY, boolean isMouseOver, float partialTick) { int top = this.getContentY(); int left = this.getContentX(); var mc = Minecraft.getInstance(); @@ -136,9 +136,9 @@ public class LoadingErrorScreen extends ErrorScreen { int y = top + 2; for (var string : strings) { if (center) - guiGraphics.drawString(font, string, left + (width / 2) - (font.width(string) / 2), y, 0xFFFFFFFF, false); + guiGraphics.text(font, string, left + (width / 2) - (font.width(string) / 2), y, 0xFFFFFFFF, false); else - guiGraphics.drawString(font, string, left + 5, y, 0xFFFFFFFF, false); + guiGraphics.text(font, string, left + 5, y, 0xFFFFFFFF, false); y += font.lineHeight; } } diff --git a/src/main/java/net/minecraftforge/client/gui/ModListScreen.java b/src/main/java/net/minecraftforge/client/gui/ModListScreen.java index 3194e93452..303aeaaa50 100644 --- a/src/main/java/net/minecraftforge/client/gui/ModListScreen.java +++ b/src/main/java/net/minecraftforge/client/gui/ModListScreen.java @@ -27,7 +27,7 @@ import org.apache.maven.artifact.versioning.ComparableVersion; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.ActiveTextCollector; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.components.EditBox; import net.minecraft.client.gui.components.Button; @@ -103,7 +103,7 @@ public class ModListScreen extends Screen { public ModListScreen(Screen parentScreen) { super(Component.translatable("fml.menu.mods.title")); this.parentScreen = parentScreen; - this.mods = ModList.get().getMods(); + this.mods = ModList.getMods(); this.unsortedMods = List.copyOf(this.mods); } @@ -159,7 +159,7 @@ public class ModListScreen extends Screen { } @Override - protected void drawPanel(GuiGraphics guiGraphics, int entryRight, int relativeY, int mouseX, int mouseY) { + protected void drawPanel(GuiGraphicsExtractor guiGraphics, int entryRight, int relativeY, int mouseX, int mouseY) { if (logoPath != null) { //RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); // Draw the logo image inscribed in a rectangle with width entryWidth (minus some padding) and height 50 @@ -168,7 +168,7 @@ public class ModListScreen extends Screen { relativeY += headerHeight + PADDING; } - visitText(guiGraphics.textRenderer(GuiGraphics.HoveredTextEffects.TOOLTIP_AND_CURSOR), relativeY); + visitText(guiGraphics.textRenderer(GuiGraphicsExtractor.HoveredTextEffects.TOOLTIP_AND_CURSOR), relativeY); } private void visitText(ActiveTextCollector collector, int header) { @@ -349,11 +349,11 @@ public class ModListScreen extends Screen { } @Override - public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + public void extractRenderState(GuiGraphicsExtractor guiGraphics, int mouseX, int mouseY, float partialTick) { if (this.modInfo != null) - this.modInfo.render(guiGraphics, mouseX, mouseY, partialTick); + this.modInfo.extractRenderState(guiGraphics, mouseX, mouseY, partialTick); - super.render(guiGraphics, mouseX, mouseY, partialTick); + super.extractRenderState(guiGraphics, mouseX, mouseY, partialTick); } public Minecraft getMinecraftInstance() { @@ -391,7 +391,7 @@ public class ModListScreen extends Screen { try { NativeImage logo = null; - var modfile = ModList.get().getModFileById(selectedMod.getModId()); + var modfile = ModList.getModFileById(selectedMod.getModId()); if (modfile != null) { var path = modfile.getFile().findResource(logoFile); if (Files.exists(path)) @@ -423,7 +423,7 @@ public class ModListScreen extends Screen { lines.add(selectedMod.getDisplayName()); lines.add(ForgeI18n.parseMessage("fml.menu.mods.info.version", MavenVersionStringHelper.artifactVersionToString(selectedMod.getVersion()))); - lines.add(ForgeI18n.parseMessage("fml.menu.mods.info.idstate", selectedMod.getModId(), ModList.get().getModContainerById(selectedMod.getModId()). + lines.add(ForgeI18n.parseMessage("fml.menu.mods.info.idstate", selectedMod.getModId(), ModList.getModContainerById(selectedMod.getModId()). map(ModContainer::getCurrentState).map(Object::toString).orElse("NONE"))); selectedMod.getConfig().getConfigElement("credits").ifPresent(credits-> diff --git a/src/main/java/net/minecraftforge/client/gui/ModMismatchDisconnectedScreen.java b/src/main/java/net/minecraftforge/client/gui/ModMismatchDisconnectedScreen.java index 4f5ecf4366..5c05861988 100644 --- a/src/main/java/net/minecraftforge/client/gui/ModMismatchDisconnectedScreen.java +++ b/src/main/java/net/minecraftforge/client/gui/ModMismatchDisconnectedScreen.java @@ -20,7 +20,7 @@ import org.apache.commons.lang3.tuple.Pair; import net.minecraft.ChatFormatting; import net.minecraft.util.Util; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.TextAlignment; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.MultiLineLabel; @@ -67,7 +67,7 @@ public class ModMismatchDisconnectedScreen extends Screen { this.listHeight = hasMismatches ? 140 : 0; this.allModIds = data.mods().keySet().stream().distinct().collect(Collectors.toList()); - this.presentModUrls = ModList.get().getMods().stream() + this.presentModUrls = ModList.getMods().stream() .filter(info -> allModIds.contains(info.getModId())) .map(info -> Pair.of(info.getModId(), (String)info.getConfig().getConfigElement("displayURL").orElse(""))) .collect(Collectors.toMap(Pair::getLeft, Pair::getRight)); @@ -98,13 +98,12 @@ public class ModMismatchDisconnectedScreen extends Screen { } @Override - public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { - this.renderBackground(guiGraphics, mouseX, mouseY, partialTicks); + public void extractRenderState(GuiGraphicsExtractor guiGraphics, int mouseX, int mouseY, float partialTicks) { int textYOffset = hasMismatches ? 18 : 0; - guiGraphics.drawCenteredString(this.font, this.title, this.width / 2, (this.height - this.listHeight - this.textHeight) / 2 - textYOffset - 9 * 2, 0xAAAAAA); - var lineCollector = guiGraphics.textRenderer(GuiGraphics.HoveredTextEffects.notClickable(false)); + guiGraphics.centeredText(this.font, this.title, this.width / 2, (this.height - this.listHeight - this.textHeight) / 2 - textYOffset - 9 * 2, 0xAAAAAA); + var lineCollector = guiGraphics.textRenderer(GuiGraphicsExtractor.HoveredTextEffects.notClickable(false), null); this.message.visitLines(TextAlignment.CENTER, this.width / 2, (this.height - this.listHeight - this.textHeight) / 2 - textYOffset, 9, lineCollector); - super.render(guiGraphics, mouseX, mouseY, partialTicks); + super.extractRenderState(guiGraphics, mouseX, mouseY, partialTicks); } class MismatchInfoPanel extends ScrollPanel { @@ -251,7 +250,7 @@ public class ModMismatchDisconnectedScreen extends Screen { } @Override - protected void drawPanel(GuiGraphics guiGraphics, int entryRight, int relativeY, int mouseX, int mouseY) { + protected void drawPanel(GuiGraphicsExtractor guiGraphics, int entryRight, int relativeY, int mouseX, int mouseY) { int i = 0; for (Pair> line : lineTable) { @@ -261,10 +260,10 @@ public class ModMismatchDisconnectedScreen extends Screen { int color = 0xFFFFFF; //Optional.ofNullable(font.substrByWidth(name, 0)).map(Style::getColor).map(TextColor::getValue).orElse(0xFFFFFF); //Only indent the given name if a version string is present. This makes it easier to distinguish table section headers and mod entries int nameLeft = left + border + (versions == null ? 0 : nameIndent); - guiGraphics.drawString(font, name, nameLeft, relativeY + i * 12, color, false); + guiGraphics.text(font, name, nameLeft, relativeY + i * 12, color, false); if (versions != null) { - guiGraphics.drawString(font, versions.getLeft(), left + border + nameIndent + nameWidth, relativeY + i * 12, color, false); - guiGraphics.drawString(font, versions.getRight(), left + border + nameIndent + nameWidth + versionWidth, relativeY + i * 12, color, false); + guiGraphics.text(font, versions.getLeft(), left + border + nameIndent + nameWidth, relativeY + i * 12, color, false); + guiGraphics.text(font, versions.getRight(), left + border + nameIndent + nameWidth + versionWidth, relativeY + i * 12, color, false); } i++; @@ -272,11 +271,11 @@ public class ModMismatchDisconnectedScreen extends Screen { } @Override - public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { - super.render(guiGraphics, mouseX, mouseY, partialTicks); + public void extractRenderState(GuiGraphicsExtractor guiGraphics, int mouseX, int mouseY, float partialTicks) { + super.extractRenderState(guiGraphics, mouseX, mouseY, partialTicks); Style style = getComponentStyleAt(mouseX, mouseY); if (style != null && style.getHoverEvent() != null) - guiGraphics.renderComponentHoverEffect(font, style, mouseX, mouseY); + guiGraphics.componentHoverEffect(font, style, mouseX, mouseY); } public Style getComponentStyleAt(double x, double y) { diff --git a/src/main/java/net/minecraftforge/client/gui/TitleScreenModUpdateIndicator.java b/src/main/java/net/minecraftforge/client/gui/TitleScreenModUpdateIndicator.java index 263c81a60d..21769fc6d6 100644 --- a/src/main/java/net/minecraftforge/client/gui/TitleScreenModUpdateIndicator.java +++ b/src/main/java/net/minecraftforge/client/gui/TitleScreenModUpdateIndicator.java @@ -5,7 +5,7 @@ package net.minecraftforge.client.gui; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.TitleScreen; import net.minecraft.client.renderer.RenderPipelines; @@ -40,7 +40,7 @@ public class TitleScreenModUpdateIndicator extends Screen { } @Override - public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + public void extractRenderState(GuiGraphicsExtractor guiGraphics, int mouseX, int mouseY, float partialTick) { if (showNotification == null || !showNotification.shouldDraw() || !FMLConfig.getBoolConfigValue(FMLConfig.ConfigValue.VERSION_CHECK)) return; diff --git a/src/main/java/net/minecraftforge/client/gui/overlay/ForgeLayer.java b/src/main/java/net/minecraftforge/client/gui/overlay/ForgeLayer.java index a33c799ee0..d862b03798 100644 --- a/src/main/java/net/minecraftforge/client/gui/overlay/ForgeLayer.java +++ b/src/main/java/net/minecraftforge/client/gui/overlay/ForgeLayer.java @@ -6,8 +6,8 @@ package net.minecraftforge.client.gui.overlay; import net.minecraft.client.DeltaTracker; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; public interface ForgeLayer { - void render(GuiGraphics gg, DeltaTracker dt); + void extract(GuiGraphicsExtractor gg, DeltaTracker dt); } diff --git a/src/main/java/net/minecraftforge/client/gui/overlay/ForgeLayeredDraw.java b/src/main/java/net/minecraftforge/client/gui/overlay/ForgeLayeredDraw.java index fa1eac0902..932f7a96f8 100644 --- a/src/main/java/net/minecraftforge/client/gui/overlay/ForgeLayeredDraw.java +++ b/src/main/java/net/minecraftforge/client/gui/overlay/ForgeLayeredDraw.java @@ -9,7 +9,7 @@ import com.mojang.logging.LogUtils; import net.minecraft.client.DeltaTracker; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.resources.Identifier; import net.minecraftforge.client.event.ForgeEventFactoryClient; import net.minecraftforge.client.event.AddGuiOverlayLayersEvent; @@ -270,7 +270,7 @@ public final class ForgeLayeredDraw implements ForgeLayer { var result = namedLayers.computeIfPresent(targetLayer, (name, layer) -> (guiGraphics, deltaTracker) -> { if (condition.getAsBoolean()) { - layer.render(guiGraphics, deltaTracker); + layer.extract(guiGraphics, deltaTracker); } }); if (result == null) { @@ -304,7 +304,7 @@ public final class ForgeLayeredDraw implements ForgeLayer { var entry = subLayerStacks.get(layerName); entry.getKey().resolveNested(); bakedLayers.add((gg, tr) -> { - if (entry.getValue().getAsBoolean()) entry.getKey().render(gg,tr); + if (entry.getValue().getAsBoolean()) entry.getKey().extract(gg,tr); }); } else { bakedLayers.add(namedLayers.get(layerName)); @@ -368,41 +368,41 @@ public final class ForgeLayeredDraw implements ForgeLayer { } @ApiStatus.Internal - public static void beginRender(GuiGraphics gg, DeltaTracker dt) { - instance.render(gg,dt); + public static void extractRenderState(GuiGraphicsExtractor gg, DeltaTracker dt) { + instance.extract(gg, dt); } @ApiStatus.Internal - public void render(GuiGraphics gg, DeltaTracker dt) { + public void extract(GuiGraphicsExtractor gg, DeltaTracker dt) { for (ForgeLayer bakedLayer : bakedLayers) { - bakedLayer.render(gg, dt); + bakedLayer.extract(gg, dt); } } @ApiStatus.Internal public static void init(Gui gui, Minecraft minecraft) { var preSleepDraw = new ForgeLayeredDraw(PRE_SLEEP_STACK) - .add(CAMERA_OVERLAY, gui::renderCameraOverlays) - .add(CROSSHAIR, gui::renderCrosshair) + .add(CAMERA_OVERLAY, gui::extractCameraOverlays) + .add(CROSSHAIR, gui::extractCrosshair) .add(CHANGE_STRATUM, (gg, dt) -> gg.nextStratum()) - .add(HOTBAR_AND_DECOS, gui::renderHotbarAndDecorations) - .add(POTION_EFFECTS, gui::renderEffects) - .add(BOSS_OVERLAY, gui::renderBossOverlay); + .add(HOTBAR_AND_DECOS, gui::extractHotbarAndDecorations) + .add(POTION_EFFECTS, gui::extractEffects) + .add(BOSS_OVERLAY, gui::extractBossOverlay); var postSleepDraw = new ForgeLayeredDraw(POST_SLEEP_STACK) - .add(DEMO_OVERLAY, gui::renderDemoOverlay) - .add(SCOREBOARD, gui::renderScoreboardSidebar) - .add(HOTBAR_MESSAGE, gui::renderOverlayMessage) - .add(TITLE_OVERLAY, gui::renderTitle) - .add(CHAT_OVERLAY, gui::renderChat) - .add(TAB_LIST, gui::renderTabList) - .add(SUBTITLE_OVERLAY, (gfx, delta) -> gui.renderSubtitleOverlay(gfx, minecraft.screen != null && minecraft.screen.isInGameUi())); + .add(DEMO_OVERLAY, gui::extractDemoOverlay) + .add(SCOREBOARD, gui::extractScoreboardSidebar) + .add(HOTBAR_MESSAGE, gui::extractOverlayMessage) + .add(TITLE_OVERLAY, gui::extractTitle) + .add(CHAT_OVERLAY, gui::extractChat) + .add(TAB_LIST, gui::extractTabList) + .add(SUBTITLE_OVERLAY, (gfx, delta) -> gui.extractSubtitleOverlay(gfx, minecraft.screen != null && minecraft.screen.isInGameUi())); instance .add(PRE_SLEEP_STACK, preSleepDraw, () -> !minecraft.options.hideGui) - .add(SLEEP_OVERLAY, gui::renderSleepOverlay) + .add(SLEEP_OVERLAY, gui::extractSleepOverlay) .add(POST_SLEEP_STACK, postSleepDraw, () -> !minecraft.options.hideGui) .add(SUBTITLE_OVERLAY, (gfx, delta) -> { if (minecraft.options.hideGui && minecraft.screen != null && minecraft.screen.isInGameUi()) - gui.renderSubtitleOverlay(gfx, true); + gui.extractSubtitleOverlay(gfx, true); }); instance.resolveLayers(); } diff --git a/src/main/java/net/minecraftforge/client/gui/widget/ExtendedButton.java b/src/main/java/net/minecraftforge/client/gui/widget/ExtendedButton.java index 47646512d4..2b1c5755b0 100644 --- a/src/main/java/net/minecraftforge/client/gui/widget/ExtendedButton.java +++ b/src/main/java/net/minecraftforge/client/gui/widget/ExtendedButton.java @@ -6,7 +6,7 @@ package net.minecraftforge.client.gui.widget; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.Button; import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.locale.Language; @@ -38,11 +38,11 @@ public class ExtendedButton extends Button { * Draws this button to the screen. */ @Override - public void renderContents(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + public void extractContents(GuiGraphicsExtractor guiGraphics, int mouseX, int mouseY, float partialTick) { Minecraft mc = Minecraft.getInstance(); guiGraphics.blitSprite(RenderPipelines.GUI_TEXTURED, SPRITES.get(this.active, this.isHoveredOrFocused()), this.getX(), this.getY(), this.getWidth(), this.getHeight()); final FormattedText buttonText = mc.font.ellipsize(this.getMessage(), this.width - 6); // Remove 6 pixels so that the text is always contained within the button's borders - guiGraphics.drawCenteredString(mc.font, Language.getInstance().getVisualOrder(buttonText), this.getX() + this.width / 2, this.getY() + (this.height - 8) / 2, getFGColor()); + guiGraphics.centeredText(mc.font, Language.getInstance().getVisualOrder(buttonText), this.getX() + this.width / 2, this.getY() + (this.height - 8) / 2, getFGColor()); } } diff --git a/src/main/java/net/minecraftforge/client/gui/widget/ForgeSlider.java b/src/main/java/net/minecraftforge/client/gui/widget/ForgeSlider.java index 77c33edf9c..74ea2653ab 100644 --- a/src/main/java/net/minecraftforge/client/gui/widget/ForgeSlider.java +++ b/src/main/java/net/minecraftforge/client/gui/widget/ForgeSlider.java @@ -5,8 +5,7 @@ package net.minecraftforge.client.gui.widget; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.AbstractSliderButton; import net.minecraft.client.input.KeyEvent; import net.minecraft.client.input.MouseButtonEvent; @@ -197,10 +196,10 @@ public class ForgeSlider extends AbstractSliderButton { protected void applyValue() {} @Override - public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + public void extractWidgetRenderState(GuiGraphicsExtractor guiGraphics, int mouseX, int mouseY, float partialTick) { guiGraphics.blitSprite(RenderPipelines.GUI_TEXTURED, this.getSprite(), this.getX(), this.getY(), this.getWidth(), this.getHeight()); guiGraphics.blitSprite(RenderPipelines.GUI_TEXTURED, this.getHandleSprite(), this.getX() + (int)(this.value * (double)(this.width - 8)), this.getY(), 8, this.getHeight()); - renderScrollingStringOverContents(guiGraphics.textRendererForWidget(this, GuiGraphics.HoveredTextEffects.NONE), this.getMessage(), 2); + extractScrollingStringOverContents(guiGraphics.textRendererForWidget(this, GuiGraphicsExtractor.HoveredTextEffects.NONE), this.getMessage(), 2); } } diff --git a/src/main/java/net/minecraftforge/client/gui/widget/ModListWidget.java b/src/main/java/net/minecraftforge/client/gui/widget/ModListWidget.java index 930b42579d..062af04bbe 100644 --- a/src/main/java/net/minecraftforge/client/gui/widget/ModListWidget.java +++ b/src/main/java/net/minecraftforge/client/gui/widget/ModListWidget.java @@ -6,7 +6,7 @@ package net.minecraftforge.client.gui.widget; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.ObjectSelectionList; import net.minecraft.client.input.MouseButtonEvent; import net.minecraft.client.renderer.RenderPipelines; @@ -45,8 +45,8 @@ public class ModListWidget extends ObjectSelectionList { } @Override - protected void renderSelection(GuiGraphics gui, ModListWidget.ModEntry entry, int color) { - int widthOffset = this.scrollbarVisible() ? 11 : 4; + protected void extractSelection(GuiGraphicsExtractor gui, ModListWidget.ModEntry entry, int color) { + int widthOffset = this.scrollable() ? 11 : 4; int top = entry.getContentY(); int left = entry.getContentX(); int right = left + entry.getWidth() - widthOffset; @@ -75,7 +75,7 @@ public class ModListWidget extends ObjectSelectionList { } @Override - public void renderContent(GuiGraphics guiGraphics, int mouseX, int mouseY, boolean isMouseOver, float partialTick) { + public void extractContent(GuiGraphicsExtractor guiGraphics, int mouseX, int mouseY, boolean isMouseOver, float partialTick) { int top = this.getContentY(); int left = this.getContentX(); int entryHeight = this.getContentBottom(); @@ -84,9 +84,9 @@ public class ModListWidget extends ObjectSelectionList { Component version = Component.literal(stripControlCodes(MavenVersionStringHelper.artifactVersionToString(modInfo.getVersion()))); VersionChecker.CheckResult vercheck = VersionChecker.getResult(modInfo); Font font = this.parent.getFontRenderer(); - var barOffset = ModListWidget.this.scrollbarVisible() ? 6 : 0; - guiGraphics.drawString(font, Language.getInstance().getVisualOrder(FormattedText.composite(font.substrByWidth(name, listWidth - 6 - barOffset))), left + 3, top + 2, 0xFFFFFFFF, false); - guiGraphics.drawString(font, Language.getInstance().getVisualOrder(FormattedText.composite(font.substrByWidth(version, listWidth - 6 - barOffset))), left + 3, top + 2 + font.lineHeight, 0xFFCCCCCC, false); + var barOffset = ModListWidget.this.scrollable() ? 6 : 0; + guiGraphics.text(font, Language.getInstance().getVisualOrder(FormattedText.composite(font.substrByWidth(name, listWidth - 6 - barOffset))), left + 3, top + 2, 0xFFFFFFFF, false); + guiGraphics.text(font, Language.getInstance().getVisualOrder(FormattedText.composite(font.substrByWidth(version, listWidth - 6 - barOffset))), left + 3, top + 2 + font.lineHeight, 0xFFCCCCCC, false); if (vercheck.status().shouldDraw()) { //TODO: [Forge][ModList] Consider adding more icons for visualization guiGraphics.pose().pushMatrix(); diff --git a/src/main/java/net/minecraftforge/client/gui/widget/ScrollPanel.java b/src/main/java/net/minecraftforge/client/gui/widget/ScrollPanel.java index 14603ece18..c60908d838 100644 --- a/src/main/java/net/minecraftforge/client/gui/widget/ScrollPanel.java +++ b/src/main/java/net/minecraftforge/client/gui/widget/ScrollPanel.java @@ -6,7 +6,7 @@ package net.minecraftforge.client.gui.widget; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.Renderable; import net.minecraft.client.gui.components.events.AbstractContainerEventHandler; import net.minecraft.client.gui.components.events.GuiEventListener; @@ -143,7 +143,7 @@ public abstract class ScrollPanel extends AbstractContainerEventHandler implemen /** * Draws the background of the scroll panel. This runs AFTER Scissors are enabled. */ - protected void drawBackground(GuiGraphics guiGraphics, float partialTick) { + protected void drawBackground(GuiGraphicsExtractor guiGraphics, float partialTick) { if (this.client.level != null) this.drawGradientRect(guiGraphics, this.left, this.top, this.right, this.bottom, bgColorFrom, bgColorTo); } @@ -152,7 +152,7 @@ public abstract class ScrollPanel extends AbstractContainerEventHandler implemen * Draw anything special on the screen. Scissor (RenderSystem.enableScissor) is enabled * for anything that is rendered outside the view box. Do not mess with Scissor unless you support this. */ - protected abstract void drawPanel(GuiGraphics guiGraphics, int entryRight, int relativeY, int mouseX, int mouseY); + protected abstract void drawPanel(GuiGraphicsExtractor guiGraphics, int entryRight, int relativeY, int mouseX, int mouseY); protected boolean clickPanel(double mouseX, double mouseY, int button) { return false; @@ -245,7 +245,7 @@ public abstract class ScrollPanel extends AbstractContainerEventHandler implemen } @Override - public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + public void extractRenderState(GuiGraphicsExtractor guiGraphics, int mouseX, int mouseY, float partialTick) { guiGraphics.enableScissor(left, top, left + width, top + height); this.drawBackground(guiGraphics, partialTick); @@ -289,7 +289,7 @@ public abstract class ScrollPanel extends AbstractContainerEventHandler implemen } } - protected void drawGradientRect(GuiGraphics guiGraphics, int left, int top, int right, int bottom, int color1, int color2) { + protected void drawGradientRect(GuiGraphicsExtractor guiGraphics, int left, int top, int right, int bottom, int color1, int color2) { guiGraphics.fillGradient(left, top, right, bottom, color1, color2); } diff --git a/src/main/java/net/minecraftforge/client/loading/ClientModLoader.java b/src/main/java/net/minecraftforge/client/loading/ClientModLoader.java index 8b8ddd4b5e..cbd4e5e76c 100644 --- a/src/main/java/net/minecraftforge/client/loading/ClientModLoader.java +++ b/src/main/java/net/minecraftforge/client/loading/ClientModLoader.java @@ -30,7 +30,7 @@ import net.minecraftforge.client.gui.LoadingErrorScreen; import net.minecraftforge.resource.ResourcePackLoader; import net.minecraftforge.server.LanguageHook; -public class ClientModLoader { +public final class ClientModLoader { private static final Logger LOGGER = LogManager.getLogger(); private static boolean loading; private static Minecraft mc; @@ -45,7 +45,7 @@ public class ClientModLoader { ClientModLoader.mc = minecraft; LogicalSidedProvider.setClient(()->minecraft); LanguageHook.loadForgeAndMCLangs(); - createRunnableWithCatch(()->ModLoader.get().gatherAndInitializeMods(ModWorkManager.syncExecutor(), ModWorkManager.parallelExecutor(), ImmediateWindowHandler::renderTick)).run(); + createRunnableWithCatch(() -> ModLoader.gatherAndInitializeMods(ModWorkManager.syncExecutor(), ModWorkManager.parallelExecutor(), ImmediateWindowHandler::renderTick)).run(); if (error == null) { ResourcePackLoader.loadResourcePacks(defaultResourcePacks, true); net.minecraftforge.event.AddPackFindersEvent.BUS.post(new AddPackFindersEvent(PackType.CLIENT_RESOURCES, defaultResourcePacks::addPackFinder)); @@ -73,11 +73,11 @@ public class ClientModLoader { } private static void startModLoading(ModWorkManager.DrivenExecutor syncExecutor, Executor parallelExecutor) { - createRunnableWithCatch(() -> ModLoader.get().loadMods(syncExecutor, parallelExecutor, ImmediateWindowHandler::renderTick)).run(); + createRunnableWithCatch(() -> ModLoader.loadMods(syncExecutor, parallelExecutor, ImmediateWindowHandler::renderTick)).run(); } private static void finishModLoading(ModWorkManager.DrivenExecutor syncExecutor, Executor parallelExecutor) { - createRunnableWithCatch(() -> ModLoader.get().finishMods(syncExecutor, parallelExecutor, ImmediateWindowHandler::renderTick)).run(); + createRunnableWithCatch(() -> ModLoader.finishMods(syncExecutor, parallelExecutor, ImmediateWindowHandler::renderTick)).run(); loading = false; loadingComplete = true; // reload game settings on main thread @@ -85,7 +85,7 @@ public class ClientModLoader { } public static VersionChecker.Status checkForUpdates() { - boolean anyOutdated = ModList.get().getMods().stream() + boolean anyOutdated = ModList.getMods().stream() .map(VersionChecker::getResult) .map(VersionChecker.CheckResult::status) .anyMatch(VersionChecker.Status::isOutdated); @@ -93,7 +93,7 @@ public class ClientModLoader { } public static boolean completeModLoading() { - var warnings = ModLoader.get().getWarnings(); + var warnings = ModLoader.getWarnings(); boolean showWarnings = ForgeConfig.CLIENT.showLoadWarnings(); if (!showWarnings) { diff --git a/src/main/java/net/minecraftforge/client/loading/ForgeLoadingOverlay.java b/src/main/java/net/minecraftforge/client/loading/ForgeLoadingOverlay.java index 530d75bf69..7d9e391434 100644 --- a/src/main/java/net/minecraftforge/client/loading/ForgeLoadingOverlay.java +++ b/src/main/java/net/minecraftforge/client/loading/ForgeLoadingOverlay.java @@ -8,7 +8,7 @@ package net.minecraftforge.client.loading; import com.mojang.blaze3d.opengl.GlTexture; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.screens.LoadingOverlay; import net.minecraft.client.renderer.rendertype.RenderType; import net.minecraft.server.packs.resources.ReloadInstance; @@ -59,7 +59,7 @@ public class ForgeLoadingOverlay extends LoadingOverlay { } @Override - protected boolean renderContents(GuiGraphics gui, float fade) { + protected boolean extractContentRenderState(final GuiGraphicsExtractor graphics, float fade) { if (!ENABLE) return true; /* This should render the framebuffer but it doesnt work in 1.21.6's rendering changes. diff --git a/src/main/java/net/minecraftforge/client/loading/NoVizFallback.java b/src/main/java/net/minecraftforge/client/loading/NoVizFallback.java index 887121e295..3d4a8c0947 100644 --- a/src/main/java/net/minecraftforge/client/loading/NoVizFallback.java +++ b/src/main/java/net/minecraftforge/client/loading/NoVizFallback.java @@ -6,6 +6,9 @@ package net.minecraftforge.client.loading; import com.mojang.blaze3d.platform.Monitor; +import com.mojang.blaze3d.platform.Window; +import com.mojang.blaze3d.systems.GpuBackend; + import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.LoadingOverlay; import net.minecraft.server.packs.resources.ReloadInstance; @@ -13,7 +16,6 @@ import net.minecraft.server.packs.resources.ReloadInstance; import java.util.Optional; import java.util.function.Consumer; import java.util.function.IntConsumer; -import java.util.function.IntSupplier; import java.util.function.LongSupplier; import java.util.function.Supplier; @@ -21,8 +23,20 @@ import org.lwjgl.glfw.GLFW; public final class NoVizFallback { private static long WINDOW; - public static LongSupplier windowHandoff(IntSupplier width, IntSupplier height, Supplier title, LongSupplier monitor) { - return () -> WINDOW = GLFW.glfwCreateWindow(width.getAsInt(), height.getAsInt(), title.get(), monitor.getAsLong(), 0L); + public static LongSupplier windowHandoff(int width, int height, String title, long monitor, Supplier backend) { + return () -> { + try { + return WINDOW = Window.createGlfwWindow(width, height, title, monitor, (GpuBackend)backend.get()); + } catch (Throwable e) { + return sneak(e); + } + }; + } + + + @SuppressWarnings("unchecked") + private static R sneak(Throwable t) throws E { + throw (E)t; } public static Supplier loadingOverlay(Supplier mc, Supplier ri, Consumer> ex, boolean fadein) { diff --git a/src/main/java/net/minecraftforge/client/model/DynamicFluidContainerModel.java b/src/main/java/net/minecraftforge/client/model/DynamicFluidContainerModel.java index dbaeff1e4e..c2f18abdcf 100644 --- a/src/main/java/net/minecraftforge/client/model/DynamicFluidContainerModel.java +++ b/src/main/java/net/minecraftforge/client/model/DynamicFluidContainerModel.java @@ -8,16 +8,17 @@ package net.minecraftforge.client.model; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonObject; import com.mojang.math.Transformation; -import net.minecraft.client.renderer.block.model.TextureSlots; + +import net.minecraft.client.renderer.block.dispatch.ModelState; import net.minecraft.client.renderer.chunk.ChunkSectionLayer; -import net.minecraft.client.renderer.texture.TextureAtlas; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.resources.model.Material; import net.minecraft.client.resources.model.ModelBaker; import net.minecraft.client.resources.model.ModelDebugName; -import net.minecraft.client.resources.model.ModelState; -import net.minecraft.client.resources.model.QuadCollection; -import net.minecraft.client.resources.model.UnbakedGeometry; +import net.minecraft.client.resources.model.cuboid.ItemModelGenerator; +import net.minecraft.client.resources.model.geometry.BakedQuad.MaterialInfo; +import net.minecraft.client.resources.model.geometry.QuadCollection; +import net.minecraft.client.resources.model.geometry.UnbakedGeometry; +import net.minecraft.client.resources.model.sprite.Material; +import net.minecraft.client.resources.model.sprite.TextureSlots; import net.minecraft.resources.Identifier; import net.minecraft.util.GsonHelper; import net.minecraft.world.level.material.Fluid; @@ -64,11 +65,6 @@ public class DynamicFluidContainerModel implements UnbakedGeometry { return new RenderTypeGroup(ChunkSectionLayer.TRANSLUCENT, unlit ? ForgeRenderTypes.ITEM_UNSORTED_UNLIT_TRANSLUCENT.get() : ForgeRenderTypes.ITEM_UNSORTED_TRANSLUCENT.get()); } - @SuppressWarnings("deprecation") - private static Material getMaterial(Identifier texture) { - return new Material(TextureAtlas.LOCATION_BLOCKS, texture); - } - /** * Returns a new ModelDynBucket representing the given fluid, but with the same * other properties (flipGas, tint, coverIsMask). @@ -89,13 +85,13 @@ public class DynamicFluidContainerModel implements UnbakedGeometry { if (fluid != Fluids.EMPTY) { var stillTexture = IClientFluidTypeExtensions.of(fluid).getStillTexture(); - stillMaterial = getMaterial(stillTexture); + stillMaterial = new Material(stillTexture); } - var sprites = baker.sprites(); - var baseSprite = sprites.resolveSlot(textures, "base", name); - var fluidSprite = stillMaterial == null ? null : sprites.get(stillMaterial, name); - var coverSprite = sprites.resolveSlot(textures, "cover", name); + var materials = baker.materials(); + var baseMaterial = materials.resolveSlot(textures, "base", name); + var fluidMaterial = stillMaterial == null ? null : materials.get(stillMaterial, name); + var coverMaterial = materials.resolveSlot(textures, "cover", name); /* var particleSprite = sprites.resolveSlot(textures, "particle", name); @@ -113,34 +109,24 @@ public class DynamicFluidContainerModel implements UnbakedGeometry { var buf = new QuadCollection.Builder(); - if (baseSprite != null) { - // Base texture - var unbaked = UnbakedGeometryHelper.createUnbakedItemElements(0, baseSprite.contents()); - UnbakedGeometryHelper.bakeElements(baker.parts(), unbaked, $ -> baseSprite, state, buf); - } + if (baseMaterial != null) + ItemModelGenerator.bakeExtrudedSprite(buf, baker.interner(), state, info(baker, baseMaterial, 0)); - if (fluidMaskLocation != null && fluidSprite != null) { - TextureAtlasSprite templateSprite = sprites.get(fluidMaskLocation, name); - if (templateSprite != null) { - // Fluid layer + // Fluid layer + if (fluidMaskLocation != null && fluidMaterial != null) { + var templateMaterial = materials.get(fluidMaskLocation, name); + if (templateMaterial != null) { var transformedState = new SimpleModelState(transformation.compose(FLUID_TRANSFORM)); - var unbaked = UnbakedGeometryHelper.createUnbakedItemMaskElements(1, templateSprite.contents()); // Use template as mask - - //var emissive = applyFluidLuminosity && fluid.getFluidType().getLightLevel() > 0; - //var transformer = emissive ? QuadTransformers.settingMaxEmissivity() : QuadTransformers.empty(); - // TODO: [Forge][Rendering] Emissive fluid models - - UnbakedGeometryHelper.bakeElements(baker.parts(), unbaked, $ -> fluidSprite, transformedState, buf); // Bake with fluid texture + UnbakedGeometryHelper.bakeMaskedSprite(buf, baker.interner(), transformedState, info(baker, templateMaterial, 1), info(baker, fluidMaterial, 1)); } } - if (coverSprite != null) { - var sprite = coverIsMask ? baseSprite : coverSprite; + // Cover/overlay + if (coverMaterial != null) { + var sprite = coverIsMask ? baseMaterial : coverMaterial; if (sprite != null) { - // Cover/overlay var transformedState = new SimpleModelState(transformation.compose(COVER_TRANSFORM)); - var unbaked = UnbakedGeometryHelper.createUnbakedItemMaskElements(2, coverSprite.contents()); // Use cover as mask - UnbakedGeometryHelper.bakeElements(baker.parts(), unbaked, $ -> sprite, transformedState, buf); // Bake with selected texture + UnbakedGeometryHelper.bakeMaskedSprite(buf, baker.interner(), transformedState, info(baker, coverMaterial, 2), info(baker, sprite, 2)); } } @@ -148,6 +134,12 @@ public class DynamicFluidContainerModel implements UnbakedGeometry { return buf.build(); } + private static MaterialInfo info(final ModelBaker baker, final Material.Baked material, final int tintIndex) { + return baker.interner().materialInfo( + MaterialInfo.of(material, material.sprite().transparency(), tintIndex, true, 0) + ); + } + public static final class Loader implements IGeometryLoader { public static final Loader INSTANCE = new Loader(); diff --git a/src/main/java/net/minecraftforge/client/model/ForgeFaceData.java b/src/main/java/net/minecraftforge/client/model/ForgeFaceData.java index 75762294f9..8bfa185de4 100644 --- a/src/main/java/net/minecraftforge/client/model/ForgeFaceData.java +++ b/src/main/java/net/minecraftforge/client/model/ForgeFaceData.java @@ -13,12 +13,9 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.JsonOps; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.client.renderer.block.model.BlockElement; -import net.minecraft.client.renderer.block.model.BlockElementFace; - /** * Holds extra data that may be injected into a face.

- * Used by {@link ItemLayerGeometry}, {@link BlockElement} and {@link BlockElementFace} + * Used by {@link BlockElement} and {@link BlockElementFace} * * @param ambientOcclusion If this face has AO * @param calculateNormals If we should manually calculate the normals for this block or inherit facing normals like vanilla diff --git a/src/main/java/net/minecraftforge/client/model/IQuadTransformer.java b/src/main/java/net/minecraftforge/client/model/IQuadTransformer.java index 57e8797951..f3819d46a1 100644 --- a/src/main/java/net/minecraftforge/client/model/IQuadTransformer.java +++ b/src/main/java/net/minecraftforge/client/model/IQuadTransformer.java @@ -5,9 +5,10 @@ package net.minecraftforge.client.model; -import net.minecraft.client.renderer.block.model.BakedQuad; import java.util.List; +import net.minecraft.client.resources.model.geometry.BakedQuad; + /** * Transformer for {@link BakedQuad baked quads}. * diff --git a/src/main/java/net/minecraftforge/client/model/ItemLayerGeometry.java b/src/main/java/net/minecraftforge/client/model/ItemLayerGeometry.java deleted file mode 100644 index 7911ec3164..0000000000 --- a/src/main/java/net/minecraftforge/client/model/ItemLayerGeometry.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (c) Forge Development LLC and contributors - * SPDX-License-Identifier: LGPL-2.1-only - */ - -package net.minecraftforge.client.model; - -import com.google.common.collect.ImmutableList; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import it.unimi.dsi.fastutil.ints.Int2ObjectMaps; -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; -import net.minecraft.client.renderer.rendertype.RenderType; -import net.minecraft.client.renderer.block.model.ItemModelGenerator; -import net.minecraft.client.renderer.block.model.SimpleUnbakedGeometry; -import net.minecraft.client.renderer.block.model.TextureSlots; -import net.minecraft.client.renderer.block.model.BlockElement; -import net.minecraft.client.renderer.block.model.BlockModelPart; -import net.minecraft.client.resources.model.Material; -import net.minecraft.client.resources.model.ModelBaker; -import net.minecraft.client.resources.model.ModelDebugName; -import net.minecraft.client.resources.model.ModelState; -import net.minecraft.client.resources.model.QuadCollection; -import net.minecraft.client.resources.model.UnbakedGeometry; -import net.minecraft.resources.Identifier; -import net.minecraftforge.client.ForgeRenderTypes; -import net.minecraftforge.client.RenderTypeGroup; -import net.minecraftforge.client.model.geometry.IGeometryBakingContext; -import net.minecraftforge.client.model.geometry.IGeometryLoader; -import net.minecraftforge.client.model.geometry.IUnbakedGeometry; -import net.minecraftforge.client.model.geometry.UnbakedGeometryHelper; - -import java.util.ArrayList; -import java.util.List; - -import org.jetbrains.annotations.Nullable; - -/** - * Forge version of vanilla's {@link ItemModelGenerator}, i.e. builtin/generated models with some tweaks: - * - Represented as {@link UnbakedGeometry} so it can be used in multiple root models - * - Not limited to an arbitrary number of layers (5) - //* - Support for per-layer render types - Currently Doesn't work. TODO: [Forge][Model] Make a Model loader for this - */ -@SuppressWarnings("unused") -public class ItemLayerGeometry implements UnbakedGeometry { - private static final ItemLayerGeometry INSTANCE = new ItemLayerGeometry(Int2ObjectMaps.emptyMap(), Int2ObjectMaps.emptyMap()); - - private final Int2ObjectMap renderTypeNames; - private final Int2ObjectMap renderTypeFastNames; - - private ItemLayerGeometry(Int2ObjectMap renderTypeNames, Int2ObjectMap renderTypeFastNames) { - this.renderTypeNames = renderTypeNames; - this.renderTypeFastNames = renderTypeFastNames; - } - - @Override - public QuadCollection bake(TextureSlots textures, ModelBaker baker, ModelState state, ModelDebugName name) { - List elements = new ArrayList<>(); - - int i = 0; - while (true) { - var layer = "layer" + i++; - var material = textures.getMaterial(layer); - if (material == null) - break; - var contents = baker.sprites().get(material, name).contents(); - elements.addAll(ItemModelGenerator.processFrames(i, layer, contents)); - } - - return SimpleUnbakedGeometry.bake(elements, textures, baker, state, name); - /* - Material particleMaterial = spriteGetter.getMaterial("particle"); - var particle = baker.sprites().get(particleMaterial == null ? textures.get(0) : particleMaterial, name); - var rootTransform = context.getRootTransform(); - if (!rootTransform.isIdentity()) - modelState = UnbakedGeometryHelper.composeRootTransformIntoModelState(modelState, rootTransform); - - var normalRenderTypes = new RenderTypeGroup(RenderType.translucent(), ForgeRenderTypes.ITEM_UNSORTED_TRANSLUCENT.get()); - var builder = CompositeModel.Baked.builder(context, particle, context.getTransforms()); - for (int i = 0; i < textures.size(); i++) { - var sprite = baker.sprites().get(textures.get(i), name); - var unbaked = UnbakedGeometryHelper.createUnbakedItemElements(i, sprite.contents()); - var quads = UnbakedGeometryHelper.bakeElements(unbaked, $ -> sprite, modelState); - var renderTypeName = renderTypeNames.get(i); - var renderTypes = renderTypeName != null ? context.getRenderType(renderTypeName) : null; - var renderTypeFastName = renderTypeFastNames.get(i); - var renderTypesFast = renderTypeFastName != null ? context.getRenderType(renderTypeFastName) : null; - builder.addQuads(renderTypes != null ? renderTypes : normalRenderTypes, renderTypesFast != null ? renderTypesFast : RenderTypeGroup.EMPTY, quads); - } - - return builder.build(); - */ - } - - public static final class Loader implements IGeometryLoader { - public static final Loader INSTANCE = new Loader(); - - @Override - public UnbakedGeometry read(JsonObject jsonObject, JsonDeserializationContext deserializationContext) { - return ItemLayerGeometry.INSTANCE; - /* - var renderTypeNames = readRenderTypeNames(jsonObject, "render_types"); - var renderTypeFastNames = readRenderTypeNames(jsonObject, "render_types_fast"); - return new ItemLayerModel(renderTypeNames, renderTypeFastNames); - */ - } - - private static Int2ObjectMap readRenderTypeNames(JsonObject jsonObject, String key) { - var renderTypeNames = new Int2ObjectOpenHashMap(); - if (jsonObject.has(key)) { - var renderTypes = jsonObject.getAsJsonObject(key); - for (var entry : renderTypes.entrySet()) { - var renderType = Identifier.parse(entry.getKey()); - for (var layer : entry.getValue().getAsJsonArray()) - if (renderTypeNames.put(layer.getAsInt(), renderType) != null) - throw new JsonParseException("Registered duplicate " + key + " for layer " + layer); - } - } - - return renderTypeNames; - } - } -} diff --git a/src/main/java/net/minecraftforge/client/model/QuadTransformers.java b/src/main/java/net/minecraftforge/client/model/QuadTransformers.java index e222ede4aa..2e2e966835 100644 --- a/src/main/java/net/minecraftforge/client/model/QuadTransformers.java +++ b/src/main/java/net/minecraftforge/client/model/QuadTransformers.java @@ -6,7 +6,9 @@ package net.minecraftforge.client.model; import com.mojang.math.Transformation; -import net.minecraft.client.renderer.block.model.BakedQuad; + +import net.minecraft.client.resources.model.geometry.BakedQuad; + import org.joml.Vector3f; import org.joml.Vector3fc; import org.joml.Vector4f; @@ -44,7 +46,7 @@ public final class QuadTransformers { return new BakedQuad(positions[0], positions[1], positions[2], positions[3], quad.packedUV0(), quad.packedUV1(), quad.packedUV2(), quad.packedUV3(), - quad.tintIndex(), quad.direction(), quad.sprite(), quad.shade(), quad.lightEmission(), quad.ambientOcclusion()); + quad.direction(), quad.materialInfo()); }; } /** diff --git a/src/main/java/net/minecraftforge/client/model/SimpleModelState.java b/src/main/java/net/minecraftforge/client/model/SimpleModelState.java index cf61c4fcf3..741ea46e22 100644 --- a/src/main/java/net/minecraftforge/client/model/SimpleModelState.java +++ b/src/main/java/net/minecraftforge/client/model/SimpleModelState.java @@ -6,7 +6,8 @@ package net.minecraftforge.client.model; import com.mojang.math.Transformation; -import net.minecraft.client.resources.model.ModelState; + +import net.minecraft.client.renderer.block.dispatch.ModelState; /** * Simple implementation of {@link ModelState}. diff --git a/src/main/java/net/minecraftforge/client/model/data/ModelData.java b/src/main/java/net/minecraftforge/client/model/data/ModelData.java index add17e3107..5ae0debc7d 100644 --- a/src/main/java/net/minecraftforge/client/model/data/ModelData.java +++ b/src/main/java/net/minecraftforge/client/model/data/ModelData.java @@ -6,7 +6,6 @@ package net.minecraftforge.client.model.data; import com.google.common.base.Preconditions; -import net.minecraft.client.renderer.block.model.BlockModelPart; import net.minecraft.core.Direction; import net.minecraft.world.level.block.entity.BlockEntity; import org.jetbrains.annotations.Contract; diff --git a/src/main/java/net/minecraftforge/client/model/data/ModelDataManager.java b/src/main/java/net/minecraftforge/client/model/data/ModelDataManager.java index 91d8719158..65ccf9fa46 100644 --- a/src/main/java/net/minecraftforge/client/model/data/ModelDataManager.java +++ b/src/main/java/net/minecraftforge/client/model/data/ModelDataManager.java @@ -44,7 +44,7 @@ public class ModelDataManager { public void requestRefresh(@NotNull BlockEntity blockEntity) { Preconditions.checkNotNull(blockEntity, "Block entity must not be null"); - needModelDataRefresh.computeIfAbsent(new ChunkPos(blockEntity.getBlockPos()), $ -> Collections.synchronizedSet(new HashSet<>())) + needModelDataRefresh.computeIfAbsent(ChunkPos.containing(blockEntity.getBlockPos()), $ -> Collections.synchronizedSet(new HashSet<>())) .add(blockEntity.getBlockPos()); } @@ -64,7 +64,12 @@ public class ModelDataManager { } public @Nullable ModelData getAt(BlockPos pos) { - return getAt(new ChunkPos(pos)).get(pos); + return getAt(ChunkPos.containing(pos)).get(pos); + } + + public ModelData getAtOrEmpty(double x, double y, double z) { + var ret = getAt(BlockPos.containing(x, y, z)); + return ret == null ? ModelData.EMPTY : ret; } public ModelData getAtOrEmpty(BlockPos pos) { diff --git a/src/main/java/net/minecraftforge/client/model/data/MultipartModelData.java b/src/main/java/net/minecraftforge/client/model/data/MultipartModelData.java index e237020272..fc11b4c04f 100644 --- a/src/main/java/net/minecraftforge/client/model/data/MultipartModelData.java +++ b/src/main/java/net/minecraftforge/client/model/data/MultipartModelData.java @@ -5,26 +5,24 @@ package net.minecraftforge.client.model.data; -import net.minecraft.client.renderer.block.model.BlockModelPart; import org.jetbrains.annotations.Nullable; +import net.minecraft.client.renderer.block.dispatch.BlockStateModelPart; + import java.util.IdentityHashMap; import java.util.Map; -public class MultipartModelData -{ +public class MultipartModelData { public static final ModelProperty PROPERTY = new ModelProperty<>(); - private final Map partData; + private final Map partData; - private MultipartModelData(Map partData) - { + private MultipartModelData(Map partData) { this.partData = partData; } @Nullable - public ModelData get(BlockModelPart model) - { + public ModelData get(BlockStateModelPart model) { return partData.get(model); } @@ -35,8 +33,7 @@ public class MultipartModelData * @param model The model to get data for * @return The data for the part, or the one passed in if not found */ - public static ModelData resolve(ModelData modelData, BlockModelPart model) - { + public static ModelData resolve(ModelData modelData, BlockStateModelPart model) { var multipartData = modelData.get(PROPERTY); if (multipartData == null) return modelData; @@ -44,23 +41,19 @@ public class MultipartModelData return partData != null ? partData : modelData; } - public static Builder builder() - { + public static Builder builder() { return new Builder(); } - public static final class Builder - { - private final Map partData = new IdentityHashMap<>(); + public static final class Builder { + private final Map partData = new IdentityHashMap<>(); - public Builder with(BlockModelPart model, ModelData data) - { + public Builder with(BlockStateModelPart model, ModelData data) { partData.put(model, data); return this; } - public MultipartModelData build() - { + public MultipartModelData build() { return new MultipartModelData(partData); } } diff --git a/src/main/java/net/minecraftforge/client/model/geometry/IGeometryBakingContext.java b/src/main/java/net/minecraftforge/client/model/geometry/IGeometryBakingContext.java index 942e9b530d..3f9ee48087 100644 --- a/src/main/java/net/minecraftforge/client/model/geometry/IGeometryBakingContext.java +++ b/src/main/java/net/minecraftforge/client/model/geometry/IGeometryBakingContext.java @@ -6,8 +6,8 @@ package net.minecraftforge.client.model.geometry; import com.mojang.math.Transformation; -import net.minecraft.client.renderer.block.model.ItemTransforms; -import net.minecraft.client.resources.model.Material; + +import net.minecraft.client.resources.model.cuboid.ItemTransforms; import net.minecraft.resources.Identifier; import net.minecraftforge.client.NamedRenderTypeManager; import net.minecraftforge.client.RenderTypeGroup; diff --git a/src/main/java/net/minecraftforge/client/model/geometry/IGeometryLoader.java b/src/main/java/net/minecraftforge/client/model/geometry/IGeometryLoader.java index bd86730144..edcd2b7075 100644 --- a/src/main/java/net/minecraftforge/client/model/geometry/IGeometryLoader.java +++ b/src/main/java/net/minecraftforge/client/model/geometry/IGeometryLoader.java @@ -9,7 +9,7 @@ import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; -import net.minecraft.client.resources.model.UnbakedGeometry; +import net.minecraft.client.resources.model.geometry.UnbakedGeometry; import net.minecraft.server.packs.resources.ResourceManagerReloadListener; import net.minecraftforge.client.event.ModelEvent.RegisterGeometryLoaders; import net.minecraftforge.client.event.RegisterClientReloadListenersEvent; diff --git a/src/main/java/net/minecraftforge/client/model/geometry/IUnbakedGeometry.java b/src/main/java/net/minecraftforge/client/model/geometry/IUnbakedGeometry.java deleted file mode 100644 index f849d41281..0000000000 --- a/src/main/java/net/minecraftforge/client/model/geometry/IUnbakedGeometry.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) Forge Development LLC and contributors - * SPDX-License-Identifier: LGPL-2.1-only - */ - -package net.minecraftforge.client.model.geometry; - -import java.util.Set; - -import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.TextureSlots; -import net.minecraft.client.renderer.block.model.BlockModelPart; -import net.minecraft.client.resources.model.ModelBaker; -import net.minecraft.client.resources.model.ModelState; -import net.minecraft.client.resources.model.ResolvableModel; -import net.minecraft.client.resources.model.UnbakedModel; - -/** - * General interface for any model that can be baked, superset of vanilla {@link UnbakedModel}. - *

- * Instances of this class are usually created via {@link IGeometryLoader}. - * - * @see IGeometryLoader - * @see IGeometryBakingContext - */ -public interface IUnbakedGeometry> { - BlockModelPart bake(IGeometryBakingContext context, ModelBaker baker, TextureSlots spriteGetter, ModelState modelState); - - /** - * Resolve parents of nested {@link BlockModel}s which are later used in - * {@link IUnbakedGeometry#bake(IGeometryBakingContext, ModelBaker, TextureSlots, ModelState)} - * via {@link BlockModel#resolveParents(Function)} - */ - default void resolveDependencies(ResolvableModel.Resolver resolver, IGeometryBakingContext context) { } - - /** - * {@return a set of all the components whose visibility may be configured via {@link IGeometryBakingContext}} - */ - default Set getConfigurableComponentNames() { - return Set.of(); - } -} diff --git a/src/main/java/net/minecraftforge/client/model/geometry/ModelContext.java b/src/main/java/net/minecraftforge/client/model/geometry/ModelContext.java index e11b5c8040..6b590baeeb 100644 --- a/src/main/java/net/minecraftforge/client/model/geometry/ModelContext.java +++ b/src/main/java/net/minecraftforge/client/model/geometry/ModelContext.java @@ -10,10 +10,10 @@ import org.jetbrains.annotations.Nullable; import com.mojang.math.Transformation; -import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.resources.model.ModelDiscovery.ModelWrapper; import net.minecraft.client.resources.model.ResolvedModel; +import net.minecraft.client.resources.model.cuboid.CuboidModel; +import net.minecraft.client.resources.model.cuboid.ItemTransforms; import net.minecraft.resources.Identifier; import net.minecraftforge.client.model.ForgeBlockModelData; @@ -29,11 +29,11 @@ public record ModelContext( } private static ForgeBlockModelData makeData(ResolvedModel self, ResolvedModel parent) { - var data = self.wrapped() instanceof BlockModel block ? block.forgeData() : null; + var data = self.wrapped() instanceof CuboidModel block ? block.forgeData() : null; var p = parent; while (p != null && (data == null || !data.full())) { - if (p.wrapped() instanceof BlockModel block) { + if (p.wrapped() instanceof CuboidModel block) { if (data == null) data = block.forgeData(); else @@ -72,7 +72,7 @@ public record ModelContext( @Override public Transformation getRootTransform() { - return data == null ? Transformation.identity() : data.transform().orElse(Transformation.identity()); + return data == null ? Transformation.IDENTITY : data.transform().orElse(Transformation.IDENTITY); } @Override diff --git a/src/main/java/net/minecraftforge/client/model/geometry/StandaloneGeometryBakingContext.java b/src/main/java/net/minecraftforge/client/model/geometry/StandaloneGeometryBakingContext.java index d72cbb8acf..751f0215e8 100644 --- a/src/main/java/net/minecraftforge/client/model/geometry/StandaloneGeometryBakingContext.java +++ b/src/main/java/net/minecraftforge/client/model/geometry/StandaloneGeometryBakingContext.java @@ -7,7 +7,7 @@ package net.minecraftforge.client.model.geometry; import com.mojang.math.Transformation; import it.unimi.dsi.fastutil.objects.Object2BooleanMap; -import net.minecraft.client.renderer.block.model.ItemTransforms; +import net.minecraft.client.resources.model.cuboid.ItemTransforms; import net.minecraft.resources.Identifier; import org.jetbrains.annotations.Nullable; @@ -115,7 +115,7 @@ public class StandaloneGeometryBakingContext implements IGeometryBakingContext { private boolean useBlockLight = true; private boolean useAmbientOcclusion = true; private ItemTransforms transforms = ItemTransforms.NO_TRANSFORMS; - private Transformation rootTransform = Transformation.identity(); + private Transformation rootTransform = Transformation.IDENTITY; @Nullable private Identifier renderTypeHint; @Nullable diff --git a/src/main/java/net/minecraftforge/client/model/geometry/UnbakedGeometryHelper.java b/src/main/java/net/minecraftforge/client/model/geometry/UnbakedGeometryHelper.java index e8c3327210..bd80bcb1aa 100644 --- a/src/main/java/net/minecraftforge/client/model/geometry/UnbakedGeometryHelper.java +++ b/src/main/java/net/minecraftforge/client/model/geometry/UnbakedGeometryHelper.java @@ -7,21 +7,16 @@ package net.minecraftforge.client.model.geometry; import com.mojang.math.Quadrant; import com.mojang.math.Transformation; -import net.minecraft.util.Util; -import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.client.renderer.block.model.BlockElement; -import net.minecraft.client.renderer.block.model.BlockElementFace; -import net.minecraft.client.renderer.block.model.FaceBakery; -import net.minecraft.client.renderer.block.model.ItemModelGenerator; -import net.minecraft.client.renderer.block.model.TextureSlots; +import net.minecraft.client.renderer.block.dispatch.ModelState; import net.minecraft.client.renderer.texture.MissingTextureAtlasSprite; -import net.minecraft.client.renderer.texture.SpriteContents; import net.minecraft.client.renderer.texture.TextureAtlas; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.resources.model.Material; import net.minecraft.client.resources.model.ModelBaker; -import net.minecraft.client.resources.model.ModelState; -import net.minecraft.client.resources.model.QuadCollection; +import net.minecraft.client.resources.model.cuboid.FaceBakery; +import net.minecraft.client.resources.model.cuboid.ItemModelGenerator; +import net.minecraft.client.resources.model.geometry.BakedQuad; +import net.minecraft.client.resources.model.geometry.QuadCollection; +import net.minecraft.client.resources.model.sprite.Material; +import net.minecraft.client.resources.model.sprite.TextureSlots; import net.minecraft.core.Direction; import net.minecraft.resources.Identifier; import net.minecraftforge.client.model.SimpleModelState; @@ -31,8 +26,6 @@ import org.jetbrains.annotations.Nullable; import org.joml.Vector3f; import java.util.BitSet; -import java.util.List; -import java.util.function.Function; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -85,25 +78,20 @@ public class UnbakedGeometryHelper { } /** - * Creates a list of {@linkplain BlockElement block elements} in the shape of the specified sprite contents. - * These can later be baked using the same, or another texture. - *

- * The {@link Direction#NORTH} and {@link Direction#SOUTH} faces take up the whole surface. + * Builds the model who's {@link Direction#NORTH} and {@link Direction#SOUTH} faces take up only the pixels the texture uses. + * + * This is basically ItemModelGenrator#bakeExtrudedSprite except for the front faces are not spread across the entire side + * + * Takes in a template MaterialInfo for the geometry, and a separate one to actually apply the texture from */ - public static List createUnbakedItemElements(int layerIndex, SpriteContents spriteContents) { - return ItemModelGenerator.processFrames(layerIndex, "layer" + layerIndex, spriteContents); - } - - /** - * Creates a list of {@linkplain BlockElement block elements} in the shape of the specified sprite contents. - * These can later be baked using the same, or another texture. - *

- * The {@link Direction#NORTH} and {@link Direction#SOUTH} faces take up only the pixels the texture uses. - */ - public static List createUnbakedItemMaskElements(int layerIndex, SpriteContents spriteContents) { - var elements = createUnbakedItemElements(layerIndex, spriteContents); - elements.remove(0); // Remove north and south faces - + public static void bakeMaskedSprite( + final QuadCollection.Builder builder, + final ModelBaker.Interner interner, + final ModelState state, + final BakedQuad.MaterialInfo texture, + final BakedQuad.MaterialInfo template + ) { + var spriteContents = template.sprite().contents(); int width = spriteContents.width(), height = spriteContents.height(); var bits = new BitSet(width * height); @@ -140,56 +128,26 @@ public class UnbakedGeometryHelper { for (int j = y; j < yEnd; j++) bits.clear(i + j * width); + var from = new Vector3f(16 * xStart / (float) width, 16 - 16 * yEnd / (float) height, 7.5F); + var to = new Vector3f(16 * x / (float) width, 16 - 16 * y / (float) height, 8.5F); + // Create element - elements.add(new BlockElement( - new Vector3f(16 * xStart / (float) width, 16 - 16 * yEnd / (float) height, 7.5F), - new Vector3f(16 * x / (float) width, 16 - 16 * y / (float) height, 8.5F), - Util.makeEnumMap(Direction.class, dir -> new BlockElementFace(dir, layerIndex, "layer" + layerIndex, new BlockElementFace.UVs(0F, 0F, 16F, 16F), Quadrant.R0)) - )); + builder.addUnculledFace(FaceBakery.bakeQuad(interner, from, to, ItemModelGenerator.SOUTH_FACE_UVS, Quadrant.R0, texture, Direction.SOUTH, state, null)); + builder.addUnculledFace(FaceBakery.bakeQuad(interner, from, to, ItemModelGenerator.NORTH_FACE_UVS, Quadrant.R0, texture, Direction.NORTH, state, null)); // Reset xStart xStart = -1; } } } - return elements; - } - /** - * Bakes a list of {@linkplain BlockElement block elements} and returns a {@link QuadCollection}. - */ - public static QuadCollection bakeElements(ModelBaker.PartCache cache, List elements, Function spriteGetter, ModelState modelState) { - var builder = new QuadCollection.Builder(); - bakeElements(cache, elements, spriteGetter, modelState, builder); - return builder.build(); - } - - /** - * Adds a list of {@linkplain BlockElement block elements} int a {@link QuadCollection.Builder}. - */ - public static void bakeElements(ModelBaker.PartCache cache, List elements, Function spriteGetter, ModelState modelState, QuadCollection.Builder builder) { - for (var element : elements) { - element.faces().forEach((side, face) -> { - var sprite = spriteGetter.apply(getMaterial(face.texture())); - var quad = bakeElementFace(cache, element, face, sprite, side, modelState, element.lightEmission()); - if (face.cullForDirection() == null) - builder.addUnculledFace(quad); - else - builder.addCulledFace(Direction.rotate(modelState.transformation().getMatrix(), face.cullForDirection()), quad); - }); - } + // Re-use vanilla code to create the side geometry + ItemModelGenerator.bakeSideFaces(builder, interner, state, texture, template); } @SuppressWarnings("deprecation") private static Material getMaterial(String texture) { - return new Material(TextureAtlas.LOCATION_BLOCKS, Identifier.parse(texture)); - } - - /** - * Turns a single {@link BlockElementFace} into a {@link BakedQuad}. - */ - public static BakedQuad bakeElementFace(ModelBaker.PartCache cache, BlockElement element, BlockElementFace face, TextureAtlasSprite sprite, Direction direction, ModelState state, int lightEmission) { - return FaceBakery.bakeQuad(cache, element.from(), element.to(), face, sprite, direction, state, element.rotation(), element.shade(), lightEmission); + return new Material(Identifier.parse(texture)); } /** diff --git a/src/main/java/net/minecraftforge/client/model/obj/ObjLoader.java b/src/main/java/net/minecraftforge/client/model/obj/ObjLoader.java index cda8c627a7..9a8bc7b1ee 100644 --- a/src/main/java/net/minecraftforge/client/model/obj/ObjLoader.java +++ b/src/main/java/net/minecraftforge/client/model/obj/ObjLoader.java @@ -9,12 +9,12 @@ import com.google.common.collect.Maps; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonObject; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.block.model.TextureSlots; +import net.minecraft.client.renderer.block.dispatch.ModelState; import net.minecraft.client.resources.model.ModelBaker; import net.minecraft.client.resources.model.ModelDebugName; -import net.minecraft.client.resources.model.ModelState; -import net.minecraft.client.resources.model.QuadCollection; -import net.minecraft.client.resources.model.UnbakedGeometry; +import net.minecraft.client.resources.model.geometry.QuadCollection; +import net.minecraft.client.resources.model.geometry.UnbakedGeometry; +import net.minecraft.client.resources.model.sprite.TextureSlots; import net.minecraft.resources.Identifier; import net.minecraft.server.packs.resources.Resource; import net.minecraft.server.packs.resources.ResourceManager; diff --git a/src/main/java/net/minecraftforge/client/model/obj/ObjModel.java b/src/main/java/net/minecraftforge/client/model/obj/ObjModel.java index 3ca61f1d06..8f0bbfb95d 100644 --- a/src/main/java/net/minecraftforge/client/model/obj/ObjModel.java +++ b/src/main/java/net/minecraftforge/client/model/obj/ObjModel.java @@ -9,17 +9,18 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.mojang.math.Transformation; -import net.minecraft.client.renderer.LightTexture; -import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.client.renderer.block.model.TextureSlots; + +import net.minecraft.client.renderer.block.dispatch.ModelState; import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.resources.model.Material; import net.minecraft.client.resources.model.ModelBaker; import net.minecraft.client.resources.model.ModelDebugName; -import net.minecraft.client.resources.model.ModelState; -import net.minecraft.client.resources.model.QuadCollection; +import net.minecraft.client.resources.model.geometry.BakedQuad; +import net.minecraft.client.resources.model.geometry.QuadCollection; +import net.minecraft.client.resources.model.sprite.Material; +import net.minecraft.client.resources.model.sprite.TextureSlots; import net.minecraft.core.Direction; import net.minecraft.resources.Identifier; +import net.minecraft.util.LightCoordsUtil; import net.minecraft.util.Mth; import net.minecraft.world.phys.Vec2; import net.minecraftforge.client.model.geometry.IGeometryBakingContext; @@ -314,7 +315,7 @@ public class ObjModel { int uv2 = 0; if (emissiveAmbient) { int fakeLight = (int) ((ambientColor.x() + ambientColor.y() + ambientColor.z()) * 15 / 3.0f); - uv2 = LightTexture.pack(fakeLight, fakeLight); + uv2 = LightCoordsUtil.pack(fakeLight, fakeLight); quadBaker.setShade(fakeLight == 0 && shadeQuads); } else quadBaker.setShade(shadeQuads); @@ -523,16 +524,16 @@ public class ObjModel { return; var material = UnbakedGeometryHelper.resolveDirtyMaterial(mat.diffuseColorMap, slots); - var texture = baker.sprites().get(material, name); + var texture = baker.materials().get(material, name); int tintIndex = mat.diffuseTintIndex; Vector4f colorTint = mat.diffuseColor; - // TODO: [Forge][Rendering] Models contains the transforms so we shouldnt care about them here. + // TODO: [Forge][Rendering] Models contains the transforms so we shouldn't care about them here. //var rootTransform = context.getRootTransform(); //var transform = rootTransform.isIdentity() ? modelTransform.transformation() : modelTransform.transformation().compose(rootTransform); - var transform = Transformation.identity(); + var transform = Transformation.IDENTITY; for (int[][] face : faces) { - Pair quad = makeQuad(face, tintIndex, colorTint, mat.ambientColor, texture, transform); + Pair quad = makeQuad(face, tintIndex, colorTint, mat.ambientColor, texture.sprite(), transform); if (quad.getRight() == null) builder.addUnculledFace(quad.getLeft()); else @@ -550,11 +551,11 @@ public class ObjModel { final List quads = new ArrayList<>(); for (var face : this.faces) { - var pair = makeQuad(face, tintIndex, colorTint, mat.ambientColor, UnitTextureAtlasSprite.INSTANCE, Transformation.identity()); + var pair = makeQuad(face, tintIndex, colorTint, mat.ambientColor, UnitTextureAtlasSprite.INSTANCE, Transformation.IDENTITY); quads.add(pair.getLeft()); } - Identifier textureLocation = UnbakedGeometryHelper.resolveDirtyMaterial(mat.diffuseColorMap, textures).texture(); + Identifier textureLocation = UnbakedGeometryHelper.resolveDirtyMaterial(mat.diffuseColorMap, textures).sprite(); Identifier texturePath = textureLocation.withPath(p -> "textures/" + p + ".png"); builder.addMesh(texturePath, quads); diff --git a/src/main/java/net/minecraftforge/client/model/pipeline/BakedQuadBuilder.java b/src/main/java/net/minecraftforge/client/model/pipeline/BakedQuadBuilder.java index a3cbb69015..1c28878184 100644 --- a/src/main/java/net/minecraftforge/client/model/pipeline/BakedQuadBuilder.java +++ b/src/main/java/net/minecraftforge/client/model/pipeline/BakedQuadBuilder.java @@ -8,8 +8,10 @@ package net.minecraftforge.client.model.pipeline; import com.google.common.base.Preconditions; import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.model.geom.builders.UVPair; -import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.resources.model.geometry.BakedQuad; +import net.minecraft.client.resources.model.geometry.BakedQuad.MaterialInfo; +import net.minecraft.client.resources.model.sprite.Material; import net.minecraft.core.Direction; import net.minecraftforge.client.textures.UnitTextureAtlasSprite; @@ -35,7 +37,6 @@ public class BakedQuadBuilder implements VertexConsumer { private Direction direction = Direction.DOWN; private TextureAtlasSprite sprite = UnitTextureAtlasSprite.INSTANCE; private boolean shade; - private boolean hasAmbientOcclusion; private int lightEmission; public BakedQuadBuilder(Consumer quadConsumer) { @@ -113,7 +114,12 @@ public class BakedQuadBuilder implements VertexConsumer { BakedQuad quad = new BakedQuad( this.positions[0], this.positions[1], this.positions[2], this.positions[3], this.uvs[0], this.uvs[1], this.uvs[2], this.uvs[3], - tintIndex, direction, sprite, shade, lightEmission, hasAmbientOcclusion + direction, + MaterialInfo.of( + new Material.Baked(sprite, false), + sprite.transparency(), + tintIndex, shade, lightEmission + ) ); setup(); // We have a full quad, pass it to the consumer and reset @@ -137,10 +143,6 @@ public class BakedQuadBuilder implements VertexConsumer { this.shade = shade; } - public void setHasAmbientOcclusion(boolean hasAmbientOcclusion) { - this.hasAmbientOcclusion = hasAmbientOcclusion; - } - public void setLightEmission(int value) { this.lightEmission = value; } diff --git a/src/main/java/net/minecraftforge/client/model/renderable/BakedModelRenderable.java b/src/main/java/net/minecraftforge/client/model/renderable/BakedModelRenderable.java index a20e4473f5..9150aa121a 100644 --- a/src/main/java/net/minecraftforge/client/model/renderable/BakedModelRenderable.java +++ b/src/main/java/net/minecraftforge/client/model/renderable/BakedModelRenderable.java @@ -6,10 +6,12 @@ package net.minecraftforge.client.model.renderable; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.QuadInstance; + import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.block.model.BlockModelPart; -import net.minecraft.client.renderer.block.model.BlockStateModel; +import net.minecraft.client.renderer.block.dispatch.BlockStateModel; +import net.minecraft.client.renderer.block.dispatch.BlockStateModelPart; import net.minecraft.client.renderer.texture.TextureAtlas; import net.minecraft.core.Direction; import net.minecraft.util.RandomSource; @@ -38,7 +40,7 @@ public class BakedModelRenderable implements IRenderable(); - model.collectParts(randomSource, parts, context.data(), null); + var parts = new ArrayList(); + model.collectParts(randomSource, parts, context.data()); + + // Not sure how we're suppoed to put the tint index, that comes from the Material + var quadInstance = new QuadInstance(); + quadInstance.setLightCoords(lightmap); + quadInstance.setOverlayCoords(overlay); + for (var part : parts) { for (var direction : Direction.valuesView()) { for (var quad : part.getQuads(direction)) { - buffer.putBulkData(poseStack.last(), quad, tint.x(), tint.y(), tint.z(), tint.w(), lightmap, overlay); + buffer.putBakedQuad(poseStack.last(), quad, quadInstance); + //buffer.putBulkData(poseStack.last(), quad, tint.x(), tint.y(), tint.z(), tint.w(), lightmap, overlay); } } } diff --git a/src/main/java/net/minecraftforge/client/model/renderable/CompositeRenderable.java b/src/main/java/net/minecraftforge/client/model/renderable/CompositeRenderable.java index bf706f45f2..55a678e7b7 100644 --- a/src/main/java/net/minecraftforge/client/model/renderable/CompositeRenderable.java +++ b/src/main/java/net/minecraftforge/client/model/renderable/CompositeRenderable.java @@ -7,8 +7,10 @@ package net.minecraftforge.client.model.renderable; import com.google.common.collect.ImmutableMap; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.QuadInstance; + import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.resources.model.geometry.BakedQuad; import net.minecraft.resources.Identifier; import org.jetbrains.annotations.Nullable; import org.joml.Matrix4f; @@ -68,6 +70,7 @@ public class CompositeRenderable implements IRenderable quads = new ArrayList<>(); + private final QuadInstance quadInstance = new QuadInstance(); public Mesh(Identifier texture) { this.texture = texture; @@ -75,8 +78,11 @@ public class CompositeRenderable implements IRenderable>> customWaterHandler = new WeakHashMap<>(); private static final Logger LOGGER = LogManager.getLogger(); @@ -44,8 +43,7 @@ public class FarmlandWaterManager * @return The ticket for your requested region. */ @SuppressWarnings("unchecked") - public static> T addCustomTicket(Level level, T ticket, ChunkPos masterChunk, ChunkPos... additionalChunks) - { + public static> T addCustomTicket(Level level, T ticket, ChunkPos masterChunk, ChunkPos... additionalChunks) { Preconditions.checkArgument(!level.isClientSide(), "Water region is only determined server-side"); Map> ticketMap = customWaterHandler.computeIfAbsent(level, id -> new MapMaker().weakValues().makeMap()); ChunkTicketManager[] additionalTickets = new ChunkTicketManager[additionalChunks.length]; @@ -67,28 +65,23 @@ public class FarmlandWaterManager * @param aabb The region where blocks should be watered * @return The ticket for your requested region. */ - public static AABBTicket addAABBTicket(Level level, AABB aabb) - { + public static AABBTicket addAABBTicket(Level level, AABB aabb) { if (DEBUG) LOGGER.info("FarmlandWaterManager: New AABBTicket, aabb={}", aabb); //First calculate all chunks the aabb is in ChunkPos leftUp = new ChunkPos(((int) aabb.minX) >> 4, ((int) aabb.minZ) >> 4); ChunkPos rightDown = new ChunkPos(((int) aabb.maxX) >> 4, ((int) aabb.maxZ) >> 4); Set posSet = new HashSet<>(); - for (int x = leftUp.x; x <= rightDown.x; x++) - { - for (int z = leftUp.z; z <= rightDown.z; z++) - { + for (int x = leftUp.x(); x <= rightDown.x(); x++) { + for (int z = leftUp.z(); z <= rightDown.z(); z++) { posSet.add(new ChunkPos(x, z)); } } ChunkPos masterPos = null; double masterDistance = Double.MAX_VALUE; - for (ChunkPos pos : posSet) //Find the chunkPos with the lowest distance to the center and choose it as the master pos - { + for (var pos : posSet) { //Find the chunkPos with the lowest distance to the center and choose it as the master pos double distToCenter = getDistanceSq(pos, aabb.getCenter()); - if (distToCenter < masterDistance) - { + if (distToCenter < masterDistance) { if (DEBUG) LOGGER.info("FarmlandWaterManager: New better pos then {}: {}, prev dist {}, new dist {}", masterPos, pos, masterDistance, distToCenter); masterPos = pos; @@ -101,11 +94,10 @@ public class FarmlandWaterManager return addCustomTicket(level, new AABBTicket(aabb), masterPos, posSet.toArray(new ChunkPos[0])); } - private static double getDistanceSq(ChunkPos pos, Vec3 vec3d) - { + private static double getDistanceSq(ChunkPos pos, Vec3 vec3d) { //See ChunkPos#getDistanceSq - double d0 = (double)(pos.x * 16 + 8); - double d1 = (double)(pos.z * 16 + 8); + double d0 = (double)(pos.x() * 16 + 8); + double d1 = (double)(pos.z() * 16 + 8); double d2 = d0 - vec3d.x; double d3 = d1 - vec3d.z; return d2 * d2 + d3 * d3; @@ -115,11 +107,9 @@ public class FarmlandWaterManager * Tests if a block is in a region that is watered by blocks. This does not check vanilla water, see {@code net.minecraft.level.level.block.FarmBlock#isNearWater(LevelReader, BlockPos)} * @return true if there is a ticket with an AABB that includes your block */ - public static boolean hasBlockWaterTicket(LevelReader level, BlockPos pos) - { + public static boolean hasBlockWaterTicket(LevelReader level, BlockPos pos) { ChunkTicketManager ticketManager = getTicketManager(new ChunkPos(pos.getX() >> 4, pos.getZ() >> 4), level); - if (ticketManager != null) - { + if (ticketManager != null) { Vec3 posAsVec3d = new Vec3(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); for (SimpleTicket ticket : ticketManager.getTickets()) { if (ticket.matches(posAsVec3d)) @@ -129,11 +119,9 @@ public class FarmlandWaterManager return false; } - static void removeTickets(ChunkAccess chunk) - { + static void removeTickets(ChunkAccess chunk) { ChunkTicketManager ticketManager = getTicketManager(chunk.getPos(), chunk.getWorldForge()); - if (ticketManager != null) - { + if (ticketManager != null) { if (DEBUG) LOGGER.info("FarmlandWaterManager: got tickets {} at {} before", ticketManager.getTickets().size(), ticketManager.pos); ticketManager.getTickets().removeIf(next -> next.unload(ticketManager)); //remove if this is the master manager of the ticket @@ -146,9 +134,7 @@ public class FarmlandWaterManager Preconditions.checkArgument(!level.isClientSide(), "Water region is only determined server-side"); Map> ticketMap = customWaterHandler.get(level); if (ticketMap == null) - { return null; - } return ticketMap.get(pos); } } diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index e44f8c4a8c..fa78b156d0 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -51,6 +51,7 @@ import net.minecraft.core.HolderSet.Named; import net.minecraft.core.component.DataComponentMap; import net.minecraft.core.component.DataComponents; import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; import net.minecraft.network.Connection; import net.minecraft.network.FriendlyByteBuf; @@ -191,6 +192,7 @@ import net.minecraft.world.level.block.state.pattern.BlockInWorld; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; +import net.minecraft.world.level.levelgen.structure.templatesystem.loader.TemplateSource; import org.apache.maven.artifact.versioning.ArtifactVersion; import org.apache.maven.artifact.versioning.DefaultArtifactVersion; @@ -226,13 +228,14 @@ public final class ForgeHooks { return player.hasCorrectToolForDrops(state); } - public static Brain onLivingMakeBrain(LivingEntity entity, Brain originalBrain, Dynamic dynamic) { + public static Brain onLivingMakeBrain(final LivingEntity entity, final Brain originalBrain, final Brain.Packed packedBrain) { if (!LivingMakeBrainEvent.BUS.hasListeners()) return originalBrain; - BrainBuilder brainBuilder = originalBrain.createBuilder(); + @SuppressWarnings("unchecked") + var brainBuilder = (BrainBuilder)originalBrain.createBuilder(); LivingMakeBrainEvent.BUS.post(new LivingMakeBrainEvent(entity, brainBuilder)); - return brainBuilder.makeBrain(dynamic); + return brainBuilder.makeBrain(entity, packedBrain); } public static boolean onLivingAttack(LivingEntity entity, DamageSource src, float amount) { @@ -257,13 +260,6 @@ public final class ForgeHooks { return LivingDamageEvent.BUS.post(event) ? 0 : event.getAmount(); } - public static InteractionResult onInteractEntityAt(Entity entity, Player player, Vec3 vec3d, InteractionHand hand) { - var ret = new PlayerInteractEvent.EntityInteractSpecific(player, hand, entity, vec3d); - if (PlayerInteractEvent.EntityInteractSpecific.BUS.post(ret)) - return ret.getCancellationResult(); - return entity.interactAt(player, vec3d, hand); - } - public static int getLootingLevel(Entity target, @Nullable Entity killer, @Nullable DamageSource cause) { int looting = 0; if (killer instanceof LivingEntity living) @@ -412,7 +408,7 @@ public final class ForgeHooks { var lookup = level.holderLookup(Registries.ENCHANTMENT); int fortuneLevel = EnchantmentHelper.getItemEnchantmentLevel(lookup.getOrThrow(Enchantments.FORTUNE), stack); int silkTouchLevel = EnchantmentHelper.getItemEnchantmentLevel(lookup.getOrThrow(Enchantments.SILK_TOUCH), stack); - int exp = state.getExpDrop(level, level.random, pos, fortuneLevel, silkTouchLevel); + int exp = state.getExpDrop(level, level.getRandom(), pos, fortuneLevel, silkTouchLevel); if (exp > 0) state.getBlock().popExperience(level, pos, exp); } @@ -563,8 +559,8 @@ public final class ForgeHooks { @NotNull public static ItemStack getCraftingRemainingItem(@NotNull ItemStack stack) { var remainder = stack.getCraftingRemainder(); - if (!remainder.isEmpty()) { - stack = remainder; + if (remainder != null) { + stack = remainder.create(); if (!stack.isEmpty() && stack.isDamageableItem() && stack.getDamageValue() > stack.getMaxDamage()) { ForgeEventFactory.onPlayerDestroyItem(CRAFTING_PLAYER.get(), stack, (EquipmentSlot)null); return ItemStack.EMPTY; @@ -809,7 +805,7 @@ public final class ForgeHooks { public static void writeAdditionalLevelSaveData(WorldData worldData, CompoundTag levelTag) { CompoundTag fmlData = new CompoundTag(); ListTag modList = new ListTag(); - ModList.get().getMods().forEach(mi -> { + ModList.getMods().forEach(mi -> { final CompoundTag mod = new CompoundTag(); mod.putString("ModId", mi.getModId()); mod.putString("ModVersion", MavenVersionStringHelper.artifactVersionToString(mi.getVersion())); @@ -854,7 +850,7 @@ public final class ForgeHooks { String modVersion = mod.getStringOr("ModVersion", null); final var previousVersion = new DefaultArtifactVersion(modVersion); - ModList.get().getModContainerById(modId).ifPresentOrElse(container -> { + ModList.getModContainerById(modId).ifPresentOrElse(container -> { final var loadingVersion = container.getModInfo().getVersion(); if (!loadingVersion.equals(previousVersion)) { // Enqueue mismatched versions for bulk event @@ -1019,9 +1015,10 @@ public final class ForgeHooks { @SuppressWarnings("deprecation") public static void onLivingBreathe(LivingEntity entity, int consumeAirAmount, int refillAirAmount) { // Check things that vanilla considers to be air - these will cause the air supply to be increased. - boolean isAir = entity.getEyeInFluidType().isAir() || entity.level().getBlockState(BlockPos.containing(entity.getX(), entity.getEyeY(), entity.getZ())).is(Blocks.BUBBLE_COLUMN); + var eyeFluid = entity.getEyeInFluidType(); + boolean isAir = eyeFluid == null || entity.level().getBlockState(BlockPos.containing(entity.getX(), entity.getEyeY(), entity.getZ())).is(Blocks.BUBBLE_COLUMN); // The following effects cause the entity to not drown, but do not cause the air supply to be increased. - boolean canBreathe = !entity.canDrownInFluidType(entity.getEyeInFluidType()) || MobEffectUtil.hasWaterBreathing(entity) || (entity instanceof Player player && player.getAbilities().invulnerable); + boolean canBreathe = !entity.canDrownInFluidType(eyeFluid) || MobEffectUtil.hasWaterBreathing(entity) || (entity instanceof Player player && player.getAbilities().invulnerable); var breatheEvent = ForgeEventFactory.onLivingBreathe(entity, isAir || canBreathe, consumeAirAmount, refillAirAmount, isAir); if (breatheEvent.canBreathe()) { if (breatheEvent.canRefillAir()) { @@ -1054,7 +1051,12 @@ public final class ForgeHooks { } } - public static void onCreativeModeTabBuildContents(CreativeModeTab tab, ResourceKey tabKey, CreativeModeTab.DisplayItemsGenerator originalGenerator, CreativeModeTab.ItemDisplayParameters params, CreativeModeTab.Output output) { + public static void onCreativeModeTabBuildContents(CreativeModeTab tab, CreativeModeTab.DisplayItemsGenerator originalGenerator, CreativeModeTab.ItemDisplayParameters params, CreativeModeTab.Output output) { + if (!BuildCreativeModeTabContentsEvent.BUS.hasListeners()) { + originalGenerator.accept(params, output); + return; + } + final var entries = new MutableHashedLinkedMap(ItemStackLinkedSet.TYPE_AND_TAG, (key, left, right) -> { //throw new IllegalStateException("Accidentally adding the same item stack twice " + key.getDisplayName().getString() + " to a Creative Mode Tab: " + tab.getDisplayName().getString()); @@ -1070,7 +1072,11 @@ public final class ForgeHooks { entries.put(stack, vis); }); - BuildCreativeModeTabContentsEvent.BUS.post(new BuildCreativeModeTabContentsEvent(tab, tabKey, params, entries)); + var key = BuiltInRegistries.CREATIVE_MODE_TAB + .getResourceKey(tab) + .orElseThrow(() -> new IllegalStateException("Unregistered creative tab: " + tab)); + + BuildCreativeModeTabContentsEvent.BUS.post(new BuildCreativeModeTabContentsEvent(tab, key, params, entries)); for (var entry : entries) output.accept(entry.getKey(), entry.getValue()); @@ -1132,7 +1138,7 @@ public final class ForgeHooks { public static void handleClientConfigurationComplete(Connection connection) { if (NetworkContext.get(connection).getType() == ConnectionType.VANILLA) { LOGGER.info("Connected to a vanilla server. Catching up missing behaviour."); - ConfigTracker.INSTANCE.loadDefaultServerConfigs(); + ConfigTracker.loadDefaultServerConfigs(); } else LOGGER.info("Connected to a modded server."); } @@ -1236,8 +1242,9 @@ public final class ForgeHooks { @Nullable public static DyeColor getDyeColorFromItemStack(ItemStack stack) { - if (stack.getItem() instanceof DyeItem dye) - return dye.getDyeColor(); + var comp = stack.getComponents().get(DataComponents.DYE); + if (comp != null) + return comp; for (int x = 0; x < DyeColor.BLACK.getId(); x++) { var color = DyeColor.byId(x); @@ -1271,8 +1278,22 @@ public final class ForgeHooks { * * This is useful for game tests that need a structure, but want to create the contents in code. */ - public static Optional createEmptyStructure(Identifier name) { - if (name== null || !"forge".equals(name.getNamespace())) + public static TemplateSource emptyStructureSource() { + return new TemplateSource(null, null) { + @Override + public Optional load(Identifier id) { + return createEmptyStructure(id); + } + + @Override + public Stream list() { + return Stream.empty(); + } + }; + } + + private static Optional createEmptyStructure(Identifier name) { + if (name == null || !"forge".equals(name.getNamespace())) return Optional.empty(); var match = EMPTY_SIZE_PATTERN.matcher(name.getPath()); diff --git a/src/main/java/net/minecraftforge/common/ForgeMod.java b/src/main/java/net/minecraftforge/common/ForgeMod.java index 107a08503e..6888b9102b 100644 --- a/src/main/java/net/minecraftforge/common/ForgeMod.java +++ b/src/main/java/net/minecraftforge/common/ForgeMod.java @@ -7,7 +7,6 @@ package net.minecraftforge.common; import net.minecraft.DetectedVersion; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BiomeColors; import net.minecraft.commands.synchronization.ArgumentTypeInfo; import net.minecraft.commands.synchronization.ArgumentTypeInfos; import net.minecraft.commands.synchronization.SingletonArgumentInfo; @@ -30,14 +29,13 @@ import net.minecraft.world.entity.ai.attributes.RangedAttribute; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.crafting.RecipeSerializer; -import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.item.Items; import net.minecraft.sounds.SoundEvent; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.pathfinder.PathType; -import net.minecraft.world.level.storage.loot.predicates.LootItemConditionType; +import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; import net.minecraft.world.phys.Vec3; import net.minecraftforge.client.extensions.common.IClientFluidTypeExtensions; import net.minecraftforge.common.data.ExistingFileHelper; @@ -63,7 +61,6 @@ import net.minecraftforge.common.world.NoneBiomeModifier; import net.minecraftforge.common.world.NoneStructureModifier; import net.minecraftforge.common.world.StructureModifier; import net.minecraftforge.event.network.GatherLoginConfigurationTasksEvent; -import net.minecraftforge.event.server.ServerAboutToStartEvent; import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.fluids.FluidType; import net.minecraftforge.fluids.ForgeFlowingFluid; @@ -110,16 +107,12 @@ import net.minecraftforge.common.crafting.ingredients.CompoundIngredient; import net.minecraftforge.common.crafting.ingredients.DifferenceIngredient; import net.minecraftforge.common.crafting.ingredients.IIngredientSerializer; import net.minecraftforge.common.crafting.ingredients.IntersectionIngredient; -import net.minecraftforge.common.crafting.ingredients.PartialNBTIngredient; -import net.minecraftforge.common.crafting.ingredients.StrictNBTIngredient; +import net.minecraftforge.common.crafting.ingredients.NBTIngredient; import net.minecraftforge.fml.common.Mod; import org.apache.logging.log4j.Marker; import org.apache.logging.log4j.MarkerManager; - import com.mojang.serialization.MapCodec; - import org.jetbrains.annotations.Nullable; - import java.lang.reflect.Method; import java.util.*; import java.util.concurrent.CompletableFuture; @@ -262,11 +255,6 @@ public class ForgeMod { public int getTintColor() { return 0xFF3F76E4; } - - @Override - public int getTintColor(FluidState state, BlockAndTintGetter getter, BlockPos pos) { - return BiomeColors.getAverageWaterColor(getter, pos) | 0xFF000000; - } }); } }); @@ -315,10 +303,10 @@ public class ForgeMod { } }); - private static final DeferredRegister LOOT_CONDITION_TYPES = deferred(Registries.LOOT_CONDITION_TYPE); + private static final DeferredRegister> LOOT_CONDITION_TYPES = deferred(Registries.LOOT_CONDITION_TYPE); static { - LOOT_CONDITION_TYPES.register("loot_table_id", () -> LootTableIdCondition.TYPE); - LOOT_CONDITION_TYPES.register("can_tool_perform_action", () -> CanToolPerformAction.TYPE); + LOOT_CONDITION_TYPES.register("loot_table_id", () -> LootTableIdCondition.CODEC); + LOOT_CONDITION_TYPES.register("can_tool_perform_action", () -> CanToolPerformAction.CODEC); } private static final DeferredRegister> CONDITION_SERIALIZERS = deferred(ForgeRegistries.Keys.CONDITION_SERIALIZERS); @@ -341,8 +329,7 @@ public class ForgeMod { private static final DeferredRegister> INGREDIENT_SERIALIZERS = deferred(ForgeRegistries.Keys.INGREDIENT_SERIALIZERS); static { INGREDIENT_SERIALIZERS.register("compound", () -> CompoundIngredient.SERIALIZER); - INGREDIENT_SERIALIZERS.register("nbt", () -> StrictNBTIngredient.SERIALIZER); - INGREDIENT_SERIALIZERS.register("partial_nbt", () -> PartialNBTIngredient.SERIALIZER); + INGREDIENT_SERIALIZERS.register("nbt", () -> NBTIngredient.SERIALIZER); INGREDIENT_SERIALIZERS.register("difference", () -> DifferenceIngredient.SERIALIZER); INGREDIENT_SERIALIZERS.register("intersection", () -> IntersectionIngredient.SERIALIZER); } @@ -412,7 +399,6 @@ public class ForgeMod { context.registerDisplayTest(IExtensionPoint.DisplayTest.IGNORE_ALL_VERSION); StartupMessageManager.addModMessage("Forge version "+ForgeVersion.getVersion()); - ServerAboutToStartEvent.BUS.addListener(VillagerTradingManager::loadTrades); ForgeInternalHandler.register(); GatherLoginConfigurationTasksEvent.BUS.addListener(ForgeNetworkConfigurationHandler::gatherInit); diff --git a/src/main/java/net/minecraftforge/common/ForgeStatesProvider.java b/src/main/java/net/minecraftforge/common/ForgeStatesProvider.java index d4bc1f0468..97a2789e32 100644 --- a/src/main/java/net/minecraftforge/common/ForgeStatesProvider.java +++ b/src/main/java/net/minecraftforge/common/ForgeStatesProvider.java @@ -29,7 +29,7 @@ public class ForgeStatesProvider implements IModStateProvider { } private static ModLoadingState gather(String name, ModLoadingState after, Runnable inline) { - return gather(name, after).withInline(ml -> inline.run()); + return gather(name, after).withInline(inline); } private static ModLoadingState.Builder complete(String name, ModLoadingState after) { @@ -37,7 +37,7 @@ public class ForgeStatesProvider implements IModStateProvider { } private static ModLoadingState complete(String name, ModLoadingState after, Runnable inline) { - return complete(name, after).withInline(ml -> inline.run()); + return complete(name, after).withInline(inline); } @Override diff --git a/src/main/java/net/minecraftforge/common/Tags.java b/src/main/java/net/minecraftforge/common/Tags.java index 6fc8d3e1cc..028f811a06 100644 --- a/src/main/java/net/minecraftforge/common/Tags.java +++ b/src/main/java/net/minecraftforge/common/Tags.java @@ -13,6 +13,7 @@ import net.minecraft.tags.FluidTags; import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.decoration.ItemFrame; import net.minecraft.world.entity.monster.EnderMan; import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.Item; @@ -52,71 +53,6 @@ public class Tags { public static final TagKey NEEDS_NETHERITE_TOOL = forgeTag("needs_netherite_tool"); public static final TagKey STORAGE_BLOCKS_AMETHYST = forgeTag("storage_blocks/amethyst"); public static final TagKey STORAGE_BLOCKS_QUARTZ = forgeTag("storage_blocks/quartz"); - - public static final TagKey CHESTS_ENDER = forgeTag("chests/ender"); - public static final TagKey CHESTS_TRAPPED = forgeTag("chests/trapped"); - public static final TagKey CHORUS_ADDITIONALLY_GROWS_ON = forgeTag("chorus_additionally_grows_on"); - public static final TagKey COBBLESTONE_NORMAL = forgeTag("cobblestone/normal"); - public static final TagKey COBBLESTONE_INFESTED = forgeTag("cobblestone/infested"); - public static final TagKey COBBLESTONE_MOSSY = forgeTag("cobblestone/mossy"); - public static final TagKey COBBLESTONE_DEEPSLATE = forgeTag("cobblestone/deepslate"); - public static final TagKey END_STONES = forgeTag("end_stones"); - public static final TagKey FENCE_GATES = forgeTag("fence_gates"); - public static final TagKey FENCE_GATES_WOODEN = forgeTag("fence_gates/wooden"); - public static final TagKey FENCES = forgeTag("fences"); - public static final TagKey FENCES_NETHER_BRICK = forgeTag("fences/nether_brick"); - public static final TagKey FENCES_WOODEN = forgeTag("fences/wooden"); - - public static final TagKey GRAVEL = forgeTag("gravel"); - public static final TagKey NETHERRACK = forgeTag("netherrack"); - /** - * Blocks which are often replaced by deepslate ores, i.e. the ores in the tag {@link #ORES_IN_GROUND_DEEPSLATE}, during world generation - */ - public static final TagKey ORE_BEARING_GROUND_DEEPSLATE = forgeTag("ore_bearing_ground/deepslate"); - /** - * Blocks which are often replaced by netherrack ores, i.e. the ores in the tag {@link #ORES_IN_GROUND_NETHERRACK}, during world generation - */ - public static final TagKey ORE_BEARING_GROUND_NETHERRACK = forgeTag("ore_bearing_ground/netherrack"); - /** - * Blocks which are often replaced by stone ores, i.e. the ores in the tag {@link #ORES_IN_GROUND_STONE}, during world generation - */ - public static final TagKey ORE_BEARING_GROUND_STONE = forgeTag("ore_bearing_ground/stone"); - /** - * Ores which on average result in more than one resource worth of materials - */ - public static final TagKey ORE_RATES_DENSE = forgeTag("ore_rates/dense"); - /** - * Ores which on average result in one resource worth of materials - */ - public static final TagKey ORE_RATES_SINGULAR = forgeTag("ore_rates/singular"); - /** - * Ores which on average result in less than one resource worth of materials - */ - public static final TagKey ORE_RATES_SPARSE = forgeTag("ore_rates/sparse"); - - public static final TagKey ORES_COAL = forgeTag("ores/coal"); - public static final TagKey ORES_COPPER = forgeTag("ores/copper"); - public static final TagKey ORES_DIAMOND = forgeTag("ores/diamond"); - public static final TagKey ORES_EMERALD = forgeTag("ores/emerald"); - public static final TagKey ORES_GOLD = forgeTag("ores/gold"); - public static final TagKey ORES_IRON = forgeTag("ores/iron"); - public static final TagKey ORES_LAPIS = forgeTag("ores/lapis"); - public static final TagKey ORES_REDSTONE = forgeTag("ores/redstone"); - /** - * Ores in deepslate (or in equivalent blocks in the tag {@link #ORE_BEARING_GROUND_DEEPSLATE}) which could logically use deepslate as recipe input or output - */ - public static final TagKey ORES_IN_GROUND_DEEPSLATE = forgeTag("ores_in_ground/deepslate"); - /** - * Ores in netherrack (or in equivalent blocks in the tag {@link #ORE_BEARING_GROUND_NETHERRACK}) which could logically use netherrack as recipe input or output - */ - public static final TagKey ORES_IN_GROUND_NETHERRACK = forgeTag("ores_in_ground/netherrack"); - /** - * Ores in stone (or in equivalent blocks in the tag {@link #ORE_BEARING_GROUND_STONE}) which could logically use stone as recipe input or output - */ - public static final TagKey ORES_IN_GROUND_STONE = forgeTag("ores_in_ground/stone"); - public static final TagKey SAND = forgeTag("sand"); - public static final TagKey SAND_COLORLESS = forgeTag("sand/colorless"); - public static final TagKey SAND_RED = forgeTag("sand/red"); //endregion //region `c` tags for common conventions @@ -135,12 +71,18 @@ public class Tags { public static final TagKey BUDS = cTag("buds"); public static final TagKey CHAINS = cTag("chains"); public static final TagKey CHESTS = cTag("chests"); + public static final TagKey CHESTS_ENDER = cTag("chests/ender"); + public static final TagKey CHESTS_TRAPPED = cTag("chests/trapped"); public static final TagKey CHESTS_WOODEN = cTag("chests/wooden"); /** * For blocks that are similar to amethyst where they have clusters forming from budding blocks */ public static final TagKey CLUSTERS = cTag("clusters"); public static final TagKey COBBLESTONES = cTag("cobblestones"); + public static final TagKey COBBLESTONES_DEEPSLATE = cTag("cobblestones/deepslate"); + public static final TagKey COBBLESTONES_INFESTED = cTag("cobblestones/infested"); + public static final TagKey COBBLESTONES_MOSSY = cTag("cobblestones/mossy"); + public static final TagKey COBBLESTONES_NORMAL = cTag("cobblestones/normal"); public static final TagKey CONCRETES = cTag("concretes"); /** @@ -165,9 +107,19 @@ public class Tags { public static final TagKey DYED_WHITE = cTag("dyed/white"); public static final TagKey DYED_YELLOW = cTag("dyed/yellow"); + public static final TagKey END_STONES = cTag("end_stones"); + + public static final TagKey FENCE_GATES = cTag("fence_gates"); + public static final TagKey FENCE_GATES_WOODEN = cTag("fence_gates/wooden"); + + public static final TagKey FENCES = cTag("fences"); + public static final TagKey FENCES_NETHER_BRICK = cTag("fences/nether_brick"); + public static final TagKey FENCES_WOODEN = cTag("fences/wooden"); + /** * Contains living ground-based flowers that are 1 block tall such as Dandelions or Poppy. * Equivalent to the {@code minecraft:small_flowers} block tag. + * This is NOT aliased with {@link BlockTags#SMALL_FLOWERS} because the vanilla tag is used to make the block weak to swords. */ public static final TagKey FLOWERS_SMALL = cTag("flowers/small"); /** @@ -178,9 +130,12 @@ public class Tags { /** * Contains any living plant block that contains flowers or is a flower itself. * Equivalent to the {@code minecraft:flowers} block tag. + * Aliased with {@link BlockTags#FLOWERS}. */ public static final TagKey FLOWERS = cTag("flowers"); + public static final TagKey GRAVELS = cTag("gravels"); + public static final TagKey GLASS_BLOCKS = cTag("glass_blocks"); public static final TagKey GLASS_BLOCKS_COLORLESS = cTag("glass_blocks/colorless"); /** @@ -198,6 +153,15 @@ public class Tags { * Recipe viewers may use this to automatically find the corresponding BlockItem to hide. */ public static final TagKey HIDDEN_FROM_RECIPE_VIEWERS = cTag("hidden_from_recipe_viewers"); + + public static final TagKey NATURAL_LOGS = cTag("natural_logs"); + public static final TagKey NATURAL_LOGS_NETHER = cTag("natural_logs/nether"); + public static final TagKey NATURAL_LOGS_OVERWORLD = cTag("natural_logs/overworld"); + + public static final TagKey NATURAL_WOODS = cTag("natural_woods"); + + public static final TagKey NETHERRACKS = cTag("netherracks"); + public static final TagKey OBSIDIANS = cTag("obsidians"); /** * For common obsidian that has no special quirks or behaviours - ideal for recipe use. @@ -205,9 +169,53 @@ public class Tags { */ public static final TagKey OBSIDIANS_NORMAL = cTag("obsidians/normal"); public static final TagKey OBSIDIANS_CRYING = cTag("obsidians/crying"); + /** + * Blocks which are often replaced by deepslate ores, i.e. the ores in the tag {@link #ORES_IN_GROUND_DEEPSLATE}, during world generation + */ + public static final TagKey ORE_BEARING_GROUND_DEEPSLATE = cTag("ore_bearing_ground/deepslate"); + /** + * Blocks which are often replaced by netherrack ores, i.e. the ores in the tag {@link #ORES_IN_GROUND_NETHERRACK}, during world generation + */ + public static final TagKey ORE_BEARING_GROUND_NETHERRACK = cTag("ore_bearing_ground/netherrack"); + /** + * Blocks which are often replaced by stone ores, i.e. the ores in the tag {@link #ORES_IN_GROUND_STONE}, during world generation + */ + public static final TagKey ORE_BEARING_GROUND_STONE = cTag("ore_bearing_ground/stone"); + /** + * Ores which on average result in more than one resource worth of materials + */ + public static final TagKey ORE_RATES_DENSE = cTag("ore_rates/dense"); + /** + * Ores which on average result in one resource worth of materials + */ + public static final TagKey ORE_RATES_SINGULAR = cTag("ore_rates/singular"); + /** + * Ores which on average result in less than one resource worth of materials + */ + public static final TagKey ORE_RATES_SPARSE = cTag("ore_rates/sparse"); public static final TagKey ORES = cTag("ores"); public static final TagKey ORES_NETHERITE_SCRAP = cTag("ores/netherite_scrap"); public static final TagKey ORES_QUARTZ = cTag("ores/quartz"); + public static final TagKey ORES_COAL = cTag("ores/coal"); + public static final TagKey ORES_COPPER = cTag("ores/copper"); + public static final TagKey ORES_DIAMOND = cTag("ores/diamond"); + public static final TagKey ORES_EMERALD = cTag("ores/emerald"); + public static final TagKey ORES_GOLD = cTag("ores/gold"); + public static final TagKey ORES_IRON = cTag("ores/iron"); + public static final TagKey ORES_LAPIS = cTag("ores/lapis"); + public static final TagKey ORES_REDSTONE = cTag("ores/redstone"); + /** + * Ores in deepslate (or in equivalent blocks in the tag {@link #ORE_BEARING_GROUND_DEEPSLATE}) which could logically use deepslate as recipe input or output + */ + public static final TagKey ORES_IN_GROUND_DEEPSLATE = cTag("ores_in_ground/deepslate"); + /** + * Ores in netherrack (or in equivalent blocks in the tag {@link #ORE_BEARING_GROUND_NETHERRACK}) which could logically use netherrack as recipe input or output + */ + public static final TagKey ORES_IN_GROUND_NETHERRACK = cTag("ores_in_ground/netherrack"); + /** + * Ores in stone (or in equivalent blocks in the tag {@link #ORE_BEARING_GROUND_STONE}) which could logically use stone as recipe input or output + */ + public static final TagKey ORES_IN_GROUND_STONE = cTag("ores_in_ground/stone"); public static final TagKey PLAYER_WORKSTATIONS_CRAFTING_TABLES = cTag("player_workstations/crafting_tables"); public static final TagKey PLAYER_WORKSTATIONS_FURNACES = cTag("player_workstations/furnaces"); public static final TagKey PUMPKINS = cTag("pumpkins"); @@ -226,6 +234,10 @@ public class Tags { public static final TagKey RELOCATION_NOT_SUPPORTED = cTag("relocation_not_supported"); public static final TagKey ROPES = cTag("ropes"); + public static final TagKey SANDS = cTag("sands"); + public static final TagKey SANDS_COLORLESS = cTag("sands/colorless"); + public static final TagKey SANDS_RED = cTag("sands/red"); + public static final TagKey SANDSTONE_BLOCKS = cTag("sandstone/blocks"); public static final TagKey SANDSTONE_SLABS = cTag("sandstone/slabs"); public static final TagKey SANDSTONE_STAIRS = cTag("sandstone/stairs"); @@ -265,6 +277,7 @@ public class Tags { public static final TagKey STORAGE_BLOCKS_RAW_GOLD = cTag("storage_blocks/raw_gold"); public static final TagKey STORAGE_BLOCKS_RAW_IRON = cTag("storage_blocks/raw_iron"); public static final TagKey STORAGE_BLOCKS_REDSTONE = cTag("storage_blocks/redstone"); + public static final TagKey STORAGE_BLOCKS_RESIN = cTag("storage_blocks/resin"); public static final TagKey STORAGE_BLOCKS_SLIME = cTag("storage_blocks/slime"); public static final TagKey STORAGE_BLOCKS_WHEAT = cTag("storage_blocks/wheat"); public static final TagKey STRIPPED_LOGS = cTag("stripped_logs"); @@ -272,131 +285,6 @@ public class Tags { public static final TagKey VILLAGER_JOB_SITES = cTag("villager_job_sites"); //endregion - //region Redirect fields for improved backward-compatibility - // TODO: Remove backwards compat redirect fields in 1.22 - /** @deprecated Use {@link #COBBLESTONES} instead */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey COBBLESTONE = COBBLESTONES; - - /** @deprecated Use {@link #GLASS_BLOCKS_CHEAP} instead */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_SILICA = GLASS_BLOCKS_CHEAP; - //endregion - - //region Forge tags that now map to combining multiple `c` tags - // Kept for binary compatibility - // TODO: Remove these in 1.22 - /** @deprecated Use {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS = forgeTag("glass"); - /** @deprecated Use {@link #DYED_BLACK} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_BLACK = forgeTag("glass/black"); - /** @deprecated Use {@link #DYED_BLUE} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_BLUE = forgeTag("glass/blue"); - /** @deprecated Use {@link #DYED_BROWN} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_BROWN = forgeTag("glass/brown"); - /** @deprecated Use {@link #GLASS_BLOCKS_COLORLESS} and/or {@link #GLASS_PANES_COLORLESS} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_COLORLESS = forgeTag("glass/colorless"); - /** @deprecated Use {@link #DYED_CYAN} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_CYAN = forgeTag("glass/cyan"); - /** @deprecated Use {@link #DYED_GRAY} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_GRAY = forgeTag("glass/gray"); - /** @deprecated Use {@link #DYED_GREEN} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_GREEN = forgeTag("glass/green"); - /** @deprecated Use {@link #DYED_LIGHT_BLUE} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_LIGHT_BLUE = forgeTag("glass/light_blue"); - /** @deprecated Use {@link #DYED_LIGHT_GRAY} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_LIGHT_GRAY = forgeTag("glass/light_gray"); - /** @deprecated Use {@link #DYED_LIME} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_LIME = forgeTag("glass/lime"); - /** @deprecated Use {@link #DYED_MAGENTA} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_MAGENTA = forgeTag("glass/magenta"); - /** @deprecated Use {@link #DYED_ORANGE} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_ORANGE = forgeTag("glass/orange"); - /** @deprecated Use {@link #DYED_PINK} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PINK = forgeTag("glass/pink"); - /** @deprecated Use {@link #DYED_PURPLE} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PURPLE = forgeTag("glass/purple"); - /** @deprecated Use {@link #DYED_RED} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_RED = forgeTag("glass/red"); - /** @deprecated Use {@link #DYED_WHITE} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_WHITE = forgeTag("glass/white"); - /** @deprecated Use {@link #DYED_YELLOW} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_YELLOW = forgeTag("glass/yellow"); - /** @deprecated Use {@link #DYED} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey STAINED_GLASS = forgeTag("stained_glass"); - - /** @deprecated Use {@link #DYED_BLACK} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_BLACK = forgeTag("glass_panes/black"); - /** @deprecated Use {@link #DYED_BLUE} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_BLUE = forgeTag("glass_panes/blue"); - /** @deprecated Use {@link #DYED_BROWN} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_BROWN = forgeTag("glass_panes/brown"); - /** @deprecated Use {@link #DYED_CYAN} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_CYAN = forgeTag("glass_panes/cyan"); - /** @deprecated Use {@link #DYED_GRAY} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_GRAY = forgeTag("glass_panes/gray"); - /** @deprecated Use {@link #DYED_GREEN} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_GREEN = forgeTag("glass_panes/green"); - /** @deprecated Use {@link #DYED_LIGHT_BLUE} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_LIGHT_BLUE = forgeTag("glass_panes/light_blue"); - /** @deprecated Use {@link #DYED_LIGHT_GRAY} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_LIGHT_GRAY = forgeTag("glass_panes/light_gray"); - /** @deprecated Use {@link #DYED_LIME} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_LIME = forgeTag("glass_panes/lime"); - /** @deprecated Use {@link #DYED_MAGENTA} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_MAGENTA = forgeTag("glass_panes/magenta"); - /** @deprecated Use {@link #DYED_ORANGE} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_ORANGE = forgeTag("glass_panes/orange"); - /** @deprecated Use {@link #DYED_PINK} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_PINK = forgeTag("glass_panes/pink"); - /** @deprecated Use {@link #DYED_PURPLE} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_PURPLE = forgeTag("glass_panes/purple"); - /** @deprecated Use {@link #DYED_RED} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_RED = forgeTag("glass_panes/red"); - /** @deprecated Use {@link #DYED_WHITE} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_WHITE = forgeTag("glass_panes/white"); - /** @deprecated Use {@link #DYED_YELLOW} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_YELLOW = forgeTag("glass_panes/yellow"); - /** @deprecated Use {@link #DYED} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey STAINED_GLASS_PANES = forgeTag("stained_glass_panes"); - //endregion - private static TagKey cTag(String name) { return BlockTags.create(Identifier.fromNamespaceAndPath("c", name)); } @@ -416,6 +304,10 @@ public class Tags { public static final TagKey> MINECARTS = cTag("minecarts"); public static final TagKey> BOATS = cTag("boats"); + /// Tag containing entity types, generally extending {@link ItemFrame}, + /// that can be placed on the surfaces of blocks to display an item. + public static final TagKey> ITEM_FRAMES = cTag("item_frames"); + /** * Entities should be included in this tag if they are not allowed to be picked up by items or grabbed in a way * that a player can easily move the entity to anywhere they want. Ideal for special entities that should not @@ -440,81 +332,6 @@ public class Tags { private static void init() {} //region `forge` tags for Forge-specific tags - public static final TagKey BONES = forgeTag("bones"); - public static final TagKey CHESTS_ENDER = forgeTag("chests/ender"); - public static final TagKey CHESTS_TRAPPED = forgeTag("chests/trapped"); - public static final TagKey COBBLESTONE_NORMAL = forgeTag("cobblestone/normal"); - public static final TagKey COBBLESTONE_INFESTED = forgeTag("cobblestone/infested"); - public static final TagKey COBBLESTONE_MOSSY = forgeTag("cobblestone/mossy"); - public static final TagKey COBBLESTONE_DEEPSLATE = forgeTag("cobblestone/deepslate"); - public static final TagKey EGGS = forgeTag("eggs"); - public static final TagKey END_STONES = forgeTag("end_stones"); - public static final TagKey FEATHERS = forgeTag("feathers"); - public static final TagKey FENCE_GATES = forgeTag("fence_gates"); - public static final TagKey FENCE_GATES_WOODEN = forgeTag("fence_gates/wooden"); - public static final TagKey FENCES = forgeTag("fences"); - public static final TagKey FENCES_NETHER_BRICK = forgeTag("fences/nether_brick"); - public static final TagKey FENCES_WOODEN = forgeTag("fences/wooden"); - public static final TagKey GRAVEL = forgeTag("gravel"); - public static final TagKey GUNPOWDER = forgeTag("gunpowder"); - public static final TagKey MUSHROOMS = forgeTag("mushrooms"); - public static final TagKey NETHER_STARS = forgeTag("nether_stars"); - public static final TagKey NETHERRACK = forgeTag("netherrack"); - /** - * Blocks which are often replaced by deepslate ores, i.e. the ores in the tag {@link #ORES_IN_GROUND_DEEPSLATE}, during world generation - */ - public static final TagKey ORE_BEARING_GROUND_DEEPSLATE = forgeTag("ore_bearing_ground/deepslate"); - /** - * Blocks which are often replaced by netherrack ores, i.e. the ores in the tag {@link #ORES_IN_GROUND_NETHERRACK}, during world generation - */ - public static final TagKey ORE_BEARING_GROUND_NETHERRACK = forgeTag("ore_bearing_ground/netherrack"); - /** - * Blocks which are often replaced by stone ores, i.e. the ores in the tag {@link #ORES_IN_GROUND_STONE}, during world generation - */ - public static final TagKey ORE_BEARING_GROUND_STONE = forgeTag("ore_bearing_ground/stone"); - /** - * Ores which on average result in more than one resource worth of materials - */ - public static final TagKey ORE_RATES_DENSE = forgeTag("ore_rates/dense"); - /** - * Ores which on average result in one resource worth of materials - */ - public static final TagKey ORE_RATES_SINGULAR = forgeTag("ore_rates/singular"); - /** - * Ores which on average result in less than one resource worth of materials - */ - public static final TagKey ORE_RATES_SPARSE = forgeTag("ore_rates/sparse"); - public static final TagKey ORES_COAL = forgeTag("ores/coal"); - public static final TagKey ORES_COPPER = forgeTag("ores/copper"); - public static final TagKey ORES_DIAMOND = forgeTag("ores/diamond"); - public static final TagKey ORES_EMERALD = forgeTag("ores/emerald"); - public static final TagKey ORES_GOLD = forgeTag("ores/gold"); - public static final TagKey ORES_IRON = forgeTag("ores/iron"); - public static final TagKey ORES_LAPIS = forgeTag("ores/lapis"); - public static final TagKey ORES_REDSTONE = forgeTag("ores/redstone"); - /** - * Ores in deepslate (or in equivalent blocks in the tag {@link #ORE_BEARING_GROUND_DEEPSLATE}) which could logically use deepslate as recipe input or output - */ - public static final TagKey ORES_IN_GROUND_DEEPSLATE = forgeTag("ores_in_ground/deepslate"); - /** - * Ores in netherrack (or in equivalent blocks in the tag {@link #ORE_BEARING_GROUND_NETHERRACK}) which could logically use netherrack as recipe input or output - */ - public static final TagKey ORES_IN_GROUND_NETHERRACK = forgeTag("ores_in_ground/netherrack"); - /** - * Ores in stone (or in equivalent blocks in the tag {@link #ORE_BEARING_GROUND_STONE}) which could logically use stone as recipe input or output - */ - public static final TagKey ORES_IN_GROUND_STONE = forgeTag("ores_in_ground/stone"); - - public static final TagKey SAND = forgeTag("sand"); - public static final TagKey SAND_COLORLESS = forgeTag("sand/colorless"); - public static final TagKey SAND_RED = forgeTag("sand/red"); - - public static final TagKey SEEDS = forgeTag("seeds"); - public static final TagKey SEEDS_BEETROOT = forgeTag("seeds/beetroot"); - public static final TagKey SEEDS_MELON = forgeTag("seeds/melon"); - public static final TagKey SEEDS_PUMPKIN = forgeTag("seeds/pumpkin"); - public static final TagKey SEEDS_WHEAT = forgeTag("seeds/wheat"); - /** * Controls what items can be consumed for enchanting such as Enchanting Tables. * This tag defaults to {@link net.minecraft.world.item.Items#LAPIS_LAZULI} when not present in any datapacks, including forge client on vanilla server @@ -523,11 +340,6 @@ public class Tags { public static final TagKey STORAGE_BLOCKS_AMETHYST = forgeTag("storage_blocks/amethyst"); public static final TagKey STORAGE_BLOCKS_QUARTZ = forgeTag("storage_blocks/quartz"); - - /** Deprecated for removal as misleading, because it also contained prismarine shards */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey DUSTS_PRISMARINE = forgeTag("dusts/prismarine"); - //endregion //region `c` tags for common conventions @@ -535,10 +347,12 @@ public class Tags { // Forge only adopts `c` tags that are common across all loaders. public static final TagKey BARRELS = cTag("barrels"); public static final TagKey BARRELS_WOODEN = cTag("barrels/wooden"); + public static final TagKey BONES = cTag("bones"); public static final TagKey BOOKSHELVES = cTag("bookshelves"); public static final TagKey BRICKS = cTag("bricks"); public static final TagKey BRICKS_NORMAL = cTag("bricks/normal"); public static final TagKey BRICKS_NETHER = cTag("bricks/nether"); + public static final TagKey BRICKS_RESIN = cTag("bricks/resin"); public static final TagKey BUCKETS = cTag("buckets"); public static final TagKey BUCKETS_EMPTY = cTag("buckets/empty"); /** @@ -564,7 +378,13 @@ public class Tags { public static final TagKey CHAINS = cTag("chains"); public static final TagKey CHESTS = cTag("chests"); public static final TagKey CHESTS_WOODEN = cTag("chests/wooden"); + public static final TagKey CHESTS_ENDER = cTag("chests/ender"); + public static final TagKey CHESTS_TRAPPED = cTag("chests/trapped"); public static final TagKey COBBLESTONES = cTag("cobblestones"); + public static final TagKey COBBLESTONES_NORMAL = cTag("cobblestones/normal"); + public static final TagKey COBBLESTONES_INFESTED = cTag("cobblestones/infested"); + public static final TagKey COBBLESTONES_MOSSY = cTag("cobblestones/mossy"); + public static final TagKey COBBLESTONES_DEEPSLATE = cTag("cobblestones/deepslate"); public static final TagKey CONCRETES = cTag("concretes"); /** * Block tag equivalent is {@link BlockTags#CONCRETE_POWDER} @@ -574,6 +394,8 @@ public class Tags { * For blocks that are similar to amethyst where they have clusters forming from budding blocks */ public static final TagKey CLUSTERS = cTag("clusters"); + public static final TagKey CLUMPS = cTag("clumps"); + public static final TagKey CLUMPS_RESIN = cTag("clumps/resin"); /** * For raw materials harvested from growable plants. Crop items can be edible like carrots or * non-edible like wheat and cocoa beans. @@ -593,6 +415,15 @@ public class Tags { public static final TagKey DUSTS_REDSTONE = cTag("dusts/redstone"); public static final TagKey DUSTS_GLOWSTONE = cTag("dusts/glowstone"); + public static final TagKey DRINKS = cTag("drinks"); + public static final TagKey DRINKS_HONEY = cTag("drinks/honey"); + public static final TagKey DRINKS_JUICE = cTag("drinks/juice"); + public static final TagKey DRINKS_MAGIC = cTag("drinks/magic"); + public static final TagKey DRINKS_MILK = cTag("drinks/milk"); + public static final TagKey DRINKS_OMINOUS = cTag("drinks/ominous"); + public static final TagKey DRINKS_WATER = cTag("drinks/water"); + public static final TagKey DRINKS_WATERY = cTag("drinks/watery"); + /** * Tag that holds all blocks and items that can be dyed a specific color. * (Does not include color blending items like leather armor @@ -634,7 +465,16 @@ public class Tags { public static final TagKey DYES_ORANGE = DyeColor.ORANGE.getTag(); public static final TagKey DYES_WHITE = DyeColor.WHITE.getTag(); + public static final TagKey EGGS = cTag("eggs"); + public static final TagKey END_STONES = cTag("end_stones"); public static final TagKey ENDER_PEARLS = cTag("ender_pearls"); + + public static final TagKey FEATHERS = cTag("feathers"); + public static final TagKey FENCE_GATES = cTag("fence_gates"); + public static final TagKey FENCE_GATES_WOODEN = cTag("fence_gates/wooden"); + public static final TagKey FENCES = cTag("fences"); + public static final TagKey FENCES_NETHER_BRICK = cTag("fences/nether_brick"); + public static final TagKey FENCES_WOODEN = cTag("fences/wooden"); /** * For bonemeal-like items that can grow plants. */ @@ -642,6 +482,7 @@ public class Tags { /** * Contains living ground-based flowers that are 1 block tall such as Dandelions or Poppy. * Equivalent to the {@code minecraft:small_flowers} item tag. + * Aliased with {@link ItemTags#SMALL_FLOWERS}. */ public static final TagKey FLOWERS_SMALL = cTag("flowers/small"); /** @@ -725,6 +566,9 @@ public class Tags { public static final TagKey GLASS_PANES_COLORLESS = cTag("glass_panes/colorless"); public static final TagKey GLAZED_TERRACOTTAS = cTag("glazed_terracottas"); + public static final TagKey GRAVELS = cTag("gravels"); + public static final TagKey GUNPOWDERS = cTag("gunpowders"); + /** * Tag that holds all items that recipe viewers should not show to users. */ @@ -736,17 +580,68 @@ public class Tags { */ public static final TagKey OBSIDIANS_NORMAL = cTag("obsidians/normal"); public static final TagKey OBSIDIANS_CRYING = cTag("obsidians/crying"); + /** + * Blocks which are often replaced by deepslate ores, i.e. the ores in the tag {@link #ORES_IN_GROUND_DEEPSLATE}, during world generation + */ + public static final TagKey ORE_BEARING_GROUND_DEEPSLATE = cTag("ore_bearing_ground/deepslate"); + /** + * Blocks which are often replaced by netherrack ores, i.e. the ores in the tag {@link #ORES_IN_GROUND_NETHERRACK}, during world generation + */ + public static final TagKey ORE_BEARING_GROUND_NETHERRACK = cTag("ore_bearing_ground/netherrack"); + /** + * Blocks which are often replaced by stone ores, i.e. the ores in the tag {@link #ORES_IN_GROUND_STONE}, during world generation + */ + public static final TagKey ORE_BEARING_GROUND_STONE = cTag("ore_bearing_ground/stone"); + /** + * Ores which on average result in more than one resource worth of materials + */ + public static final TagKey ORE_RATES_DENSE = cTag("ore_rates/dense"); + /** + * Ores which on average result in one resource worth of materials + */ + public static final TagKey ORE_RATES_SINGULAR = cTag("ore_rates/singular"); + /** + * Ores which on average result in less than one resource worth of materials + */ + public static final TagKey ORE_RATES_SPARSE = cTag("ore_rates/sparse"); + public static final TagKey ORES_COAL = cTag("ores/coal"); + public static final TagKey ORES_COPPER = cTag("ores/copper"); + public static final TagKey ORES_DIAMOND = cTag("ores/diamond"); + public static final TagKey ORES_EMERALD = cTag("ores/emerald"); + public static final TagKey ORES_GOLD = cTag("ores/gold"); + public static final TagKey ORES_IRON = cTag("ores/iron"); + public static final TagKey ORES_LAPIS = cTag("ores/lapis"); + public static final TagKey ORES_REDSTONE = cTag("ores/redstone"); + /** + * Ores in deepslate (or in equivalent blocks in the tag {@link #ORE_BEARING_GROUND_DEEPSLATE}) which could logically use deepslate as recipe input or output + */ + public static final TagKey ORES_IN_GROUND_DEEPSLATE = cTag("ores_in_ground/deepslate"); + /** + * Ores in netherrack (or in equivalent blocks in the tag {@link #ORE_BEARING_GROUND_NETHERRACK}) which could logically use netherrack as recipe input or output + */ + public static final TagKey ORES_IN_GROUND_NETHERRACK = cTag("ores_in_ground/netherrack"); + /** + * Ores in stone (or in equivalent blocks in the tag {@link #ORE_BEARING_GROUND_STONE}) which could logically use stone as recipe input or output + */ + public static final TagKey ORES_IN_GROUND_STONE = cTag("ores_in_ground/stone"); public static final TagKey INGOTS = cTag("ingots"); public static final TagKey INGOTS_COPPER = cTag("ingots/copper"); public static final TagKey INGOTS_GOLD = cTag("ingots/gold"); public static final TagKey INGOTS_IRON = cTag("ingots/iron"); public static final TagKey INGOTS_NETHERITE = cTag("ingots/netherite"); public static final TagKey LEATHERS = cTag("leathers"); + public static final TagKey MUSHROOMS = cTag("mushrooms"); /** * For music disc-like materials to be used in recipes. * A pancake with a JUKEBOX_PLAYABLE component attached to play in Jukeboxes as an Easter Egg is not a music disc and would not go in this tag. */ public static final TagKey MUSIC_DISCS = cTag("music_discs"); + public static final TagKey NATURAL_LOGS = cTag("natural_logs"); + public static final TagKey NATURAL_LOGS_NETHER = cTag("natural_logs/nether"); + public static final TagKey NATURAL_LOGS_OVERWORLD = cTag("natural_logs/overworld"); + public static final TagKey NATURAL_WOODS = cTag("natural_woods"); + public static final TagKey NETHER_STARS = cTag("nether_stars"); + public static final TagKey NETHERRACKS = cTag("netherracks"); public static final TagKey NUGGETS = cTag("nuggets"); public static final TagKey NUGGETS_COPPER = cTag("nuggets/copper"); public static final TagKey NUGGETS_GOLD = cTag("nuggets/gold"); @@ -754,6 +649,8 @@ public class Tags { public static final TagKey ORES = cTag("ores"); public static final TagKey ORES_NETHERITE_SCRAP = cTag("ores/netherite_scrap"); public static final TagKey ORES_QUARTZ = cTag("ores/quartz"); + public static final TagKey POTIONS = cTag("potions"); + public static final TagKey POTIONS_BOTTLE = cTag("potions/bottle"); public static final TagKey PLAYER_WORKSTATIONS_CRAFTING_TABLES = cTag("player_workstations/crafting_tables"); public static final TagKey PLAYER_WORKSTATIONS_FURNACES = cTag("player_workstations/furnaces"); public static final TagKey PUMPKINS = cTag("pumpkins"); @@ -780,6 +677,18 @@ public class Tags { public static final TagKey RODS_WOODEN = cTag("rods/wooden"); public static final TagKey ROPES = cTag("ropes"); + public static final TagKey SANDS = cTag("sands"); + public static final TagKey SANDS_COLORLESS = cTag("sands/colorless"); + public static final TagKey SANDS_RED = cTag("sands/red"); + + public static final TagKey SEEDS = cTag("seeds"); + public static final TagKey SEEDS_BEETROOT = cTag("seeds/beetroot"); + public static final TagKey SEEDS_MELON = cTag("seeds/melon"); + public static final TagKey SEEDS_PITCHER_PLANT = cTag("seeds/pitcher_plant"); + public static final TagKey SEEDS_PUMPKIN = cTag("seeds/pumpkin"); + public static final TagKey SEEDS_TORCHFLOWER = cTag("seeds/torchflower"); + public static final TagKey SEEDS_WHEAT = cTag("seeds/wheat"); + public static final TagKey SANDSTONE_BLOCKS = cTag("sandstone/blocks"); public static final TagKey SANDSTONE_SLABS = cTag("sandstone/slabs"); public static final TagKey SANDSTONE_STAIRS = cTag("sandstone/stairs"); @@ -821,6 +730,7 @@ public class Tags { public static final TagKey STORAGE_BLOCKS_RAW_GOLD = cTag("storage_blocks/raw_gold"); public static final TagKey STORAGE_BLOCKS_RAW_IRON = cTag("storage_blocks/raw_iron"); public static final TagKey STORAGE_BLOCKS_REDSTONE = cTag("storage_blocks/redstone"); + public static final TagKey STORAGE_BLOCKS_RESIN = cTag("storage_blocks/resin"); public static final TagKey STORAGE_BLOCKS_SLIME = cTag("storage_blocks/slime"); public static final TagKey STORAGE_BLOCKS_WHEAT = cTag("storage_blocks/wheat"); public static final TagKey STRINGS = cTag("strings"); @@ -912,6 +822,7 @@ public class Tags { * @see ToolActions */ public static final TagKey TOOLS_MACE = cTag("tools/mace"); + public static final TagKey TOOLS_WRENCH = cTag("tools/wrench"); /** * A tag containing melee-based weapons for recipes and loot tables. * Tools are considered melee if they are intentionally intended to be used for melee attack as a primary purpose. @@ -944,164 +855,16 @@ public class Tags { * Collects the 4 vanilla armor tags into one parent collection for ease. */ public static final TagKey ARMORS = cTag("armors"); + public static final TagKey ARMORS_HORSE = cTag("armors/horse"); + public static final TagKey ARMORS_HUMANOID = cTag("armors/humanoid"); + public static final TagKey ARMORS_NAUTILUS = cTag("armors/nautilus"); + public static final TagKey ARMORS_WOLF = cTag("armors/wolf"); /** * Collects the many enchantable tags into one parent collection for ease. */ public static final TagKey ENCHANTABLES = cTag("enchantables"); //endregion - //region Redirect fields for improved backward-compatibility - // TODO: Remove backwards compat redirect fields in 1.22 - /** @deprecated Use {@link #COBBLESTONES} instead */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey COBBLESTONE = COBBLESTONES; - /** @deprecated Use {@link #LEATHERS} instead */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey LEATHER = LEATHERS; - /** @deprecated Use {@link #SANDSTONE_BLOCKS} instead */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey SANDSTONE = SANDSTONE_BLOCKS; - /** @deprecated Use {@link #STONES} instead */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey STONE = STONES; - /** @deprecated Use {@link #TOOLS_SHEAR} instead */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey SHEARS = TOOLS_SHEAR; - /** @deprecated Use {@link #TOOLS_SPEAR} instead */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey TOOLS_TRIDENTS = TOOLS_SPEAR; - /** @deprecated Use {@link #STRINGS} instead */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey STRING = STRINGS; - //endregion - - //region Forge tags that now map to combining multiple `c` tags - // Kept for binary compatibility - // TODO: Remove these in 1.22 - /** @deprecated Use {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS = forgeTag("glass"); - /** @deprecated Use {@link #DYED_BLACK} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_BLACK = forgeTag("glass/black"); - /** @deprecated Use {@link #DYED_BLUE} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_BLUE = forgeTag("glass/blue"); - /** @deprecated Use {@link #DYED_BROWN} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_BROWN = forgeTag("glass/brown"); - /** @deprecated Use {@link #GLASS_BLOCKS_COLORLESS} and/or {@link #GLASS_PANES_COLORLESS} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_COLORLESS = forgeTag("glass/colorless"); - /** @deprecated Use {@link #DYED_CYAN} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_CYAN = forgeTag("glass/cyan"); - /** @deprecated Use {@link #DYED_GRAY} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_GRAY = forgeTag("glass/gray"); - /** @deprecated Use {@link #DYED_GREEN} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_GREEN = forgeTag("glass/green"); - /** @deprecated Use {@link #DYED_LIGHT_BLUE} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_LIGHT_BLUE = forgeTag("glass/light_blue"); - /** @deprecated Use {@link #DYED_LIGHT_GRAY} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_LIGHT_GRAY = forgeTag("glass/light_gray"); - /** @deprecated Use {@link #DYED_LIME} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_LIME = forgeTag("glass/lime"); - /** @deprecated Use {@link #DYED_MAGENTA} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_MAGENTA = forgeTag("glass/magenta"); - /** @deprecated Use {@link #DYED_ORANGE} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_ORANGE = forgeTag("glass/orange"); - /** @deprecated Use {@link #DYED_PINK} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PINK = forgeTag("glass/pink"); - /** @deprecated Use {@link #DYED_PURPLE} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PURPLE = forgeTag("glass/purple"); - /** @deprecated Use {@link #DYED_RED} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_RED = forgeTag("glass/red"); - /** @deprecated Use {@link #DYED_WHITE} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_WHITE = forgeTag("glass/white"); - /** @deprecated Use {@link #DYED_YELLOW} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_YELLOW = forgeTag("glass/yellow"); - /** @deprecated Use {@link #DYED} combined with {@link #GLASS_BLOCKS} and/or {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey STAINED_GLASS = forgeTag("stained_glass"); - - /** @deprecated Use {@link #DYED_BLACK} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_BLACK = forgeTag("glass_panes/black"); - /** @deprecated Use {@link #DYED_BLUE} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_BLUE = forgeTag("glass_panes/blue"); - /** @deprecated Use {@link #DYED_BROWN} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_BROWN = forgeTag("glass_panes/brown"); - /** @deprecated Use {@link #DYED_CYAN} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_CYAN = forgeTag("glass_panes/cyan"); - /** @deprecated Use {@link #DYED_GRAY} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_GRAY = forgeTag("glass_panes/gray"); - /** @deprecated Use {@link #DYED_GREEN} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_GREEN = forgeTag("glass_panes/green"); - /** @deprecated Use {@link #DYED_LIGHT_BLUE} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_LIGHT_BLUE = forgeTag("glass_panes/light_blue"); - /** @deprecated Use {@link #DYED_LIGHT_GRAY} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_LIGHT_GRAY = forgeTag("glass_panes/light_gray"); - /** @deprecated Use {@link #DYED_LIME} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_LIME = forgeTag("glass_panes/lime"); - /** @deprecated Use {@link #DYED_MAGENTA} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_MAGENTA = forgeTag("glass_panes/magenta"); - /** @deprecated Use {@link #DYED_ORANGE} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_ORANGE = forgeTag("glass_panes/orange"); - /** @deprecated Use {@link #DYED_PINK} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_PINK = forgeTag("glass_panes/pink"); - /** @deprecated Use {@link #DYED_PURPLE} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_PURPLE = forgeTag("glass_panes/purple"); - /** @deprecated Use {@link #DYED_RED} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_RED = forgeTag("glass_panes/red"); - /** @deprecated Use {@link #DYED_WHITE} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_WHITE = forgeTag("glass_panes/white"); - /** @deprecated Use {@link #DYED_YELLOW} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey GLASS_PANES_YELLOW = forgeTag("glass_panes/yellow"); - /** @deprecated Use {@link #DYED} combined with {@link #GLASS_PANES} */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey STAINED_GLASS_PANES = forgeTag("stained_glass_panes"); - - /** @deprecated Use the Vanilla tag {@link ItemTags#HEAD_ARMOR} instead */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey ARMORS_HELMETS = forgeTag("armors/helmets"); - /** @deprecated Use the Vanilla tag {@link ItemTags#CHEST_ARMOR} instead */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey ARMORS_CHESTPLATES = forgeTag("armors/chestplates"); - /** @deprecated Use the Vanilla tag {@link ItemTags#LEG_ARMOR} instead */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey ARMORS_LEGGINGS = forgeTag("armors/leggings"); - /** @deprecated Use the Vanilla tag {@link ItemTags#FOOT_ARMOR} instead */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey ARMORS_BOOTS = forgeTag("armors/boots"); - //endregion - private static TagKey cTag(String name) { return ItemTags.create(Identifier.fromNamespaceAndPath("c", name)); } @@ -1114,45 +877,43 @@ public class Tags { public static class Fluids { private static void init() {} - //region `forge` tags for Forge-specific tags + //region `c` tags for common conventions + // Note: Other loaders have additional `c` tags that are exclusive to their loader. + // Forge only adopts `c` tags that are common across all loaders. + /** + * Holds all fluids related to Beetroot Soup.

+ * (Standard unit for beetroot soup is 250mb per bowl) + */ + public static final TagKey BEETROOT_SOUP = cTag("beetroot_soup"); + public static final TagKey EXPERIENCE = cTag("experience"); /** * Holds all fluids that are gaseous at room temperature. */ - public static final TagKey GASEOUS = forgeTag("gaseous"); + public static final TagKey GASEOUS = cTag("gaseous"); + /** + * Holds all fluids related to Mushroom Stew.

+ * (Standard unit for mushroom stew is 250mb per bowl) + */ + public static final TagKey MUSHROOM_STEW = cTag("mushroom_stew"); /** * Holds all fluids related to potions. The effects of the potion fluid should be read from NBT. * The effects and color of the potion fluid should be read from {@link net.minecraft.core.component.DataComponents#POTION_CONTENTS} * component that people should be attaching to the fluidstack of this fluid.

* (Standard unit for potions is 250mb per bottle) */ - public static final TagKey POTION = forgeTag("potion"); + public static final TagKey POTION = cTag("potion"); + /** + * Holds all fluids related to Rabbit Stew.

+ * (Standard unit for rabbit stew is 250mb per bowl) + */ + public static final TagKey RABBIT_STEW = cTag("rabbit_stew"); /** * Holds all fluids related to Suspicious Stew. * The effects of the suspicious stew fluid should be read from {@link net.minecraft.core.component.DataComponents#SUSPICIOUS_STEW_EFFECTS} * component that people should be attaching to the fluidstack of this fluid.

* (Standard unit for suspicious stew is 250mb per bowl) */ - public static final TagKey SUSPICIOUS_STEW = forgeTag("suspicious_stew"); - /** - * Holds all fluids related to Mushroom Stew.

- * (Standard unit for mushroom stew is 250mb per bowl) - */ - public static final TagKey MUSHROOM_STEW = forgeTag("mushroom_stew"); - /** - * Holds all fluids related to Rabbit Stew.

- * (Standard unit for rabbit stew is 250mb per bowl) - */ - public static final TagKey RABBIT_STEW = forgeTag("rabbit_stew"); - /** - * Holds all fluids related to Beetroot Soup.

- * (Standard unit for beetroot soup is 250mb per bowl) - */ - public static final TagKey BEETROOT_SOUP = forgeTag("beetroot_soup"); - //endregion - - //region `c` tags for common conventions - // Note: Other loaders have additional `c` tags that are exclusive to their loader. - // Forge only adopts `c` tags that are common across all loaders. + public static final TagKey SUSPICIOUS_STEW = cTag("suspicious_stew"); /** * Holds all fluids related to water. * This tag is done to help out multi-loader mods/datapacks where the vanilla water tag has attached behaviors outside Forge. @@ -1230,46 +991,6 @@ public class Tags { public static class Biomes { private static void init() {} - //region `forge` tags for Forge-specific tags - public static final TagKey IS_COLD_NETHER = forgeTag("is_cold/nether"); - - /** - * Biomes in the Nether that have sparse vegetation. - */ - public static final TagKey IS_SPARSE_NETHER = forgeTag("is_sparse/nether"); - /** - * Biomes in the End that have sparse vegetation. - */ - public static final TagKey IS_SPARSE_END = forgeTag("is_sparse/end"); - /** - * Biomes in the Nether that have dense vegetation. - */ - public static final TagKey IS_DENSE_NETHER = forgeTag("is_dense/nether"); - /** - * Biomes in the End that have dense vegetation. - */ - public static final TagKey IS_DENSE_END = forgeTag("is_dense/end"); - - public static final TagKey IS_HOT_END = forgeTag("is_hot/end"); - - public static final TagKey IS_LUSH = forgeTag("is_lush"); - public static final TagKey IS_MAGICAL = forgeTag("is_magical"); - public static final TagKey IS_MODIFIED = forgeTag("is_modified"); - - public static final TagKey IS_RARE = forgeTag("is_rare"); - public static final TagKey IS_PLATEAU = forgeTag("is_plateau"); - - /** - * Biomes that are able to spawn sand-based blocks on the surface. - */ - public static final TagKey IS_SANDY = forgeTag("is_sandy"); - - public static final TagKey IS_WET_NETHER = forgeTag("is_wet/nether"); - public static final TagKey IS_WET_END = forgeTag("is_wet/end"); - - public static final TagKey IS_SPOOKY = forgeTag("is_spooky"); - //endregion - //region `c` tags for common conventions // Note: Other loaders have additional `c` tags that are exclusive to their loader. // Forge only adopts `c` tags that are common across all loaders. @@ -1289,18 +1010,26 @@ public class Tags { public static final TagKey IS_HOT = cTag("is_hot"); public static final TagKey IS_HOT_OVERWORLD = cTag("is_hot/overworld"); public static final TagKey IS_HOT_NETHER = cTag("is_hot/nether"); + public static final TagKey IS_HOT_END = cTag("is_hot/end"); public static final TagKey IS_COLD = cTag("is_cold"); + public static final TagKey IS_COLD_NETHER = cTag("is_cold/nether"); public static final TagKey IS_COLD_OVERWORLD = cTag("is_cold/overworld"); public static final TagKey IS_COLD_END = cTag("is_cold/end"); public static final TagKey IS_SPARSE_VEGETATION = cTag("is_sparse_vegetation"); public static final TagKey IS_SPARSE_VEGETATION_OVERWORLD = cTag("is_sparse_vegetation/overworld"); + public static final TagKey IS_SPARSE_VEGETATION_NETHER = cTag("is_sparse_vegetation/nether"); + public static final TagKey IS_SPARSE_VEGETATION_END = cTag("is_sparse_vegetation/end"); public static final TagKey IS_DENSE_VEGETATION = cTag("is_dense_vegetation"); public static final TagKey IS_DENSE_VEGETATION_OVERWORLD = cTag("is_dense_vegetation/overworld"); + public static final TagKey IS_DENSE_VEGETATION_NETHER = cTag("is_dense_vegetation/nether"); + public static final TagKey IS_DENSE_VEGETATION_END = cTag("is_dense_vegetation/end"); public static final TagKey IS_WET = cTag("is_wet"); public static final TagKey IS_WET_OVERWORLD = cTag("is_wet/overworld"); + public static final TagKey IS_WET_NETHER = cTag("is_wet/nether"); + public static final TagKey IS_WET_END = cTag("is_wet/end"); public static final TagKey IS_DRY = cTag("is_dry"); public static final TagKey IS_DRY_OVERWORLD = cTag("is_dry/overworld"); public static final TagKey IS_DRY_NETHER = cTag("is_dry/nether"); @@ -1321,6 +1050,8 @@ public class Tags { public static final TagKey IS_JUNGLE_TREE = cTag("is_tree/jungle"); public static final TagKey IS_DECIDUOUS_TREE = cTag("is_tree/deciduous"); + public static final TagKey IS_DARK_FOREST = cTag("is_dark_forest"); + /** * Biomes that spawn as part of giant mountains. * (This is for people who want to tag their biomes without getting @@ -1466,34 +1197,35 @@ public class Tags { * Biomes that spawn as part of the large islands outside the center island in The End dimension. */ public static final TagKey IS_OUTER_END_ISLAND = cTag("is_outer_end_island"); - //endregion - //region Redirect fields for improved backward-compatibility - // TODO: Remove backwards compat redirect fields in 1.22 - /** @deprecated Use {@link #IS_SPARSE_VEGETATION} instead */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey IS_SPARSE = IS_SPARSE_VEGETATION; - /** @deprecated Use {@link #IS_SPARSE_VEGETATION_OVERWORLD} instead */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey IS_SPARSE_OVERWORLD = IS_SPARSE_VEGETATION_OVERWORLD; + public static final TagKey IS_LUSH = cTag("is_lush"); + public static final TagKey IS_MAGICAL = cTag("is_magical"); + public static final TagKey IS_RARE = cTag("is_rare"); + public static final TagKey IS_PLATEAU = cTag("is_plateau"); + /** + * Biomes that are able to spawn sand-based blocks on the surface. + */ + public static final TagKey IS_SANDY = cTag("is_sandy"); + public static final TagKey IS_SPOOKY = cTag("is_spooky"); - /** @deprecated Use {@link #IS_DENSE_VEGETATION} instead */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey IS_DENSE = IS_DENSE_VEGETATION; - /** @deprecated Use {@link #IS_DENSE_VEGETATION_OVERWORLD} instead */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey IS_DENSE_OVERWORLD = IS_DENSE_VEGETATION_OVERWORLD; + public static final TagKey IS_TEMPERATE = cTag("is_temperate"); + public static final TagKey IS_TEMPERATE_END = cTag("is_temperate/end"); + public static final TagKey IS_TEMPERATE_NETHER = cTag("is_temperate/nether"); + public static final TagKey IS_TEMPERATE_OVERWORLD = cTag("is_temperate/overworld"); - /** @deprecated Use {@link #IS_AQUATIC} instead */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey IS_WATER = IS_AQUATIC; - - /** @deprecated Use {@link #IS_MOUNTAIN_SLOPE} instead */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey IS_SLOPE = IS_MOUNTAIN_SLOPE; - /** @deprecated Use {@link #IS_MOUNTAIN_PEAK} instead */ - @Deprecated(forRemoval = true, since = "1.21") - public static final TagKey IS_PEAK = IS_MOUNTAIN_PEAK; + public static final TagKey PRIMARY_WOOD_TYPE = cTag("primary_wood_type"); + public static final TagKey PRIMARY_WOOD_TYPE_ACACIA = cTag("primary_wood_type/acacia"); + public static final TagKey PRIMARY_WOOD_TYPE_BAMBOO = cTag("primary_wood_type/bamboo"); + public static final TagKey PRIMARY_WOOD_TYPE_BIRCH = cTag("primary_wood_type/birch"); + public static final TagKey PRIMARY_WOOD_TYPE_CHERRY = cTag("primary_wood_type/cherry"); + public static final TagKey PRIMARY_WOOD_TYPE_CRIMSON = cTag("primary_wood_type/crimson"); + public static final TagKey PRIMARY_WOOD_TYPE_DARK_OAK = cTag("primary_wood_type/dark_oak"); + public static final TagKey PRIMARY_WOOD_TYPE_JUNGLE = cTag("primary_wood_type/jungle"); + public static final TagKey PRIMARY_WOOD_TYPE_MANGROVE = cTag("primary_wood_type/mangrove"); + public static final TagKey PRIMARY_WOOD_TYPE_OAK = cTag("primary_wood_type/oak"); + public static final TagKey PRIMARY_WOOD_TYPE_PALE_OAK = cTag("primary_wood_type/pale_oak"); + public static final TagKey PRIMARY_WOOD_TYPE_SPRUCE = cTag("primary_wood_type/spruce"); + public static final TagKey PRIMARY_WOOD_TYPE_WARPED = cTag("primary_wood_type/warped"); //endregion private static TagKey cTag(String name) { diff --git a/src/main/java/net/minecraftforge/common/ToolActions.java b/src/main/java/net/minecraftforge/common/ToolActions.java index 2bcd9df290..bc2e420bcf 100644 --- a/src/main/java/net/minecraftforge/common/ToolActions.java +++ b/src/main/java/net/minecraftforge/common/ToolActions.java @@ -95,14 +95,6 @@ public class ToolActions */ public static final ToolAction HOE_TILL = ToolAction.get("till"); - /** - * A tool action corresponding to the 'block' action of shields. - * - * @deprecated Completely overshadowed by {@link net.minecraft.core.component.DataComponents#BLOCKS_ATTACKS} - */ - @Deprecated(forRemoval = true, since = "1.21.5") - public static final ToolAction SHIELD_BLOCK = ToolAction.get("shield_block"); - /** * This action corresponds to right-clicking the fishing rod. */ @@ -117,8 +109,6 @@ public class ToolActions @Deprecated(since = "1.21.5") public static final Set DEFAULT_SWORD_ACTIONS = of(SWORD_DIG, SWORD_SWEEP); public static final Set DEFAULT_SHEARS_ACTIONS = of(SHEARS_DIG, SHEARS_HARVEST, SHEARS_CARVE, SHEARS_DISARM); - @Deprecated(since = "1.21.5") - public static final Set DEFAULT_SHIELD_ACTIONS = of(SHIELD_BLOCK); public static final Set DEFAULT_FISHING_ROD_ACTIONS = of(FISHING_ROD_CAST); private static Set of(ToolAction... actions) { diff --git a/src/main/java/net/minecraftforge/common/VillagerTradingManager.java b/src/main/java/net/minecraftforge/common/VillagerTradingManager.java deleted file mode 100644 index d792efff18..0000000000 --- a/src/main/java/net/minecraftforge/common/VillagerTradingManager.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) Forge Development LLC and contributors - * SPDX-License-Identifier: LGPL-2.1-only - */ - -package net.minecraftforge.common; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.entity.npc.villager.VillagerProfession; -import net.minecraft.world.entity.npc.villager.VillagerTrades; -import net.minecraft.world.entity.npc.villager.VillagerTrades.ItemListing; -import net.minecraft.core.NonNullList; -import net.minecraftforge.event.village.VillagerTradesEvent; -import net.minecraftforge.event.village.WandererTradesEvent; -import net.minecraftforge.common.util.Lazy; -import net.minecraftforge.event.server.ServerAboutToStartEvent; -import net.minecraftforge.registries.ForgeRegistries; -import org.apache.commons.lang3.tuple.Pair; - -public class VillagerTradingManager { - private static final Lazy, Int2ObjectMap>> VANILLA_TRADES = Lazy.of(VillagerTradingManager::copyVanillaTrades); - private static final Lazy>> WANDERER_TRADES = Lazy.of(() -> new ArrayList>(VillagerTrades.WANDERING_TRADER_TRADES)); - - private static Map, Int2ObjectMap> copyVanillaTrades() { - var ret = new HashMap, Int2ObjectMap>(); - VillagerTrades.TRADES.forEach((key, value) -> { - Int2ObjectMap copy = new Int2ObjectOpenHashMap<>(); - for (var ent : value.int2ObjectEntrySet()) { - copy.put(ent.getIntKey(), Arrays.copyOf(ent.getValue(), ent.getValue().length)); - } - ret.put(key, copy); - }); - return ret; - } - - static void loadTrades(ServerAboutToStartEvent e) { - postWandererEvent(); - postVillagerEvents(); - } - - /** Posts the WandererTradesEvent. */ - private static void postWandererEvent() { - if (!WandererTradesEvent.BUS.hasListeners()) - return; - var event = WandererTradesEvent.BUS.fire(new WandererTradesEvent(WANDERER_TRADES.get())); - VillagerTrades.WANDERING_TRADER_TRADES.clear(); - for (var pool : event.getPools()) - VillagerTrades.WANDERING_TRADER_TRADES.add(Pair.of(pool.getEntries().toArray(ItemListing[]::new), pool.getRolls())); - } - - /** Posts a VillagerTradesEvent for each registered profession. */ - private static void postVillagerEvents() { - if (!VillagerTradesEvent.BUS.hasListeners()) - return; - // TODO [VillagerType][1.21.5] Villager Professions are stored as keys in vanilla now? Re-evaluate this. - var vanilla = VANILLA_TRADES.get(); - for (VillagerProfession value : ForgeRegistries.VILLAGER_PROFESSIONS) { - var prof = ForgeRegistries.VILLAGER_PROFESSIONS.getResourceKey(value).orElseThrow(); - Int2ObjectMap trades = vanilla.getOrDefault(prof, new Int2ObjectOpenHashMap<>()); - Int2ObjectMap> mutableTrades = new Int2ObjectOpenHashMap<>(); - for (int i = 1; i < 6; i++) - mutableTrades.put(i, NonNullList.create()); - - for (var entry : trades.int2ObjectEntrySet()) - Arrays.stream(entry.getValue()).forEach(mutableTrades.get(entry.getIntKey())::add); - - VillagerTradesEvent.BUS.post(new VillagerTradesEvent(mutableTrades, prof)); - Int2ObjectMap newTrades = new Int2ObjectOpenHashMap<>(); - for (var entry : mutableTrades.int2ObjectEntrySet()) - newTrades.put(entry.getIntKey(), entry.getValue().toArray(new ItemListing[0])); - - VillagerTrades.TRADES.put(prof, newTrades); - } - } - -} diff --git a/src/main/java/net/minecraftforge/common/WorldWorkerManager.java b/src/main/java/net/minecraftforge/common/WorldWorkerManager.java index 79e804280e..04663f27d7 100644 --- a/src/main/java/net/minecraftforge/common/WorldWorkerManager.java +++ b/src/main/java/net/minecraftforge/common/WorldWorkerManager.java @@ -10,7 +10,7 @@ import net.minecraftforge.eventbus.api.listener.EventListener; import java.util.ArrayList; -public class WorldWorkerManager { +public final class WorldWorkerManager { private static final ArrayList workers = new ArrayList<>(); private static long startTime = -1; private static int index = 0; @@ -46,17 +46,11 @@ public class WorldWorkerManager { } } - @Deprecated(forRemoval = true, since = "1.21.8") - public static void tick(boolean start) { - if (start) startTick(); - else endTick(); - } - public static synchronized void addWorker(IWorker worker) { workers.add(worker); if (tickStartListener == null) { - tickStartListener = TickEvent.ServerTickEvent.Pre.BUS.addListener(event -> startTick()); - tickEndListener = TickEvent.ServerTickEvent.Post.BUS.addListener(event -> endTick()); + tickStartListener = TickEvent.ServerTickEvent.Pre.BUS.addListener(_ -> startTick()); + tickEndListener = TickEvent.ServerTickEvent.Post.BUS.addListener(_ -> endTick()); } } diff --git a/src/main/java/net/minecraftforge/common/capabilities/CapabilityManager.java b/src/main/java/net/minecraftforge/common/capabilities/CapabilityManager.java index 1337d9d6d5..ac45196c25 100644 --- a/src/main/java/net/minecraftforge/common/capabilities/CapabilityManager.java +++ b/src/main/java/net/minecraftforge/common/capabilities/CapabilityManager.java @@ -8,7 +8,6 @@ package net.minecraftforge.common.capabilities; import net.minecraft.resources.Identifier; import net.minecraftforge.fml.Logging; import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.ModLoader; import net.minecraftforge.forgespi.language.ModFileScanData; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -20,9 +19,6 @@ import java.util.HashMap; import java.util.Map; public final class CapabilityManager { - @Deprecated(forRemoval = true, since = "1.21") - public static final CapabilityManager INSTANCE = new CapabilityManager(); - private static final Logger LOGGER = LogManager.getLogger(); /** @@ -88,8 +84,8 @@ public final class CapabilityManager { private static final Map> providers = new HashMap<>(); @ApiStatus.Internal - public static void injectCapabilities(ModList modlist) { - var autos = modlist.getAllScanData().stream() + public static void injectCapabilities() { + var autos = ModList.getAllScanData().stream() .flatMap(e -> e.getAnnotations().stream()) .filter(a -> AUTO_REGISTER.equals(a.annotationType())) .map(ModFileScanData.AnnotationData::clazz) @@ -101,9 +97,6 @@ public final class CapabilityManager { LOGGER.debug(Logging.CAPABILITIES, "Attempting to automatically register: " + auto); get(auto.getInternalName(), null, true); } - - @SuppressWarnings("removal") - var event = RegisterCapabilitiesEvent.BUS.fire(new RegisterCapabilitiesEvent()); } private static void error(String message) { diff --git a/src/main/java/net/minecraftforge/common/capabilities/RegisterCapabilitiesEvent.java b/src/main/java/net/minecraftforge/common/capabilities/RegisterCapabilitiesEvent.java deleted file mode 100644 index c7b6794717..0000000000 --- a/src/main/java/net/minecraftforge/common/capabilities/RegisterCapabilitiesEvent.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) Forge Development LLC and contributors - * SPDX-License-Identifier: LGPL-2.1-only - */ - -package net.minecraftforge.common.capabilities; - -import java.util.Objects; - -import net.minecraftforge.eventbus.api.bus.BusGroup; -import net.minecraftforge.eventbus.api.bus.EventBus; -import net.minecraftforge.eventbus.api.event.RecordEvent; -import net.minecraftforge.fml.event.IModBusEvent; -import org.jspecify.annotations.NullMarked; -import org.objectweb.asm.Type; - -/** - * This event fires when it is time to register your capabilities. - * @see Capability - * - * @deprecated Use {@link AutoRegisterCapability} annotation on your class. - */ -@Deprecated(forRemoval = true, since = "1.21") -@NullMarked -public record RegisterCapabilitiesEvent() implements RecordEvent { - public static final EventBus BUS = EventBus.create(RegisterCapabilitiesEvent.class); - - /** @deprecated {@link RegisterCapabilitiesEvent} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - - /** - * Registers a capability to be consumed by others.
- * APIs who define the capability should call this.
- * This is meant to allow Capability consumers to have soft dependencies on the Capability type.
- * But be automatically notified when the Class actually exists. Meaning it's safe to create their implementations.
- *
- * To retrieve the Capability instance, use the {@link CapabilityManager} gets functions. - */ - public void register(Class type) { - Objects.requireNonNull(type, "Attempted to register a capability with invalid type"); - CapabilityManager.get(Type.getInternalName(type), null, true); - } -} diff --git a/src/main/java/net/minecraftforge/common/crafting/ConditionalRecipe.java b/src/main/java/net/minecraftforge/common/crafting/ConditionalRecipe.java index 377126e601..57cc4862e5 100644 --- a/src/main/java/net/minecraftforge/common/crafting/ConditionalRecipe.java +++ b/src/main/java/net/minecraftforge/common/crafting/ConditionalRecipe.java @@ -26,7 +26,6 @@ import com.mojang.serialization.RecordBuilder; import net.minecraft.advancements.Advancement; import net.minecraft.advancements.AdvancementHolder; -import net.minecraft.core.HolderLookup; import net.minecraft.core.HolderLookup.Provider; import net.minecraft.core.registries.Registries; import net.minecraft.data.recipes.RecipeBuilder; @@ -40,7 +39,6 @@ import net.minecraft.world.item.crafting.RecipeBookCategory; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.Level; -import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.Identifier; @@ -180,7 +178,9 @@ public class ConditionalRecipe { private static class Wrapper implements Recipe { @Override public boolean matches(CraftingInput inv, Level level) { return false; } - @Override public ItemStack assemble(CraftingInput inv, HolderLookup.Provider reg) { return null; } + @Override public ItemStack assemble(CraftingInput inv) { return null; } + @Override public boolean showNotification() { return false; } + @Override public String group() { return "ungrouped wrapper"; } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override @@ -284,17 +284,12 @@ public class ConditionalRecipe { } }); - public static final RecipeSerializer> SERIALZIER = new RecipeSerializer>() { - @Override - public MapCodec> codec() { - return CODEC; - } - - @Override - public StreamCodec> streamCodec() { - throw new UnsupportedOperationException("ConditionaRecipe.SERIALIZER does not support encoding to network"); - } - }; + public static final RecipeSerializer> SERIALZIER = new RecipeSerializer>(CODEC, + StreamCodec.of( + (o, v) -> new UnsupportedOperationException("ConditionaRecipe.SERIALIZER does not support encoding to network"), + i -> { throw new UnsupportedOperationException("ConditionaRecipe.SERIALIZER does not support encoding to network"); } + ) + ); private static final class Holder { private T value; diff --git a/src/main/java/net/minecraftforge/common/crafting/conditions/ModLoadedCondition.java b/src/main/java/net/minecraftforge/common/crafting/conditions/ModLoadedCondition.java index d82a3631e7..5a992d93a5 100644 --- a/src/main/java/net/minecraftforge/common/crafting/conditions/ModLoadedCondition.java +++ b/src/main/java/net/minecraftforge/common/crafting/conditions/ModLoadedCondition.java @@ -19,7 +19,7 @@ public record ModLoadedCondition(String modid) implements ICondition { @Override public boolean test(IContext context, DynamicOps ops) { - return ModList.get().isLoaded(modid); + return ModList.isLoaded(modid); } @Override diff --git a/src/main/java/net/minecraftforge/common/crafting/ingredients/IIngredientBuilder.java b/src/main/java/net/minecraftforge/common/crafting/ingredients/IIngredientBuilder.java index 781d15c87d..a0c1f9a8df 100644 --- a/src/main/java/net/minecraftforge/common/crafting/ingredients/IIngredientBuilder.java +++ b/src/main/java/net/minecraftforge/common/crafting/ingredients/IIngredientBuilder.java @@ -11,16 +11,11 @@ import net.minecraft.core.HolderGetter; import net.minecraft.core.HolderSet; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; public interface IIngredientBuilder { - default PartialNBTIngredient.Builder partialNbt() { - return PartialNBTIngredient.builder(); - } - - default Ingredient strictNbt(ItemStack value) { - return StrictNBTIngredient.of(value); + default NBTIngredient.Builder nbtIngredient() { + return NBTIngredient.builder(); } default Ingredient compound(Ingredient... values) { diff --git a/src/main/java/net/minecraftforge/common/crafting/ingredients/PartialNBTIngredient.java b/src/main/java/net/minecraftforge/common/crafting/ingredients/NBTIngredient.java similarity index 63% rename from src/main/java/net/minecraftforge/common/crafting/ingredients/PartialNBTIngredient.java rename to src/main/java/net/minecraftforge/common/crafting/ingredients/NBTIngredient.java index 05d8de8fc4..e11d283a54 100644 --- a/src/main/java/net/minecraftforge/common/crafting/ingredients/PartialNBTIngredient.java +++ b/src/main/java/net/minecraftforge/common/crafting/ingredients/NBTIngredient.java @@ -5,10 +5,10 @@ package net.minecraftforge.common.crafting.ingredients; +import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.advancements.criterion.NbtPredicate; import net.minecraft.core.HolderSet; import net.minecraft.core.component.DataComponents; import net.minecraft.core.registries.Registries; @@ -28,28 +28,28 @@ import java.util.Arrays; import java.util.List; import java.util.Objects; -/** Ingredient that matches the given items, performing a partial NBT match. Use {@link StrictNBTIngredient} if you want exact match on NBT */ -public class PartialNBTIngredient extends AbstractIngredient { +/** Ingredient that matches the given items, performing a partial NBT match unless strict is set. */ +public class NBTIngredient extends AbstractIngredient { public static Builder builder() { return new Builder(); } private final CompoundTag nbt; - private final NbtPredicate predicate; + private final boolean strict; - private PartialNBTIngredient(HolderSet items, CompoundTag nbt) { + private NBTIngredient(HolderSet items, CompoundTag nbt, boolean strict) { super(items); if (items.size() == 0) throw new IllegalArgumentException("Cannot create a PartialNBTIngredient with no items"); this.nbt = nbt; - this.predicate = new NbtPredicate(nbt); + this.strict = strict; } /** Creates a new ingredient matching any item from the list, containing the given NBT */ @SuppressWarnings("deprecation") - public static PartialNBTIngredient of(CompoundTag nbt, ItemLike... items) { + public static NBTIngredient of(CompoundTag nbt, ItemLike... items) { return of( HolderSet.direct( Arrays.stream(items) @@ -61,14 +61,20 @@ public class PartialNBTIngredient extends AbstractIngredient { } /** Creates a new ingredient matching the given item, containing the given NBT */ + public static NBTIngredient of(ItemLike item, CompoundTag nbt) { + return of(item, nbt, false); + } @SuppressWarnings("deprecation") - public static PartialNBTIngredient of(ItemLike item, CompoundTag nbt) { - return of(HolderSet.direct(item.asItem().builtInRegistryHolder()), nbt); + public static NBTIngredient of(ItemLike item, CompoundTag nbt, boolean strict) { + return of(HolderSet.direct(item.asItem().builtInRegistryHolder()), nbt, strict); } /** Creates a new ingredient matching the given item, containing the given NBT */ - public static PartialNBTIngredient of(HolderSet items, CompoundTag nbt) { - return new PartialNBTIngredient(items, nbt); + public static NBTIngredient of(HolderSet items, CompoundTag nbt) { + return of(items, nbt, false); + } + public static NBTIngredient of(HolderSet items, CompoundTag nbt, boolean strict) { + return new NBTIngredient(items, nbt, strict); } @Override @@ -76,7 +82,8 @@ public class PartialNBTIngredient extends AbstractIngredient { if (input == null) return false; var nbt = input.get(DataComponents.CUSTOM_DATA); - return nbt != null && input.is(this.values) && predicate.matches(nbt.copyTag()); + if (nbt == null || !input.is(this.values)) return false; + return strict ? nbt.strictMatchedBy(this.nbt) : nbt.matchedBy(this.nbt); } @Override @@ -89,38 +96,42 @@ public class PartialNBTIngredient extends AbstractIngredient { return SERIALIZER; } - public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(builder -> + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(builder -> builder.group( Ingredient.NON_AIR_HOLDER_SET_CODEC.fieldOf("items").forGetter(i -> i.values), - TagParser.FLATTENED_CODEC.fieldOf("nbt").forGetter(i -> i.nbt) - ).apply(builder, PartialNBTIngredient::new) + TagParser.FLATTENED_CODEC.fieldOf("nbt").forGetter(i -> i.nbt), + Codec.BOOL.fieldOf("strict").forGetter(i -> i.strict) + ).apply(builder, NBTIngredient::new) ); - public static final IIngredientSerializer SERIALIZER = new IIngredientSerializer<>() { + public static final IIngredientSerializer SERIALIZER = new IIngredientSerializer<>() { private final StreamCodec> HOLDER_SET = ByteBufCodecs.holderSet(Registries.ITEM); @Override - public MapCodec codec() { + public MapCodec codec() { return CODEC; } @Override - public PartialNBTIngredient read(RegistryFriendlyByteBuf buffer) { + public NBTIngredient read(RegistryFriendlyByteBuf buffer) { var items = HOLDER_SET.decode(buffer); var nbt = buffer.readNbt(); - return new PartialNBTIngredient(items, Objects.requireNonNull(nbt)); + var strict = buffer.readBoolean(); + return new NBTIngredient(items, Objects.requireNonNull(nbt), strict); } @Override - public void write(RegistryFriendlyByteBuf buffer, PartialNBTIngredient value) { + public void write(RegistryFriendlyByteBuf buffer, NBTIngredient value) { HOLDER_SET.encode(buffer, value.values); buffer.writeNbt(value.nbt); + buffer.writeBoolean(value.strict); } }; public static class Builder { private final List items = new ArrayList<>(); private CompoundTag nbt; + private boolean strict = false; public Builder nbt(CompoundTag value) { if (this.nbt != null) @@ -129,6 +140,11 @@ public class PartialNBTIngredient extends AbstractIngredient { return this; } + public Builder strict() { + this.strict = true; + return this; + } + public Builder item(ItemLike item) { this.items.add(item); return this; @@ -140,13 +156,21 @@ public class PartialNBTIngredient extends AbstractIngredient { return this; } - public PartialNBTIngredient build() { + public NBTIngredient build() { if (nbt == null) throw new IllegalStateException("NBT Data not set"); if (items.isEmpty()) throw new IllegalStateException("No items added"); - return PartialNBTIngredient.of(nbt, items.stream().toArray(ItemLike[]::new)); + @SuppressWarnings("deprecation") + var holders = HolderSet.direct( + items.stream() + .map(ItemLike::asItem) + .map(Item::builtInRegistryHolder) + .toList() + ); + + return NBTIngredient.of(holders, nbt, strict); } } } diff --git a/src/main/java/net/minecraftforge/common/crafting/ingredients/StrictNBTIngredient.java b/src/main/java/net/minecraftforge/common/crafting/ingredients/StrictNBTIngredient.java deleted file mode 100644 index 8654a406db..0000000000 --- a/src/main/java/net/minecraftforge/common/crafting/ingredients/StrictNBTIngredient.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) Forge Development LLC and contributors - * SPDX-License-Identifier: LGPL-2.1-only - */ - -package net.minecraftforge.common.crafting.ingredients; - -import net.minecraft.core.HolderSet; -import net.minecraft.core.component.DataComponents; -import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.Ingredient; -import org.jetbrains.annotations.Nullable; - -import com.mojang.serialization.MapCodec; -import com.mojang.serialization.codecs.RecordCodecBuilder; - -/** Ingredient that matches the given stack, performing an exact NBT match. Use {@link PartialNBTIngredient} if you need partial match. */ -public class StrictNBTIngredient extends AbstractIngredient { - public static StrictNBTIngredient of(ItemStack stack) { - return new StrictNBTIngredient(stack); - } - - private final ItemStack stack; - private StrictNBTIngredient(ItemStack stack) { - super(HolderSet.direct(stack.getItemHolder())); - this.stack = stack; - } - - @Override - public boolean test(@Nullable ItemStack input) { - if (input == null) - return false; - - //Can't use areItemStacksEqualUsingNBTShareTag because it compares stack size as well - var inbt = input.get(DataComponents.CUSTOM_DATA); - var tnbt = this.stack.get(DataComponents.CUSTOM_DATA); - if(inbt == null || tnbt == null) - return false; - - return this.stack.getItem() == input.getItem() && tnbt.matchedBy(inbt.copyTag()); - } - - @Override - public boolean isSimple() { - return false; - } - - @Override - public IIngredientSerializer serializer() { - return SERIALIZER; - } - - public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(b -> b.group( - ItemStack.CODEC.fieldOf("stack").forGetter(i -> i.stack) - ).apply(b, StrictNBTIngredient::new)); - - public static final IIngredientSerializer SERIALIZER = new IIngredientSerializer<>() { - @Override - public MapCodec codec() { - return CODEC; - } - - @Override - public void write(RegistryFriendlyByteBuf buffer, StrictNBTIngredient value) { - ItemStack.STREAM_CODEC.encode(buffer, value.stack); - } - - @Override - public StrictNBTIngredient read(RegistryFriendlyByteBuf buffer) { - var stack = ItemStack.STREAM_CODEC.decode(buffer); - return new StrictNBTIngredient(stack); - } - }; -} diff --git a/src/main/java/net/minecraftforge/common/data/EnchantmentTagsProvider.java b/src/main/java/net/minecraftforge/common/data/EnchantmentTagsProvider.java deleted file mode 100644 index b08333159a..0000000000 --- a/src/main/java/net/minecraftforge/common/data/EnchantmentTagsProvider.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (c) Forge Development LLC and contributors - * SPDX-License-Identifier: LGPL-2.1-only - */ - -package net.minecraftforge.common.data; - -import net.minecraft.core.HolderLookup; -import net.minecraft.data.PackOutput; -import org.jetbrains.annotations.Nullable; - -import java.util.concurrent.CompletableFuture; - -/** Use {@link net.minecraft.data.tags.EnchantmentTagsProvider Vanilla's EnchantmentTagsProvider} */ -@Deprecated(forRemoval = true, since = "1.21.6") -public abstract class EnchantmentTagsProvider extends net.minecraft.data.tags.EnchantmentTagsProvider { - public EnchantmentTagsProvider(PackOutput output, CompletableFuture lookupProvider, String modId, @Nullable ExistingFileHelper existingFileHelper) { - super(output, lookupProvider, modId, existingFileHelper); - } -} diff --git a/src/main/java/net/minecraftforge/common/data/ExistingFileHelper.java b/src/main/java/net/minecraftforge/common/data/ExistingFileHelper.java index 0de6e1b90c..9960dc169b 100644 --- a/src/main/java/net/minecraftforge/common/data/ExistingFileHelper.java +++ b/src/main/java/net/minecraftforge/common/data/ExistingFileHelper.java @@ -81,7 +81,6 @@ public class ExistingFileHelper { } private final MultiPackResourceManager clientResources, serverData; - private final boolean enable; private final Multimap generated = HashMultimap.create(); /** @@ -93,11 +92,10 @@ public class ExistingFileHelper { * other generated files. * @param existingPacks a collection of paths to existing packs * @param existingMods a set of mod IDs for existing mods - * @param enable {@code true} if validation is enabled * @param assetIndex the identifier for the asset index, generally Minecraft's current major version * @param assetsDir the directory in which to find vanilla assets and indexes */ - public ExistingFileHelper(Collection existingPacks, final Set existingMods, boolean enable, @Nullable final String assetIndex, @Nullable final File assetsDir) { + public ExistingFileHelper(Collection existingPacks, final Set existingMods, @Nullable final String assetIndex, @Nullable final File assetsDir) { List candidateClientResources = new ArrayList<>(); List candidateServerResources = new ArrayList<>(); @@ -123,7 +121,7 @@ public class ExistingFileHelper { } for (String existingMod : existingMods) { - IModFileInfo modFileInfo = ModList.get().getModFileById(existingMod); + IModFileInfo modFileInfo = ModList.getModFileById(existingMod); if (modFileInfo != null) { var root = modFileInfo.getFile().findResource("/"); var supplier = new PathResourcesSupplier(root); @@ -136,8 +134,6 @@ public class ExistingFileHelper { this.clientResources = new MultiPackResourceManager(PackType.CLIENT_RESOURCES, candidateClientResources); this.serverData = new MultiPackResourceManager(PackType.SERVER_DATA, candidateServerResources); - - this.enable = enable; } private ResourceManager getManager(PackType packType) { @@ -254,13 +250,4 @@ public class ExistingFileHelper { public List getResourceStack(Identifier loc, PackType packType) { return getManager(packType).getResourceStack(loc); } - - /** - * @return {@code true} if validation is enabled, {@code false} otherwise - * @deprecated Validation is always enabled, check things as you deem fit. - */ - @Deprecated(forRemoval = true, since = "1.21.5") - public boolean isEnabled() { - return enable; - } } diff --git a/src/main/java/net/minecraftforge/common/data/ForgeBiomeTagsProvider.java b/src/main/java/net/minecraftforge/common/data/ForgeBiomeTagsProvider.java index 84b23e29b4..2414204102 100644 --- a/src/main/java/net/minecraftforge/common/data/ForgeBiomeTagsProvider.java +++ b/src/main/java/net/minecraftforge/common/data/ForgeBiomeTagsProvider.java @@ -39,8 +39,7 @@ public final class ForgeBiomeTagsProvider extends BiomeTagsProvider { tag(IS_OVERWORLD).addTag(BiomeTags.IS_OVERWORLD); tag(IS_HOT_OVERWORLD) - .add(Biomes.SWAMP) - .add(Biomes.MANGROVE_SWAMP) + .add(Biomes.MUSHROOM_FIELDS) .add(Biomes.JUNGLE) .add(Biomes.BAMBOO_JUNGLE) .add(Biomes.SPARSE_JUNGLE) @@ -52,17 +51,15 @@ public final class ForgeBiomeTagsProvider extends BiomeTagsProvider { .add(Biomes.SAVANNA_PLATEAU) .add(Biomes.WINDSWEPT_SAVANNA) .add(Biomes.STONY_PEAKS) - .add(Biomes.WARM_OCEAN) - .addOptionalTag(forgeTagKey("is_hot/overworld")); + .add(Biomes.WARM_OCEAN); tag(IS_HOT_NETHER) .add(Biomes.NETHER_WASTES) .add(Biomes.CRIMSON_FOREST) .add(Biomes.WARPED_FOREST) .add(Biomes.SOUL_SAND_VALLEY) - .add(Biomes.BASALT_DELTAS) - .addOptionalTag(forgeTagKey("is_hot/nether")); - tag(IS_HOT_END); // forge:is_hot/end - tag(IS_HOT).addTag(IS_HOT_OVERWORLD).addTag(IS_HOT_NETHER).addOptionalTag(IS_HOT_END); + .add(Biomes.BASALT_DELTAS); + tag(IS_HOT_END); + tag(IS_HOT).addTags(IS_HOT_OVERWORLD, IS_HOT_NETHER, IS_HOT_END); tag(IS_COLD_OVERWORLD) .add(Biomes.TAIGA) @@ -84,20 +81,20 @@ public final class ForgeBiomeTagsProvider extends BiomeTagsProvider { .add(Biomes.COLD_OCEAN) .add(Biomes.FROZEN_OCEAN) .add(Biomes.DEEP_COLD_OCEAN) - .add(Biomes.DEEP_FROZEN_OCEAN) - .addOptionalTag(forgeTagKey("is_cold/overworld")); - tag(IS_COLD_NETHER); // forge:is_cold/nether + .add(Biomes.DEEP_FROZEN_OCEAN); + tag(IS_COLD_NETHER); tag(IS_COLD_END) .add(Biomes.THE_END) .add(Biomes.SMALL_END_ISLANDS) .add(Biomes.END_MIDLANDS) .add(Biomes.END_HIGHLANDS) - .add(Biomes.END_BARRENS) - .addOptionalTag(forgeTagKey("is_cold/end")); - tag(IS_COLD).addTag(IS_COLD_OVERWORLD).addOptionalTag(IS_COLD_NETHER).addTag(IS_COLD_END); + .add(Biomes.END_BARRENS); + tag(IS_COLD).addTags(IS_COLD_OVERWORLD, IS_COLD_NETHER, IS_COLD_END); - tag(IS_DEAD) - .addOptionalTag(forgeTagKey("is_dead")); + tag(IS_DARK_FOREST) + .add(Biomes.DARK_FOREST) + .add(Biomes.PALE_GARDEN); + tag(IS_DEAD); tag(IS_SPARSE_VEGETATION_OVERWORLD) .add(Biomes.WOODED_BADLANDS) @@ -111,10 +108,9 @@ public final class ForgeBiomeTagsProvider extends BiomeTagsProvider { .add(Biomes.SNOWY_SLOPES) .add(Biomes.JAGGED_PEAKS) .add(Biomes.FROZEN_PEAKS); - //.addOptionalTag(forgeTagKey("is_sparse/overworld")); // can't because forge:is_sparse/overworld contains dripstone caves and eroded badlands, while c:is_sparse_vegetation/overworld does not - tag(IS_SPARSE_NETHER); // forge:is_sparse/nether - tag(IS_SPARSE_END); // forge:is_sparse/end - tag(IS_SPARSE_VEGETATION).addTag(IS_SPARSE_VEGETATION_OVERWORLD).addOptionalTag(IS_SPARSE_NETHER).addOptionalTag(IS_SPARSE_END); + tag(IS_SPARSE_VEGETATION_NETHER); + tag(IS_SPARSE_VEGETATION_END); + tag(IS_SPARSE_VEGETATION).addTags(IS_SPARSE_VEGETATION_OVERWORLD, IS_SPARSE_VEGETATION_NETHER, IS_SPARSE_VEGETATION_END); tag(IS_DENSE_VEGETATION_OVERWORLD) .add(Biomes.DARK_FOREST) @@ -122,11 +118,10 @@ public final class ForgeBiomeTagsProvider extends BiomeTagsProvider { .add(Biomes.OLD_GROWTH_SPRUCE_TAIGA) .add(Biomes.JUNGLE) .add(Biomes.BAMBOO_JUNGLE) - .add(Biomes.MANGROVE_SWAMP) - .addOptionalTag(forgeTagKey("is_dense/overworld")); - tag(IS_DENSE_NETHER); - tag(IS_DENSE_END); - tag(IS_DENSE_VEGETATION).addTag(IS_DENSE_VEGETATION_OVERWORLD).addOptionalTag(IS_DENSE_NETHER).addOptionalTag(IS_DENSE_END); + .add(Biomes.MANGROVE_SWAMP); + tag(IS_DENSE_VEGETATION_NETHER); + tag(IS_DENSE_VEGETATION_END); + tag(IS_DENSE_VEGETATION).addTags(IS_DENSE_VEGETATION_OVERWORLD, IS_DENSE_VEGETATION_NETHER, IS_DENSE_VEGETATION_END); tag(IS_WET_OVERWORLD) .add(Biomes.SWAMP) @@ -136,11 +131,10 @@ public final class ForgeBiomeTagsProvider extends BiomeTagsProvider { .add(Biomes.SPARSE_JUNGLE) .add(Biomes.BEACH) .add(Biomes.LUSH_CAVES) - .add(Biomes.DRIPSTONE_CAVES) - .addOptionalTag(forgeTagKey("is_wet/overworld")); + .add(Biomes.DRIPSTONE_CAVES); tag(IS_WET_NETHER); tag(IS_WET_END); - tag(IS_WET).addTag(IS_WET_OVERWORLD).addOptionalTag(IS_WET_NETHER).addOptionalTag(IS_WET_END); + tag(IS_WET).addTags(IS_WET_OVERWORLD, IS_WET_NETHER, IS_WET_END); tag(IS_DRY_OVERWORLD) .add(Biomes.DESERT) @@ -149,41 +143,84 @@ public final class ForgeBiomeTagsProvider extends BiomeTagsProvider { .add(Biomes.ERODED_BADLANDS) .add(Biomes.SAVANNA) .add(Biomes.SAVANNA_PLATEAU) - .add(Biomes.WINDSWEPT_SAVANNA) - .addOptionalTag(forgeTagKey("is_dry/overworld")); + .add(Biomes.WINDSWEPT_SAVANNA); tag(IS_DRY_NETHER) .add(Biomes.NETHER_WASTES) .add(Biomes.CRIMSON_FOREST) .add(Biomes.WARPED_FOREST) .add(Biomes.SOUL_SAND_VALLEY) - .add(Biomes.BASALT_DELTAS) - .addOptionalTag(forgeTagKey("is_dry/nether")); + .add(Biomes.BASALT_DELTAS); tag(IS_DRY_END) .add(Biomes.THE_END) .add(Biomes.SMALL_END_ISLANDS) .add(Biomes.END_MIDLANDS) .add(Biomes.END_HIGHLANDS) - .add(Biomes.END_BARRENS) - .addOptionalTag(forgeTagKey("is_dry/end")); + .add(Biomes.END_BARRENS); tag(IS_DRY) - .addTag(IS_DRY_OVERWORLD).addTag(IS_DRY_NETHER).addTag(IS_DRY_END) - .addOptionalTag(forgeTagKey("is_dry")); + .addTags(IS_DRY_OVERWORLD, IS_DRY_NETHER, IS_DRY_END); + + tag(IS_TEMPERATE_OVERWORLD) + .add(Biomes.BEACH) + .add(Biomes.BIRCH_FOREST) + .add(Biomes.CHERRY_GROVE) + .add(Biomes.DARK_FOREST) + .add(Biomes.DEEP_OCEAN) + .add(Biomes.FLOWER_FOREST) + .add(Biomes.FOREST) + .add(Biomes.MANGROVE_SWAMP) + .add(Biomes.MEADOW) + .add(Biomes.OCEAN) + .add(Biomes.OLD_GROWTH_BIRCH_FOREST) + .add(Biomes.PLAINS) + .add(Biomes.SUNFLOWER_PLAINS) + .add(Biomes.SWAMP); + tag(IS_TEMPERATE_NETHER); + tag(IS_TEMPERATE_END); + tag(IS_TEMPERATE) + .addTag(IS_TEMPERATE_OVERWORLD) + .addTag(IS_TEMPERATE_NETHER) + .addTag(IS_TEMPERATE_END); + + tag(PRIMARY_WOOD_TYPE_ACACIA).add(Biomes.SAVANNA, Biomes.SAVANNA_PLATEAU, Biomes.WINDSWEPT_SAVANNA); + tag(PRIMARY_WOOD_TYPE_BAMBOO).add(Biomes.BAMBOO_JUNGLE); + tag(PRIMARY_WOOD_TYPE_BIRCH).add(Biomes.BIRCH_FOREST, Biomes.OLD_GROWTH_BIRCH_FOREST); + tag(PRIMARY_WOOD_TYPE_CHERRY).add(Biomes.CHERRY_GROVE); + tag(PRIMARY_WOOD_TYPE_CRIMSON).add(Biomes.CRIMSON_FOREST); + tag(PRIMARY_WOOD_TYPE_DARK_OAK).add(Biomes.DARK_FOREST); + tag(PRIMARY_WOOD_TYPE_JUNGLE).add(Biomes.JUNGLE, Biomes.SPARSE_JUNGLE); + tag(PRIMARY_WOOD_TYPE_MANGROVE).add(Biomes.MANGROVE_SWAMP); + tag(PRIMARY_WOOD_TYPE_OAK).add(Biomes.FLOWER_FOREST, Biomes.FOREST, Biomes.SWAMP, Biomes.WOODED_BADLANDS); + tag(PRIMARY_WOOD_TYPE_PALE_OAK).add(Biomes.PALE_GARDEN); + tag(PRIMARY_WOOD_TYPE_SPRUCE).add(Biomes.GROVE, Biomes.OLD_GROWTH_PINE_TAIGA, Biomes.OLD_GROWTH_SPRUCE_TAIGA, Biomes.SNOWY_TAIGA, Biomes.TAIGA); + tag(PRIMARY_WOOD_TYPE_WARPED).add(Biomes.WARPED_FOREST); + tag(PRIMARY_WOOD_TYPE) + .addTags( + PRIMARY_WOOD_TYPE_ACACIA, + PRIMARY_WOOD_TYPE_BAMBOO, + PRIMARY_WOOD_TYPE_BIRCH, + PRIMARY_WOOD_TYPE_CHERRY, + PRIMARY_WOOD_TYPE_CRIMSON, + PRIMARY_WOOD_TYPE_DARK_OAK, + PRIMARY_WOOD_TYPE_JUNGLE, + PRIMARY_WOOD_TYPE_MANGROVE, + PRIMARY_WOOD_TYPE_OAK, + PRIMARY_WOOD_TYPE_PALE_OAK, + PRIMARY_WOOD_TYPE_SPRUCE, + PRIMARY_WOOD_TYPE_WARPED + ); tag(IS_CONIFEROUS_TREE) .addTag(IS_TAIGA) - .add(Biomes.GROVE) - .addOptionalTag(forgeTagKey("is_coniferous")); + .add(Biomes.GROVE); tag(IS_SAVANNA_TREE).addTag(IS_SAVANNA); tag(IS_JUNGLE_TREE).addTag(IS_JUNGLE); - tag(IS_DECIDUOUS_TREE).add(Biomes.FOREST).add(Biomes.FLOWER_FOREST).add(Biomes.BIRCH_FOREST).add(Biomes.DARK_FOREST).add(Biomes.OLD_GROWTH_BIRCH_FOREST).add(Biomes.WINDSWEPT_FOREST); + tag(IS_DECIDUOUS_TREE).add(Biomes.FOREST, Biomes.FLOWER_FOREST, Biomes.BIRCH_FOREST, Biomes.DARK_FOREST, Biomes.OLD_GROWTH_BIRCH_FOREST, Biomes.PALE_GARDEN, Biomes.WINDSWEPT_FOREST); tag(IS_MOUNTAIN_SLOPE).add(Biomes.SNOWY_SLOPES).add(Biomes.MEADOW).add(Biomes.GROVE).add(Biomes.CHERRY_GROVE); tag(IS_MOUNTAIN_PEAK) - .add(Biomes.JAGGED_PEAKS).add(Biomes.FROZEN_PEAKS).add(Biomes.STONY_PEAKS) - .addOptionalTag(forgeTagKey("is_peak")); + .add(Biomes.JAGGED_PEAKS).add(Biomes.FROZEN_PEAKS).add(Biomes.STONY_PEAKS); tag(IS_MOUNTAIN) .addTag(BiomeTags.IS_MOUNTAIN).addTag(IS_MOUNTAIN_PEAK).addTag(IS_MOUNTAIN_SLOPE); - //.addOptionalTag(forgeTagKey("is_mountain")); // can't because forge:is_mountain contains savanna plateau, while c:is_mountain does not tag(IS_FOREST).addTag(BiomeTags.IS_FOREST); tag(IS_BIRCH_FOREST).add(Biomes.BIRCH_FOREST).add(Biomes.OLD_GROWTH_BIRCH_FOREST); @@ -209,19 +246,31 @@ public final class ForgeBiomeTagsProvider extends BiomeTagsProvider { .add(Biomes.SNOWY_SLOPES) .add(Biomes.JAGGED_PEAKS) .add(Biomes.FROZEN_PEAKS); - //.addOptionalTag(forgeTagKey("is_snowy")); // can't add forge:is_snowy because it contains frozen ocean and frozen river, while c:is_snowy does not tag(IS_ICY).add(Biomes.ICE_SPIKES).add(Biomes.FROZEN_PEAKS); tag(IS_SWAMP).add(Biomes.SWAMP).add(Biomes.MANGROVE_SWAMP); tag(IS_OLD_GROWTH).add(Biomes.OLD_GROWTH_BIRCH_FOREST).add(Biomes.OLD_GROWTH_PINE_TAIGA).add(Biomes.OLD_GROWTH_SPRUCE_TAIGA); tag(IS_LUSH).add(Biomes.LUSH_CAVES); tag(IS_MAGICAL); - tag(IS_MODIFIED); tag(IS_SANDY).add(Biomes.DESERT).add(Biomes.BADLANDS).add(Biomes.WOODED_BADLANDS).add(Biomes.ERODED_BADLANDS).add(Biomes.BEACH); tag(IS_MUSHROOM).add(Biomes.MUSHROOM_FIELDS); tag(IS_PLATEAU).add(Biomes.WOODED_BADLANDS).add(Biomes.SAVANNA_PLATEAU).add(Biomes.CHERRY_GROVE).add(Biomes.MEADOW); - tag(IS_SPOOKY).add(Biomes.DARK_FOREST).add(Biomes.DEEP_DARK); + tag(IS_SPOOKY).add(Biomes.DARK_FOREST).add(Biomes.DEEP_DARK).add(Biomes.PALE_GARDEN); tag(IS_WASTELAND); - tag(IS_RARE).add(Biomes.SUNFLOWER_PLAINS).add(Biomes.FLOWER_FOREST).add(Biomes.OLD_GROWTH_BIRCH_FOREST).add(Biomes.OLD_GROWTH_SPRUCE_TAIGA).add(Biomes.BAMBOO_JUNGLE).add(Biomes.SPARSE_JUNGLE).add(Biomes.ERODED_BADLANDS).add(Biomes.SAVANNA_PLATEAU).add(Biomes.WINDSWEPT_SAVANNA).add(Biomes.ICE_SPIKES).add(Biomes.WINDSWEPT_GRAVELLY_HILLS).add(Biomes.MUSHROOM_FIELDS).add(Biomes.DEEP_DARK); + tag(IS_RARE) + .add(Biomes.SUNFLOWER_PLAINS) + .add(Biomes.FLOWER_FOREST) + .add(Biomes.OLD_GROWTH_BIRCH_FOREST) + .add(Biomes.OLD_GROWTH_SPRUCE_TAIGA) + .add(Biomes.BAMBOO_JUNGLE) + .add(Biomes.SPARSE_JUNGLE) + .add(Biomes.ERODED_BADLANDS) + .add(Biomes.SAVANNA_PLATEAU) + .add(Biomes.WINDSWEPT_SAVANNA) + .add(Biomes.ICE_SPIKES) + .add(Biomes.WINDSWEPT_GRAVELLY_HILLS) + .add(Biomes.MUSHROOM_FIELDS) + .add(Biomes.DEEP_DARK) + .add(Biomes.PALE_GARDEN); tag(IS_RIVER).addTag(BiomeTags.IS_RIVER); tag(IS_SHALLOW_OCEAN).add(Biomes.OCEAN).add(Biomes.LUKEWARM_OCEAN).add(Biomes.WARM_OCEAN).add(Biomes.COLD_OCEAN).add(Biomes.FROZEN_OCEAN); @@ -231,81 +280,11 @@ public final class ForgeBiomeTagsProvider extends BiomeTagsProvider { tag(IS_AQUATIC).addTag(IS_OCEAN).addTag(IS_RIVER); tag(IS_CAVE) - .add(Biomes.LUSH_CAVES).add(Biomes.DRIPSTONE_CAVES).add(Biomes.DEEP_DARK) - .addOptionalTag(forgeTagKey("is_cave")); + .add(Biomes.LUSH_CAVES).add(Biomes.DRIPSTONE_CAVES).add(Biomes.DEEP_DARK); tag(IS_UNDERGROUND).addTag(IS_CAVE); tag(IS_NETHER_FOREST).add(Biomes.CRIMSON_FOREST).add(Biomes.WARPED_FOREST); tag(IS_OUTER_END_ISLAND).add(Biomes.END_HIGHLANDS).add(Biomes.END_MIDLANDS).add(Biomes.END_BARRENS); - - // Backwards compat definitions for pre-1.21 legacy `forge:` tags. - // TODO: Remove backwards compat tag entries in 1.22 - tag(Biomes.PLAINS, forgeTagKey("is_plains")); - tag(Biomes.DESERT, forgeTagKey("is_hot/overworld"), forgeTagKey("is_dry/overworld"), forgeTagKey("is_sandy"), forgeTagKey("is_desert")); - tag(Biomes.TAIGA, forgeTagKey("is_cold/overworld"), forgeTagKey("is_coniferous")); - tag(Biomes.SWAMP, forgeTagKey("is_wet/overworld"), forgeTagKey("is_swamp")); - tag(Biomes.NETHER_WASTES, forgeTagKey("is_hot/nether"), forgeTagKey("is_dry/nether")); - tag(Biomes.THE_END, forgeTagKey("is_cold/end"), forgeTagKey("is_dry/end")); - tag(Biomes.FROZEN_OCEAN, forgeTagKey("is_cold/overworld"), forgeTagKey("is_snowy")); - tag(Biomes.FROZEN_RIVER, forgeTagKey("is_cold/overworld"), forgeTagKey("is_snowy")); - tag(Biomes.SNOWY_PLAINS, forgeTagKey("is_cold/overworld"), forgeTagKey("is_snowy"), forgeTagKey("is_wasteland"), forgeTagKey("is_plains")); - tag(Biomes.MUSHROOM_FIELDS, forgeTagKey("is_mushroom"), forgeTagKey("is_rare")); - tag(Biomes.JUNGLE, forgeTagKey("is_hot/overworld"), forgeTagKey("is_wet/overworld"), forgeTagKey("is_dense/overworld")); - tag(Biomes.SPARSE_JUNGLE, forgeTagKey("is_hot/overworld"), forgeTagKey("is_wet/overworld"), forgeTagKey("is_rare")); - tag(Biomes.BEACH, forgeTagKey("is_wet/overworld"), forgeTagKey("is_sandy")); - tag(Biomes.SNOWY_BEACH, forgeTagKey("is_cold/overworld"), forgeTagKey("is_snowy")); - tag(Biomes.DARK_FOREST, forgeTagKey("is_spooky"), forgeTagKey("is_dense/overworld")); - tag(Biomes.SNOWY_TAIGA, forgeTagKey("is_cold/overworld"), forgeTagKey("is_coniferous"), forgeTagKey("is_snowy")); - tag(Biomes.OLD_GROWTH_PINE_TAIGA, forgeTagKey("is_cold/overworld"), forgeTagKey("is_coniferous")); - tag(Biomes.WINDSWEPT_FOREST, forgeTagKey("is_sparse/overworld")); - tag(Biomes.SAVANNA, forgeTagKey("is_hot/overworld"), forgeTagKey("is_sparse/overworld")); - tag(Biomes.SAVANNA_PLATEAU, forgeTagKey("is_hot/overworld"), forgeTagKey("is_sparse/overworld"), forgeTagKey("is_rare"), forgeTagKey("is_slope"), Tags.Biomes.IS_PLATEAU); - tag(Biomes.BADLANDS, forgeTagKey("is_sandy"), forgeTagKey("is_dry/overworld")); - tag(Biomes.WOODED_BADLANDS, forgeTagKey("is_sandy"), forgeTagKey("is_dry/overworld"), forgeTagKey("is_sparse/overworld"), forgeTagKey("is_slope"), Tags.Biomes.IS_PLATEAU); - tag(Biomes.MEADOW, forgeTagKey("is_plains"), Tags.Biomes.IS_PLATEAU, forgeTagKey("is_slope")); - tag(Biomes.GROVE, forgeTagKey("is_cold/overworld"), forgeTagKey("is_coniferous"), forgeTagKey("is_snowy"), forgeTagKey("is_slope")); - tag(Biomes.SNOWY_SLOPES, forgeTagKey("is_cold/overworld"), forgeTagKey("is_sparse/overworld"), forgeTagKey("is_snowy"), forgeTagKey("is_slope")); - tag(Biomes.JAGGED_PEAKS, forgeTagKey("is_cold/overworld"), forgeTagKey("is_sparse/overworld"), forgeTagKey("is_snowy"), forgeTagKey("is_peak")); - tag(Biomes.FROZEN_PEAKS, forgeTagKey("is_cold/overworld"), forgeTagKey("is_sparse/overworld"), forgeTagKey("is_snowy"), forgeTagKey("is_peak")); - tag(Biomes.STONY_PEAKS, forgeTagKey("is_hot/overworld"), forgeTagKey("is_peak")); - tag(Biomes.SMALL_END_ISLANDS, forgeTagKey("is_cold/end"), forgeTagKey("is_dry/end")); - tag(Biomes.END_MIDLANDS, forgeTagKey("is_cold/end"), forgeTagKey("is_dry/end")); - tag(Biomes.END_HIGHLANDS, forgeTagKey("is_cold/end"), forgeTagKey("is_dry/end")); - tag(Biomes.END_BARRENS, forgeTagKey("is_cold/end"), forgeTagKey("is_dry/end")); - tag(Biomes.WARM_OCEAN, forgeTagKey("is_hot/overworld")); - tag(Biomes.COLD_OCEAN, forgeTagKey("is_cold/overworld")); - tag(Biomes.DEEP_COLD_OCEAN, forgeTagKey("is_cold/overworld")); - tag(Biomes.DEEP_FROZEN_OCEAN, forgeTagKey("is_cold/overworld")); - tag(Biomes.THE_VOID, forgeTagKey("is_void")); - tag(Biomes.SUNFLOWER_PLAINS, forgeTagKey("is_plains"), forgeTagKey("is_rare")); - tag(Biomes.WINDSWEPT_GRAVELLY_HILLS, forgeTagKey("is_sparse/overworld"), forgeTagKey("is_rare")); - tag(Biomes.FLOWER_FOREST, forgeTagKey("is_rare")); - tag(Biomes.ICE_SPIKES, forgeTagKey("is_cold/overworld"), forgeTagKey("is_snowy"), forgeTagKey("is_rare")); - tag(Biomes.OLD_GROWTH_BIRCH_FOREST, forgeTagKey("is_dense/overworld"), forgeTagKey("is_rare")); - tag(Biomes.OLD_GROWTH_SPRUCE_TAIGA, forgeTagKey("is_dense/overworld"), forgeTagKey("is_rare")); - tag(Biomes.WINDSWEPT_SAVANNA, forgeTagKey("is_hot/overworld"), forgeTagKey("is_dry/overworld"), forgeTagKey("is_sparse/overworld"), forgeTagKey("is_rare")); - tag(Biomes.ERODED_BADLANDS, forgeTagKey("is_hot/overworld"), forgeTagKey("is_dry/overworld"), forgeTagKey("is_sparse/overworld"), forgeTagKey("is_rare")); - tag(Biomes.BAMBOO_JUNGLE, forgeTagKey("is_hot/overworld"), forgeTagKey("is_wet/overworld"), forgeTagKey("is_rare")); - tag(Biomes.LUSH_CAVES, forgeTagKey("is_cave"), forgeTagKey("is_lush"), forgeTagKey("is_wet/overworld")); - tag(Biomes.DRIPSTONE_CAVES, forgeTagKey("is_cave"), forgeTagKey("is_sparse/overworld")); - tag(Biomes.SOUL_SAND_VALLEY, forgeTagKey("is_hot/nether"), forgeTagKey("is_dry/nether")); - tag(Biomes.CRIMSON_FOREST, forgeTagKey("is_hot/nether"), forgeTagKey("is_dry/nether")); - tag(Biomes.WARPED_FOREST, forgeTagKey("is_hot/nether"), forgeTagKey("is_dry/nether")); - tag(Biomes.BASALT_DELTAS, forgeTagKey("is_hot/nether"), forgeTagKey("is_dry/nether")); - tag(Biomes.MANGROVE_SWAMP, forgeTagKey("is_wet/overworld"), forgeTagKey("is_hot/overworld"), forgeTagKey("is_swamp")); - tag(Biomes.DEEP_DARK, forgeTagKey("is_cave"), forgeTagKey("is_rare"), forgeTagKey("is_spooky")); - - tag(forgeTagKey("is_hot")).addTag(forgeTagKey("is_hot/overworld")).addTag(forgeTagKey("is_hot/nether")).addOptionalTag(Tags.Biomes.IS_HOT_END); - tag(forgeTagKey("is_cold")).addTag(forgeTagKey("is_cold/overworld")).addOptionalTag(Tags.Biomes.IS_COLD_NETHER).addTag(forgeTagKey("is_cold/end")); - tag(forgeTagKey("is_sparse")).addTag(forgeTagKey("is_sparse/overworld")).addOptionalTag(Tags.Biomes.IS_SPARSE_NETHER).addOptionalTag(Tags.Biomes.IS_SPARSE_END); - tag(forgeTagKey("is_dense")).addTag(forgeTagKey("is_dense/overworld")).addOptionalTag(Tags.Biomes.IS_DENSE_NETHER).addOptionalTag(Tags.Biomes.IS_DENSE_END); - tag(forgeTagKey("is_wet")).addTag(forgeTagKey("is_wet/overworld")).addOptionalTag(Tags.Biomes.IS_WET_NETHER).addOptionalTag(Tags.Biomes.IS_WET_END); - tag(forgeTagKey("is_dry")).addTag(forgeTagKey("is_dry/overworld")).addTag(forgeTagKey("is_dry/nether")).addTag(forgeTagKey("is_dry/end")); - tag(forgeTagKey("is_dead")); - - tag(forgeTagKey("is_water")).addTag(BiomeTags.IS_OCEAN).addTag(BiomeTags.IS_RIVER); - tag(forgeTagKey("is_mountain")).addTag(forgeTagKey("is_peak")).addTag(forgeTagKey("is_slope")); - tag(forgeTagKey("is_underground")).addTag(forgeTagKey("is_cave")); } @SafeVarargs diff --git a/src/main/java/net/minecraftforge/common/data/ForgeBlockItemTagsProvider.java b/src/main/java/net/minecraftforge/common/data/ForgeBlockItemTagsProvider.java index 29361d2233..d64ccb56d7 100644 --- a/src/main/java/net/minecraftforge/common/data/ForgeBlockItemTagsProvider.java +++ b/src/main/java/net/minecraftforge/common/data/ForgeBlockItemTagsProvider.java @@ -12,7 +12,6 @@ import net.minecraft.data.tags.BlockItemTagsProvider; import net.minecraft.data.tags.TagAppender; import net.minecraft.resources.Identifier; import net.minecraft.tags.BlockTags; -import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.Item; @@ -26,14 +25,11 @@ public abstract class ForgeBlockItemTagsProvider extends BlockItemTagsProvider { @SuppressWarnings({ "unchecked", "removal" }) protected void run() { tag(Tags.Blocks.BARRELS, Tags.Items.BARRELS) - .addTag(Tags.Blocks.BARRELS_WOODEN) - .addOptionalTag(Legacy.Blocks.BARRELS); - tag(Tags.Blocks.BARRELS_WOODEN, Tags.Items.BARRELS_WOODEN, Legacy.Blocks.BARRELS_WOODEN, Legacy.Items.BARRELS_WOODEN) - .add(Blocks.BARREL) - .addOptionalTag(Legacy.Blocks.BARRELS_WOODEN); - tag(Tags.Blocks.BOOKSHELVES, Tags.Items.BOOKSHELVES, Legacy.Blocks.BOOKSHELVES, Legacy.Items.BOOKSHELVES) - .add(Blocks.BOOKSHELF) - .addOptionalTag(Legacy.Blocks.BOOKSHELVES); + .addTag(Tags.Blocks.BARRELS_WOODEN); + tag(Tags.Blocks.BARRELS_WOODEN, Tags.Items.BARRELS_WOODEN) + .add(Blocks.BARREL); + tag(Tags.Blocks.BOOKSHELVES, Tags.Items.BOOKSHELVES) + .add(Blocks.BOOKSHELF); tag(Tags.Blocks.BUDDING_BLOCKS, Tags.Items.BUDDING_BLOCKS) .add(Blocks.BUDDING_AMETHYST); tag(Tags.Blocks.BUDS, Tags.Items.BUDS) @@ -43,47 +39,36 @@ public abstract class ForgeBlockItemTagsProvider extends BlockItemTagsProvider { tag(Tags.Blocks.CHAINS, Tags.Items.CHAINS) .add(Blocks.IRON_CHAIN) .addAll(Blocks.COPPER_CHAIN.asList()); + tag(Tags.Blocks.CHESTS_ENDER, Tags.Items.CHESTS_ENDER) + .add(Blocks.ENDER_CHEST); + tag(Tags.Blocks.CHESTS_TRAPPED, Tags.Items.CHESTS_TRAPPED) + .add(Blocks.TRAPPED_CHEST); + tag(Tags.Blocks.CHESTS_WOODEN, Tags.Items.CHESTS_WOODEN) + .add(Blocks.CHEST, Blocks.TRAPPED_CHEST); tag(Tags.Blocks.CHESTS, Tags.Items.CHESTS) + .add(Blocks.COPPER_CHEST) .addTags( Tags.Blocks.CHESTS_ENDER, Tags.Blocks.CHESTS_TRAPPED, Tags.Blocks.CHESTS_WOODEN - ) - .addOptionalTag(Legacy.Blocks.CHESTS); - //copy(forgeBlockTagKey("chests/ender"), forgeItemTagKey("chests/ender")); - tag(Tags.Blocks.CHESTS_ENDER, Tags.Items.CHESTS_ENDER) - .add(Blocks.ENDER_CHEST); // forge:chests/ender - //copy(forgeBlockTagKey("chests/trapped"), forgeItemTagKey("chests/trapped"))); - tag(Tags.Blocks.CHESTS_TRAPPED, Tags.Items.CHESTS_TRAPPED) - .add(Blocks.TRAPPED_CHEST); // forge:chests/trapped - tag(Tags.Blocks.CHESTS_WOODEN, Tags.Items.CHESTS_WOODEN, Legacy.Blocks.CHESTS_WOODEN, Legacy.Items.CHESTS_WOODEN) - .add( - Blocks.CHEST, - Blocks.TRAPPED_CHEST - ) - .addOptionalTag(Legacy.Blocks.CHESTS_WOODEN); + ); tag(Tags.Blocks.CLUSTERS, Tags.Items.CLUSTERS) .add(Blocks.AMETHYST_CLUSTER); - tag(Tags.Blocks.COBBLESTONES, Tags.Items.COBBLESTONES, Legacy.Blocks.COBBLESTONE, Legacy.Items.COBBLESTONE) + tag(Tags.Blocks.COBBLESTONES_NORMAL, Tags.Items.COBBLESTONES_NORMAL) + .add(Blocks.COBBLESTONE); + tag(Tags.Blocks.COBBLESTONES_INFESTED, Tags.Items.COBBLESTONES_INFESTED) + .add(Blocks.INFESTED_COBBLESTONE); + tag(Tags.Blocks.COBBLESTONES_MOSSY, Tags.Items.COBBLESTONES_MOSSY) + .add(Blocks.MOSSY_COBBLESTONE); + tag(Tags.Blocks.COBBLESTONES_DEEPSLATE, Tags.Items.COBBLESTONES_DEEPSLATE) + .add(Blocks.COBBLED_DEEPSLATE); + tag(Tags.Blocks.COBBLESTONES, Tags.Items.COBBLESTONES) .addTags( - Tags.Blocks.COBBLESTONE_NORMAL, - Tags.Blocks.COBBLESTONE_INFESTED, - Tags.Blocks.COBBLESTONE_MOSSY, - Tags.Blocks.COBBLESTONE_DEEPSLATE - ) - .addOptionalTag(Legacy.Blocks.COBBLESTONE); - //copy(forgeBlockTagKey("cobblestone/normal"), forgeItemTagKey("cobblestone/normal")); - tag(Tags.Blocks.COBBLESTONE_NORMAL, Tags.Items.COBBLESTONE_NORMAL) - .add(Blocks.COBBLESTONE); // forge:cobblestone/normal - //copy(forgeBlockTagKey("cobblestone/infested"), forgeItemTagKey("cobblestone/infested")); - tag(Tags.Blocks.COBBLESTONE_INFESTED, Tags.Items.COBBLESTONE_INFESTED) - .add(Blocks.INFESTED_COBBLESTONE); // forge:cobblestone/infested - //copy(forgeBlockTagKey("cobblestone/mossy"), forgeItemTagKey("cobblestone/mossy")); - tag(Tags.Blocks.COBBLESTONE_MOSSY, Tags.Items.COBBLESTONE_MOSSY) - .add(Blocks.MOSSY_COBBLESTONE); // forge:cobblestone/mossy - //copy(forgeBlockTagKey("cobblestone/deepslate"), forgeItemTagKey("cobblestone/deepslate")); - tag(Tags.Blocks.COBBLESTONE_DEEPSLATE, Tags.Items.COBBLESTONE_DEEPSLATE) - .add(Blocks.COBBLED_DEEPSLATE); // forge:cobblestone/deepslate + Tags.Blocks.COBBLESTONES_NORMAL, + Tags.Blocks.COBBLESTONES_INFESTED, + Tags.Blocks.COBBLESTONES_MOSSY, + Tags.Blocks.COBBLESTONES_DEEPSLATE + ); tag(Tags.Blocks.CONCRETES, Tags.Items.CONCRETES) .add( Blocks.WHITE_CONCRETE, @@ -103,13 +88,10 @@ public abstract class ForgeBlockItemTagsProvider extends BlockItemTagsProvider { Blocks.RED_CONCRETE, Blocks.BLACK_CONCRETE ); - //copy(forgeBlockTagKey("end_stones"), forgeItemTagKey("end_stones")); tag(Tags.Blocks.END_STONES, Tags.Items.END_STONES) - .add(Blocks.END_STONE); // forge:end_stones - //copy(forgeBlockTagKey("fence_gates"), forgeItemTagKey("fence_gates")); + .add(Blocks.END_STONE); tag(Tags.Blocks.FENCE_GATES, Tags.Items.FENCE_GATES) - .addTags(Tags.Blocks.FENCE_GATES_WOODEN); // forge:fence_gates - //copy(forgeBlockTagKey("fence_gates/wooden"), forgeItemTagKey("fence_gates/wooden")); + .addTags(Tags.Blocks.FENCE_GATES_WOODEN); tag(Tags.Blocks.FENCE_GATES_WOODEN, Tags.Items.FENCE_GATES_WOODEN) .add( Blocks.OAK_FENCE_GATE, @@ -124,18 +106,15 @@ public abstract class ForgeBlockItemTagsProvider extends BlockItemTagsProvider { Blocks.BAMBOO_FENCE_GATE, Blocks.CHERRY_FENCE_GATE ); - //copy(forgeBlockTagKey("fences"), forgeItemTagKey("fences")); + tag(Tags.Blocks.FENCES_NETHER_BRICK, Tags.Items.FENCES_NETHER_BRICK) + .add(Blocks.NETHER_BRICK_FENCE); + tag(Tags.Blocks.FENCES_WOODEN, Tags.Items.FENCES_WOODEN) + .addTag(BlockTags.WOODEN_FENCES); tag(Tags.Blocks.FENCES, Tags.Items.FENCES) .addTags( Tags.Blocks.FENCES_NETHER_BRICK, Tags.Blocks.FENCES_WOODEN - ); // forge:fences - //copy(forgeBlockTagKey("fences/nether_brick"), forgeItemTagKey("fences/nether_brick")); - tag(Tags.Blocks.FENCES_NETHER_BRICK, Tags.Items.FENCES_NETHER_BRICK) - .add(Blocks.NETHER_BRICK_FENCE); // forge:fences/nether_brick - //copy(forgeBlockTagKey("fences/wooden"), forgeItemTagKey("fences/wooden")); - tag(Tags.Blocks.FENCES_WOODEN, Tags.Items.FENCES_WOODEN) - .addTag(BlockTags.WOODEN_FENCES); // forge:fences/wooden + ); tag(Tags.Blocks.FLOWERS_SMALL, Tags.Items.FLOWERS_SMALL) .add( Blocks.DANDELION, @@ -154,8 +133,7 @@ public abstract class ForgeBlockItemTagsProvider extends BlockItemTagsProvider { Blocks.TORCHFLOWER, Blocks.OPEN_EYEBLOSSOM, Blocks.CLOSED_EYEBLOSSOM - ) - .addOptionalTag(BlockTags.SMALL_FLOWERS); + ); tag(Tags.Blocks.FLOWERS_TALL, Tags.Items.FLOWERS_TALL) .add( Blocks.SUNFLOWER, @@ -163,8 +141,7 @@ public abstract class ForgeBlockItemTagsProvider extends BlockItemTagsProvider { Blocks.PEONY, Blocks.ROSE_BUSH, Blocks.PITCHER_PLANT - ) - .addOptionalTag(tagKey("tall_flowers")); //This is old vanilla tag, should it be removed? + ); tag(Tags.Blocks.FLOWERS, Tags.Items.FLOWERS) .add( Blocks.FLOWERING_AZALEA_LEAVES, @@ -184,16 +161,13 @@ public abstract class ForgeBlockItemTagsProvider extends BlockItemTagsProvider { Tags.Blocks.GLASS_BLOCKS_COLORLESS, Tags.Blocks.GLASS_BLOCKS_CHEAP, Tags.Blocks.GLASS_BLOCKS_TINTED - ) - .addOptionalTag(Tags.Blocks.GLASS); + ); tag(Tags.Blocks.GLASS_BLOCKS_COLORLESS, Tags.Items.GLASS_BLOCKS_COLORLESS) - .add(Blocks.GLASS) - .addOptionalTag(Tags.Blocks.GLASS_COLORLESS); + .add(Blocks.GLASS); tag(Tags.Blocks.GLASS_BLOCKS_TINTED, Tags.Items.GLASS_BLOCKS_TINTED) - .add(Blocks.TINTED_GLASS) - .addOptionalTag(Legacy.Blocks.GLASS_TINTED); + .add(Blocks.TINTED_GLASS); - tag(Tags.Blocks.GLASS_BLOCKS_CHEAP, Tags.Items.GLASS_BLOCKS_CHEAP, Legacy.Blocks.GLASS_SILICA, Legacy.Items.GLASS_SILICA) + tag(Tags.Blocks.GLASS_BLOCKS_CHEAP, Tags.Items.GLASS_BLOCKS_CHEAP) .add( Blocks.GLASS, Blocks.WHITE_STAINED_GLASS, @@ -212,8 +186,7 @@ public abstract class ForgeBlockItemTagsProvider extends BlockItemTagsProvider { Blocks.GREEN_STAINED_GLASS, Blocks.RED_STAINED_GLASS, Blocks.BLACK_STAINED_GLASS - ) - .addOptionalTag(Legacy.Blocks.GLASS_SILICA); + ); tag(Tags.Blocks.GLASS_PANES, Tags.Items.GLASS_PANES) .addTags(Tags.Blocks.GLASS_PANES_COLORLESS) .add( @@ -233,11 +206,9 @@ public abstract class ForgeBlockItemTagsProvider extends BlockItemTagsProvider { Blocks.GREEN_STAINED_GLASS_PANE, Blocks.RED_STAINED_GLASS_PANE, Blocks.BLACK_STAINED_GLASS_PANE - ) - .addOptionalTag(Legacy.Blocks.GLASS_PANES); + ); tag(Tags.Blocks.GLASS_PANES_COLORLESS, Tags.Items.GLASS_PANES_COLORLESS) - .add(Blocks.GLASS_PANE) - .addOptionalTag(forgeTagKey("glass_panes/colorless")); + .add(Blocks.GLASS_PANE); tag(Tags.Blocks.GLAZED_TERRACOTTAS, Tags.Items.GLAZED_TERRACOTTAS) .add( Blocks.WHITE_GLAZED_TERRACOTTA, @@ -257,28 +228,55 @@ public abstract class ForgeBlockItemTagsProvider extends BlockItemTagsProvider { Blocks.RED_GLAZED_TERRACOTTA, Blocks.BLACK_GLAZED_TERRACOTTA ); - //copy(forgeBlockTagKey("gravel"), forgeItemTagKey("gravel")); - tag(Tags.Blocks.GRAVEL, Tags.Items.GRAVEL) - .add(Blocks.GRAVEL); // forge:gravel - //copy(forgeBlockTagKey("netherrack"), forgeItemTagKey("netherrack")); - tag(Tags.Blocks.NETHERRACK, Tags.Items.NETHERRACK) - .add(Blocks.NETHERRACK); // forge:netherrack + tag(Tags.Blocks.GRAVELS, Tags.Items.GRAVELS) + .add(Blocks.GRAVEL); + tag(Tags.Blocks.NATURAL_LOGS_NETHER, Tags.Items.NATURAL_LOGS_NETHER) + .add(Blocks.CRIMSON_STEM, Blocks.WARPED_STEM); + tag(Tags.Blocks.NATURAL_LOGS_OVERWORLD, Tags.Items.NATURAL_LOGS_OVERWORLD) + .add( + Blocks.ACACIA_LOG, + Blocks.BIRCH_LOG, + Blocks.CHERRY_LOG, + Blocks.DARK_OAK_LOG, + Blocks.JUNGLE_LOG, + Blocks.MANGROVE_LOG, + Blocks.OAK_LOG, + Blocks.PALE_OAK_LOG, + Blocks.SPRUCE_LOG + ); + tag(Tags.Blocks.NATURAL_LOGS, Tags.Items.NATURAL_LOGS) + .addTags(Tags.Blocks.NATURAL_LOGS_NETHER, Tags.Blocks.NATURAL_LOGS_OVERWORLD); + tag(Tags.Blocks.NATURAL_WOODS, Tags.Items.NATURAL_WOODS) + .add( + Blocks.ACACIA_WOOD, + Blocks.BIRCH_WOOD, + Blocks.CHERRY_WOOD, + Blocks.CRIMSON_HYPHAE, + Blocks.DARK_OAK_WOOD, + Blocks.JUNGLE_WOOD, + Blocks.MANGROVE_WOOD, + Blocks.OAK_WOOD, + Blocks.PALE_OAK_WOOD, + Blocks.SPRUCE_WOOD, + Blocks.WARPED_HYPHAE + ); + tag(Tags.Blocks.NETHERRACKS, Tags.Items.NETHERRACKS) + .add(Blocks.NETHERRACK); tag(Tags.Blocks.OBSIDIANS, Tags.Items.OBSIDIANS) .addTags( Tags.Blocks.OBSIDIANS_NORMAL, Tags.Blocks.OBSIDIANS_CRYING - ) - .addOptionalTag(Legacy.Blocks.OBSIDIAN); + ); tag(Tags.Blocks.OBSIDIANS_NORMAL, Tags.Items.OBSIDIANS_NORMAL) .add(Blocks.OBSIDIAN); tag(Tags.Blocks.OBSIDIANS_CRYING, Tags.Items.OBSIDIANS_CRYING) .add(Blocks.CRYING_OBSIDIAN); tag(Tags.Blocks.ORE_BEARING_GROUND_DEEPSLATE, Tags.Items.ORE_BEARING_GROUND_DEEPSLATE) - .add(Blocks.DEEPSLATE); // forge:ore_bearing_ground/deepslate + .add(Blocks.DEEPSLATE); tag(Tags.Blocks.ORE_BEARING_GROUND_NETHERRACK, Tags.Items.ORE_BEARING_GROUND_NETHERRACK) - .add(Blocks.NETHERRACK); // forge:ore_bearing_ground/netherrack + .add(Blocks.NETHERRACK); tag(Tags.Blocks.ORE_BEARING_GROUND_STONE, Tags.Items.ORE_BEARING_GROUND_STONE) - .add(Blocks.STONE); // forge:ore_bearing_ground/stone + .add(Blocks.STONE); tag(Tags.Blocks.ORE_RATES_DENSE, Tags.Items.ORE_RATES_DENSE) .add( Blocks.COPPER_ORE, @@ -305,6 +303,26 @@ public abstract class ForgeBlockItemTagsProvider extends BlockItemTagsProvider { ); tag(Tags.Blocks.ORE_RATES_SPARSE, Tags.Items.ORE_RATES_SPARSE) .add(Blocks.NETHER_GOLD_ORE); + tag(Tags.Blocks.ORES_COAL, Tags.Items.ORES_COAL) + .addTag(BlockTags.COAL_ORES); + tag(Tags.Blocks.ORES_COPPER, Tags.Items.ORES_COPPER) + .addTag(BlockTags.COPPER_ORES); + tag(Tags.Blocks.ORES_DIAMOND, Tags.Items.ORES_DIAMOND) + .addTag(BlockTags.DIAMOND_ORES); + tag(Tags.Blocks.ORES_EMERALD, Tags.Items.ORES_EMERALD) + .addTag(BlockTags.EMERALD_ORES); + tag(Tags.Blocks.ORES_GOLD, Tags.Items.ORES_GOLD) + .addTag(BlockTags.GOLD_ORES); + tag(Tags.Blocks.ORES_IRON, Tags.Items.ORES_IRON) + .addTag(BlockTags.IRON_ORES); + tag(Tags.Blocks.ORES_LAPIS, Tags.Items.ORES_LAPIS) + .addTag(BlockTags.LAPIS_ORES); + tag(Tags.Blocks.ORES_QUARTZ, Tags.Items.ORES_QUARTZ) + .add(Blocks.NETHER_QUARTZ_ORE); + tag(Tags.Blocks.ORES_REDSTONE, Tags.Items.ORES_REDSTONE) + .addTag(BlockTags.REDSTONE_ORES); + tag(Tags.Blocks.ORES_NETHERITE_SCRAP, Tags.Items.ORES_NETHERITE_SCRAP) + .add(Blocks.ANCIENT_DEBRIS); tag(Tags.Blocks.ORES, Tags.Items.ORES) .addTags( Tags.Blocks.ORES_COAL, @@ -317,30 +335,7 @@ public abstract class ForgeBlockItemTagsProvider extends BlockItemTagsProvider { Tags.Blocks.ORES_NETHERITE_SCRAP, Tags.Blocks.ORES_REDSTONE, Tags.Blocks.ORES_QUARTZ - ) - .addOptionalTag(Legacy.Blocks.ORES); - tag(Tags.Blocks.ORES_COAL, Tags.Items.ORES_COAL) - .addTag(BlockTags.COAL_ORES); // forge:ores/coal - tag(Tags.Blocks.ORES_COPPER, Tags.Items.ORES_COPPER) - .addTag(BlockTags.COPPER_ORES); // forge:ores/copper - tag(Tags.Blocks.ORES_DIAMOND, Tags.Items.ORES_DIAMOND) - .addTag(BlockTags.DIAMOND_ORES); // forge:ores/diamond - tag(Tags.Blocks.ORES_EMERALD, Tags.Items.ORES_EMERALD) - .addTag(BlockTags.EMERALD_ORES); // forge:ores/emerald - tag(Tags.Blocks.ORES_GOLD, Tags.Items.ORES_GOLD) - .addTag(BlockTags.GOLD_ORES); // forge:ores/gold - tag(Tags.Blocks.ORES_IRON, Tags.Items.ORES_IRON) - .addTag(BlockTags.IRON_ORES); // forge:ores/iron - tag(Tags.Blocks.ORES_LAPIS, Tags.Items.ORES_LAPIS) - .addTag(BlockTags.LAPIS_ORES); // forge:ores/lapis - tag(Tags.Blocks.ORES_QUARTZ, Tags.Items.ORES_QUARTZ, Legacy.Blocks.ORES_QUARTZ, Legacy.Items.QUARTZ_ORES) - .add(Blocks.NETHER_QUARTZ_ORE) - .addOptionalTag(Legacy.Blocks.ORES_QUARTZ); - tag(Tags.Blocks.ORES_REDSTONE, Tags.Items.ORES_REDSTONE) - .addTag(BlockTags.REDSTONE_ORES); // forge:ores/redstone - tag(Tags.Blocks.ORES_NETHERITE_SCRAP, Tags.Items.ORES_NETHERITE_SCRAP, Legacy.Blocks.ORES_NETHERITE_SCRAP, Legacy.Items.ORES_NEHTERITE_SCRAP) - .add(Blocks.ANCIENT_DEBRIS) - .addOptionalTag(Legacy.Blocks.ORES_NETHERITE_SCRAP); + ); tag(Tags.Blocks.ORES_IN_GROUND_DEEPSLATE, Tags.Items.ORES_IN_GROUND_DEEPSLATE) .add( Blocks.DEEPSLATE_COAL_ORE, @@ -385,21 +380,20 @@ public abstract class ForgeBlockItemTagsProvider extends BlockItemTagsProvider { tag(Tags.Blocks.PUMPKINS_JACK_O_LANTERNS, Tags.Items.PUMPKINS_JACK_O_LANTERNS) .add(Blocks.JACK_O_LANTERN); tag(Tags.Blocks.ROPES, Tags.Items.ROPES); - tag(Tags.Blocks.SAND, Tags.Items.SAND) // forge:sand + tag(Tags.Blocks.SANDS, Tags.Items.SANDS) .addTags( - Tags.Blocks.SAND_COLORLESS, - Tags.Blocks.SAND_RED + Tags.Blocks.SANDS_COLORLESS, + Tags.Blocks.SANDS_RED ); - tag(Tags.Blocks.SAND_COLORLESS, Tags.Items.SAND_COLORLESS) // forge:sand/colorless + tag(Tags.Blocks.SANDS_COLORLESS, Tags.Items.SANDS_COLORLESS) .add(Blocks.SAND); - tag(Tags.Blocks.SAND_RED, Tags.Items.SAND_RED) // forge:sand/red + tag(Tags.Blocks.SANDS_RED, Tags.Items.SANDS_RED) .add(Blocks.RED_SAND); tag(Tags.Blocks.SANDSTONE_BLOCKS, Tags.Items.SANDSTONE_BLOCKS) .addTags( Tags.Blocks.SANDSTONE_RED_BLOCKS, Tags.Blocks.SANDSTONE_UNCOLORED_BLOCKS - ) - .addOptionalTag(Legacy.Blocks.SANDSTONE); + ); tag(Tags.Blocks.SANDSTONE_SLABS, Tags.Items.SANDSTONE_SLABS) .addTags( Tags.Blocks.SANDSTONE_RED_SLABS, @@ -455,7 +449,6 @@ public abstract class ForgeBlockItemTagsProvider extends BlockItemTagsProvider { Blocks.DEEPSLATE, Blocks.TUFF ); - //.addOptionalTag(forgeTagKey("stone")); // can't add this because it would include infested/polished variants which aren't contained in Fabric's `c:stones` tag(Tags.Blocks.STORAGE_BLOCKS, Tags.Items.STORAGE_BLOCKS) .addTags( Tags.Blocks.STORAGE_BLOCKS_BONE_MEAL, @@ -473,67 +466,43 @@ public abstract class ForgeBlockItemTagsProvider extends BlockItemTagsProvider { Tags.Blocks.STORAGE_BLOCKS_RAW_IRON, Tags.Blocks.STORAGE_BLOCKS_REDSTONE, Tags.Blocks.STORAGE_BLOCKS_SLIME, - Tags.Blocks.STORAGE_BLOCKS_WHEAT - ) - //.addOptionalTag(forgeTagKey("storage_blocks")); // can't add this because it would include contents from the non-common forge:storage_blocks/amethyst and forge:storage_blocks/quartz, which are not in the c namespace - .addOptionalTags( - Legacy.Blocks.STORAGE_BLOCKS_COAL, - Legacy.Blocks.STORAGE_BLOCKS_COPPER, - Legacy.Blocks.STORAGE_BLOCKS_DIAMOND, - Legacy.Blocks.STORAGE_BLOCKS_EMERALD, - Legacy.Blocks.STORAGE_BLOCKS_GOLD, - Legacy.Blocks.STORAGE_BLOCKS_IRON, - Legacy.Blocks.STORAGE_BLOCKS_LAPIS, - Legacy.Blocks.STORAGE_BLOCKS_NETHERITE, - Legacy.Blocks.STORAGE_BLOCKS_RAW_COPPER, - Legacy.Blocks.STORAGE_BLOCKS_RAW_GOLD, - Legacy.Blocks.STORAGE_BLOCKS_RAW_IRON, - Legacy.Blocks.STORAGE_BLOCKS_REDSTONE + Tags.Blocks.STORAGE_BLOCKS_WHEAT, + Tags.Blocks.STORAGE_BLOCKS_RESIN ); tag(Tags.Blocks.STORAGE_BLOCKS_AMETHYST, Tags.Items.STORAGE_BLOCKS_AMETHYST) .add(Blocks.AMETHYST_BLOCK); tag(Tags.Blocks.STORAGE_BLOCKS_BONE_MEAL, Tags.Items.STORAGE_BLOCKS_BONE_MEAL) .add(Blocks.BONE_BLOCK); - tag(Tags.Blocks.STORAGE_BLOCKS_COAL, Tags.Items.STORAGE_BLOCKS_COAL, Legacy.Blocks.STORAGE_BLOCKS_COAL, Legacy.Items.STORAGE_BLOCKS_COAL) - .add(Blocks.COAL_BLOCK) - .addOptionalTag(Legacy.Blocks.STORAGE_BLOCKS_COAL); - tag(Tags.Blocks.STORAGE_BLOCKS_COPPER, Tags.Items.STORAGE_BLOCKS_COPPER, Legacy.Blocks.STORAGE_BLOCKS_COPPER, Legacy.Items.STORAGE_BLOCKS_COPPER) - .add(Blocks.COPPER_BLOCK) - .addOptionalTag(Legacy.Blocks.STORAGE_BLOCKS_COPPER); - tag(Tags.Blocks.STORAGE_BLOCKS_DIAMOND, Tags.Items.STORAGE_BLOCKS_DIAMOND, Legacy.Blocks.STORAGE_BLOCKS_DIAMOND, Legacy.Items.STORAGE_BLOCKS_DIAMOND) - .add(Blocks.DIAMOND_BLOCK) - .addOptionalTag(Legacy.Blocks.STORAGE_BLOCKS_DIAMOND); + tag(Tags.Blocks.STORAGE_BLOCKS_COAL, Tags.Items.STORAGE_BLOCKS_COAL) + .add(Blocks.COAL_BLOCK); + tag(Tags.Blocks.STORAGE_BLOCKS_COPPER, Tags.Items.STORAGE_BLOCKS_COPPER) + .add(Blocks.COPPER_BLOCK); + tag(Tags.Blocks.STORAGE_BLOCKS_DIAMOND, Tags.Items.STORAGE_BLOCKS_DIAMOND) + .add(Blocks.DIAMOND_BLOCK); tag(Tags.Blocks.STORAGE_BLOCKS_DRIED_KELP, Tags.Items.STORAGE_BLOCKS_DRIED_KELP) .add(Blocks.DRIED_KELP_BLOCK); - tag(Tags.Blocks.STORAGE_BLOCKS_EMERALD, Tags.Items.STORAGE_BLOCKS_EMERALD, Legacy.Blocks.STORAGE_BLOCKS_EMERALD, Legacy.Items.STORAGE_BLOCKS_EMERALD) - .add(Blocks.EMERALD_BLOCK) - .addOptionalTag(Legacy.Blocks.STORAGE_BLOCKS_EMERALD); - tag(Tags.Blocks.STORAGE_BLOCKS_GOLD, Tags.Items.STORAGE_BLOCKS_GOLD, Legacy.Blocks.STORAGE_BLOCKS_GOLD, Legacy.Items.STORAGE_BLOCKS_GOLD) - .add(Blocks.GOLD_BLOCK) - .addOptionalTag(Legacy.Blocks.STORAGE_BLOCKS_GOLD); - tag(Tags.Blocks.STORAGE_BLOCKS_IRON, Tags.Items.STORAGE_BLOCKS_IRON, Legacy.Blocks.STORAGE_BLOCKS_IRON, Legacy.Items.STORAGE_BLOCKS_IRON) - .add(Blocks.IRON_BLOCK) - .addOptionalTag(Legacy.Blocks.STORAGE_BLOCKS_IRON); - tag(Tags.Blocks.STORAGE_BLOCKS_LAPIS, Tags.Items.STORAGE_BLOCKS_LAPIS, Legacy.Blocks.STORAGE_BLOCKS_LAPIS, Legacy.Items.STORAGE_BLOCKS_LAPIS) - .add(Blocks.LAPIS_BLOCK) - .addOptionalTag(Legacy.Blocks.STORAGE_BLOCKS_LAPIS); - tag(Tags.Blocks.STORAGE_BLOCKS_NETHERITE, Tags.Items.STORAGE_BLOCKS_NETHERITE, Legacy.Blocks.STORAGE_BLOCKS_NETHERITE, Legacy.Items.STORAGE_BLOCKS_NETHERITE) - .add(Blocks.NETHERITE_BLOCK) - .addOptionalTag(Legacy.Blocks.STORAGE_BLOCKS_NETHERITE); + tag(Tags.Blocks.STORAGE_BLOCKS_EMERALD, Tags.Items.STORAGE_BLOCKS_EMERALD) + .add(Blocks.EMERALD_BLOCK); + tag(Tags.Blocks.STORAGE_BLOCKS_GOLD, Tags.Items.STORAGE_BLOCKS_GOLD) + .add(Blocks.GOLD_BLOCK); + tag(Tags.Blocks.STORAGE_BLOCKS_IRON, Tags.Items.STORAGE_BLOCKS_IRON) + .add(Blocks.IRON_BLOCK); + tag(Tags.Blocks.STORAGE_BLOCKS_LAPIS, Tags.Items.STORAGE_BLOCKS_LAPIS) + .add(Blocks.LAPIS_BLOCK); + tag(Tags.Blocks.STORAGE_BLOCKS_NETHERITE, Tags.Items.STORAGE_BLOCKS_NETHERITE) + .add(Blocks.NETHERITE_BLOCK); tag(Tags.Blocks.STORAGE_BLOCKS_QUARTZ, Tags.Items.STORAGE_BLOCKS_QUARTZ) .add(Blocks.QUARTZ_BLOCK); - tag(Tags.Blocks.STORAGE_BLOCKS_RAW_COPPER, Tags.Items.STORAGE_BLOCKS_RAW_COPPER, Legacy.Blocks.STORAGE_BLOCKS_RAW_COPPER, Legacy.Items.STORAGE_BLOCKS_RAW_COPPER) - .add(Blocks.RAW_COPPER_BLOCK) - .addOptionalTag(Legacy.Blocks.STORAGE_BLOCKS_RAW_COPPER); - tag(Tags.Blocks.STORAGE_BLOCKS_RAW_GOLD, Tags.Items.STORAGE_BLOCKS_RAW_GOLD, Legacy.Blocks.STORAGE_BLOCKS_RAW_GOLD, Legacy.Items.STORAGE_BLOCKS_RAW_GOLD) - .add(Blocks.RAW_GOLD_BLOCK) - .addOptionalTag(Legacy.Blocks.STORAGE_BLOCKS_RAW_GOLD); - tag(Tags.Blocks.STORAGE_BLOCKS_RAW_IRON, Tags.Items.STORAGE_BLOCKS_RAW_IRON, Legacy.Blocks.STORAGE_BLOCKS_RAW_IRON, Legacy.Items.STORAGE_BLOCKS_RAW_IRON) - .add(Blocks.RAW_IRON_BLOCK) - .addOptionalTag(Legacy.Blocks.STORAGE_BLOCKS_RAW_IRON); - tag(Tags.Blocks.STORAGE_BLOCKS_REDSTONE, Tags.Items.STORAGE_BLOCKS_REDSTONE, Legacy.Blocks.STORAGE_BLOCKS_REDSTONE, Legacy.Items.STORAGE_BLOCKS_REDSTONE) - .add(Blocks.REDSTONE_BLOCK) - .addOptionalTag(Legacy.Blocks.STORAGE_BLOCKS_REDSTONE); + tag(Tags.Blocks.STORAGE_BLOCKS_RAW_COPPER, Tags.Items.STORAGE_BLOCKS_RAW_COPPER) + .add(Blocks.RAW_COPPER_BLOCK); + tag(Tags.Blocks.STORAGE_BLOCKS_RAW_GOLD, Tags.Items.STORAGE_BLOCKS_RAW_GOLD) + .add(Blocks.RAW_GOLD_BLOCK); + tag(Tags.Blocks.STORAGE_BLOCKS_RAW_IRON, Tags.Items.STORAGE_BLOCKS_RAW_IRON) + .add(Blocks.RAW_IRON_BLOCK); + tag(Tags.Blocks.STORAGE_BLOCKS_RESIN, Tags.Items.STORAGE_BLOCKS_RESIN) + .add(Blocks.RESIN_BLOCK); + tag(Tags.Blocks.STORAGE_BLOCKS_REDSTONE, Tags.Items.STORAGE_BLOCKS_REDSTONE) + .add(Blocks.REDSTONE_BLOCK); tag(Tags.Blocks.STORAGE_BLOCKS_SLIME, Tags.Items.STORAGE_BLOCKS_SLIME) .add(Blocks.SLIME_BLOCK); tag(Tags.Blocks.STORAGE_BLOCKS_WHEAT, Tags.Items.STORAGE_BLOCKS_WHEAT) @@ -544,116 +513,28 @@ public abstract class ForgeBlockItemTagsProvider extends BlockItemTagsProvider { Blocks.STRIPPED_BAMBOO_BLOCK, Blocks.STRIPPED_BIRCH_LOG, Blocks.STRIPPED_CHERRY_LOG, + Blocks.STRIPPED_CRIMSON_STEM, Blocks.STRIPPED_DARK_OAK_LOG, Blocks.STRIPPED_JUNGLE_LOG, Blocks.STRIPPED_MANGROVE_LOG, Blocks.STRIPPED_OAK_LOG, - Blocks.STRIPPED_SPRUCE_LOG + Blocks.STRIPPED_PALE_OAK_LOG, + Blocks.STRIPPED_SPRUCE_LOG, + Blocks.STRIPPED_WARPED_STEM ); tag(Tags.Blocks.STRIPPED_WOODS, Tags.Items.STRIPPED_WOODS) .add( Blocks.STRIPPED_ACACIA_WOOD, Blocks.STRIPPED_BIRCH_WOOD, Blocks.STRIPPED_CHERRY_WOOD, + Blocks.STRIPPED_CRIMSON_HYPHAE, Blocks.STRIPPED_DARK_OAK_WOOD, Blocks.STRIPPED_JUNGLE_WOOD, Blocks.STRIPPED_MANGROVE_WOOD, Blocks.STRIPPED_OAK_WOOD, - Blocks.STRIPPED_SPRUCE_WOOD - ); - - // Backwards compat definitions for pre-1.21 legacy `forge:` tags. - // TODO: [Forge][Tags][Old] Remove backwards compat tag entries in 1.22 - tag(Legacy.Blocks.BARRELS, Legacy.Items.BARRELS) - .addTag(Legacy.Blocks.BARRELS_WOODEN); - - tag(Legacy.Blocks.CHESTS, Legacy.Items.CHESTS) - .addTags( - Tags.Blocks.CHESTS_ENDER, - Tags.Blocks.CHESTS_TRAPPED, - Legacy.Blocks.CHESTS_WOODEN - ); - - //copy(forgeBlockTagKey("glass/tinted"), forgeItemTagKey("glass/tinted")); - addColored(tag(Tags.Blocks.STAINED_GLASS, Tags.Items.STAINED_GLASS)::add, Tags.Blocks.GLASS, "{color}_stained_glass"); - addColored(tag(Tags.Blocks.STAINED_GLASS_PANES, Tags.Items.STAINED_GLASS_PANES)::add, Tags.Blocks.GLASS_PANES, "{color}_stained_glass_pane"); - - // tag(Tags.Blocks.GLASS, Tags.Items.GLASS, forgeBlockTagKey("glass"), forgeItemTagKey("glass")) // these are the same thing - tag(Tags.Blocks.GLASS, Tags.Items.GLASS) - .addTags( - Tags.Blocks.GLASS_COLORLESS, - Tags.Blocks.STAINED_GLASS, - Legacy.Blocks.GLASS_TINTED - ); - tag(Tags.Blocks.GLASS_COLORLESS, Tags.Items.GLASS_COLORLESS) - .add(Blocks.GLASS); - tag(Legacy.Blocks.GLASS_PANES, Legacy.Items.GLASS_PANES) - .addTags( - Legacy.Blocks.GLASS_PANES_COLORLESS, - Tags.Blocks.STAINED_GLASS_PANES - ); - tag(Legacy.Blocks.GLASS_PANES_COLORLESS, Legacy.Items.GLASS_PANES_COLORLESS) - .add(Blocks.GLASS_PANE); - tag(Legacy.Blocks.GLASS_TINTED, Legacy.Items.GLASS_TINTED) - .add(Blocks.TINTED_GLASS); - tag(Legacy.Blocks.OBSIDIAN, Legacy.Items.OBSIDIAN) - .add(Blocks.OBSIDIAN); - tag(Legacy.Blocks.ORES, Legacy.Items.ORES) - .addTags( - Tags.Blocks.ORES_COAL, - Tags.Blocks.ORES_COPPER, - Tags.Blocks.ORES_DIAMOND, - Tags.Blocks.ORES_EMERALD, - Tags.Blocks.ORES_GOLD, - Tags.Blocks.ORES_IRON, - Tags.Blocks.ORES_LAPIS, - Tags.Blocks.ORES_REDSTONE, - Legacy.Blocks.ORES_QUARTZ, - Legacy.Blocks.ORES_NETHERITE_SCRAP - ); - tag(Legacy.Blocks.SANDSTONE, Legacy.Items.SANDSTONE) - .add( - Blocks.SANDSTONE, - Blocks.CUT_SANDSTONE, - Blocks.CHISELED_SANDSTONE, - Blocks.SMOOTH_SANDSTONE, - Blocks.RED_SANDSTONE, - Blocks.CUT_RED_SANDSTONE, - Blocks.CHISELED_RED_SANDSTONE, - Blocks.SMOOTH_RED_SANDSTONE - ); - tag(Legacy.Blocks.STONE, Legacy.Items.STONE) - .add( - Blocks.ANDESITE, - Blocks.DIORITE, - Blocks.GRANITE, - Blocks.INFESTED_STONE, - Blocks.STONE, - Blocks.POLISHED_ANDESITE, - Blocks.POLISHED_DIORITE, - Blocks.POLISHED_GRANITE, - Blocks.DEEPSLATE, - Blocks.POLISHED_DEEPSLATE, - Blocks.INFESTED_DEEPSLATE, - Blocks.TUFF - ); - - tag(Legacy.Blocks.STORAGE_BLOCKS, Legacy.Items.STORAGE_BLOCKS) - .addTags( - Tags.Blocks.STORAGE_BLOCKS_AMETHYST, - Legacy.Blocks.STORAGE_BLOCKS_COAL, - Legacy.Blocks.STORAGE_BLOCKS_COPPER, - Legacy.Blocks.STORAGE_BLOCKS_DIAMOND, - Legacy.Blocks.STORAGE_BLOCKS_EMERALD, - Legacy.Blocks.STORAGE_BLOCKS_GOLD, - Legacy.Blocks.STORAGE_BLOCKS_IRON, - Legacy.Blocks.STORAGE_BLOCKS_LAPIS, - Tags.Blocks.STORAGE_BLOCKS_QUARTZ, - Legacy.Blocks.STORAGE_BLOCKS_RAW_COPPER, - Legacy.Blocks.STORAGE_BLOCKS_RAW_GOLD, - Legacy.Blocks.STORAGE_BLOCKS_RAW_IRON, - Legacy.Blocks.STORAGE_BLOCKS_REDSTONE, - Legacy.Blocks.STORAGE_BLOCKS_NETHERITE + Blocks.STRIPPED_PALE_OAK_WOOD, + Blocks.STRIPPED_SPRUCE_WOOD, + Blocks.STRIPPED_WARPED_HYPHAE ); } @@ -764,80 +645,4 @@ public abstract class ForgeBlockItemTagsProvider extends BlockItemTagsProvider { } }; } - - private static class Legacy { - @Deprecated - private static class Blocks { - private static TagKey tag(String path) { - return BlockTags.create(forgeRl(path)); - } - - public static final TagKey BARRELS = tag("barrels"); - public static final TagKey BARRELS_WOODEN = tag("barrels/wooden"); - public static final TagKey BOOKSHELVES = tag("bookshelves"); - public static final TagKey CHESTS = tag("chests"); - public static final TagKey CHESTS_WOODEN = tag("chests/wooden"); - public static final TagKey COBBLESTONE = tag("cobblestone"); - public static final TagKey GLASS_PANES = tag("glass_panes"); - public static final TagKey GLASS_PANES_COLORLESS = tag("glass_panes/colorless"); - public static final TagKey GLASS_SILICA = tag("glass/silica"); - public static final TagKey GLASS_TINTED = tag("glass/tinted"); - public static final TagKey OBSIDIAN = tag("obsidian"); - public static final TagKey ORES = tag("ores"); - public static final TagKey ORES_QUARTZ = tag("ores/quartz"); - public static final TagKey ORES_NETHERITE_SCRAP = tag("ores/netherite_scrap"); - public static final TagKey SANDSTONE = tag("sandstone"); - public static final TagKey STONE = tag("stone"); - public static final TagKey STORAGE_BLOCKS = tag("storage_blocks"); - public static final TagKey STORAGE_BLOCKS_COAL = tag("storage_blocks/coal"); - public static final TagKey STORAGE_BLOCKS_COPPER = tag("storage_blocks/copper"); - public static final TagKey STORAGE_BLOCKS_DIAMOND = tag("storage_blocks/diamond"); - public static final TagKey STORAGE_BLOCKS_EMERALD = tag("storage_blocks/emerald"); - public static final TagKey STORAGE_BLOCKS_GOLD = tag("storage_blocks/gold"); - public static final TagKey STORAGE_BLOCKS_IRON = tag("storage_blocks/iron"); - public static final TagKey STORAGE_BLOCKS_LAPIS = tag("storage_blocks/lapis"); - public static final TagKey STORAGE_BLOCKS_NETHERITE = tag("storage_blocks/netherite"); - public static final TagKey STORAGE_BLOCKS_RAW_COPPER = tag("storage_blocks/raw_copper"); - public static final TagKey STORAGE_BLOCKS_RAW_GOLD = tag("storage_blocks/raw_gold"); - public static final TagKey STORAGE_BLOCKS_RAW_IRON = tag("storage_blocks/raw_iron"); - public static final TagKey STORAGE_BLOCKS_REDSTONE = tag("storage_blocks/redstone"); - } - - @Deprecated - private static class Items { - private static TagKey tag(String path) { - return ItemTags.create(forgeRl(path)); - } - - public static final TagKey BARRELS = tag("barrels"); - public static final TagKey BARRELS_WOODEN = tag("barrels/wooden"); - public static final TagKey BOOKSHELVES = tag("bookshelves"); - public static final TagKey CHESTS = tag("chests"); - public static final TagKey CHESTS_WOODEN = tag("chests/wooden"); - public static final TagKey COBBLESTONE = tag("cobblestone"); - public static final TagKey GLASS_PANES = tag("glass_panes"); - public static final TagKey GLASS_PANES_COLORLESS = tag("glass_panes/colorless"); - public static final TagKey GLASS_SILICA = tag("glass/silica"); - public static final TagKey GLASS_TINTED = tag("glass/tinted"); - public static final TagKey OBSIDIAN = tag("obsidian"); - public static final TagKey ORES = tag("ores"); - public static final TagKey QUARTZ_ORES = tag("ores/quartz"); - public static final TagKey ORES_NEHTERITE_SCRAP = tag("ores/netherite_scrap"); - public static final TagKey SANDSTONE = tag("sandstone"); - public static final TagKey STONE = tag("stone"); - public static final TagKey STORAGE_BLOCKS = tag("storage_blocks"); - public static final TagKey STORAGE_BLOCKS_COAL = tag("storage_blocks/coal"); - public static final TagKey STORAGE_BLOCKS_COPPER = tag("storage_blocks/copper"); - public static final TagKey STORAGE_BLOCKS_DIAMOND = tag("storage_blocks/diamond"); - public static final TagKey STORAGE_BLOCKS_EMERALD = tag("storage_blocks/emerald"); - public static final TagKey STORAGE_BLOCKS_GOLD = tag("storage_blocks/gold"); - public static final TagKey STORAGE_BLOCKS_IRON = tag("storage_blocks/iron"); - public static final TagKey STORAGE_BLOCKS_LAPIS = tag("storage_blocks/lapis"); - public static final TagKey STORAGE_BLOCKS_NETHERITE = tag("storage_blocks/netherite"); - public static final TagKey STORAGE_BLOCKS_RAW_COPPER = tag("storage_blocks/raw_copper"); - public static final TagKey STORAGE_BLOCKS_RAW_GOLD = tag("storage_blocks/raw_gold"); - public static final TagKey STORAGE_BLOCKS_RAW_IRON = tag("storage_blocks/raw_iron"); - public static final TagKey STORAGE_BLOCKS_REDSTONE = tag("storage_blocks/redstone"); - } - } } diff --git a/src/main/java/net/minecraftforge/common/data/ForgeBlockTagsProvider.java b/src/main/java/net/minecraftforge/common/data/ForgeBlockTagsProvider.java index 1fc605d5ed..6f52809ecc 100644 --- a/src/main/java/net/minecraftforge/common/data/ForgeBlockTagsProvider.java +++ b/src/main/java/net/minecraftforge/common/data/ForgeBlockTagsProvider.java @@ -42,8 +42,6 @@ public final class ForgeBlockTagsProvider extends VanillaBlockTagsProvider { return ForgeBlockTagsProvider.this.tag(p_406922_); } }).run(); - tag(CHORUS_ADDITIONALLY_GROWS_ON) - .addTag(END_STONES); addColored(DYED, "{color}_banner"); addColored(DYED, "{color}_bed"); addColored(DYED, "{color}_candle"); @@ -73,7 +71,7 @@ public final class ForgeBlockTagsProvider extends VanillaBlockTagsProvider { String prefix = group.location().getPath().toUpperCase(Locale.ENGLISH) + '_'; for (var color : DyeColor.values()) { var key = Identifier.fromNamespaceAndPath("minecraft", pattern.replace("{color}", color.getName())); - TagKey tag = getForgeTag(prefix + color.getName()); + TagKey tag = getTag(prefix + color.getName()); var block = ForgeRegistries.BLOCKS.getValue(key); if (block == null || block == Blocks.AIR) throw new IllegalStateException("Unknown vanilla block: " + key); @@ -84,13 +82,13 @@ public final class ForgeBlockTagsProvider extends VanillaBlockTagsProvider { private static void addColoredTags(Consumer> consumer, TagKey group) { String prefix = group.location().getPath().toUpperCase(Locale.ENGLISH) + '_'; for (var color : DyeColor.values()) { - TagKey tag = getForgeTag(prefix + color.getName()); + TagKey tag = getTag(prefix + color.getName()); consumer.accept(tag); } } @SuppressWarnings("unchecked") - private static TagKey getForgeTag(String name) { + private static TagKey getTag(String name) { try { name = name.toUpperCase(Locale.ENGLISH); return (TagKey) Tags.Blocks.class.getDeclaredField(name).get(null); diff --git a/src/main/java/net/minecraftforge/common/data/ForgeEntityTypeTagsProvider.java b/src/main/java/net/minecraftforge/common/data/ForgeEntityTypeTagsProvider.java index 84fd9d5132..a936c23bbb 100644 --- a/src/main/java/net/minecraftforge/common/data/ForgeEntityTypeTagsProvider.java +++ b/src/main/java/net/minecraftforge/common/data/ForgeEntityTypeTagsProvider.java @@ -27,8 +27,7 @@ public final class ForgeEntityTypeTagsProvider extends EntityTypeTagsProvider { @Override public void addTags(HolderLookup.Provider lookupProvider) { tag(BOSSES) - .add(EntityType.ENDER_DRAGON, EntityType.WITHER) - .addOptionalTag(forgeTagKey("bosses")); + .add(EntityType.ENDER_DRAGON, EntityType.WITHER); tag(MINECARTS).add( EntityType.MINECART, EntityType.CHEST_MINECART, @@ -41,6 +40,8 @@ public final class ForgeEntityTypeTagsProvider extends EntityTypeTagsProvider { tag(BOATS).add( EntityType.ACACIA_BOAT, EntityType.ACACIA_CHEST_BOAT, + EntityType.BAMBOO_CHEST_RAFT, + EntityType.BAMBOO_RAFT, EntityType.BIRCH_BOAT, EntityType.BIRCH_CHEST_BOAT, EntityType.CHERRY_BOAT, @@ -58,12 +59,9 @@ public final class ForgeEntityTypeTagsProvider extends EntityTypeTagsProvider { EntityType.SPRUCE_BOAT, EntityType.SPRUCE_CHEST_BOAT ); + tag(ITEM_FRAMES).add(EntityType.ITEM_FRAME, EntityType.GLOW_ITEM_FRAME); tag(CAPTURING_NOT_SUPPORTED); tag(TELEPORTING_NOT_SUPPORTED); - - // Backwards compat definitions for pre-1.21 legacy `forge:` tags. - // TODO: Remove backwards compat tag entries in 1.22 - tag(forgeTagKey("bosses")).add(EntityType.ENDER_DRAGON, EntityType.WITHER); } private static TagKey> forgeTagKey(String path) { diff --git a/src/main/java/net/minecraftforge/common/data/ForgeFluidTagsProvider.java b/src/main/java/net/minecraftforge/common/data/ForgeFluidTagsProvider.java index 85ae5aebf3..af7df178c0 100644 --- a/src/main/java/net/minecraftforge/common/data/ForgeFluidTagsProvider.java +++ b/src/main/java/net/minecraftforge/common/data/ForgeFluidTagsProvider.java @@ -39,12 +39,7 @@ public final class ForgeFluidTagsProvider extends FluidTagsProvider { tag(RABBIT_STEW); tag(BEETROOT_SOUP); tag(HIDDEN_FROM_RECIPE_VIEWERS); - - // Backwards compat definitions for pre-1.21 legacy `forge:` tags. - // TODO: Remove backwards compat tag entries in 1.22 - tag(forgeTagKey("milk")) - .addOptional(ForgeMod.MILK.getKey().identifier()) - .addOptional(ForgeMod.FLOWING_MILK.getKey().identifier()); + tag(EXPERIENCE); } private static TagKey forgeTagKey(String path) { diff --git a/src/main/java/net/minecraftforge/common/data/ForgeItemTagsProvider.java b/src/main/java/net/minecraftforge/common/data/ForgeItemTagsProvider.java index d3b61c7d2a..05b5cb375b 100644 --- a/src/main/java/net/minecraftforge/common/data/ForgeItemTagsProvider.java +++ b/src/main/java/net/minecraftforge/common/data/ForgeItemTagsProvider.java @@ -41,9 +41,10 @@ public final class ForgeItemTagsProvider extends VanillaItemTagsProvider { } }).run(); tag(Tags.Items.BONES).add(Items.BONE); - tag(Tags.Items.BRICKS).addTags(Tags.Items.BRICKS_NORMAL, Tags.Items.BRICKS_NETHER); + tag(Tags.Items.BRICKS).addTags(Tags.Items.BRICKS_NORMAL, Tags.Items.BRICKS_NETHER, Tags.Items.BRICKS_RESIN); tag(Tags.Items.BRICKS_NORMAL).add(Items.BRICK); tag(Tags.Items.BRICKS_NETHER).add(Items.NETHER_BRICK); + tag(Tags.Items.BRICKS_RESIN).add(Items.RESIN_BRICK); tag(Tags.Items.BUCKETS_EMPTY).add(Items.BUCKET); tag(Tags.Items.BUCKETS_WATER).add(Items.WATER_BUCKET); tag(Tags.Items.BUCKETS_LAVA).add(Items.LAVA_BUCKET); @@ -51,6 +52,10 @@ public final class ForgeItemTagsProvider extends VanillaItemTagsProvider { tag(Tags.Items.BUCKETS_POWDER_SNOW).add(Items.POWDER_SNOW_BUCKET); tag(Tags.Items.BUCKETS_ENTITY_WATER).add(Items.AXOLOTL_BUCKET, Items.COD_BUCKET, Items.PUFFERFISH_BUCKET, Items.TADPOLE_BUCKET, Items.TROPICAL_FISH_BUCKET, Items.SALMON_BUCKET); tag(Tags.Items.BUCKETS).addTags(Tags.Items.BUCKETS_EMPTY, Tags.Items.BUCKETS_WATER, Tags.Items.BUCKETS_LAVA, Tags.Items.BUCKETS_MILK, Tags.Items.BUCKETS_POWDER_SNOW, Tags.Items.BUCKETS_ENTITY_WATER); + tag(Tags.Items.CLUMPS) + .addTag(Tags.Items.CLUMPS_RESIN); + tag(Tags.Items.CLUMPS_RESIN) + .add(Items.RESIN_CLUMP); tag(Tags.Items.CONCRETE_POWDERS) .add(Items.WHITE_CONCRETE_POWDER, Items.ORANGE_CONCRETE_POWDER, Items.MAGENTA_CONCRETE_POWDER, Items.LIGHT_BLUE_CONCRETE_POWDER, Items.YELLOW_CONCRETE_POWDER, Items.LIME_CONCRETE_POWDER, @@ -63,27 +68,37 @@ public final class ForgeItemTagsProvider extends VanillaItemTagsProvider { Tags.Items.CROPS_COCOA_BEAN, Tags.Items.CROPS_MELON, Tags.Items.CROPS_NETHER_WART, Tags.Items.CROPS_POTATO, Tags.Items.CROPS_PUMPKIN, Tags.Items.CROPS_SUGAR_CANE, Tags.Items.CROPS_WHEAT - ).addOptionalTag(forgeItemTagKey("crops")); + ); tag(Tags.Items.CROPS_BEETROOT) - .add(Items.BEETROOT) - .addOptionalTag(forgeItemTagKey("crops/beetroot")); + .add(Items.BEETROOT); tag(Tags.Items.CROPS_CACTUS).add(Items.CACTUS); tag(Tags.Items.CROPS_CARROT) - .add(Items.CARROT) - .addOptionalTag(forgeItemTagKey("crops/carrot")); + .add(Items.CARROT); tag(Tags.Items.CROPS_COCOA_BEAN).add(Items.COCOA_BEANS); tag(Tags.Items.CROPS_MELON).add(Items.MELON); tag(Tags.Items.CROPS_NETHER_WART) - .add(Items.NETHER_WART) - .addOptionalTag(forgeItemTagKey("crops/nether_wart")); + .add(Items.NETHER_WART); tag(Tags.Items.CROPS_POTATO) - .add(Items.POTATO) - .addOptionalTag(forgeItemTagKey("crops/potato")); + .add(Items.POTATO); tag(Tags.Items.CROPS_PUMPKIN).add(Items.PUMPKIN); tag(Tags.Items.CROPS_SUGAR_CANE).add(Items.SUGAR_CANE); tag(Tags.Items.CROPS_WHEAT) - .add(Items.WHEAT) - .addOptionalTag(forgeItemTagKey("crops/wheat")); + .add(Items.WHEAT); + tag(Tags.Items.DRINKS) + .addTags(Tags.Items.DRINKS_HONEY, Tags.Items.DRINKS_JUICE, Tags.Items.DRINKS_MAGIC, Tags.Items.DRINKS_MILK, + Tags.Items.DRINKS_OMINOUS, Tags.Items.DRINKS_WATER, Tags.Items.DRINKS_WATERY); + tag(Tags.Items.DRINKS_HONEY) + .add(Items.HONEY_BOTTLE); + tag(Tags.Items.DRINKS_JUICE); + tag(Tags.Items.DRINKS_MAGIC) + .add(Items.OMINOUS_BOTTLE, Items.POTION); + tag(Tags.Items.DRINKS_MILK) + .add(Items.MILK_BUCKET); + tag(Tags.Items.DRINKS_OMINOUS) + .add(Items.OMINOUS_BOTTLE); + tag(Tags.Items.DRINKS_WATER); + tag(Tags.Items.DRINKS_WATERY) + .add(Items.POTION); addColored(Tags.Items.DYED, "{color}_banner"); addColored(Tags.Items.DYED, "{color}_bed"); addColored(Tags.Items.DYED, "{color}_candle"); @@ -99,21 +114,17 @@ public final class ForgeItemTagsProvider extends VanillaItemTagsProvider { addColoredTags(tag(Tags.Items.DYED)::addTags, Tags.Items.DYED); tag(Tags.Items.DUSTS).addTags(Tags.Items.DUSTS_GLOWSTONE, Tags.Items.DUSTS_REDSTONE); tag(Tags.Items.DUSTS_GLOWSTONE) - .add(Items.GLOWSTONE_DUST) - .addOptionalTag(forgeItemTagKey("dusts/glowstone")); + .add(Items.GLOWSTONE_DUST); tag(Tags.Items.DUSTS_REDSTONE) - .add(Items.REDSTONE) - .addOptionalTag(forgeItemTagKey("dusts/redstone")); + .add(Items.REDSTONE); addColored(Tags.Items.DYES, "{color}_dye"); addColoredTags(tag(Tags.Items.DYES)::addTags, Tags.Items.DYES); - tag(Tags.Items.EGGS).add(Items.EGG); // forge:eggs + tag(Tags.Items.EGGS).add(Items.EGG, Items.BLUE_EGG, Items.BROWN_EGG); tag(Tags.Items.ENCHANTING_FUELS).addTag(Tags.Items.GEMS_LAPIS); // forge:enchanting_fuels tag(Tags.Items.ENDER_PEARLS) - .add(Items.ENDER_PEARL) - .addOptionalTag(forgeItemTagKey("ender_pearls")); + .add(Items.ENDER_PEARL); tag(Tags.Items.FEATHERS) - .add(Items.FEATHER) - .addOptionalTag(forgeItemTagKey("feathers")); + .add(Items.FEATHER); tag(Tags.Items.FERTILIZERS).add(Items.BONE_MEAL); tag(Tags.Items.FOODS_FRUIT).add(Items.APPLE, Items.GOLDEN_APPLE, Items.ENCHANTED_GOLDEN_APPLE, Items.CHORUS_FRUIT, Items.MELON_SLICE); tag(Tags.Items.FOODS_VEGETABLE).add(Items.CARROT, Items.GOLDEN_CARROT, Items.POTATO, Items.BEETROOT); @@ -126,7 +137,7 @@ public final class ForgeItemTagsProvider extends VanillaItemTagsProvider { tag(Tags.Items.FOODS_COOKED_FISH).add(Items.COOKED_COD, Items.COOKED_SALMON); tag(Tags.Items.FOODS_SOUP).add(Items.BEETROOT_SOUP, Items.MUSHROOM_STEW, Items.RABBIT_STEW, Items.SUSPICIOUS_STEW); tag(Tags.Items.FOODS_CANDY); - tag(Tags.Items.FOODS_PIE).add(Items.PUMPKIN_PIE).addOptionalTag(forgeItemTagKey("foods/pie")); + tag(Tags.Items.FOODS_PIE).add(Items.PUMPKIN_PIE); tag(Tags.Items.FOODS_EDIBLE_WHEN_PLACED).add(Items.CAKE); tag(Tags.Items.FOODS_FOOD_POISONING).add(Items.POISONOUS_POTATO, Items.PUFFERFISH, Items.SPIDER_EYE, Items.CHICKEN, Items.ROTTEN_FLESH); tag(Tags.Items.FOODS_GOLDEN).add(Items.GOLDEN_APPLE, Items.ENCHANTED_GOLDEN_APPLE, Items.GOLDEN_CARROT); @@ -143,98 +154,74 @@ public final class ForgeItemTagsProvider extends VanillaItemTagsProvider { ItemTags.PANDA_FOOD, ItemTags.PARROT_FOOD, ItemTags.PIG_FOOD, ItemTags.PIGLIN_FOOD, ItemTags.RABBIT_FOOD, ItemTags.SHEEP_FOOD, ItemTags.SNIFFER_FOOD, ItemTags.STRIDER_FOOD, ItemTags.TURTLE_FOOD, ItemTags.WOLF_FOOD); tag(Tags.Items.GEMS) - .addTags(Tags.Items.GEMS_AMETHYST, Tags.Items.GEMS_DIAMOND, Tags.Items.GEMS_EMERALD, Tags.Items.GEMS_LAPIS, Tags.Items.GEMS_PRISMARINE, Tags.Items.GEMS_QUARTZ) - .addOptionalTag(forgeItemTagKey("gems")); + .addTags(Tags.Items.GEMS_AMETHYST, Tags.Items.GEMS_DIAMOND, Tags.Items.GEMS_EMERALD, Tags.Items.GEMS_LAPIS, Tags.Items.GEMS_PRISMARINE, Tags.Items.GEMS_QUARTZ); tag(Tags.Items.GEMS_AMETHYST) - .add(Items.AMETHYST_SHARD) - .addOptionalTag(forgeItemTagKey("gems/amethyst")); + .add(Items.AMETHYST_SHARD); tag(Tags.Items.GEMS_DIAMOND) - .add(Items.DIAMOND) - .addOptionalTag(forgeItemTagKey("gems/diamond")); + .add(Items.DIAMOND); tag(Tags.Items.GEMS_EMERALD) - .add(Items.EMERALD) - .addOptionalTag(forgeItemTagKey("gems/emerald")); + .add(Items.EMERALD); tag(Tags.Items.GEMS_LAPIS) - .add(Items.LAPIS_LAZULI) - .addOptionalTag(forgeItemTagKey("gems/lapis")); + .add(Items.LAPIS_LAZULI); tag(Tags.Items.GEMS_PRISMARINE) - .add(Items.PRISMARINE_CRYSTALS) - .addOptionalTag(forgeItemTagKey("gems/prismarine")); + .add(Items.PRISMARINE_CRYSTALS); tag(Tags.Items.GEMS_QUARTZ) - .add(Items.QUARTZ) - .addOptionalTag(forgeItemTagKey("gems/quartz")); - tag(Tags.Items.GUNPOWDER).add(Items.GUNPOWDER); // forge:gunpowder + .add(Items.QUARTZ); + tag(Tags.Items.GUNPOWDERS).add(Items.GUNPOWDER); tag(Tags.Items.HIDDEN_FROM_RECIPE_VIEWERS); tag(Tags.Items.INGOTS) .addTags(Tags.Items.INGOTS_COPPER, Tags.Items.INGOTS_GOLD, Tags.Items.INGOTS_IRON, Tags.Items.INGOTS_NETHERITE); - //.addOptionalTag(forgeItemTagKey("ingots")); // can't add because it would contain the contents of forge:ingots/brick and forge:ingots/nether_brick which are not in the c namespace tag(Tags.Items.INGOTS_COPPER) - .add(Items.COPPER_INGOT) - .addOptionalTag(forgeItemTagKey("ingots/copper")); + .add(Items.COPPER_INGOT); tag(Tags.Items.INGOTS_GOLD) - .add(Items.GOLD_INGOT) - .addOptionalTag(forgeItemTagKey("ingots/gold")); + .add(Items.GOLD_INGOT); tag(Tags.Items.INGOTS_IRON) - .add(Items.IRON_INGOT) - .addOptionalTag(forgeItemTagKey("ingots/iron")); + .add(Items.IRON_INGOT); tag(Tags.Items.INGOTS_NETHERITE) - .add(Items.NETHERITE_INGOT) - .addOptionalTag(forgeItemTagKey("ingots/netherite")); + .add(Items.NETHERITE_INGOT); tag(Tags.Items.LEATHERS) - .add(Items.LEATHER) - .addOptionalTag(forgeItemTagKey("leather")); + .add(Items.LEATHER); tag(Tags.Items.MUSHROOMS) - .add(Items.BROWN_MUSHROOM, Items.RED_MUSHROOM) - .addOptionalTag(forgeItemTagKey("mushrooms")); + .add(Items.BROWN_MUSHROOM, Items.RED_MUSHROOM); tag(Tags.Items.MUSIC_DISCS).add(Items.MUSIC_DISC_13, Items.MUSIC_DISC_CAT, Items.MUSIC_DISC_BLOCKS, Items.MUSIC_DISC_CHIRP, Items.MUSIC_DISC_FAR, Items.MUSIC_DISC_MALL, Items.MUSIC_DISC_MELLOHI, Items.MUSIC_DISC_STAL, Items.MUSIC_DISC_STRAD, Items.MUSIC_DISC_WARD, Items.MUSIC_DISC_11, Items.MUSIC_DISC_WAIT, Items.MUSIC_DISC_OTHERSIDE, Items.MUSIC_DISC_5, Items.MUSIC_DISC_PIGSTEP, Items.MUSIC_DISC_RELIC, Items.MUSIC_DISC_CREATOR, Items.MUSIC_DISC_CREATOR_MUSIC_BOX, - Items.MUSIC_DISC_PRECIPICE); + Items.MUSIC_DISC_PRECIPICE, Items.MUSIC_DISC_LAVA_CHICKEN, Items.MUSIC_DISC_TEARS); tag(Tags.Items.NETHER_STARS) - .add(Items.NETHER_STAR) - .addOptionalTag(forgeItemTagKey("nether_stars")); + .add(Items.NETHER_STAR); tag(Tags.Items.NUGGETS) - .addTags(Tags.Items.NUGGETS_GOLD, Tags.Items.NUGGETS_IRON, Tags.Items.NUGGETS_COPPER) - .addOptionalTag(forgeItemTagKey("nuggets")); + .addTags(Tags.Items.NUGGETS_GOLD, Tags.Items.NUGGETS_IRON, Tags.Items.NUGGETS_COPPER); tag(Tags.Items.NUGGETS_COPPER) .add(Items.COPPER_NUGGET); tag(Tags.Items.NUGGETS_IRON) - .add(Items.IRON_NUGGET) - .addOptionalTag(forgeItemTagKey("nuggets/iron")); + .add(Items.IRON_NUGGET); tag(Tags.Items.NUGGETS_GOLD) - .add(Items.GOLD_NUGGET) - .addOptionalTag(forgeItemTagKey("nuggets/gold")); + .add(Items.GOLD_NUGGET); + tag(Tags.Items.POTIONS_BOTTLE).add(Items.POTION, Items.SPLASH_POTION, Items.LINGERING_POTION); + tag(Tags.Items.POTIONS).addTags(Tags.Items.POTIONS_BOTTLE); tag(Tags.Items.RAW_MATERIALS) - .addTags(Tags.Items.RAW_MATERIALS_COPPER, Tags.Items.RAW_MATERIALS_GOLD, Tags.Items.RAW_MATERIALS_IRON) - .addOptionalTag(forgeItemTagKey("raw_materials")); + .addTags(Tags.Items.RAW_MATERIALS_COPPER, Tags.Items.RAW_MATERIALS_GOLD, Tags.Items.RAW_MATERIALS_IRON); tag(Tags.Items.RAW_MATERIALS_COPPER) - .add(Items.RAW_COPPER) - .addOptionalTag(forgeItemTagKey("raw_materials/copper")); + .add(Items.RAW_COPPER); tag(Tags.Items.RAW_MATERIALS_GOLD) - .add(Items.RAW_GOLD) - .addOptionalTag(forgeItemTagKey("raw_materials/gold")); + .add(Items.RAW_GOLD); tag(Tags.Items.RAW_MATERIALS_IRON) - .add(Items.RAW_IRON) - .addOptionalTag(forgeItemTagKey("raw_materials/iron")); + .add(Items.RAW_IRON); tag(Tags.Items.RODS) - .addTags(Tags.Items.RODS_WOODEN, Tags.Items.RODS_BLAZE, Tags.Items.RODS_BREEZE) - .addOptionalTag(forgeItemTagKey("rods")); + .addTags(Tags.Items.RODS_WOODEN, Tags.Items.RODS_BLAZE, Tags.Items.RODS_BREEZE); tag(Tags.Items.RODS_BLAZE) - .add(Items.BLAZE_ROD) - .addOptionalTag(forgeItemTagKey("rods/blaze")); + .add(Items.BLAZE_ROD); tag(Tags.Items.RODS_BREEZE).add(Items.BREEZE_ROD); tag(Tags.Items.RODS_WOODEN) - .add(Items.STICK) - .addOptionalTag(forgeItemTagKey("rods/wooden")); + .add(Items.STICK); tag(Tags.Items.SEEDS).addTags(Tags.Items.SEEDS_BEETROOT, Tags.Items.SEEDS_MELON, Tags.Items.SEEDS_PUMPKIN, Tags.Items.SEEDS_WHEAT); tag(Tags.Items.SEEDS_BEETROOT).add(Items.BEETROOT_SEEDS); tag(Tags.Items.SEEDS_MELON).add(Items.MELON_SEEDS); tag(Tags.Items.SEEDS_PUMPKIN).add(Items.PUMPKIN_SEEDS); tag(Tags.Items.SEEDS_WHEAT).add(Items.WHEAT_SEEDS); tag(Tags.Items.SLIME_BALLS) - .add(Items.SLIME_BALL) - .addOptionalTag(forgeItemTagKey("slimeballs")); + .add(Items.SLIME_BALL); tag(Tags.Items.SHULKER_BOXES) .add(Items.SHULKER_BOX, Items.WHITE_SHULKER_BOX, Items.ORANGE_SHULKER_BOX, Items.MAGENTA_SHULKER_BOX, Items.LIGHT_BLUE_SHULKER_BOX, Items.YELLOW_SHULKER_BOX, @@ -243,8 +230,7 @@ public final class ForgeItemTagsProvider extends VanillaItemTagsProvider { Items.BLUE_SHULKER_BOX, Items.BROWN_SHULKER_BOX, Items.GREEN_SHULKER_BOX, Items.RED_SHULKER_BOX, Items.BLACK_SHULKER_BOX); tag(Tags.Items.STRINGS) - .add(Items.STRING) - .addOptionalTag(forgeItemTagKey("strings")); + .add(Items.STRING); tag(Tags.Items.VILLAGER_JOB_SITES).add( Items.BARREL, Items.BLAST_FURNACE, Items.BREWING_STAND, Items.CARTOGRAPHY_TABLE, Items.CAULDRON, Items.COMPOSTER, Items.FLETCHING_TABLE, Items.GRINDSTONE, @@ -252,37 +238,61 @@ public final class ForgeItemTagsProvider extends VanillaItemTagsProvider { // Tools and Armors tag(Tags.Items.TOOLS_SHIELD) - .add(Items.SHIELD) - .addOptionalTag(forgeItemTagKey("tools/shields")); + .add(Items.SHIELD); tag(Tags.Items.TOOLS_BOW) - .add(Items.BOW) - .addOptionalTag(forgeItemTagKey("tools/bows")); + .add(Items.BOW); tag(Tags.Items.TOOLS_BRUSH).add(Items.BRUSH); tag(Tags.Items.TOOLS_CROSSBOW) - .add(Items.CROSSBOW) - .addOptionalTag(forgeItemTagKey("tools/crossbows")); + .add(Items.CROSSBOW); tag(Tags.Items.TOOLS_FISHING_ROD) - .add(Items.FISHING_ROD) - .addOptionalTag(forgeItemTagKey("tools/fishing_rods")); + .add(Items.FISHING_ROD); tag(Tags.Items.TOOLS_SHEAR) - .add(Items.SHEARS) - .addOptionalTag(forgeItemTagKey("tools/shears")); + .add(Items.SHEARS); tag(Tags.Items.TOOLS_SPEAR).add(Items.TRIDENT); tag(Tags.Items.TOOLS_MACE).add(Items.MACE); tag(Tags.Items.TOOLS_IGNITER).add(Items.FLINT_AND_STEEL); - tag(Tags.Items.MINING_TOOL_TOOLS).add(Items.WOODEN_PICKAXE, Items.STONE_PICKAXE, Items.IRON_PICKAXE, Items.GOLDEN_PICKAXE, Items.DIAMOND_PICKAXE, Items.NETHERITE_PICKAXE); + tag(Tags.Items.MINING_TOOL_TOOLS).add(Items.WOODEN_PICKAXE, Items.STONE_PICKAXE, Items.COPPER_PICKAXE, Items.IRON_PICKAXE, Items.GOLDEN_PICKAXE, Items.DIAMOND_PICKAXE, Items.NETHERITE_PICKAXE); tag(Tags.Items.MELEE_WEAPON_TOOLS).add( Items.MACE, Items.TRIDENT, - Items.WOODEN_SWORD, Items.STONE_SWORD, Items.GOLDEN_SWORD, Items.IRON_SWORD, Items.DIAMOND_SWORD, Items.NETHERITE_SWORD, - Items.WOODEN_AXE, Items.STONE_AXE, Items.GOLDEN_AXE, Items.IRON_AXE, Items.DIAMOND_AXE, Items.NETHERITE_AXE + Items.WOODEN_SWORD, Items.STONE_SWORD, Items.COPPER_SWORD, Items.GOLDEN_SWORD, Items.IRON_SWORD, Items.DIAMOND_SWORD, Items.NETHERITE_SWORD, + Items.WOODEN_AXE, Items.STONE_AXE, Items.COPPER_AXE, Items.GOLDEN_AXE, Items.IRON_AXE, Items.DIAMOND_AXE, Items.NETHERITE_AXE ); tag(Tags.Items.RANGED_WEAPON_TOOLS).add(Items.BOW, Items.CROSSBOW, Items.TRIDENT); + tag(Tags.Items.TOOLS_WRENCH); tag(Tags.Items.TOOLS) .addTags(ItemTags.AXES, ItemTags.HOES, ItemTags.PICKAXES, ItemTags.SHOVELS, ItemTags.SWORDS) - .addTags(Tags.Items.TOOLS_BOW, Tags.Items.TOOLS_BRUSH, Tags.Items.TOOLS_CROSSBOW, Tags.Items.TOOLS_FISHING_ROD, Tags.Items.TOOLS_SHEAR, Tags.Items.TOOLS_IGNITER, Tags.Items.TOOLS_SHIELD, Tags.Items.TOOLS_SPEAR, Tags.Items.TOOLS_MACE, Tags.Items.MINING_TOOL_TOOLS, Tags.Items.MELEE_WEAPON_TOOLS, Tags.Items.RANGED_WEAPON_TOOLS); + .addTags(Tags.Items.TOOLS_BOW, Tags.Items.TOOLS_BRUSH, Tags.Items.TOOLS_CROSSBOW, Tags.Items.TOOLS_FISHING_ROD, Tags.Items.TOOLS_SHEAR, Tags.Items.TOOLS_IGNITER, Tags.Items.TOOLS_SHIELD, Tags.Items.TOOLS_SPEAR, Tags.Items.TOOLS_MACE, Tags.Items.MINING_TOOL_TOOLS, Tags.Items.MELEE_WEAPON_TOOLS, Tags.Items.RANGED_WEAPON_TOOLS, Tags.Items.TOOLS_WRENCH); + tag(Tags.Items.ARMORS_HORSE) + .add( + Items.COPPER_HORSE_ARMOR, + Items.DIAMOND_HORSE_ARMOR, + Items.GOLDEN_HORSE_ARMOR, + Items.IRON_HORSE_ARMOR, + Items.LEATHER_HORSE_ARMOR, + Items.NETHERITE_HORSE_ARMOR + ); + tag(Tags.Items.ARMORS_NAUTILUS) + .add( + Items.COPPER_NAUTILUS_ARMOR, + Items.DIAMOND_NAUTILUS_ARMOR, + Items.GOLDEN_NAUTILUS_ARMOR, + Items.IRON_NAUTILUS_ARMOR, + Items.NETHERITE_NAUTILUS_ARMOR + ); + tag(Tags.Items.ARMORS_HUMANOID) + .add(Items.CHAINMAIL_BOOTS, Items.CHAINMAIL_CHESTPLATE, Items.CHAINMAIL_HELMET, Items.CHAINMAIL_LEGGINGS, + Items.COPPER_BOOTS, Items.COPPER_CHESTPLATE, Items.COPPER_HELMET, Items.COPPER_LEGGINGS, + Items.DIAMOND_BOOTS, Items.DIAMOND_CHESTPLATE, Items.DIAMOND_HELMET, Items.DIAMOND_LEGGINGS, + Items.GOLDEN_BOOTS, Items.GOLDEN_CHESTPLATE, Items.GOLDEN_HELMET, Items.GOLDEN_LEGGINGS, + Items.IRON_BOOTS, Items.IRON_CHESTPLATE, Items.IRON_HELMET, Items.IRON_LEGGINGS, + Items.LEATHER_BOOTS, Items.LEATHER_CHESTPLATE, Items.LEATHER_HELMET, Items.LEATHER_LEGGINGS, + Items.NETHERITE_BOOTS, Items.NETHERITE_CHESTPLATE, Items.NETHERITE_HELMET, Items.NETHERITE_LEGGINGS, + Items.TURTLE_HELMET); + tag(Tags.Items.ARMORS_WOLF) + .add(Items.WOLF_ARMOR); tag(Tags.Items.ARMORS) - .addTags(ItemTags.HEAD_ARMOR, ItemTags.CHEST_ARMOR, ItemTags.LEG_ARMOR, ItemTags.FOOT_ARMOR) - .addOptionalTag(forgeItemTagKey("armors")); + .addTags(ItemTags.HEAD_ARMOR, ItemTags.CHEST_ARMOR, ItemTags.LEG_ARMOR, ItemTags.FOOT_ARMOR, + Tags.Items.ARMORS_HORSE, Tags.Items.ARMORS_NAUTILUS, Tags.Items.ARMORS_WOLF, Tags.Items.ARMORS_HUMANOID); tag(Tags.Items.ENCHANTABLES) .addTags( ItemTags.ARMOR_ENCHANTABLE, @@ -300,88 +310,27 @@ public final class ForgeItemTagsProvider extends VanillaItemTagsProvider { ItemTags.DURABILITY_ENCHANTABLE, ItemTags.VANISHING_ENCHANTABLE ); - - tag(forgeItemTagKey("bones")).add(Items.BONE); - // Backwards compat definitions for pre-1.21 legacy `forge:` tags. - // TODO: Remove backwards compat tag entries in 1.22 - tag(forgeItemTagKey("crops")) - .addTags(forgeItemTagKey("crops/beetroot"), forgeItemTagKey("crops/carrot"), forgeItemTagKey("crops/nether_wart"), - forgeItemTagKey("crops/potato"), forgeItemTagKey("crops/wheat")); - tag(forgeItemTagKey("crops/beetroot")).add(Items.BEETROOT); - tag(forgeItemTagKey("crops/carrot")).add(Items.CARROT); - tag(forgeItemTagKey("crops/nether_wart")).add(Items.NETHER_WART); - tag(forgeItemTagKey("crops/potato")).add(Items.POTATO); - tag(forgeItemTagKey("crops/wheat")).add(Items.WHEAT); - tag(forgeItemTagKey("foods/pie")).add(Items.PUMPKIN_PIE); - tag(forgeItemTagKey("dusts")).addTags(forgeItemTagKey("dusts/glowstone"), Tags.Items.DUSTS_PRISMARINE, forgeItemTagKey("dusts/redstone")); - tag(forgeItemTagKey("dusts/glowstone")).add(Items.GLOWSTONE_DUST); - tag(forgeItemTagKey("dusts/prismarine")).add(Items.PRISMARINE_SHARD); - tag(forgeItemTagKey("dusts/redstone")).add(Items.REDSTONE); - addColored(tag(forgeItemTagKey("dyes"))::addTags, forgeItemTagKey("dyes"), "{color}_dye"); - tag(forgeItemTagKey("eggs")).add(Items.EGG); - tag(forgeItemTagKey("enchanting_fuels")).addTag(forgeItemTagKey("gems/lapis")); - tag(forgeItemTagKey("ender_pearls")).add(Items.ENDER_PEARL); - tag(forgeItemTagKey("feathers")).add(Items.FEATHER); - tag(forgeItemTagKey("gems")) - .addTags(forgeItemTagKey("gems/amethyst"), forgeItemTagKey("gems/diamond"), forgeItemTagKey("gems/emerald"), - forgeItemTagKey("gems/lapis"), forgeItemTagKey("gems/prismarine"), forgeItemTagKey("gems/quartz")); - tag(forgeItemTagKey("gems/amethyst")).add(Items.AMETHYST_SHARD); - tag(forgeItemTagKey("gems/diamond")).add(Items.DIAMOND); - tag(forgeItemTagKey("gems/emerald")).add(Items.EMERALD); - tag(forgeItemTagKey("gems/lapis")).add(Items.LAPIS_LAZULI); - tag(forgeItemTagKey("gems/prismarine")).add(Items.PRISMARINE_CRYSTALS); - tag(forgeItemTagKey("gems/quartz")).add(Items.QUARTZ); - tag(forgeItemTagKey("gunpowder")).add(Items.GUNPOWDER); - tag(forgeItemTagKey("heads")).add(Items.CREEPER_HEAD, Items.DRAGON_HEAD, Items.PLAYER_HEAD, Items.SKELETON_SKULL, Items.WITHER_SKELETON_SKULL, Items.ZOMBIE_HEAD); - tag(forgeItemTagKey("ingots")) - .addTags(forgeItemTagKey("ingots/brick"), forgeItemTagKey("ingots/copper"), forgeItemTagKey("ingots/gold"), - forgeItemTagKey("ingots/iron"), forgeItemTagKey("ingots/netherite"), forgeItemTagKey("ingots/nether_brick")); - tag(forgeItemTagKey("ingots/brick")).add(Items.BRICK); - tag(forgeItemTagKey("ingots/copper")).add(Items.COPPER_INGOT); - tag(forgeItemTagKey("ingots/gold")).add(Items.GOLD_INGOT); - tag(forgeItemTagKey("ingots/iron")).add(Items.IRON_INGOT); - tag(forgeItemTagKey("ingots/netherite")).add(Items.NETHERITE_INGOT); - tag(forgeItemTagKey("ingots/nether_brick")).add(Items.NETHER_BRICK); - tag(forgeItemTagKey("leather")).add(Items.LEATHER); - tag(forgeItemTagKey("mushrooms")).add(Items.BROWN_MUSHROOM, Items.RED_MUSHROOM); - tag(forgeItemTagKey("nether_stars")).add(Items.NETHER_STAR); - tag(forgeItemTagKey("nuggets")).addTags(forgeItemTagKey("nuggets/iron"), forgeItemTagKey("nuggets/gold")); - tag(forgeItemTagKey("nuggets/iron")).add(Items.IRON_NUGGET); - tag(forgeItemTagKey("nuggets/gold")).add(Items.GOLD_NUGGET); - tag(forgeItemTagKey("raw_materials")).addTags(forgeItemTagKey("raw_materials/copper"), forgeItemTagKey("raw_materials/gold"), forgeItemTagKey("raw_materials/iron")); - tag(forgeItemTagKey("raw_materials/copper")).add(Items.RAW_COPPER); - tag(forgeItemTagKey("raw_materials/gold")).add(Items.RAW_GOLD); - tag(forgeItemTagKey("raw_materials/iron")).add(Items.RAW_IRON); - tag(forgeItemTagKey("rods")).addTags(forgeItemTagKey("rods/blaze"), forgeItemTagKey("rods/wooden")); - tag(forgeItemTagKey("rods/blaze")).add(Items.BLAZE_ROD); - tag(forgeItemTagKey("rods/wooden")).add(Items.STICK); - tag(Tags.Items.SEEDS).addTags(Tags.Items.SEEDS_BEETROOT, Tags.Items.SEEDS_MELON, Tags.Items.SEEDS_PUMPKIN, Tags.Items.SEEDS_WHEAT); + tag(Tags.Items.SEEDS) + .addTags( + Tags.Items.SEEDS_BEETROOT, Tags.Items.SEEDS_MELON, Tags.Items.SEEDS_PUMPKIN, + Tags.Items.SEEDS_WHEAT, Tags.Items.SEEDS_PITCHER_PLANT, Tags.Items.SEEDS_TORCHFLOWER); tag(Tags.Items.SEEDS_BEETROOT).add(Items.BEETROOT_SEEDS); tag(Tags.Items.SEEDS_MELON).add(Items.MELON_SEEDS); tag(Tags.Items.SEEDS_PUMPKIN).add(Items.PUMPKIN_SEEDS); tag(Tags.Items.SEEDS_WHEAT).add(Items.WHEAT_SEEDS); - tag(forgeItemTagKey("shears")).add(Items.SHEARS); // yes, it's forge:shears not forge:tools/shears - tag(forgeItemTagKey("slimeballs")).add(Items.SLIME_BALL); - tag(forgeItemTagKey("string")).add(Items.STRING); - tag(forgeItemTagKey("tools/shields")).add(Items.SHIELD); - tag(forgeItemTagKey("tools/bows")).add(Items.BOW); - tag(forgeItemTagKey("tools/crossbows")).add(Items.CROSSBOW); - tag(forgeItemTagKey("tools/fishing_rods")).add(Items.FISHING_ROD); - tag(forgeItemTagKey("tools/tridents")).add(Items.TRIDENT); - tag(forgeItemTagKey("tools")) - .addTags(ItemTags.SWORDS, ItemTags.AXES, ItemTags.PICKAXES, ItemTags.SHOVELS, ItemTags.HOES) - .addTags(forgeItemTagKey("tools/shields"), forgeItemTagKey("tools/bows"), forgeItemTagKey("tools/crossbows"), forgeItemTagKey("tools/fishing_rods"), forgeItemTagKey("tools/tridents")); - tag(Tags.Items.ARMORS_HELMETS).add(Items.LEATHER_HELMET, Items.TURTLE_HELMET, Items.CHAINMAIL_HELMET, Items.IRON_HELMET, Items.GOLDEN_HELMET, Items.DIAMOND_HELMET, Items.NETHERITE_HELMET); - tag(Tags.Items.ARMORS_CHESTPLATES).add(Items.LEATHER_CHESTPLATE, Items.CHAINMAIL_CHESTPLATE, Items.IRON_CHESTPLATE, Items.GOLDEN_CHESTPLATE, Items.DIAMOND_CHESTPLATE, Items.NETHERITE_CHESTPLATE); - tag(Tags.Items.ARMORS_LEGGINGS).add(Items.LEATHER_LEGGINGS, Items.CHAINMAIL_LEGGINGS, Items.IRON_LEGGINGS, Items.GOLDEN_LEGGINGS, Items.DIAMOND_LEGGINGS, Items.NETHERITE_LEGGINGS); - tag(Tags.Items.ARMORS_BOOTS).add(Items.LEATHER_BOOTS, Items.CHAINMAIL_BOOTS, Items.IRON_BOOTS, Items.GOLDEN_BOOTS, Items.DIAMOND_BOOTS, Items.NETHERITE_BOOTS); - tag(forgeItemTagKey("armors")).addTags(Tags.Items.ARMORS_HELMETS, Tags.Items.ARMORS_CHESTPLATES, Tags.Items.ARMORS_LEGGINGS, Tags.Items.ARMORS_BOOTS); + tag(Tags.Items.SEEDS_PITCHER_PLANT).add(Items.PITCHER_POD); + tag(Tags.Items.SEEDS_TORCHFLOWER).add(Items.TORCHFLOWER_SEEDS); + + tag(Tags.Items.BONES).add(Items.BONE); + // Backwards compat definitions for pre-1.21 legacy `forge:` tags. + // TODO: Remove backwards compat tag entries in 1.22 + addColored(tag(forgeItemTagKey("dyes"))::addTags, forgeItemTagKey("dyes"), "{color}_dye"); } private void addColored(TagKey group, String pattern) { String prefix = group.location().getPath().toUpperCase(Locale.ENGLISH) + '_'; for (DyeColor color : DyeColor.values()) { - Identifier key = Identifier.fromNamespaceAndPath("minecraft", pattern.replace("{color}", color.getName())); + Identifier key = Identifier.withDefaultNamespace(pattern.replace("{color}", color.getName())); TagKey tag = getForgeItemTag(prefix + color.getName()); Item item = BuiltInRegistries.ITEM.getValue(key); if (item == null || item == Items.AIR) @@ -393,11 +342,11 @@ public final class ForgeItemTagsProvider extends VanillaItemTagsProvider { private void addColored(Consumer> consumer, TagKey group, String pattern) { String prefix = group.location().getPath() + '/'; for (DyeColor color : DyeColor.values()) { - Identifier key = Identifier.fromNamespaceAndPath("minecraft", pattern.replace("{color}", color.getName())); + Identifier key = Identifier.withDefaultNamespace(pattern.replace("{color}", color.getName())); TagKey tag = forgeItemTagKey(prefix + color.getName()); Item item = ForgeRegistries.ITEMS.getValue(key); if (item == null || item == Items.AIR) - throw new IllegalStateException("Unknown vanilla item: " + key.toString()); + throw new IllegalStateException("Unknown vanilla item: " + key); tag(tag).add(item); consumer.accept(tag); } diff --git a/src/main/java/net/minecraftforge/common/data/ForgeLootTableProvider.java b/src/main/java/net/minecraftforge/common/data/ForgeLootTableProvider.java index b0238a8b72..2e8fe381cd 100644 --- a/src/main/java/net/minecraftforge/common/data/ForgeLootTableProvider.java +++ b/src/main/java/net/minecraftforge/common/data/ForgeLootTableProvider.java @@ -34,7 +34,7 @@ import com.google.common.collect.ImmutableList; import net.minecraft.world.level.storage.loot.LootPool; import net.minecraft.world.level.storage.loot.LootTable; -import net.minecraft.world.level.storage.loot.ValidationContext; +import net.minecraft.world.level.storage.loot.ValidationContextSource; import net.minecraft.world.level.storage.loot.entries.CompositeEntryBase; import net.minecraft.world.level.storage.loot.entries.LootPoolEntryContainer; @@ -42,19 +42,19 @@ import net.minecraft.world.level.storage.loot.entries.LootPoolEntryContainer; * Currently used only for replacing shears item to shears_dig tool action */ public final class ForgeLootTableProvider extends LootTableProvider { - private static final String POOLS = "f_7915" + "6_"; // LootTable.Builder.pools - private static final String ENTRIES = "f_7902" + "3_"; // LootPool.entries - private static final String CONDITIONS = "f_7902" + "4_"; // LootPool.conditions - private static final String CHILDREN = "f_7942" + "8_"; // CompositeEntryBase.children - private static final String ENTRY_CONDITION = "f_7963" + "6_"; // LootPoolEntryContainer.conditions - private static final String TERMS = "f_28560" + "9_"; // CompositeLootItemCondition.terms + private static final String POOLS = "pools"; // LootTable.Builder.pools + private static final String ENTRIES = "entries"; // LootPool.entries + private static final String CONDITIONS = "conditions"; // LootPool.conditions + private static final String CHILDREN = "children"; // CompositeEntryBase.children + private static final String ENTRY_CONDITION = "conditions"; // LootPoolEntryContainer.conditions + private static final String TERMS = "terms"; // CompositeLootItemCondition.terms public ForgeLootTableProvider(PackOutput pack, CompletableFuture lookup) { super(pack, Set.of(), VanillaLootTableProvider.create(pack, lookup).getTables(), lookup); } @Override - protected void validate(Registry map, ValidationContext validationcontext, ProblemReporter report) { + protected void validate(Registry map, ValidationContextSource validationcontext, ProblemReporter report) { // Do not validate against all registered loot tables } diff --git a/src/main/java/net/minecraftforge/common/data/ForgeRecipeProvider.java b/src/main/java/net/minecraftforge/common/data/ForgeRecipeProvider.java index 85c5903508..d5f8b1113d 100644 --- a/src/main/java/net/minecraftforge/common/data/ForgeRecipeProvider.java +++ b/src/main/java/net/minecraftforge/common/data/ForgeRecipeProvider.java @@ -85,8 +85,8 @@ public final class ForgeRecipeProvider extends VanillaRecipeProvider { replace(Items.DIAMOND, Tags.Items.GEMS_DIAMOND); replace(Items.EMERALD, Tags.Items.GEMS_EMERALD); replace(Items.CHEST, Tags.Items.CHESTS_WOODEN); - replace(Blocks.COBBLESTONE, Tags.Items.COBBLESTONE_NORMAL); - replace(Blocks.COBBLED_DEEPSLATE, Tags.Items.COBBLESTONE_DEEPSLATE); + replace(Blocks.COBBLESTONE, Tags.Items.COBBLESTONES_NORMAL); + replace(Blocks.COBBLED_DEEPSLATE, Tags.Items.COBBLESTONES_DEEPSLATE); replace(Items.STRING, Tags.Items.STRINGS); exclude(getConversionRecipeName(Blocks.WHITE_WOOL, Items.STRING)); diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeBlock.java b/src/main/java/net/minecraftforge/common/extensions/IForgeBlock.java index f4a1159e12..ebbcb7009e 100644 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeBlock.java +++ b/src/main/java/net/minecraftforge/common/extensions/IForgeBlock.java @@ -9,6 +9,7 @@ import java.util.Optional; import java.util.function.BiConsumer; import net.minecraft.client.Camera; +import net.minecraft.client.renderer.block.BlockAndTintGetter; import net.minecraft.util.RandomSource; import net.minecraft.world.attribute.EnvironmentAttributes; import net.minecraft.world.entity.Entity; @@ -39,13 +40,11 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.pathfinder.WalkNodeEvaluator; import net.minecraft.world.phys.Vec3; import net.minecraft.server.level.ServerLevel; -import net.minecraftforge.client.ForgeHooksClient; import net.minecraftforge.client.model.data.ModelData; import net.minecraftforge.client.model.data.ModelDataManager; import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.IPlantable; -import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Explosion; import net.minecraft.world.level.Level; @@ -54,7 +53,6 @@ import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.common.ToolAction; import net.minecraftforge.common.ToolActions; -import net.minecraftforge.fml.loading.FMLEnvironment; import org.jetbrains.annotations.Nullable; @SuppressWarnings("deprecation") @@ -356,8 +354,8 @@ public interface IForgeBlock { * @return True if the soil should be considered fertile. */ default boolean isFertile(BlockState state, BlockGetter level, BlockPos pos) { - if (state.getBlock() instanceof FarmBlock) - return state.getValue(FarmBlock.MOISTURE) > 0; + if (state.getBlock() instanceof FarmlandBlock) + return state.getValue(FarmlandBlock.MOISTURE) > 0; return false; } @@ -501,7 +499,7 @@ public interface IForgeBlock { */ @Nullable default PathType getBlockPathType(BlockState state, BlockGetter level, BlockPos pos, @Nullable Mob mob) { - return state.getBlock() == Blocks.LAVA ? PathType.LAVA : state.isBurning(level, pos) ? PathType.DAMAGE_FIRE : null; + return state.getBlock() == Blocks.LAVA ? PathType.LAVA : state.isBurning(level, pos) ? PathType.FIRE : null; } /** @@ -519,8 +517,8 @@ public interface IForgeBlock { */ @Nullable default PathType getAdjacentBlockPathType(BlockState state, BlockGetter level, BlockPos pos, @Nullable Mob mob, PathType originalType) { - if (state.is(Blocks.SWEET_BERRY_BUSH)) return PathType.DANGER_OTHER; - else if (WalkNodeEvaluator.isBurningBlock(state)) return PathType.DANGER_FIRE; + if (state.is(Blocks.SWEET_BERRY_BUSH)) return PathType.DAMAGING_IN_NEIGHBOR; + else if (WalkNodeEvaluator.isBurningBlock(state)) return PathType.FIRE_IN_NEIGHBOR; else return null; } @@ -782,42 +780,6 @@ public interface IForgeBlock { } } - /** - * Whether this block hides the neighbors face pointed towards by the given direction. - *

- * This method should only be used for blocks you don't control, for your own blocks override - * {@link Block#skipRendering(BlockState, BlockState, Direction)} on the respective block instead - *

- * WARNING: This method is likely to be called from a worker thread! If you want to retrieve a - * {@link net.minecraft.world.level.block.entity.BlockEntity} from the given level, make sure to use - * {@link net.minecraftforge.common.extensions.IForgeBlockGetter#getExistingBlockEntity(BlockPos)} to not - * accidentally create a new or delete an old {@link net.minecraft.world.level.block.entity.BlockEntity} - * off of the main thread as this would cause a write operation to the given {@link BlockGetter} and cause - * a CME in the process. Any other direct or indirect write operation to the {@link BlockGetter} will have - * the same outcome. - * - * @param level The world - * @param pos The blocks position in the world - * @param state The blocks {@link BlockState} - * @param neighborState The neighboring blocks {@link BlockState} - * @param dir The direction towards the neighboring block - */ - default boolean hidesNeighborFace(BlockGetter level, BlockPos pos, BlockState state, BlockState neighborState, Direction dir) { - return false; - } - - /** - * Whether this block allows a neighboring block to hide the face of this block it touches. - * If this returns true, {@link IForgeBlockState#hidesNeighborFace(BlockGetter, BlockPos, BlockState, Direction)} - * will be called on the neighboring block. - */ - default boolean supportsExternalFaceHiding(BlockState state) { - if (FMLEnvironment.dist.isClient()) { - return !ForgeHooksClient.isBlockInSolidLayer(state); - } - return true; - } - /** * Called after the {@link BlockState} at the given {@link BlockPos} was changed and neighbors were updated. * This method is called on the server and client side. diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeBlockState.java b/src/main/java/net/minecraftforge/common/extensions/IForgeBlockState.java index fac9e6576d..496168cb6e 100644 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeBlockState.java +++ b/src/main/java/net/minecraftforge/common/extensions/IForgeBlockState.java @@ -9,6 +9,7 @@ import java.util.Optional; import java.util.function.BiConsumer; import net.minecraft.client.Camera; +import net.minecraft.client.renderer.block.BlockAndTintGetter; import net.minecraft.util.RandomSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Mob; @@ -29,7 +30,6 @@ import net.minecraft.server.level.ServerLevel; import net.minecraftforge.common.IPlantable; import net.minecraft.core.Direction; -import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Explosion; import net.minecraft.world.level.Level; @@ -628,31 +628,6 @@ public interface IForgeBlockState { return self().getBlock().canConnectRedstone(self(), level, pos, direction); } - /** - * Whether this block hides the neighbors face pointed towards by the given direction. - *

- * This method should only be used for blocks you don't control, for your own blocks override - * {@link net.minecraft.world.level.block.Block#skipRendering(BlockState, BlockState, Direction)} - * on the respective block instead - * - * @param level The world - * @param pos The blocks position in the world - * @param neighborState The neighboring blocks {@link BlockState} - * @param dir The direction towards the neighboring block - */ - default boolean hidesNeighborFace(BlockGetter level, BlockPos pos, BlockState neighborState, Direction dir) { - return self().getBlock().hidesNeighborFace(level, pos, self(), neighborState, dir); - } - - /** - * Whether this block allows a neighboring block to hide the face of this block it touches. - * If this returns true, {@link IForgeBlockState#hidesNeighborFace(BlockGetter, BlockPos, BlockState, Direction)} - * will be called on the neighboring block. - */ - default boolean supportsExternalFaceHiding() { - return self().getBlock().supportsExternalFaceHiding(self()); - } - /** * Called after the {@link BlockState} at the given {@link BlockPos} was changed and neighbors were updated. * This method is called on the server and client side. diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeEntity.java b/src/main/java/net/minecraftforge/common/extensions/IForgeEntity.java index d7d4976ef7..e342d011f7 100644 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeEntity.java +++ b/src/main/java/net/minecraftforge/common/extensions/IForgeEntity.java @@ -9,6 +9,7 @@ import java.util.Collection; import java.util.function.BiPredicate; import net.minecraft.sounds.SoundEvent; +import net.minecraft.tags.TagKey; import net.minecraft.util.ProblemReporter; import net.minecraft.world.entity.boss.enderdragon.EnderDragon; import net.minecraft.world.entity.player.Player; @@ -22,6 +23,7 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; +import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.storage.TagValueInput; import net.minecraft.world.level.storage.TagValueOutput; @@ -124,24 +126,21 @@ public interface IForgeEntity extends ICapabilitySerializable { * * @return True if this entity is being tracked by a world */ - // TODO: rename in 1.19 to isAddedToLevel - boolean isAddedToWorld(); + boolean isAddedToLevel(); /** * Called after the entity has been added to the world's * ticking list. Can be overriden, but needs to call super * to prevent MC-136995. */ - // TODO: rename in 1.19 to onAddedToLevel - void onAddedToWorld(); + void onAddedToLevel(); /** * Called after the entity has been removed to the world's * ticking list. Can be overriden, but needs to call super * to prevent MC-136995. */ - // TODO: rename in 1.19 to onRemovedFromLevel - void onRemovedFromWorld(); + void onRemovedFromLevel(); /** * Revives an entity that has been removed from a world. @@ -186,7 +185,9 @@ public interface IForgeEntity extends ICapabilitySerializable { * @param type the type of the fluid * @return the height of the fluid compared to the entity */ - double getFluidTypeHeight(FluidType type); + default double getFluidTypeHeight(FluidType type) { + return self().getFluidInteraction().getFluidHeight(type); + } /** * Returns the fluid type which is the highest on the bounding box of @@ -195,7 +196,9 @@ public interface IForgeEntity extends ICapabilitySerializable { * @return the fluid type which is the highest on the bounding box of * the entity */ - FluidType getMaxHeightFluidType(); + default FluidType getMaxHeightFluidType() { + return self().getFluidInteraction().getMaxHeightFluid(); + } /** * Returns whether the entity is within the fluid type of the state. diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeFluidState.java b/src/main/java/net/minecraftforge/common/extensions/IForgeFluidState.java index ab853ddf22..1e3822b3d7 100644 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeFluidState.java +++ b/src/main/java/net/minecraftforge/common/extensions/IForgeFluidState.java @@ -157,4 +157,15 @@ public interface IForgeFluidState { default boolean canExtinguish(BlockGetter getter, BlockPos pos) { return self().getType().canExtinguish(self(), getter, pos); } + + /** + * Returns the Entity specific flow velocity of this fluid. + * @param getter the getter which can get the fluid + * @param pos the position of the fluid + * @param entity The entity current being effected by this fluid + * @return How much to move the player, this will + */ + default Vec3 getFlow(final BlockGetter level, final BlockPos pos, final Entity entity) { + return self().getFlow(level, pos); + } } diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeItem.java b/src/main/java/net/minecraftforge/common/extensions/IForgeItem.java index 2f3cadae81..ec27cbdac2 100644 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeItem.java +++ b/src/main/java/net/minecraftforge/common/extensions/IForgeItem.java @@ -24,6 +24,7 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemStackTemplate; import net.minecraft.world.item.Items; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.item.crafting.RecipeType; @@ -158,7 +159,7 @@ public interface IForgeItem { * @return The resulting ItemStack */ @SuppressWarnings("deprecation") - default ItemStack getCraftingRemainder(ItemStack itemStack) { + default ItemStackTemplate getCraftingRemainder(ItemStack itemStack) { return self().getCraftingRemainder(); } @@ -325,26 +326,6 @@ public interface IForgeItem { return false; } - /** - * Checks whether an item can be enchanted with a certain enchantment. This - * applies specifically to enchanting an item in the enchanting table and is - * called when retrieving the list of possible enchantments for an item. - * Enchantments may additionally (or exclusively) be doing their own checks in - * {@link Enchantment#canApplyAtEnchantingTable(ItemStack)}; - * check the individual implementation for reference. By default this will check - * if the enchantment type is valid for this item type. - * - * @param stack the item stack to be enchanted - * @param enchantment the enchantment to be applied - * @return true if the enchantment can be applied to this item - * - * @deprecated Use {@link IForgeItemStack#canApplyAtEnchantingTable(Holder)} - */ - @Deprecated(forRemoval = true, since = "1.21.3") - default boolean canApplyAtEnchantingTable(ItemStack stack, Enchantment enchantment) { - return enchantment.isPrimaryItem(stack); - } - /** * Checks whether an item can be enchanted with a certain enchantment. This * applies specifically to enchanting an item in the enchanting table and is @@ -359,7 +340,7 @@ public interface IForgeItem { * @return true if the enchantment can be applied to this item */ default boolean canApplyAtEnchantingTable(ItemStack stack, Holder enchantment) { - return canApplyAtEnchantingTable(stack, enchantment.value()); + return enchantment.value().isPrimaryItem(stack); } /** @@ -452,21 +433,6 @@ public interface IForgeItem { } */ - /** - * Can this Item disable a shield - * - * @param stack The ItemStack - * @param shield The shield in question - * @param entity The LivingEntity holding the shield - * @param attacker The LivingEntity holding the ItemStack - * @return True if this ItemStack can disable the shield in question. - * @deprecated Overriding this does nothing! Use {@link net.minecraft.core.component.DataComponents#WEAPON}. - */ - @Deprecated(forRemoval = true, since = "1.21.5") - default boolean canDisableShield(ItemStack stack, ItemStack shield, LivingEntity entity, LivingEntity attacker) { - return attacker.getSecondsToDisableBlocking() > 0.0F; - } - /** * @return the fuel burn time for this itemStack in a furnace. Return 0 to make * it not act as a fuel. Return -1 to let the default vanilla logic @@ -615,20 +581,9 @@ public interface IForgeItem { return false; } - /** - * @return The Default Capability Provider for this item, if any. - * - * @deprecated Use the itemstack-sensitive version instead: {@link #getCapabilityProvider(ItemStack)} - */ - @Nullable - @Deprecated(forRemoval = true, since = "1.21.4") - default ICapabilityProvider getCapabilityProvider() { - return null; - } - /** @return The Default Capability Provider for this item, if any, accounting for the given itemstack. */ @Nullable default ICapabilityProvider getCapabilityProvider(ItemStack stack) { - return this.getCapabilityProvider(); + return null; } } diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeItemStack.java b/src/main/java/net/minecraftforge/common/extensions/IForgeItemStack.java index f4a07d73a2..a0f5be3279 100644 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeItemStack.java +++ b/src/main/java/net/minecraftforge/common/extensions/IForgeItemStack.java @@ -22,6 +22,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemStackTemplate; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.stats.Stats; import net.minecraft.world.InteractionResult; @@ -49,9 +50,9 @@ public interface IForgeItemStack { * ItemStack sensitive version of {@link Item#getCraftingRemainder()}. * Returns a full ItemStack instance of the result. * - * @return The resulting ItemStack + * @return The resulting ItemStackTemplate */ - default ItemStack getCraftingRemainder() { + default ItemStackTemplate getCraftingRemainder() { return self().getItem().getCraftingRemainder(self()); } @@ -117,25 +118,6 @@ public interface IForgeItemStack { return self().getItem().shouldCauseBlockBreakReset(self(), newStack); } - /** - * Checks whether an item can be enchanted with a certain enchantment. This - * applies specifically to enchanting an item in the enchanting table and is - * called when retrieving the list of possible enchantments for an item. - * Enchantments may additionally (or exclusively) be doing their own checks in - * {@link Enchantment#canApplyAtEnchantingTable(ItemStack)}; - * check the individual implementation for reference. By default this will check - * if the enchantment type is valid for this item type. - * - * @param enchantment the enchantment to be applied - * @return true if the enchantment can be applied to this item - * - * @deprecated Use {@link #canApplyAtEnchantingTable(Holder)} - */ - @Deprecated(forRemoval = true, since = "1.21.3") - default boolean canApplyAtEnchantingTable(Enchantment enchantment) { - return self().getItem().canApplyAtEnchantingTable(self(), enchantment); - } - /** * Checks whether an item can be enchanted with a certain enchantment. This * applies specifically to enchanting an item in the enchanting table and is @@ -167,18 +149,6 @@ public interface IForgeItemStack { return self().getItem().getEquipmentSlot(self()); } - /** - * Can this Item disable a shield - * - * @param shield The shield in question - * @param entity The LivingEntity holding the shield - * @param attacker The LivingEntity holding the ItemStack - * @return True if this ItemStack can disable the shield in question. - */ - default boolean canDisableShield(ItemStack shield, LivingEntity entity, LivingEntity attacker) { - return self().getItem().canDisableShield(self(), shield, entity, attacker); - } - /** * Called when a entity tries to play the 'swing' animation. * diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeLevelSummary.java b/src/main/java/net/minecraftforge/common/extensions/IForgeLevelSummary.java index a2ebdcdf6e..94f4679de3 100644 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeLevelSummary.java +++ b/src/main/java/net/minecraftforge/common/extensions/IForgeLevelSummary.java @@ -22,6 +22,6 @@ public interface IForgeLevelSummary { // NOTE: Because CorruptedLevelSummary and SymlinkLevelSummary can have null settings, we need to check it var settings = this.self().getSettings(); - return settings != null && settings.getLifecycle().equals(com.mojang.serialization.Lifecycle.experimental()); + return settings != null && settings.lifecycle().equals(com.mojang.serialization.Lifecycle.experimental()); } } diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeRawTagBuilder.java b/src/main/java/net/minecraftforge/common/extensions/IForgeRawTagBuilder.java index 8fd641d365..105e999129 100644 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeRawTagBuilder.java +++ b/src/main/java/net/minecraftforge/common/extensions/IForgeRawTagBuilder.java @@ -11,7 +11,7 @@ import net.minecraft.tags.TagEntry; public interface IForgeRawTagBuilder { default TagBuilder getRawBuilder() { - return (TagBuilder) this; + return (TagBuilder)this; } /** @@ -43,11 +43,4 @@ public interface IForgeRawTagBuilder { default TagBuilder removeTag(final Identifier tagID, final String source) { return this.remove(TagEntry.tag(tagID), source); } - - /** - * Shorthand version of {@code replace(true)} - */ - default TagBuilder replace() { - return this.getRawBuilder().replace(true); - } } diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeTagAppender.java b/src/main/java/net/minecraftforge/common/extensions/IForgeTagAppender.java index f861f2d107..f8754549bf 100644 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeTagAppender.java +++ b/src/main/java/net/minecraftforge/common/extensions/IForgeTagAppender.java @@ -80,7 +80,7 @@ public interface IForgeTagAppender { } default TagAppender replace(boolean value) { - self().getInternalBuilder().replace(value); + self().getInternalBuilder().setReplace(value); return self(); } diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeTransformation.java b/src/main/java/net/minecraftforge/common/extensions/IForgeTransformation.java index 246c8fc36f..3545074d78 100644 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeTransformation.java +++ b/src/main/java/net/minecraftforge/common/extensions/IForgeTransformation.java @@ -26,7 +26,7 @@ public interface IForgeTransformation { * @see Transformation#identity() */ default boolean isIdentity() { - return self().equals(Transformation.identity()); + return self().equals(Transformation.IDENTITY); } /** @@ -89,7 +89,7 @@ public interface IForgeTransformation { */ default Transformation applyOrigin(Vector3f origin) { Transformation transform = self(); - if (transform.isIdentity()) return Transformation.identity(); + if (transform.isIdentity()) return Transformation.IDENTITY; Matrix4f ret = transform.getMatrixCopy(); Matrix4f tmp = new Matrix4f().translation(origin.x(), origin.y(), origin.z()); diff --git a/src/main/java/net/minecraftforge/common/loot/CanToolPerformAction.java b/src/main/java/net/minecraftforge/common/loot/CanToolPerformAction.java index 62129a0ed5..93d53ae5a4 100644 --- a/src/main/java/net/minecraftforge/common/loot/CanToolPerformAction.java +++ b/src/main/java/net/minecraftforge/common/loot/CanToolPerformAction.java @@ -11,10 +11,10 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.util.context.ContextKey; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemStackTemplate; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; -import net.minecraft.world.level.storage.loot.predicates.LootItemConditionType; import net.minecraftforge.common.ToolAction; import org.jetbrains.annotations.NotNull; @@ -27,11 +27,10 @@ public record CanToolPerformAction(ToolAction action) implements LootItemConditi public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(b -> b.group( ToolAction.CODEC.fieldOf("action").forGetter(CanToolPerformAction::action) ).apply(b, CanToolPerformAction::new)); - public static final LootItemConditionType TYPE = new LootItemConditionType(CODEC); @Override - public @NotNull LootItemConditionType getType() { - return TYPE; + public @NotNull MapCodec codec() { + return CODEC; } @Override @@ -41,8 +40,13 @@ public record CanToolPerformAction(ToolAction action) implements LootItemConditi @Override public boolean test(LootContext ctx) { - ItemStack itemstack = ctx.getOptionalParameter(LootContextParams.TOOL); - return itemstack != null && itemstack.canPerformAction(this.action); + var instance = ctx.getOptionalParameter(LootContextParams.TOOL); + ItemStack item = null; + if (instance instanceof ItemStack stack) + item = stack; + else if (instance instanceof ItemStackTemplate template) + item = template.create(); + return item != null && item.canPerformAction(this.action); } public static LootItemCondition.Builder canToolPerformAction(ToolAction action) { diff --git a/src/main/java/net/minecraftforge/common/loot/LootTableIdCondition.java b/src/main/java/net/minecraftforge/common/loot/LootTableIdCondition.java index fa757062b4..625d1688c4 100644 --- a/src/main/java/net/minecraftforge/common/loot/LootTableIdCondition.java +++ b/src/main/java/net/minecraftforge/common/loot/LootTableIdCondition.java @@ -8,7 +8,6 @@ package net.minecraftforge.common.loot; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.world.level.storage.loot.predicates.LootItemConditionType; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; import net.minecraft.resources.Identifier; @@ -19,13 +18,11 @@ public record LootTableIdCondition(Identifier id) implements LootItemCondition { ).apply(b, LootTableIdCondition::new)); - // TODO Forge Registry at some point? - public static final LootItemConditionType TYPE = new LootItemConditionType(CODEC); public static final Identifier UNKNOWN_LOOT_TABLE = Identifier.fromNamespaceAndPath("forge", "unknown_loot_table"); @Override - public LootItemConditionType getType() { - return TYPE; + public MapCodec codec() { + return CODEC; } @Override diff --git a/src/main/java/net/minecraftforge/common/property/Properties.java b/src/main/java/net/minecraftforge/common/property/Properties.java index 8dfd551567..dfa87da024 100644 --- a/src/main/java/net/minecraftforge/common/property/Properties.java +++ b/src/main/java/net/minecraftforge/common/property/Properties.java @@ -5,12 +5,11 @@ package net.minecraftforge.common.property; -import net.minecraft.client.resources.model.ModelState; +import net.minecraft.client.renderer.block.dispatch.ModelState; import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraftforge.client.model.data.ModelProperty; -public class Properties -{ +public class Properties { /** * Property indicating if the model should be rendered in the static renderer or in the TESR. AnimationTESR sets it to false. */ diff --git a/src/main/java/net/minecraftforge/common/util/BrainBuilder.java b/src/main/java/net/minecraftforge/common/util/BrainBuilder.java index a70248b34d..365d7d6fee 100644 --- a/src/main/java/net/minecraftforge/common/util/BrainBuilder.java +++ b/src/main/java/net/minecraftforge/common/util/BrainBuilder.java @@ -56,7 +56,7 @@ public class BrainBuilder { public BrainBuilder(Brain ignoredBrain) {} public Brain.Provider provider() { - return Brain.provider(this.memoryTypes, this.sensorTypes); + return Brain.provider(this.sensorTypes); } public Collection> getMemoryTypes() { @@ -166,8 +166,8 @@ public class BrainBuilder { } @ApiStatus.Internal - public Brain makeBrain(Dynamic dynamic) { - Brain brain = Brain.provider(this.memoryTypes, this.sensorTypes).makeBrain(dynamic); + public Brain makeBrain(final E entity, final Brain.Packed packedBrain) { + Brain brain = Brain.provider(this.sensorTypes).makeBrain(entity, packedBrain); brain.copyFromBuilder(this); return brain; } diff --git a/src/main/java/net/minecraftforge/common/util/CenterChunkPosComparator.java b/src/main/java/net/minecraftforge/common/util/CenterChunkPosComparator.java index 3a7e2733fc..d8891d6dc3 100644 --- a/src/main/java/net/minecraftforge/common/util/CenterChunkPosComparator.java +++ b/src/main/java/net/minecraftforge/common/util/CenterChunkPosComparator.java @@ -9,58 +9,40 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.level.ChunkPos; // Sorter to load nearby chunks first -public class CenterChunkPosComparator implements java.util.Comparator -{ +public class CenterChunkPosComparator implements java.util.Comparator { private final int x; private final int z; - public CenterChunkPosComparator(ServerPlayer entityplayer) - { - x = (int) entityplayer.getX() >> 4; - z = (int) entityplayer.getZ() >> 4; + public CenterChunkPosComparator(ServerPlayer entityplayer) { + x = (int)entityplayer.getX() >> 4; + z = (int)entityplayer.getZ() >> 4; } @Override - public int compare(ChunkPos a, ChunkPos b) - { + public int compare(ChunkPos a, ChunkPos b) { if (a.equals(b)) - { return 0; - } // Subtract current position to set center point - int ax = a.x - this.x; - int az = a.z - this.z; - int bx = b.x - this.x; - int bz = b.z - this.z; + int ax = a.x() - this.x; + int az = a.z() - this.z; + int bx = b.x() - this.x; + int bz = b.z() - this.z; int result = ((ax - bx) * (ax + bx)) + ((az - bz) * (az + bz)); if (result != 0) - { return result; - } - if (ax < 0) - { + if (ax < 0) { if (bx < 0) - { return bz - az; - } else - { return -1; - } - } - else - { + } else { if (bx < 0) - { return 1; - } else - { return az - bz; - } } } } diff --git a/src/main/java/net/minecraftforge/common/util/INBTBuilder.java b/src/main/java/net/minecraftforge/common/util/INBTBuilder.java index 7584d25d4d..ddd2dd53ef 100644 --- a/src/main/java/net/minecraftforge/common/util/INBTBuilder.java +++ b/src/main/java/net/minecraftforge/common/util/INBTBuilder.java @@ -5,12 +5,10 @@ package net.minecraftforge.common.util; -import java.util.List; import java.util.UUID; import net.minecraft.core.UUIDUtil; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtUtils; import net.minecraft.nbt.Tag; public interface INBTBuilder { @@ -65,46 +63,16 @@ public interface INBTBuilder { return this; } - /** @deprecated Use {@link #putByteArray(String, byte...)} */ - @Deprecated(forRemoval = true, since = "1.21.5") - public Builder putByteArray(String key, List value) { - var array = new byte[value.size()]; - for (var i = 0; i < value.size(); i++) - array[i] = value.get(i); - - return this.putByteArray(key, array); - } - public Builder putIntArray(String key, int... value) { tag.putIntArray(key, value); return this; } - /** @deprecated Use {@link #putIntArray(String, int...)} */ - @Deprecated(forRemoval = true, since = "1.21.5") - public Builder putIntArray(String key, List value) { - var array = new int[value.size()]; - for (var i = 0; i < value.size(); i++) - array[i] = value.get(i); - - return this.putIntArray(key, array); - } - public Builder putLongArray(String key, long... value) { tag.putLongArray(key, value); return this; } - /** @deprecated Use {@link #putLongArray(String, long...)} */ - @Deprecated(forRemoval = true, since = "1.21.5") - public Builder putLongArray(String key, List value) { - var array = new long[value.size()]; - for (var i = 0; i < value.size(); i++) - array[i] = value.get(i); - - return this.putLongArray(key, array); - } - public Builder put(String key, boolean value) { tag.putBoolean(key, value); return this; diff --git a/src/main/java/net/minecraftforge/common/util/LevelCapabilityData.java b/src/main/java/net/minecraftforge/common/util/LevelCapabilityData.java index ad6fa6586d..7c90f067aa 100644 --- a/src/main/java/net/minecraftforge/common/util/LevelCapabilityData.java +++ b/src/main/java/net/minecraftforge/common/util/LevelCapabilityData.java @@ -6,6 +6,7 @@ package net.minecraftforge.common.util; import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.Identifier; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.saveddata.SavedData; import net.minecraft.world.level.saveddata.SavedDataType; @@ -18,7 +19,7 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; public class LevelCapabilityData extends SavedData { public static SavedDataType type(ServerLevel level) { return new SavedDataType( - "capabilities", + Identifier.fromNamespaceAndPath("forge", "capabilities"), () -> new LevelCapabilityData(level), RecordCodecBuilder.create(b -> b.group( diff --git a/src/main/java/net/minecraftforge/common/util/TransformationHelper.java b/src/main/java/net/minecraftforge/common/util/TransformationHelper.java index 45382997b0..b06bc1a23c 100644 --- a/src/main/java/net/minecraftforge/common/util/TransformationHelper.java +++ b/src/main/java/net/minecraftforge/common/util/TransformationHelper.java @@ -96,10 +96,10 @@ public final class TransformationHelper { public static Transformation slerp(Transformation one, Transformation that, float progress) { return new Transformation( - lerp(one.getTranslation(), that.getTranslation(), progress), - slerp(one.getLeftRotation(), that.getLeftRotation(), progress), - lerp(one.getScale(), that.getScale(), progress), - slerp(one.getRightRotation(), that.getRightRotation(), progress) + lerp(one.translation(), that.translation(), progress), + slerp(one.leftRotation(), that.leftRotation(), progress), + lerp(one.scale(), that.scale(), progress), + slerp(one.rightRotation(), that.rightRotation(), progress) ); } @@ -116,7 +116,7 @@ public final class TransformationHelper { if (json.isJsonPrimitive() && json.getAsJsonPrimitive().isString()) { String transform = json.getAsString(); if (transform.equals("identity")) - return Transformation.identity(); + return Transformation.IDENTITY; throw new JsonParseException("TRSR: unknown default string: " + transform); } diff --git a/src/main/java/net/minecraftforge/common/world/ForgeChunkManager.java b/src/main/java/net/minecraftforge/common/world/ForgeChunkManager.java deleted file mode 100644 index 41878130bd..0000000000 --- a/src/main/java/net/minecraftforge/common/world/ForgeChunkManager.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) Forge Development LLC and contributors - * SPDX-License-Identifier: LGPL-2.1-only - */ - -package net.minecraftforge.common.world; - -import com.mojang.datafixers.util.Pair; -import it.unimi.dsi.fastutil.longs.LongSet; -import java.util.Map; -import java.util.UUID; -import net.minecraft.world.entity.Entity; -import net.minecraft.core.BlockPos; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.TicketType; -import org.jetbrains.annotations.Unmodifiable; - -/** @deprecated Vanilla now handles all forced chunks using its new {@link TicketType} system. */ -@Deprecated(forRemoval = true, since = "1.21.5") -public class ForgeChunkManager { - private static T error() { - throw new UnsupportedOperationException("Mod used ForgeChnkManager when they should use vanilla's TicketType system, see Level.getChunkSource().addTicketWithRadius"); - } - - /** @deprecated Use Vanilla's {@link TicketType} system */ - public static void setForcedChunkLoadingCallback(String modId, LoadingValidationCallback callback) { error(); } - - /** @deprecated Use Vanilla's {@link TicketType} system */ - public static boolean hasForcedChunks(ServerLevel level) { return error(); } - - /** @deprecated Use Vanilla's {@link TicketType} system */ - public static boolean forceChunk(ServerLevel level, String modId, BlockPos owner, int chunkX, int chunkZ, boolean add, boolean ticking) { return error(); } - - /** @deprecated Use Vanilla's {@link TicketType} system */ - public static boolean forceChunk(ServerLevel level, String modId, Entity owner, int chunkX, int chunkZ, boolean add, boolean ticking) { return error(); } - - /** @deprecated Use Vanilla's {@link TicketType} system */ - public static boolean forceChunk(ServerLevel level, String modId, UUID owner, int chunkX, int chunkZ, boolean add, boolean ticking) { return error(); } - - /** @deprecated Use Vanilla's {@link TicketType} system */ - @FunctionalInterface - @Deprecated(forRemoval = true, since = "1.21.5") - public interface LoadingValidationCallback { - void validateTickets(ServerLevel level, TicketHelper ticketHelper); - } - - /** @deprecated Use Vanilla's {@link TicketType} system */ - @Deprecated(forRemoval = true, since = "1.21.5") - public static class TicketHelper { - private TicketHelper() { } - /** @deprecated Use Vanilla's {@link TicketType} system */ - public @Unmodifiable Map> getBlockTickets() { return error(); } - /** @deprecated Use Vanilla's {@link TicketType} system */ - public @Unmodifiable Map> getEntityTickets() { return error(); } - /** @deprecated Use Vanilla's {@link TicketType} system */ - public void removeAllTickets(BlockPos owner) { error(); } - /** @deprecated Use Vanilla's {@link TicketType} system */ - public void removeAllTickets(UUID owner) { error(); } - /** @deprecated Use Vanilla's {@link TicketType} system */ - public void removeTicket(BlockPos owner, long chunk, boolean ticking) { error(); } - /** @deprecated Use Vanilla's {@link TicketType} system */ - public void removeTicket(UUID owner, long chunk, boolean ticking) { error(); } - } - - /** @deprecated Use Vanilla's {@link TicketType} system */ - @Deprecated(forRemoval = true, since = "1.21.5") - public static class TicketOwner implements Comparable { - private TicketOwner() { } - @Override public int compareTo(TicketOwner o) { return error(); } - } - - /** @deprecated Use Vanilla's {@link TicketType} system */ - @Deprecated(forRemoval = true, since = "1.21.5") - public static class TicketTracker { - public Map getChunks() { return error(); } - public boolean isEmpty() { return error(); } - } -} diff --git a/src/main/java/net/minecraftforge/data/event/GatherDataEvent.java b/src/main/java/net/minecraftforge/data/event/GatherDataEvent.java index 5bce113110..5f99a9daef 100644 --- a/src/main/java/net/minecraftforge/data/event/GatherDataEvent.java +++ b/src/main/java/net/minecraftforge/data/event/GatherDataEvent.java @@ -55,8 +55,6 @@ public final class GatherDataEvent implements IModBusEvent { public boolean includeClient() { return this.config.client; } public boolean includeDev() { return this.config.dev; } public boolean includeReports() { return this.config.reports; } - @Deprecated(forRemoval = true, since = "1.21.5") // Validation is always enabled, check things as you deem fit. - public boolean validate() { return this.config.validate; } public static final class DataGeneratorConfig { private final Set mods; @@ -67,13 +65,11 @@ public final class GatherDataEvent implements IModBusEvent { private final boolean client; private final boolean dev; private final boolean reports; - @Deprecated(forRemoval = true, since = "1.21.5") // Validation is always enabled, check things as you deem fit. - private final boolean validate; private final boolean flat; private final List generators = new ArrayList<>(); public DataGeneratorConfig(final Set mods, final Path path, final Collection inputs, final CompletableFuture lookupProvider, - final boolean server, final boolean client, final boolean dev, final boolean reports, final boolean validate, final boolean flat) { + final boolean server, final boolean client, final boolean dev, final boolean reports, final boolean flat) { this.mods = mods; this.path = path; this.inputs = inputs; @@ -82,7 +78,6 @@ public final class GatherDataEvent implements IModBusEvent { this.client = client; this.dev = dev; this.reports = reports; - this.validate = validate; this.flat = flat; } @@ -100,7 +95,7 @@ public final class GatherDataEvent implements IModBusEvent { } public DataGenerator makeGenerator(final Function pathEnhancer, final boolean shouldExecute) { - final DataGenerator generator = new DataGenerator(pathEnhancer.apply(path), DetectedVersion.tryDetectVersion(), shouldExecute); + final DataGenerator generator = new DataGenerator.Cached(pathEnhancer.apply(path), DetectedVersion.tryDetectVersion(), shouldExecute); if (shouldExecute) generators.add(generator); return generator; diff --git a/src/main/java/net/minecraftforge/data/loading/DatagenModLoader.java b/src/main/java/net/minecraftforge/data/loading/DatagenModLoader.java index 59fd4b538e..65c3173adc 100644 --- a/src/main/java/net/minecraftforge/data/loading/DatagenModLoader.java +++ b/src/main/java/net/minecraftforge/data/loading/DatagenModLoader.java @@ -29,7 +29,7 @@ import joptsimple.OptionParser; import joptsimple.OptionSet; import joptsimple.OptionSpec; -public class DatagenModLoader { +public final class DatagenModLoader { private static final Logger LOGGER = LogManager.getLogger(); private static ExistingFileHelper existingFileHelper; private static boolean runningDataGen; @@ -71,7 +71,7 @@ public class DatagenModLoader { public boolean run( OptionSet options, Path output, Collection inputs, - boolean genServer, boolean genClient, boolean genDev, boolean genReports, boolean validate + boolean genServer, boolean genClient, boolean genDev, boolean genReports ) { var existingPacks = options.valuesOf(this.existing).stream().map(Paths::get).toList(); var existingMods = new HashSet<>(options.valuesOf(this.existingMod)); @@ -90,7 +90,7 @@ public class DatagenModLoader { Bootstrap.bootStrap(); if (genClient) ClientBootstrap.bootstrap(); - ModLoader.get().gatherAndInitializeMods(ModWorkManager.syncExecutor(), ModWorkManager.parallelExecutor(), ()->{}); + ModLoader.gatherAndInitializeMods(ModWorkManager.syncExecutor(), ModWorkManager.parallelExecutor(), ()->{}); var lookupProvider = CompletableFuture.supplyAsync(VanillaRegistries::createLookup, Util.backgroundExecutor()); var mods = new HashSet(); @@ -99,7 +99,7 @@ public class DatagenModLoader { mods.add(pattern); var m = Pattern.compile('^' + pattern + '$'); - ModList.get().forEachModInOrder(mc -> { + ModList.forEachModInOrder(mc -> { var id = mc.getModId(); if (!"forge".equals(id) && !"minecraft".equals(id) && m.matcher(id).matches()) mods.add(id); @@ -108,14 +108,14 @@ public class DatagenModLoader { LOGGER.info("Initializing Data Gatherer for mods {}", mods); var config = new GatherDataEvent.DataGeneratorConfig(mods, output, inputs, lookupProvider, genServer, - genClient, genDev, genReports, validate, flat); + genClient, genDev, genReports, flat); if (!mods.contains("forge")) { // If we aren't generating data for forge, automatically add forge as an existing so mods can access forge's data existingMods.add("forge"); } - existingFileHelper = new ExistingFileHelper(existingPacks, existingMods, validate, assetIndex, assetsDir); + existingFileHelper = new ExistingFileHelper(existingPacks, existingMods, assetIndex, assetsDir); ModLoader.runEventGenerator(mc -> new GatherDataEvent( mc, config.makeGenerator( diff --git a/src/main/java/net/minecraftforge/event/AddPackFindersEvent.java b/src/main/java/net/minecraftforge/event/AddPackFindersEvent.java index 124b2dc3f6..565593d123 100644 --- a/src/main/java/net/minecraftforge/event/AddPackFindersEvent.java +++ b/src/main/java/net/minecraftforge/event/AddPackFindersEvent.java @@ -8,10 +8,8 @@ package net.minecraftforge.event; import net.minecraft.server.packs.PackType; import net.minecraft.server.packs.repository.PackRepository; import net.minecraft.server.packs.repository.RepositorySource; -import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.RecordEvent; -import net.minecraftforge.fml.event.IModBusEvent; import java.util.function.Consumer; @@ -23,12 +21,6 @@ import java.util.function.Consumer; public record AddPackFindersEvent(PackType getPackType, Consumer sourceAdder) implements RecordEvent { public static final EventBus BUS = EventBus.create(AddPackFindersEvent.class); - /** @deprecated {@link AddPackFindersEvent} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - /** * Adds a new source to the list of pack finders. * diff --git a/src/main/java/net/minecraftforge/event/AddReloadListenerEvent.java b/src/main/java/net/minecraftforge/event/AddReloadListenerEvent.java index bf099cda38..ee93168dd4 100644 --- a/src/main/java/net/minecraftforge/event/AddReloadListenerEvent.java +++ b/src/main/java/net/minecraftforge/event/AddReloadListenerEvent.java @@ -41,11 +41,12 @@ public final class AddReloadListenerEvent extends MutableEvent { * @param listener the listener to add to the ResourceManager on reload */ public void addListener(PreparableReloadListener listener) { - listeners.add(new WrappedStateAwareListener(listener)); + listeners.add(new WrappedStateAwareListener(listener)); } public List getListeners() { - return List.copyOf(listeners); + if (listeners.isEmpty()) return List.of(); + return List.copyOf(listeners); } /** diff --git a/src/main/java/net/minecraftforge/event/BuildCreativeModeTabContentsEvent.java b/src/main/java/net/minecraftforge/event/BuildCreativeModeTabContentsEvent.java index 9608ef35e3..1036aa1a62 100644 --- a/src/main/java/net/minecraftforge/event/BuildCreativeModeTabContentsEvent.java +++ b/src/main/java/net/minecraftforge/event/BuildCreativeModeTabContentsEvent.java @@ -11,11 +11,9 @@ import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ItemLike; import net.minecraftforge.common.util.MutableHashedLinkedMap; -import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.RecordEvent; import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.fml.event.IModBusEvent; import org.jetbrains.annotations.ApiStatus; import org.jspecify.annotations.NullMarked; @@ -39,12 +37,6 @@ public record BuildCreativeModeTabContentsEvent( ) implements RecordEvent, CreativeModeTab.Output { public static final EventBus BUS = EventBus.create(BuildCreativeModeTabContentsEvent.class); - /** @deprecated {@link BuildCreativeModeTabContentsEvent} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - @ApiStatus.Internal public BuildCreativeModeTabContentsEvent {} diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index 297a26694d..baee33a7b1 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -6,6 +6,7 @@ package net.minecraftforge.event; import java.io.File; +import java.util.ArrayList; import java.util.Collection; import java.util.EnumSet; import java.util.HashSet; @@ -21,15 +22,11 @@ import net.minecraft.util.random.WeightedList; import net.minecraft.world.entity.*; import net.minecraft.world.item.Item; import net.minecraft.world.level.chunk.storage.SerializableChunkData; -import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.util.Result; -import net.minecraftforge.fml.ModLoader; -import net.minecraftforge.fml.event.IModBusEvent; import org.jetbrains.annotations.ApiStatus; import org.jspecify.annotations.NonNull; import org.jspecify.annotations.Nullable; -import com.mojang.authlib.GameProfile; import com.mojang.brigadier.CommandDispatcher; import net.minecraft.advancements.AdvancementHolder; @@ -76,7 +73,6 @@ import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.monster.zombie.Zombie; import net.minecraft.world.entity.npc.villager.AbstractVillager; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.entity.projectile.FishingHook; import net.minecraft.world.entity.projectile.Projectile; import net.minecraft.world.entity.projectile.throwableitemprojectile.ThrownEnderpearl; import net.minecraft.world.flag.FeatureFlagSet; @@ -107,11 +103,9 @@ import net.minecraft.world.level.gameevent.GameEvent; import net.minecraft.world.level.gamerules.GameRules; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; import net.minecraft.world.level.portal.PortalShape; -import net.minecraft.world.level.storage.PlayerDataStorage; import net.minecraft.world.level.storage.ServerLevelData; import net.minecraft.world.level.storage.ValueInput; import net.minecraft.world.level.storage.loot.LootTable; -import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; import net.minecraftforge.common.ToolAction; @@ -133,7 +127,6 @@ import net.minecraftforge.event.entity.EntityTravelToDimensionEvent; import net.minecraftforge.event.entity.ProjectileImpactEvent; import net.minecraftforge.event.entity.item.ItemExpireEvent; import net.minecraftforge.event.entity.living.AnimalTameEvent; -import net.minecraftforge.event.entity.living.BabyEntitySpawnEvent; import net.minecraftforge.event.entity.living.LivingAttackEvent; import net.minecraftforge.event.entity.living.LivingBreatheEvent; import net.minecraftforge.event.entity.living.LivingChangeTargetEvent; @@ -168,7 +161,6 @@ import net.minecraftforge.event.entity.player.ArrowNockEvent; import net.minecraftforge.event.entity.player.BonemealEvent; import net.minecraftforge.event.entity.player.EntityItemPickupEvent; import net.minecraftforge.event.entity.player.FillBucketEvent; -import net.minecraftforge.event.entity.player.ItemFishedEvent; import net.minecraftforge.event.entity.player.ItemTooltipEvent; import net.minecraftforge.event.entity.player.PermissionsChangedEvent; import net.minecraftforge.event.entity.player.PlayerContainerEvent; @@ -199,7 +191,7 @@ import net.minecraftforge.event.level.ExplosionEvent; import net.minecraftforge.event.level.LevelEvent; import net.minecraftforge.event.level.NoteBlockEvent; import net.minecraftforge.event.level.PistonEvent; -import net.minecraftforge.event.level.SaplingGrowTreeEvent; +import net.minecraftforge.event.level.BlockFeatureGrowEvent; import net.minecraftforge.event.level.SleepFinishedTimeEvent; import net.minecraftforge.event.network.ChannelRegistrationChangeEvent; import net.minecraftforge.event.network.ConnectionStartEvent; @@ -500,7 +492,7 @@ public final class ForgeEventFactory { PlayerWakeUpEvent.BUS.post(new PlayerWakeUpEvent(player, wakeImmediately, updateLevel)); } - public static void onPlayerFall(Player player, float distance, float multiplier) { + public static void onPlayerFall(Player player, double distance, float multiplier) { PlayerFlyableFallEvent.BUS.post(new PlayerFlyableFallEvent(player, distance, multiplier)); } @@ -652,8 +644,8 @@ public final class ForgeEventFactory { } @SuppressWarnings("removal") - public static SaplingGrowTreeEvent blockGrowFeature(LevelAccessor level, RandomSource randomSource, BlockPos pos, @Nullable Holder> holder) { - return SaplingGrowTreeEvent.BUS.fire(new SaplingGrowTreeEvent(level, randomSource, pos, holder)); + public static BlockFeatureGrowEvent blockGrowFeature(LevelAccessor level, RandomSource randomSource, BlockPos pos, @Nullable Holder> holder) { + return BlockFeatureGrowEvent.BUS.fire(new BlockFeatureGrowEvent(level, randomSource, pos, holder)); } public static BlockState alterGround(LevelSimulatedReader level, RandomSource random, BlockPos pos, BlockState altered) { @@ -685,8 +677,13 @@ public final class ForgeEventFactory { return SleepFinishedTimeEvent.BUS.fire(new SleepFinishedTimeEvent(level, newTime, minTime)).getNewTime(); } - public static List onResourceReload(ReloadableServerResources serverResources, HolderLookup.Provider lookupProvider) { - return AddReloadListenerEvent.BUS.fire(new AddReloadListenerEvent(serverResources, lookupProvider)).getListeners(); + public static List onResourceReload(ReloadableServerResources serverResources, HolderLookup.Provider lookupProvider, List vanilla) { + var modded = AddReloadListenerEvent.BUS.fire(new AddReloadListenerEvent(serverResources, lookupProvider)).getListeners(); + if (modded.isEmpty()) + return vanilla; + var ret = new ArrayList(vanilla); + ret.addAll(modded); + return ret; } public static void onCommandRegister(CommandDispatcher dispatcher, Commands.CommandSelection environment, CommandBuildContext context) { diff --git a/src/main/java/net/minecraftforge/event/ModMismatchEvent.java b/src/main/java/net/minecraftforge/event/ModMismatchEvent.java index de10556d6c..23c79b742c 100644 --- a/src/main/java/net/minecraftforge/event/ModMismatchEvent.java +++ b/src/main/java/net/minecraftforge/event/ModMismatchEvent.java @@ -64,7 +64,7 @@ public final class ModMismatchEvent implements IModBusEvent { this.levelDirectory = levelDirectory; this.resolved = new HashMap<>(previousVersions.size()); this.versionDifferences = new HashMap<>(); - previousVersions.forEach((modId, version) -> versionDifferences.put(modId, new MismatchedVersionInfo(version, ModList.get() + previousVersions.forEach((modId, version) -> versionDifferences.put(modId, new MismatchedVersionInfo(version, ModList .getModContainerById(modId) .map(ModContainer::getModInfo) .map(IModInfo::getVersion) @@ -106,7 +106,7 @@ public final class ModMismatchEvent implements IModBusEvent { * Marks the mod version mismatch as having been resolved safely by the current mod. */ public void markResolved(String modId) { - final var resolvedBy = ModLoadingContext.get().getActiveContainer(); + final var resolvedBy = ModLoadingContext.get().getContainer(); resolved.putIfAbsent(modId, resolvedBy); } diff --git a/src/main/java/net/minecraftforge/event/entity/EntityAttributeCreationEvent.java b/src/main/java/net/minecraftforge/event/entity/EntityAttributeCreationEvent.java index 7b38115877..0390b9e2a7 100644 --- a/src/main/java/net/minecraftforge/event/entity/EntityAttributeCreationEvent.java +++ b/src/main/java/net/minecraftforge/event/entity/EntityAttributeCreationEvent.java @@ -11,10 +11,8 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.DefaultAttributes; -import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.MutableEvent; -import net.minecraftforge.fml.event.IModBusEvent; /** * EntityAttributeCreationEvent.
@@ -24,12 +22,6 @@ import net.minecraftforge.fml.event.IModBusEvent; public final class EntityAttributeCreationEvent extends MutableEvent { public static final EventBus BUS = EventBus.create(EntityAttributeCreationEvent.class); - /** @deprecated {@link EntityAttributeCreationEvent} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - private final Map, AttributeSupplier> map; public EntityAttributeCreationEvent(Map, AttributeSupplier> map) { diff --git a/src/main/java/net/minecraftforge/event/entity/EntityAttributeModificationEvent.java b/src/main/java/net/minecraftforge/event/entity/EntityAttributeModificationEvent.java index 15b0f02b56..bb18a9040e 100644 --- a/src/main/java/net/minecraftforge/event/entity/EntityAttributeModificationEvent.java +++ b/src/main/java/net/minecraftforge/event/entity/EntityAttributeModificationEvent.java @@ -11,10 +11,8 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.DefaultAttributes; -import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.MutableEvent; -import net.minecraftforge.fml.event.IModBusEvent; import net.minecraftforge.registries.ForgeRegistries; import java.util.List; @@ -28,12 +26,6 @@ import java.util.Map; public final class EntityAttributeModificationEvent extends MutableEvent { public static final EventBus BUS = EventBus.create(EntityAttributeModificationEvent.class); - /** @deprecated {@link EntityAttributeModificationEvent} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - private final Map, AttributeSupplier.Builder> entityAttributes; private final List> entityTypes; diff --git a/src/main/java/net/minecraftforge/event/entity/SpawnPlacementRegisterEvent.java b/src/main/java/net/minecraftforge/event/entity/SpawnPlacementRegisterEvent.java index 5c16aca80b..ae84057fc3 100644 --- a/src/main/java/net/minecraftforge/event/entity/SpawnPlacementRegisterEvent.java +++ b/src/main/java/net/minecraftforge/event/entity/SpawnPlacementRegisterEvent.java @@ -16,11 +16,9 @@ import net.minecraft.world.entity.SpawnPlacementType; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.SpawnPlacements; import net.minecraft.world.level.levelgen.Heightmap; -import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.MutableEvent; import net.minecraftforge.eventbus.api.listener.Priority; -import net.minecraftforge.fml.event.IModBusEvent; import net.minecraftforge.registries.ForgeRegistries; import org.jetbrains.annotations.ApiStatus; @@ -42,12 +40,6 @@ import org.jetbrains.annotations.ApiStatus; public final class SpawnPlacementRegisterEvent extends MutableEvent { public static final EventBus BUS = EventBus.create(SpawnPlacementRegisterEvent.class); - /** @deprecated {@link SpawnPlacementRegisterEvent} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - private final Map, MergedSpawnPredicate> map; @ApiStatus.Internal diff --git a/src/main/java/net/minecraftforge/event/entity/player/PlayerFlyableFallEvent.java b/src/main/java/net/minecraftforge/event/entity/player/PlayerFlyableFallEvent.java index 2b7a48e90f..578742a108 100644 --- a/src/main/java/net/minecraftforge/event/entity/player/PlayerFlyableFallEvent.java +++ b/src/main/java/net/minecraftforge/event/entity/player/PlayerFlyableFallEvent.java @@ -12,17 +12,16 @@ import org.jspecify.annotations.NullMarked; /** * Occurs when a player falls, but is able to fly. Doesn't need to be cancelable, this is mainly for notification purposes. - * @author Mithion */ @NullMarked public final class PlayerFlyableFallEvent extends MutableEvent implements PlayerEvent { public static final EventBus BUS = EventBus.create(PlayerFlyableFallEvent.class); private final Player player; - private float distance; + private double distance; private float multiplier; - public PlayerFlyableFallEvent(Player player, float distance, float multiplier) { + public PlayerFlyableFallEvent(Player player, double distance, float multiplier) { this.player = player; this.distance = distance; this.multiplier = multiplier; @@ -33,7 +32,7 @@ public final class PlayerFlyableFallEvent extends MutableEvent implements Player return player; } - public float getDistance() { return distance;} + public double getDistance() { return distance;} public void setDistance(float distance) { this.distance = distance; } public float getMultiplier() { return multiplier; } public void setMultiplier(float multiplier) { this.multiplier = multiplier; } diff --git a/src/main/java/net/minecraftforge/event/entity/player/PlayerInteractEvent.java b/src/main/java/net/minecraftforge/event/entity/player/PlayerInteractEvent.java index 00bc8bb10a..4eb6993cf5 100644 --- a/src/main/java/net/minecraftforge/event/entity/player/PlayerInteractEvent.java +++ b/src/main/java/net/minecraftforge/event/entity/player/PlayerInteractEvent.java @@ -101,34 +101,6 @@ public sealed abstract class PlayerInteractEvent implements PlayerEvent, Inherit } } - /** - * This event is fired on both sides when the player right clicks an entity. - * It is responsible for all general entity interactions. - * - * This event is fired only if the result of the above {@link EntityInteractSpecific} is not {@link InteractionResult#SUCCESS}. - * This event's state affects whether {@link Entity#interact(Player, InteractionHand)} and - * {@link Item#interactLivingEntity(ItemStack, Player, LivingEntity, InteractionHand)} are called. - * - * Let result be {@link InteractionResult#SUCCESS} if {@link Entity#interact(Player, InteractionHand)} or - * {@link Item#interactLivingEntity(ItemStack, Player, LivingEntity, InteractionHand)} return true, - * or {@link #cancellationResult} if the event is cancelled. - * If we are on the client and result is not {@link InteractionResult#SUCCESS}, the client will then try {@link RightClickItem}. - */ - public static final class EntityInteract extends PlayerInteractEvent implements Cancellable { - public static final CancellableEventBus BUS = CancellableEventBus.create(EntityInteract.class); - - private final Entity target; - - public EntityInteract(Player player, InteractionHand hand, Entity target) { - super(player, hand, target.blockPosition(), null); - this.target = target; - } - - public Entity getTarget() { - return target; - } - } - /** * This event is fired on both sides whenever the player right clicks while targeting a block.
* This event controls which of {@link Item#onItemUseFirst}, {@link Block#use(BlockState, Level, BlockPos, Player, InteractionHand, BlockHitResult)}, diff --git a/src/main/java/net/minecraftforge/event/entity/player/PlayerSetSpawnEvent.java b/src/main/java/net/minecraftforge/event/entity/player/PlayerSetSpawnEvent.java index 193db7b4f7..f621059db6 100644 --- a/src/main/java/net/minecraftforge/event/entity/player/PlayerSetSpawnEvent.java +++ b/src/main/java/net/minecraftforge/event/entity/player/PlayerSetSpawnEvent.java @@ -5,11 +5,8 @@ package net.minecraftforge.event.entity.player; -import net.minecraft.resources.ResourceKey; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraft.core.BlockPos; import net.minecraftforge.eventbus.api.bus.CancellableEventBus; import net.minecraftforge.eventbus.api.event.MutableEvent; import net.minecraftforge.eventbus.api.event.characteristic.Cancellable; @@ -26,26 +23,9 @@ public final class PlayerSetSpawnEvent extends MutableEvent implements Cancellab private final Player player; private final @Nullable ServerPlayer.RespawnConfig config; - @Deprecated(forRemoval = true, since = "1.21.5") - private final ResourceKey spawnLevel; - @Deprecated(forRemoval = true, since = "1.21.5") - private final boolean forced; - @Deprecated(forRemoval = true, since = "1.21.5") - private final @Nullable BlockPos newSpawn; - public PlayerSetSpawnEvent(ServerPlayer player, @Nullable ServerPlayer.RespawnConfig config) { this.player = player; this.config = config; - - if (config == null) { - this.forced = false; - this.spawnLevel = Level.OVERWORLD; - this.newSpawn = null; - } else { - this.forced = config.forced(); - this.spawnLevel = config.respawnData().dimension(); - this.newSpawn = config.respawnData().pos(); - } } @Override @@ -57,31 +37,4 @@ public final class PlayerSetSpawnEvent extends MutableEvent implements Cancellab public @Nullable ServerPlayer.RespawnConfig getConfig() { return this.config; } - - /** - * @return If the new spawn point is forced - * @deprecated Use {@link ServerPlayer.RespawnConfig#forced()} via {@link #getConfig()} - */ - @Deprecated(forRemoval = true, since = "1.21.5") - public boolean isForced() { - return this.forced; - } - - /** - * @return The new spawn position, or {@code null} if the spawn position is being reset - * @deprecated Use {@link ServerPlayer.RespawnConfig#pos()} via {@link #getConfig()} - */ - @Deprecated(forRemoval = true, since = "1.21.5") - public @Nullable BlockPos getNewSpawn() { - return this.newSpawn; - } - - /** - * @return The new spawn dimension, defaulting to {@link Level#OVERWORLD} if it is {@code null} - * @deprecated Use {@link ServerPlayer.RespawnConfig#dimension()} via {@link #getConfig()} - */ - @Deprecated(forRemoval = true, since = "1.21.5") - public ResourceKey getSpawnLevel() { - return this.spawnLevel; - } } diff --git a/src/main/java/net/minecraftforge/event/level/BlockEvent.java b/src/main/java/net/minecraftforge/event/level/BlockEvent.java index 50ffcc8392..b2394776b9 100644 --- a/src/main/java/net/minecraftforge/event/level/BlockEvent.java +++ b/src/main/java/net/minecraftforge/event/level/BlockEvent.java @@ -80,7 +80,7 @@ public sealed interface BlockEvent int fortuneLevel = EnchantmentHelper.getItemEnchantmentLevel(lookup.getOrThrow(Enchantments.FORTUNE), player.getMainHandItem()); int silkTouchLevel = EnchantmentHelper.getItemEnchantmentLevel(lookup.getOrThrow(Enchantments.SILK_TOUCH), player.getMainHandItem()); - this.exp = state.getExpDrop(level, level.random, pos, fortuneLevel, silkTouchLevel); + this.exp = state.getExpDrop(level, level.getRandom(), pos, fortuneLevel, silkTouchLevel); } } diff --git a/src/main/java/net/minecraftforge/event/level/SaplingGrowTreeEvent.java b/src/main/java/net/minecraftforge/event/level/BlockFeatureGrowEvent.java similarity index 87% rename from src/main/java/net/minecraftforge/event/level/SaplingGrowTreeEvent.java rename to src/main/java/net/minecraftforge/event/level/BlockFeatureGrowEvent.java index 25a3398a00..3cf96ac609 100644 --- a/src/main/java/net/minecraftforge/event/level/SaplingGrowTreeEvent.java +++ b/src/main/java/net/minecraftforge/event/level/BlockFeatureGrowEvent.java @@ -30,10 +30,8 @@ import org.jetbrains.annotations.Nullable; * This event is fired on the {@linkplain MinecraftForge#EVENT_BUS main Forge event bus} * only on the {@linkplain net.minecraftforge.fml.LogicalSide#SERVER logical server}. */ -// TODO: Rename to BlockFeatureGrowEvent in 1.20 -@Deprecated(forRemoval = true, since = "1.21.1") // Dont remove, rename -public final class SaplingGrowTreeEvent implements LevelEvent, HasResult { - public static final EventBus BUS = EventBus.create(SaplingGrowTreeEvent.class); +public final class BlockFeatureGrowEvent implements LevelEvent, HasResult { + public static final EventBus BUS = EventBus.create(BlockFeatureGrowEvent.class); private final LevelAccessor level; private final RandomSource randomSource; @@ -42,7 +40,7 @@ public final class SaplingGrowTreeEvent implements LevelEvent, HasResult { private Holder> feature; private Result result = Result.DEFAULT; - public SaplingGrowTreeEvent(LevelAccessor level, RandomSource randomSource, BlockPos pos, @Nullable Holder> feature) { + public BlockFeatureGrowEvent(LevelAccessor level, RandomSource randomSource, BlockPos pos, @Nullable Holder> feature) { this.level = level; this.randomSource = randomSource; this.pos = pos; diff --git a/src/main/java/net/minecraftforge/event/level/LevelEvent.java b/src/main/java/net/minecraftforge/event/level/LevelEvent.java index 2197622234..b8340ce4bf 100644 --- a/src/main/java/net/minecraftforge/event/level/LevelEvent.java +++ b/src/main/java/net/minecraftforge/event/level/LevelEvent.java @@ -40,7 +40,7 @@ import org.jspecify.annotations.NullMarked; @NullMarked public sealed interface LevelEvent extends InheritableEvent permits ChunkEvent, LevelEvent.CreateSpawnPosition, LevelEvent.Load, LevelEvent.PotentialSpawns, LevelEvent.Save, - LevelEvent.Unload, SaplingGrowTreeEvent, SleepFinishedTimeEvent { + LevelEvent.Unload, BlockFeatureGrowEvent, SleepFinishedTimeEvent { EventBus BUS = EventBus.create(LevelEvent.class); /** diff --git a/src/main/java/net/minecraftforge/event/village/VillagerTradesEvent.java b/src/main/java/net/minecraftforge/event/village/VillagerTradesEvent.java deleted file mode 100644 index 696fa748e1..0000000000 --- a/src/main/java/net/minecraftforge/event/village/VillagerTradesEvent.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) Forge Development LLC and contributors - * SPDX-License-Identifier: LGPL-2.1-only - */ - -package net.minecraftforge.event.village; - -import java.util.List; - -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.entity.npc.villager.VillagerData; -import net.minecraft.world.entity.npc.villager.VillagerProfession; -import net.minecraft.world.entity.npc.villager.VillagerTrades.ItemListing; -import net.minecraftforge.event.server.ServerAboutToStartEvent; -import net.minecraftforge.eventbus.api.bus.EventBus; -import net.minecraftforge.eventbus.api.event.RecordEvent; -import org.jspecify.annotations.NullMarked; - -/** - * VillagerTradesEvent is fired during the {@link ServerAboutToStartEvent}. It is used to gather the trade lists for each profession. - *

It is fired once for each registered villager profession.

- *

Villagers pick two trades from their trade map, based on their level.

- *

Villager level is increased by successful trades.

- *

The map is populated for levels 1-5 (inclusive), so getting a value will never return null for those keys.

- *

Levels outside of this range do nothing, as specified by {@link VillagerData#canLevelUp(int)} which is called before attempting to level up.

- *

To add trades to the merchant, simply add new trades to the list.

- */ -@NullMarked -public record VillagerTradesEvent( - Int2ObjectMap> getTrades, - ResourceKey getType -) implements RecordEvent { - public static final EventBus BUS = EventBus.create(VillagerTradesEvent.class); -} diff --git a/src/main/java/net/minecraftforge/event/village/WandererTradesEvent.java b/src/main/java/net/minecraftforge/event/village/WandererTradesEvent.java deleted file mode 100644 index b90983ec71..0000000000 --- a/src/main/java/net/minecraftforge/event/village/WandererTradesEvent.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) Forge Development LLC and contributors - * SPDX-License-Identifier: LGPL-2.1-only - */ - -package net.minecraftforge.event.village; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import net.minecraftforge.eventbus.api.bus.EventBus; -import net.minecraftforge.eventbus.api.event.InheritableEvent; -import net.minecraftforge.eventbus.api.event.MutableEvent; -import org.apache.commons.lang3.tuple.Pair; - -import net.minecraft.util.Util; -import net.minecraft.world.entity.npc.villager.VillagerTrades.ItemListing; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.server.ServerAboutToStartEvent; - -/** - * WandererTradesEvent is fired during the {@link ServerAboutToStartEvent}. It is used to gather the trade lists for the wandering merchant. - * It is fired on the {@link MinecraftForge#EVENT_BUS}. - * The wandering merchant picks {@link Pool#rolls} from each {@link Pool} - * To add trades to the merchant, simply add new trades to the list. {@link BasicItemListing} provides a default implementation. -*/ -public class WandererTradesEvent extends MutableEvent implements InheritableEvent { - public static final EventBus BUS = EventBus.create(WandererTradesEvent.class); - - protected List pools; - - public WandererTradesEvent(List> pools) { - this.pools = pools.stream().map(Pool::new).collect(Util.toMutableList()); - } - - public List getPools() { - return pools; - } - - public static class Pool { - private int rolls; - private final List entries; - - public Pool(Pair data) { - this(Arrays.asList(data.getLeft()), data.getRight()); - } - - public Pool(List entries, int rolls) { - this.rolls = rolls; - this.entries = new ArrayList<>(entries); - } - - public int getRolls() { - return this.rolls; - } - - public void setRolls(int value) { - this.rolls = value; - } - - public List getEntries() { - return this.entries; - } - } -} diff --git a/src/main/java/net/minecraftforge/fluids/FluidType.java b/src/main/java/net/minecraftforge/fluids/FluidType.java index d10891e26c..6ed4881ee5 100644 --- a/src/main/java/net/minecraftforge/fluids/FluidType.java +++ b/src/main/java/net/minecraftforge/fluids/FluidType.java @@ -24,7 +24,6 @@ import net.minecraft.world.entity.vehicle.boat.AbstractBoat; import net.minecraft.world.item.BucketItem; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Rarity; -import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelReader; @@ -499,7 +498,7 @@ public class FluidType { * @param pos the position of the fluid * @return the light level emitted by the fluid */ - public int getLightLevel(FluidState state, BlockAndTintGetter getter, BlockPos pos) { + public int getLightLevel(FluidState state, LevelReader getter, BlockPos pos) { return this.getLightLevel(); } @@ -515,7 +514,7 @@ public class FluidType { * @param pos the position of the fluid * @return the density of the fluid */ - public int getDensity(FluidState state, BlockAndTintGetter getter, BlockPos pos) { + public int getDensity(FluidState state, LevelReader getter, BlockPos pos) { return this.getDensity(); } @@ -531,7 +530,7 @@ public class FluidType { * @param pos the position of the fluid * @return the temperature of the fluid */ - public int getTemperature(FluidState state, BlockAndTintGetter getter, BlockPos pos) { + public int getTemperature(FluidState state, LevelReader getter, BlockPos pos) { return this.getTemperature(); } @@ -548,7 +547,7 @@ public class FluidType { * @param pos the position of the fluid * @return the viscosity of the fluid */ - public int getViscosity(FluidState state, BlockAndTintGetter getter, BlockPos pos) { + public int getViscosity(FluidState state, LevelReader getter, BlockPos pos) { return this.getViscosity(); } @@ -717,7 +716,7 @@ public class FluidType { * @param state the state of the fluid * @return the {@link BlockState} of a fluid */ - public BlockState getBlockForFluidState(BlockAndTintGetter getter, BlockPos pos, FluidState state) { + public BlockState getBlockForFluidState(LevelReader getter, BlockPos pos, FluidState state) { return state.createLegacyBlock(); } @@ -730,7 +729,7 @@ public class FluidType { * @param stack the stack holding the fluid * @return the {@link FluidState} being placed */ - public FluidState getStateForPlacement(BlockAndTintGetter getter, BlockPos pos, FluidStack stack) { + public FluidState getStateForPlacement(LevelReader getter, BlockPos pos, FluidStack stack) { return stack.getFluid().defaultFluidState(); } @@ -742,7 +741,7 @@ public class FluidType { * @param state the state of the fluid being placed * @return {@code true} if the fluid can be placed, {@code false} otherwise */ - public final boolean canBePlacedInLevel(BlockAndTintGetter getter, BlockPos pos, FluidState state) { + public final boolean canBePlacedInLevel(LevelReader getter, BlockPos pos, FluidState state) { return !this.getBlockForFluidState(getter, pos, state).isAir(); } @@ -754,7 +753,7 @@ public class FluidType { * @param stack the stack holding the fluid * @return {@code true} if the fluid can be placed, {@code false} otherwise */ - public final boolean canBePlacedInLevel(BlockAndTintGetter getter, BlockPos pos, FluidStack stack) { + public final boolean canBePlacedInLevel(LevelReader getter, BlockPos pos, FluidStack stack) { return this.canBePlacedInLevel(getter, pos, this.getStateForPlacement(getter, pos, stack)); } @@ -807,7 +806,7 @@ public class FluidType { */ public void onVaporize(@Nullable LivingEntity entity, Level level, BlockPos pos, FluidStack stack) { SoundEvent sound = this.getSound(entity, level, pos, SoundActions.FLUID_VAPORIZE); - level.playSound(entity, pos, sound != null ? sound : SoundEvents.FIRE_EXTINGUISH, SoundSource.BLOCKS, 0.5F, 2.6F + (level.random.nextFloat() - level.random.nextFloat()) * 0.8F); + level.playSound(entity, pos, sound != null ? sound : SoundEvents.FIRE_EXTINGUISH, SoundSource.BLOCKS, 0.5F, 2.6F + (level.getRandom().nextFloat() - level.getRandom().nextFloat()) * 0.8F); for (int l = 0; l < 8; ++l) level.addAlwaysVisibleParticle(ParticleTypes.LARGE_SMOKE, (double) pos.getX() + Math.random(), (double) pos.getY() + Math.random(), (double) pos.getZ() + Math.random(), 0.0D, 0.0D, 0.0D); diff --git a/src/main/java/net/minecraftforge/fml/core/ModStateProvider.java b/src/main/java/net/minecraftforge/fml/core/ModStateProvider.java index 22928054f9..a8bc157a04 100644 --- a/src/main/java/net/minecraftforge/fml/core/ModStateProvider.java +++ b/src/main/java/net/minecraftforge/fml/core/ModStateProvider.java @@ -6,10 +6,10 @@ package net.minecraftforge.fml.core; import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.fml.IModLoadingState; import net.minecraftforge.fml.IModStateProvider; import net.minecraftforge.fml.ModContainer; +import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.ModLoadingPhase; import net.minecraftforge.fml.ModLoadingStage; import net.minecraftforge.fml.ModLoadingState; @@ -55,7 +55,7 @@ public class ModStateProvider implements IModStateProvider { */ public static final ModLoadingState CONSTRUCT = ModLoadingState.of("CONSTRUCT", ModLoadingPhase.GATHER) .after(VALIDATE) - .message(ml -> "Constructing %d mods".formatted(ml.size())) + .message(() -> "Constructing %d mods".formatted(ModList.size())) .withTransition(new ParallelTransition(ModLoadingStage.CONSTRUCT, FMLConstructModEvent::new)); /** @@ -63,9 +63,9 @@ public class ModStateProvider implements IModStateProvider { * {@linkplain Dist#CLIENT client-side} mod configurations. */ public static final ModLoadingState CONFIG_LOAD = ModLoadingState.of("CONFIG_LOAD", ModLoadingPhase.LOAD) - .withInline(ml -> { - if (FMLEnvironment.dist.isClient()) ConfigTracker.INSTANCE.loadConfigs(ModConfig.Type.CLIENT, FMLPaths.CONFIGDIR.get()); - ConfigTracker.INSTANCE.loadConfigs(ModConfig.Type.COMMON, FMLPaths.CONFIGDIR.get()); + .withInline(() -> { + if (FMLEnvironment.dist.isClient()) ConfigTracker.loadConfigs(ModConfig.Type.CLIENT, FMLPaths.CONFIGDIR.get()); + ConfigTracker.loadConfigs(ModConfig.Type.COMMON, FMLPaths.CONFIGDIR.get()); }); /** @@ -128,7 +128,7 @@ public class ModStateProvider implements IModStateProvider { */ public static final ModLoadingState COMPLETE = ModLoadingState.of("COMPLETE", ModLoadingPhase.COMPLETE) .after(PROCESS_IMC) - .message(ml -> "completing load of %d mods".formatted(ml.size())) + .message(() -> "completing load of %d mods".formatted(ModList.size())) .withTransition(new ParallelTransition(ModLoadingStage.COMPLETE, FMLLoadCompleteEvent::new)); /** diff --git a/src/main/java/net/minecraftforge/gametest/ForgeGameTestHooks.java b/src/main/java/net/minecraftforge/gametest/ForgeGameTestHooks.java index 18f5e8c8dc..96c63c1b9f 100644 --- a/src/main/java/net/minecraftforge/gametest/ForgeGameTestHooks.java +++ b/src/main/java/net/minecraftforge/gametest/ForgeGameTestHooks.java @@ -148,7 +148,8 @@ public class ForgeGameTestHooks { gametest.manualOnly(), gametest.maxAttempts(), gametest.requiredSuccesses(), - gametest.skyAccess() + gametest.skyAccess(), + gametest.padding() ); MethodHandle handle = unreflect(method, owner); diff --git a/src/main/java/net/minecraftforge/gametest/GameTest.java b/src/main/java/net/minecraftforge/gametest/GameTest.java index 5dbe878367..ba5df3ebe3 100644 --- a/src/main/java/net/minecraftforge/gametest/GameTest.java +++ b/src/main/java/net/minecraftforge/gametest/GameTest.java @@ -30,4 +30,5 @@ public @interface GameTest { int maxAttempts() default 1; int requiredSuccesses() default 1; boolean skyAccess() default false; + int padding() default 0; } diff --git a/src/main/java/net/minecraftforge/internal/BrandingControl.java b/src/main/java/net/minecraftforge/internal/BrandingControl.java index a34bd3cd5c..e5fe979a44 100644 --- a/src/main/java/net/minecraftforge/internal/BrandingControl.java +++ b/src/main/java/net/minecraftforge/internal/BrandingControl.java @@ -38,7 +38,7 @@ public final class BrandingControl { // We only have Forge Betas on the "XX.0.XX" versions anyways. boolean beta = "0".equals(forge[0].split("\\.")[1]); var name = beta ? "§eForge Beta§f " : "Forge "; - list.add(name + forge[0] + " (" + ForgeI18n.parseMessage("fml.menu.loadingmods", ModList.get().size()) + ")"); + list.add(name + forge[0] + " (" + ForgeI18n.parseMessage("fml.menu.loadingmods", ModList.size()) + ")"); // Extra forge version info (like branch) if (forge.length > 1) list.add("Branch " + forge[1]); diff --git a/src/main/java/net/minecraftforge/items/ItemHandlerHelper.java b/src/main/java/net/minecraftforge/items/ItemHandlerHelper.java index 77e30187d7..102b92ec45 100644 --- a/src/main/java/net/minecraftforge/items/ItemHandlerHelper.java +++ b/src/main/java/net/minecraftforge/items/ItemHandlerHelper.java @@ -123,7 +123,7 @@ public class ItemHandlerHelper { // play sound if something got picked up if (remainder.isEmpty() || remainder.getCount() != stack.getCount()) { level.playSound(null, player.getX(), player.getY() + 0.5, player.getZ(), - SoundEvents.ITEM_PICKUP, SoundSource.PLAYERS, 0.2F, ((level.random.nextFloat() - level.random.nextFloat()) * 0.7F + 1.0F) * 2.0F); + SoundEvents.ITEM_PICKUP, SoundSource.PLAYERS, 0.2F, ((level.getRandom().nextFloat() - level.getRandom().nextFloat()) * 0.7F + 1.0F) * 2.0F); } // drop remaining itemstack into the level diff --git a/src/main/java/net/minecraftforge/items/VanillaInventoryCodeHooks.java b/src/main/java/net/minecraftforge/items/VanillaInventoryCodeHooks.java index d27881f3bd..c37b61a4f9 100644 --- a/src/main/java/net/minecraftforge/items/VanillaInventoryCodeHooks.java +++ b/src/main/java/net/minecraftforge/items/VanillaInventoryCodeHooks.java @@ -16,7 +16,6 @@ import net.minecraft.world.phys.AABB; import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraft.core.Direction; import net.minecraft.core.BlockPos; -import net.minecraft.util.Mth; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.Level; @@ -162,7 +161,7 @@ public class VanillaInventoryCodeHooks { double x = hopper.getLevelX() + (double) hopperFacing.getStepX(); double y = hopper.getLevelY() + (double) hopperFacing.getStepY(); double z = hopper.getLevelZ() + (double) hopperFacing.getStepZ(); - return getItemHandler(level, x, y, z, hopperFacing.getOpposite()); + return getItemHandlerPair(level, BlockPos.containing(x, y, z), hopperFacing.getOpposite()); } private static boolean isFull(IItemHandler itemHandler) { @@ -208,7 +207,7 @@ public class VanillaInventoryCodeHooks { if (entities.isEmpty()) return Optional.empty(); - var rand = level.random.nextInt(entities.size()); + var rand = level.getRandom().nextInt(entities.size()); var entity = entities.get(rand); return entity.getCapability(ForgeCapabilities.ITEM_HANDLER, side).resolve(); } @@ -224,18 +223,6 @@ public class VanillaInventoryCodeHooks { return entity.getCapability(ForgeCapabilities.ITEM_HANDLER, side).resolve(); } - /** - * I don't think anyone should be using this. If they are they probably want the non-pair version. - * As the only use for knowing the object holding the IItemHandler is for hopper cooldowns - */ - @Deprecated(forRemoval = true, since = "1.21.8") - public static Optional> getItemHandler(Level worldIn, double x, double y, double z, final Direction side) { - int i = Mth.floor(x); - int j = Mth.floor(y); - int k = Mth.floor(z); - return getItemHandlerPair(worldIn, new BlockPos(i, j, k), side); - } - private static Optional> getItemHandlerPair(Level level, BlockPos pos, Direction side) { var state = level.getBlockState(pos); diff --git a/src/main/java/net/minecraftforge/logging/CrashReportAnalyser.java b/src/main/java/net/minecraftforge/logging/CrashReportAnalyser.java index 172bb587e5..6423a819c0 100644 --- a/src/main/java/net/minecraftforge/logging/CrashReportAnalyser.java +++ b/src/main/java/net/minecraftforge/logging/CrashReportAnalyser.java @@ -122,21 +122,20 @@ public final class CrashReportAnalyser { * Iterates over all loaded mods, resolving and caching their package names with the corresponding {@link IModInfo}. * **/ private static void cacheModList() { - ModList modList = ModList.get(); ModuleLayer gameLayer = FMLLoader.getGameLayer(); - if (modList != null) { - modList.getMods().forEach(iModInfo -> { - //Don't cache minecraft or forge as they will always be included in the stacktrace - if (!iModInfo.getModId().equals("forge") && !iModInfo.getModId().equals("minecraft")) { - Set packages = new HashSet<>(); + ModList.getMods().forEach(iModInfo -> { + //Don't cache minecraft or forge as they will always be included in the stacktrace + if (!iModInfo.getModId().equals("forge") && !iModInfo.getModId().equals("minecraft")) { + Set packages = new HashSet<>(); - gameLayer.findModule(iModInfo.getModId()).ifPresent(module -> packages.addAll(module.getPackages())); + gameLayer.findModule(iModInfo.getModId()).ifPresent(module -> packages.addAll(module.getPackages())); - packages.forEach(s -> PACKAGE_MOD_CACHE.put(s, iModInfo)); + for (String s : packages) { + PACKAGE_MOD_CACHE.put(s, iModInfo); } - }); - } + } + }); } private static void identifyByClass(StackTraceElement stackTraceElement) { diff --git a/src/main/java/net/minecraftforge/network/ForgePacketHandler.java b/src/main/java/net/minecraftforge/network/ForgePacketHandler.java index 9e89f184fc..c258e4004d 100644 --- a/src/main/java/net/minecraftforge/network/ForgePacketHandler.java +++ b/src/main/java/net/minecraftforge/network/ForgePacketHandler.java @@ -216,7 +216,7 @@ public class ForgePacketHandler { var missing = new HashSet(); for (var id : missingMods) { var key = Identifier.fromNamespaceAndPath(id, ""); - var container = ModList.get().getModContainerById(id).orElse(null); + var container = ModList.getModContainerById(id).orElse(null); if (container != null) mismatched.put(key, new NetworkMismatchData.Version(container.getModInfo().getVersion().toString(), "")); else @@ -253,7 +253,7 @@ public class ForgePacketHandler { LOGGER.debug(MARKER, "Received config sync from server for {}", msg.name()); if (!ctx.getConnection().isMemoryConnection()) { - var cfg = ConfigTracker.INSTANCE.fileMap().get(msg.name()); + var cfg = ConfigTracker.fileMap().get(msg.name()); if (cfg != null) cfg.acceptSyncedConfig(msg.data()); } diff --git a/src/main/java/net/minecraftforge/network/ServerStatusPing.java b/src/main/java/net/minecraftforge/network/ServerStatusPing.java index 2db987c848..32c99337e5 100644 --- a/src/main/java/net/minecraftforge/network/ServerStatusPing.java +++ b/src/main/java/net/minecraftforge/network/ServerStatusPing.java @@ -103,7 +103,7 @@ public record ServerStatusPing( public ServerStatusPing() { this( NetworkRegistry.buildChannelVersionsForListPing(), - Util.make(new HashMap<>(), map -> ModList.get().forEachModContainer((modid, mc) -> + Util.make(new HashMap<>(), map -> ModList.forEachModContainer((modid, mc) -> map.put(modid, mc.getCustomExtension(IExtensionPoint.DisplayTest.class) .map(IExtensionPoint.DisplayTest::suppliedVersion) .map(Supplier::get) diff --git a/src/main/java/net/minecraftforge/network/packets/ModVersions.java b/src/main/java/net/minecraftforge/network/packets/ModVersions.java index ced848b1c7..64822a70b2 100644 --- a/src/main/java/net/minecraftforge/network/packets/ModVersions.java +++ b/src/main/java/net/minecraftforge/network/packets/ModVersions.java @@ -22,7 +22,7 @@ public record ModVersions(Map mods) { private static final int MAX_LENGTH = 0x100; public static ModVersions create() { - return new ModVersions(ModList.get().getMods().stream().collect(Collectors.toMap( + return new ModVersions(ModList.getMods().stream().collect(Collectors.toMap( IModInfo::getModId, mod -> new Info(mod.getDisplayName(), mod.getVersion().toString()) ))); diff --git a/src/main/java/net/minecraftforge/network/tasks/SyncConfigTask.java b/src/main/java/net/minecraftforge/network/tasks/SyncConfigTask.java index 30d0cda37e..f74762c78d 100644 --- a/src/main/java/net/minecraftforge/network/tasks/SyncConfigTask.java +++ b/src/main/java/net/minecraftforge/network/tasks/SyncConfigTask.java @@ -32,7 +32,7 @@ class SyncConfigTask extends SimpleConfigurationTask { } private static void run(ConfigurationTaskContext ctx) { - for (var cfg : ConfigTracker.INSTANCE.configSets().get(ModConfig.Type.SERVER)) { + for (var cfg : ConfigTracker.configSets().get(ModConfig.Type.SERVER)) { try { var pkt = new ConfigData(cfg.getFileName(), Files.readAllBytes(cfg.getFullPath())); NetworkInitialization.CONFIG.send(pkt, ctx.getConnection()); diff --git a/src/main/java/net/minecraftforge/registries/DataPackRegistriesHooks.java b/src/main/java/net/minecraftforge/registries/DataPackRegistriesHooks.java index e2355d8f79..bcfd6e21b9 100644 --- a/src/main/java/net/minecraftforge/registries/DataPackRegistriesHooks.java +++ b/src/main/java/net/minecraftforge/registries/DataPackRegistriesHooks.java @@ -8,6 +8,7 @@ package net.minecraftforge.registries; import net.minecraft.core.Registry; import net.minecraft.core.RegistrySynchronization; import net.minecraft.resources.RegistryDataLoader; +import net.minecraft.resources.RegistryValidator; import net.minecraft.resources.ResourceKey; import org.jetbrains.annotations.ApiStatus; @@ -48,7 +49,7 @@ public final class DataPackRegistriesHooks { if (data.networkCodec() != null) { NETWORKABLE_REGISTRIES.add(loaderData.key()); SYNCHRONIZED_REGISTRIES_CUSTOM.add(loaderData.key()); - SYNCHRONIZED_REGISTRIES.add(new RegistryDataLoader.RegistryData<>(loaderData.key(), data.networkCodec(), false)); + SYNCHRONIZED_REGISTRIES.add(new RegistryDataLoader.RegistryData(loaderData.key(), data.networkCodec(), RegistryValidator.none())); } } diff --git a/src/main/java/net/minecraftforge/registries/DataPackRegistryEvent.java b/src/main/java/net/minecraftforge/registries/DataPackRegistryEvent.java index 8aa6103e21..e29aab2581 100644 --- a/src/main/java/net/minecraftforge/registries/DataPackRegistryEvent.java +++ b/src/main/java/net/minecraftforge/registries/DataPackRegistryEvent.java @@ -12,12 +12,9 @@ import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.core.Registry; import net.minecraft.resources.RegistryDataLoader; import net.minecraft.resources.ResourceKey; -import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.MutableEvent; import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.fml.event.IModBusEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; @@ -33,12 +30,6 @@ public sealed interface DataPackRegistryEvent { final class NewRegistry extends MutableEvent implements DataPackRegistryEvent { public static final EventBus BUS = EventBus.create(NewRegistry.class); - /** @deprecated {@link DataPackRegistryEvent.NewRegistry} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - private final List> registryDataList = new ArrayList<>(); @ApiStatus.Internal @@ -76,8 +67,8 @@ public sealed interface DataPackRegistryEvent { * The data will be synced using the network codec and accessible via {@link ClientPacketListener#registryAccess()}. * @see #dataPackRegistry(ResourceKey, Codec) */ - public void dataPackRegistry(ResourceKey> registryKey, Codec codec, @Nullable Codec networkCodec) { - this.registryDataList.add(new DataPackRegistryData<>(new RegistryDataLoader.RegistryData<>(registryKey, codec, false), networkCodec)); + public void dataPackRegistry(ResourceKey> registryKey, Codec codec, @Nullable Codec networkCodec) { + this.registryDataList.add(new DataPackRegistryData<>(new RegistryDataLoader.RegistryData(registryKey, codec), networkCodec)); } void process() { diff --git a/src/main/java/net/minecraftforge/registries/NamespacedWrapper.java b/src/main/java/net/minecraftforge/registries/NamespacedWrapper.java index 2911d9c7b4..b17fd4d574 100644 --- a/src/main/java/net/minecraftforge/registries/NamespacedWrapper.java +++ b/src/main/java/net/minecraftforge/registries/NamespacedWrapper.java @@ -18,6 +18,7 @@ import net.minecraft.core.HolderSet; import net.minecraft.core.MappedRegistry; import net.minecraft.core.RegistrationInfo; import net.minecraft.core.Registry; +import net.minecraft.core.component.DataComponentLookup; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.Identifier; import net.minecraft.tags.TagKey; @@ -321,6 +322,7 @@ class NamespacedWrapper extends MappedRegistry implements ILockableRegistr this.bindAllUnboundTagsToEmpty(); } + this.componentLookup = new DataComponentLookup<>(this.holdersById); this.frozenTags = MappedRegistry.TagSet.fromMap(this.tags); this.delegate.onBindTags(this.tags); this.refreshTagsInHoldersForge(); @@ -371,9 +373,9 @@ class NamespacedWrapper extends MappedRegistry implements ILockableRegistr } @Override - public void bindTag(TagKey key, List> newTags) { + public void bindTags(Map, List>> pendingTags) { this.validateWrite(); - this.getOrCreateTagForRegistration(key).bind(newTags); + pendingTags.forEach((id, values) -> this.getOrCreateTagForRegistration(id).bind(values)); } @Override diff --git a/src/main/java/net/minecraftforge/registries/NewRegistryEvent.java b/src/main/java/net/minecraftforge/registries/NewRegistryEvent.java index 17a1230028..b7c8716f55 100644 --- a/src/main/java/net/minecraftforge/registries/NewRegistryEvent.java +++ b/src/main/java/net/minecraftforge/registries/NewRegistryEvent.java @@ -14,10 +14,8 @@ import java.util.function.Consumer; import java.util.function.Supplier; import net.minecraft.core.MappedRegistry; import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraftforge.eventbus.api.bus.BusGroup; import net.minecraftforge.eventbus.api.bus.EventBus; import net.minecraftforge.eventbus.api.event.MutableEvent; -import net.minecraftforge.fml.event.IModBusEvent; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; @@ -27,12 +25,6 @@ import org.slf4j.Logger; public final class NewRegistryEvent extends MutableEvent { public static final EventBus BUS = EventBus.create(NewRegistryEvent.class); - /** @deprecated {@link NewRegistryEvent} is no longer an {@link IModBusEvent}, so use {@link #BUS} directly. */ - @Deprecated(forRemoval = true, since = "1.21.9") - public static EventBus getBus(BusGroup modBusGroup) { - return BUS; - } - private static final Logger LOGGER = LogUtils.getLogger(); private final List> registries = new ArrayList<>(); diff --git a/src/main/java/net/minecraftforge/resource/ResourcePackLoader.java b/src/main/java/net/minecraftforge/resource/ResourcePackLoader.java index 3ee8591ff1..17a7df9f22 100644 --- a/src/main/java/net/minecraftforge/resource/ResourcePackLoader.java +++ b/src/main/java/net/minecraftforge/resource/ResourcePackLoader.java @@ -11,7 +11,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.function.Consumer; -import java.util.stream.Collectors; import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; @@ -45,7 +44,9 @@ public class ResourcePackLoader { } public static List getPackNames() { - return ModList.get().applyForEachModFile(mf->"mod:"+mf.getModInfos().getFirst().getModId()).filter(n->!n.equals("mod:minecraft")).toList(); + return ModList.applyForEachModFile(mf -> "mod:" + mf.getModInfos().getFirst().getModId()) + .filter(n -> !n.equals("mod:minecraft")) + .toList(); } public static Comparator> getSorter() { @@ -53,7 +54,7 @@ public class ResourcePackLoader { order.add("vanilla"); order.add("mod_resources"); - ModList.get().getModFiles().stream() + ModList.getModFiles().stream() .filter(mf -> mf.requiredLanguageLoaders().stream().noneMatch(ls->ls.languageName().equals("minecraft"))) .map(e -> e.getMods().getFirst().getModId()) .map(e -> "mod:" + e) @@ -82,7 +83,7 @@ public class ResourcePackLoader { var version = DetectedVersion.BUILT_IN.packVersion(type); var hiddenPacks = new ArrayList(); - for (var mod : ModList.get().getModFiles()) { + for (var mod : ModList.getModFiles()) { if (mod.requiredLanguageLoaders().stream().anyMatch(ls -> ls.languageName().equals("minecraft"))) continue; @@ -101,7 +102,7 @@ public class ResourcePackLoader { if (pack == null) { // Vanilla only logs an error, instead of propagating, so handle null and warn that something went wrong - ModLoader.get().addWarning(new ModLoadingWarning(modinfo, ModLoadingStage.ERROR, "fml.modloading.brokenresources", file)); + ModLoader.addWarning(new ModLoadingWarning(modinfo, ModLoadingStage.ERROR, "fml.modloading.brokenresources", file)); continue; } diff --git a/src/main/java/net/minecraftforge/server/ServerLifecycleHooks.java b/src/main/java/net/minecraftforge/server/ServerLifecycleHooks.java index 4823a6deef..8f9224d7d1 100644 --- a/src/main/java/net/minecraftforge/server/ServerLifecycleHooks.java +++ b/src/main/java/net/minecraftforge/server/ServerLifecycleHooks.java @@ -71,7 +71,7 @@ public class ServerLifecycleHooks { currentServer = server; // on the dedi server we need to force the stuff to setup properly LogicalSidedProvider.setServer(()->server); - ConfigTracker.INSTANCE.loadConfigs(ModConfig.Type.SERVER, getServerConfigPath(server)); + ConfigTracker.loadConfigs(ModConfig.Type.SERVER, getServerConfigPath(server)); runModifiers(server); return !ServerAboutToStartEvent.BUS.post(new ServerAboutToStartEvent(server)); } @@ -98,7 +98,7 @@ public class ServerLifecycleHooks { latch.countDown(); exitLatch = null; } - ConfigTracker.INSTANCE.unloadConfigs(ModConfig.Type.SERVER, getServerConfigPath(server)); + ConfigTracker.unloadConfigs(ModConfig.Type.SERVER, getServerConfigPath(server)); } public static MinecraftServer getCurrentServer() { diff --git a/src/main/java/net/minecraftforge/server/command/ConfigCommand.java b/src/main/java/net/minecraftforge/server/command/ConfigCommand.java index a055a81018..e7497a6289 100644 --- a/src/main/java/net/minecraftforge/server/command/ConfigCommand.java +++ b/src/main/java/net/minecraftforge/server/command/ConfigCommand.java @@ -40,7 +40,7 @@ public class ConfigCommand { private static int showFile(final CommandContext context) { final String modId = context.getArgument("mod", String.class); final ModConfig.Type type = context.getArgument("type", ModConfig.Type.class); - final String configFileName = ConfigTracker.INSTANCE.getConfigFileName(modId, type); + final String configFileName = ConfigTracker.getConfigFileName(modId, type); if (configFileName != null) { File f = new File(configFileName); context.getSource().sendSuccess(() -> Component.translatable("commands.config.getwithtype", diff --git a/src/main/java/net/minecraftforge/server/command/EntityCommand.java b/src/main/java/net/minecraftforge/server/command/EntityCommand.java index 370eb90be7..7ae07c2557 100644 --- a/src/main/java/net/minecraftforge/server/command/EntityCommand.java +++ b/src/main/java/net/minecraftforge/server/command/EntityCommand.java @@ -77,7 +77,7 @@ class EntityCommand Map>> list = Maps.newHashMap(); level.getEntities().getAll().forEach(e -> { MutablePair> info = list.computeIfAbsent(ForgeRegistries.ENTITY_TYPES.getKey(e.getType()), k -> MutablePair.of(0, Maps.newHashMap())); - ChunkPos chunk = new ChunkPos(e.blockPosition()); + ChunkPos chunk = ChunkPos.containing(e.blockPosition()); info.left++; info.right.put(chunk, info.right.getOrDefault(chunk, 0) + 1); }); @@ -103,7 +103,7 @@ class EntityCommand for (Map.Entry e : toSort) { if (limit-- == 0) break; - sender.sendSuccess(() -> Component.literal(" " + e.getValue() + ": " + e.getKey().x + ", " + e.getKey().z), false); + sender.sendSuccess(() -> Component.literal(" " + e.getValue() + ": " + e.getKey().x() + ", " + e.getKey().z()), false); } return toSort.size(); } diff --git a/src/main/java/net/minecraftforge/server/command/ModIdArgument.java b/src/main/java/net/minecraftforge/server/command/ModIdArgument.java index 1ef36bceb7..3f997e895d 100644 --- a/src/main/java/net/minecraftforge/server/command/ModIdArgument.java +++ b/src/main/java/net/minecraftforge/server/command/ModIdArgument.java @@ -35,7 +35,7 @@ public class ModIdArgument implements ArgumentType { @Override public CompletableFuture listSuggestions(final CommandContext context, final SuggestionsBuilder builder) { - return SharedSuggestionProvider.suggest(ModList.get().applyForEachModContainer(ModContainer::getModId), builder); + return SharedSuggestionProvider.suggest(ModList.applyForEachModContainer(ModContainer::getModId), builder); } @Override diff --git a/src/main/java/net/minecraftforge/server/command/ModListCommand.java b/src/main/java/net/minecraftforge/server/command/ModListCommand.java index 0d0875f664..f041056435 100644 --- a/src/main/java/net/minecraftforge/server/command/ModListCommand.java +++ b/src/main/java/net/minecraftforge/server/command/ModListCommand.java @@ -21,7 +21,7 @@ class ModListCommand { .requires(Commands.hasPermission(Commands.LEVEL_ALL)) .executes(ctx -> { ctx.getSource().sendSuccess(() -> Component.translatable("commands.forge.mods.list", - ModList.get().applyForEachModFile(modFile -> + ModList.applyForEachModFile(modFile -> // locator - filename : firstmod (version) - numberofmods\n String.format(Locale.ROOT, "%s %s : %s (%s) - %d", modFile.getProvider().name().replace(' ', '_'), diff --git a/src/main/java/net/minecraftforge/server/loading/ServerModLoader.java b/src/main/java/net/minecraftforge/server/loading/ServerModLoader.java index a13e0f723d..3607092b37 100644 --- a/src/main/java/net/minecraftforge/server/loading/ServerModLoader.java +++ b/src/main/java/net/minecraftforge/server/loading/ServerModLoader.java @@ -16,8 +16,7 @@ import org.apache.logging.log4j.Logger; import java.io.File; import java.util.List; -public class ServerModLoader -{ +public final class ServerModLoader { private static final Logger LOGGER = LogManager.getLogger(); private static boolean hasErrors = false; @@ -27,9 +26,9 @@ public class ServerModLoader }); LanguageHook.loadForgeAndMCLangs(); try { - ModLoader.get().gatherAndInitializeMods(ModWorkManager.syncExecutor(), ModWorkManager.parallelExecutor(), ()->{}); - ModLoader.get().loadMods(ModWorkManager.syncExecutor(), ModWorkManager.parallelExecutor(), ()->{}); - ModLoader.get().finishMods(ModWorkManager.syncExecutor(), ModWorkManager.parallelExecutor(), ()->{}); + ModLoader.gatherAndInitializeMods(ModWorkManager.syncExecutor(), ModWorkManager.parallelExecutor(), ()->{}); + ModLoader.loadMods(ModWorkManager.syncExecutor(), ModWorkManager.parallelExecutor(), ()->{}); + ModLoader.finishMods(ModWorkManager.syncExecutor(), ModWorkManager.parallelExecutor(), ()->{}); } catch (LoadingFailedException error) { ServerModLoader.hasErrors = true; // In case its not loaded properly @@ -37,7 +36,7 @@ public class ServerModLoader CrashReportExtender.dumpModLoadingCrashReport(LOGGER, error, new File(".")); throw error; } - List warnings = ModLoader.get().getWarnings(); + List warnings = ModLoader.getWarnings(); if (!warnings.isEmpty()) { LOGGER.warn(Logging.LOADING, "Mods loaded with {} warnings", warnings.size()); warnings.forEach(warning -> LOGGER.warn(Logging.LOADING, warning.formatToString())); diff --git a/src/main/java/net/minecraftforge/versions/forge/ForgeVersion.java b/src/main/java/net/minecraftforge/versions/forge/ForgeVersion.java index 13cc0057ed..ab596a8040 100644 --- a/src/main/java/net/minecraftforge/versions/forge/ForgeVersion.java +++ b/src/main/java/net/minecraftforge/versions/forge/ForgeVersion.java @@ -13,7 +13,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.Nullable; -public class ForgeVersion { +public final class ForgeVersion { private static final Logger LOGGER = LogManager.getLogger(); // This is Forge's Mod Id, used for the ForgeMod and resource locations public static final String MOD_ID = "forge"; @@ -42,12 +42,12 @@ public class ForgeVersion { } public static VersionChecker.Status getStatus() { - return VersionChecker.getResult(ModList.get().getModFileById(MOD_ID).getMods().getFirst()).status(); + return VersionChecker.getResult(ModList.getModFileById(MOD_ID).getMods().getFirst()).status(); } @Nullable public static String getTarget() { - VersionChecker.CheckResult res = VersionChecker.getResult(ModList.get().getModFileById(MOD_ID).getMods().getFirst()); + VersionChecker.CheckResult res = VersionChecker.getResult(ModList.getModFileById(MOD_ID).getMods().getFirst()); return res.target() == null ? "" : res.target().toString(); } diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index 960b760d87..581a13239b 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -1,816 +1,736 @@ -public net.minecraft.advancements.CriteriaTriggers m_10595_(Ljava/lang/String;Lnet/minecraft/advancements/CriterionTrigger;)Lnet/minecraft/advancements/CriterionTrigger; # register -default net.minecraft.client.KeyMapping f_90817_ # isDown -public net.minecraft.client.Minecraft f_90987_ # textureManager -public-f net.minecraft.client.Options f_92059_ # keyMappings +public net.minecraft.advancements.CriteriaTriggers register(Ljava/lang/String;Lnet/minecraft/advancements/CriterionTrigger;)Lnet/minecraft/advancements/CriterionTrigger; +default net.minecraft.client.KeyMapping isDown +public net.minecraft.client.Minecraft textureManager +public-f net.minecraft.client.Options keyMappings public net.minecraft.client.Options$FieldAccess -public net.minecraft.client.color.item.ItemTintSources f_371619_ # ID_MAPPER +public net.minecraft.client.color.item.ItemTintSources ID_MAPPER #group protected net.minecraft.client.data.models.BlockModelGenerators *() -protected net.minecraft.client.data.models.BlockModelGenerators m_372042_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/resources/Identifier;)V # registerSimpleItemModel -protected net.minecraft.client.data.models.BlockModelGenerators m_372065_()V # createCartographyTable -protected net.minecraft.client.data.models.BlockModelGenerators m_372090_()V # createPitcherCrop -protected net.minecraft.client.data.models.BlockModelGenerators m_372114_(Lnet/minecraft/client/data/models/blockstates/MultiPartGenerator;Lnet/minecraft/client/renderer/block/model/multipart/Condition;Lnet/minecraft/client/renderer/block/model/VariantMutator;)V # addSlotStateAndRotationVariants -protected net.minecraft.client.data.models.BlockModelGenerators m_372121_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V # createWeightedPressurePlate -protected net.minecraft.client.data.models.BlockModelGenerators m_372128_()V # createSmithingTable -protected net.minecraft.client.data.models.BlockModelGenerators m_372129_()V # createPetrifiedOakSlab -protected net.minecraft.client.data.models.BlockModelGenerators m_372134_()V # createFarmland -protected net.minecraft.client.data.models.BlockModelGenerators m_372158_()V # createBookshelf -protected net.minecraft.client.data.models.BlockModelGenerators m_372188_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; # createAxisAlignedPillarBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_372190_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/item/Item;)V # createMultiface -protected net.minecraft.client.data.models.BlockModelGenerators m_372196_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V # copyTrapdoorModel -protected net.minecraft.client.data.models.BlockModelGenerators m_372199_()V # createStructureBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_372209_(Lnet/minecraft/world/item/Item;Lnet/minecraft/world/level/block/Block;Ljava/lang/String;)Lnet/minecraft/resources/Identifier; # createFlatItemModelWithBlockTexture -protected net.minecraft.client.data.models.BlockModelGenerators m_372231_()Lnet/minecraft/client/data/models/blockstates/PropertyDispatch; # createRotatedPillar -protected net.minecraft.client.data.models.BlockModelGenerators m_372234_(Lnet/minecraft/world/level/block/Block;)V # createRotatedMirroredVariantBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_372247_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; # createTrapdoor -protected net.minecraft.client.data.models.BlockModelGenerators m_372261_()V # createBamboo -protected net.minecraft.client.data.models.BlockModelGenerators m_372277_()V # createSnifferEgg -protected net.minecraft.client.data.models.BlockModelGenerators m_372283_(Lnet/minecraft/client/renderer/block/model/Variant;)Lnet/minecraft/client/renderer/block/model/Variant; # lambda$static$0 -protected net.minecraft.client.data.models.BlockModelGenerators m_372285_(Lnet/minecraft/world/level/block/Block;)V # createLeafLitter -protected net.minecraft.client.data.models.BlockModelGenerators m_372302_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; # createButton -protected net.minecraft.client.data.models.BlockModelGenerators m_372307_()V # createMangrovePropagule -protected net.minecraft.client.data.models.BlockModelGenerators m_372310_()V # createPointedDripstone -protected net.minecraft.client.data.models.BlockModelGenerators m_372325_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/renderer/block/model/Variant;Lnet/minecraft/client/data/models/model/TextureMapping;Ljava/util/function/BiConsumer;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; # createMirroredColumnGenerator -protected net.minecraft.client.data.models.BlockModelGenerators m_372364_(Lnet/minecraft/world/level/block/state/properties/BooleanProperty;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/PropertyDispatch; # createBooleanModelDispatch -protected net.minecraft.client.data.models.BlockModelGenerators m_372368_()V # createJigsaw -protected net.minecraft.client.data.models.BlockModelGenerators m_372383_()V # createAmethystClusters -protected net.minecraft.client.data.models.BlockModelGenerators m_372396_([Lnet/minecraft/world/level/block/Block;)V # createCampfires -protected net.minecraft.client.data.models.BlockModelGenerators m_372397_(Lnet/minecraft/world/level/block/Block;)V # createLantern -protected net.minecraft.client.data.models.BlockModelGenerators m_372399_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/MultiVariantGenerator; # createSimpleBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_372406_()V # createObserver -protected net.minecraft.client.data.models.BlockModelGenerators m_372418_()V # createDaylightDetector -protected net.minecraft.client.data.models.BlockModelGenerators m_372455_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/model/TexturedModel$Provider;Lnet/minecraft/client/data/models/model/TexturedModel$Provider;)V # createRotatedPillarWithHorizontalVariant -protected net.minecraft.client.data.models.BlockModelGenerators m_372502_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/BlockModelGenerators$PlantType;Lnet/minecraft/client/data/models/model/TextureMapping;)V # createCrossBlockWithDefaultItem -protected net.minecraft.client.data.models.BlockModelGenerators m_372503_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V # createStems -protected net.minecraft.client.data.models.BlockModelGenerators m_372507_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/item/Item;)V # createAirLikeBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_372519_()V # createGrindstone -protected net.minecraft.client.data.models.BlockModelGenerators m_372527_(Lnet/minecraft/world/level/block/Block;)V # registerSimpleFlatItemModel -protected net.minecraft.client.data.models.BlockModelGenerators m_372545_()V # createLightBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_372548_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V # createCoral -protected net.minecraft.client.data.models.BlockModelGenerators m_372620_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V # copyCopperBulbModel -protected net.minecraft.client.data.models.BlockModelGenerators m_372644_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)V # createGrassLikeBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_372663_()V # createFrostedIce -protected net.minecraft.client.data.models.BlockModelGenerators m_372681_(Lnet/minecraft/client/data/models/model/TexturedModel$Provider;[Lnet/minecraft/world/level/block/Block;)V # createColoredBlockWithStateRotations -protected net.minecraft.client.data.models.BlockModelGenerators m_372696_()V # createEndPortalFrame -protected net.minecraft.client.data.models.BlockModelGenerators m_372705_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; # createOrientableTrapdoor -protected net.minecraft.client.data.models.BlockModelGenerators m_372711_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; # createDoor -protected net.minecraft.client.data.models.BlockModelGenerators m_372719_()V # createChorusFlower -protected net.minecraft.client.data.models.BlockModelGenerators m_372720_()V # createCocoa -protected net.minecraft.client.data.models.BlockModelGenerators m_372724_()V # createSmallDripleaf -protected net.minecraft.client.data.models.BlockModelGenerators m_372726_(Lnet/minecraft/world/level/block/Block;)V # createMultiface -protected net.minecraft.client.data.models.BlockModelGenerators m_372729_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/BlockModelGenerators$PlantType;)V # createGrowingPlant -protected net.minecraft.client.data.models.BlockModelGenerators m_372730_()V # createBeds -protected net.minecraft.client.data.models.BlockModelGenerators m_372737_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/BlockModelGenerators$PlantType;)V # createCrossBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_372739_()V # createNetherPortalBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_372745_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V # createNetherRoots -protected net.minecraft.client.data.models.BlockModelGenerators m_372768_(Lnet/minecraft/world/level/block/Block;)V # createAmethystCluster -protected net.minecraft.client.data.models.BlockModelGenerators m_372788_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V # copyDoorModel -protected net.minecraft.client.data.models.BlockModelGenerators m_372818_(Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/client/data/models/MultiVariant; # createTopFireModels -protected net.minecraft.client.data.models.BlockModelGenerators m_372820_(Lnet/minecraft/client/data/models/blockstates/ConditionBuilder;)Lnet/minecraft/client/data/models/blockstates/ConditionBuilder; # lambda$static$1 -protected net.minecraft.client.data.models.BlockModelGenerators m_372825_(II)Lnet/minecraft/client/renderer/block/model/Variant; # createTurtleEggModel -protected net.minecraft.client.data.models.BlockModelGenerators m_372827_()V # createMuddyMangroveRoots -protected net.minecraft.client.data.models.BlockModelGenerators m_372830_(Lnet/minecraft/world/level/block/Block;)V # createFlowerBed -protected net.minecraft.client.data.models.BlockModelGenerators m_372831_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V # copyModel -protected net.minecraft.client.data.models.BlockModelGenerators m_372857_()V # createSweetBerryBush -protected net.minecraft.client.data.models.BlockModelGenerators m_372870_()V # createSculkCatalyst -protected net.minecraft.client.data.models.BlockModelGenerators m_372876_()V # createBigDripLeafBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_372882_(Lnet/minecraft/client/data/models/model/TexturedModel$Provider;[Lnet/minecraft/world/level/block/Block;)V # createColoredBlockWithRandomRotations -protected net.minecraft.client.data.models.BlockModelGenerators m_372884_()V # createLever -protected net.minecraft.client.data.models.BlockModelGenerators m_372888_(Lnet/minecraft/core/FrontAndTop;)Lnet/minecraft/client/renderer/block/model/VariantMutator; # applyRotation -protected net.minecraft.client.data.models.BlockModelGenerators m_372908_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/resources/Identifier;Z)V # createChest -protected net.minecraft.client.data.models.BlockModelGenerators m_372933_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/BlockModelGenerators$PlantType;)V # createPlantWithDefaultItem -protected net.minecraft.client.data.models.BlockModelGenerators m_372942_()V # createStonecutter -protected net.minecraft.client.data.models.BlockModelGenerators m_372944_(Lnet/minecraft/world/level/block/Block;)V # createCreakingHeart -protected net.minecraft.client.data.models.BlockModelGenerators m_372948_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/renderer/block/model/Variant;Lnet/minecraft/client/data/models/model/TextureMapping;Ljava/util/function/BiConsumer;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; # createNorthWestMirroredCubeGenerator -protected net.minecraft.client.data.models.BlockModelGenerators m_372954_()V # createSmoothStoneSlab -protected net.minecraft.client.data.models.BlockModelGenerators m_372958_()V # createDirtPath -protected net.minecraft.client.data.models.BlockModelGenerators m_372959_()V # createComparator -protected net.minecraft.client.data.models.BlockModelGenerators m_372960_(Lnet/minecraft/world/level/block/Block;)V # createTintedDoublePlant -protected net.minecraft.client.data.models.BlockModelGenerators m_372976_(Lnet/minecraft/world/level/block/Block;)V # createAzalea -protected net.minecraft.client.data.models.BlockModelGenerators m_373004_(Lnet/minecraft/world/level/block/Block;)V # createCommandBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_373008_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/item/DyeColor;)V # createShulkerBox -protected net.minecraft.client.data.models.BlockModelGenerators m_373026_(Lnet/minecraft/world/item/Item;)V # registerSimpleFlatItemModel -protected net.minecraft.client.data.models.BlockModelGenerators m_373035_(Lnet/minecraft/world/level/block/Block;)V # createItemWithGrassTint -protected net.minecraft.client.data.models.BlockModelGenerators m_373046_(Lnet/minecraft/world/item/Item;Lnet/minecraft/world/level/block/Block;Ljava/lang/String;)Lnet/minecraft/resources/Identifier; # createFlatItemModelWithBlockTextureAndOverlay -protected net.minecraft.client.data.models.BlockModelGenerators m_373071_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/BlockModelGenerators$PlantType;Lnet/minecraft/client/data/models/model/TextureMapping;)V # createCrossBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_373072_(Lnet/minecraft/world/level/block/Block;)V # createParticleOnlyBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_373089_(Lnet/minecraft/world/item/Item;)Lnet/minecraft/resources/Identifier; # createFlatItemModel -protected net.minecraft.client.data.models.BlockModelGenerators m_373098_()V # createCaveVines -protected net.minecraft.client.data.models.BlockModelGenerators m_373159_()V # createComposter -protected net.minecraft.client.data.models.BlockModelGenerators m_373171_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Ljava/util/function/BiFunction;)V # createCraftingTableLike -protected net.minecraft.client.data.models.BlockModelGenerators m_373177_()V # createTrialSpawner -protected net.minecraft.client.data.models.BlockModelGenerators m_373181_()V # createVine -protected net.minecraft.client.data.models.BlockModelGenerators m_373188_()V # createInfestedStone -protected net.minecraft.client.data.models.BlockModelGenerators m_373195_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/renderer/special/SpecialModelRenderer$Unbaked;)V # generateSimpleSpecialItemModel -protected net.minecraft.client.data.models.BlockModelGenerators m_373216_(Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/client/data/models/MultiVariant; # createFloorFireModels -protected net.minecraft.client.data.models.BlockModelGenerators m_373228_(Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/client/data/models/BlockModelGenerators$BlockFamilyProvider; # family -protected net.minecraft.client.data.models.BlockModelGenerators m_373255_()V # createPumpkins -protected net.minecraft.client.data.models.BlockModelGenerators m_373266_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; # createPressurePlate -protected net.minecraft.client.data.models.BlockModelGenerators m_373285_(Lnet/minecraft/world/level/block/state/properties/Property;Ljava/lang/Comparable;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/PropertyDispatch; # createEmptyOrFullDispatch -protected net.minecraft.client.data.models.BlockModelGenerators m_373293_()V # createTripwire -protected net.minecraft.client.data.models.BlockModelGenerators m_373303_(Lnet/minecraft/world/level/block/Block;)V # createMossyCarpet -protected net.minecraft.client.data.models.BlockModelGenerators m_373329_()V # createSculkSensor -protected net.minecraft.client.data.models.BlockModelGenerators m_373330_()V # createPistonHeads -protected net.minecraft.client.data.models.BlockModelGenerators m_373332_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; # createStairs -protected net.minecraft.client.data.models.BlockModelGenerators m_373333_()V # createBanners -protected net.minecraft.client.data.models.BlockModelGenerators m_373336_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/BlockModelGenerators$PlantType;)V # createCrossBlockWithDefaultItem -protected net.minecraft.client.data.models.BlockModelGenerators m_373340_()V # createSnowBlocks -protected net.minecraft.client.data.models.BlockModelGenerators m_373341_(Lnet/minecraft/core/Direction;Lnet/minecraft/world/level/block/state/properties/DripstoneThickness;)Lnet/minecraft/client/data/models/MultiVariant; # createPointedDripstoneVariant -protected net.minecraft.client.data.models.BlockModelGenerators m_373342_(Lnet/minecraft/world/level/block/Block;)V # createDispenserBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_373358_()V # createSculkShrieker -protected net.minecraft.client.data.models.BlockModelGenerators m_373367_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; # createRotatedPillarWithHorizontalVariant -protected net.minecraft.client.data.models.BlockModelGenerators m_373371_(Lnet/minecraft/world/level/block/Block;)V # createNonTemplateModelBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_373393_()V # createRedstoneTorch -protected net.minecraft.client.data.models.BlockModelGenerators m_373406_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;)V # createAxisAlignedPillarBlockCustomModel -protected net.minecraft.client.data.models.BlockModelGenerators m_373413_(Lnet/minecraft/world/level/block/Block;)V # createMultifaceBlockStates -protected net.minecraft.client.data.models.BlockModelGenerators m_373423_()V # createGrassBlocks -protected net.minecraft.client.data.models.BlockModelGenerators m_373424_()V # createChiseledBookshelf -protected net.minecraft.client.data.models.BlockModelGenerators m_373437_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V # createNonTemplateModelBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_373466_(Lnet/minecraft/world/item/Item;Lnet/minecraft/resources/Identifier;)V # registerSimpleItemModel -protected net.minecraft.client.data.models.BlockModelGenerators m_373467_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/model/TextureMapping;)V # createPistonVariant -protected net.minecraft.client.data.models.BlockModelGenerators m_373468_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/resources/Identifier;Lnet/minecraft/client/color/item/ItemTintSource;)V # registerSimpleTintedItemModel -protected net.minecraft.client.data.models.BlockModelGenerators m_373481_(Lnet/minecraft/world/level/block/Block;)V # createMushroomBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_373523_()V # createRepeater -protected net.minecraft.client.data.models.BlockModelGenerators m_373526_()V # createRedstoneLamp -protected net.minecraft.client.data.models.BlockModelGenerators m_373558_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/model/TexturedModel$Provider;)V # createFurnace -protected net.minecraft.client.data.models.BlockModelGenerators m_373573_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; # createSlab -protected net.minecraft.client.data.models.BlockModelGenerators m_373578_()V # createPitcherPlant -protected net.minecraft.client.data.models.BlockModelGenerators m_373608_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/BlockModelGenerators$PlantType;)V # createPlant -protected net.minecraft.client.data.models.BlockModelGenerators m_373622_(Lnet/minecraft/world/level/block/Block;Ljava/util/function/Function;)V # createBeeNest -protected net.minecraft.client.data.models.BlockModelGenerators m_373634_()V # createScaffolding -protected net.minecraft.client.data.models.BlockModelGenerators m_373643_()V # createVault -protected net.minecraft.client.data.models.BlockModelGenerators m_373660_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/model/TextureMapping;Ljava/util/function/BiConsumer;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; # createPillarBlockUVLocked -protected net.minecraft.client.data.models.BlockModelGenerators m_373680_(Lnet/minecraft/world/level/block/Block;)V # createCopperBulb -protected net.minecraft.client.data.models.BlockModelGenerators m_373694_()V # createCauldrons -protected net.minecraft.client.data.models.BlockModelGenerators m_373697_()V # createSoulFire -protected net.minecraft.client.data.models.BlockModelGenerators m_373701_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; # createWall -protected net.minecraft.client.data.models.BlockModelGenerators m_373707_(Lnet/minecraft/world/level/block/Block;)V # createPottedAzalea -protected net.minecraft.client.data.models.BlockModelGenerators m_373721_(Lnet/minecraft/world/level/block/Block;)V # createNonTemplateHorizontalBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_373723_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V # createGlassBlocks -protected net.minecraft.client.data.models.BlockModelGenerators m_373729_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/model/TexturedModel$Provider;)V # createHorizontallyRotatedBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_373730_(Lnet/minecraft/world/level/block/Block;Ljava/lang/String;Lnet/minecraft/client/data/models/model/ModelTemplate;Ljava/util/function/Function;)Lnet/minecraft/resources/Identifier; # createSuffixedVariant -protected net.minecraft.client.data.models.BlockModelGenerators m_373795_(ILjava/lang/String;Lnet/minecraft/client/data/models/model/TextureMapping;)Lnet/minecraft/client/renderer/block/model/Variant; # createTurtleEggModel -protected net.minecraft.client.data.models.BlockModelGenerators m_373801_(Lnet/minecraft/world/item/Item;Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/resources/Identifier; # createFlatItemModelWithBlockTexture -protected net.minecraft.client.data.models.BlockModelGenerators m_373808_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/renderer/block/model/Variant;Lnet/minecraft/client/data/models/model/TextureMapping;Ljava/util/function/BiConsumer;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; # createMirroredCubeGenerator -protected net.minecraft.client.data.models.BlockModelGenerators m_373813_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/SkullBlock$Type;Lnet/minecraft/resources/Identifier;)V # createHead -protected net.minecraft.client.data.models.BlockModelGenerators m_373825_(Lnet/minecraft/world/level/block/Block;)V # createAnvil -protected net.minecraft.client.data.models.BlockModelGenerators m_373827_()V # createTallSeagrass -protected net.minecraft.client.data.models.BlockModelGenerators m_373843_()V # createHeads -protected net.minecraft.client.data.models.BlockModelGenerators m_373844_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V # createLightningRod -protected net.minecraft.client.data.models.BlockModelGenerators m_373862_()V # createFire -protected net.minecraft.client.data.models.BlockModelGenerators m_373864_()V # createBrewingStand -protected net.minecraft.client.data.models.BlockModelGenerators m_373879_()V # createMagmaBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_373916_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/state/properties/Property;[I)V # createCropBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_373929_()V # createSunflower -protected net.minecraft.client.data.models.BlockModelGenerators m_373936_()V # createLilyPad -protected net.minecraft.client.data.models.BlockModelGenerators m_373941_(Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/client/data/models/MultiVariant; # createSideFireModels -protected net.minecraft.client.data.models.BlockModelGenerators m_373945_()V # createTurtleEgg -protected net.minecraft.client.data.models.BlockModelGenerators m_373974_()V # createBell -protected net.minecraft.client.data.models.BlockModelGenerators m_373984_(Lnet/minecraft/world/level/block/Block;)V # createPassiveRail -protected net.minecraft.client.data.models.BlockModelGenerators m_373989_(Lnet/minecraft/world/level/block/Block;)V # createRotatableColumn -protected net.minecraft.client.data.models.BlockModelGenerators m_374000_(Lnet/minecraft/world/level/block/Block;)V # createRotatedVariantBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_374002_(Lnet/minecraft/data/BlockFamily;)V # lambda$run$62 -protected net.minecraft.client.data.models.BlockModelGenerators m_374004_()V # createCalibratedSculkSensor -protected net.minecraft.client.data.models.BlockModelGenerators m_374006_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/model/TextureMapping;)V # createPumpkinVariant -protected net.minecraft.client.data.models.BlockModelGenerators m_374030_()V # createChests -protected net.minecraft.client.data.models.BlockModelGenerators m_374031_(Ljava/lang/Comparable;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Ljava/lang/Comparable;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createEmptyOrFullDispatch$24 -protected net.minecraft.client.data.models.BlockModelGenerators m_374041_(Lnet/minecraft/world/level/block/Block;Ljava/lang/String;)V # registerSimpleFlatItemModel -protected net.minecraft.client.data.models.BlockModelGenerators m_374042_(Lnet/minecraft/world/level/block/Block;)V # createTrapdoor -protected net.minecraft.client.data.models.BlockModelGenerators m_374126_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)V # createDoubleBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_374134_(I)Lnet/minecraft/client/data/models/MultiVariant; # createBambooModels -protected net.minecraft.client.data.models.BlockModelGenerators m_374141_(Lnet/minecraft/world/level/block/Block;)V # createBrushableBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_374146_(Lnet/minecraft/world/level/block/Block;)V # createHangingMoss -protected net.minecraft.client.data.models.BlockModelGenerators m_374177_()V # createCrafterBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_374216_(Lnet/minecraft/world/level/block/Block;)V # createOrientableTrapdoor -protected net.minecraft.client.data.models.BlockModelGenerators m_374249_()V # createChorusPlant -protected net.minecraft.client.data.models.BlockModelGenerators m_374256_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V # createFullAndCarpetBlocks -protected net.minecraft.client.data.models.BlockModelGenerators m_374265_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/resources/Identifier;)V # createAirLikeBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_374268_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/item/DyeColor;)V # createBanner -protected net.minecraft.client.data.models.BlockModelGenerators m_374273_()V # createNetherrack -protected net.minecraft.client.data.models.BlockModelGenerators m_374284_()V # createInfestedDeepslate -protected net.minecraft.client.data.models.BlockModelGenerators m_374293_()V # createPistons -protected net.minecraft.client.data.models.BlockModelGenerators m_374299_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; # createFence -protected net.minecraft.client.data.models.BlockModelGenerators m_374303_(Lnet/minecraft/world/level/block/Block;)V # createNyliumBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_374308_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V # createCandleAndCandleCake -protected net.minecraft.client.data.models.BlockModelGenerators m_374339_()V # createRedstoneWire -protected net.minecraft.client.data.models.BlockModelGenerators m_374347_()V # createBarrel -protected net.minecraft.client.data.models.BlockModelGenerators m_374348_()V # createRespawnAnchor -protected net.minecraft.client.data.models.BlockModelGenerators m_374353_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/client/data/models/MultiVariant; # createParticleOnlyBlockModel -protected net.minecraft.client.data.models.BlockModelGenerators m_374355_()V # createFrogspawnBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_374363_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/BlockModelGenerators$PlantType;)V # createDoublePlantWithDefaultItem -protected net.minecraft.client.data.models.BlockModelGenerators m_374369_(Lnet/minecraft/world/level/block/Block;Ljava/lang/String;)V # registerTwoLayerFlatItemModel -protected net.minecraft.client.data.models.BlockModelGenerators m_374411_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/item/DyeColor;)V # createBed -protected net.minecraft.client.data.models.BlockModelGenerators m_374412_()V # createTripwireHook -protected net.minecraft.client.data.models.BlockModelGenerators m_374415_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; # createCustomFence -protected net.minecraft.client.data.models.BlockModelGenerators m_374416_()V # createHopper -protected net.minecraft.client.data.models.BlockModelGenerators m_374434_(Lnet/minecraft/world/level/block/Block;)V # createDoor -protected net.minecraft.client.data.models.BlockModelGenerators m_374440_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; # createCopperBulb -protected net.minecraft.client.data.models.BlockModelGenerators m_374454_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V # createCoralFans -protected net.minecraft.client.data.models.BlockModelGenerators m_374464_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V # createNormalTorch -protected net.minecraft.client.data.models.BlockModelGenerators m_374484_()V # createSeaPickle -protected net.minecraft.client.data.models.BlockModelGenerators m_374486_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/BlockModelGenerators$PlantType;)V # createDoublePlant -protected net.minecraft.client.data.models.BlockModelGenerators m_374496_(Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/client/data/models/BlockModelGenerators$WoodProvider; # woodProvider -protected net.minecraft.client.data.models.BlockModelGenerators m_374498_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Z)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; # createFenceGate -protected net.minecraft.client.data.models.BlockModelGenerators m_374511_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/BlockModelGenerators$PlantType;Lnet/minecraft/world/level/block/state/properties/Property;[I)V # createCrossBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_374514_(Lnet/minecraft/world/level/block/Block;)V # createActiveRail -protected net.minecraft.client.data.models.BlockModelGenerators m_374532_(Lnet/minecraft/client/data/models/blockstates/MultiPartGenerator;Lnet/minecraft/client/renderer/block/model/multipart/Condition;Lnet/minecraft/client/renderer/block/model/VariantMutator;Lnet/minecraft/world/level/block/state/properties/BooleanProperty;Lnet/minecraft/client/data/models/model/ModelTemplate;Z)V # addBookSlotModel -protected net.minecraft.client.data.models.BlockModelGenerators m_374546_()V # createCakeBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_382774_(Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/world/level/block/entity/vault/VaultState;Ljava/lang/Boolean;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createVault$34 -protected net.minecraft.client.data.models.BlockModelGenerators m_382777_(Lnet/minecraft/client/data/models/blockstates/ConditionBuilder;Lnet/minecraft/world/level/block/state/properties/Property;Lnet/minecraft/client/renderer/block/model/VariantMutator;)V # lambda$createMultifaceBlockStates$48 -protected net.minecraft.client.data.models.BlockModelGenerators m_382778_(Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/world/level/block/state/properties/SculkSensorPhase;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createSculkSensor$35 -protected net.minecraft.client.data.models.BlockModelGenerators m_382780_(Ljava/util/function/Function;Lnet/minecraft/world/level/block/state/StateHolder;Lcom/google/common/collect/ImmutableMap$Builder;Lnet/minecraft/core/Direction;Lnet/minecraft/client/renderer/block/model/VariantMutator;)V # lambda$selectMultifaceProperties$47 -protected net.minecraft.client.data.models.BlockModelGenerators m_382783_(Lnet/minecraft/client/renderer/block/model/Variant;)Lnet/minecraft/util/random/Weighted; # lambda$variants$9 -protected net.minecraft.client.data.models.BlockModelGenerators m_382786_(Lnet/minecraft/client/data/models/blockstates/ConditionBuilder;)Lnet/minecraft/client/data/models/blockstates/ConditionBuilder; # lambda$static$3 -protected net.minecraft.client.data.models.BlockModelGenerators m_382787_(Lnet/minecraft/client/data/models/blockstates/ConditionBuilder;)Lnet/minecraft/client/data/models/blockstates/ConditionBuilder; # lambda$static$2 -protected net.minecraft.client.data.models.BlockModelGenerators m_382788_(Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Ljava/lang/Boolean;Lnet/minecraft/world/level/block/state/properties/RailShape;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createActiveRail$20 -protected net.minecraft.client.data.models.BlockModelGenerators m_382791_(Lnet/minecraft/client/data/models/blockstates/ConditionBuilder;Lnet/minecraft/world/level/block/state/properties/Property;Lnet/minecraft/client/renderer/block/model/VariantMutator;)V # lambda$createMossyCarpet$50 -protected net.minecraft.client.data.models.BlockModelGenerators m_382792_(Ljava/lang/Integer;Ljava/lang/Integer;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createTurtleEgg$43 -protected net.minecraft.client.data.models.BlockModelGenerators m_382793_(Lnet/minecraft/client/data/models/blockstates/MultiPartGenerator;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/blockstates/ConditionBuilder;Lnet/minecraft/world/level/block/state/properties/Property;Lnet/minecraft/client/renderer/block/model/VariantMutator;)V # lambda$createMossyCarpet$53 -protected net.minecraft.client.data.models.BlockModelGenerators m_382794_(Lnet/minecraft/client/data/models/blockstates/ConditionBuilder;)Lnet/minecraft/client/data/models/blockstates/ConditionBuilder; # lambda$static$4 -protected net.minecraft.client.data.models.BlockModelGenerators m_382795_(Lnet/minecraft/client/data/models/blockstates/MultiPartGenerator;Lnet/minecraft/client/renderer/block/model/multipart/Condition;Lnet/minecraft/client/renderer/block/model/VariantMutator;Lcom/mojang/datafixers/util/Pair;)V # lambda$addSlotStateAndRotationVariants$59 -protected net.minecraft.client.data.models.BlockModelGenerators m_382796_(Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/world/level/block/state/properties/SculkSensorPhase;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createCalibratedSculkSensor$36 -protected net.minecraft.client.data.models.BlockModelGenerators m_382800_(Lnet/minecraft/client/data/models/blockstates/ConditionBuilder;)Lnet/minecraft/client/data/models/blockstates/ConditionBuilder; # lambda$static$8 -protected net.minecraft.client.data.models.BlockModelGenerators m_382801_(Lnet/minecraft/client/data/models/blockstates/MultiPartGenerator;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/blockstates/ConditionBuilder;Lnet/minecraft/world/level/block/state/properties/Property;Lnet/minecraft/client/renderer/block/model/VariantMutator;)V # lambda$createMultifaceBlockStates$49 -protected net.minecraft.client.data.models.BlockModelGenerators m_382802_(Lnet/minecraft/client/data/models/blockstates/ConditionBuilder;)Lnet/minecraft/client/data/models/blockstates/ConditionBuilder; # lambda$static$7 -protected net.minecraft.client.data.models.BlockModelGenerators m_382807_(Lnet/minecraft/client/data/models/blockstates/ConditionBuilder;)Lnet/minecraft/client/data/models/blockstates/ConditionBuilder; # lambda$static$5 -protected net.minecraft.client.data.models.BlockModelGenerators m_382808_(Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Ljava/lang/Boolean;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createSculkCatalyst$55 -protected net.minecraft.client.data.models.BlockModelGenerators m_382809_(Lnet/minecraft/client/data/models/blockstates/ConditionBuilder;)Lnet/minecraft/client/data/models/blockstates/ConditionBuilder; # lambda$static$6 -protected net.minecraft.client.data.models.BlockModelGenerators m_382810_(Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Ljava/lang/Boolean;Ljava/lang/Boolean;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createCopperBulb$29 -protected net.minecraft.client.data.models.BlockModelGenerators m_382811_(Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/world/level/block/entity/trialspawner/TrialSpawnerState;Ljava/lang/Boolean;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createTrialSpawner$33 -protected net.minecraft.client.data.models.BlockModelGenerators m_384704_(Lnet/minecraft/world/level/block/state/StateHolder;Ljava/util/function/Function;)Ljava/util/Map; # selectMultifaceProperties -protected net.minecraft.client.data.models.BlockModelGenerators m_384866_()Lnet/minecraft/client/data/models/blockstates/ConditionBuilder; # condition -protected net.minecraft.client.data.models.BlockModelGenerators m_385280_(Lnet/minecraft/client/renderer/block/model/Variant;)Lnet/minecraft/client/data/models/MultiVariant; # variant -protected net.minecraft.client.data.models.BlockModelGenerators m_385381_(Lnet/minecraft/resources/Identifier;)Lnet/minecraft/client/data/models/MultiVariant; # plainVariant -protected net.minecraft.client.data.models.BlockModelGenerators m_385921_([Lnet/minecraft/client/renderer/block/model/Variant;)Lnet/minecraft/client/data/models/MultiVariant; # variants -protected net.minecraft.client.data.models.BlockModelGenerators m_386106_()V # createTestBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_386644_([Lnet/minecraft/client/data/models/blockstates/ConditionBuilder;)Lnet/minecraft/client/renderer/block/model/multipart/Condition; # or -protected net.minecraft.client.data.models.BlockModelGenerators m_387650_(Lnet/minecraft/resources/Identifier;)Lnet/minecraft/client/renderer/block/model/Variant; # plainModel -protected net.minecraft.client.data.models.BlockModelGenerators m_388125_(Lnet/minecraft/client/renderer/block/model/Variant;Lnet/minecraft/client/renderer/block/model/Variant;)Lnet/minecraft/client/data/models/MultiVariant; # createRotatedVariants -protected net.minecraft.client.data.models.BlockModelGenerators m_388369_(Lnet/minecraft/client/data/models/model/TexturedModel$Provider;Lnet/minecraft/world/level/block/Block;Ljava/lang/String;)Lnet/minecraft/resources/Identifier; # createCreakingHeartModel -protected net.minecraft.client.data.models.BlockModelGenerators m_388485_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Ljava/util/function/Function;Lnet/minecraft/client/data/models/MultiVariant;Ljava/util/function/Function;Lnet/minecraft/client/data/models/MultiVariant;Ljava/util/function/Function;Lnet/minecraft/client/data/models/MultiVariant;Ljava/util/function/Function;)V # createSegmentedBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_389054_(Lnet/minecraft/client/renderer/block/model/Variant;)Lnet/minecraft/client/data/models/MultiVariant; # createRotatedVariants -protected net.minecraft.client.data.models.BlockModelGenerators m_402965_()V # createDriedGhastBlock -protected net.minecraft.client.data.models.BlockModelGenerators m_414128_(Ljava/util/function/BiConsumer;Lcom/mojang/datafixers/util/Pair;)V # lambda$forEachHorizontalDirection$57 -protected net.minecraft.client.data.models.BlockModelGenerators m_414129_(Lnet/minecraft/client/data/models/blockstates/MultiPartGenerator;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/core/Direction;Lnet/minecraft/client/renderer/block/model/VariantMutator;)V # lambda$createChiseledBookshelf$58 -protected net.minecraft.client.data.models.BlockModelGenerators m_414130_(Lnet/minecraft/client/data/models/blockstates/MultiPartGenerator;Ljava/lang/Boolean;Lnet/minecraft/world/level/block/state/properties/SideChainPart;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/core/Direction;Lnet/minecraft/client/renderer/block/model/VariantMutator;)V # lambda$addShelfPart$56 -protected net.minecraft.client.data.models.BlockModelGenerators m_415593_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V # createCopperLantern -protected net.minecraft.client.data.models.BlockModelGenerators m_416066_(Lnet/minecraft/core/Direction;Ljava/lang/Boolean;Lnet/minecraft/world/level/block/state/properties/SideChainPart;)Lnet/minecraft/client/renderer/block/model/multipart/Condition; # shelfCondition -protected net.minecraft.client.data.models.BlockModelGenerators m_416075_(Lnet/minecraft/world/level/block/Block;)V # createBarsAndItem -protected net.minecraft.client.data.models.BlockModelGenerators m_416125_(Ljava/util/function/BiConsumer;)V # forEachHorizontalDirection -protected net.minecraft.client.data.models.BlockModelGenerators m_416737_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V # createCopperChain -protected net.minecraft.client.data.models.BlockModelGenerators m_416934_(Lnet/minecraft/world/level/block/state/properties/EnumProperty;Ljava/lang/Enum;[Ljava/lang/Enum;)Lnet/minecraft/client/data/models/blockstates/ConditionBuilder; # condition -protected net.minecraft.client.data.models.BlockModelGenerators m_416996_()V # createCopperChests -protected net.minecraft.client.data.models.BlockModelGenerators m_417208_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/resources/Identifier;Lnet/minecraft/resources/Identifier;Lnet/minecraft/resources/Identifier;Lnet/minecraft/resources/Identifier;Lnet/minecraft/resources/Identifier;Lnet/minecraft/resources/Identifier;)V # createBars -protected net.minecraft.client.data.models.BlockModelGenerators m_417848_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/WeatheringCopper$WeatherState;)V # createCopperGolemStatue -protected net.minecraft.client.data.models.BlockModelGenerators m_418505_(Lnet/minecraft/world/level/block/state/properties/BooleanProperty;Z)Lnet/minecraft/client/data/models/blockstates/ConditionBuilder; # condition -protected net.minecraft.client.data.models.BlockModelGenerators m_418983_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V # createShelf -protected net.minecraft.client.data.models.BlockModelGenerators m_419554_(Lnet/minecraft/world/item/Item;Lnet/minecraft/world/item/Item;)V # createCopperChainItem -protected net.minecraft.client.data.models.BlockModelGenerators m_419661_()V # createCopperGolemStatues -protected net.minecraft.client.data.models.BlockModelGenerators m_420119_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/model/TextureMapping;Lnet/minecraft/client/data/models/blockstates/MultiPartGenerator;Lnet/minecraft/client/data/models/model/ModelTemplate;Ljava/lang/Boolean;Lnet/minecraft/world/level/block/state/properties/SideChainPart;)V # addShelfPart -protected net.minecraft.client.data.models.BlockModelGenerators m_420286_([Lnet/minecraft/client/data/models/blockstates/ConditionBuilder;)Lnet/minecraft/client/renderer/block/model/multipart/Condition; # and -protected net.minecraft.client.data.models.BlockModelGenerators m_420564_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V # createBarsAndItem -protected net.minecraft.client.data.models.BlockModelGenerators m_437529_([ILit/unimi/dsi/fastutil/ints/Int2ObjectMap;Lnet/minecraft/world/level/block/Block;Ljava/lang/Integer;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createCropBlock$26 -protected net.minecraft.client.data.models.BlockModelGenerators m_437530_(Ljava/lang/Integer;)Lnet/minecraft/resources/Identifier; # lambda$createDriedGhastBlock$44 -protected net.minecraft.client.data.models.BlockModelGenerators m_437531_([Lnet/minecraft/resources/Identifier;Ljava/lang/Integer;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createRespawnAnchor$61 -protected net.minecraft.client.data.models.BlockModelGenerators m_437532_(Lnet/minecraft/resources/Identifier;Lnet/minecraft/client/data/models/model/TextureMapping;)V # lambda$createGrassBlocks$32 -protected net.minecraft.client.data.models.BlockModelGenerators m_437533_(Lnet/minecraft/world/level/block/Block;Ljava/lang/Integer;Lnet/minecraft/world/level/block/state/properties/DoubleBlockHalf;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createPitcherCrop$19 -protected net.minecraft.client.data.models.BlockModelGenerators m_437534_(Lnet/minecraft/client/data/models/MultiVariant;Ljava/lang/Integer;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createSnowBlocks$38 -protected net.minecraft.client.data.models.BlockModelGenerators m_437535_(Ljava/lang/Boolean;Ljava/lang/Boolean;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createTripwireHook$42 -protected net.minecraft.client.data.models.BlockModelGenerators m_437536_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Ljava/lang/Boolean;Ljava/lang/Integer;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createMangrovePropagule$30 -protected net.minecraft.client.data.models.BlockModelGenerators m_437537_(Lnet/minecraft/client/data/models/model/TextureMapping;)V # lambda$static$13 -protected net.minecraft.client.data.models.BlockModelGenerators m_437538_(Ljava/lang/Integer;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createSweetBerryBush$41 -protected net.minecraft.client.data.models.BlockModelGenerators m_437539_(Lnet/minecraft/client/data/models/model/TextureMapping;)V # lambda$static$12 -protected net.minecraft.client.data.models.BlockModelGenerators m_437540_(Lnet/minecraft/world/level/block/Block;Ljava/lang/Boolean;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createHangingMoss$54 -protected net.minecraft.client.data.models.BlockModelGenerators m_437541_(Lnet/minecraft/world/level/block/Block;Ljava/lang/Integer;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createBrushableBlock$15 -protected net.minecraft.client.data.models.BlockModelGenerators m_437542_(Lnet/minecraft/client/data/models/model/ModelTemplate;Ljava/lang/String;Lnet/minecraft/client/data/models/model/TextureMapping;Lnet/minecraft/client/data/models/BlockModelGenerators$BookSlotModelCacheKey;)Lnet/minecraft/resources/Identifier; # lambda$addBookSlotModel$60 -protected net.minecraft.client.data.models.BlockModelGenerators m_437543_(Lnet/minecraft/client/data/models/model/TextureMapping;)V # lambda$static$10 -protected net.minecraft.client.data.models.BlockModelGenerators m_437544_([ILnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/BlockModelGenerators$PlantType;Ljava/lang/Integer;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createCrossBlock$17 -protected net.minecraft.client.data.models.BlockModelGenerators m_437545_(Lnet/minecraft/resources/Identifier;Lnet/minecraft/client/data/models/model/TextureMapping;)V # lambda$createBarrel$23 -protected net.minecraft.client.data.models.BlockModelGenerators m_437546_(Ljava/util/function/Function;Ljava/lang/Integer;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createDriedGhastBlock$45 -protected net.minecraft.client.data.models.BlockModelGenerators m_437547_(Lnet/minecraft/client/data/models/model/TextureMapping;Lnet/minecraft/resources/Identifier;)Lnet/minecraft/client/data/models/model/TextureMapping; # lambda$createChorusFlower$28 -protected net.minecraft.client.data.models.BlockModelGenerators m_437548_(Lnet/minecraft/client/data/models/model/TextureMapping;)V # lambda$static$11 -protected net.minecraft.client.data.models.BlockModelGenerators m_437549_(Ljava/lang/Integer;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createSnifferEgg$46 -protected net.minecraft.client.data.models.BlockModelGenerators m_437550_(Lnet/minecraft/client/data/models/model/TextureMapping;)V # lambda$static$14 -protected net.minecraft.client.data.models.BlockModelGenerators m_437551_(Lnet/minecraft/world/level/block/state/properties/StructureMode;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createStructureBlock$39 -protected net.minecraft.client.data.models.BlockModelGenerators m_437552_(Lnet/minecraft/resources/Identifier;Lnet/minecraft/client/data/models/model/TextureMapping;)V # lambda$createGrassBlocks$31 -protected net.minecraft.client.data.models.BlockModelGenerators m_437553_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/model/TextureMapping;)V # lambda$createMossyCarpet$52 -protected net.minecraft.client.data.models.BlockModelGenerators m_437554_(Lnet/minecraft/client/data/models/model/TextureMapping;Lnet/minecraft/resources/Identifier;)Lnet/minecraft/client/data/models/model/TextureMapping; # lambda$createCommandBlock$21 -protected net.minecraft.client.data.models.BlockModelGenerators m_437555_(Ljava/util/Map;Lnet/minecraft/world/level/block/state/properties/TestBlockMode;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createTestBlock$40 -protected net.minecraft.client.data.models.BlockModelGenerators m_437556_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/model/TextureMapping;)V # lambda$createMossyCarpet$51 -protected net.minecraft.client.data.models.BlockModelGenerators m_437557_(Ljava/lang/String;I)Lnet/minecraft/util/random/Weighted; # lambda$createBambooModels$22 -protected net.minecraft.client.data.models.BlockModelGenerators m_437558_(Ljava/lang/Integer;Ljava/lang/Boolean;Ljava/lang/Boolean;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createRepeater$37 -protected net.minecraft.client.data.models.BlockModelGenerators m_437559_(Lnet/minecraft/world/level/block/Block;I)Lnet/minecraft/resources/Identifier; # lambda$createCropBlock$25 -protected net.minecraft.client.data.models.BlockModelGenerators m_437560_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/model/TextureMapping;Ljava/lang/Integer;)Lnet/minecraft/client/data/models/MultiVariant; # lambda$createStems$18 -protected net.minecraft.client.data.models.BlockModelGenerators m_437561_(Lnet/minecraft/resources/Identifier;Lnet/minecraft/client/data/models/model/TextureMapping;)V # lambda$createFurnace$27 -protected net.minecraft.client.data.models.BlockModelGenerators m_437562_(Lnet/minecraft/world/level/block/Block;Ljava/lang/String;Lnet/minecraft/client/data/models/model/TextureMapping;)V # lambda$createCreakingHeartModel$16 +protected net.minecraft.client.data.models.BlockModelGenerators addBookSlotModel(Lnet/minecraft/client/data/models/blockstates/MultiPartGenerator;Lnet/minecraft/client/renderer/block/dispatch/multipart/Condition;Lnet/minecraft/client/renderer/block/dispatch/VariantMutator;Lnet/minecraft/world/level/block/state/properties/BooleanProperty;Lnet/minecraft/client/data/models/model/ModelTemplate;Z)V +protected net.minecraft.client.data.models.BlockModelGenerators addShelfPart(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/model/TextureMapping;Lnet/minecraft/client/data/models/blockstates/MultiPartGenerator;Lnet/minecraft/client/data/models/model/ModelTemplate;Ljava/lang/Boolean;Lnet/minecraft/world/level/block/state/properties/SideChainPart;)V +protected net.minecraft.client.data.models.BlockModelGenerators addSlotStateAndRotationVariants(Lnet/minecraft/client/data/models/blockstates/MultiPartGenerator;Lnet/minecraft/client/renderer/block/dispatch/multipart/Condition;Lnet/minecraft/client/renderer/block/dispatch/VariantMutator;)V +protected net.minecraft.client.data.models.BlockModelGenerators and([Lnet/minecraft/client/data/models/blockstates/ConditionBuilder;)Lnet/minecraft/client/renderer/block/dispatch/multipart/Condition; +protected net.minecraft.client.data.models.BlockModelGenerators applyRotation(Lnet/minecraft/core/FrontAndTop;)Lnet/minecraft/client/renderer/block/dispatch/VariantMutator; +protected net.minecraft.client.data.models.BlockModelGenerators condition()Lnet/minecraft/client/data/models/blockstates/ConditionBuilder; +protected net.minecraft.client.data.models.BlockModelGenerators condition(Lnet/minecraft/world/level/block/state/properties/BooleanProperty;Z)Lnet/minecraft/client/data/models/blockstates/ConditionBuilder; +protected net.minecraft.client.data.models.BlockModelGenerators condition(Lnet/minecraft/world/level/block/state/properties/EnumProperty;Ljava/lang/Enum;[Ljava/lang/Enum;)Lnet/minecraft/client/data/models/blockstates/ConditionBuilder; +protected net.minecraft.client.data.models.BlockModelGenerators copyCopperBulbModel(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators copyDoorModel(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators copyModel(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators copyTrapdoorModel(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createActiveRail(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createAirLikeBlock(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/resources/model/sprite/Material;)V +protected net.minecraft.client.data.models.BlockModelGenerators createAirLikeBlock(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/item/Item;)V +protected net.minecraft.client.data.models.BlockModelGenerators createAmethystCluster(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createAmethystClusters()V +protected net.minecraft.client.data.models.BlockModelGenerators createAnvil(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createAxisAlignedPillarBlock(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; +protected net.minecraft.client.data.models.BlockModelGenerators createAxisAlignedPillarBlock(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/model/TexturedModel$Provider;)V +protected net.minecraft.client.data.models.BlockModelGenerators createAxisAlignedPillarBlockCustomModel(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;)V +protected net.minecraft.client.data.models.BlockModelGenerators createAzalea(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createBamboo()V +protected net.minecraft.client.data.models.BlockModelGenerators createBambooModels(I)Lnet/minecraft/client/data/models/MultiVariant; +protected net.minecraft.client.data.models.BlockModelGenerators createBanner(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/item/DyeColor;)V +protected net.minecraft.client.data.models.BlockModelGenerators createBanners()V +protected net.minecraft.client.data.models.BlockModelGenerators createBarrel()V +protected net.minecraft.client.data.models.BlockModelGenerators createBars(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/resources/Identifier;Lnet/minecraft/resources/Identifier;Lnet/minecraft/resources/Identifier;Lnet/minecraft/resources/Identifier;Lnet/minecraft/resources/Identifier;Lnet/minecraft/resources/Identifier;)V +protected net.minecraft.client.data.models.BlockModelGenerators createBarsAndItem(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createBarsAndItem(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createBed(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/item/DyeColor;)V +protected net.minecraft.client.data.models.BlockModelGenerators createBeds()V +protected net.minecraft.client.data.models.BlockModelGenerators createBeeNest(Lnet/minecraft/world/level/block/Block;Ljava/util/function/Function;)V +protected net.minecraft.client.data.models.BlockModelGenerators createBell()V +protected net.minecraft.client.data.models.BlockModelGenerators createBigDripLeafBlock()V +protected net.minecraft.client.data.models.BlockModelGenerators createBookshelf()V +protected net.minecraft.client.data.models.BlockModelGenerators createBooleanModelDispatch(Lnet/minecraft/world/level/block/state/properties/BooleanProperty;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/PropertyDispatch; +protected net.minecraft.client.data.models.BlockModelGenerators createBrewingStand()V +protected net.minecraft.client.data.models.BlockModelGenerators createBrushableBlock(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createButton(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; +protected net.minecraft.client.data.models.BlockModelGenerators createCakeBlock()V +protected net.minecraft.client.data.models.BlockModelGenerators createCalibratedSculkSensor()V +protected net.minecraft.client.data.models.BlockModelGenerators createCampfires([Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createCandleAndCandleCake(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createCartographyTable()V +protected net.minecraft.client.data.models.BlockModelGenerators createCauldrons()V +protected net.minecraft.client.data.models.BlockModelGenerators createCaveVines()V +protected net.minecraft.client.data.models.BlockModelGenerators createChest(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/renderer/MultiblockChestResources;Z)V +protected net.minecraft.client.data.models.BlockModelGenerators createChest(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/resources/Identifier;Z)V +protected net.minecraft.client.data.models.BlockModelGenerators createChests()V +protected net.minecraft.client.data.models.BlockModelGenerators createChiseledBookshelf()V +protected net.minecraft.client.data.models.BlockModelGenerators createChorusFlower()V +protected net.minecraft.client.data.models.BlockModelGenerators createChorusPlant()V +protected net.minecraft.client.data.models.BlockModelGenerators createCocoa()V +protected net.minecraft.client.data.models.BlockModelGenerators createColoredBlockWithRandomRotations(Lnet/minecraft/client/data/models/model/TexturedModel$Provider;[Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createColoredBlockWithStateRotations(Lnet/minecraft/client/data/models/model/TexturedModel$Provider;[Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createCommandBlock(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createComparator()V +protected net.minecraft.client.data.models.BlockModelGenerators createComposter()V +protected net.minecraft.client.data.models.BlockModelGenerators createCopperBulb(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createCopperBulb(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; +protected net.minecraft.client.data.models.BlockModelGenerators createCopperChain(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createCopperChainItem(Lnet/minecraft/world/item/Item;Lnet/minecraft/world/item/Item;)V +protected net.minecraft.client.data.models.BlockModelGenerators createCopperChests()V +protected net.minecraft.client.data.models.BlockModelGenerators createCopperGolemStatue(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/WeatheringCopper$WeatherState;)V +protected net.minecraft.client.data.models.BlockModelGenerators createCopperGolemStatues()V +protected net.minecraft.client.data.models.BlockModelGenerators createCopperLantern(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createCoral(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createCoralFans(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createCrafterBlock()V +protected net.minecraft.client.data.models.BlockModelGenerators createCraftingTableLike(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Ljava/util/function/BiFunction;)V +protected net.minecraft.client.data.models.BlockModelGenerators createCreakingHeart(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createCreakingHeartModel(Lnet/minecraft/client/data/models/model/TexturedModel$Provider;Lnet/minecraft/world/level/block/Block;Ljava/lang/String;)Lnet/minecraft/resources/Identifier; +protected net.minecraft.client.data.models.BlockModelGenerators createCropBlock(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/state/properties/Property;[I)V +protected net.minecraft.client.data.models.BlockModelGenerators createCrossBlock(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/BlockModelGenerators$PlantType;)V +protected net.minecraft.client.data.models.BlockModelGenerators createCrossBlock(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/BlockModelGenerators$PlantType;Lnet/minecraft/client/data/models/model/TextureMapping;)V +protected net.minecraft.client.data.models.BlockModelGenerators createCrossBlock(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/BlockModelGenerators$PlantType;Lnet/minecraft/world/level/block/state/properties/Property;[I)V +protected net.minecraft.client.data.models.BlockModelGenerators createCrossBlockWithDefaultItem(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/BlockModelGenerators$PlantType;)V +protected net.minecraft.client.data.models.BlockModelGenerators createCrossBlockWithDefaultItem(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/BlockModelGenerators$PlantType;Lnet/minecraft/client/data/models/model/TextureMapping;)V +protected net.minecraft.client.data.models.BlockModelGenerators createCustomFence(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; +protected net.minecraft.client.data.models.BlockModelGenerators createDaylightDetector()V +protected net.minecraft.client.data.models.BlockModelGenerators createDirtPath()V +protected net.minecraft.client.data.models.BlockModelGenerators createDispenserBlock(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createDoor(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createDoor(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; +protected net.minecraft.client.data.models.BlockModelGenerators createDoubleBlock(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)V +protected net.minecraft.client.data.models.BlockModelGenerators createDoublePlant(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/BlockModelGenerators$PlantType;)V +protected net.minecraft.client.data.models.BlockModelGenerators createDoublePlantWithDefaultItem(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/BlockModelGenerators$PlantType;)V +protected net.minecraft.client.data.models.BlockModelGenerators createDriedGhastBlock()V +protected net.minecraft.client.data.models.BlockModelGenerators createEmptyOrFullDispatch(Lnet/minecraft/world/level/block/state/properties/Property;Ljava/lang/Comparable;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/PropertyDispatch; +protected net.minecraft.client.data.models.BlockModelGenerators createEndPortalFrame()V +protected net.minecraft.client.data.models.BlockModelGenerators createFarmland()V +protected net.minecraft.client.data.models.BlockModelGenerators createFence(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; +protected net.minecraft.client.data.models.BlockModelGenerators createFenceGate(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Z)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; +protected net.minecraft.client.data.models.BlockModelGenerators createFire()V +protected net.minecraft.client.data.models.BlockModelGenerators createFlatItemModel(Lnet/minecraft/world/item/Item;)Lnet/minecraft/resources/Identifier; +protected net.minecraft.client.data.models.BlockModelGenerators createFlatItemModelWithBlockTexture(Lnet/minecraft/world/item/Item;Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/resources/Identifier; +protected net.minecraft.client.data.models.BlockModelGenerators createFlatItemModelWithBlockTexture(Lnet/minecraft/world/item/Item;Lnet/minecraft/world/level/block/Block;Ljava/lang/String;)Lnet/minecraft/resources/Identifier; +protected net.minecraft.client.data.models.BlockModelGenerators createFlatItemModelWithBlockTextureAndOverlay(Lnet/minecraft/world/item/Item;Lnet/minecraft/world/level/block/Block;Ljava/lang/String;)Lnet/minecraft/resources/Identifier; +protected net.minecraft.client.data.models.BlockModelGenerators createFloorFireModels(Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/client/data/models/MultiVariant; +protected net.minecraft.client.data.models.BlockModelGenerators createFlowerBed(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createFrogspawnBlock()V +protected net.minecraft.client.data.models.BlockModelGenerators createFrostedIce()V +protected net.minecraft.client.data.models.BlockModelGenerators createFullAndCarpetBlocks(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createFurnace(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/model/TexturedModel$Provider;)V +protected net.minecraft.client.data.models.BlockModelGenerators createGlassBlocks(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createGrassBlocks()V +protected net.minecraft.client.data.models.BlockModelGenerators createGrassLikeBlock(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)V +protected net.minecraft.client.data.models.BlockModelGenerators createGrindstone()V +protected net.minecraft.client.data.models.BlockModelGenerators createGrowingPlant(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/BlockModelGenerators$PlantType;)V +protected net.minecraft.client.data.models.BlockModelGenerators createHangingMoss(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createHead(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/SkullBlock$Type;Lnet/minecraft/resources/Identifier;)V +protected net.minecraft.client.data.models.BlockModelGenerators createHeads()V +protected net.minecraft.client.data.models.BlockModelGenerators createHopper()V +protected net.minecraft.client.data.models.BlockModelGenerators createHorizontallyRotatedBlock(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/model/TexturedModel$Provider;)V +protected net.minecraft.client.data.models.BlockModelGenerators createInfestedDeepslate()V +protected net.minecraft.client.data.models.BlockModelGenerators createInfestedStone()V +protected net.minecraft.client.data.models.BlockModelGenerators createItemWithGrassTint(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createJigsaw()V +protected net.minecraft.client.data.models.BlockModelGenerators createLantern(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createLeafLitter(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createLever()V +protected net.minecraft.client.data.models.BlockModelGenerators createLightBlock()V +protected net.minecraft.client.data.models.BlockModelGenerators createLightningRod(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createLilyPad()V +protected net.minecraft.client.data.models.BlockModelGenerators createMagmaBlock()V +protected net.minecraft.client.data.models.BlockModelGenerators createMangrovePropagule()V +protected net.minecraft.client.data.models.BlockModelGenerators createMirroredColumnGenerator(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/renderer/block/dispatch/Variant;Lnet/minecraft/client/data/models/model/TextureMapping;Ljava/util/function/BiConsumer;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; +protected net.minecraft.client.data.models.BlockModelGenerators createMirroredCubeGenerator(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/renderer/block/dispatch/Variant;Lnet/minecraft/client/data/models/model/TextureMapping;Ljava/util/function/BiConsumer;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; +protected net.minecraft.client.data.models.BlockModelGenerators createMossyCarpet(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createMuddyMangroveRoots()V +protected net.minecraft.client.data.models.BlockModelGenerators createMultiface(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createMultiface(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/item/Item;)V +protected net.minecraft.client.data.models.BlockModelGenerators createMultifaceBlockStates(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createMushroomBlock(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createNetherPortalBlock()V +protected net.minecraft.client.data.models.BlockModelGenerators createNetherRoots(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createNetherrack()V +protected net.minecraft.client.data.models.BlockModelGenerators createNonTemplateHorizontalBlock(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createNonTemplateModelBlock(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createNonTemplateModelBlock(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createNormalTorch(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createNorthWestMirroredCubeGenerator(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/renderer/block/dispatch/Variant;Lnet/minecraft/client/data/models/model/TextureMapping;Ljava/util/function/BiConsumer;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; +protected net.minecraft.client.data.models.BlockModelGenerators createNyliumBlock(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createObserver()V +protected net.minecraft.client.data.models.BlockModelGenerators createOrientableTrapdoor(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createOrientableTrapdoor(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; +protected net.minecraft.client.data.models.BlockModelGenerators createParticleOnlyBlock(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createParticleOnlyBlockModel(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/client/data/models/MultiVariant; +protected net.minecraft.client.data.models.BlockModelGenerators createPassiveRail(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createPetrifiedOakSlab()V +protected net.minecraft.client.data.models.BlockModelGenerators createPillarBlockUVLocked(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/model/TextureMapping;Ljava/util/function/BiConsumer;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; +protected net.minecraft.client.data.models.BlockModelGenerators createPistonHeads()V +protected net.minecraft.client.data.models.BlockModelGenerators createPistonVariant(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/model/TextureMapping;)V +protected net.minecraft.client.data.models.BlockModelGenerators createPistons()V +protected net.minecraft.client.data.models.BlockModelGenerators createPitcherCrop()V +protected net.minecraft.client.data.models.BlockModelGenerators createPitcherPlant()V +protected net.minecraft.client.data.models.BlockModelGenerators createPlant(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/BlockModelGenerators$PlantType;)V +protected net.minecraft.client.data.models.BlockModelGenerators createPlantWithDefaultItem(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/BlockModelGenerators$PlantType;)V +protected net.minecraft.client.data.models.BlockModelGenerators createPointedDripstone()V +protected net.minecraft.client.data.models.BlockModelGenerators createPointedDripstoneVariant(Lnet/minecraft/core/Direction;Lnet/minecraft/world/level/block/state/properties/DripstoneThickness;)Lnet/minecraft/client/data/models/MultiVariant; +protected net.minecraft.client.data.models.BlockModelGenerators createPottedAzalea(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createPressurePlate(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; +protected net.minecraft.client.data.models.BlockModelGenerators createPumpkinVariant(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/model/TextureMapping;)V +protected net.minecraft.client.data.models.BlockModelGenerators createPumpkins()V +protected net.minecraft.client.data.models.BlockModelGenerators createRedstoneLamp()V +protected net.minecraft.client.data.models.BlockModelGenerators createRedstoneTorch()V +protected net.minecraft.client.data.models.BlockModelGenerators createRedstoneWire()V +protected net.minecraft.client.data.models.BlockModelGenerators createRepeater()V +protected net.minecraft.client.data.models.BlockModelGenerators createRespawnAnchor()V +protected net.minecraft.client.data.models.BlockModelGenerators createRotatableColumn(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createRotatedMirroredVariantBlock(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createRotatedPillar()Lnet/minecraft/client/data/models/blockstates/PropertyDispatch; +protected net.minecraft.client.data.models.BlockModelGenerators createRotatedPillarWithHorizontalVariant(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; +protected net.minecraft.client.data.models.BlockModelGenerators createRotatedPillarWithHorizontalVariant(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/model/TexturedModel$Provider;Lnet/minecraft/client/data/models/model/TexturedModel$Provider;)V +protected net.minecraft.client.data.models.BlockModelGenerators createRotatedVariantBlock(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createRotatedVariants(Lnet/minecraft/client/renderer/block/dispatch/Variant;)Lnet/minecraft/client/data/models/MultiVariant; +protected net.minecraft.client.data.models.BlockModelGenerators createRotatedVariants(Lnet/minecraft/client/renderer/block/dispatch/Variant;Lnet/minecraft/client/renderer/block/dispatch/Variant;)Lnet/minecraft/client/data/models/MultiVariant; +protected net.minecraft.client.data.models.BlockModelGenerators createScaffolding()V +protected net.minecraft.client.data.models.BlockModelGenerators createSculkCatalyst()V +protected net.minecraft.client.data.models.BlockModelGenerators createSculkSensor()V +protected net.minecraft.client.data.models.BlockModelGenerators createSculkShrieker()V +protected net.minecraft.client.data.models.BlockModelGenerators createSeaPickle()V +protected net.minecraft.client.data.models.BlockModelGenerators createSegmentedBlock(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Ljava/util/function/Function;Lnet/minecraft/client/data/models/MultiVariant;Ljava/util/function/Function;Lnet/minecraft/client/data/models/MultiVariant;Ljava/util/function/Function;Lnet/minecraft/client/data/models/MultiVariant;Ljava/util/function/Function;)V +protected net.minecraft.client.data.models.BlockModelGenerators createShelf(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createShulkerBox(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/item/DyeColor;)V +protected net.minecraft.client.data.models.BlockModelGenerators createSideFireModels(Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/client/data/models/MultiVariant; +protected net.minecraft.client.data.models.BlockModelGenerators createSimpleBlock(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/MultiVariantGenerator; +protected net.minecraft.client.data.models.BlockModelGenerators createSlab(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; +protected net.minecraft.client.data.models.BlockModelGenerators createSmallDripleaf()V +protected net.minecraft.client.data.models.BlockModelGenerators createSmithingTable()V +protected net.minecraft.client.data.models.BlockModelGenerators createSmoothStoneSlab()V +protected net.minecraft.client.data.models.BlockModelGenerators createSnifferEgg()V +protected net.minecraft.client.data.models.BlockModelGenerators createSnowBlocks()V +protected net.minecraft.client.data.models.BlockModelGenerators createSoulFire()V +protected net.minecraft.client.data.models.BlockModelGenerators createStairs(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; +protected net.minecraft.client.data.models.BlockModelGenerators createStems(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createStonecutter()V +protected net.minecraft.client.data.models.BlockModelGenerators createStructureBlock()V +protected net.minecraft.client.data.models.BlockModelGenerators createSuffixedVariant(Lnet/minecraft/world/level/block/Block;Ljava/lang/String;Lnet/minecraft/client/data/models/model/ModelTemplate;Ljava/util/function/Function;)Lnet/minecraft/resources/Identifier; +protected net.minecraft.client.data.models.BlockModelGenerators createSunflower()V +protected net.minecraft.client.data.models.BlockModelGenerators createSweetBerryBush()V +protected net.minecraft.client.data.models.BlockModelGenerators createTallSeagrass()V +protected net.minecraft.client.data.models.BlockModelGenerators createTestBlock()V +protected net.minecraft.client.data.models.BlockModelGenerators createTintedDoublePlant(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createTopFireModels(Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/client/data/models/MultiVariant; +protected net.minecraft.client.data.models.BlockModelGenerators createTrapdoor(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createTrapdoor(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; +protected net.minecraft.client.data.models.BlockModelGenerators createTrialSpawner()V +protected net.minecraft.client.data.models.BlockModelGenerators createTripwire()V +protected net.minecraft.client.data.models.BlockModelGenerators createTripwireHook()V +protected net.minecraft.client.data.models.BlockModelGenerators createTrivialBlock(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/model/TexturedModel$Provider;)V +protected net.minecraft.client.data.models.BlockModelGenerators createTrivialCube(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators createTurtleEgg()V +protected net.minecraft.client.data.models.BlockModelGenerators createTurtleEggModel(II)Lnet/minecraft/client/renderer/block/dispatch/Variant; +protected net.minecraft.client.data.models.BlockModelGenerators createTurtleEggModel(ILjava/lang/String;Lnet/minecraft/client/data/models/model/TextureMapping;)Lnet/minecraft/client/renderer/block/dispatch/Variant; +protected net.minecraft.client.data.models.BlockModelGenerators createVault()V +protected net.minecraft.client.data.models.BlockModelGenerators createVine()V +protected net.minecraft.client.data.models.BlockModelGenerators createWall(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;Lnet/minecraft/client/data/models/MultiVariant;)Lnet/minecraft/client/data/models/blockstates/BlockModelDefinitionGenerator; +protected net.minecraft.client.data.models.BlockModelGenerators createWeightedPressurePlate(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators family(Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/client/data/models/BlockModelGenerators$BlockFamilyProvider; +protected net.minecraft.client.data.models.BlockModelGenerators forEachHorizontalDirection(Ljava/util/function/BiConsumer;)V +protected net.minecraft.client.data.models.BlockModelGenerators generateSimpleSpecialItemModel(Lnet/minecraft/world/level/block/Block;Ljava/util/Optional;Lnet/minecraft/client/renderer/special/SpecialModelRenderer$Unbaked;)V +protected net.minecraft.client.data.models.BlockModelGenerators or([Lnet/minecraft/client/data/models/blockstates/ConditionBuilder;)Lnet/minecraft/client/renderer/block/dispatch/multipart/Condition; +protected net.minecraft.client.data.models.BlockModelGenerators plainModel(Lnet/minecraft/resources/Identifier;)Lnet/minecraft/client/renderer/block/dispatch/Variant; +protected net.minecraft.client.data.models.BlockModelGenerators plainVariant(Lnet/minecraft/resources/Identifier;)Lnet/minecraft/client/data/models/MultiVariant; +protected net.minecraft.client.data.models.BlockModelGenerators registerSimpleFlatItemModel(Lnet/minecraft/world/item/Item;)V +protected net.minecraft.client.data.models.BlockModelGenerators registerSimpleFlatItemModel(Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.client.data.models.BlockModelGenerators registerSimpleFlatItemModel(Lnet/minecraft/world/level/block/Block;Ljava/lang/String;)V +protected net.minecraft.client.data.models.BlockModelGenerators registerSimpleItemModel(Lnet/minecraft/world/item/Item;Lnet/minecraft/resources/Identifier;)V +protected net.minecraft.client.data.models.BlockModelGenerators registerSimpleItemModel(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/resources/Identifier;)V +protected net.minecraft.client.data.models.BlockModelGenerators registerSimpleTintedItemModel(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/resources/Identifier;Lnet/minecraft/client/color/item/ItemTintSource;)V +protected net.minecraft.client.data.models.BlockModelGenerators registerTwoLayerFlatItemModel(Lnet/minecraft/world/level/block/Block;Ljava/lang/String;)V +protected net.minecraft.client.data.models.BlockModelGenerators selectMultifaceProperties(Lnet/minecraft/world/level/block/state/StateHolder;Ljava/util/function/Function;)Ljava/util/Map; +protected net.minecraft.client.data.models.BlockModelGenerators shelfCondition(Lnet/minecraft/core/Direction;Ljava/lang/Boolean;Lnet/minecraft/world/level/block/state/properties/SideChainPart;)Lnet/minecraft/client/renderer/block/dispatch/multipart/Condition; +protected net.minecraft.client.data.models.BlockModelGenerators variant(Lnet/minecraft/client/renderer/block/dispatch/Variant;)Lnet/minecraft/client/data/models/MultiVariant; +protected net.minecraft.client.data.models.BlockModelGenerators variants([Lnet/minecraft/client/renderer/block/dispatch/Variant;)Lnet/minecraft/client/data/models/MultiVariant; +protected net.minecraft.client.data.models.BlockModelGenerators woodProvider(Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/client/data/models/BlockModelGenerators$WoodProvider; #endgroup -protected net.minecraft.client.data.models.BlockModelGenerators f_371124_ # itemModelOutput -protected net.minecraft.client.data.models.BlockModelGenerators f_371133_ # modelOutput -protected net.minecraft.client.data.models.BlockModelGenerators f_371615_ # blockStateOutput +protected net.minecraft.client.data.models.BlockModelGenerators blockStateOutput +protected net.minecraft.client.data.models.BlockModelGenerators itemModelOutput +protected net.minecraft.client.data.models.BlockModelGenerators modelOutput public net.minecraft.client.data.models.BlockModelGenerators$BlockFamilyProvider #group protected net.minecraft.client.data.models.BlockModelGenerators$BlockFamilyProvider *() -protected net.minecraft.client.data.models.BlockModelGenerators$BlockFamilyProvider m_372389_(Lnet/minecraft/world/level/block/Block;)V # trapdoor -protected net.minecraft.client.data.models.BlockModelGenerators$BlockFamilyProvider m_373052_(Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/client/data/models/BlockModelGenerators$BlockFamilyProvider; # door -protected net.minecraft.client.data.models.BlockModelGenerators$BlockFamilyProvider m_373078_(Lnet/minecraft/client/data/models/model/ModelTemplate;Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/resources/Identifier; # getOrCreateModel -protected net.minecraft.client.data.models.BlockModelGenerators$BlockFamilyProvider m_373633_(Lnet/minecraft/data/BlockFamily$Variant;Lnet/minecraft/world/level/block/Block;)V # lambda$generateFor$1 -protected net.minecraft.client.data.models.BlockModelGenerators$BlockFamilyProvider m_373732_(Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/client/data/models/BlockModelGenerators$BlockFamilyProvider; # fullBlockVariant -protected net.minecraft.client.data.models.BlockModelGenerators$BlockFamilyProvider m_437563_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/client/data/models/model/ModelTemplate;)Lnet/minecraft/resources/Identifier; # lambda$getOrCreateModel$0 +protected net.minecraft.client.data.models.BlockModelGenerators$BlockFamilyProvider door(Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/client/data/models/BlockModelGenerators$BlockFamilyProvider; +protected net.minecraft.client.data.models.BlockModelGenerators$BlockFamilyProvider fullBlockVariant(Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/client/data/models/BlockModelGenerators$BlockFamilyProvider; +protected net.minecraft.client.data.models.BlockModelGenerators$BlockFamilyProvider getOrCreateModel(Lnet/minecraft/client/data/models/model/ModelTemplate;Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/resources/Identifier; +protected net.minecraft.client.data.models.BlockModelGenerators$BlockFamilyProvider trapdoor(Lnet/minecraft/world/level/block/Block;)V #endgroup public net.minecraft.client.data.models.BlockModelGenerators$PlantType public net.minecraft.client.data.models.BlockModelGenerators$WoodProvider #group protected net.minecraft.client.data.models.ItemModelGenerators *() -protected net.minecraft.client.data.models.ItemModelGenerators m_372103_(Lnet/minecraft/world/item/Item;I)V # generateDyedItem -protected net.minecraft.client.data.models.ItemModelGenerators m_372177_(Lnet/minecraft/world/item/Item;)V # generateBundleModels -protected net.minecraft.client.data.models.ItemModelGenerators m_372280_(Lnet/minecraft/world/item/Item;Lnet/minecraft/client/data/models/model/ModelTemplate;)V # generateFlatItem -protected net.minecraft.client.data.models.ItemModelGenerators m_372299_(Lnet/minecraft/world/item/Item;)V # generateClockItem -protected net.minecraft.client.data.models.ItemModelGenerators m_372587_(Lnet/minecraft/resources/Identifier;Lnet/minecraft/resources/Identifier;Lnet/minecraft/resources/Identifier;Lnet/minecraft/resources/Identifier;)V # generateLayeredItem -protected net.minecraft.client.data.models.ItemModelGenerators m_372592_(Lnet/minecraft/world/item/Item;)Ljava/util/List; # createCompassModels -protected net.minecraft.client.data.models.ItemModelGenerators m_372634_(Lnet/minecraft/resources/Identifier;Lnet/minecraft/resources/Identifier;Lnet/minecraft/resources/Identifier;)Lnet/minecraft/resources/Identifier; # generateLayeredItem -protected net.minecraft.client.data.models.ItemModelGenerators m_372677_(Lnet/minecraft/world/item/Item;Lnet/minecraft/resources/Identifier;)V # addPotionTint -protected net.minecraft.client.data.models.ItemModelGenerators m_372690_(Lnet/minecraft/world/item/Item;)V # generateCrossbow -protected net.minecraft.client.data.models.ItemModelGenerators m_372771_(Lnet/minecraft/world/item/Item;)V # generateGoatHorn -protected net.minecraft.client.data.models.ItemModelGenerators m_372861_(Lnet/minecraft/world/item/Item;)V # generatePotion -protected net.minecraft.client.data.models.ItemModelGenerators m_372885_(Lnet/minecraft/world/item/Item;Lnet/minecraft/resources/Identifier;Lnet/minecraft/resources/Identifier;)Lnet/minecraft/resources/Identifier; # generateLayeredItem -protected net.minecraft.client.data.models.ItemModelGenerators m_372915_(Lnet/minecraft/world/item/Item;Lnet/minecraft/client/color/item/ItemTintSource;)V # generateItemWithTintedOverlay -protected net.minecraft.client.data.models.ItemModelGenerators m_372919_(Lnet/minecraft/world/item/Item;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/resources/Identifier;Z)V # generateTrimmableItem -protected net.minecraft.client.data.models.ItemModelGenerators m_372969_(Lnet/minecraft/world/item/Item;Lnet/minecraft/world/item/Item;Lnet/minecraft/client/data/models/model/ModelTemplate;)Lnet/minecraft/resources/Identifier; # createFlatItemModel -protected net.minecraft.client.data.models.ItemModelGenerators m_373030_(Lnet/minecraft/world/item/Item;)V # generateShield -protected net.minecraft.client.data.models.ItemModelGenerators m_373037_(Lnet/minecraft/world/item/Item;)V # generateStandardCompassItem -protected net.minecraft.client.data.models.ItemModelGenerators m_373158_(Lnet/minecraft/world/item/Item;Lnet/minecraft/client/data/models/model/ModelTemplate;Ljava/lang/String;)Lnet/minecraft/resources/Identifier; # generateBundleCoverModel -protected net.minecraft.client.data.models.ItemModelGenerators m_373235_(Lnet/minecraft/world/item/Item;)V # generateTippedArrow -protected net.minecraft.client.data.models.ItemModelGenerators m_373294_(Lnet/minecraft/client/renderer/item/ItemModel$Unbaked;Lnet/minecraft/client/renderer/item/ItemModel$Unbaked;)Lnet/minecraft/client/renderer/item/ItemModel$Unbaked; # createFlatModelDispatch -protected net.minecraft.client.data.models.ItemModelGenerators m_373463_(Lnet/minecraft/world/item/Item;)V # declareCustomModelItem -protected net.minecraft.client.data.models.ItemModelGenerators m_373547_(Lnet/minecraft/world/item/Item;)V # generateSpyglass -protected net.minecraft.client.data.models.ItemModelGenerators m_373727_(Lnet/minecraft/world/item/Item;)V # generateElytra -protected net.minecraft.client.data.models.ItemModelGenerators m_373789_(Lnet/minecraft/world/item/Item;Lnet/minecraft/client/renderer/item/properties/conditional/ConditionalItemModelProperty;Lnet/minecraft/client/renderer/item/ItemModel$Unbaked;Lnet/minecraft/client/renderer/item/ItemModel$Unbaked;)V # generateBooleanDispatch -protected net.minecraft.client.data.models.ItemModelGenerators m_373819_(Lnet/minecraft/world/item/Item;Ljava/lang/String;Lnet/minecraft/client/color/item/ItemTintSource;)V # generateItemWithTintedOverlay -protected net.minecraft.client.data.models.ItemModelGenerators m_373839_(Lnet/minecraft/world/item/Item;)V # generateTrident -protected net.minecraft.client.data.models.ItemModelGenerators m_373858_(Lnet/minecraft/world/item/Item;Ljava/lang/String;Lnet/minecraft/client/data/models/model/ModelTemplate;)Lnet/minecraft/resources/Identifier; # createFlatItemModel -protected net.minecraft.client.data.models.ItemModelGenerators m_373869_(Lnet/minecraft/world/item/Item;Lnet/minecraft/client/data/models/model/ModelTemplate;)Lnet/minecraft/resources/Identifier; # createFlatItemModel -protected net.minecraft.client.data.models.ItemModelGenerators m_373892_(Lnet/minecraft/world/item/Item;)V # generateTwoLayerDyedItem -protected net.minecraft.client.data.models.ItemModelGenerators m_374089_(Lnet/minecraft/world/item/Item;)V # generateBow -protected net.minecraft.client.data.models.ItemModelGenerators m_374190_(Lnet/minecraft/world/item/Item;)V # generateFishingRod -protected net.minecraft.client.data.models.ItemModelGenerators m_374289_(Lnet/minecraft/world/item/Item;)V # generateBrush -protected net.minecraft.client.data.models.ItemModelGenerators m_374337_(Lnet/minecraft/world/item/Item;Lnet/minecraft/world/item/Item;Lnet/minecraft/client/data/models/model/ModelTemplate;)V # generateFlatItem -protected net.minecraft.client.data.models.ItemModelGenerators m_374365_(Lnet/minecraft/world/item/Item;)V # generateRecoveryCompassItem -protected net.minecraft.client.data.models.ItemModelGenerators m_440296_(Lnet/minecraft/world/item/Item;)V # generateSpear -protected net.minecraft.client.data.models.ItemModelGenerators m_443417_(Lnet/minecraft/world/item/Item;I)V # generateItemWithTintedBaseLayer +protected net.minecraft.client.data.models.ItemModelGenerators addPotionTint(Lnet/minecraft/world/item/Item;Lnet/minecraft/resources/Identifier;)V +protected net.minecraft.client.data.models.ItemModelGenerators createCompassModels(Lnet/minecraft/world/item/Item;)Ljava/util/List; +protected net.minecraft.client.data.models.ItemModelGenerators createFlatItemModel(Lnet/minecraft/world/item/Item;Ljava/lang/String;Lnet/minecraft/client/data/models/model/ModelTemplate;)Lnet/minecraft/resources/Identifier; +protected net.minecraft.client.data.models.ItemModelGenerators createFlatItemModel(Lnet/minecraft/world/item/Item;Lnet/minecraft/client/data/models/model/ModelTemplate;)Lnet/minecraft/resources/Identifier; +protected net.minecraft.client.data.models.ItemModelGenerators createFlatItemModel(Lnet/minecraft/world/item/Item;Lnet/minecraft/world/item/Item;Lnet/minecraft/client/data/models/model/ModelTemplate;)Lnet/minecraft/resources/Identifier; +protected net.minecraft.client.data.models.ItemModelGenerators createFlatModelDispatch(Lnet/minecraft/client/renderer/item/ItemModel$Unbaked;Lnet/minecraft/client/renderer/item/ItemModel$Unbaked;)Lnet/minecraft/client/renderer/item/ItemModel$Unbaked; +protected net.minecraft.client.data.models.ItemModelGenerators declareCustomModelItem(Lnet/minecraft/world/item/Item;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateBooleanDispatch(Lnet/minecraft/world/item/Item;Lnet/minecraft/client/renderer/item/properties/conditional/ConditionalItemModelProperty;Lnet/minecraft/client/renderer/item/ItemModel$Unbaked;Lnet/minecraft/client/renderer/item/ItemModel$Unbaked;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateBow(Lnet/minecraft/world/item/Item;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateBrush(Lnet/minecraft/world/item/Item;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateBundleCoverModel(Lnet/minecraft/world/item/Item;Lnet/minecraft/client/data/models/model/ModelTemplate;Ljava/lang/String;)Lnet/minecraft/resources/Identifier; +protected net.minecraft.client.data.models.ItemModelGenerators generateBundleModels(Lnet/minecraft/world/item/Item;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateClockItem(Lnet/minecraft/world/item/Item;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateCrossbow(Lnet/minecraft/world/item/Item;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateDyedItem(Lnet/minecraft/world/item/Item;I)V +protected net.minecraft.client.data.models.ItemModelGenerators generateElytra(Lnet/minecraft/world/item/Item;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateFishingRod(Lnet/minecraft/world/item/Item;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateFlatItem(Lnet/minecraft/world/item/Item;Lnet/minecraft/client/data/models/model/ModelTemplate;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateFlatItem(Lnet/minecraft/world/item/Item;Lnet/minecraft/world/item/Item;Lnet/minecraft/client/data/models/model/ModelTemplate;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateGoatHorn(Lnet/minecraft/world/item/Item;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateItemWithTintedBaseLayer(Lnet/minecraft/world/item/Item;I)V +protected net.minecraft.client.data.models.ItemModelGenerators generateItemWithTintedOverlay(Lnet/minecraft/world/item/Item;Ljava/lang/String;Lnet/minecraft/client/color/item/ItemTintSource;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateItemWithTintedOverlay(Lnet/minecraft/world/item/Item;Lnet/minecraft/client/color/item/ItemTintSource;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateLayeredItem(Lnet/minecraft/resources/Identifier;Lnet/minecraft/client/resources/model/sprite/Material;Lnet/minecraft/client/resources/model/sprite/Material;)Lnet/minecraft/resources/Identifier; +protected net.minecraft.client.data.models.ItemModelGenerators generateLayeredItem(Lnet/minecraft/resources/Identifier;Lnet/minecraft/client/resources/model/sprite/Material;Lnet/minecraft/client/resources/model/sprite/Material;Lnet/minecraft/client/resources/model/sprite/Material;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateLayeredItem(Lnet/minecraft/world/item/Item;Lnet/minecraft/client/resources/model/sprite/Material;Lnet/minecraft/client/resources/model/sprite/Material;)Lnet/minecraft/resources/Identifier; +protected net.minecraft.client.data.models.ItemModelGenerators generatePotion(Lnet/minecraft/world/item/Item;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateRecoveryCompassItem(Lnet/minecraft/world/item/Item;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateShield(Lnet/minecraft/world/item/Item;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateSpear(Lnet/minecraft/world/item/Item;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateSpyglass(Lnet/minecraft/world/item/Item;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateStandardCompassItem(Lnet/minecraft/world/item/Item;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateTippedArrow(Lnet/minecraft/world/item/Item;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateTrident(Lnet/minecraft/world/item/Item;)V +protected net.minecraft.client.data.models.ItemModelGenerators generateTrimmableItem(Lnet/minecraft/world/item/Item;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/resources/Identifier;Z)V +protected net.minecraft.client.data.models.ItemModelGenerators generateTwoLayerDyedItem(Lnet/minecraft/world/item/Item;)V #endgroup -protected net.minecraft.client.data.models.ItemModelGenerators f_370758_ # modelOutput -protected net.minecraft.client.data.models.ItemModelGenerators f_370978_ # itemModelOutput +protected net.minecraft.client.data.models.ItemModelGenerators itemModelOutput +protected net.minecraft.client.data.models.ItemModelGenerators modelOutput public net.minecraft.client.data.models.ModelProvider$BlockStateGeneratorCollector -public net.minecraft.client.data.models.ModelProvider$BlockStateGeneratorCollector ()V # constructor +public net.minecraft.client.data.models.ModelProvider$BlockStateGeneratorCollector ()V public net.minecraft.client.data.models.ModelProvider$ItemInfoCollector -public net.minecraft.client.data.models.ModelProvider$ItemInfoCollector ()V # constructor +public net.minecraft.client.data.models.ModelProvider$ItemInfoCollector ()V public net.minecraft.client.data.models.ModelProvider$SimpleModelCollector -public net.minecraft.client.data.models.ModelProvider$SimpleModelCollector ()V # constructor +public net.minecraft.client.data.models.ModelProvider$SimpleModelCollector ()V #group public net.minecraft.client.gui.Gui *() -public net.minecraft.client.gui.Gui m_168688_(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/world/entity/player/Player;IIIIFIIIZ)V # renderHearts -public net.minecraft.client.gui.Gui m_193836_()V # tickAutosaveIndicator -public net.minecraft.client.gui.Gui m_232354_(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/world/entity/player/Player;IIII)V # renderArmor -public net.minecraft.client.gui.Gui m_280030_(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/world/scores/Objective;)V # displayScoreboardSidebar -public net.minecraft.client.gui.Gui m_280130_(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/DeltaTracker;)V # renderCrosshair -public net.minecraft.client.gui.Gui m_280154_(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/world/entity/Entity;)V # renderVignette -public net.minecraft.client.gui.Gui m_280155_(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/resources/Identifier;F)V # renderTextureOverlay -public net.minecraft.client.gui.Gui m_280173_(Lnet/minecraft/client/gui/GuiGraphics;)V # renderPlayerHealth -public net.minecraft.client.gui.Gui m_280250_(Lnet/minecraft/client/gui/GuiGraphics;)V # renderVehicleHealth -public net.minecraft.client.gui.Gui m_280278_(Lnet/minecraft/client/gui/GuiGraphics;F)V # renderSpyglassOverlay -public net.minecraft.client.gui.Gui m_280295_(Lnet/minecraft/client/gui/GuiGraphics;)V # renderSelectedItemName -public net.minecraft.client.gui.Gui m_280339_(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/DeltaTracker;)V # renderDemoOverlay -public net.minecraft.client.gui.Gui m_280379_(Lnet/minecraft/client/gui/GuiGraphics;F)V # renderPortalOverlay -public net.minecraft.client.gui.Gui m_280523_(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/DeltaTracker;)V # renderEffects -public net.minecraft.client.gui.Gui m_280585_(Lnet/minecraft/client/gui/GuiGraphics;IILnet/minecraft/client/DeltaTracker;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/item/ItemStack;I)V # renderSlot -public net.minecraft.client.gui.Gui m_280593_(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/gui/Gui$HeartType;IIZZZ)V # renderHeart -public net.minecraft.client.gui.Gui m_303979_(Lnet/minecraft/world/scores/PlayerScoreEntry;)Z # lambda$displayScoreboardSidebar$7 -public net.minecraft.client.gui.Gui m_303980_(I)[Lnet/minecraft/client/gui/Gui$1DisplayEntry; # lambda$displayScoreboardSidebar$9 -public net.minecraft.client.gui.Gui m_303981_(Lnet/minecraft/world/scores/Scoreboard;Lnet/minecraft/network/chat/numbers/NumberFormat;Lnet/minecraft/world/scores/PlayerScoreEntry;)Lnet/minecraft/client/gui/Gui$1DisplayEntry; # lambda$displayScoreboardSidebar$8 -public net.minecraft.client.gui.Gui m_318727_(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/DeltaTracker;)V # renderCameraOverlays -public net.minecraft.client.gui.Gui m_319215_(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/DeltaTracker;)V # renderHotbarAndDecorations -public net.minecraft.client.gui.Gui m_320053_(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/DeltaTracker;)V # renderTabList -public net.minecraft.client.gui.Gui m_320133_(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/world/entity/player/Player;II)V # renderFood -public net.minecraft.client.gui.Gui m_320668_(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/DeltaTracker;)V # renderTitle -public net.minecraft.client.gui.Gui m_322096_(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/DeltaTracker;)V # renderChat -public net.minecraft.client.gui.Gui m_322680_(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/DeltaTracker;)V # renderSleepOverlay -public net.minecraft.client.gui.Gui m_323286_(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/DeltaTracker;)V # renderScoreboardSidebar -public net.minecraft.client.gui.Gui m_324281_(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/DeltaTracker;)V # renderOverlayMessage -public net.minecraft.client.gui.Gui m_324469_(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/DeltaTracker;)V # renderItemHotbar -public net.minecraft.client.gui.Gui m_349660_(Ljava/lang/String;)Ljava/lang/String; # lambda$renderCameraOverlays$5 -public net.minecraft.client.gui.Gui m_351658_(III)I # getCurrentAirSupplyBubble -public net.minecraft.client.gui.Gui m_352455_(ILnet/minecraft/world/entity/player/Player;I)V # playAirBubblePoppedSound -public net.minecraft.client.gui.Gui m_353157_(IZ)I # getEmptyBubbleDelayDuration -public net.minecraft.client.gui.Gui m_355810_(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/world/entity/player/Player;III)V # renderAirBubbles -public net.minecraft.client.gui.Gui m_355965_(II)I # getAirBubbleYLine -public net.minecraft.client.gui.Gui m_356285_(Lnet/minecraft/client/gui/GuiGraphics;F)V # renderConfusionOverlay -public net.minecraft.client.gui.Gui m_400570_(Lnet/minecraft/client/Minecraft;)Lnet/minecraft/client/gui/contextualbar/ContextualBarRenderer; # lambda$new$3 -public net.minecraft.client.gui.Gui m_400572_(Lnet/minecraft/client/Minecraft;)Lnet/minecraft/client/gui/contextualbar/ContextualBarRenderer; # lambda$new$2 -public net.minecraft.client.gui.Gui m_400573_(Lnet/minecraft/client/Minecraft;)Lnet/minecraft/client/gui/contextualbar/ContextualBarRenderer; # lambda$new$1 -public net.minecraft.client.gui.Gui m_400574_()Lnet/minecraft/client/gui/contextualbar/ContextualBarRenderer; # lambda$new$0 -public net.minecraft.client.gui.Gui m_401964_(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/DeltaTracker;)V # renderBossOverlay -public net.minecraft.client.gui.Gui m_402852_()Z # willPrioritizeExperienceInfo -public net.minecraft.client.gui.Gui m_402918_()Lnet/minecraft/client/gui/Gui$ContextualInfo; # nextContextualInfoState -public net.minecraft.client.gui.Gui m_403208_()Z # willPrioritizeJumpInfo -public net.minecraft.client.gui.Gui m_403250_(Lnet/minecraft/client/gui/GuiGraphics;Z)V # renderSubtitleOverlay -public net.minecraft.client.gui.Gui m_414133_(Lnet/minecraft/client/gui/GuiGraphics;)V # lambda$renderSubtitleOverlay$4 -public net.minecraft.client.gui.Gui m_437571_(Lnet/minecraft/resources/Identifier;)Lnet/minecraft/resources/Identifier; # lambda$getMobEffectSprite$6 -public net.minecraft.client.gui.Gui m_93012_(I)I # getVisibleVehicleHeartRows -public net.minecraft.client.gui.Gui m_93020_(Lnet/minecraft/world/entity/Entity;)V # updateVignetteBrightness -public net.minecraft.client.gui.Gui m_93022_(Lnet/minecraft/world/entity/LivingEntity;)I # getVehicleMaxHearts -public net.minecraft.client.gui.Gui m_93024_(Lnet/minecraft/world/phys/HitResult;)Z # canRenderCrosshairForSpectator -public net.minecraft.client.gui.Gui m_93066_()V # tick -public net.minecraft.client.gui.Gui m_93092_()Lnet/minecraft/world/entity/player/Player; # getCameraPlayer -public net.minecraft.client.gui.Gui m_93093_()Lnet/minecraft/world/entity/LivingEntity; # getPlayerVehicleWithHealth +public net.minecraft.client.gui.Gui canRenderCrosshairForSpectator(Lnet/minecraft/world/phys/HitResult;)Z +public net.minecraft.client.gui.Gui displayScoreboardSidebar(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/world/scores/Objective;)V +public net.minecraft.client.gui.Gui extractAirBubbles(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/world/entity/player/Player;III)V +public net.minecraft.client.gui.Gui extractArmor(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/world/entity/player/Player;IIII)V +public net.minecraft.client.gui.Gui extractBossOverlay(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/client/DeltaTracker;)V +public net.minecraft.client.gui.Gui extractCameraOverlays(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/client/DeltaTracker;)V +public net.minecraft.client.gui.Gui extractChat(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/client/DeltaTracker;)V +public net.minecraft.client.gui.Gui extractConfusionOverlay(Lnet/minecraft/client/gui/GuiGraphicsExtractor;F)V +public net.minecraft.client.gui.Gui extractCrosshair(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/client/DeltaTracker;)V +public net.minecraft.client.gui.Gui extractDemoOverlay(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/client/DeltaTracker;)V +public net.minecraft.client.gui.Gui extractEffects(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/client/DeltaTracker;)V +public net.minecraft.client.gui.Gui extractFood(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/world/entity/player/Player;II)V +public net.minecraft.client.gui.Gui extractHeart(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/client/gui/Gui$HeartType;IIZZZ)V +public net.minecraft.client.gui.Gui extractHearts(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/world/entity/player/Player;IIIIFIIIZ)V +public net.minecraft.client.gui.Gui extractHotbarAndDecorations(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/client/DeltaTracker;)V +public net.minecraft.client.gui.Gui extractItemHotbar(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/client/DeltaTracker;)V +public net.minecraft.client.gui.Gui extractOverlayMessage(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/client/DeltaTracker;)V +public net.minecraft.client.gui.Gui extractPlayerHealth(Lnet/minecraft/client/gui/GuiGraphicsExtractor;)V +public net.minecraft.client.gui.Gui extractPortalOverlay(Lnet/minecraft/client/gui/GuiGraphicsExtractor;F)V +public net.minecraft.client.gui.Gui extractScoreboardSidebar(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/client/DeltaTracker;)V +public net.minecraft.client.gui.Gui extractSelectedItemName(Lnet/minecraft/client/gui/GuiGraphicsExtractor;)V +public net.minecraft.client.gui.Gui extractSleepOverlay(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/client/DeltaTracker;)V +public net.minecraft.client.gui.Gui extractSlot(Lnet/minecraft/client/gui/GuiGraphicsExtractor;IILnet/minecraft/client/DeltaTracker;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/item/ItemStack;I)V +public net.minecraft.client.gui.Gui extractSpyglassOverlay(Lnet/minecraft/client/gui/GuiGraphicsExtractor;F)V +public net.minecraft.client.gui.Gui extractSubtitleOverlay(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Z)V +public net.minecraft.client.gui.Gui extractTabList(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/client/DeltaTracker;)V +public net.minecraft.client.gui.Gui extractTextureOverlay(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/resources/Identifier;F)V +public net.minecraft.client.gui.Gui extractTitle(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/client/DeltaTracker;)V +public net.minecraft.client.gui.Gui extractVehicleHealth(Lnet/minecraft/client/gui/GuiGraphicsExtractor;)V +public net.minecraft.client.gui.Gui extractVignette(Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lnet/minecraft/world/entity/Entity;)V +public net.minecraft.client.gui.Gui getAirBubbleYLine(II)I +public net.minecraft.client.gui.Gui getCameraPlayer()Lnet/minecraft/world/entity/player/Player; +public net.minecraft.client.gui.Gui getCurrentAirSupplyBubble(III)I +public net.minecraft.client.gui.Gui getEmptyBubbleDelayDuration(IZ)I +public net.minecraft.client.gui.Gui getPlayerVehicleWithHealth()Lnet/minecraft/world/entity/LivingEntity; +public net.minecraft.client.gui.Gui getVehicleMaxHearts(Lnet/minecraft/world/entity/LivingEntity;)I +public net.minecraft.client.gui.Gui getVisibleVehicleHeartRows(I)I +public net.minecraft.client.gui.Gui nextContextualInfoState()Lnet/minecraft/client/gui/Gui$ContextualInfo; +public net.minecraft.client.gui.Gui playAirBubblePoppedSound(ILnet/minecraft/world/entity/player/Player;I)V +public net.minecraft.client.gui.Gui tick()V +public net.minecraft.client.gui.Gui tickAutosaveIndicator()V +public net.minecraft.client.gui.Gui updateVignetteBrightness(Lnet/minecraft/world/entity/Entity;)V +public net.minecraft.client.gui.Gui willPrioritizeExperienceInfo()Z +public net.minecraft.client.gui.Gui willPrioritizeJumpInfo()Z #endgroup -public net.minecraft.client.gui.GuiGraphics$ScissorStack -public net.minecraft.client.gui.GuiGraphics$ScissorStack ()V # constructor -protected net.minecraft.client.gui.components.AbstractButton f_290895_ # SPRITES -protected net.minecraft.client.gui.components.AbstractSelectionList$Entry f_93521_ # list -protected net.minecraft.client.gui.components.AbstractSliderButton m_293290_()Lnet/minecraft/resources/Identifier; # getHandleSprite -protected net.minecraft.client.gui.components.AbstractSliderButton m_293389_()Lnet/minecraft/resources/Identifier; # getSprite -public net.minecraft.client.gui.components.ChatComponent m_93814_()I # getHeight -public net.minecraft.client.gui.components.ChatComponent m_93815_()D # getScale -protected net.minecraft.client.gui.components.DebugScreenOverlay m_286013_(Lnet/minecraft/client/gui/GuiGraphics;Ljava/util/List;Z)V # renderLines -public net.minecraft.client.gui.components.debug.DebugScreenEntries m_419600_(Lnet/minecraft/resources/Identifier;Lnet/minecraft/client/gui/components/debug/DebugScreenEntry;)Lnet/minecraft/resources/Identifier; # register -public net.minecraft.client.gui.screens.MenuScreens m_96206_(Lnet/minecraft/world/inventory/MenuType;Lnet/minecraft/client/gui/screens/MenuScreens$ScreenConstructor;)V # register +public net.minecraft.client.gui.GuiGraphicsExtractor componentHoverEffect(Lnet/minecraft/client/gui/Font;Lnet/minecraft/network/chat/Style;II)V +protected net.minecraft.client.gui.components.AbstractButton SPRITES +protected net.minecraft.client.gui.components.AbstractSelectionList$Entry list +protected net.minecraft.client.gui.components.AbstractSliderButton getHandleSprite()Lnet/minecraft/resources/Identifier; +protected net.minecraft.client.gui.components.AbstractSliderButton getSprite()Lnet/minecraft/resources/Identifier; +public net.minecraft.client.gui.components.ChatComponent getHeight()I +public net.minecraft.client.gui.components.ChatComponent getScale()D +public net.minecraft.client.gui.components.ChatComponent getWidth()I +public net.minecraft.client.gui.components.debug.DebugScreenEntries register(Lnet/minecraft/resources/Identifier;Lnet/minecraft/client/gui/components/debug/DebugScreenEntry;)Lnet/minecraft/resources/Identifier; +public net.minecraft.client.gui.screens.MenuScreens register(Lnet/minecraft/world/inventory/MenuType;Lnet/minecraft/client/gui/screens/MenuScreens$ScreenConstructor;)V public net.minecraft.client.gui.screens.MenuScreens$ScreenConstructor -public net.minecraft.client.gui.screens.Screen f_169369_ # renderables -protected net.minecraft.client.gui.screens.inventory.AbstractContainerScreen m_351642_(Lnet/minecraft/client/gui/GuiGraphics;)V # renderSlotHighlightBack -protected net.minecraft.client.gui.screens.inventory.AbstractContainerScreen m_352078_(Lnet/minecraft/client/gui/GuiGraphics;)V # renderSlotHighlightFront -public net.minecraft.client.model.geom.LayerDefinitions f_171106_ # OUTER_ARMOR_DEFORMATION -public net.minecraft.client.model.geom.LayerDefinitions f_171107_ # INNER_ARMOR_DEFORMATION -public net.minecraft.client.multiplayer.ClientPacketListener f_104899_ # commands -public net.minecraft.client.multiplayer.ClientPacketListener f_399181_ # COMMAND_NODE_BUILDER -public net.minecraft.client.multiplayer.SessionSearchTrees f_336706_ # CREATIVE_TAGS -public net.minecraft.client.multiplayer.SessionSearchTrees f_337599_ # CREATIVE_NAMES +public net.minecraft.client.gui.screens.Screen renderables +public net.minecraft.client.model.geom.LayerDefinitions INNER_ARMOR_DEFORMATION +public net.minecraft.client.model.geom.LayerDefinitions OUTER_ARMOR_DEFORMATION +public net.minecraft.client.multiplayer.ClientPacketListener COMMAND_NODE_BUILDER +public net.minecraft.client.multiplayer.ClientPacketListener commands +public net.minecraft.client.multiplayer.SessionSearchTrees CREATIVE_NAMES +public net.minecraft.client.multiplayer.SessionSearchTrees CREATIVE_TAGS public net.minecraft.client.multiplayer.SessionSearchTrees$Key -public net.minecraft.client.multiplayer.SessionSearchTrees$Key ()V # constructor -public net.minecraft.client.particle.ParticleResources m_415611_(Lnet/minecraft/core/particles/ParticleType;Lnet/minecraft/client/particle/ParticleResources$SpriteParticleRegistration;)V # register -public net.minecraft.client.particle.ParticleResources m_419483_(Lnet/minecraft/core/particles/ParticleType;Lnet/minecraft/client/particle/ParticleProvider;)V # register +public net.minecraft.client.multiplayer.SessionSearchTrees$Key ()V +public net.minecraft.client.particle.ParticleResources register(Lnet/minecraft/core/particles/ParticleType;Lnet/minecraft/client/particle/ParticleProvider;)V +public net.minecraft.client.particle.ParticleResources register(Lnet/minecraft/core/particles/ParticleType;Lnet/minecraft/client/particle/ParticleResources$SpriteParticleRegistration;)V public net.minecraft.client.particle.ParticleResources$SpriteParticleRegistration -public net.minecraft.client.player.ClientInput f_381292_ # moveVector -private-f net.minecraft.client.renderer.LevelRenderer f_348825_ # weatherEffectRenderer -public net.minecraft.client.renderer.LevelRenderer m_109817_()Z # shouldShowEntityOutlines +public net.minecraft.client.player.ClientInput moveVector +public net.minecraft.client.renderer.LevelRenderer shouldShowEntityOutlines()Z +private-f net.minecraft.client.renderer.LevelRenderer weatherEffectRenderer #group public net.minecraft.client.renderer.RenderPipelines * -public net.minecraft.client.renderer.RenderPipelines f_379621_ # GUI_TEXTURED_SNIPPET -public net.minecraft.client.renderer.RenderPipelines f_380033_ # DEBUG_FILLED_SNIPPET -public net.minecraft.client.renderer.RenderPipelines f_380078_ # TERRAIN_SNIPPET -public net.minecraft.client.renderer.RenderPipelines f_380180_ # TEXT_SNIPPET -public net.minecraft.client.renderer.RenderPipelines f_380191_ # PARTICLE_SNIPPET -public net.minecraft.client.renderer.RenderPipelines f_380221_ # FOG_SNIPPET -public net.minecraft.client.renderer.RenderPipelines f_380403_ # END_PORTAL_SNIPPET -public net.minecraft.client.renderer.RenderPipelines f_380564_ # OUTLINE_SNIPPET -public net.minecraft.client.renderer.RenderPipelines f_381014_ # CLOUDS_SNIPPET -public net.minecraft.client.renderer.RenderPipelines f_381310_ # WEATHER_SNIPPET -public net.minecraft.client.renderer.RenderPipelines f_381389_ # PIPELINES_BY_LOCATION -public net.minecraft.client.renderer.RenderPipelines f_381976_ # ENTITY_SNIPPET -public net.minecraft.client.renderer.RenderPipelines f_382486_ # LINES_SNIPPET -public net.minecraft.client.renderer.RenderPipelines f_382524_ # GUI_SNIPPET -public net.minecraft.client.renderer.RenderPipelines f_382587_ # BEACON_BEAM_SNIPPET -public net.minecraft.client.renderer.RenderPipelines f_398868_ # MATRICES_PROJECTION_SNIPPET -public net.minecraft.client.renderer.RenderPipelines f_399346_ # GLOBALS_SNIPPET -public net.minecraft.client.renderer.RenderPipelines f_399373_ # ENTITY_EMISSIVE_SNIPPET -public net.minecraft.client.renderer.RenderPipelines f_400011_ # MATRICES_FOG_LIGHT_DIR_SNIPPET -public net.minecraft.client.renderer.RenderPipelines f_400219_ # MATRICES_FOG_SNIPPET -public net.minecraft.client.renderer.RenderPipelines f_412883_ # GUI_TEXT_SNIPPET -public net.minecraft.client.renderer.RenderPipelines f_434495_ # BLOCK_SNIPPET -public net.minecraft.client.renderer.RenderPipelines f_435549_ # GENERIC_BLOCKS_SNIPPET +public net.minecraft.client.renderer.RenderPipelines BEACON_BEAM_SNIPPET +public net.minecraft.client.renderer.RenderPipelines BLOCK_SNIPPET +public net.minecraft.client.renderer.RenderPipelines CLOUDS_SNIPPET +public net.minecraft.client.renderer.RenderPipelines DEBUG_FILLED_SNIPPET +public net.minecraft.client.renderer.RenderPipelines END_PORTAL_SNIPPET +public net.minecraft.client.renderer.RenderPipelines ENTITY_EMISSIVE_SNIPPET +public net.minecraft.client.renderer.RenderPipelines ENTITY_SNIPPET +public net.minecraft.client.renderer.RenderPipelines FOG_SNIPPET +public net.minecraft.client.renderer.RenderPipelines GENERIC_BLOCKS_SNIPPET +public net.minecraft.client.renderer.RenderPipelines GLOBALS_SNIPPET +public net.minecraft.client.renderer.RenderPipelines GUI_SNIPPET +public net.minecraft.client.renderer.RenderPipelines GUI_TEXTURED_SNIPPET +public net.minecraft.client.renderer.RenderPipelines GUI_TEXT_SNIPPET +public net.minecraft.client.renderer.RenderPipelines ITEM_SNIPPET +public net.minecraft.client.renderer.RenderPipelines LINES_SNIPPET +public net.minecraft.client.renderer.RenderPipelines MATRICES_FOG_LIGHT_DIR_SNIPPET +public net.minecraft.client.renderer.RenderPipelines MATRICES_FOG_SNIPPET +public net.minecraft.client.renderer.RenderPipelines MATRICES_PROJECTION_SNIPPET +public net.minecraft.client.renderer.RenderPipelines OUTLINE_SNIPPET +public net.minecraft.client.renderer.RenderPipelines PARTICLE_SNIPPET +public net.minecraft.client.renderer.RenderPipelines PIPELINES_BY_LOCATION +public net.minecraft.client.renderer.RenderPipelines TERRAIN_SNIPPET +public net.minecraft.client.renderer.RenderPipelines TEXT_SNIPPET +public net.minecraft.client.renderer.RenderPipelines WEATHER_SNIPPET #endgroup -public net.minecraft.client.renderer.block.model.BlockElement$Deserializer -public net.minecraft.client.renderer.block.model.BlockElement$Deserializer ()V # constructor -public net.minecraft.client.renderer.block.model.BlockElementFace$Deserializer -public net.minecraft.client.renderer.block.model.BlockElementFace$Deserializer ()V # constructor -public net.minecraft.client.renderer.block.model.BlockModel f_111418_ # parent -public net.minecraft.client.renderer.block.model.BlockModel f_370667_ # textureSlots -public net.minecraft.client.renderer.block.model.ItemModelGenerator m_111638_(ILjava/lang/String;Lnet/minecraft/client/renderer/texture/SpriteContents;)Ljava/util/List; # processFrames -public net.minecraft.client.renderer.block.model.ItemTransform$Deserializer -public net.minecraft.client.renderer.block.model.ItemTransform$Deserializer ()V # constructor -public net.minecraft.client.renderer.block.model.ItemTransform$Deserializer f_111769_ # DEFAULT_ROTATION -public net.minecraft.client.renderer.block.model.ItemTransform$Deserializer f_111770_ # DEFAULT_TRANSLATION -public net.minecraft.client.renderer.block.model.ItemTransform$Deserializer f_111771_ # DEFAULT_SCALE -public net.minecraft.client.renderer.block.model.ItemTransforms$Deserializer -public net.minecraft.client.renderer.block.model.ItemTransforms$Deserializer ()V # constructor -public net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher f_112253_ # fontRenderer - needed for rendering text in TESR items before entering world -public net.minecraft.client.renderer.blockentity.BlockEntityRenderers m_173590_(Lnet/minecraft/world/level/block/entity/BlockEntityType;Lnet/minecraft/client/renderer/blockentity/BlockEntityRendererProvider;)V # register -protected net.minecraft.client.renderer.blockentity.ChestRenderer m_420143_(Lnet/minecraft/world/level/block/entity/BlockEntity;Z)Lnet/minecraft/client/renderer/blockentity/state/ChestRenderState$ChestMaterialType; # getChestMaterial -public net.minecraft.client.renderer.blockentity.SkullBlockRenderer f_112519_ # SKIN_BY_TYPE -public net.minecraft.client.renderer.entity.EntityRenderDispatcher f_114362_ # renderers -public net.minecraft.client.renderer.entity.EntityRenderers m_174036_(Lnet/minecraft/world/entity/EntityType;Lnet/minecraft/client/renderer/entity/EntityRendererProvider;)V # register -public net.minecraft.client.renderer.entity.ItemRenderer m_115162_(Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;Ljava/util/List;[III)V # renderQuadList -public net.minecraft.client.renderer.entity.LivingEntityRenderer m_115326_(Lnet/minecraft/client/renderer/entity/layers/RenderLayer;)Z # addLayer -protected net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer m_117078_(Lnet/minecraft/client/renderer/entity/state/HumanoidRenderState;Lnet/minecraft/world/entity/EquipmentSlot;)Lnet/minecraft/client/model/HumanoidModel; # getArmorModel -protected net.minecraft.client.renderer.entity.layers.WingsLayer m_356494_(Lnet/minecraft/client/renderer/entity/state/HumanoidRenderState;)Lnet/minecraft/resources/Identifier; # getPlayerElytraTexture -public net.minecraft.client.renderer.rendertype.RenderType m_446098_(Ljava/lang/String;Lnet/minecraft/client/renderer/rendertype/RenderSetup;)Lnet/minecraft/client/renderer/rendertype/RenderType; # create -public net.minecraft.client.renderer.texture.SpriteContents f_243731_ # byMipLevel -default net.minecraft.client.renderer.texture.SpriteContents f_244575_ # animatedTexture -default net.minecraft.client.renderer.texture.SpriteContents m_245088_()I # getFrameCount -public net.minecraft.client.resources.ClientPackSource m_246691_(Ljava/nio/file/Path;)Lnet/minecraft/server/packs/VanillaPackResources; # createVanillaPackSource +public net.minecraft.client.renderer.blockentity.BlockEntityRenderers register(Lnet/minecraft/world/level/block/entity/BlockEntityType;Lnet/minecraft/client/renderer/blockentity/BlockEntityRendererProvider;)V +protected net.minecraft.client.renderer.blockentity.ChestRenderer getChestMaterial(Lnet/minecraft/world/level/block/entity/BlockEntity;Z)Lnet/minecraft/client/renderer/blockentity/state/ChestRenderState$ChestMaterialType; +public net.minecraft.client.renderer.blockentity.SkullBlockRenderer SKIN_BY_TYPE +public net.minecraft.client.renderer.entity.EntityRenderDispatcher renderers +public net.minecraft.client.renderer.entity.EntityRenderers register(Lnet/minecraft/world/entity/EntityType;Lnet/minecraft/client/renderer/entity/EntityRendererProvider;)V +public net.minecraft.client.renderer.entity.LivingEntityRenderer addLayer(Lnet/minecraft/client/renderer/entity/layers/RenderLayer;)Z +protected net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer getArmorModel(Lnet/minecraft/client/renderer/entity/state/HumanoidRenderState;Lnet/minecraft/world/entity/EquipmentSlot;)Lnet/minecraft/client/model/HumanoidModel; +protected net.minecraft.client.renderer.entity.layers.WingsLayer getPlayerElytraTexture(Lnet/minecraft/client/renderer/entity/state/HumanoidRenderState;)Lnet/minecraft/resources/Identifier; +public net.minecraft.client.renderer.rendertype.RenderType create(Ljava/lang/String;Lnet/minecraft/client/renderer/rendertype/RenderSetup;)Lnet/minecraft/client/renderer/rendertype/RenderType; +default net.minecraft.client.renderer.texture.SpriteContents animatedTexture +public net.minecraft.client.renderer.texture.SpriteContents byMipLevel +default net.minecraft.client.renderer.texture.SpriteContents getFrameCount()I +public net.minecraft.client.renderer.texture.SpriteContents$AnimatedTexture +public net.minecraft.client.renderer.texture.SpriteContents$AnimatedTexture getFrameX(I)I +public net.minecraft.client.renderer.texture.SpriteContents$AnimatedTexture getFrameY(I)I +public net.minecraft.client.resources.ClientPackSource createVanillaPackSource(Ljava/nio/file/Path;)Lnet/minecraft/server/packs/VanillaPackResources; public net.minecraft.client.resources.model.ModelDiscovery$ModelWrapper -public net.minecraft.client.sounds.SoundEngine f_120217_ # soundManager -public net.minecraft.commands.CommandSourceStack f_81288_ # source -public net.minecraft.commands.arguments.selector.EntitySelectorParser m_121229_()V # finalizePredicates -public net.minecraft.commands.arguments.selector.EntitySelectorParser m_121317_()V # parseOptions -public net.minecraft.commands.arguments.selector.options.EntitySelectorOptions m_121453_(Ljava/lang/String;Lnet/minecraft/commands/arguments/selector/options/EntitySelectorOptions$Modifier;Ljava/util/function/Predicate;Lnet/minecraft/network/chat/Component;)V # register -public net.minecraft.core.Holder$Reference m_205769_(Ljava/util/Collection;)V # bindTags -public net.minecraft.core.Holder$Reference m_246870_(Lnet/minecraft/resources/ResourceKey;)V # bindKey -public net.minecraft.core.Holder$Reference m_247654_(Ljava/lang/Object;)V # bindValue +public net.minecraft.client.resources.model.cuboid.ItemModelGenerator NORTH_FACE_UVS +public net.minecraft.client.resources.model.cuboid.ItemModelGenerator SOUTH_FACE_UVS +public net.minecraft.client.resources.model.cuboid.ItemModelGenerator bakeExtrudedSprite(Lnet/minecraft/client/resources/model/geometry/QuadCollection$Builder;Lnet/minecraft/client/resources/model/ModelBaker$Interner;Lnet/minecraft/client/renderer/block/dispatch/ModelState;Lnet/minecraft/client/resources/model/geometry/BakedQuad$MaterialInfo;)V +public net.minecraft.client.resources.model.cuboid.ItemModelGenerator bakeSideFaces(Lnet/minecraft/client/resources/model/geometry/QuadCollection$Builder;Lnet/minecraft/client/resources/model/ModelBaker$Interner;Lnet/minecraft/client/renderer/block/dispatch/ModelState;Lnet/minecraft/client/resources/model/geometry/BakedQuad$MaterialInfo;)V +public net.minecraft.client.sounds.SoundEngine soundManager +public net.minecraft.commands.CommandSourceStack source +public net.minecraft.commands.arguments.selector.EntitySelectorParser finalizePredicates()V +public net.minecraft.commands.arguments.selector.EntitySelectorParser parseOptions()V +public net.minecraft.commands.arguments.selector.options.EntitySelectorOptions register(Ljava/lang/String;Lnet/minecraft/commands/arguments/selector/options/EntitySelectorOptions$Modifier;Ljava/util/function/Predicate;Lnet/minecraft/network/chat/Component;)V +public net.minecraft.core.Holder$Reference bindKey(Lnet/minecraft/resources/ResourceKey;)V +public net.minecraft.core.Holder$Reference bindTags(Ljava/util/Collection;)V +public net.minecraft.core.Holder$Reference bindValue(Ljava/lang/Object;)V public net.minecraft.core.Holder$Reference$Type -public net.minecraft.core.HolderSet$Named (Lnet/minecraft/core/HolderOwner;Lnet/minecraft/tags/TagKey;)V # constructor -public net.minecraft.core.HolderSet$Named m_205835_(Ljava/util/List;)V # bind -protected net.minecraft.core.IdMapper f_122653_ # nextId -protected net.minecraft.core.IdMapper f_122654_ # tToId - internal map -protected net.minecraft.core.IdMapper f_122655_ # idToT - internal index list -protected net.minecraft.core.MappedRegistry f_244282_ # unregisteredIntrusiveHolders -protected net.minecraft.core.MappedRegistry m_245420_(Lnet/minecraft/resources/ResourceKey;)Lnet/minecraft/core/Holder$Reference; # getOrCreateHolderOrThrow -protected net.minecraft.core.MappedRegistry m_354248_(Lnet/minecraft/tags/TagKey;)Lnet/minecraft/core/HolderSet$Named; # getOrCreateTagForRegistration +public net.minecraft.core.HolderSet$Named (Lnet/minecraft/core/HolderOwner;Lnet/minecraft/tags/TagKey;)V +public net.minecraft.core.HolderSet$Named bind(Ljava/util/List;)V +protected net.minecraft.core.IdMapper idToT +protected net.minecraft.core.IdMapper nextId +protected net.minecraft.core.IdMapper tToId +protected net.minecraft.core.MappedRegistry componentLookup +protected net.minecraft.core.MappedRegistry getOrCreateHolderOrThrow(Lnet/minecraft/resources/ResourceKey;)Lnet/minecraft/core/Holder$Reference; +protected net.minecraft.core.MappedRegistry getOrCreateTagForRegistration(Lnet/minecraft/tags/TagKey;)Lnet/minecraft/core/HolderSet$Named; +protected net.minecraft.core.MappedRegistry unregisteredIntrusiveHolders protected net.minecraft.core.MappedRegistry$TagSet -public net.minecraft.core.RegistrySetBuilder$LazyHolder m_247654_(Ljava/lang/Object;)V # bindValue -public net.minecraft.core.particles.SimpleParticleType (Z)V # constructor -protected net.minecraft.data.loot.BlockLootSubProvider m_245335_(Lnet/minecraft/world/level/ItemLike;)Lnet/minecraft/world/level/storage/loot/LootTable$Builder; # createSilkTouchOnlyTable -protected net.minecraft.data.loot.BlockLootSubProvider m_245602_(Lnet/minecraft/world/level/ItemLike;)Lnet/minecraft/world/level/storage/loot/LootTable$Builder; # createPotFlowerItemTable -protected net.minecraft.data.loot.BlockLootSubProvider m_246900_(Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/storage/loot/predicates/LootItemCondition$Builder;Lnet/minecraft/world/level/storage/loot/entries/LootPoolEntryContainer$Builder;)Lnet/minecraft/world/level/storage/loot/LootTable$Builder; # createSelfDropDispatchTable -protected net.minecraft.data.recipes.RecipeProvider m_176523_(Lnet/minecraft/data/BlockFamily;Lnet/minecraft/data/BlockFamily$Variant;)Lnet/minecraft/world/level/block/Block; # getBaseBlock -protected net.minecraft.data.recipes.RecipeProvider m_176658_(Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/item/crafting/Ingredient;)Lnet/minecraft/data/recipes/RecipeBuilder; # buttonBuilder -protected net.minecraft.data.recipes.RecipeProvider m_176678_(Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/item/crafting/Ingredient;)Lnet/minecraft/data/recipes/RecipeBuilder; # fenceBuilder -protected net.minecraft.data.recipes.RecipeProvider m_176684_(Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/item/crafting/Ingredient;)Lnet/minecraft/data/recipes/RecipeBuilder; # fenceGateBuilder -protected net.minecraft.data.recipes.RecipeProvider m_176720_(Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/item/crafting/Ingredient;)Lnet/minecraft/data/recipes/RecipeBuilder; # trapdoorBuilder -protected net.minecraft.data.recipes.RecipeProvider m_176726_(Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/item/crafting/Ingredient;)Lnet/minecraft/data/recipes/RecipeBuilder; # signBuilder -protected net.minecraft.data.recipes.RecipeProvider m_245792_(Lnet/minecraft/data/recipes/RecipeCategory;Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/item/crafting/Ingredient;)Lnet/minecraft/data/recipes/ShapedRecipeBuilder; # cutBuilder -protected net.minecraft.data.recipes.RecipeProvider m_245864_(Lnet/minecraft/data/recipes/RecipeCategory;Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/item/crafting/Ingredient;)Lnet/minecraft/data/recipes/RecipeBuilder; # wallBuilder -protected net.minecraft.data.recipes.RecipeProvider m_247174_(Lnet/minecraft/data/recipes/RecipeCategory;Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/item/crafting/Ingredient;)Lnet/minecraft/data/recipes/RecipeBuilder; # polishedBuilder -protected net.minecraft.data.recipes.RecipeProvider m_247347_(Lnet/minecraft/data/recipes/RecipeCategory;Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/item/crafting/Ingredient;)Lnet/minecraft/data/recipes/RecipeBuilder; # pressurePlateBuilder -protected net.minecraft.data.recipes.packs.VanillaRecipeProvider (Lnet/minecraft/core/HolderLookup$Provider;Lnet/minecraft/data/recipes/RecipeOutput;)V # constructor -public net.minecraft.data.recipes.packs.VanillaRecipeProvider f_243671_ # COAL_SMELTABLES -public net.minecraft.data.recipes.packs.VanillaRecipeProvider f_243779_ # IRON_SMELTABLES -public net.minecraft.data.recipes.packs.VanillaRecipeProvider f_243908_ # COPPER_SMELTABLES -public net.minecraft.data.recipes.packs.VanillaRecipeProvider f_243974_ # DIAMOND_SMELTABLES -public net.minecraft.data.recipes.packs.VanillaRecipeProvider f_244369_ # GOLD_SMELTABLES -public net.minecraft.data.recipes.packs.VanillaRecipeProvider f_244430_ # EMERALD_SMELTABLES -public net.minecraft.data.recipes.packs.VanillaRecipeProvider f_244565_ # REDSTONE_SMELTABLES -public net.minecraft.data.recipes.packs.VanillaRecipeProvider f_244628_ # LAPIS_SMELTABLES -public-f net.minecraft.data.registries.RegistriesDatapackGenerator m_6055_()Ljava/lang/String; # getName -protected net.minecraft.data.tags.TagsProvider f_126543_ # builders -public-f net.minecraft.data.tags.TagsProvider m_6055_()Ljava/lang/String; # getName -public net.minecraft.data.tags.VanillaItemTagsProvider$BlockToItemConverter -public net.minecraft.resources.Identifier m_441545_(C)Z # validNamespaceChar -protected net.minecraft.server.MinecraftServer f_302313_ # nextTickTimeNanos -public net.minecraft.server.MinecraftServer f_303727_ # tickTimesNanos -public net.minecraft.server.MinecraftServer$ReloadableResources -public net.minecraft.server.dedicated.DedicatedServer f_139600_ # consoleInput -public net.minecraft.server.level.ServerChunkCache f_8329_ # level -public net.minecraft.server.level.ServerLevel m_142646_()Lnet/minecraft/world/level/entity/LevelEntityGetter; # getEntities -public net.minecraft.server.level.ServerPlayer f_8940_ # containerCounter -public net.minecraft.server.level.ServerPlayer m_143399_(Lnet/minecraft/world/inventory/AbstractContainerMenu;)V # initMenu -public net.minecraft.server.level.ServerPlayer m_9217_()V # nextContainerCounter -public net.minecraft.server.network.ServerConfigurationPacketListenerImpl m_293514_(Lnet/minecraft/server/network/ConfigurationTask$Type;)V # finishCurrentTask -public net.minecraft.server.packs.repository.FolderRepositorySource$FolderPackDetector -public net.minecraft.server.packs.repository.FolderRepositorySource$FolderPackDetector (Lnet/minecraft/world/level/validation/DirectoryValidator;)V # constructor -public net.minecraft.server.packs.repository.ServerPacksSource m_246173_()Lnet/minecraft/server/packs/VanillaPackResources; # createVanillaPackSource -public net.minecraft.server.packs.resources.FallbackResourceManager f_10599_ # fallbacks -protected net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener (Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/Codec;Lnet/minecraft/resources/FileToIdConverter;)V # constructor -public net.minecraft.util.datafix.fixes.StructuresBecomeConfiguredFix$Conversion -public net.minecraft.util.thread.BlockableEventLoop m_18689_(Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture; # submitAsync -#group public net.minecraft.world.damagesource.DamageSource *() #All methods public, most are already -public net.minecraft.world.damagesource.DamageSource (Lnet/minecraft/core/Holder;Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/phys/Vec3;)V # constructor +public net.minecraft.core.RegistrySetBuilder$LazyHolder bindValue(Ljava/lang/Object;)V +public net.minecraft.core.particles.SimpleParticleType (Z)V +protected net.minecraft.data.loot.BlockLootSubProvider createPotFlowerItemTable(Lnet/minecraft/world/level/ItemLike;)Lnet/minecraft/world/level/storage/loot/LootTable$Builder; +protected net.minecraft.data.loot.BlockLootSubProvider createSilkTouchOnlyTable(Lnet/minecraft/world/level/ItemLike;)Lnet/minecraft/world/level/storage/loot/LootTable$Builder; +#group protected net.minecraft.data.recipes.RecipeProvider *() +protected net.minecraft.data.recipes.RecipeProvider bricksBuilder(Lnet/minecraft/data/recipes/RecipeCategory;Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/item/crafting/Ingredient;)Lnet/minecraft/data/recipes/RecipeBuilder; +protected net.minecraft.data.recipes.RecipeProvider buttonBuilder(Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/item/crafting/Ingredient;)Lnet/minecraft/data/recipes/RecipeBuilder; +protected net.minecraft.data.recipes.RecipeProvider cutBuilder(Lnet/minecraft/data/recipes/RecipeCategory;Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/item/crafting/Ingredient;)Lnet/minecraft/data/recipes/ShapedRecipeBuilder; +protected net.minecraft.data.recipes.RecipeProvider fenceBuilder(Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/item/crafting/Ingredient;)Lnet/minecraft/data/recipes/RecipeBuilder; +protected net.minecraft.data.recipes.RecipeProvider fenceGateBuilder(Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/item/crafting/Ingredient;)Lnet/minecraft/data/recipes/RecipeBuilder; +protected net.minecraft.data.recipes.RecipeProvider generateCraftingRecipe(Lnet/minecraft/data/BlockFamily;Lnet/minecraft/data/BlockFamily$Variant;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/ItemLike;)V +protected net.minecraft.data.recipes.RecipeProvider generateStonecutterRecipe(Lnet/minecraft/data/BlockFamily;Lnet/minecraft/data/BlockFamily$Variant;Lnet/minecraft/world/level/block/Block;)V +protected net.minecraft.data.recipes.RecipeProvider getBaseBlockForCrafting(Lnet/minecraft/data/BlockFamily;Lnet/minecraft/data/BlockFamily$Variant;)Lnet/minecraft/world/level/block/Block; +protected net.minecraft.data.recipes.RecipeProvider has(Lnet/minecraft/advancements/criterion/MinMaxBounds$Ints;Lnet/minecraft/world/level/ItemLike;)Lnet/minecraft/advancements/Criterion; +protected net.minecraft.data.recipes.RecipeProvider insideOf(Lnet/minecraft/world/level/block/Block;)Lnet/minecraft/advancements/Criterion; +protected net.minecraft.data.recipes.RecipeProvider inventoryTrigger([Lnet/minecraft/advancements/criterion/ItemPredicate$Builder;)Lnet/minecraft/advancements/Criterion; +protected net.minecraft.data.recipes.RecipeProvider inventoryTrigger([Lnet/minecraft/advancements/criterion/ItemPredicate;)Lnet/minecraft/advancements/Criterion; +protected net.minecraft.data.recipes.RecipeProvider nineBlockStorageRecipes(Lnet/minecraft/data/recipes/RecipeCategory;Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/data/recipes/RecipeCategory;Lnet/minecraft/world/level/ItemLike;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +protected net.minecraft.data.recipes.RecipeProvider oreCooking(Lnet/minecraft/world/item/crafting/AbstractCookingRecipe$Factory;Ljava/util/List;Lnet/minecraft/data/recipes/RecipeCategory;Lnet/minecraft/world/item/crafting/CookingBookCategory;Lnet/minecraft/world/level/ItemLike;FILjava/lang/String;Ljava/lang/String;)V +protected net.minecraft.data.recipes.RecipeProvider polishedBuilder(Lnet/minecraft/data/recipes/RecipeCategory;Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/item/crafting/Ingredient;)Lnet/minecraft/data/recipes/RecipeBuilder; +protected net.minecraft.data.recipes.RecipeProvider pressurePlateBuilder(Lnet/minecraft/data/recipes/RecipeCategory;Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/item/crafting/Ingredient;)Lnet/minecraft/data/recipes/RecipeBuilder; +protected net.minecraft.data.recipes.RecipeProvider signBuilder(Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/item/crafting/Ingredient;)Lnet/minecraft/data/recipes/RecipeBuilder; +protected net.minecraft.data.recipes.RecipeProvider simpleCookingRecipe(Ljava/lang/String;Lnet/minecraft/world/item/crafting/AbstractCookingRecipe$Factory;ILnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/level/ItemLike;F)V +protected net.minecraft.data.recipes.RecipeProvider smeltingResultFromBase(Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/level/ItemLike;)V +protected net.minecraft.data.recipes.RecipeProvider tilesBuilder(Lnet/minecraft/data/recipes/RecipeCategory;Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/item/crafting/Ingredient;)Lnet/minecraft/data/recipes/RecipeBuilder; +protected net.minecraft.data.recipes.RecipeProvider wallBuilder(Lnet/minecraft/data/recipes/RecipeCategory;Lnet/minecraft/world/level/ItemLike;Lnet/minecraft/world/item/crafting/Ingredient;)Lnet/minecraft/data/recipes/RecipeBuilder; #endgroup -protected net.minecraft.world.entity.Entity f_19843_ # ENTITY_COUNTER -public net.minecraft.world.entity.Entity f_399955_ # LOGGER -public net.minecraft.world.entity.Entity m_20078_()Ljava/lang/String; # getEncodeId -public net.minecraft.world.entity.Mob f_21345_ # goalSelector -public net.minecraft.world.entity.Mob f_21346_ # targetSelector -public net.minecraft.world.entity.ai.memory.MemoryModuleType (Ljava/util/Optional;)V # constructor -public net.minecraft.world.entity.ai.sensing.SensorType (Ljava/util/function/Supplier;)V # constructor -protected net.minecraft.world.entity.item.PrimedTnt m_32103_()V # explode - make it easier to extend TNTEntity with custom explosion logic -protected net.minecraft.world.entity.monster.skeleton.AbstractSkeleton m_442492_()Lnet/minecraft/sounds/SoundEvent; # getStepSound - make AbstractSkeletonEntity implementable -protected net.minecraft.world.entity.monster.skeleton.Parched m_442492_()Lnet/minecraft/sounds/SoundEvent; # getStepSound - make AbstractSkeletonEntity implementable -protected net.minecraft.world.entity.monster.skeleton.Skeleton m_442492_()Lnet/minecraft/sounds/SoundEvent; # getStepSound - make AbstractSkeletonEntity implementable -protected net.minecraft.world.entity.monster.skeleton.Stray m_442492_()Lnet/minecraft/sounds/SoundEvent; # getStepSound - make AbstractSkeletonEntity implementable -protected net.minecraft.world.entity.monster.skeleton.WitherSkeleton m_442492_()Lnet/minecraft/sounds/SoundEvent; # getStepSound - make AbstractSkeletonEntity implementable -protected net.minecraft.world.entity.monster.zombie.Zombie f_436498_ # conversionTime -public net.minecraft.world.entity.npc.villager.VillagerTrades$DyedArmorForEmeralds -public net.minecraft.world.entity.npc.villager.VillagerTrades$EmeraldForItems -public net.minecraft.world.entity.npc.villager.VillagerTrades$EmeraldsForVillagerTypeItem -public net.minecraft.world.entity.npc.villager.VillagerTrades$EnchantBookForEmeralds -public net.minecraft.world.entity.npc.villager.VillagerTrades$EnchantedItemForEmeralds -public net.minecraft.world.entity.npc.villager.VillagerTrades$FailureItemListing -public net.minecraft.world.entity.npc.villager.VillagerTrades$ItemsAndEmeraldsToItems -public net.minecraft.world.entity.npc.villager.VillagerTrades$ItemsForEmeralds -public net.minecraft.world.entity.npc.villager.VillagerTrades$SuspiciousStewForEmerald -public net.minecraft.world.entity.npc.villager.VillagerTrades$TippedArrowForItemsAndEmeralds -public net.minecraft.world.entity.npc.villager.VillagerTrades$TreasureMapForEmeralds -public net.minecraft.world.entity.npc.villager.VillagerTrades$TypeSpecificTrade -public net.minecraft.world.entity.player.Player m_6915_()V # closeContainer -protected net.minecraft.world.entity.projectile.Projectile (Lnet/minecraft/world/entity/EntityType;Lnet/minecraft/world/level/Level;)V # constructor -private-f net.minecraft.world.entity.raid.Raid$RaiderType f_37813_ # VALUES -public net.minecraft.world.entity.schedule.Activity (Ljava/lang/String;)V # constructor -public net.minecraft.world.inventory.AnvilMenu f_39000_ # repairItemCountCost +protected net.minecraft.data.recipes.packs.VanillaRecipeProvider (Lnet/minecraft/core/HolderLookup$Provider;Lnet/minecraft/data/recipes/RecipeOutput;)V +public net.minecraft.data.recipes.packs.VanillaRecipeProvider COAL_SMELTABLES +public net.minecraft.data.recipes.packs.VanillaRecipeProvider COPPER_SMELTABLES +public net.minecraft.data.recipes.packs.VanillaRecipeProvider DIAMOND_SMELTABLES +public net.minecraft.data.recipes.packs.VanillaRecipeProvider EMERALD_SMELTABLES +public net.minecraft.data.recipes.packs.VanillaRecipeProvider GOLD_SMELTABLES +public net.minecraft.data.recipes.packs.VanillaRecipeProvider IRON_SMELTABLES +public net.minecraft.data.recipes.packs.VanillaRecipeProvider LAPIS_SMELTABLES +public net.minecraft.data.recipes.packs.VanillaRecipeProvider REDSTONE_SMELTABLES +public-f net.minecraft.data.registries.RegistriesDatapackGenerator getName()Ljava/lang/String; +protected net.minecraft.data.tags.TagsProvider builders +public-f net.minecraft.data.tags.TagsProvider getName()Ljava/lang/String; +public net.minecraft.data.tags.VanillaItemTagsProvider$BlockToItemConverter +public net.minecraft.resources.Identifier validNamespaceChar(C)Z +public net.minecraft.resources.RegistryDataLoader$RegistryData (Lnet/minecraft/resources/ResourceKey;Lcom/mojang/serialization/Codec;)V +protected net.minecraft.server.MinecraftServer nextTickTimeNanos +public net.minecraft.server.MinecraftServer tickTimesNanos +public net.minecraft.server.MinecraftServer$ReloadableResources +public net.minecraft.server.dedicated.DedicatedServer consoleInput +public net.minecraft.server.level.ServerChunkCache level +public net.minecraft.server.level.ServerLevel getEntities()Lnet/minecraft/world/level/entity/LevelEntityGetter; +public net.minecraft.server.level.ServerPlayer containerCounter +public net.minecraft.server.level.ServerPlayer initMenu(Lnet/minecraft/world/inventory/AbstractContainerMenu;)V +public net.minecraft.server.level.ServerPlayer nextContainerCounter()V +public net.minecraft.server.network.ServerConfigurationPacketListenerImpl finishCurrentTask(Lnet/minecraft/server/network/ConfigurationTask$Type;)V +public net.minecraft.server.packs.repository.FolderRepositorySource$FolderPackDetector +public net.minecraft.server.packs.repository.FolderRepositorySource$FolderPackDetector (Lnet/minecraft/world/level/validation/DirectoryValidator;)V +public net.minecraft.server.packs.repository.ServerPacksSource createVanillaPackSource()Lnet/minecraft/server/packs/VanillaPackResources; +public net.minecraft.server.packs.resources.FallbackResourceManager fallbacks +protected net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener (Lcom/mojang/serialization/DynamicOps;Lcom/mojang/serialization/Codec;Lnet/minecraft/resources/FileToIdConverter;)V +public net.minecraft.util.datafix.fixes.StructuresBecomeConfiguredFix$Conversion +public net.minecraft.util.thread.BlockableEventLoop submitAsync(Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture; +#group public net.minecraft.world.damagesource.DamageSource *() #All methods public, most are already +public net.minecraft.world.damagesource.DamageSource (Lnet/minecraft/core/Holder;Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/phys/Vec3;)V +#endgroup +protected net.minecraft.world.entity.Entity ENTITY_COUNTER +public net.minecraft.world.entity.Entity LOGGER +public net.minecraft.world.entity.Entity getEncodeId()Ljava/lang/String; +public net.minecraft.world.entity.Mob goalSelector +public net.minecraft.world.entity.Mob targetSelector +public net.minecraft.world.entity.ai.memory.MemoryModuleType (Ljava/util/Optional;)V +public net.minecraft.world.entity.ai.sensing.SensorType (Ljava/util/function/Supplier;)V +protected net.minecraft.world.entity.item.PrimedTnt explode()V +protected net.minecraft.world.entity.monster.skeleton.AbstractSkeleton getStepSound()Lnet/minecraft/sounds/SoundEvent; +protected net.minecraft.world.entity.monster.skeleton.Parched getStepSound()Lnet/minecraft/sounds/SoundEvent; +protected net.minecraft.world.entity.monster.skeleton.Skeleton getStepSound()Lnet/minecraft/sounds/SoundEvent; +protected net.minecraft.world.entity.monster.skeleton.Stray getStepSound()Lnet/minecraft/sounds/SoundEvent; +protected net.minecraft.world.entity.monster.skeleton.WitherSkeleton getStepSound()Lnet/minecraft/sounds/SoundEvent; +protected net.minecraft.world.entity.monster.zombie.Zombie conversionTime +public net.minecraft.world.entity.player.Player closeContainer()V +protected net.minecraft.world.entity.projectile.Projectile (Lnet/minecraft/world/entity/EntityType;Lnet/minecraft/world/level/Level;)V +public net.minecraft.world.entity.raid.Raid$RaiderType +private-f net.minecraft.world.entity.raid.Raid$RaiderType VALUES +public net.minecraft.world.entity.schedule.Activity (Ljava/lang/String;)V +public net.minecraft.world.inventory.AnvilMenu repairItemCountCost public net.minecraft.world.inventory.BrewingStandMenu$PotionSlot -public net.minecraft.world.inventory.MenuType (Lnet/minecraft/world/inventory/MenuType$MenuSupplier;Lnet/minecraft/world/flag/FeatureFlagSet;)V # constructor +public net.minecraft.world.inventory.MenuType (Lnet/minecraft/world/inventory/MenuType$MenuSupplier;Lnet/minecraft/world/flag/FeatureFlagSet;)V public net.minecraft.world.inventory.MenuType$MenuSupplier public net.minecraft.world.item.CreativeModeTab$Output public net.minecraft.world.item.CreativeModeTab$TabVisibility -public net.minecraft.world.item.CreativeModeTabs f_256725_ # COLORED_BLOCKS -public net.minecraft.world.item.CreativeModeTabs f_256731_ # SPAWN_EGGS -public net.minecraft.world.item.CreativeModeTabs f_256750_ # SEARCH -public net.minecraft.world.item.CreativeModeTabs f_256776_ # NATURAL_BLOCKS -public net.minecraft.world.item.CreativeModeTabs f_256788_ # BUILDING_BLOCKS -public net.minecraft.world.item.CreativeModeTabs f_256791_ # FUNCTIONAL_BLOCKS -public net.minecraft.world.item.CreativeModeTabs f_256797_ # COMBAT -public net.minecraft.world.item.CreativeModeTabs f_256837_ # OP_BLOCKS -public net.minecraft.world.item.CreativeModeTabs f_256839_ # FOOD_AND_DRINKS -public net.minecraft.world.item.CreativeModeTabs f_256869_ # TOOLS_AND_UTILITIES -public net.minecraft.world.item.CreativeModeTabs f_256917_ # HOTBAR -public net.minecraft.world.item.CreativeModeTabs f_256968_ # INGREDIENTS -public net.minecraft.world.item.CreativeModeTabs f_257028_ # REDSTONE_BLOCKS -public net.minecraft.world.item.CreativeModeTabs f_257039_ # INVENTORY +public net.minecraft.world.item.CreativeModeTabs BUILDING_BLOCKS +public net.minecraft.world.item.CreativeModeTabs COLORED_BLOCKS +public net.minecraft.world.item.CreativeModeTabs COMBAT +public net.minecraft.world.item.CreativeModeTabs FOOD_AND_DRINKS +public net.minecraft.world.item.CreativeModeTabs FUNCTIONAL_BLOCKS +public net.minecraft.world.item.CreativeModeTabs HOTBAR +public net.minecraft.world.item.CreativeModeTabs INGREDIENTS +public net.minecraft.world.item.CreativeModeTabs INVENTORY +public net.minecraft.world.item.CreativeModeTabs NATURAL_BLOCKS +public net.minecraft.world.item.CreativeModeTabs OP_BLOCKS +public net.minecraft.world.item.CreativeModeTabs REDSTONE_BLOCKS +public net.minecraft.world.item.CreativeModeTabs SEARCH +public net.minecraft.world.item.CreativeModeTabs SPAWN_EGGS +public net.minecraft.world.item.CreativeModeTabs TOOLS_AND_UTILITIES #group public net.minecraft.world.item.Item #endgroup -private-f net.minecraft.world.item.ItemDisplayContext f_268735_ # id -public net.minecraft.world.item.ItemStackLinkedSet f_260558_ # TYPE_AND_TAG +private-f net.minecraft.world.item.ItemDisplayContext id +public net.minecraft.world.item.ItemStackLinkedSet TYPE_AND_TAG public net.minecraft.world.item.alchemy.PotionBrewing$Mix -public net.minecraft.world.item.alchemy.PotionBrewing$Mix f_43533_ # ingredient -public net.minecraft.world.item.context.BlockPlaceContext (Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/phys/BlockHitResult;)V # constructor -public net.minecraft.world.item.context.UseOnContext (Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/phys/BlockHitResult;)V # constructor +public net.minecraft.world.item.alchemy.PotionBrewing$Mix ingredient +public net.minecraft.world.item.context.BlockPlaceContext (Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/phys/BlockHitResult;)V +public net.minecraft.world.item.context.UseOnContext (Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/phys/BlockHitResult;)V public-f net.minecraft.world.item.crafting.Ingredient -protected net.minecraft.world.item.crafting.Ingredient (Lnet/minecraft/core/HolderSet;)V # constructor -public net.minecraft.world.level.Level f_46437_ # oRainLevel -public net.minecraft.world.level.Level f_46438_ # rainLevel -public net.minecraft.world.level.Level f_46439_ # oThunderLevel -public net.minecraft.world.level.Level f_46440_ # thunderLevel +protected net.minecraft.world.item.crafting.Ingredient (Lnet/minecraft/core/HolderSet;)V +public net.minecraft.world.level.Level oRainLevel +public net.minecraft.world.level.Level oThunderLevel +public net.minecraft.world.level.Level rainLevel +public net.minecraft.world.level.Level thunderLevel public net.minecraft.world.level.biome.Biome$ClimateSettings -protected net.minecraft.world.level.biome.BiomeGenerationSettings$PlainBuilder f_254648_ # features -protected net.minecraft.world.level.biome.BiomeGenerationSettings$PlainBuilder f_254678_ # carvers -protected net.minecraft.world.level.biome.BiomeGenerationSettings$PlainBuilder m_255276_(I)V # addFeatureStepsUpTo +protected net.minecraft.world.level.biome.BiomeGenerationSettings$PlainBuilder addFeatureStepsUpTo(I)V +protected net.minecraft.world.level.biome.BiomeGenerationSettings$PlainBuilder carvers +protected net.minecraft.world.level.biome.BiomeGenerationSettings$PlainBuilder features #group protected net.minecraft.world.level.biome.BiomeSpecialEffects$Builder * -protected net.minecraft.world.level.biome.BiomeSpecialEffects$Builder f_380225_ # dryFoliageColorOverride -protected net.minecraft.world.level.biome.BiomeSpecialEffects$Builder f_48006_ # waterColor -protected net.minecraft.world.level.biome.BiomeSpecialEffects$Builder f_48009_ # foliageColorOverride -protected net.minecraft.world.level.biome.BiomeSpecialEffects$Builder f_48010_ # grassColorOverride -protected net.minecraft.world.level.biome.BiomeSpecialEffects$Builder f_48011_ # grassColorModifier +protected net.minecraft.world.level.biome.BiomeSpecialEffects$Builder dryFoliageColorOverride +protected net.minecraft.world.level.biome.BiomeSpecialEffects$Builder foliageColorOverride +protected net.minecraft.world.level.biome.BiomeSpecialEffects$Builder grassColorModifier +protected net.minecraft.world.level.biome.BiomeSpecialEffects$Builder grassColorOverride +protected net.minecraft.world.level.biome.BiomeSpecialEffects$Builder waterColor #endgroup -protected net.minecraft.world.level.biome.MobSpawnSettings$Builder f_48362_ # spawners -protected net.minecraft.world.level.biome.MobSpawnSettings$Builder f_48363_ # mobSpawnCosts -protected net.minecraft.world.level.biome.MobSpawnSettings$Builder f_48364_ # creatureGenerationProbability +protected net.minecraft.world.level.biome.MobSpawnSettings$Builder creatureGenerationProbability +protected net.minecraft.world.level.biome.MobSpawnSettings$Builder mobSpawnCosts +protected net.minecraft.world.level.biome.MobSpawnSettings$Builder spawners #group public net.minecraft.world.level.block.Block -public net.minecraft.world.level.block.AttachedStemBlock (Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.AzaleaBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.BarrierBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.BaseCoralFanBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.BaseCoralPlantBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.BaseCoralWallFanBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.BigDripleafBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.BigDripleafStemBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.BlastFurnaceBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.BushBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.ButtonBlock (Lnet/minecraft/world/level/block/state/properties/BlockSetType;ILnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.CactusBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.CakeBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.CandleCakeBlock (Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.CartographyTableBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.CarvedPumpkinBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.ChestBlock (Ljava/util/function/Supplier;Lnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundEvent;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.ChorusFlowerBlock (Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.ChorusPlantBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.CoralFanBlock (Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.CoralPlantBlock (Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.CoralWallFanBlock (Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.CraftingTableBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.CreakingHeartBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.CropBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.DecoratedPotBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.DirtPathBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.DispenserBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.DoorBlock (Lnet/minecraft/world/level/block/state/properties/BlockSetType;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.DryVegetationBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.EnchantingTableBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.EndGatewayBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.EndPortalBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.EndRodBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.EnderChestBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.FarmBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.FlowerBedBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.FungusBlock (Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.FurnaceBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.GrindstoneBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.HalfTransparentBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.HangingRootsBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.IronBarsBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.JigsawBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.JukeboxBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.KelpBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.KelpPlantBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.LadderBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.LecternBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.LeverBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.LiquidBlock (Lnet/minecraft/world/level/material/FlowingFluid;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.LoomBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.MangroveRootsBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.NetherWartBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.NyliumBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.PlayerHeadBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.PlayerWallHeadBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.PoweredRailBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.PressurePlateBlock (Lnet/minecraft/world/level/block/state/properties/BlockSetType;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.PumpkinBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.RailBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.RedstoneTorchBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.RedstoneWallTorchBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.RepeaterBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.RootsBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.SaplingBlock (Lnet/minecraft/world/level/block/grower/TreeGrower;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.ScaffoldingBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.SeaPickleBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.SeagrassBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.ShortDryGrassBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.SkullBlock (Lnet/minecraft/world/level/block/SkullBlock$Type;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.SmithingTableBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.SmokerBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.SnowLayerBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.SnowyDirtBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.SpawnerBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.SpongeBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.StairBlock (Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.StemBlock (Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.StructureBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.StructureVoidBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.SugarCaneBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.TallDryGrassBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.TallGrassBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.TorchBlock (Lnet/minecraft/core/particles/SimpleParticleType;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.TransparentBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.TrapDoorBlock (Lnet/minecraft/world/level/block/state/properties/BlockSetType;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.WallSkullBlock (Lnet/minecraft/world/level/block/SkullBlock$Type;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.WallTorchBlock (Lnet/minecraft/core/particles/SimpleParticleType;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.WaterlilyBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.WaterloggedTransparentBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.WeatheringCopperBarsBlock (Lnet/minecraft/world/level/block/WeatheringCopper$WeatherState;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.WeatheringCopperChainBlock (Lnet/minecraft/world/level/block/WeatheringCopper$WeatherState;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.WeatheringCopperDoorBlock (Lnet/minecraft/world/level/block/state/properties/BlockSetType;Lnet/minecraft/world/level/block/WeatheringCopper$WeatherState;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.WeatheringCopperGrateBlock (Lnet/minecraft/world/level/block/WeatheringCopper$WeatherState;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.WeatheringCopperTrapDoorBlock (Lnet/minecraft/world/level/block/state/properties/BlockSetType;Lnet/minecraft/world/level/block/WeatheringCopper$WeatherState;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.WeatheringLanternBlock (Lnet/minecraft/world/level/block/WeatheringCopper$WeatherState;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.WeatheringLightningRodBlock (Lnet/minecraft/world/level/block/WeatheringCopper$WeatherState;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.WeightedPressurePlateBlock (ILnet/minecraft/world/level/block/state/properties/BlockSetType;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.WetSpongeBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.WitherSkullBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.WitherWallSkullBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor -public net.minecraft.world.level.block.WoolCarpetBlock (Lnet/minecraft/world/item/DyeColor;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V # constructor +public net.minecraft.world.level.block.AttachedStemBlock (Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/tags/TagKey;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.AzaleaBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.BarrierBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.BaseCoralFanBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.BaseCoralPlantBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.BaseCoralWallFanBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.BigDripleafBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.BigDripleafStemBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.BlastFurnaceBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.BushBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.ButtonBlock (Lnet/minecraft/world/level/block/state/properties/BlockSetType;ILnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.CactusBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.CakeBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.CandleCakeBlock (Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.CartographyTableBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.CarvedPumpkinBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.ChestBlock (Ljava/util/function/Supplier;Lnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundEvent;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.ChorusFlowerBlock (Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.ChorusPlantBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.CoralFanBlock (Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.CoralPlantBlock (Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.CoralWallFanBlock (Lnet/minecraft/world/level/block/Block;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.CraftingTableBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.CreakingHeartBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.CropBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.DecoratedPotBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.DirtPathBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.DispenserBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.DoorBlock (Lnet/minecraft/world/level/block/state/properties/BlockSetType;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.DryVegetationBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.EnchantingTableBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.EndGatewayBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.EndPortalBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.EndRodBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.EnderChestBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.FarmlandBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.FlowerBedBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.FurnaceBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.GrindstoneBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.HalfTransparentBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.HangingRootsBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.IronBarsBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.JigsawBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.JukeboxBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.KelpBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.KelpPlantBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.LadderBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.LecternBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.LeverBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.LilyPadBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.LiquidBlock (Lnet/minecraft/world/level/material/FlowingFluid;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.LoomBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.MangroveRootsBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.NetherFungusBlock (Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/world/level/block/Block;Lnet/minecraft/tags/TagKey;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.NetherRootsBlock (Lnet/minecraft/tags/TagKey;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.NetherWartBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.NyliumBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.PlayerHeadBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.PlayerWallHeadBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.PoweredRailBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.PressurePlateBlock (Lnet/minecraft/world/level/block/state/properties/BlockSetType;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.PumpkinBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.RailBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.RedstoneTorchBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.RedstoneWallTorchBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.RepeaterBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.SaplingBlock (Lnet/minecraft/world/level/block/grower/TreeGrower;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.ScaffoldingBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.SeaPickleBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.SeagrassBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.ShortDryGrassBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.SkullBlock (Lnet/minecraft/world/level/block/SkullBlock$Type;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.SmithingTableBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.SmokerBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.SnowLayerBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.SnowyBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.SpawnerBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.SpongeBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.StairBlock (Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.StemBlock (Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/tags/TagKey;Lnet/minecraft/tags/TagKey;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.StructureBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.StructureVoidBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.SugarCaneBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.TallDryGrassBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.TallGrassBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.TorchBlock (Lnet/minecraft/core/particles/SimpleParticleType;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.TransparentBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.TrapDoorBlock (Lnet/minecraft/world/level/block/state/properties/BlockSetType;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.WallSkullBlock (Lnet/minecraft/world/level/block/SkullBlock$Type;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.WallTorchBlock (Lnet/minecraft/core/particles/SimpleParticleType;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.WaterloggedTransparentBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.WeatheringCopperBarsBlock (Lnet/minecraft/world/level/block/WeatheringCopper$WeatherState;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.WeatheringCopperChainBlock (Lnet/minecraft/world/level/block/WeatheringCopper$WeatherState;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.WeatheringCopperDoorBlock (Lnet/minecraft/world/level/block/state/properties/BlockSetType;Lnet/minecraft/world/level/block/WeatheringCopper$WeatherState;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.WeatheringCopperGrateBlock (Lnet/minecraft/world/level/block/WeatheringCopper$WeatherState;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.WeatheringCopperTrapDoorBlock (Lnet/minecraft/world/level/block/state/properties/BlockSetType;Lnet/minecraft/world/level/block/WeatheringCopper$WeatherState;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.WeatheringLanternBlock (Lnet/minecraft/world/level/block/WeatheringCopper$WeatherState;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.WeatheringLightningRodBlock (Lnet/minecraft/world/level/block/WeatheringCopper$WeatherState;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.WeightedPressurePlateBlock (ILnet/minecraft/world/level/block/state/properties/BlockSetType;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.WetSpongeBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.WitherSkullBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.WitherWallSkullBlock (Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V +public net.minecraft.world.level.block.WoolCarpetBlock (Lnet/minecraft/world/item/DyeColor;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V #endgroup -public net.minecraft.world.level.block.Block m_49805_(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;I)V # popExperience -public net.minecraft.world.level.block.FireBlock m_221164_(Lnet/minecraft/world/level/block/state/BlockState;)I # getBurnOdds -public net.minecraft.world.level.block.FireBlock m_221166_(Lnet/minecraft/world/level/block/state/BlockState;)I # getIgniteOdds -public net.minecraft.world.level.block.entity.BlockEntityType (Lnet/minecraft/world/level/block/entity/BlockEntityType$BlockEntitySupplier;Ljava/util/Set;)V # constructor +public net.minecraft.world.level.block.Block popExperience(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;I)V +public net.minecraft.world.level.block.FireBlock getBurnOdds(Lnet/minecraft/world/level/block/state/BlockState;)I +public net.minecraft.world.level.block.FireBlock getIgniteOdds(Lnet/minecraft/world/level/block/state/BlockState;)I +public net.minecraft.world.level.block.entity.BlockEntityType (Lnet/minecraft/world/level/block/entity/BlockEntityType$BlockEntitySupplier;Ljava/util/Set;)V public net.minecraft.world.level.block.entity.BlockEntityType$BlockEntitySupplier -public net.minecraft.world.level.block.entity.HopperBlockEntity m_59395_(I)V # setCooldown -public net.minecraft.world.level.block.entity.HopperBlockEntity m_59409_()Z # isOnCustomCooldown -public net.minecraft.world.level.block.state.properties.BlockSetType m_272115_(Lnet/minecraft/world/level/block/state/properties/BlockSetType;)Lnet/minecraft/world/level/block/state/properties/BlockSetType; # register -public net.minecraft.world.level.block.state.properties.WoodType m_61844_(Lnet/minecraft/world/level/block/state/properties/WoodType;)Lnet/minecraft/world/level/block/state/properties/WoodType; # register -public net.minecraft.world.level.chunk.status.ChunkStatus (Lnet/minecraft/world/level/chunk/status/ChunkStatus;Ljava/util/EnumSet;Lnet/minecraft/world/level/chunk/status/ChunkType;)V # constructor -public net.minecraft.world.level.gamerules.GameRules m_439121_(Ljava/lang/String;Lnet/minecraft/world/level/gamerules/GameRuleCategory;III)Lnet/minecraft/world/level/gamerules/GameRule; # registerInteger -public net.minecraft.world.level.gamerules.GameRules m_441993_(Ljava/lang/String;Lnet/minecraft/world/level/gamerules/GameRuleCategory;IIILnet/minecraft/world/flag/FeatureFlagSet;)Lnet/minecraft/world/level/gamerules/GameRule; # registerInteger -public net.minecraft.world.level.gamerules.GameRules m_442919_(Ljava/lang/String;Lnet/minecraft/world/level/gamerules/GameRuleCategory;II)Lnet/minecraft/world/level/gamerules/GameRule; # registerInteger -public net.minecraft.world.level.gamerules.GameRules m_446320_(Ljava/lang/String;Lnet/minecraft/world/level/gamerules/GameRuleCategory;Z)Lnet/minecraft/world/level/gamerules/GameRule; # registerBoolean -public net.minecraft.world.level.gamerules.GameRules m_447562_(Ljava/lang/String;Lnet/minecraft/world/level/gamerules/GameRuleCategory;Lnet/minecraft/world/level/gamerules/GameRuleType;Lcom/mojang/brigadier/arguments/ArgumentType;Lcom/mojang/serialization/Codec;Ljava/lang/Object;Lnet/minecraft/world/flag/FeatureFlagSet;Lnet/minecraft/world/level/gamerules/GameRules$VisitorCaller;Ljava/util/function/ToIntFunction;)Lnet/minecraft/world/level/gamerules/GameRule; # register -protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer f_157994_ # barrierNoise -protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer f_157996_ # lavaNoise -protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer f_157998_ # aquiferCache -protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer f_157999_ # aquiferLocationCache -protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer f_158000_ # shouldScheduleFluidUpdate -protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer f_158002_ # minGridX -protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer f_158003_ # minGridY -protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer f_158004_ # minGridZ -protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer f_158005_ # gridSizeX -protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer f_158006_ # gridSizeZ -protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer m_158024_(II)D # similarity -protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer m_158027_(III)I # getIndex -protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer m_158039_(I)I # gridX -protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer m_158045_(I)I # gridY -protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer m_158047_(I)I # gridZ -protected net.minecraft.world.level.levelgen.Beardifier m_223925_(IIII)D # getBeardContribution -private-f net.minecraft.world.level.levelgen.DebugLevelSource f_64114_ # ALL_BLOCKS -private-f net.minecraft.world.level.levelgen.DebugLevelSource f_64115_ # GRID_WIDTH -private-f net.minecraft.world.level.levelgen.DebugLevelSource f_64116_ # GRID_HEIGHT +public net.minecraft.world.level.block.entity.HopperBlockEntity isOnCustomCooldown()Z +public net.minecraft.world.level.block.entity.HopperBlockEntity setCooldown(I)V +public net.minecraft.world.level.block.state.properties.BlockSetType register(Lnet/minecraft/world/level/block/state/properties/BlockSetType;)Lnet/minecraft/world/level/block/state/properties/BlockSetType; +public net.minecraft.world.level.block.state.properties.WoodType register(Lnet/minecraft/world/level/block/state/properties/WoodType;)Lnet/minecraft/world/level/block/state/properties/WoodType; +public net.minecraft.world.level.chunk.status.ChunkStatus (Lnet/minecraft/world/level/chunk/status/ChunkStatus;Ljava/util/EnumSet;Lnet/minecraft/world/level/chunk/status/ChunkType;)V +public net.minecraft.world.level.gamerules.GameRules register(Ljava/lang/String;Lnet/minecraft/world/level/gamerules/GameRuleCategory;Lnet/minecraft/world/level/gamerules/GameRuleType;Lcom/mojang/brigadier/arguments/ArgumentType;Lcom/mojang/serialization/Codec;Ljava/lang/Object;Lnet/minecraft/world/flag/FeatureFlagSet;Lnet/minecraft/world/level/gamerules/GameRules$VisitorCaller;Ljava/util/function/ToIntFunction;)Lnet/minecraft/world/level/gamerules/GameRule; +public net.minecraft.world.level.gamerules.GameRules registerBoolean(Ljava/lang/String;Lnet/minecraft/world/level/gamerules/GameRuleCategory;Z)Lnet/minecraft/world/level/gamerules/GameRule; +public net.minecraft.world.level.gamerules.GameRules registerInteger(Ljava/lang/String;Lnet/minecraft/world/level/gamerules/GameRuleCategory;II)Lnet/minecraft/world/level/gamerules/GameRule; +public net.minecraft.world.level.gamerules.GameRules registerInteger(Ljava/lang/String;Lnet/minecraft/world/level/gamerules/GameRuleCategory;III)Lnet/minecraft/world/level/gamerules/GameRule; +public net.minecraft.world.level.gamerules.GameRules registerInteger(Ljava/lang/String;Lnet/minecraft/world/level/gamerules/GameRuleCategory;IIILnet/minecraft/world/flag/FeatureFlagSet;)Lnet/minecraft/world/level/gamerules/GameRule; +protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer aquiferCache +protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer aquiferLocationCache +protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer barrierNoise +protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer getIndex(III)I +protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer gridSizeX +protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer gridSizeZ +protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer gridX(I)I +protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer gridY(I)I +protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer gridZ(I)I +protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer lavaNoise +protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer minGridX +protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer minGridY +protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer minGridZ +protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer shouldScheduleFluidUpdate +protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer similarity(II)D +protected net.minecraft.world.level.levelgen.Beardifier getBeardContribution(IIII)D +private-f net.minecraft.world.level.levelgen.DebugLevelSource ALL_BLOCKS +private-f net.minecraft.world.level.levelgen.DebugLevelSource GRID_HEIGHT +private-f net.minecraft.world.level.levelgen.DebugLevelSource GRID_WIDTH public-f net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator -protected net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator m_224239_(Lnet/minecraft/world/level/LevelHeightAccessor;Lnet/minecraft/world/level/levelgen/RandomState;IILorg/apache/commons/lang3/mutable/MutableObject;Ljava/util/function/Predicate;)Ljava/util/OptionalInt; # iterateNoiseColumn +protected net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator iterateNoiseColumn(Lnet/minecraft/world/level/LevelHeightAccessor;Lnet/minecraft/world/level/levelgen/RandomState;IILorg/apache/commons/lang3/mutable/MutableObject;Ljava/util/function/Predicate;)Ljava/util/OptionalInt; #group public net.minecraft.world.level.levelgen.NoiseGeneratorSettings *() -public net.minecraft.world.level.levelgen.NoiseGeneratorSettings m_255038_(Lnet/minecraft/data/worldgen/BootstrapContext;)Lnet/minecraft/world/level/levelgen/NoiseGeneratorSettings; # caves -public net.minecraft.world.level.levelgen.NoiseGeneratorSettings m_255186_(Lnet/minecraft/data/worldgen/BootstrapContext;)Lnet/minecraft/world/level/levelgen/NoiseGeneratorSettings; # end -public net.minecraft.world.level.levelgen.NoiseGeneratorSettings m_255226_(Lnet/minecraft/data/worldgen/BootstrapContext;ZZ)Lnet/minecraft/world/level/levelgen/NoiseGeneratorSettings; # overworld -public net.minecraft.world.level.levelgen.NoiseGeneratorSettings m_255230_(Lnet/minecraft/data/worldgen/BootstrapContext;)Lnet/minecraft/world/level/levelgen/NoiseGeneratorSettings; # floatingIslands -public net.minecraft.world.level.levelgen.NoiseGeneratorSettings m_255410_(Lnet/minecraft/data/worldgen/BootstrapContext;)Lnet/minecraft/world/level/levelgen/NoiseGeneratorSettings; # nether -public net.minecraft.world.level.levelgen.NoiseGeneratorSettings m_64474_(Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; # lambda$static$0 +public net.minecraft.world.level.levelgen.NoiseGeneratorSettings caves(Lnet/minecraft/data/worldgen/BootstrapContext;)Lnet/minecraft/world/level/levelgen/NoiseGeneratorSettings; +public net.minecraft.world.level.levelgen.NoiseGeneratorSettings end(Lnet/minecraft/data/worldgen/BootstrapContext;)Lnet/minecraft/world/level/levelgen/NoiseGeneratorSettings; +public net.minecraft.world.level.levelgen.NoiseGeneratorSettings floatingIslands(Lnet/minecraft/data/worldgen/BootstrapContext;)Lnet/minecraft/world/level/levelgen/NoiseGeneratorSettings; +public net.minecraft.world.level.levelgen.NoiseGeneratorSettings nether(Lnet/minecraft/data/worldgen/BootstrapContext;)Lnet/minecraft/world/level/levelgen/NoiseGeneratorSettings; +public net.minecraft.world.level.levelgen.NoiseGeneratorSettings overworld(Lnet/minecraft/data/worldgen/BootstrapContext;ZZ)Lnet/minecraft/world/level/levelgen/NoiseGeneratorSettings; #endgroup -public net.minecraft.world.level.levelgen.feature.featuresize.FeatureSizeType (Lcom/mojang/serialization/MapCodec;)V # constructor -public net.minecraft.world.level.levelgen.feature.foliageplacers.FoliagePlacerType (Lcom/mojang/serialization/MapCodec;)V # constructor -public net.minecraft.world.level.levelgen.feature.rootplacers.RootPlacerType (Lcom/mojang/serialization/MapCodec;)V # constructor -public net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProviderType (Lcom/mojang/serialization/MapCodec;)V # constructor -public net.minecraft.world.level.levelgen.feature.treedecorators.TreeDecoratorType (Lcom/mojang/serialization/MapCodec;)V # constructor -public net.minecraft.world.level.levelgen.feature.trunkplacers.TrunkPlacerType (Lcom/mojang/serialization/MapCodec;)V # constructor -protected net.minecraft.world.level.portal.PortalForcer f_77648_ # level -public net.minecraft.world.level.storage.LevelResource (Ljava/lang/String;)V # constructor -private-f net.minecraft.world.level.storage.loot.LootPool f_79028_ # rolls -private-f net.minecraft.world.level.storage.loot.LootPool f_79029_ # bonusRolls -public net.minecraft.world.level.storage.loot.functions.LootItemConditionalFunction m_80683_(Ljava/util/function/Function;)Lnet/minecraft/world/level/storage/loot/functions/LootItemConditionalFunction$Builder; # simpleBuilder -public net.minecraft.world.level.storage.loot.functions.ModifyContainerContents (Ljava/util/List;Lnet/minecraft/world/level/storage/loot/ContainerComponentManipulator;Lnet/minecraft/world/level/storage/loot/functions/LootItemFunction;)V # constructor -public net.minecraft.world.level.storage.loot.functions.SetFireworksFunction (Ljava/util/List;Ljava/util/Optional;Ljava/util/Optional;)V # constructor -public net.minecraft.world.level.storage.loot.functions.SetItemFunction (Ljava/util/List;Lnet/minecraft/core/Holder;)V # constructor -public net.minecraft.world.level.storage.loot.functions.SetWritableBookPagesFunction (Ljava/util/List;Ljava/util/List;Lnet/minecraft/world/level/storage/loot/functions/ListOperation;)V # constructor -public net.minecraft.world.level.storage.loot.functions.SetWrittenBookPagesFunction (Ljava/util/List;Ljava/util/List;Lnet/minecraft/world/level/storage/loot/functions/ListOperation;)V # constructor -public net.minecraft.world.level.storage.loot.functions.ToggleTooltips (Ljava/util/List;Ljava/util/Map;)V # constructor \ No newline at end of file +public net.minecraft.world.level.levelgen.feature.featuresize.FeatureSizeType (Lcom/mojang/serialization/MapCodec;)V +public net.minecraft.world.level.levelgen.feature.foliageplacers.FoliagePlacerType (Lcom/mojang/serialization/MapCodec;)V +public net.minecraft.world.level.levelgen.feature.rootplacers.RootPlacerType (Lcom/mojang/serialization/MapCodec;)V +public net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProviderType (Lcom/mojang/serialization/MapCodec;)V +public net.minecraft.world.level.levelgen.feature.treedecorators.TreeDecoratorType (Lcom/mojang/serialization/MapCodec;)V +public net.minecraft.world.level.levelgen.feature.trunkplacers.TrunkPlacerType (Lcom/mojang/serialization/MapCodec;)V +protected net.minecraft.world.level.portal.PortalForcer level +public net.minecraft.world.level.storage.LevelResource (Ljava/lang/String;)V +private-f net.minecraft.world.level.storage.loot.LootPool bonusRolls +private-f net.minecraft.world.level.storage.loot.LootPool rolls +public net.minecraft.world.level.storage.loot.functions.LootItemConditionalFunction simpleBuilder(Ljava/util/function/Function;)Lnet/minecraft/world/level/storage/loot/functions/LootItemConditionalFunction$Builder; +public net.minecraft.world.level.storage.loot.functions.ModifyContainerContents (Ljava/util/List;Lnet/minecraft/world/level/storage/loot/ContainerComponentManipulator;Lnet/minecraft/world/level/storage/loot/functions/LootItemFunction;)V +public net.minecraft.world.level.storage.loot.functions.SetFireworksFunction (Ljava/util/List;Ljava/util/Optional;Ljava/util/Optional;)V +public net.minecraft.world.level.storage.loot.functions.SetItemFunction (Ljava/util/List;Lnet/minecraft/core/Holder;)V +public net.minecraft.world.level.storage.loot.functions.SetWritableBookPagesFunction (Ljava/util/List;Ljava/util/List;Lnet/minecraft/world/level/storage/loot/functions/ListOperation;)V +public net.minecraft.world.level.storage.loot.functions.SetWrittenBookPagesFunction (Ljava/util/List;Ljava/util/List;Lnet/minecraft/world/level/storage/loot/functions/ListOperation;)V +public net.minecraft.world.level.storage.loot.functions.ToggleTooltips (Ljava/util/List;Ljava/util/Map;)V \ No newline at end of file diff --git a/src/main/resources/forge.exc b/src/main/resources/forge.exc index fd1f4f25b4..e69de29bb2 100644 --- a/src/main/resources/forge.exc +++ b/src/main/resources/forge.exc @@ -1,65 +0,0 @@ -com/mojang/blaze3d/vertex/VertexConsumer.putBulkData(Lcom/mojang/blaze3d/vertex/PoseStack$Pose;Lnet/minecraft/client/renderer/block/model/BakedQuad;[FFFFF[IIZ)V=|p_85996_,p_85997_,p_85998_,p_85999_,p_86000_,p_86001_,alpha,p_86002_,p_86003_,p_86004_ -net/minecraft/client/Options.processOptionsForge(Lnet/minecraft/client/Options$FieldAccess;)V=|p_168428_ -net/minecraft/client/gui/Gui.renderSelectedItemName(Lnet/minecraft/client/gui/GuiGraphics;I)V=|p_283501_,yShift -net/minecraft/client/gui/screens/MenuScreens.getScreenFactory(Lnet/minecraft/world/inventory/MenuType;Lnet/minecraft/client/Minecraft;ILnet/minecraft/network/chat/Component;)Ljava/util/Optional;=|p_96202_,p_96203_,p_96204_,p_96205_ -net/minecraft/client/renderer/ScreenEffectRenderer.getOverlayBlock(Lnet/minecraft/world/entity/player/Player;)Lorg/apache/commons/lang3/tuple/Pair;=|p_110717_ -net/minecraft/client/renderer/ScreenEffectRenderer.renderFluid(Lnet/minecraft/client/Minecraft;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/resources/ResourceLocation;)V=|p_110726_,p_110727_,texture -net/minecraft/client/renderer/block/BlockModelShaper.getTexture(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;)Lnet/minecraft/client/renderer/texture/TextureAtlasSprite;=|p_110883_,level,pos -net/minecraft/client/renderer/block/BlockRenderDispatcher.renderBatched(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/BlockAndTintGetter;Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;ZLnet/minecraft/util/RandomSource;Lnet/minecraftforge/client/model/data/ModelData;Lnet/minecraft/client/renderer/RenderType;)V=|p_234356_,p_234357_,p_234358_,p_234359_,p_234360_,p_234361_,p_234362_,modelData,renderType -net/minecraft/client/renderer/block/BlockRenderDispatcher.renderBreakingTexture(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/BlockAndTintGetter;Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;Lnet/minecraftforge/client/model/data/ModelData;)V=|p_110919_,p_110920_,p_110921_,p_110922_,p_110923_,modelData -net/minecraft/client/renderer/block/BlockRenderDispatcher.renderSingleBlock(Lnet/minecraft/world/level/block/state/BlockState;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;IILnet/minecraftforge/client/model/data/ModelData;Lnet/minecraft/client/renderer/RenderType;)V=|p_110913_,p_110914_,p_110915_,p_110916_,p_110917_,modelData,renderType -net/minecraft/client/renderer/block/ModelBlockRenderer.renderModel(Lcom/mojang/blaze3d/vertex/PoseStack$Pose;Lcom/mojang/blaze3d/vertex/VertexConsumer;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/client/resources/model/BakedModel;FFFIILnet/minecraftforge/client/model/data/ModelData;Lnet/minecraft/client/renderer/RenderType;)V=|p_111068_,p_111069_,p_111070_,p_111071_,p_111072_,p_111073_,p_111074_,p_111075_,p_111076_,modelData,renderType -net/minecraft/client/renderer/block/ModelBlockRenderer.tesselateBlock(Lnet/minecraft/world/level/BlockAndTintGetter;Lnet/minecraft/client/resources/model/BakedModel;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;ZLnet/minecraft/util/RandomSource;JILnet/minecraftforge/client/model/data/ModelData;Lnet/minecraft/client/renderer/RenderType;)V=|p_234380_,p_234381_,p_234382_,p_234383_,p_234384_,p_234385_,p_234386_,p_234387_,p_234388_,p_234389_,modelData,renderType -net/minecraft/client/renderer/block/ModelBlockRenderer.tesselateWithAO(Lnet/minecraft/world/level/BlockAndTintGetter;Lnet/minecraft/client/resources/model/BakedModel;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;ZLnet/minecraft/util/RandomSource;JILnet/minecraftforge/client/model/data/ModelData;Lnet/minecraft/client/renderer/RenderType;)V=|p_111079_,p_111080_,p_111081_,p_111082_,p_111083_,p_111084_,p_111085_,p_111086_,p_111087_,p_111088_,modelData,renderType -net/minecraft/client/renderer/block/ModelBlockRenderer.tesselateWithoutAO(Lnet/minecraft/world/level/BlockAndTintGetter;Lnet/minecraft/client/resources/model/BakedModel;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;ZLnet/minecraft/util/RandomSource;JILnet/minecraftforge/client/model/data/ModelData;Lnet/minecraft/client/renderer/RenderType;)V=|p_111091_,p_111092_,p_111093_,p_111094_,p_111095_,p_111096_,p_111097_,p_111098_,p_111099_,p_111100_,modelData,renderType -net/minecraft/client/renderer/block/model/BlockElementFace.(Lnet/minecraft/core/Direction;ILjava/lang/String;Lnet/minecraft/client/renderer/block/model/BlockFaceUV;Lnet/minecraftforge/client/model/ForgeFaceData;)V=|p_111359_,p_111360_,p_111361_,p_111362_,faceData -net/minecraft/client/renderer/block/model/ItemTransform.(Lorg/joml/Vector3f;Lorg/joml/Vector3f;Lorg/joml/Vector3f;Lorg/joml/Vector3f;)V=|p_254427_,p_254496_,p_254022_,rightRotation -net/minecraft/client/renderer/block/model/ItemTransforms.(Lnet/minecraft/client/renderer/block/model/ItemTransform;Lnet/minecraft/client/renderer/block/model/ItemTransform;Lnet/minecraft/client/renderer/block/model/ItemTransform;Lnet/minecraft/client/renderer/block/model/ItemTransform;Lnet/minecraft/client/renderer/block/model/ItemTransform;Lnet/minecraft/client/renderer/block/model/ItemTransform;Lnet/minecraft/client/renderer/block/model/ItemTransform;Lnet/minecraft/client/renderer/block/model/ItemTransform;Lcom/google/common/collect/ImmutableMap;)V=|p_111798_,p_111799_,p_111800_,p_111801_,p_111802_,p_111803_,p_111804_,p_111805_,moddedTransforms -net/minecraft/client/resources/model/MultiPartBakedModel.getQuads(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/Direction;Lnet/minecraft/util/RandomSource;Lnet/minecraftforge/client/model/data/ModelData;Lnet/minecraft/client/renderer/RenderType;)Ljava/util/List;=|p_235050_,p_235051_,p_235052_,modelData,renderType -net/minecraft/client/resources/model/WeightedBakedModel.getQuads(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/Direction;Lnet/minecraft/util/RandomSource;Lnet/minecraftforge/client/model/data/ModelData;Lnet/minecraft/client/renderer/RenderType;)Ljava/util/List;=|p_235058_,p_235059_,p_235060_,modelData,renderType -net/minecraft/data/registries/RegistriesDatapackGenerator.(Lnet/minecraft/data/PackOutput;Ljava/util/concurrent/CompletableFuture;Ljava/util/Set;)V=|p_256643_,p_255780_,modIds -net/minecraft/data/tags/BannerPatternTagsProvider.(Lnet/minecraft/data/PackOutput;Ljava/util/concurrent/CompletableFuture;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_256451_,p_256420_,modId,existingFileHelper -net/minecraft/data/tags/BiomeTagsProvider.(Lnet/minecraft/data/PackOutput;Ljava/util/concurrent/CompletableFuture;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_255800_,p_256205_,modId,existingFileHelper -net/minecraft/data/tags/CatVariantTagsProvider.(Lnet/minecraft/data/PackOutput;Ljava/util/concurrent/CompletableFuture;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_256547_,p_256090_,modId,existingFileHelper -net/minecraft/data/tags/DamageTypeTagsProvider.(Lnet/minecraft/data/PackOutput;Ljava/util/concurrent/CompletableFuture;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_270719_,p_270256_,modId,existingFileHelper -net/minecraft/data/tags/EntityTypeTagsProvider.(Lnet/minecraft/data/PackOutput;Ljava/util/concurrent/CompletableFuture;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_256095_,p_256572_,modId,existingFileHelper -net/minecraft/data/tags/FlatLevelGeneratorPresetTagsProvider.(Lnet/minecraft/data/PackOutput;Ljava/util/concurrent/CompletableFuture;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_256604_,p_255962_,modId,existingFileHelper -net/minecraft/data/tags/FluidTagsProvider.(Lnet/minecraft/data/PackOutput;Ljava/util/concurrent/CompletableFuture;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_255941_,p_256600_,modId,existingFileHelper -net/minecraft/data/tags/GameEventTagsProvider.(Lnet/minecraft/data/PackOutput;Ljava/util/concurrent/CompletableFuture;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_256060_,p_255621_,modId,existingFileHelper -net/minecraft/data/tags/InstrumentTagsProvider.(Lnet/minecraft/data/PackOutput;Ljava/util/concurrent/CompletableFuture;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_256418_,p_256038_,modId,existingFileHelper -net/minecraft/data/tags/IntrinsicHolderTagsProvider$IntrinsicTagAppender.(Lnet/minecraft/tags/TagBuilder;Ljava/util/function/Function;Ljava/lang/String;)V=|p_256108_,p_256433_,modId -net/minecraft/data/tags/IntrinsicHolderTagsProvider.(Lnet/minecraft/data/PackOutput;Lnet/minecraft/resources/ResourceKey;Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;Ljava/util/function/Function;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_275304_,p_275709_,p_275227_,p_275311_,p_275566_,modId,existingFileHelper -net/minecraft/data/tags/IntrinsicHolderTagsProvider.(Lnet/minecraft/data/PackOutput;Lnet/minecraft/resources/ResourceKey;Ljava/util/concurrent/CompletableFuture;Ljava/util/function/Function;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_256164_,p_256155_,p_256488_,p_256168_,modId,existingFileHelper -net/minecraft/data/tags/ItemTagsProvider.(Lnet/minecraft/data/PackOutput;Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_275343_,p_275729_,p_275322_,modId,existingFileHelper -net/minecraft/data/tags/ItemTagsProvider.(Lnet/minecraft/data/PackOutput;Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_275204_,p_275194_,p_275207_,p_275634_,modId,existingFileHelper -net/minecraft/data/tags/PaintingVariantTagsProvider.(Lnet/minecraft/data/PackOutput;Ljava/util/concurrent/CompletableFuture;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_255750_,p_256184_,modId,existingFileHelper -net/minecraft/data/tags/PoiTypeTagsProvider.(Lnet/minecraft/data/PackOutput;Ljava/util/concurrent/CompletableFuture;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_256012_,p_256617_,modId,existingFileHelper -net/minecraft/data/tags/StructureTagsProvider.(Lnet/minecraft/data/PackOutput;Ljava/util/concurrent/CompletableFuture;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_256522_,p_256661_,modId,existingFileHelper -net/minecraft/data/tags/TagsProvider$TagAppender.(Lnet/minecraft/tags/TagBuilder;Ljava/lang/String;)V=|p_236454_,modId -net/minecraft/data/tags/TagsProvider.(Lnet/minecraft/data/PackOutput;Lnet/minecraft/resources/ResourceKey;Ljava/util/concurrent/CompletableFuture;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_256596_,p_255886_,p_256513_,modId,existingFileHelper -net/minecraft/data/tags/TagsProvider.(Lnet/minecraft/data/PackOutput;Lnet/minecraft/resources/ResourceKey;Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_275432_,p_275476_,p_275222_,p_275565_,modId,existingFileHelper -net/minecraft/data/tags/WorldPresetTagsProvider.(Lnet/minecraft/data/PackOutput;Ljava/util/concurrent/CompletableFuture;Ljava/lang/String;Lnet/minecraftforge/common/data/ExistingFileHelper;)V=|p_255701_,p_255974_,modId,existingFileHelper -net/minecraft/gametest/framework/GameTestRegistry.register(Ljava/lang/reflect/Method;Ljava/util/Set;)V=|p_177504_,allowedNamespaces -net/minecraft/server/level/DistanceManager.addRegionTicket(Lnet/minecraft/server/level/TicketType;Lnet/minecraft/world/level/ChunkPos;ILjava/lang/Object;Z)V=|p_140841_,p_140842_,p_140843_,p_140844_,forceTicks -net/minecraft/server/level/DistanceManager.removeRegionTicket(Lnet/minecraft/server/level/TicketType;Lnet/minecraft/world/level/ChunkPos;ILjava/lang/Object;Z)V=|p_140850_,p_140851_,p_140852_,p_140853_,forceTicks -net/minecraft/server/level/ServerChunkCache.addRegionTicket(Lnet/minecraft/server/level/TicketType;Lnet/minecraft/world/level/ChunkPos;ILjava/lang/Object;Z)V=|p_8388_,p_8389_,p_8390_,p_8391_,forceTicks -net/minecraft/server/level/ServerChunkCache.removeRegionTicket(Lnet/minecraft/server/level/TicketType;Lnet/minecraft/world/level/ChunkPos;ILjava/lang/Object;Z)V=|p_8439_,p_8440_,p_8441_,p_8442_,forceTicks -net/minecraft/server/level/ServerPlayerGameMode.removeBlock(Lnet/minecraft/core/BlockPos;Z)Z=|p_180235_1_,canHarvest -net/minecraft/server/level/Ticket.(Lnet/minecraft/server/level/TicketType;ILjava/lang/Object;Z)V=|p_9425_,p_9426_,p_9427_,forceTicks -net/minecraft/world/entity/Entity.playCombinationStepSounds(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;Lnet/minecraft/core/BlockPos;)V=|p_277472_,p_277630_,primaryPos,secondaryPos -net/minecraft/world/item/BoneMealItem.applyBonemeal(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/entity/player/Player;)Z=|p_40628_,p_40629_,p_40630_,player -net/minecraft/world/item/BucketItem.emptyContents(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/phys/BlockHitResult;Lnet/minecraft/world/item/ItemStack;)Z=|p_150716_,p_150717_,p_150718_,p_150719_,container -net/minecraft/world/item/ItemStack.onItemUse(Lnet/minecraft/world/item/context/UseOnContext;Ljava/util/function/Function;)Lnet/minecraft/world/InteractionResult;=|p_41662_,callback -net/minecraft/world/item/ItemStack.onItemUseFirst(Lnet/minecraft/world/item/context/UseOnContext;)Lnet/minecraft/world/InteractionResult;=|p_41662_ -net/minecraft/world/level/Level.markAndNotifyBlock(Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/chunk/LevelChunk;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/block/state/BlockState;II)V=|p_46605_,levelchunk,blockstate,p_46606_,p_46607_,p_46608_ -net/minecraft/world/level/LevelSettings.(Ljava/lang/String;Lnet/minecraft/world/level/GameType;ZLnet/minecraft/world/Difficulty;ZLnet/minecraft/world/level/GameRules;Lnet/minecraft/world/level/WorldDataConfiguration;Lcom/mojang/serialization/Lifecycle;)V=|p_250485_,p_250207_,p_251631_,p_252122_,p_248961_,p_248536_,p_249797_,lifecycle -net/minecraft/world/level/block/Block.dropResources(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/BlockEntity;Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/item/ItemStack;Z)V=|p_49882_,p_49883_,p_49884_,p_49885_,p_49886_,p_49887_,dropXp -net/minecraft/world/level/block/ConcretePowderBlock.shouldSolidify(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/material/FluidState;)Z=|p_52081_,p_52082_,p_52083_,fluidState -net/minecraft/world/level/block/ConcretePowderBlock.touchesLiquid(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;)Z=|p_52065_,p_52066_,state -net/minecraft/world/level/block/FlowerPotBlock.(Ljava/util/function/Supplier;Ljava/util/function/Supplier;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V=|emptyPot,p_53528_,properties -net/minecraft/world/level/block/LiquidBlock.(Ljava/util/function/Supplier;Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;)V=|p_54694_,p_54695_ -net/minecraft/world/level/block/PoweredRailBlock.(Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;Z)V=|p_55218_,isPoweredRail -net/minecraft/world/level/chunk/ChunkAccess.findBlocks(Ljava/util/function/BiPredicate;Ljava/util/function/BiConsumer;)V=|p_285343_,p_285030_ -net/minecraft/world/level/chunk/ImposterProtoChunk.findBlocks(Ljava/util/function/BiPredicate;Ljava/util/function/BiConsumer;)V=|p_285343_,p_285030_ -net/minecraft/world/level/entity/PersistentEntitySectionManager.addEntityWithoutEvent(Lnet/minecraft/world/level/entity/EntityAccess;Z)Z=|p_157539_,p_157540_ -net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.processEntityInfos(Lnet/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate;Lnet/minecraft/world/level/LevelAccessor;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/levelgen/structure/templatesystem/StructurePlaceSettings;Ljava/util/List;)Ljava/util/List;=|template,p_215387_0_,p_215387_1_,p_215387_2_,p_215387_3_ \ No newline at end of file diff --git a/src/test/generated/chorus_block_placement/data/forge/tags/block/chorus_additionally_grows_on.json b/src/test/generated/chorus_block_placement/data/minecraft/tags/block/supports_chorus_plant.json similarity index 100% rename from src/test/generated/chorus_block_placement/data/forge/tags/block/chorus_additionally_grows_on.json rename to src/test/generated/chorus_block_placement/data/minecraft/tags/block/supports_chorus_plant.json diff --git a/src/test/generated/conditional_recipe/data/forge/tags/item/eggs.json b/src/test/generated/conditional_recipe/data/c/tags/item/eggs.json similarity index 100% rename from src/test/generated/conditional_recipe/data/forge/tags/item/eggs.json rename to src/test/generated/conditional_recipe/data/c/tags/item/eggs.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/cooking_false_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/cooking_false_conditions.json index b5c8b8b418..21ad90f7a1 100644 --- a/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/cooking_false_conditions.json +++ b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/cooking_false_conditions.json @@ -7,7 +7,7 @@ { "recipe": { "type": "minecraft:smelting", - "category": "blocks", + "category": "misc", "cookingtime": 200, "experience": 0.1, "ingredient": "minecraft:dirt", diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/cooking_true_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/cooking_true_conditions.json index fd1e0dcd93..e0bed48e3d 100644 --- a/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/cooking_true_conditions.json +++ b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/cooking_true_conditions.json @@ -7,7 +7,7 @@ { "recipe": { "type": "minecraft:smelting", - "category": "blocks", + "category": "misc", "cookingtime": 200, "experience": 0.1, "ingredient": "minecraft:bee_nest", diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/shapeless_false_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/shapeless_false_conditions.json index 2ef7076198..5cff1ede06 100644 --- a/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/shapeless_false_conditions.json +++ b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/shapeless_false_conditions.json @@ -14,7 +14,6 @@ "minecraft:redstone_ore" ], "result": { - "count": 1, "id": "minecraft:diamond_block" } } diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/shapeless_true_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/shapeless_true_conditions.json index a09798c3bf..6b9cfe24bb 100644 --- a/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/shapeless_true_conditions.json +++ b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/shapeless_true_conditions.json @@ -15,7 +15,6 @@ "minecraft:redstone_ore" ], "result": { - "count": 1, "id": "minecraft:diamond_block" } } diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/singe_item_true_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/singe_item_true_conditions.json index dfb56e5b21..0c88fa1f0c 100644 --- a/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/singe_item_true_conditions.json +++ b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/singe_item_true_conditions.json @@ -9,7 +9,6 @@ "type": "minecraft:stonecutting", "ingredient": "minecraft:redstone_ore", "result": { - "count": 1, "id": "minecraft:diamond_block" } } diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/single_item_false_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/single_item_false_conditions.json index 5024cb0967..25dbe81b78 100644 --- a/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/single_item_false_conditions.json +++ b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/single_item_false_conditions.json @@ -9,7 +9,6 @@ "type": "minecraft:stonecutting", "ingredient": "minecraft:dirt", "result": { - "count": 1, "id": "minecraft:diamond_block" } } diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/tag_empty_condition_doesnt_load.json b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/tag_empty_condition_doesnt_load.json index d71142b0b9..f1097b17ab 100644 --- a/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/tag_empty_condition_doesnt_load.json +++ b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/tag_empty_condition_doesnt_load.json @@ -15,7 +15,6 @@ "minecraft:iron_ore" ], "result": { - "count": 1, "id": "minecraft:diamond_block" } } diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/tag_empty_condition_loads.json b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/tag_empty_condition_loads.json index 0bab445e9f..a44c94be44 100644 --- a/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/tag_empty_condition_loads.json +++ b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/tag_empty_condition_loads.json @@ -15,7 +15,6 @@ "minecraft:gold_ore" ], "result": { - "count": 1, "id": "minecraft:diamond_block" } } diff --git a/src/test/generated/criterion_test/data/criterion_test/advancement/break_glass_with_fish.json b/src/test/generated/criterion_test/data/criterion_test/advancement/break_glass_with_fish.json index 7cdb0f8b10..967adbc59a 100644 --- a/src/test/generated/criterion_test/data/criterion_test/advancement/break_glass_with_fish.json +++ b/src/test/generated/criterion_test/data/criterion_test/advancement/break_glass_with_fish.json @@ -17,7 +17,6 @@ "display": { "description": "Fish wins!", "icon": { - "count": 1, "id": "minecraft:cod" }, "title": "Fish vs Glass" diff --git a/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/compound_ingredient.json b/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/compound_ingredient.json index 524d6ec129..2033323d40 100644 --- a/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/compound_ingredient.json +++ b/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/compound_ingredient.json @@ -7,27 +7,15 @@ "children": [ { "type": "forge:nbt", - "stack": { - "components": { - "minecraft:custom_data": { - "display_name": "{\"text\":\"Test Item\"}" - } - }, - "count": 1, - "id": "minecraft:dirt" - } + "items": "minecraft:dirt", + "nbt": "{display_name:'{\"text\":\"Test Item\"}'}", + "strict": true }, { "type": "forge:nbt", - "stack": { - "components": { - "minecraft:custom_data": { - "display_name": "{\"text\":\"Test Item\"}" - } - }, - "count": 1, - "id": "minecraft:oak_log" - } + "items": "minecraft:oak_log", + "nbt": "{display_name:'{\"text\":\"Test Item\"}'}", + "strict": true } ] } @@ -37,7 +25,6 @@ " X " ], "result": { - "count": 1, "id": "minecraft:dirt" } } \ No newline at end of file diff --git a/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/difference_ingredient.json b/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/difference_ingredient.json index f7d5568ece..e31647aef7 100644 --- a/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/difference_ingredient.json +++ b/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/difference_ingredient.json @@ -14,7 +14,6 @@ " X " ], "result": { - "count": 1, "id": "minecraft:dirt" } } \ No newline at end of file diff --git a/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/intersection_ingredient.json b/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/intersection_ingredient.json index 7729c0489f..1a9e18fe0c 100644 --- a/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/intersection_ingredient.json +++ b/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/intersection_ingredient.json @@ -16,7 +16,6 @@ " X " ], "result": { - "count": 1, "id": "minecraft:dirt" } } \ No newline at end of file diff --git a/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/partial_nbt_damage_only.json b/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/partial_nbt_damage_only.json index 509f47aec6..fcc8a2a829 100644 --- a/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/partial_nbt_damage_only.json +++ b/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/partial_nbt_damage_only.json @@ -3,13 +3,14 @@ "category": "misc", "key": { "X": { - "type": "forge:partial_nbt", + "type": "forge:nbt", "items": [ "minecraft:wooden_pickaxe", "minecraft:stone_pickaxe", "minecraft:iron_pickaxe" ], - "nbt": "{damage:3}" + "nbt": "{damage:3}", + "strict": false } }, "pattern": [ @@ -17,7 +18,6 @@ "XXX" ], "result": { - "count": 1, "id": "minecraft:dirt" } } \ No newline at end of file diff --git a/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/partial_nbt_name_only.json b/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/partial_nbt_name_only.json index 0953c62977..43438d9249 100644 --- a/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/partial_nbt_name_only.json +++ b/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/partial_nbt_name_only.json @@ -3,20 +3,20 @@ "category": "misc", "key": { "X": { - "type": "forge:partial_nbt", + "type": "forge:nbt", "items": [ "minecraft:wooden_pickaxe", "minecraft:stone_pickaxe", "minecraft:iron_pickaxe" ], - "nbt": "{display_name:'{\"text\":\"Test Item\"}'}" + "nbt": "{display_name:'{\"text\":\"Test Item\"}'}", + "strict": false } }, "pattern": [ "XXX" ], "result": { - "count": 1, "id": "minecraft:dirt" } } \ No newline at end of file diff --git a/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/strict_nbt_ingredient.json b/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/strict_nbt_ingredient.json index 70a54060f7..58c92c3e6e 100644 --- a/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/strict_nbt_ingredient.json +++ b/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/strict_nbt_ingredient.json @@ -4,22 +4,15 @@ "key": { "X": { "type": "forge:nbt", - "stack": { - "components": { - "minecraft:custom_data": { - "display_name": "{\"text\":\"Test Item\"}" - } - }, - "count": 1, - "id": "minecraft:diamond_pickaxe" - } + "items": "minecraft:diamond_pickaxe", + "nbt": "{display_name:'{\"text\":\"Test Item\"}'}", + "strict": true } }, "pattern": [ "XXX" ], "result": { - "count": 1, "id": "minecraft:dirt" } } \ No newline at end of file diff --git a/src/test/generated/mdk_datagen/pack.mcmeta b/src/test/generated/mdk_datagen/pack.mcmeta index a567fe20b0..2af8be3823 100644 --- a/src/test/generated/mdk_datagen/pack.mcmeta +++ b/src/test/generated/mdk_datagen/pack.mcmeta @@ -1,9 +1,9 @@ { "pack": { "description": "${mod_id} resources", - "max_format": 94, + "max_format": 101, "min_format": [ - 94, + 101, 1 ] } diff --git a/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/dry_vegitation.json b/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/dry_vegitation.json index 77da6e5424..d12c3253cb 100644 --- a/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/dry_vegitation.json +++ b/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/dry_vegitation.json @@ -3,5 +3,5 @@ "environment": "minecraft:default", "function": "forge:plant_type_placement/dry_vegitation", "max_ticks": 100, - "structure": "forge:empty31x3x3" + "structure": "forge:empty32x3x3" } \ No newline at end of file diff --git a/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/nether_fungus.json b/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/nether_fungus.json deleted file mode 100644 index 6fb405074e..0000000000 --- a/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/nether_fungus.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "minecraft:function", - "environment": "minecraft:default", - "function": "forge:plant_type_placement/nether_fungus", - "max_ticks": 100, - "structure": "forge:empty15x3x2" -} \ No newline at end of file diff --git a/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/nether_vegitation.json b/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/nether_vegitation.json deleted file mode 100644 index ceaf682111..0000000000 --- a/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/nether_vegitation.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "minecraft:function", - "environment": "minecraft:default", - "function": "forge:plant_type_placement/nether_vegitation", - "max_ticks": 100, - "structure": "forge:empty14x3x3" -} \ No newline at end of file diff --git a/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/withrose.json b/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/simple.json similarity index 51% rename from src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/withrose.json rename to src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/simple.json index b45a510c99..eaaa791261 100644 --- a/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/withrose.json +++ b/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/simple.json @@ -1,7 +1,7 @@ { "type": "minecraft:function", "environment": "minecraft:default", - "function": "forge:plant_type_placement/withrose", + "function": "forge:plant_type_placement/simple", "max_ticks": 100, - "structure": "forge:empty4x3x4" + "structure": "forge:empty16x3x8" } \ No newline at end of file diff --git a/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/netherwart.json b/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/vegetation.json similarity index 50% rename from src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/netherwart.json rename to src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/vegetation.json index ffe17ef076..6092eb1805 100644 --- a/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/netherwart.json +++ b/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/vegetation.json @@ -1,7 +1,7 @@ { "type": "minecraft:function", "environment": "minecraft:default", - "function": "forge:plant_type_placement/netherwart", + "function": "forge:plant_type_placement/vegetation", "max_ticks": 100, - "structure": "forge:empty3x3x3" + "structure": "forge:empty11x3x33" } \ No newline at end of file diff --git a/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/vegitation.json b/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/vegitation.json deleted file mode 100644 index 064822d49f..0000000000 --- a/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/vegitation.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "minecraft:function", - "environment": "minecraft:default", - "function": "forge:plant_type_placement/vegitation", - "max_ticks": 100, - "structure": "forge:empty11x3x30" -} \ No newline at end of file diff --git a/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/vegitation_and_clay.json b/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/vegitation_and_clay.json deleted file mode 100644 index 971f5a3bed..0000000000 --- a/src/test/generated/plant_type_placement/data/forge/test_instance/plant_type_placement/vegitation_and_clay.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "minecraft:function", - "environment": "minecraft:default", - "function": "forge:plant_type_placement/vegitation_and_clay", - "max_ticks": 100, - "structure": "forge:empty12x3x3" -} \ No newline at end of file diff --git a/src/test/generated/tags_test/data/forge/test_instance/tags_test/cobble_in_legacy.json b/src/test/generated/tags_test/data/forge/test_instance/tags_test/cobble_in_common.json similarity index 71% rename from src/test/generated/tags_test/data/forge/test_instance/tags_test/cobble_in_legacy.json rename to src/test/generated/tags_test/data/forge/test_instance/tags_test/cobble_in_common.json index 3014996381..0e9b8de485 100644 --- a/src/test/generated/tags_test/data/forge/test_instance/tags_test/cobble_in_legacy.json +++ b/src/test/generated/tags_test/data/forge/test_instance/tags_test/cobble_in_common.json @@ -1,7 +1,7 @@ { "type": "minecraft:function", "environment": "minecraft:default", - "function": "forge:tags_test/cobble_in_legacy", + "function": "forge:tags_test/cobble_in_common", "max_ticks": 100, "structure": "forge:empty3x3x3" } \ No newline at end of file diff --git a/src/test/generated/test_helper_mod/pack.mcmeta b/src/test/generated/test_helper_mod/pack.mcmeta index d575010cae..d8608adf1e 100644 --- a/src/test/generated/test_helper_mod/pack.mcmeta +++ b/src/test/generated/test_helper_mod/pack.mcmeta @@ -1,9 +1,9 @@ { "pack": { "description": "Forge tests resource pack", - "max_format": 94, + "max_format": 101, "min_format": [ - 94, + 101, 1 ] } diff --git a/src/test/generated/villager_type_test/data/forge/test_instance/villager_type_test/emeralds_for_villager_type.json b/src/test/generated/villager_type_test/data/forge/test_instance/villager_type_test/emeralds_for_villager_type.json deleted file mode 100644 index 0a2a7af615..0000000000 --- a/src/test/generated/villager_type_test/data/forge/test_instance/villager_type_test/emeralds_for_villager_type.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "minecraft:function", - "environment": "minecraft:default", - "function": "forge:villager_type_test/emeralds_for_villager_type", - "max_ticks": 100, - "structure": "forge:empty3x3x3" -} \ No newline at end of file diff --git a/src/test/java/net/minecraftforge/debug/chunk/LightingEventTest.java b/src/test/java/net/minecraftforge/debug/chunk/LightingEventTest.java index 0f71af4cb3..6603ac65d1 100644 --- a/src/test/java/net/minecraftforge/debug/chunk/LightingEventTest.java +++ b/src/test/java/net/minecraftforge/debug/chunk/LightingEventTest.java @@ -51,7 +51,7 @@ public class LightingEventTest extends BaseTestMod { chunk = level.getChunk(origin.offset(x, 0, z)); // If the chunk is already ticking, we can't force it - chunk = chunkSource.isPositionTicking(chunk.getPos().toLong()) ? null : chunk; + chunk = chunkSource.isPositionTicking(chunk.getPos().pack()) ? null : chunk; } if (chunk == null) { diff --git a/src/test/java/net/minecraftforge/debug/client/AdditionalModelTest.java b/src/test/java/net/minecraftforge/debug/client/AdditionalModelTest.java index ac9434ccac..e9ad288f81 100644 --- a/src/test/java/net/minecraftforge/debug/client/AdditionalModelTest.java +++ b/src/test/java/net/minecraftforge/debug/client/AdditionalModelTest.java @@ -16,11 +16,11 @@ import net.minecraft.client.model.animal.cow.CowModel; import net.minecraft.client.model.animal.pig.PigModel; import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.block.MovingBlockRenderState; +import net.minecraft.client.renderer.block.model.BlockStateModelWrapper; import net.minecraft.client.renderer.entity.LivingEntityRenderer; import net.minecraft.client.renderer.entity.layers.RenderLayer; import net.minecraft.client.renderer.entity.state.LivingEntityRenderState; import net.minecraft.client.renderer.entity.state.PigRenderState; -import net.minecraft.client.renderer.item.BlockModelWrapper; import net.minecraft.client.renderer.item.ItemStackRenderState; import net.minecraft.core.registries.Registries; import net.minecraft.data.CachedOutput; @@ -100,8 +100,8 @@ public class AdditionalModelTest extends BaseTestMod { if (model == null) helper.fail("Failed to retreive " + key + " item model"); - if (!(model instanceof BlockModelWrapper)) - helper.fail("Itme Model was " + model.getClass() + " when BlockModelWrapper expected"); + if (model == manager.getMissingModel()) + helper.fail("Itme Model was the missing model"); helper.succeed(); } @@ -110,8 +110,8 @@ public class AdditionalModelTest extends BaseTestMod { public static void block_model(GameTestHelper helper) { var manager = Minecraft.getInstance().getModelManager(); - var model = manager.getBlockModelShaper().getBlockModel(COW_HEAD_STATE.any()); - helper.assertValueNotEqual(manager.getMissingBlockStateModel(), model, MODID, "Failed to retreive block model"); + var model = manager.getBlockStateModelSet().get(COW_HEAD_STATE.any()); + helper.assertValueNotEqual(manager.getBlockStateModelSet().missingModel(), model, MODID, "Failed to retreive block model"); helper.succeed(); } diff --git a/src/test/java/net/minecraftforge/debug/client/GuiLayeringTest.java b/src/test/java/net/minecraftforge/debug/client/GuiLayeringTest.java index 984de47374..73e70c7c91 100644 --- a/src/test/java/net/minecraftforge/debug/client/GuiLayeringTest.java +++ b/src/test/java/net/minecraftforge/debug/client/GuiLayeringTest.java @@ -7,7 +7,7 @@ package net.minecraftforge.debug.client; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; @@ -50,10 +50,9 @@ public class GuiLayeringTest { } @Override - public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - this.renderBackground(graphics, mouseX, mouseY, partialTicks); - graphics.drawString(this.font, this.title, this.width / 2, 15, 0xFFFFFF); - super.render(graphics, mouseX, mouseY, partialTicks); + public void extractRenderState(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float partialTicks) { + graphics.text(this.font, this.title, this.width / 2, 15, 0xFFFFFF); + super.extractRenderState(graphics, mouseX, mouseY, partialTicks); } @Override diff --git a/src/test/java/net/minecraftforge/debug/client/ModelRenderLayerTest.java b/src/test/java/net/minecraftforge/debug/client/ModelRenderLayerTest.java index 3ed1b416c0..d9a8f6d0fe 100644 --- a/src/test/java/net/minecraftforge/debug/client/ModelRenderLayerTest.java +++ b/src/test/java/net/minecraftforge/debug/client/ModelRenderLayerTest.java @@ -4,6 +4,8 @@ */ package net.minecraftforge.debug.client; +/* + This should no longer be necessary in 26.1 as Material's now define their layers. import net.minecraft.client.Minecraft; import net.minecraft.client.data.models.BlockModelGenerators; @@ -11,7 +13,6 @@ import net.minecraft.client.data.models.ItemModelGenerators; import net.minecraft.client.data.models.model.ItemModelUtils; import net.minecraft.client.data.models.model.ModelTemplates; import net.minecraft.client.data.models.model.TextureMapping; -import net.minecraft.client.renderer.ItemBlockRenderTypes; import net.minecraft.client.renderer.chunk.ChunkSectionLayer; import net.minecraft.core.registries.Registries; import net.minecraft.data.CachedOutput; @@ -209,3 +210,4 @@ public class ModelRenderLayerTest extends BaseTestMod { } } } +*/ diff --git a/src/test/java/net/minecraftforge/debug/client/PictureInPictureTest.java b/src/test/java/net/minecraftforge/debug/client/PictureInPictureTest.java index f6d675a01f..ac8e27618d 100644 --- a/src/test/java/net/minecraftforge/debug/client/PictureInPictureTest.java +++ b/src/test/java/net/minecraftforge/debug/client/PictureInPictureTest.java @@ -7,12 +7,12 @@ package net.minecraftforge.debug.client; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.navigation.ScreenPosition; import net.minecraft.client.gui.navigation.ScreenRectangle; import net.minecraft.client.gui.render.pip.PictureInPictureRenderer; -import net.minecraft.client.gui.render.state.pip.PictureInPictureRenderState; import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.state.gui.pip.PictureInPictureRenderState; import net.minecraft.gametest.framework.GameTestHelper; import net.minecraftforge.client.event.RegisterPictureInPictureRendererEvent; @@ -70,7 +70,7 @@ public class PictureInPictureTest extends BaseTestMod { return; RENDER_FRAMES--; var window = Minecraft.getInstance().getWindow(); - event.getGuiGraphics().getRenderState().submitPicturesInPictureState(new TestPipRendererState( + event.getGuiGraphics().getRenderState().addPicturesInPictureState(new TestPipRendererState( event.getGuiGraphics(), 10, 10, @@ -115,8 +115,8 @@ public class PictureInPictureTest extends BaseTestMod { } } - record TestPipRendererState(GuiGraphics graphics, int x0, int y0, int x1, int y1, ScreenRectangle scissorArea, ScreenRectangle bounds) implements PictureInPictureRenderState { - public TestPipRendererState(GuiGraphics graphics, int x0, int y0, int x1, int y1, ScreenRectangle scissorArea) { + record TestPipRendererState(GuiGraphicsExtractor graphics, int x0, int y0, int x1, int y1, ScreenRectangle scissorArea, ScreenRectangle bounds) implements PictureInPictureRenderState { + public TestPipRendererState(GuiGraphicsExtractor graphics, int x0, int y0, int x1, int y1, ScreenRectangle scissorArea) { this(graphics, x0, y0, x1, y1, scissorArea, PictureInPictureRenderState.getBounds(x0, y0, x1, y1, scissorArea)); } diff --git a/src/test/java/net/minecraftforge/debug/client/RenderFrameLayerTest.java b/src/test/java/net/minecraftforge/debug/client/RenderFrameLayerTest.java index 1c9b4e8cf8..0394bb46dc 100644 --- a/src/test/java/net/minecraftforge/debug/client/RenderFrameLayerTest.java +++ b/src/test/java/net/minecraftforge/debug/client/RenderFrameLayerTest.java @@ -6,7 +6,7 @@ package net.minecraftforge.debug.client; import net.minecraft.client.renderer.LevelTargetBundle; -import net.minecraft.client.renderer.state.LevelRenderState; +import net.minecraft.client.renderer.state.level.LevelRenderState; import net.minecraftforge.client.FramePassManager; import net.minecraftforge.client.event.AddFramePassEvent; import net.minecraftforge.common.extensions.IForgeGameTestHelper; @@ -59,7 +59,7 @@ public class RenderFrameLayerTest extends BaseTestMod { public void executes(LevelRenderState state) { PoseStack ps = new PoseStack(); passOne.set(true); - ps.translate(state.cameraRenderState.entityPos.multiply(-1,-1,-1)); + ps.translate(state.cameraRenderState.pos.multiply(-1,-1,-1)); ps.pushPose(); Gizmos.cuboid( new AABB(0, -60, 0, 10, -50, 10), @@ -80,7 +80,7 @@ public class RenderFrameLayerTest extends BaseTestMod { public void executes(LevelRenderState state) { PoseStack ps = new PoseStack(); passTwo.set(true); - ps.translate(state.cameraRenderState.entityPos.multiply(-1,-1,-1)); + ps.translate(state.cameraRenderState.pos.multiply(-1,-1,-1)); ps.pushPose(); Gizmos.cuboid( new AABB(0, -60, 0, 10, -50, 10).contract(1, 1, 1), diff --git a/src/test/java/net/minecraftforge/debug/client/RenderTooltipTest.java b/src/test/java/net/minecraftforge/debug/client/RenderTooltipTest.java index f00295bef5..d8faa016e0 100644 --- a/src/test/java/net/minecraftforge/debug/client/RenderTooltipTest.java +++ b/src/test/java/net/minecraftforge/debug/client/RenderTooltipTest.java @@ -7,10 +7,8 @@ package net.minecraftforge.debug.client; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.inventory.InventoryScreen; -import net.minecraft.core.Holder; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.gametest.framework.GameTestHelper; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraftforge.client.event.AddGuiOverlayLayersEvent; import net.minecraftforge.client.event.RenderTooltipEvent; @@ -23,25 +21,35 @@ import net.minecraftforge.test.BaseTestMod; import java.util.Random; +import org.jspecify.annotations.Nullable; + @GameTestNamespace("forge") @Mod(RenderTooltipTest.MODID) public class RenderTooltipTest extends BaseTestMod { public static final String MODID = "render_tooltip_test"; private static boolean testMode = false; private static int shouldOpen = 0; - // Need some randomness so this test isn't asinine. - private static Object[] possibleChoices = BuiltInRegistries.ITEM.listElements().map(Holder::get).map(Item::getDefaultInstance).toArray(); - private static int itemStack = 0; private static ItemStack lastItemstackSeenInEvent = null; + private static @Nullable ItemStack itemStack; + public RenderTooltipTest(FMLJavaModLoadingContext context) { super(context, false, false); AddGuiOverlayLayersEvent.BUS.addListener(event -> { event.getLayeredDraw().addWithCondition(rl("render_tooltip_test"), (gg, dt) -> { - gg.setTooltipForNextFrame(Minecraft.getInstance().font, (ItemStack) possibleChoices[itemStack], 50, 50); + if (itemStack != null) + gg.setTooltipForNextFrame(Minecraft.getInstance().font, itemStack, 50, 50); }, () -> testMode) ; }); } + // Need some randomness so this test isn't asinine. + private static void pickRandomItem() { + var keys = BuiltInRegistries.ITEM.keySet(); + var idx = new Random().nextInt(keys.size()); + var item = BuiltInRegistries.ITEM.listElements().skip(idx).findFirst().get(); + itemStack = item.get().getDefaultInstance(); + } + @SuppressWarnings("all") @GameTest public static void stack_present_in_pre(GameTestHelper helper) { @@ -60,13 +68,15 @@ public class RenderTooltipTest extends BaseTestMod { shouldOpen = 0; } }); - itemStack = new Random().nextInt(possibleChoices.length); + + pickRandomItem(); + helper.runAfterDelay(10, () -> { testMode = false; var copyOfLastSeen = lastItemstackSeenInEvent; - boolean testPassed = lastItemstackSeenInEvent == possibleChoices[itemStack]; + boolean testPassed = lastItemstackSeenInEvent == itemStack; lastItemstackSeenInEvent = null; - helper.assertTrue(testPassed, "Itemstack from last tooltip was not correct. Was " + copyOfLastSeen + " expected " + possibleChoices[itemStack]); + helper.assertTrue(testPassed, "Itemstack from last tooltip was not correct. Was " + copyOfLastSeen + " expected " + itemStack); helper.succeed(); }); } diff --git a/src/test/java/net/minecraftforge/debug/creativetabs/CreativeModeTabTest.java b/src/test/java/net/minecraftforge/debug/creativetabs/CreativeModeTabTest.java index a3de84b07b..8b7df7b3d6 100644 --- a/src/test/java/net/minecraftforge/debug/creativetabs/CreativeModeTabTest.java +++ b/src/test/java/net/minecraftforge/debug/creativetabs/CreativeModeTabTest.java @@ -5,15 +5,19 @@ package net.minecraftforge.debug.creativetabs; +import java.util.ArrayList; import java.util.List; + +import org.jspecify.annotations.Nullable; + +import net.minecraft.core.component.DataComponents; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.Identifier; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.CreativeModeTab.TabVisibility; -import net.minecraft.world.item.DyeColor; -import net.minecraft.world.item.DyeItem; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.ItemLike; @@ -74,10 +78,7 @@ public class CreativeModeTabTest { helper.register(COLORS, CreativeModeTab.builder() .title(Component.literal("Colors")) - .displayItems((params, output) -> { - for (DyeColor color : DyeColor.values()) - output.accept(DyeItem.byColor(color)); - }) + .displayItems((params, output) -> output.acceptAll(getDyes())) .withTabFactory(CreativeModeColorTab::new) .withTabsBefore(STONE) .build() @@ -86,10 +87,7 @@ public class CreativeModeTabTest { helper.register(SEARCH, CreativeModeTab.builder() .title(Component.literal("Search")) .icon(() -> new ItemStack(Items.BOOKSHELF)) - .displayItems((params, output) -> { - for (DyeColor color : DyeColor.values()) - output.accept(DyeItem.byColor(color)); - }) + .displayItems((params, output) -> output.acceptAll(getDyes())) .withTabsBefore(COLORS) .withSearchBar() .build() @@ -138,22 +136,30 @@ public class CreativeModeTabTest { } } + private static final List getDyes() { + var ret = new ArrayList(); + for (var itr = BuiltInRegistries.ITEM.listElements().iterator(); itr.hasNext(); ) { + var item = itr.next(); + var color = item.components().get(DataComponents.DYE); + if (color != null) + ret.add(new ItemStack(item)); + } + return ret; + } + private static class CreativeModeColorTab extends CreativeModeTab { - private final ItemStack[] iconItems; + private @Nullable List iconItems; public CreativeModeColorTab(CreativeModeTab.Builder builder) { super(builder); - - DyeColor[] colors = DyeColor.values(); - iconItems = new ItemStack[colors.length]; - for (int i = 0; i < colors.length; i++) - iconItems[i] = new ItemStack(DyeItem.byColor(colors[i])); } @Override public ItemStack getIconItem() { - int idx = (int)(System.currentTimeMillis() / 1200) % iconItems.length; - return iconItems[idx]; + if (iconItems == null) + iconItems = getDyes(); + int idx = (int)(System.currentTimeMillis() / 1200) % iconItems.size(); + return iconItems.get(idx); } } } diff --git a/src/test/java/net/minecraftforge/debug/gameplay/block/ChorusBlockPlacementTest.java b/src/test/java/net/minecraftforge/debug/gameplay/block/ChorusBlockPlacementTest.java index 72b710caca..b3f9aa54ac 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/block/ChorusBlockPlacementTest.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/block/ChorusBlockPlacementTest.java @@ -8,9 +8,9 @@ package net.minecraftforge.debug.gameplay.block; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.gametest.framework.GameTestHelper; +import net.minecraft.tags.BlockTags; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; -import net.minecraftforge.common.Tags; import net.minecraftforge.common.data.BlockTagsProvider; import net.minecraftforge.data.event.GatherDataEvent; import net.minecraftforge.fml.common.Mod; @@ -38,7 +38,7 @@ public class ChorusBlockPlacementTest extends BaseTestMod { @GameTest public static void custom_placeable_block(GameTestHelper helper) { var custom = helper.setAssertAndGetBlock(BlockPos.ZERO, BLOCK.get()); - helper.assertTrue(custom.is(Tags.Blocks.CHORUS_ADDITIONALLY_GROWS_ON), () -> "Block %s is not placeable on chorus".formatted(custom.getBlock())); + helper.assertTrue(custom.is(BlockTags.SUPPORTS_CHORUS_PLANT), () -> "Block %s is not placeable on chorus".formatted(custom.getBlock())); helper.setAndAssertBlock(BlockPos.ZERO.above(), Blocks.CHORUS_FLOWER); helper.runAfterDelay(1, () -> { @@ -48,17 +48,17 @@ public class ChorusBlockPlacementTest extends BaseTestMod { } private void gatherData(GatherDataEvent event) { - event.getGenerator().addProvider(event.includeServer(), new BlockTags(event)); + event.getGenerator().addProvider(event.includeServer(), new BlockTagProvider(event)); } - private static final class BlockTags extends BlockTagsProvider { - public BlockTags(GatherDataEvent event) { + private static final class BlockTagProvider extends BlockTagsProvider { + public BlockTagProvider(GatherDataEvent event) { super(event.getGenerator().getPackOutput(), event.getLookupProvider(), MOD_ID, event.getExistingFileHelper()); } @Override protected void addTags(HolderLookup.Provider provider) { - this.tag(Tags.Blocks.CHORUS_ADDITIONALLY_GROWS_ON).add(BLOCK.get()); + this.tag(BlockTags.SUPPORTS_CHORUS_PLANT).add(BLOCK.get()); } } } diff --git a/src/test/java/net/minecraftforge/debug/gameplay/block/PlantTypePlacementTest.java b/src/test/java/net/minecraftforge/debug/gameplay/block/PlantTypePlacementTest.java index 2a61645aca..f1b4dd6e10 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/block/PlantTypePlacementTest.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/block/PlantTypePlacementTest.java @@ -24,6 +24,7 @@ import net.minecraftforge.test.BaseTestMod; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -31,9 +32,6 @@ import java.util.List; import java.util.Map; import java.util.function.Consumer; import java.util.stream.Collectors; -import java.util.stream.Stream; - -import com.google.common.collect.Streams; import static net.minecraft.world.level.block.Blocks.*; @GameTestNamespace("forge") @@ -42,11 +40,14 @@ public class PlantTypePlacementTest extends BaseTestMod { static final String MOD_ID = "plant_type_placement"; private static final Map, List> TAGS = Util.make(new HashMap<>(), map -> { - map.put(BlockTags.DIRT, List.of(DIRT, GRASS_BLOCK, PODZOL, COARSE_DIRT, MYCELIUM, ROOTED_DIRT, MOSS_BLOCK, PALE_MOSS_BLOCK, MUD, MUDDY_MANGROVE_ROOTS)); + map.put(BlockTags.DIRT, List.of(DIRT, COARSE_DIRT, ROOTED_DIRT)); + map.put(BlockTags.MUD, List.of(MUD, MUDDY_MANGROVE_ROOTS)); + map.put(BlockTags.MOSS_BLOCKS, List.of(MOSS_BLOCK, PALE_MOSS_BLOCK)); + map.put(BlockTags.GRASS_BLOCKS, List.of(GRASS_BLOCK, PODZOL, MYCELIUM)); map.put(BlockTags.SAND, List.of(SAND, RED_SAND, SUSPICIOUS_SAND)); map.put(BlockTags.TERRACOTTA, List.of(TERRACOTTA, WHITE_TERRACOTTA, ORANGE_TERRACOTTA, MAGENTA_TERRACOTTA, LIGHT_BLUE_TERRACOTTA, YELLOW_TERRACOTTA, LIME_TERRACOTTA, PINK_TERRACOTTA, GRAY_TERRACOTTA, LIGHT_GRAY_TERRACOTTA, CYAN_TERRACOTTA, PURPLE_TERRACOTTA, BLUE_TERRACOTTA, BROWN_TERRACOTTA, GREEN_TERRACOTTA, RED_TERRACOTTA, BLACK_TERRACOTTA)); map.put(BlockTags.NYLIUM, List.of(CRIMSON_NYLIUM, WARPED_NYLIUM)); - map.put(BlockTags.MUSHROOM_GROW_BLOCK, List.of(MYCELIUM, PODZOL, CRIMSON_NYLIUM, WARPED_NYLIUM)); + map.put(BlockTags.OVERRIDES_MUSHROOM_LIGHT_REQUIREMENT, List.of(MYCELIUM, PODZOL, CRIMSON_NYLIUM, WARPED_NYLIUM)); }); private record Info(Consumer handler, List blocks) {} @@ -61,8 +62,8 @@ public class PlantTypePlacementTest extends BaseTestMod { // VegitationBlock has no direct creations map.put(AttachedStemBlock.class, of(this::farmland, ATTACHED_MELON_STEM, ATTACHED_PUMPKIN_STEM)); - map.put(AzaleaBlock.class, of(this::vegitation_and_clay, AZALEA, FLOWERING_AZALEA)); - map.put(BushBlock.class, of(this::vegitation, BUSH)); + map.put(AzaleaBlock.class, of(this::simple, AZALEA, FLOWERING_AZALEA)); + map.put(BushBlock.class, of(this::vegetation, BUSH)); map.put(CactusFlowerBlock.class, of(this::cactus_flower, CACTUS_FLOWER)); map.put(CropBlock.class, of(this::farmland, WHEAT)); @@ -81,29 +82,29 @@ public class PlantTypePlacementTest extends BaseTestMod { map.put(ShortDryGrassBlock.class, of(this::dry_vegitation, SHORT_DRY_GRASS)); map.put(TallDryGrassBlock.class, of(this::dry_vegitation, TALL_DRY_GRASS)); - map.put(FireflyBushBlock.class, of(this::vegitation, FIREFLY_BUSH)); - map.put(FlowerBedBlock.class, of(this::vegitation, PINK_PETALS, WILDFLOWERS)); + map.put(FireflyBushBlock.class, of(this::vegetation, FIREFLY_BUSH)); + map.put(FlowerBedBlock.class, of(this::vegetation, PINK_PETALS, WILDFLOWERS)); - map.put(FlowerBlock.class, of(this::vegitation, ALLIUM, AZURE_BLUET, BLUE_ORCHID, CORNFLOWER, DANDELION, LILY_OF_THE_VALLEY, ORANGE_TULIP, OXEYE_DAISY, PINK_TULIP, POPPY, RED_TULIP, TORCHFLOWER, WHITE_TULIP)); - map.put(EyeblossomBlock.class, of(this::vegitation, CLOSED_EYEBLOSSOM, OPEN_EYEBLOSSOM)); - map.put(WitherRoseBlock.class, of(this::withrose, WITHER_ROSE)); + map.put(FlowerBlock.class, of(this::vegetation, ALLIUM, AZURE_BLUET, BLUE_ORCHID, CORNFLOWER, DANDELION, GOLDEN_DANDELION, LILY_OF_THE_VALLEY, ORANGE_TULIP, OXEYE_DAISY, PINK_TULIP, POPPY, RED_TULIP, TORCHFLOWER, WHITE_TULIP)); + map.put(EyeblossomBlock.class, of(this::vegetation, CLOSED_EYEBLOSSOM, OPEN_EYEBLOSSOM)); + map.put(WitherRoseBlock.class, of(this::simple, WITHER_ROSE)); - map.put(FungusBlock.class, of(this::nether_fungus, CRIMSON_FUNGUS, WARPED_FUNGUS)); + map.put(NetherFungusBlock.class, of(this::simple, CRIMSON_FUNGUS, WARPED_FUNGUS)); map.put(LeafLitterBlock.class, of(this::todo, LEAF_LITTER)); map.put(MushroomBlock.class, of(this::mushroom, BROWN_MUSHROOM, RED_MUSHROOM)); - map.put(NetherSproutsBlock.class, of(this::nether_vegitation, NETHER_SPROUTS)); - map.put(NetherWartBlock.class, of(this::netherwart, NETHER_WART)); - map.put(RootsBlock.class, of(this::nether_vegitation, CRIMSON_ROOTS, WARPED_ROOTS)); + map.put(NetherSproutsBlock.class, of(this::simple, NETHER_SPROUTS)); + map.put(NetherWartBlock.class, of(this::simple, NETHER_WART)); + map.put(NetherRootsBlock.class, of(this::simple, CRIMSON_ROOTS, WARPED_ROOTS)); - map.put(SaplingBlock.class, of(this::vegitation, ACACIA_SAPLING, BIRCH_SAPLING, CHERRY_SAPLING, DARK_OAK_SAPLING, JUNGLE_SAPLING, OAK_SAPLING, PALE_OAK_SAPLING, SPRUCE_SAPLING)); - map.put(MangrovePropaguleBlock.class, of(this::vegitation_and_clay, MANGROVE_PROPAGULE)); + map.put(SaplingBlock.class, of(this::vegetation, ACACIA_SAPLING, BIRCH_SAPLING, CHERRY_SAPLING, DARK_OAK_SAPLING, JUNGLE_SAPLING, OAK_SAPLING, PALE_OAK_SAPLING, SPRUCE_SAPLING)); + map.put(MangrovePropaguleBlock.class, of(this::vegetation, MANGROVE_PROPAGULE)); map.put(SeagrassBlock.class, of(this::todo, SEAGRASS)); map.put(SeaPickleBlock.class, of(this::todo, SEA_PICKLE)); map.put(StemBlock.class, of(this::farmland, MELON_STEM, PUMPKIN_STEM)); - map.put(SweetBerryBushBlock.class, of(this::vegitation, SWEET_BERRY_BUSH)); - map.put(TallGrassBlock.class, of(this::vegitation, FERN, SHORT_GRASS)); - map.put(WaterlilyBlock.class, of(this::todo, LILY_PAD)); + map.put(SweetBerryBushBlock.class, of(this::vegetation, SWEET_BERRY_BUSH)); + map.put(TallGrassBlock.class, of(this::vegetation, FERN, SHORT_GRASS)); + map.put(LilyPadBlock.class, of(this::todo, LILY_PAD)); }); @SafeVarargs @@ -152,15 +153,14 @@ public class PlantTypePlacementTest extends BaseTestMod { helper.succeed(); } - @GameTest(structure = "forge:empty5x4x4") // sand(3) + dirt(10) + extra(4) = 17 + @GameTest(structure = "forge:empty5x4x4") // SUPPORTS_BAMBOO = sand(3) + substrate() + extra(4) = 17 public void bamboo(GameTestHelper helper) { - // BambooStalkBlock = Tag.BAMBOO_PLANTABLE_ON var plants = plants(BambooStalkBlock.class); - var soils = new ArrayList<>(sandAndDirt(helper, BAMBOO, BAMBOO_SAPLING, GRAVEL, SUSPICIOUS_GRAVEL)); + var soils = join(sand(helper), substrate(helper), List.of(BAMBOO, BAMBOO_SAPLING, GRAVEL, SUSPICIOUS_GRAVEL)); // these need special case var special = List.of(BAMBOO, BAMBOO_SAPLING); - testTag(helper, BlockTags.BAMBOO_PLANTABLE_ON, soils); + testTag(helper, BlockTags.SUPPORTS_BAMBOO, soils); soils.removeAll(special); var pos = iterate(helper, plants, soils); @@ -217,7 +217,7 @@ public class PlantTypePlacementTest extends BaseTestMod { helper.makeFloor(SAND, 1); var pos = BlockPos.ZERO.above(); - // CactusFlowerBlock = CACTUS, FARMLAND, SturdyCenter Up + // CactusFlowerBlock = SUPPORT_OVERRIDE_CACTUS_FLOWER(CACTUS, FARMLAND), SturdyCenter Up for (var plant : plants(CactusFlowerBlock.class)) { helper.setAndAssertBlock(pos, FARMLAND); canSurvive(helper, pos.above(), plant); @@ -233,11 +233,11 @@ public class PlantTypePlacementTest extends BaseTestMod { helper.succeed(); } - @GameTest(structure = "forge:empty13x3x9") // (sand(3) + dirt(10)) * (water(2) + FROSTED_ICE) + @GameTest(structure = "forge:empty13x3x9") // SUPPORTS_SUGAR_CANE(substrate() + sand(3)) * (water(2) + FROSTED_ICE) public void sugarcane(GameTestHelper helper) { // SugarCaneBlock = DIRT || SAND && Horizontal (Fluid == WATER || FROSTED_ICE) var plants = plants(SugarCaneBlock.class); - var soils = sandAndDirt(helper); + var soils = join(substrate(helper), sand(helper)); var start = BlockPos.ZERO; for (var plant : plants) { @@ -268,75 +268,35 @@ public class PlantTypePlacementTest extends BaseTestMod { helper.succeed(); } - @GameTest(structure = "forge:empty11x3x30") // (dirt(10) + FARMLAND) * 30 plants - public void vegitation(GameTestHelper helper) { + @GameTest(structure = "forge:empty11x3x33") // vegetation(11) * 32 plants + public void vegetation(GameTestHelper helper) { var plants = plants( BushBlock.class, // 1 FireflyBushBlock.class, // 1 FlowerBedBlock.class, // 2 - FlowerBlock.class, // 13 + FlowerBlock.class, // 14 EyeblossomBlock.class, // 2 SaplingBlock.class, // 8 SweetBerryBushBlock.class, // 1 + MangrovePropaguleBlock.class, // 1 TallGrassBlock.class // 2 ); - var soils = vegitationSoils(helper); + var soils = supportsVegetation(helper); iterate(helper, plants, soils); helper.succeed(); } - @GameTest(structure = "forge:empty12x3x3") // (dirt(10) + FARMLAND + CLAY) * 2 plants - public void vegitation_and_clay(GameTestHelper helper) { - var plants = plants( - MangrovePropaguleBlock.class, // 1 - AzaleaBlock.class // 2 - ); - var soils = vegitationSoils(helper, CLAY); - - iterate(helper, plants, soils); - helper.succeed(); - } - - @GameTest(structure = "forge:empty4x3x4") // (dirt(10) + FARMLAND + 3 extra) * 1 plant = 14 - public void withrose(GameTestHelper helper) { - //WitherRoseBlock = VEGITATION || NETHERRACK, SOUL_SAND, SOUL_SOIL - var plants = plants(WitherRoseBlock.class); - iterate(helper, plants, vegitationSoils(helper, NETHERRACK, SOUL_SAND, SOUL_SOIL)); - helper.succeed(); - } - - @GameTest - public void netherwart(GameTestHelper helper) { - // NetherWartBlock = SOUL_SAND - var plants = plants(NetherWartBlock.class); - iterate(helper, plants, List.of(SOUL_SAND)); - helper.succeed(); - } - - @GameTest(structure = "forge:empty14x3x3") // (dirt(10) + FARMLAND + nylium(2) + SOUL_SOIL) * 3 plants - public void nether_vegitation(GameTestHelper helper) { - // NetherSproutsBlock = VEGITATION || Tags.NYLIUM, SOUL_SOIL - // RootsBlock = VEGITATION || Tags.NYLIUM, SOUL_SOIL - var plants = plants( - NetherSproutsBlock.class, // 1 - RootsBlock.class // 2 - ); - var nylium = testTag(helper, BlockTags.NYLIUM, TAGS.get(BlockTags.NYLIUM)); - var soils = Stream.concat(nylium.stream(), vegitationSoils(helper, SOUL_SOIL).stream()).distinct().toList(); - - iterate(helper, plants, soils); - helper.succeed(); - } - - @GameTest(structure = "forge:empty15x3x2") // (dirt(10) + FARMLAND + nylium(2) + SOUL_SOIL + MYCELIUM) * 2 plants - public void nether_fungus(GameTestHelper helper) { - // FungusBlock = VEGITATION || Tags.NYLIUM, MYCELIUM, SOUL_SOIL - var plants = plants(FungusBlock.class); - var nylium = testTag(helper, BlockTags.NYLIUM, TAGS.get(BlockTags.NYLIUM)); - var soils = Stream.concat(nylium.stream(), vegitationSoils(helper, MYCELIUM, SOUL_SOIL).stream()).distinct().toList(); - - iterate(helper, plants, soils); + @GameTest(structure = "forge:empty16x3x8") + public void simple(GameTestHelper helper) { + var pos = iterate(helper, BlockPos.ZERO, plants(AzaleaBlock.class), supportsAzalea(helper)); // 12 + pos = iterate(helper, pos, plants(WitherRoseBlock.class), supportsWitherRose(helper)); // 14 + pos = iterate(helper, pos, plants(NetherWartBlock.class), supportsNetherWart(helper)); // 1 + pos = iterate(helper, pos, plants(NetherSproutsBlock.class), supportsNetherSprouts(helper)); // 14 + pos = iterate(helper, pos, List.of(Blocks.WARPED_ROOTS), supportsWarpedRoots(helper)); // 14 + pos = iterate(helper, pos, List.of(Blocks.CRIMSON_ROOTS), supportsCrimsonRoots(helper)); // 14 + pos = iterate(helper, pos, List.of(Blocks.WARPED_FUNGUS), supportsWarpedFungus(helper)); // 15 + pos = iterate(helper, pos, List.of(Blocks.CRIMSON_FUNGUS), supportsCrimsonFungus(helper)); // 15 helper.succeed(); } @@ -356,14 +316,10 @@ public class PlantTypePlacementTest extends BaseTestMod { helper.succeed(); } - @GameTest(structure = "forge:empty31x3x3") // 3 plants (sand(3) + dirt(10) + terracotta(17) + FARMLAND) * plants(3) + @GameTest(structure = "forge:empty32x3x3") // 32 * plants(3) public void dry_vegitation(GameTestHelper helper) { - // DryVegetationBlock = Tag.DRY_VEGETATION_MAY_PLACE_ON var plants = plants(DryVegetationBlock.class, ShortDryGrassBlock.class, TallDryGrassBlock.class); - var terracotta = testTag(helper, BlockTags.TERRACOTTA, TAGS.get(BlockTags.TERRACOTTA)); - var soils = Streams.concat(sandAndDirt(helper, FARMLAND).stream(), terracotta.stream()).toList(); - testTag(helper, BlockTags.DRY_VEGETATION_MAY_PLACE_ON, soils); - iterate(helper, plants, soils); + iterate(helper, plants, supportsDryVegetation(helper)); helper.succeed(); } @@ -397,7 +353,7 @@ public class PlantTypePlacementTest extends BaseTestMod { // I would rather make a enclosed box, but lighting doesn't propagate for some reason. - var soil = testTag(helper, BlockTags.MUSHROOM_GROW_BLOCK, TAGS.get(BlockTags.MUSHROOM_GROW_BLOCK)); + var soil = testTag(helper, BlockTags.OVERRIDES_MUSHROOM_LIGHT_REQUIREMENT, TAGS.get(BlockTags.OVERRIDES_MUSHROOM_LIGHT_REQUIREMENT)); iterate(helper, plants, soil); // delay a handful of ticks to propagate lighting @@ -428,11 +384,11 @@ public class PlantTypePlacementTest extends BaseTestMod { //=================================================== // HELPERS //=================================================== - private static BlockPos iterate(GameTestHelper helper, List plants, List soils) { + private static BlockPos iterate(GameTestHelper helper, Collection plants, Collection soils) { return iterate(helper, BlockPos.ZERO.west(), plants, soils); } - private static BlockPos iterate(GameTestHelper helper, BlockPos pos, List plants, List soils) { + private static BlockPos iterate(GameTestHelper helper, BlockPos pos, Collection plants, Collection soils) { for (var plant : plants) { for (var soil : soils) { pos = offset(helper, pos); @@ -447,25 +403,73 @@ public class PlantTypePlacementTest extends BaseTestMod { return pos; } - private static List dirt(GameTestHelper helper) { - return testTag(helper, BlockTags.DIRT, TAGS.get(BlockTags.DIRT)); + private static Collection known(GameTestHelper helper, TagKey tag) { + var expected = TAGS.get(tag); + if (expected == null) + helper.fail("Failed to find known values for: " + tag); + return testTag(helper, tag, expected); } - private static List dirt(GameTestHelper helper, Block... extra) { - return Streams.concat(dirt(helper).stream(), Stream.of(extra)).distinct().toList(); + @SafeVarargs + private static Collection join(GameTestHelper helper, @SuppressWarnings("unchecked") TagKey... tags) { + var ret = new HashSet(); + for (var tag : tags) + ret.addAll(known(helper, tag)); + return ret; } - private static List sand(GameTestHelper helper) { - return testTag(helper, BlockTags.SAND, TAGS.get(BlockTags.SAND)); + @SafeVarargs + private static Collection join(Collection... lists) { + var ret = new HashSet(); + for (var list : lists) + ret.addAll(list); + return ret; } - private static List sandAndDirt(GameTestHelper helper, Block... extra) { - return Streams.concat(sand(helper).stream(), dirt(helper).stream(), Stream.of(extra)).distinct().toList(); + private static Collection dirt(GameTestHelper helper) { // 3 + return known(helper, BlockTags.DIRT); } - - // See VegitationBlock.mayPlaceOn - private static List vegitationSoils(GameTestHelper helper, Block... extra) { - return Streams.concat(dirt(helper, FARMLAND).stream(), Stream.of(extra)).distinct().toList(); + private static Collection sand(GameTestHelper helper) { // 3 + return known(helper, BlockTags.SAND); + } + private static Collection terracotta(GameTestHelper helper) { // 18 + return known(helper, BlockTags.TERRACOTTA); + } + private static Collection nylium(GameTestHelper helper) { // 2 + return known(helper, BlockTags.NYLIUM); + } + private static Collection substrate(GameTestHelper helper) { // 10 = dirt(3), mud(2), moss_blocks(2), grass_blocks(3) + return testTag(helper, BlockTags.SUBSTRATE_OVERWORLD, join(helper, BlockTags.DIRT, BlockTags.MUD, BlockTags.MOSS_BLOCKS, BlockTags.GRASS_BLOCKS)); + } + private static Collection supportsVegetation(GameTestHelper helper) { // 11 = (substrate(10) + FARMLAND) + return testTag(helper, BlockTags.SUPPORTS_VEGETATION, join(substrate(helper), List.of(FARMLAND))); + } + private static Collection supportsAzalea(GameTestHelper helper) { // 12 = (vegetation(11) + CLAY) + return testTag(helper, BlockTags.SUPPORTS_AZALEA, join(supportsVegetation(helper), List.of(CLAY))); + } + private static Collection supportsWitherRose(GameTestHelper helper) { // 14 = (vegetation(11) + NETHERRACK + SOUL_SAND + SOUL_SOIL) + return testTag(helper, BlockTags.SUPPORTS_WITHER_ROSE, join(supportsVegetation(helper), List.of(NETHERRACK, SOUL_SAND, SOUL_SOIL))); + } + private static Collection supportsNetherWart(GameTestHelper helper) { // 1 + return testTag(helper, BlockTags.SUPPORTS_NETHER_WART, List.of(SOUL_SAND)); + } + private static Collection supportsNetherSprouts(GameTestHelper helper) { // 14 = (vegetation(11) + nylium(2) + SOUL_SOIL) + return testTag(helper, BlockTags.SUPPORTS_NETHER_SPROUTS, join(supportsVegetation(helper), nylium(helper), List.of(SOUL_SOIL))); + } + private static Collection supportsWarpedRoots(GameTestHelper helper) { // 14 = (vegetation(11) + nylium(2) + SOUL_SOIL) + return testTag(helper, BlockTags.SUPPORTS_WARPED_ROOTS, join(supportsVegetation(helper), nylium(helper), List.of(SOUL_SOIL))); + } + private static Collection supportsCrimsonRoots(GameTestHelper helper) { // 14 = (warpedRoots(14)) + return testTag(helper, BlockTags.SUPPORTS_CRIMSON_ROOTS, supportsWarpedRoots(helper)); + } + private static Collection supportsWarpedFungus(GameTestHelper helper) { // 15 = (vegetation(11) + nylium(2) + MYCELIUM + SOUL_SOIL) + return testTag(helper, BlockTags.SUPPORTS_WARPED_FUNGUS, join(supportsVegetation(helper), nylium(helper), List.of(MYCELIUM, SOUL_SOIL))); + } + private static Collection supportsCrimsonFungus(GameTestHelper helper) { // 15 = (warpedFungus(15)) + return testTag(helper, BlockTags.SUPPORTS_CRIMSON_FUNGUS, supportsWarpedFungus(helper)); + } + private static Collection supportsDryVegetation(GameTestHelper helper) { // 32 = (sand(3) + terracotta(18) + vegetation(11) + return testTag(helper, BlockTags.SUPPORTS_DRY_VEGETATION, join(sand(helper), terracotta(helper), supportsVegetation(helper))); } private static BlockPos offset(GameTestHelper helper, BlockPos pos) { @@ -477,7 +481,7 @@ public class PlantTypePlacementTest extends BaseTestMod { return pos; } - private static List sort(List blocks) { + private static Collection sort(Collection blocks) { var sorted = new ArrayList<>(blocks); Collections.sort(sorted, (a, b) -> name(a).compareTo(name(b))); return sorted; @@ -498,7 +502,7 @@ public class PlantTypePlacementTest extends BaseTestMod { helper.assertTrue(state.canSurvive(helper.getLevel(), helper.absolutePos(pos)), () -> name(state) + " can not survive on " + name(soil)); } - private static List testTag(GameTestHelper helper, TagKey tag, List expected) { + private static Collection testTag(GameTestHelper helper, TagKey tag, Collection expected) { var lookup = helper.registryLookup(Registries.BLOCK); var values = lookup.getOrThrow(tag).stream() .filter(h -> h.unwrapKey().orElseThrow().identifier().getNamespace().equals("minecraft")) // Only vanilla entries diff --git a/src/test/java/net/minecraftforge/debug/gameplay/crafting/ConditionalRecipeTest.java b/src/test/java/net/minecraftforge/debug/gameplay/crafting/ConditionalRecipeTest.java index bc3ae3569e..05553d29eb 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/crafting/ConditionalRecipeTest.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/crafting/ConditionalRecipeTest.java @@ -22,6 +22,7 @@ import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.CookingBookCategory; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.item.crafting.RecipeInput; @@ -278,7 +279,7 @@ public class ConditionalRecipeTest extends BaseTestMod { ConditionalRecipe.builder() .condition(FALSE()) .recipe( - SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.DIRT), RecipeCategory.MISC, Blocks.DIAMOND_BLOCK, 0.1F, 200) + SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.DIRT), RecipeCategory.MISC, CookingBookCategory.MISC, Blocks.DIAMOND_BLOCK, 0.1F, 200) .unlockedBy(getHasName(Blocks.DIRT), has(Blocks.DIRT)) ::save ) @@ -287,7 +288,7 @@ public class ConditionalRecipeTest extends BaseTestMod { ConditionalRecipe.builder() .condition(TRUE()) .recipe( - SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.BEE_NEST), RecipeCategory.MISC, Blocks.DIAMOND_BLOCK, 0.1F, 200) + SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.BEE_NEST), RecipeCategory.MISC, CookingBookCategory.MISC, Blocks.DIAMOND_BLOCK, 0.1F, 200) .unlockedBy(getHasName(Blocks.BEE_NEST), has(Blocks.BEE_NEST)) ::save ) @@ -296,7 +297,7 @@ public class ConditionalRecipeTest extends BaseTestMod { ConditionalRecipe.builder() .condition(FALSE()) .recipe( - SingleItemRecipeBuilder.stonecutting(Ingredient.of(Blocks.DIRT), RecipeCategory.MISC, Blocks.DIAMOND_BLOCK) + SingleItemRecipeBuilder.stonecutting(Ingredient.of(Blocks.DIRT), RecipeCategory.MISC, Blocks.DIAMOND_BLOCK, 1) .unlockedBy(getHasName(Blocks.DIRT), has(Blocks.DIRT)) ::save ) @@ -305,7 +306,7 @@ public class ConditionalRecipeTest extends BaseTestMod { ConditionalRecipe.builder() .condition(TRUE()) .recipe( - SingleItemRecipeBuilder.stonecutting(Ingredient.of(Blocks.REDSTONE_ORE), RecipeCategory.MISC, Blocks.DIAMOND_BLOCK) + SingleItemRecipeBuilder.stonecutting(Ingredient.of(Blocks.REDSTONE_ORE), RecipeCategory.MISC, Blocks.DIAMOND_BLOCK, 1) .unlockedBy(getHasName(Blocks.REDSTONE_ORE), has(Blocks.REDSTONE_ORE)) ::save ) diff --git a/src/test/java/net/minecraftforge/debug/gameplay/crafting/CustomIngredientsTest.java b/src/test/java/net/minecraftforge/debug/gameplay/crafting/CustomIngredientsTest.java index 888b64680a..e0afa34fe8 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/crafting/CustomIngredientsTest.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/crafting/CustomIngredientsTest.java @@ -272,7 +272,7 @@ public class CustomIngredientsTest extends BaseTestMod implements INBTBuilder { .pattern("XXX") .pattern("XXX") .define('X', - partialNbt() + nbtIngredient() .nbt(damaged()) .items(Items.WOODEN_PICKAXE, Items.STONE_PICKAXE, Items.IRON_PICKAXE) .build() @@ -284,7 +284,7 @@ public class CustomIngredientsTest extends BaseTestMod implements INBTBuilder { shaped() .pattern("XXX") .define('X', - partialNbt() + nbtIngredient() .nbt(named()) .items(Items.WOODEN_PICKAXE, Items.STONE_PICKAXE, Items.IRON_PICKAXE) .build() @@ -297,8 +297,16 @@ public class CustomIngredientsTest extends BaseTestMod implements INBTBuilder { .pattern("XXX") .pattern(" X ") .define('X', compound( - strictNbt(named(Items.DIRT)), - strictNbt(named(Items.OAK_LOG)) + nbtIngredient() + .strict() + .nbt(named()) + .item(Items.DIRT) + .build(), + nbtIngredient() + .strict() + .nbt(named()) + .item(Items.OAK_LOG) + .build() )) .unlockedBy(hasName, has) .save(this.output, rk("compound_ingredient")); @@ -306,7 +314,13 @@ public class CustomIngredientsTest extends BaseTestMod implements INBTBuilder { // strict NBT match - should match an unnamed pickaxe that lost 3 durability shaped() .pattern("XXX") - .define('X', strictNbt(named(Items.DIAMOND_PICKAXE))) + .define('X', + nbtIngredient() + .strict() + .nbt(named()) + .item(Items.DIAMOND_PICKAXE) + .build() + ) .unlockedBy(hasName, has) .save(this.output, rk("strict_nbt_ingredient")); diff --git a/src/test/java/net/minecraftforge/debug/gameplay/crafting/TagsTest.java b/src/test/java/net/minecraftforge/debug/gameplay/crafting/TagsTest.java index db0ff22ade..0209c54299 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/crafting/TagsTest.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/crafting/TagsTest.java @@ -6,10 +6,9 @@ package net.minecraftforge.debug.gameplay.crafting; import net.minecraft.gametest.framework.GameTestHelper; -import net.minecraft.resources.Identifier; -import net.minecraft.tags.ItemTags; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; +import net.minecraftforge.common.Tags; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.gametest.GameTest; @@ -18,7 +17,7 @@ import net.minecraftforge.test.BaseTestMod; @Mod(TagsTest.MODID) @GameTestNamespace("forge") -public class TagsTest extends BaseTestMod { +public final class TagsTest extends BaseTestMod { public static final String MODID = "tags_test"; public TagsTest(FMLJavaModLoadingContext context) { @@ -26,11 +25,11 @@ public class TagsTest extends BaseTestMod { } @GameTest - public static void cobble_in_legacy(GameTestHelper helper) throws ReflectiveOperationException { + public static void cobble_in_common(GameTestHelper helper) throws ReflectiveOperationException { var cobble = new ItemStack(Items.COBBLESTONE); - var forgeCobbleTag = ItemTags.create(Identifier.fromNamespaceAndPath("forge", "cobblestone")); - boolean isCobble = cobble.is(forgeCobbleTag); - helper.assertTrue(isCobble, forgeCobbleTag + " is missing " + Items.COBBLESTONE); + var commonCobbleTag = Tags.Items.COBBLESTONES; + boolean isCobble = cobble.is(commonCobbleTag); + helper.assertTrue(isCobble, commonCobbleTag + " is missing " + Items.COBBLESTONE); helper.succeed(); } } diff --git a/src/test/java/net/minecraftforge/debug/gameplay/item/PreventItemDamageTest.java b/src/test/java/net/minecraftforge/debug/gameplay/item/PreventItemDamageTest.java index 4d43654182..fea2567fb5 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/item/PreventItemDamageTest.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/item/PreventItemDamageTest.java @@ -144,14 +144,14 @@ public class PreventItemDamageTest extends BaseTestMod { .setId(ITEMS.key("fake_shield")) .durability(10) .equippableUnswappable(EquipmentSlot.OFFHAND) - .component( + .delayedComponent( DataComponents.BLOCKS_ATTACKS, - new BlocksAttacks( + context -> new BlocksAttacks( 0F, 0F, List.of(new BlocksAttacks.DamageReduction(360.0F, Optional.empty(), 0.0F, 1.0F)), new BlocksAttacks.ItemDamageFunction(3.0F, 1.0F, 1.0F), - Optional.of(DamageTypeTags.BYPASSES_SHIELD), + Optional.of(context.getOrThrow(DamageTypeTags.BYPASSES_SHIELD)), Optional.of(SoundEvents.SHIELD_BLOCK), Optional.of(SoundEvents.SHIELD_BREAK) ) diff --git a/src/test/java/net/minecraftforge/debug/gameplay/item/ShearsBehaviorTest.java b/src/test/java/net/minecraftforge/debug/gameplay/item/ShearsBehaviorTest.java index d2317dec95..e7b7276abb 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/item/ShearsBehaviorTest.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/item/ShearsBehaviorTest.java @@ -17,6 +17,7 @@ import net.minecraft.world.item.Items; import net.minecraft.world.item.ShearsItem; import net.minecraft.world.level.GameType; import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.phys.Vec3; import net.minecraftforge.common.ToolAction; import net.minecraftforge.common.ToolActions; import net.minecraftforge.fml.common.Mod; @@ -64,7 +65,7 @@ public class ShearsBehaviorTest extends BaseTestMod { var player = helper.makeMockPlayer(GameType.SURVIVAL); var shears = CUSTOM_SHEARS_HARVEST_ITEM.get().getDefaultInstance(); player.setItemInHand(InteractionHand.MAIN_HAND, shears); - var result = player.interactOn(cow, InteractionHand.MAIN_HAND); + var result = player.interactOn(cow, InteractionHand.MAIN_HAND, Vec3.ZERO); // assert helper.assertTrue(result.consumesAction(), "Using custom shears on leashed cow should result in consume action"); @@ -92,7 +93,7 @@ public class ShearsBehaviorTest extends BaseTestMod { var player = helper.makeMockPlayer(GameType.SURVIVAL); var shears = CUSTOM_SHEARS_HARVEST_ITEM.get().getDefaultInstance(); player.setItemInHand(InteractionHand.MAIN_HAND, shears); - var result = player.interactOn(knot, InteractionHand.MAIN_HAND); + var result = player.interactOn(knot, InteractionHand.MAIN_HAND, Vec3.ZERO); // assert helper.assertTrue(result.consumesAction(), "Using custom shears on leash knot should result in consume action"); @@ -116,7 +117,7 @@ public class ShearsBehaviorTest extends BaseTestMod { var player = helper.makeMockPlayer(GameType.SURVIVAL); var shears = CUSTOM_SHEARS_ITEM.get().getDefaultInstance(); player.setItemInHand(InteractionHand.MAIN_HAND, shears); - var result = player.interactOn(golem, InteractionHand.MAIN_HAND); + var result = player.interactOn(golem, InteractionHand.MAIN_HAND, Vec3.ZERO); // assert helper.assertTrue(result.consumesAction(), "Using custom shears on copper golem should result in consume action"); diff --git a/src/test/java/net/minecraftforge/debug/gameplay/level/ForcedChunkLoadingTest.java b/src/test/java/net/minecraftforge/debug/gameplay/level/ForcedChunkLoadingTest.java index 4c1d2623a5..49c6891eb2 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/level/ForcedChunkLoadingTest.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/level/ForcedChunkLoadingTest.java @@ -44,7 +44,7 @@ public class ForcedChunkLoadingTest extends BaseTestMod { chunk = level.getChunk(origin.offset(x, 0, z)); // If the chunk is already ticking, we can't force it - chunk = chunkSource.isPositionTicking(chunk.getPos().toLong()) ? null : chunk; + chunk = chunkSource.isPositionTicking(chunk.getPos().pack()) ? null : chunk; } if (chunk == null) { @@ -55,15 +55,15 @@ public class ForcedChunkLoadingTest extends BaseTestMod { } var pos = chunk.getPos(); - var posLong = pos.toLong(); + var posLong = pos.pack(); helper.say("Attempting to force far away chunk: " + pos, ChatFormatting.YELLOW); chunkSource.updateChunkForced(pos, true); helper.runAfterDelay(20, () -> { helper.assertTrue(chunkSource.chunkMap.getDistanceManager().shouldForceTicks(posLong), "Chunk is not ticketed as a force loaded chunk"); - helper.assertTrue(chunkSource.chunkMap.getDistanceManager().inEntityTickingRange(pos.toLong()), "Forced chunk cannot tick entities"); - helper.assertTrue(chunkSource.chunkMap.getDistanceManager().inBlockTickingRange(pos.toLong()), "Forced chunk cannot tick blocks"); - helper.assertTrue(chunkSource.hasChunk(pos.x, pos.z), "Chunk is not loaded despite being ticketed as a force loaded chunk"); + helper.assertTrue(chunkSource.chunkMap.getDistanceManager().inEntityTickingRange(pos.pack()), "Forced chunk cannot tick entities"); + helper.assertTrue(chunkSource.chunkMap.getDistanceManager().inBlockTickingRange(pos.pack()), "Forced chunk cannot tick blocks"); + helper.assertTrue(chunkSource.hasChunk(pos.x(), pos.z()), "Chunk is not loaded despite being ticketed as a force loaded chunk"); helper.succeed(); }); } diff --git a/src/test/java/net/minecraftforge/debug/gameplay/level/TrySleepTest.java b/src/test/java/net/minecraftforge/debug/gameplay/level/TrySleepTest.java index 3df6ee9e01..4252c3c7db 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/level/TrySleepTest.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/level/TrySleepTest.java @@ -7,10 +7,11 @@ package net.minecraftforge.debug.gameplay.level; import net.minecraft.core.BlockPos; import net.minecraft.gametest.framework.GameTestHelper; -import net.minecraft.world.attribute.EnvironmentAttribute; -import net.minecraft.world.attribute.EnvironmentAttributes; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.clock.ClockTimeMarker; +import net.minecraft.world.clock.ClockTimeMarkers; +import net.minecraft.world.clock.WorldClocks; import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.monster.Slime; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.GameType; import net.minecraft.world.level.block.BedBlock; @@ -26,8 +27,6 @@ import net.minecraftforge.test.BaseTestMod; @Mod(TrySleepTest.MOD_ID) public class TrySleepTest extends BaseTestMod { static final String MOD_ID = "try_sleep"; - static final long NIGHT = 13000; - static final long DAY = 0; public TrySleepTest(FMLJavaModLoadingContext context) { super(context, false, false); @@ -39,14 +38,14 @@ public class TrySleepTest extends BaseTestMod { var bed = putBed(helper); helper.setAndAssertBlock(bed.above(), Blocks.STONE); - setTimeAndTest(helper, NIGHT, bed, player, false, "Player was able to sleep in an obstructed bed."); + setTimeAndTest(helper, ClockTimeMarkers.NIGHT, bed, player, false, "Player was able to sleep in an obstructed bed."); } @GameTest public static void sleep_daytime(GameTestHelper helper) { var player = helper.makeMockServerPlayer(GameType.SURVIVAL); var bed = putBed(helper); - setTimeAndTest(helper, DAY, bed, player, false, "Player was able to sleep during daytime."); + setTimeAndTest(helper, ClockTimeMarkers.DAY, bed, player, false, "Player was able to sleep during daytime."); } @GameTest @@ -54,14 +53,14 @@ public class TrySleepTest extends BaseTestMod { var player = helper.makeMockServerPlayer(GameType.SURVIVAL); var bed = putBed(helper); helper.spawn(EntityType.ZOMBIE, bed.east()); - setTimeAndTest(helper, NIGHT, bed, player, false, "Player was able to sleep in an unsafe bed."); + setTimeAndTest(helper, ClockTimeMarkers.NIGHT, bed, player, false, "Player was able to sleep in an unsafe bed."); } @GameTest public static void sleep_normally(GameTestHelper helper) { var player = helper.makeMockServerPlayer(GameType.SURVIVAL); var bed = putBed(helper); - setTimeAndTest(helper, NIGHT, bed, player, true, "Player was not able to sleep. There might be a slime or something causing this to fail."); + setTimeAndTest(helper, ClockTimeMarkers.NIGHT, bed, player, true, "Player was not able to sleep. There might be a slime or something causing this to fail."); } private static BlockPos putBed(GameTestHelper helper) { @@ -72,14 +71,17 @@ public class TrySleepTest extends BaseTestMod { return mid; } - private static void setTimeAndTest(GameTestHelper helper, long time, BlockPos bed, Player player, boolean shouldBeSleeping, String err) { - var origTime = helper.getLevel().getDayTime(); + private static void setTimeAndTest(GameTestHelper helper, ResourceKey time, BlockPos bed, Player player, boolean shouldBeSleeping, String err) { + var manager = helper.getLevel().clockManager(); + var overworld = helper.getLevel().registryAccess().getOrThrow(WorldClocks.OVERWORLD); + var origTime = manager.getTotalTicks(overworld); + player.setPos(helper.absolutePos(bed).getCenter()); - helper.getLevel().setDayTime(time); + manager.moveToTimeMarker(overworld, time); helper.getLevel().tick(() -> true); helper.useBlock(bed, player); var sleep = player.isSleeping(); - helper.getLevel().setDayTime(origTime); + manager.setTotalTicks(overworld, origTime); helper.assertTrue(sleep == shouldBeSleeping, err); helper.succeed(); } diff --git a/src/test/java/net/minecraftforge/debug/gameplay/loot/GlobalLootModifiersTest.java b/src/test/java/net/minecraftforge/debug/gameplay/loot/GlobalLootModifiersTest.java index 326b0f10fc..3d8449d36d 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/loot/GlobalLootModifiersTest.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/loot/GlobalLootModifiersTest.java @@ -308,12 +308,11 @@ public class GlobalLootModifiersTest extends BaseTestMod { private static ItemStack smelt(ItemStack stack, LootContext context) { var mgr = context.getLevel().recipeAccess(); - var reg = context.getLevel().registryAccess(); var inv = new SingleRecipeInput(stack); return mgr .getRecipeFor(RecipeType.SMELTING, inv, context.getLevel()) .map(holder -> holder.value()) - .map(recipe -> recipe.assemble(inv, reg)) + .map(recipe -> recipe.assemble(inv)) .filter(itemStack -> !itemStack.isEmpty()) .map(itemStack -> ItemHandlerHelper.copyStackWithSize(itemStack, stack.getCount() * itemStack.getCount())) .orElse(stack); @@ -347,8 +346,8 @@ public class GlobalLootModifiersTest extends BaseTestMod { //return early if silk-touch is already applied (otherwise we'll get stuck in an infinite loop). var silk = context.getLevel().holderLookup(Registries.ENCHANTMENT).getOrThrow(Enchantments.SILK_TOUCH); var silkLevel = EnchantmentHelper.getItemEnchantmentLevel(silk, ctxTool); - if (ctxTool == null || ctxTool.isEmpty() || silkLevel > 0) return generatedLoot; - var fakeTool = ctxTool.copy(); + if (ctxTool == null || ctxTool.count() == 0 || silkLevel > 0) return generatedLoot; + var fakeTool = ((ItemStack)ctxTool).copy(); fakeTool.enchant(silk, 1); var params = new LootParams.Builder(context.getParams()) .withParameter(LootContextParams.TOOL, fakeTool) diff --git a/src/test/java/net/minecraftforge/debug/gameplay/villager/VillagerTypeTestMod.java b/src/test/java/net/minecraftforge/debug/gameplay/villager/VillagerTypeTestMod.java index cad9c3f6f2..2aa89ae664 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/villager/VillagerTypeTestMod.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/villager/VillagerTypeTestMod.java @@ -10,11 +10,7 @@ import net.minecraft.core.RegistryAccess; import net.minecraft.core.registries.Registries; import net.minecraft.gametest.framework.GameTestHelper; import net.minecraft.network.chat.Component; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.npc.villager.Villager; -import net.minecraft.world.entity.npc.villager.VillagerTrades; import net.minecraft.world.entity.npc.villager.VillagerType; -import net.minecraft.world.item.Items; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biomes; import net.minecraftforge.fml.common.Mod; @@ -26,8 +22,6 @@ import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.RegistryObject; import net.minecraftforge.test.BaseTestMod; -import java.util.Map; - @GameTestNamespace("forge") @Mod(VillagerTypeTestMod.MOD_ID) public class VillagerTypeTestMod extends BaseTestMod { @@ -59,24 +53,4 @@ public class VillagerTypeTestMod extends BaseTestMod { helper.succeed(); } - - /** Test verifies NPE not thrown when looking up a villager type in the trade that doesn't contain that type.*/ - @GameTest - public static void emeralds_for_villager_type(GameTestHelper helper) { - var trade = new VillagerTrades.EmeraldsForVillagerTypeItem(1, 12, 30, Map.of(TEST_VILLAGER_TYPE.getKey(), Items.DIRT)); - var rnd = helper.getLevel().getRandom(); - - // Should be a successful trade for dirt for our test villager - var test = new Villager(EntityType.VILLAGER, helper.getLevel(), TEST_VILLAGER_TYPE.getKey()); - var test_offer = trade.getOffer(helper.getLevel(), test, rnd); - helper.assertFalse(test_offer == null, "Failed to retreive trade value for test profession"); - helper.assertValueEqual(test_offer.getItemCostA().itemStack().getItem(), Items.DIRT, Component.literal("Offer did not return the expected item")); - - var plains = new Villager(EntityType.VILLAGER, helper.getLevel(), VillagerType.PLAINS); - // This will NPE on unpatched code, we need to test that it returns null correctly - var plains_offer = trade.getOffer(helper.getLevel(), plains, rnd); - helper.assertTrue(plains_offer == null, "Offer should not be available for a plains villager"); - - helper.succeed(); - } } diff --git a/src/test/java/net/minecraftforge/test/BaseTestMod.java b/src/test/java/net/minecraftforge/test/BaseTestMod.java index 06eb401f08..23721ee51d 100644 --- a/src/test/java/net/minecraftforge/test/BaseTestMod.java +++ b/src/test/java/net/minecraftforge/test/BaseTestMod.java @@ -223,7 +223,7 @@ public abstract class BaseTestMod { var rdata = entry.getValue().data(); var env = envs.getOrThrow(ResourceKey.create(Registries.TEST_ENVIRONMENT, rdata.environment())); - var edata = new TestData>( + var edata = new TestData>>( env, rdata.structure(), rdata.maxTicks(), @@ -233,7 +233,8 @@ public abstract class BaseTestMod { rdata.manualOnly(), rdata.maxAttempts(), rdata.requiredSuccesses(), - rdata.skyAccess() + rdata.skyAccess(), + rdata.padding() ); var funcKey = ResourceKey.create(Registries.TEST_FUNCTION, entry.getKey()); diff --git a/src/test_old/java/net/minecraftforge/debug/AddPackFinderEventTest.java b/src/test_old/java/net/minecraftforge/debug/AddPackFinderEventTest.java index 6e09b20280..310e76c958 100644 --- a/src/test_old/java/net/minecraftforge/debug/AddPackFinderEventTest.java +++ b/src/test_old/java/net/minecraftforge/debug/AddPackFinderEventTest.java @@ -31,7 +31,7 @@ public class AddPackFinderEventTest { @SubscribeEvent public void addPackFinders(AddPackFindersEvent event) { if (event.getPackType() == PackType.CLIENT_RESOURCES) { - var resourcePath = ModList.get().getModFileById(MODID).getFile().findResource("test_nested_resource_pack"); + var resourcePath = ModList.getModFileById(MODID).getFile().findResource("test_nested_resource_pack"); var supplier = new PathResourcesSupplier(resourcePath, false); var pack = Pack.readMetaAndCreate("builtin/add_pack_finders_test", Component.literal("display name"), false, supplier, PackType.CLIENT_RESOURCES, Pack.Position.BOTTOM, PackSource.BUILT_IN); event.addRepositorySource((packConsumer) -> packConsumer.accept(pack));