From 5259a5a7d88d87c7b8065e379dc0a84d6b53a4d5 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Sat, 18 Apr 2026 14:10:09 +0800 Subject: [PATCH 01/60] fix: empty name in TagField annotation --- src/main/java/cam72cam/mod/entity/sync/EntitySync.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/cam72cam/mod/entity/sync/EntitySync.java b/src/main/java/cam72cam/mod/entity/sync/EntitySync.java index 68af450ae..c58b9f71f 100644 --- a/src/main/java/cam72cam/mod/entity/sync/EntitySync.java +++ b/src/main/java/cam72cam/mod/entity/sync/EntitySync.java @@ -63,13 +63,16 @@ public void send() throws SerializationException { .collect(Object2IntOpenHashMap::new, (m, f) -> { TagSync tag = f.getAnnotation(TagSync.class); - TagField tagField = f.getAnnotation(TagField.class); + String name = f.getAnnotation(TagField.class).value(); + if("".equals(name)) { + name = f.getName(); + } Class type = f.getType(); if (type == float.class || type == Float.class) { - m.put(tagField.value(), Math.max(0, Math.min(tag.floatPrecision(), 8))); + m.put(name, Math.max(0, Math.min(tag.floatPrecision(), 8))); } else if (type == double.class || type == Double.class) { - m.put(tagField.value(), Math.max(0, Math.min(tag.doublePrecision(), 8))); + m.put(name, Math.max(0, Math.min(tag.doublePrecision(), 8))); } }, Object2IntOpenHashMap::putAll); From e5519691f8c0cfcf0fa743d327f02787b90d51fd Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Fri, 24 Apr 2026 18:54:37 +0800 Subject: [PATCH 02/60] ref: use DirectDraw to draw sprite --- .../java/cam72cam/mod/render/SpriteSheet.java | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/src/main/java/cam72cam/mod/render/SpriteSheet.java b/src/main/java/cam72cam/mod/render/SpriteSheet.java index 9c9fce5c9..3a2390c69 100644 --- a/src/main/java/cam72cam/mod/render/SpriteSheet.java +++ b/src/main/java/cam72cam/mod/render/SpriteSheet.java @@ -1,5 +1,6 @@ package cam72cam.mod.render; +import cam72cam.mod.render.opengl.DirectDraw; import cam72cam.mod.render.opengl.RenderContext; import cam72cam.mod.render.opengl.RenderState; import cam72cam.mod.render.opengl.Texture; @@ -50,7 +51,7 @@ private void allocateSheet() { /** Allocate a slot in the sheet and write pixels to it */ public void setSprite(Identifier id, ByteBuffer pixels) { if (!sprites.containsKey(id)) { - if (unallocated.size() == 0) { + if (unallocated.isEmpty()) { allocateSheet(); } sprites.put(id, unallocated.remove(0)); @@ -72,19 +73,12 @@ public void renderSprite(Identifier id) { .texture(Texture.wrap(sprite.texID)) .rotate(180, 1, 0, 0) .translate(0, -1, 0); - try (With ctx = RenderContext.apply(state)) { - GL11.glBegin(GL11.GL_QUADS); - GL11.glColor4f(1, 1, 1, 1); - GL11.glTexCoord2f(sprite.uMin, sprite.vMin); - GL11.glVertex3f(0, 0, 0); - GL11.glTexCoord2f(sprite.uMin, sprite.vMax); - GL11.glVertex3f(0, 1, 0); - GL11.glTexCoord2f(sprite.uMax, sprite.vMax); - GL11.glVertex3f(1, 1, 0); - GL11.glTexCoord2f(sprite.uMax, sprite.vMin); - GL11.glVertex3f(1, 0, 0); - GL11.glEnd(); - }; + DirectDraw buffer = new DirectDraw(); + buffer.vertex(0, 0, 0).color(1, 1, 1, 1).uv(sprite.uMin, sprite.vMin); + buffer.vertex(0, 1, 0).color(1, 1, 1, 1).uv(sprite.uMin, sprite.vMax); + buffer.vertex(1, 1, 0).color(1, 1, 1, 1).uv(sprite.uMax, sprite.vMax); + buffer.vertex(1, 0, 0).color(1, 1, 1, 1).uv(sprite.uMax, sprite.vMin); + buffer.draw(state); } /** Remove a sprite from the sheet (does not reduce used GPU memory yet) */ From 99e792dafe95ca04b9e17991d1a56c9c60c5f4c0 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Tue, 12 May 2026 21:37:03 +0800 Subject: [PATCH 03/60] fix: re-apply scissor params --- .../java/cam72cam/mod/render/opengl/RenderContext.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/cam72cam/mod/render/opengl/RenderContext.java b/src/main/java/cam72cam/mod/render/opengl/RenderContext.java index 4c5c2a848..0420cd55a 100644 --- a/src/main/java/cam72cam/mod/render/opengl/RenderContext.java +++ b/src/main/java/cam72cam/mod/render/opengl/RenderContext.java @@ -14,12 +14,14 @@ import util.Matrix4; import java.nio.FloatBuffer; +import java.nio.IntBuffer; import java.util.*; import static cam72cam.mod.render.opengl.Texture.NO_TEXTURE; public class RenderContext { private static FloatBuffer fourFloatBuffer; + private static IntBuffer fourIntBuffer; private RenderContext() { } @@ -234,6 +236,14 @@ public static With apply(RenderState state) { int width = (int) state.scissor_range.getWidth() * scaleFactor; int height = (int) state.scissor_range.getHeight() * scaleFactor; + if (fourIntBuffer == null) { + fourIntBuffer = GLAllocation.createDirectIntBuffer(16); + } + fourIntBuffer.position(0); + GL11.glGetInteger(GL11.GL_SCISSOR_BOX, fourIntBuffer); + int[] oldScissor = new int[]{fourIntBuffer.get(0), fourIntBuffer.get(1), fourIntBuffer.get(2), fourIntBuffer.get(3)}; + restore.add(() -> GL11.glScissor(oldScissor[0], oldScissor[1], oldScissor[2], oldScissor[3])); + //We set origin point at Top-Left corner but OpenGL takes Bottom-Left corner, so wraps y GL11.glScissor(x, screenHeight - y - height, width, height); } From 6a2deb964706dc731c2692691e366356e76121c4 Mon Sep 17 00:00:00 2001 From: Angelina Michalek Date: Sat, 16 May 2026 21:22:12 -0400 Subject: [PATCH 04/60] Convert to MinecraftForge 1.21.1 (buildscripts) --- AUTHORS | 1 + build.gradle | 254 ++++++++---------- gradle.properties | 14 +- gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle | 3 + .../resources/META-INF/accesstransformer.cfg | 6 +- src/main/resources/META-INF/mods.toml | 28 ++ .../resources/META-INF/neoforge.mods.toml | 36 --- .../mixins.feat.universalmodcore.json | 4 +- 9 files changed, 164 insertions(+), 184 deletions(-) create mode 100644 src/main/resources/META-INF/mods.toml delete mode 100644 src/main/resources/META-INF/neoforge.mods.toml diff --git a/AUTHORS b/AUTHORS index 70ab864b2..48411a59c 100644 --- a/AUTHORS +++ b/AUTHORS @@ -7,3 +7,4 @@ Benjamin Plain (bplainia) Jacob Hayes (tigerbird1) Milan Damen (milandamen) Daniel Schmidt (Danielxs01) +Anthony/Angelina Michalek (Codetoil) \ No newline at end of file diff --git a/build.gradle b/build.gradle index 55ee450de..8bec24103 100644 --- a/build.gradle +++ b/build.gradle @@ -1,29 +1,10 @@ -buildscript { - repositories { - maven { url "https://maven.neoforged.net/releases" } - maven { url "https://plugins.gradle.org/m2/" } - maven { url 'https://repo.spongepowered.org/maven' } - mavenCentral() - } - dependencies { - classpath group: 'net.neoforged.gradle', name: 'userdev', version: '7.1.11' - classpath group: 'net.neoforged.gradle', name: 'common', version: '7.1.11' - classpath "com.gradleup.shadow:shadow-gradle-plugin:9.2.2" - } -} - -apply plugin: 'net.neoforged.gradle.userdev' -apply plugin: 'net.neoforged.gradle.common' -//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup. -apply plugin: 'eclipse' -apply plugin: 'maven-publish' -apply plugin: 'com.gradleup.shadow' - -configurations { - shade - implementation.extendsFrom shade - minecraftLibrary - implementation.extendsFrom minecraftLibrary +plugins { + id 'java' + id 'idea' + id 'eclipse' + id 'maven-publish' + id 'net.minecraftforge.gradle' version '[7.0.23,8.0)' + id 'net.minecraftforge.jarjar' version '0.2.3' } java { @@ -44,85 +25,100 @@ if (!"release".equalsIgnoreCase(System.getProperty("target"))) { umcVersion += "-unknown" } } -version = "1.21.1-neoforge-" + umcVersion +version = "1.21.1-forge-" + umcVersion group = "cam72cam.universalmodcore" // http://maven.apache.org/guides/mini/guide-naming-conventions.html -archivesBaseName = "UniversalModCore" +base.archivesName = "UniversalModCore" java.toolchain.languageVersion = JavaLanguageVersion.of(21) println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + '(' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch')) -// Default run configurations. -// These can be tweaked, removed, or duplicated as needed. -runs { - // applies to all the run configs below - configureEach { - //Enable mixin-ed dependency in deobfuscated environment - systemProperty "mixin.env.remapRefMap", "true" - systemProperty "mixin.env.refMapRemappingFile", "${projectDir}/build/createSrgToMcp/output.srg" - - systemProperty "mixin.debug.verbose", "true" - systemProperty "mixin.debug.export", "true" - // Recommended logging data for a userdev environment - // The markers can be added/remove as needed separated by commas. - // "SCAN": For mods scan. - // "REGISTRIES": For firing of registry events. - // "REGISTRYDUMP": For getting the contents of all registries. - systemProperty 'forge.logging.markers', 'REGISTRIES' - - // Recommended logging level for the console - // You can set various levels here. - // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels - systemProperty 'forge.logging.console.level', 'debug' - - dependencies { - runtime project.configurations.minecraftLibrary +minecraft { + mappings channel: "official", version: "1.21.1" + accessTransformer = true + + runs { + // applies to all the run configs below + configureEach { + workingDir.convention layout.projectDirectory.dir('run') + // Mixin requires either specifying the config via command line, or in the Manifest + args "--mixin.config=universalmodcore.feat.mixins.json", "--mixin.config=universalmodcore.fix.mixins.json" + + systemProperty "mixin.debug.verbose", "true" + systemProperty "mixin.debug.export", "true" + // Recommended logging data for a userdev environment + // The markers can be added/remove as needed separated by commas. + // "SCAN": For mods scan. + // "REGISTRIES": For firing of registry events. + // "REGISTRYDUMP": For getting the contents of all registries. + systemProperty 'forge.logging.markers', 'REGISTRIES' + + // Recommended logging level for the console + // You can set various levels here. + // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels + systemProperty 'forge.logging.console.level', 'debug' } - modSource project.sourceSets.main - } - - client { - // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. - systemProperty 'neoforge.enabledGameTestNamespaces', 'universalmodcore' - } + register('client') { + // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. + systemProperty 'forge.enabledGameTestNamespaces', 'universalmodcore' + } - server { - systemProperty 'neoforge.enabledGameTestNamespaces', 'universalmodcore' - argument '--nogui' - } + register('server') { + systemProperty 'forge.enabledGameTestNamespaces', 'universalmodcore' + args '--nogui' + } - // This run config launches GameTestServer and runs all registered gametests, then exits. - // By default, the server will crash when no gametests are provided. - // The gametest system is also enabled by default for other run configs under the /test command. - gameTestServer { - systemProperty 'neoforge.enabledGameTestNamespaces', 'universalmodcore' - } + // This run config launches GameTestServer and runs all registered gametests, then exits. + // By default, the server will crash when no gametests are provided. + // The gametest system is also enabled by default for other run configs under the /test command. + register('gameTestServer') { + systemProperty 'forge.enabledGameTestNamespaces', 'universalmodcore' + } - data { - // example of overriding the workingDirectory set in configureEach above, uncomment if you want to use it - // workingDirectory project.file('run-data') + register('data') { + // example of overriding the workingDirectory set in configureEach above, uncomment if you want to use it + // workingDirectory project.file('run-data') - // Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources. - arguments.addAll '--mod', 'universalmodcore', '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath() + // Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources. + args '--mod', 'universalmodcore', '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath() + } } } -accessTransformers { - file 'src/main/resources/META-INF/accesstransformer.cfg' -} - repositories { mavenCentral() } -sourceSets.main.resources { srcDir 'src/generated/resources' } +sourceSets.main.resources { srcDir layout.projectDirectory.dir('src/generated/resources') } + +// This methods registers jarJar for the default jar task. +// The closure allows you to configure the task, instead of needing to do this: +// tasks.named('jarJar', net.minecraftforge.jarjar.gradle.JarJar) +jarJar.register() { + archiveClassifier = null +} repositories { - maven { url = "https://repo.spongepowered.org/maven" } + minecraft.mavenizer(it) + maven fg.forgeMaven + maven fg.minecraftLibsMaven + exclusiveContent { + forRepository { + maven { + name = 'Sponge' + url = 'https://repo.spongepowered.org/repository/maven-public' + } + } + filter { + includeGroupAndSubgroups('org.spongepowered') + } + } + mavenCentral() + mavenLocal() } dependencies { - implementation "net.neoforged:neoforge:21.1.216" + implementation minecraft.dependency("net.minecraftforge:forge:1.21.1-52.1.14") // you may put jars on which you depend on in ./libs // or you may define them like so.. //compile "some.group:artifact:version:classifier" @@ -143,13 +139,29 @@ dependencies { // for more info... // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html // http://www.gradle.org/docs/current/userguide/dependency_management.html -// annotationProcessor('org.spongepowered:mixin:0.8.3:processor') -// annotationProcessor('io.github.llamalad7:mixinextras-common:0.5.0') + compileOnly(annotationProcessor('io.github.llamalad7:mixinextras-common:0.5.0')) + implementation(jarJar('io.github.llamalad7:mixinextras-forge:0.5.0')) { + jarJar.configure(it) { + module { + group = 'io.github.llamalad7' + name = 'mixinextras' + } + range = "[0.5.0,)" + } + } //testImplementation ('junit:junit:4.13') testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.7.2' - minecraftLibrary(shade group: 'javax.vecmath', name: 'vecmath', version: '1.5.2') + implementation(jarJar(group: 'javax.vecmath', name: 'vecmath', version: '1.5.2')) { + jarJar.configure(it) { + module { + group = 'javax.vecmath' + name = 'vecmath' + } + version = "1.5.2" + } + } // implementation(shade group: 'at.yawk.lz4', name: 'lz4-java', version: '1.10.2') } @@ -167,31 +179,8 @@ dependencies { attributesSchema { attribute(mappingsAttribute) } - - //Iris - implementation "curse.maven:sodium-394468:6382651" - implementation "curse.maven:irisshaders-455508:6661598" - - //Lamb Dynamic Lights - compileOnly("dev.lambdaurora.lambdynamiclights:lambdynamiclights-api:4.8.7+1.21.1") { - attributes { - attribute(mappingsAttribute, "mojmap") - } - } - runtimeOnly "curse.maven:lambdynamiclights-393442:7306458" } -//mixin { -// add sourceSets.main, 'mixins.universalmodcore.refmap.json' -// -// config 'mixins.universalmodcore.json' -// -// //Dev environment setup -// debug.verbose = true -// debug.export = true -// dumpTargetOnFailure = true -//} - jar { archiveClassifier = 'slim' manifest { @@ -202,44 +191,21 @@ jar { "Implementation-Title": project.name, "Implementation-Version": umcVersion, "Implementation-Vendor" :"", - "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") + "MixinConfigs" : "universalmodcore.feat.mixins.json, universalmodcore.fix.mixins.json" ]) } } -//No need in Neoforge -//jar.finalizedBy('reobfJar') - -shadowJar { - archiveClassifier = '' - configurations = [project.configurations.shade] - relocate 'javax.vecmath', "${project.group}.shade.javax.vecmath" - //Don't do this -// relocate 'org.spongepowered', "${project.group}.shade.org.spongepowered" - duplicatesStrategy = DuplicatesStrategy.EXCLUDE - mergeServiceFiles() -// finalizedBy 'reobfShadowJar' -} - -assemble.dependsOn shadowJar - -//reobf { -// shadowJar {} -//} - test { useJUnit() maxHeapSize = '1G' } publishing { - publications { - mavenJava(MavenPublication) { - artifact jar - artifact shadowJar - artifact sourcesJar - artifactId archivesBaseName - } + publications.register('mavenJava', MavenPublication) { + artifact tasks.named("jar") + artifact tasks.named("jarJar") + artifact tasks.named("sourcesJar") } repositories { maven { @@ -264,3 +230,19 @@ tasks.register('showBuildInfo') { } publish.finalizedBy showBuildInfo + +// IntelliJ no longer downloads javadocs and sources by default, this tells Gradle to force IntelliJ to do it. +idea.module { downloadJavadoc = downloadSources = true } + +eclipse { + // Eclipse no longer downloads javadocs and sources by default, this tells Gradle to force Eclipse to do it. + classpath { downloadJavadoc = downloadSources = true } + + // NOTE: ForgeGradle 7 does not yet support Eclipse run configurations + // Run everytime eclipse builds the code + //autoBuildTasks genEclipseRuns + // Run when importing the project + //synchronizationTasks 'genEclipseRuns' +} + +// NOTE: Merging of source sets is now controlled by the property 'net.minecraftforge.gradle.merge-source-sets' diff --git a/gradle.properties b/gradle.properties index 7d9694b67..b1828365f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,9 @@ -# Sets default memory used for gradle commands. Can be overridden by user or command line properties. -# This is required to provide enough memory for the Minecraft decompilation process. -org.gradle.jvmargs=-Xmx3G -# Forge why you so broken??? -org.gradle.daemon=false +org.gradle.caching=true +org.gradle.parallel=true +org.gradle.configureondemand=true + +org.gradle.configuration-cache=true +org.gradle.configuration-cache.parallel=true +org.gradle.configuration-cache.problems=warn + +net.minecraftforge.gradle.merge-source-sets=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1132f38a5..b13bd40f4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip diff --git a/settings.gradle b/settings.gradle index e69de29bb..3e187fe5a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -0,0 +1,3 @@ +plugins { + id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0' +} \ No newline at end of file diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index 4e70798ef..cac06a698 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -8,10 +8,10 @@ public net.minecraft.client.multiplayer.ClientLevel connection #connection public net.minecraft.client.renderer.GameRenderer renderBuffers #renderBuffers public net.minecraft.client.gui.components.Checkbox (IILnet/minecraft/network/chat/Component;Lnet/minecraft/client/gui/Font;ZLnet/minecraft/client/gui/components/Checkbox$OnValueChange;)V public-f net.minecraft.client.gui.components.AbstractWidget render(Lnet/minecraft/client/gui/GuiGraphics;IIF)V -public net.neoforged.neoforge.common.CreativeModeTabRegistry recalculateItemCreativeModeTabs()V +public net.minecraftforge.common.CreativeModeTabRegistry recalculateItemCreativeModeTabs()V public net.minecraft.client.gui.components.Checkbox (IIILnet/minecraft/network/chat/Component;Lnet/minecraft/client/gui/Font;ZLnet/minecraft/client/gui/components/Checkbox$OnValueChange;)V public net.minecraft.client.renderer.MultiBufferSource$BufferSource startedBuilders -public net.neoforged.neoforge.client.model.ItemLayerModel (Lcom/google/common/collect/ImmutableList;Lit/unimi/dsi/fastutil/ints/Int2ObjectMap;Lit/unimi/dsi/fastutil/ints/Int2ObjectMap;)V +public net.minecraftforge.client.model.ItemLayerModel (Lcom/google/common/collect/ImmutableList;Lit/unimi/dsi/fastutil/ints/Int2ObjectMap;Lit/unimi/dsi/fastutil/ints/Int2ObjectMap;)V public net.minecraft.client.resources.model.ModelManager atlases # atlases public net.minecraft.client.resources.model.ModelManager maxMipmapLevels # maxMipmapLevels public net.minecraft.client.multiplayer.prediction.BlockStatePredictionHandler$ServerVerifiedState @@ -24,6 +24,6 @@ public net.minecraft.world.entity.item.ItemEntity target # target public net.minecraft.world.phys.shapes.VoxelShape (Lnet/minecraft/world/phys/shapes/DiscreteVoxelShape;)V public net.minecraft.world.phys.shapes.VoxelShape shape # shape public net.minecraft.util.math.shapes.VoxelShapeCube (Lnet/minecraft/world/phys/shapes/DiscreteVoxelShape;)V -public net.neoforged.neoforge.common.conditions.ConditionalOps context +public net.minecraftforge.common.conditions.ConditionalOps context public com.mojang.blaze3d.platform.Lighting DIFFUSE_LIGHT_0 public com.mojang.blaze3d.platform.Lighting DIFFUSE_LIGHT_1 \ No newline at end of file diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml new file mode 100644 index 000000000..57aaaf05d --- /dev/null +++ b/src/main/resources/META-INF/mods.toml @@ -0,0 +1,28 @@ +modLoader="javafml" +loaderVersion="[52,)" +issueTrackerURL="https://github.com/TeamOpenIndustry/UniversalModCore/issues" +license="LGPL" + +[[mods]] +modId="universalmodcore" +version="1.2.3" +displayName="Universal Mod Core" +displayURL="https://github.com/TeamOpenIndustry/UniversalModCore" +authors="cam72cam" +description=''' +Universal Mod API (Minecraft version agnostic) +''' + +[[dependencies.universalmodcore]] +modId="forge" +mandatory=true +versionRange="[52.1.14,)" +ordering="NONE" +side="BOTH" + +[[dependencies.universalmodcore]] +modId="minecraft" +mandatory=true +versionRange="[1.21.1]" +ordering="NONE" +side="BOTH" diff --git a/src/main/resources/META-INF/neoforge.mods.toml b/src/main/resources/META-INF/neoforge.mods.toml deleted file mode 100644 index 7bed328e9..000000000 --- a/src/main/resources/META-INF/neoforge.mods.toml +++ /dev/null @@ -1,36 +0,0 @@ -modLoader="javafml" -loaderVersion="[2,)" -issueTrackerURL="https://github.com/TeamOpenIndustry/UniversalModCore/issues" -license="LGPL" - -[[mods]] -modId="universalmodcore" -version="1.2.3" -displayName="Universal Mod Core" -displayURL="https://github.com/TeamOpenIndustry/UniversalModCore" -authors="cam72cam" -description=''' -Universal Mod API (Minecraft version agnostic) -''' - -[[mixins]] -config="mixins.feat.universalmodcore.json" -[[mixins]] -config="mixins.fix.universalmodcore.json" - -[modproperties.universalmodcore."yumi:entrypoints"] -"lambdynlights:initializer" = "cam72cam.mod.render.Light$UMCDynLightInitializer" - -[[dependencies.universalmodcore]] - modId="neoforge" - type='required' - versionRange="[21.1.216,)" - ordering="NONE" - side="BOTH" - -[[dependencies.universalmodcore]] - modId="minecraft" - type='required' - versionRange="[1.21.1]" - ordering="NONE" - side="BOTH" diff --git a/src/main/resources/mixins.feat.universalmodcore.json b/src/main/resources/mixins.feat.universalmodcore.json index c58697fda..b21e57a44 100644 --- a/src/main/resources/mixins.feat.universalmodcore.json +++ b/src/main/resources/mixins.feat.universalmodcore.json @@ -15,8 +15,6 @@ ], "client": [ "data_registry.MixinSpriteResourceLoader", - "global_renderer.MixinRenderGlobal", - "iris_pbr.MixinDeferredWorldRenderingPipeline", - "iris_pbr.MixinNewWorldRenderingPipeline" + "global_renderer.MixinRenderGlobal" ] } From 2730d7aecf887fc7114a6a8693b2e927ec081f98 Mon Sep 17 00:00:00 2001 From: Angelina Michalek Date: Sat, 16 May 2026 23:19:27 -0400 Subject: [PATCH 05/60] Convert to MinecraftForge 1.21.1 (part 1) --- src/main/java/cam72cam/mod/ModCore.java | 34 +++++++++---------- .../java/cam72cam/mod/block/BlockType.java | 1 - .../cam72cam/mod/block/tile/TileEntity.java | 15 ++++---- .../java/cam72cam/mod/config/ConfigFile.java | 2 +- .../java/cam72cam/mod/energy/IEnergy.java | 2 +- src/main/java/cam72cam/mod/entity/Entity.java | 4 +-- .../cam72cam/mod/entity/EntityRegistry.java | 4 +-- .../cam72cam/mod/entity/ModdedEntity.java | 13 +++---- src/main/java/cam72cam/mod/entity/Player.java | 6 ++-- .../java/cam72cam/mod/entity/SeatEntity.java | 11 +++--- .../java/cam72cam/mod/event/ClientEvents.java | 14 ++++---- .../java/cam72cam/mod/event/CommonEvents.java | 28 +++++++-------- .../mod/event/platform/LoadDatapackEvent.java | 4 +-- .../platform/RegisterAdvancementEvent.java | 4 +-- .../event/platform/RegisterBlockTagEvent.java | 4 +-- .../platform/RegisterDamageTypeEvent.java | 4 +-- .../event/platform/RegisterItemTagEvent.java | 4 +-- .../event/platform/RegisterRecipeEvent.java | 4 +-- .../platform/RegisterTextureSpriteEvent.java | 4 +-- .../java/cam72cam/mod/fluid/FluidStack.java | 6 ++-- .../java/cam72cam/mod/fluid/FluidTank.java | 10 +++--- src/main/java/cam72cam/mod/fluid/ITank.java | 10 +++--- .../java/cam72cam/mod/gui/GuiRegistry.java | 8 ++--- src/main/java/cam72cam/mod/gui/Progress.java | 2 +- .../gui/container/ServerContainerBuilder.java | 2 +- .../cam72cam/mod/gui/helpers/GUIHelpers.java | 2 +- .../mod/gui/helpers/GuiScrollBar.java | 4 +-- .../mod/gui/screen/ScreenBuilder.java | 6 ++-- .../java/cam72cam/mod/gui/screen/Slider.java | 8 ++--- .../java/cam72cam/mod/input/Keyboard.java | 6 ++-- src/main/java/cam72cam/mod/input/Mouse.java | 4 +-- .../java/cam72cam/mod/item/CreativeTab.java | 4 +-- .../java/cam72cam/mod/item/CustomItem.java | 6 ++-- src/main/java/cam72cam/mod/item/Fuzzy.java | 6 ++-- .../java/cam72cam/mod/item/IInventory.java | 2 +- .../java/cam72cam/mod/item/ItemStack.java | 2 +- .../cam72cam/mod/item/ItemStackHandler.java | 4 +-- src/main/java/cam72cam/mod/item/ToolType.java | 14 ++++---- .../feat/data_registry/MixinAdvancement.java | 4 +-- .../data_registry/MixinMinecraftServer.java | 4 +-- .../data_registry/MixinRecipeManager.java | 4 +-- .../MixinSpriteResourceLoader.java | 3 +- .../data_registry/MixinTagCollection.java | 6 ++-- src/main/java/cam72cam/mod/net/Packet.java | 4 +-- .../cam72cam/mod/render/BakedScaledModel.java | 4 +-- .../java/cam72cam/mod/render/BlockRender.java | 2 +- .../cam72cam/mod/render/GlobalRender.java | 1 - .../java/cam72cam/mod/render/ItemRender.java | 7 ++-- .../mod/render/opengl/RenderState.java | 4 +-- .../cam72cam/mod/resource/BuiltinPack.java | 8 ++--- src/main/java/cam72cam/mod/resource/Data.java | 4 +-- .../java/cam72cam/mod/text/PlayerMessage.java | 4 +-- .../cam72cam/mod/util/MinecraftFiles.java | 2 +- .../java/cam72cam/mod/util/RegistryUtil.java | 6 ++-- src/main/java/cam72cam/mod/world/World.java | 16 ++++----- .../src/main/java/PACKAGEPATH/Mod.java | 4 +-- .../cam72cam/mod/model/obj/OBJModelTest.java | 4 +-- 57 files changed, 177 insertions(+), 182 deletions(-) diff --git a/src/main/java/cam72cam/mod/ModCore.java b/src/main/java/cam72cam/mod/ModCore.java index 5ccbdf1db..7811d18fd 100644 --- a/src/main/java/cam72cam/mod/ModCore.java +++ b/src/main/java/cam72cam/mod/ModCore.java @@ -16,21 +16,21 @@ import java.util.*; import net.minecraft.util.Unit; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.bus.api.IEventBus; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; -import net.neoforged.fml.event.lifecycle.FMLLoadCompleteEvent; -import net.neoforged.fml.event.lifecycle.InterModEnqueueEvent; -import net.neoforged.fml.loading.FMLEnvironment; -import net.neoforged.fml.loading.FMLLoader; -import net.neoforged.fml.loading.FMLPaths; -import net.neoforged.neoforge.common.CreativeModeTabRegistry; -import net.neoforged.neoforge.common.NeoForge; -import net.neoforged.neoforge.data.loading.DatagenModLoader; -import net.neoforged.neoforge.event.RegisterCommandsEvent; -import net.neoforged.neoforge.event.server.ServerStartedEvent; -import net.neoforged.neoforge.event.server.ServerStartingEvent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent; +import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; +import net.minecraftforge.fml.loading.FMLEnvironment; +import net.minecraftforge.fml.loading.FMLLoader; +import net.minecraftforge.fml.loading.FMLPaths; +import net.minecraftforge.common.CreativeModeTabRegistry; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.data.loading.DatagenModLoader; +import net.minecraftforge.event.RegisterCommandsEvent; +import net.minecraftforge.event.server.ServerStartedEvent; +import net.minecraftforge.event.server.ServerStartingEvent; import net.minecraft.resources.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -58,7 +58,7 @@ import java.io.IOException; /** UMC Mod, do not touch... */ -@net.neoforged.fml.common.Mod(ModCore.MODID) +@net.minecraftforge.fml.common.Mod(ModCore.MODID) public class ModCore { public static final String MODID = "universalmodcore"; public static final String NAME = "UniversalModCore"; @@ -92,7 +92,7 @@ public ModCore(IEventBus modEventBus, Dist dist) { //FMLJavaModLoadingContext.get().getModEventBus().addListener(this::serverStarted); CommonEvents.Item.CREATIVE_TAB.register(modEventBus); - NeoForge.EVENT_BUS.register(this); + MinecraftForge.EVENT_BUS.register(this); } /** INIT Phase (Forge) */ diff --git a/src/main/java/cam72cam/mod/block/BlockType.java b/src/main/java/cam72cam/mod/block/BlockType.java index cd464d430..e3e4f4828 100644 --- a/src/main/java/cam72cam/mod/block/BlockType.java +++ b/src/main/java/cam72cam/mod/block/BlockType.java @@ -33,7 +33,6 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import net.neoforged.neoforge.capabilities.Capabilities; import javax.annotation.Nullable; diff --git a/src/main/java/cam72cam/mod/block/tile/TileEntity.java b/src/main/java/cam72cam/mod/block/tile/TileEntity.java index 950f9633f..5356b8674 100644 --- a/src/main/java/cam72cam/mod/block/tile/TileEntity.java +++ b/src/main/java/cam72cam/mod/block/tile/TileEntity.java @@ -37,14 +37,13 @@ import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import net.neoforged.neoforge.capabilities.BlockCapability; -import net.neoforged.neoforge.client.model.data.ModelData; -import net.neoforged.neoforge.client.model.data.ModelProperty; -import net.neoforged.neoforge.energy.IEnergyStorage; -import net.neoforged.neoforge.fluids.FluidStack; -import net.neoforged.neoforge.fluids.capability.IFluidHandler; -import net.neoforged.neoforge.items.IItemHandler; -import net.neoforged.neoforge.items.IItemHandlerModifiable; +import net.minecraftforge.client.model.data.ModelData; +import net.minecraftforge.client.model.data.ModelProperty; +import net.minecraftforge.energy.IEnergyStorage; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.IItemHandlerModifiable; import javax.annotation.Nonnull; import javax.annotation.Nullable; diff --git a/src/main/java/cam72cam/mod/config/ConfigFile.java b/src/main/java/cam72cam/mod/config/ConfigFile.java index 8471bd14b..ff1f8199c 100644 --- a/src/main/java/cam72cam/mod/config/ConfigFile.java +++ b/src/main/java/cam72cam/mod/config/ConfigFile.java @@ -1,7 +1,7 @@ package cam72cam.mod.config; import cam72cam.mod.ModCore; -import net.neoforged.fml.loading.FMLPaths; +import net.minecraftforge.fml.loading.FMLPaths; import org.apache.commons.lang3.StringUtils; import java.lang.annotation.Annotation; diff --git a/src/main/java/cam72cam/mod/energy/IEnergy.java b/src/main/java/cam72cam/mod/energy/IEnergy.java index ece965c44..c65e476fb 100644 --- a/src/main/java/cam72cam/mod/energy/IEnergy.java +++ b/src/main/java/cam72cam/mod/energy/IEnergy.java @@ -1,6 +1,6 @@ package cam72cam.mod.energy; -import net.neoforged.neoforge.energy.IEnergyStorage; +import net.minecraftforge.energy.IEnergyStorage; public interface IEnergy { static IEnergy from(IEnergyStorage internal) { diff --git a/src/main/java/cam72cam/mod/entity/Entity.java b/src/main/java/cam72cam/mod/entity/Entity.java index f61eade67..a9273bbed 100644 --- a/src/main/java/cam72cam/mod/entity/Entity.java +++ b/src/main/java/cam72cam/mod/entity/Entity.java @@ -9,7 +9,7 @@ import net.minecraft.world.entity.npc.AbstractVillager; import net.minecraft.world.level.Explosion; import net.minecraft.world.phys.AABB; -import net.neoforged.neoforge.event.EventHooks; +import net.minecraftforge.event.ForgeEventFactory; import java.util.List; import java.util.UUID; @@ -247,7 +247,7 @@ public void directDamage(DamageType type, double damage) { protected void createExplosion(Vec3d pos, float size, boolean damageTerrain) { Explosion explosion = new Explosion(getWorld().internal, this.internal, pos.x, pos.y, pos.z, size, false, damageTerrain ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP); - if (EventHooks.onExplosionStart(getWorld().internal, explosion)) return; + if (ForgeEventFactory.onExplosionStart(getWorld().internal, explosion)) return; explosion.explode(); explosion.finalizeExplosion(true); } diff --git a/src/main/java/cam72cam/mod/entity/EntityRegistry.java b/src/main/java/cam72cam/mod/entity/EntityRegistry.java index 322a1fca9..153915efc 100644 --- a/src/main/java/cam72cam/mod/entity/EntityRegistry.java +++ b/src/main/java/cam72cam/mod/entity/EntityRegistry.java @@ -16,8 +16,8 @@ import net.minecraft.network.chat.Component; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.MobCategory; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import org.apache.commons.lang3.tuple.Pair; import java.util.HashMap; diff --git a/src/main/java/cam72cam/mod/entity/ModdedEntity.java b/src/main/java/cam72cam/mod/entity/ModdedEntity.java index c30b280b4..a3f62412b 100644 --- a/src/main/java/cam72cam/mod/entity/ModdedEntity.java +++ b/src/main/java/cam72cam/mod/entity/ModdedEntity.java @@ -12,6 +12,7 @@ import net.minecraft.core.registries.BuiltInRegistries; import it.unimi.dsi.fastutil.objects.ObjectArraySet; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.resources.ResourceLocation; @@ -24,9 +25,9 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; import net.minecraft.world.phys.AABB; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.api.distmarker.OnlyIn; -import net.neoforged.neoforge.entity.IEntityWithComplexSpawn; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.entity.IEntityAdditionalSpawnData; import org.apache.commons.lang3.tuple.Pair; import java.util.*; @@ -34,7 +35,7 @@ import java.util.stream.Collectors; /** Internal class which extends MC's Entity. Do not use directly */ -public class ModdedEntity extends Entity implements IEntityWithComplexSpawn { +public class ModdedEntity extends Entity implements IEntityAdditionalSpawnData { // Reference to the entity that this is representing private CustomEntity self; @@ -192,7 +193,7 @@ private void save(TagCompound data) { /** @see #load */ @Override - public final void readSpawnData(RegistryFriendlyByteBuf additionalData) { + public final void readSpawnData(FriendlyByteBuf additionalData) { TagCompound data = new TagCompound(additionalData.readNbt()); if (cam72cam.mod.world.World.get(level()) == null) { // This can happen during a sudden disconnect... @@ -207,7 +208,7 @@ public final void readSpawnData(RegistryFriendlyByteBuf additionalData) { } @Override - public final void writeSpawnData(RegistryFriendlyByteBuf buffer) { + public final void writeSpawnData(FriendlyByteBuf buffer) { TagCompound data = new TagCompound(); data.set("sync", self.sync); save(data); diff --git a/src/main/java/cam72cam/mod/entity/Player.java b/src/main/java/cam72cam/mod/entity/Player.java index 41f7aec13..72ca3a8bd 100644 --- a/src/main/java/cam72cam/mod/entity/Player.java +++ b/src/main/java/cam72cam/mod/entity/Player.java @@ -12,9 +12,9 @@ import net.minecraft.world.InteractionHand; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.phys.BlockHitResult; -import net.neoforged.neoforge.server.permission.PermissionAPI; -import net.neoforged.neoforge.server.permission.nodes.PermissionNode; -import net.neoforged.neoforge.server.permission.nodes.PermissionTypes; +import net.minecraftforge.server.permission.PermissionAPI; +import net.minecraftforge.server.permission.nodes.PermissionNode; +import net.minecraftforge.server.permission.nodes.PermissionTypes; import static net.minecraft.world.InteractionHand.MAIN_HAND; import static net.minecraft.world.InteractionHand.OFF_HAND; diff --git a/src/main/java/cam72cam/mod/entity/SeatEntity.java b/src/main/java/cam72cam/mod/entity/SeatEntity.java index 1ded1c631..bf65a6e73 100644 --- a/src/main/java/cam72cam/mod/entity/SeatEntity.java +++ b/src/main/java/cam72cam/mod/entity/SeatEntity.java @@ -6,6 +6,7 @@ import cam72cam.mod.serialization.TagCompound; import cam72cam.mod.world.World; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.syncher.SynchedEntityData; @@ -16,14 +17,14 @@ import net.minecraft.world.entity.MobCategory; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; -import net.neoforged.fml.loading.FMLEnvironment; -import net.neoforged.neoforge.entity.IEntityWithComplexSpawn; +import net.minecraftforge.fml.loading.FMLEnvironment; +import net.minecraftforge.entity.IEntityAdditionalSpawnData; import java.util.List; import java.util.UUID; /** Seat construct to make multiple riders actually work */ -public class SeatEntity extends Entity implements IEntityWithComplexSpawn { +public class SeatEntity extends Entity implements IEntityAdditionalSpawnData { static final ResourceLocation ID = ResourceLocation.tryBuild(ModCore.MODID, "seat"); public static final EntityType TYPE = makeType(); @@ -213,7 +214,7 @@ public cam72cam.mod.entity.Entity getEntityPassenger() { } @Override - public void writeSpawnData(RegistryFriendlyByteBuf buffer) { + public void writeSpawnData(FriendlyByteBuf buffer) { TagCompound data = new TagCompound(); data.setUUID("parent", parent); data.setUUID("passenger", passenger); @@ -221,7 +222,7 @@ public void writeSpawnData(RegistryFriendlyByteBuf buffer) { } @Override - public void readSpawnData(RegistryFriendlyByteBuf additionalData) { + public void readSpawnData(FriendlyByteBuf additionalData) { TagCompound data = new TagCompound(additionalData.readNbt()); parent = data.getUUID("parent"); passenger = data.getUUID("passenger"); diff --git a/src/main/java/cam72cam/mod/event/ClientEvents.java b/src/main/java/cam72cam/mod/event/ClientEvents.java index 1d86d881b..8b36b94a5 100644 --- a/src/main/java/cam72cam/mod/event/ClientEvents.java +++ b/src/main/java/cam72cam/mod/event/ClientEvents.java @@ -17,13 +17,11 @@ import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.RenderType; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.bus.api.ICancellableEvent; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.common.EventBusSubscriber; -import net.neoforged.neoforge.client.event.*; -import net.neoforged.neoforge.client.event.sound.SoundEngineLoadEvent; -import net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsEvent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.client.event.*; +import net.minecraftforge.client.event.sound.SoundEngineLoadEvent; import java.util.function.Consumer; import java.util.function.Function; @@ -128,7 +126,7 @@ private static void onGuiMouse(ScreenEvent event, int x, int y, int btn, MouseAc MouseGuiEvent mevt = new MouseGuiEvent(action, x, y, btn, action == MouseAction.SCROLL ? (int) ((ScreenEvent.MouseScrolled) event).getScrollDeltaY() : 0); if (!MOUSE_GUI.executeCancellable(h -> h.apply(mevt))) { - ((ICancellableEvent)event).setCanceled(true); + event.setCanceled(true); if (action != MouseAction.SCROLL) { // Apparently cancelling this input event only cancels it for the *GUI* handlers, not all input handlers // Therefore we need to track that ourselves. Thanks for changing that from 1.12.2-forge diff --git a/src/main/java/cam72cam/mod/event/CommonEvents.java b/src/main/java/cam72cam/mod/event/CommonEvents.java index 9ec451205..5f25b832c 100644 --- a/src/main/java/cam72cam/mod/event/CommonEvents.java +++ b/src/main/java/cam72cam/mod/event/CommonEvents.java @@ -18,21 +18,19 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.chunk.ChunkAccess; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.common.EventBusSubscriber; -import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; -import net.neoforged.neoforge.event.entity.EntityEvent; -import net.neoforged.neoforge.event.entity.EntityJoinLevelEvent; -import net.neoforged.neoforge.event.level.BlockEvent; -import net.neoforged.neoforge.event.level.ChunkEvent; -import net.neoforged.neoforge.event.level.LevelEvent; -import net.neoforged.neoforge.event.tick.LevelTickEvent; -import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; -import net.neoforged.neoforge.network.registration.PayloadRegistrar; -import net.neoforged.neoforge.registries.DeferredRegister; -import net.neoforged.neoforge.registries.RegisterEvent; -import net.neoforged.neoforge.registries.RegisterEvent.RegisterHelper; -import net.neoforged.neoforge.server.permission.events.PermissionGatherEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent; +import net.minecraftforge.event.entity.EntityEvent; +import net.minecraftforge.event.entity.EntityJoinLevelEvent; +import net.minecraftforge.event.level.BlockEvent; +import net.minecraftforge.event.level.ChunkEvent; +import net.minecraftforge.event.level.LevelEvent; +import net.minecraftforge.event.TickEvent.LevelTickEvent; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.RegisterEvent; +import net.minecraftforge.registries.RegisterEvent.RegisterHelper; +import net.minecraftforge.server.permission.events.PermissionGatherEvent; import java.util.function.Consumer; diff --git a/src/main/java/cam72cam/mod/event/platform/LoadDatapackEvent.java b/src/main/java/cam72cam/mod/event/platform/LoadDatapackEvent.java index 01f659b66..163056af3 100644 --- a/src/main/java/cam72cam/mod/event/platform/LoadDatapackEvent.java +++ b/src/main/java/cam72cam/mod/event/platform/LoadDatapackEvent.java @@ -9,8 +9,8 @@ import net.minecraft.server.packs.repository.PackRepository; import net.minecraft.server.packs.repository.PackSource; import net.minecraft.world.flag.FeatureFlagSet; -import net.neoforged.bus.api.Event; -import net.neoforged.fml.event.IModBusEvent; +import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.fml.event.IModBusEvent; import java.util.List; import java.util.Optional; diff --git a/src/main/java/cam72cam/mod/event/platform/RegisterAdvancementEvent.java b/src/main/java/cam72cam/mod/event/platform/RegisterAdvancementEvent.java index f6fe9e0cf..7200429f6 100644 --- a/src/main/java/cam72cam/mod/event/platform/RegisterAdvancementEvent.java +++ b/src/main/java/cam72cam/mod/event/platform/RegisterAdvancementEvent.java @@ -5,8 +5,8 @@ import net.minecraft.advancements.*; import net.minecraft.advancements.critereon.*; import net.minecraft.resources.ResourceLocation; -import net.neoforged.bus.api.Event; -import net.neoforged.fml.event.IModBusEvent; +import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.fml.event.IModBusEvent; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/cam72cam/mod/event/platform/RegisterBlockTagEvent.java b/src/main/java/cam72cam/mod/event/platform/RegisterBlockTagEvent.java index 2fc8bc31a..586271e1f 100644 --- a/src/main/java/cam72cam/mod/event/platform/RegisterBlockTagEvent.java +++ b/src/main/java/cam72cam/mod/event/platform/RegisterBlockTagEvent.java @@ -6,8 +6,8 @@ import net.minecraft.tags.TagKey; import net.minecraft.tags.TagLoader; import net.minecraft.world.level.block.Block; -import net.neoforged.bus.api.Event; -import net.neoforged.fml.event.IModBusEvent; +import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.fml.event.IModBusEvent; import java.util.ArrayList; import java.util.Collection; diff --git a/src/main/java/cam72cam/mod/event/platform/RegisterDamageTypeEvent.java b/src/main/java/cam72cam/mod/event/platform/RegisterDamageTypeEvent.java index 64183458d..05b711b5f 100644 --- a/src/main/java/cam72cam/mod/event/platform/RegisterDamageTypeEvent.java +++ b/src/main/java/cam72cam/mod/event/platform/RegisterDamageTypeEvent.java @@ -2,8 +2,8 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.Resource; -import net.neoforged.bus.api.Event; -import net.neoforged.fml.event.IModBusEvent; +import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.fml.event.IModBusEvent; import java.util.Map; diff --git a/src/main/java/cam72cam/mod/event/platform/RegisterItemTagEvent.java b/src/main/java/cam72cam/mod/event/platform/RegisterItemTagEvent.java index dec256b10..ca6823e5b 100644 --- a/src/main/java/cam72cam/mod/event/platform/RegisterItemTagEvent.java +++ b/src/main/java/cam72cam/mod/event/platform/RegisterItemTagEvent.java @@ -7,8 +7,8 @@ import net.minecraft.tags.TagKey; import net.minecraft.tags.TagLoader; import net.minecraft.world.item.Item; -import net.neoforged.bus.api.Event; -import net.neoforged.fml.event.IModBusEvent; +import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.fml.event.IModBusEvent; import java.util.ArrayList; import java.util.Collection; diff --git a/src/main/java/cam72cam/mod/event/platform/RegisterRecipeEvent.java b/src/main/java/cam72cam/mod/event/platform/RegisterRecipeEvent.java index 251aa3af4..9bffd17d9 100644 --- a/src/main/java/cam72cam/mod/event/platform/RegisterRecipeEvent.java +++ b/src/main/java/cam72cam/mod/event/platform/RegisterRecipeEvent.java @@ -8,8 +8,8 @@ import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.item.crafting.ShapedRecipe; -import net.neoforged.bus.api.Event; -import net.neoforged.fml.event.IModBusEvent; +import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.fml.event.IModBusEvent; /** * Fired when recipe datapacks are reloaded diff --git a/src/main/java/cam72cam/mod/event/platform/RegisterTextureSpriteEvent.java b/src/main/java/cam72cam/mod/event/platform/RegisterTextureSpriteEvent.java index 3bc55d193..e1ab01303 100644 --- a/src/main/java/cam72cam/mod/event/platform/RegisterTextureSpriteEvent.java +++ b/src/main/java/cam72cam/mod/event/platform/RegisterTextureSpriteEvent.java @@ -3,8 +3,8 @@ import net.minecraft.client.renderer.texture.atlas.SpriteSource; import net.minecraft.client.renderer.texture.atlas.sources.SingleFile; import net.minecraft.resources.ResourceLocation; -import net.neoforged.bus.api.Event; -import net.neoforged.fml.event.IModBusEvent; +import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.fml.event.IModBusEvent; import java.util.List; import java.util.Optional; diff --git a/src/main/java/cam72cam/mod/fluid/FluidStack.java b/src/main/java/cam72cam/mod/fluid/FluidStack.java index b150056e0..f3c3045e4 100644 --- a/src/main/java/cam72cam/mod/fluid/FluidStack.java +++ b/src/main/java/cam72cam/mod/fluid/FluidStack.java @@ -2,15 +2,15 @@ /** Wrapper around forge FluidStack */ public class FluidStack { - public final net.neoforged.neoforge.fluids.FluidStack internal; + public final net.minecraftforge.fluids.FluidStack internal; /** Wrapper, don't use directly */ - public FluidStack(net.neoforged.neoforge.fluids.FluidStack stack) { + public FluidStack(net.minecraftforge.fluids.FluidStack stack) { this.internal = stack; } public FluidStack(Fluid fluid, int amount) { - this.internal = fluid != null && fluid.internal != null ? new net.neoforged.neoforge.fluids.FluidStack(fluid.internal.get(0), amount) : null; + this.internal = fluid != null && fluid.internal != null ? new net.minecraftforge.fluids.FluidStack(fluid.internal.get(0), amount) : null; } public Fluid getFluid() { diff --git a/src/main/java/cam72cam/mod/fluid/FluidTank.java b/src/main/java/cam72cam/mod/fluid/FluidTank.java index 8b1a6f8d4..e4e10e80a 100644 --- a/src/main/java/cam72cam/mod/fluid/FluidTank.java +++ b/src/main/java/cam72cam/mod/fluid/FluidTank.java @@ -5,7 +5,7 @@ import cam72cam.mod.serialization.TagMapped; import cam72cam.mod.serialization.TagMapper; import cam72cam.mod.util.RegistryUtil; -import net.neoforged.neoforge.fluids.capability.IFluidHandler.FluidAction; +import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; import java.util.HashSet; import java.util.List; @@ -15,7 +15,7 @@ @TagMapped(FluidTank.Mapper.class) public class FluidTank implements ITank { // TODO clean up capacity crap. Probably just want to implement my own fluid handler from scratch TBH - public final net.neoforged.neoforge.fluids.capability.templates.FluidTank internal; + public final net.minecraftforge.fluids.capability.templates.FluidTank internal; private Supplier> filter; private final Set onChange = new HashSet<>(); @@ -26,7 +26,7 @@ private FluidTank() { } public FluidTank(FluidStack fluidStack, int capacity) { - internal = new net.neoforged.neoforge.fluids.capability.templates.FluidTank(capacity) { + internal = new net.minecraftforge.fluids.capability.templates.FluidTank(capacity) { public void onContentsChanged() { FluidTank.this.onChange(); } @@ -73,7 +73,7 @@ public void setFilter(Supplier> filter) { @Override public boolean allows(Fluid fluid) { return (filter == null || filter.get() == null || filter.get().contains(fluid)) && - fluid.internal.stream().anyMatch(f -> internal.isFluidValid(new net.neoforged.neoforge.fluids.FluidStack(f, 1))); + fluid.internal.stream().anyMatch(f -> internal.isFluidValid(new net.minecraftforge.fluids.FluidStack(f, 1))); } @Override @@ -87,7 +87,7 @@ public int fill(FluidStack fluidStack, boolean simulate) { @Override public FluidStack drain(FluidStack fluidStack, boolean simulate) { if (!allows(fluidStack.getFluid())) { - return new FluidStack(net.neoforged.neoforge.fluids.FluidStack.EMPTY); + return new FluidStack(net.minecraftforge.fluids.FluidStack.EMPTY); } return new FluidStack(internal.drain(fluidStack.internal, simulate ? FluidAction.SIMULATE : FluidAction.EXECUTE)); } diff --git a/src/main/java/cam72cam/mod/fluid/ITank.java b/src/main/java/cam72cam/mod/fluid/ITank.java index af2d98550..c2bb499a6 100644 --- a/src/main/java/cam72cam/mod/fluid/ITank.java +++ b/src/main/java/cam72cam/mod/fluid/ITank.java @@ -2,9 +2,9 @@ import cam72cam.mod.ModCore; import cam72cam.mod.item.ItemStack; -import net.neoforged.neoforge.fluids.FluidUtil; -import net.neoforged.neoforge.fluids.capability.IFluidHandler; -import net.neoforged.neoforge.fluids.capability.IFluidHandlerItem; +import net.minecraftforge.fluids.FluidUtil; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandlerItem; import java.util.List; import java.util.Optional; @@ -39,7 +39,7 @@ public int getCapacity() { @Override public boolean allows(Fluid fluid) { - return fluid.internal.stream().anyMatch(f -> internal.isFluidValid(0, new net.neoforged.neoforge.fluids.FluidStack(f, 1))); + return fluid.internal.stream().anyMatch(f -> internal.isFluidValid(0, new net.minecraftforge.fluids.FluidStack(f, 1))); } @Override @@ -77,7 +77,7 @@ public int getCapacity() { @Override public boolean allows(Fluid fluid) { - return fluid.internal.stream().anyMatch(f -> internal.isFluidValid(i, new net.neoforged.neoforge.fluids.FluidStack(f, 1))); + return fluid.internal.stream().anyMatch(f -> internal.isFluidValid(i, new net.minecraftforge.fluids.FluidStack(f, 1))); } @Override diff --git a/src/main/java/cam72cam/mod/gui/GuiRegistry.java b/src/main/java/cam72cam/mod/gui/GuiRegistry.java index f3b2f78bb..ec8b5d830 100644 --- a/src/main/java/cam72cam/mod/gui/GuiRegistry.java +++ b/src/main/java/cam72cam/mod/gui/GuiRegistry.java @@ -23,10 +23,10 @@ import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.api.distmarker.OnlyIn; -import net.neoforged.fml.loading.FMLEnvironment; -import net.neoforged.neoforge.network.IContainerFactory; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.loading.FMLEnvironment; +import net.minecraftforge.network.IContainerFactory; import javax.annotation.Nullable; import java.util.HashMap; diff --git a/src/main/java/cam72cam/mod/gui/Progress.java b/src/main/java/cam72cam/mod/gui/Progress.java index eee6d1f71..57d280b74 100644 --- a/src/main/java/cam72cam/mod/gui/Progress.java +++ b/src/main/java/cam72cam/mod/gui/Progress.java @@ -1,7 +1,7 @@ package cam72cam.mod.gui; import cam72cam.mod.ModCore; -import net.neoforged.fml.loading.progress.StartupNotificationManager; +import net.minecraftforge.fml.loading.progress.StartupNotificationManager; /** Wrapper around game loading bar, only functional on certain MC versions / loaders */ public class Progress { diff --git a/src/main/java/cam72cam/mod/gui/container/ServerContainerBuilder.java b/src/main/java/cam72cam/mod/gui/container/ServerContainerBuilder.java index 0c1876616..112548dbc 100644 --- a/src/main/java/cam72cam/mod/gui/container/ServerContainerBuilder.java +++ b/src/main/java/cam72cam/mod/gui/container/ServerContainerBuilder.java @@ -9,7 +9,7 @@ import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.inventory.Slot; -import net.neoforged.neoforge.items.SlotItemHandler; +import net.minecraftforge.items.SlotItemHandler; import java.util.function.Consumer; import java.util.function.Supplier; diff --git a/src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java b/src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java index 9c430df4e..cf966b658 100644 --- a/src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java +++ b/src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java @@ -28,7 +28,7 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.inventory.InventoryMenu; -import net.neoforged.neoforge.client.extensions.common.IClientFluidTypeExtensions; +import net.minecraftforge.client.extensions.common.IClientFluidTypeExtensions; import org.joml.Matrix4f; import org.lwjgl.opengl.GL32; import util.Matrix4; diff --git a/src/main/java/cam72cam/mod/gui/helpers/GuiScrollBar.java b/src/main/java/cam72cam/mod/gui/helpers/GuiScrollBar.java index 161d224eb..c5a1e8629 100644 --- a/src/main/java/cam72cam/mod/gui/helpers/GuiScrollBar.java +++ b/src/main/java/cam72cam/mod/gui/helpers/GuiScrollBar.java @@ -2,13 +2,13 @@ import net.minecraft.client.gui.components.AbstractSliderButton; import net.minecraft.network.chat.Component; -import net.neoforged.neoforge.client.gui.widget.ExtendedSlider; +import net.minecraftforge.client.gui.widget.ForgeSlider; import java.util.function.Consumer; /** Internal scrollbar class */ -class GuiScrollBar extends ExtendedSlider { +class GuiScrollBar extends ForgeSlider { private final Consumer onPress; public GuiScrollBar(int id, int xPos, int yPos, int width, int height, String displayStr, diff --git a/src/main/java/cam72cam/mod/gui/screen/ScreenBuilder.java b/src/main/java/cam72cam/mod/gui/screen/ScreenBuilder.java index ab57d3a97..18efbd16b 100644 --- a/src/main/java/cam72cam/mod/gui/screen/ScreenBuilder.java +++ b/src/main/java/cam72cam/mod/gui/screen/ScreenBuilder.java @@ -11,7 +11,7 @@ import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; -import net.neoforged.neoforge.client.gui.widget.ExtendedSlider; +import net.minecraftforge.client.gui.widget.ForgeSlider; import java.util.*; import java.util.function.Supplier; @@ -23,7 +23,7 @@ public class ScreenBuilder extends Screen implements IScreenBuilder { private TextField active = null; private final Supplier valid; private GuiGraphics graphics; - private ExtendedSlider dragging; + private ForgeSlider dragging; public ScreenBuilder(IScreen screen, Supplier valid) { super(Component.literal("")); @@ -167,7 +167,7 @@ public boolean mouseClicked(double x, double y, int button) { for (AbstractWidget btn : this.buttonMap.keySet()) { if (btn.mouseClicked(x, y, button)) { - if (btn instanceof ExtendedSlider slider) { + if (btn instanceof ForgeSlider slider) { dragging = slider; } return true; diff --git a/src/main/java/cam72cam/mod/gui/screen/Slider.java b/src/main/java/cam72cam/mod/gui/screen/Slider.java index 6dfb9a50f..8a57a91fc 100644 --- a/src/main/java/cam72cam/mod/gui/screen/Slider.java +++ b/src/main/java/cam72cam/mod/gui/screen/Slider.java @@ -2,7 +2,7 @@ import cam72cam.mod.entity.Player; import net.minecraft.network.chat.Component; -import net.neoforged.neoforge.client.gui.widget.ExtendedSlider; +import net.minecraftforge.client.gui.widget.ForgeSlider; import java.util.function.Supplier; import java.util.function.Consumer; @@ -10,7 +10,7 @@ /** Standard slider */ public class Slider extends Button { /** Internal wrapper to add onSlider Hook */ - private static class InternalForgeSlider extends ExtendedSlider { + private static class InternalForgeSlider extends ForgeSlider { private Runnable clicker = () -> {}; private Supplier setter = () -> ""; @@ -69,11 +69,11 @@ public void setValue(double value) { } public int getValueInt() { - return ((ExtendedSlider) button).getValueInt(); + return ((ForgeSlider) button).getValueInt(); } public double getValue() { - return ((ExtendedSlider) button).getValue(); + return ((ForgeSlider) button).getValue(); } @Override diff --git a/src/main/java/cam72cam/mod/input/Keyboard.java b/src/main/java/cam72cam/mod/input/Keyboard.java index cfbd2957b..db70922d4 100644 --- a/src/main/java/cam72cam/mod/input/Keyboard.java +++ b/src/main/java/cam72cam/mod/input/Keyboard.java @@ -5,9 +5,9 @@ import net.minecraft.client.KeyMapping; import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap; import net.minecraft.client.Minecraft; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.api.distmarker.OnlyIn; -import net.neoforged.neoforge.client.settings.KeyConflictContext; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.client.settings.KeyConflictContext; import org.lwjgl.glfw.GLFW; import javax.annotation.Nullable; diff --git a/src/main/java/cam72cam/mod/input/Mouse.java b/src/main/java/cam72cam/mod/input/Mouse.java index 608702601..affadaf48 100644 --- a/src/main/java/cam72cam/mod/input/Mouse.java +++ b/src/main/java/cam72cam/mod/input/Mouse.java @@ -11,8 +11,8 @@ import cam72cam.mod.net.Packet; import cam72cam.mod.serialization.TagField; import net.minecraft.client.Minecraft; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import java.util.function.Function; diff --git a/src/main/java/cam72cam/mod/item/CreativeTab.java b/src/main/java/cam72cam/mod/item/CreativeTab.java index a173af9d2..20a5b194c 100644 --- a/src/main/java/cam72cam/mod/item/CreativeTab.java +++ b/src/main/java/cam72cam/mod/item/CreativeTab.java @@ -6,7 +6,7 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.CreativeModeTabs; -import net.neoforged.neoforge.registries.DeferredHolder; +import net.minecraftforge.registries.RegistryObject; import java.util.ArrayList; import java.util.List; @@ -25,7 +25,7 @@ public class CreativeTab { /** */ public CreativeTab(String label, Supplier stack) { ResourceKey key = lastTab; - DeferredHolder register = CommonEvents.Item.CREATIVE_TAB.register(label, () -> { + RegistryObject register = CommonEvents.Item.CREATIVE_TAB.register(label, () -> { CreativeModeTab.Builder builder = CreativeModeTab.builder(); builder.title(Component.translatable("itemGroup." + label)); builder.icon(() -> stack.get().internal()); diff --git a/src/main/java/cam72cam/mod/item/CustomItem.java b/src/main/java/cam72cam/mod/item/CustomItem.java index 25d2e3781..4f899326f 100644 --- a/src/main/java/cam72cam/mod/item/CustomItem.java +++ b/src/main/java/cam72cam/mod/item/CustomItem.java @@ -23,9 +23,9 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.context.UseOnContext; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.api.distmarker.OnlyIn; -import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.client.extensions.common.IClientItemExtensions; import java.util.ArrayList; import java.util.Collections; diff --git a/src/main/java/cam72cam/mod/item/Fuzzy.java b/src/main/java/cam72cam/mod/item/Fuzzy.java index 91486b7be..2617d7498 100644 --- a/src/main/java/cam72cam/mod/item/Fuzzy.java +++ b/src/main/java/cam72cam/mod/item/Fuzzy.java @@ -14,7 +14,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; -import net.neoforged.neoforge.common.Tags; +import net.minecraftforge.common.Tags; import java.nio.charset.StandardCharsets; import java.util.*; @@ -30,7 +30,7 @@ public class Fuzzy { public static final Fuzzy STONE_SLAB = new Fuzzy("slabStone").add(Items.STONE_SLAB); public static final Fuzzy STONE_BRICK = new Fuzzy(ItemTags.STONE_BRICKS, "brickStone").add(Blocks.STONE_BRICKS); - public static final Fuzzy SAND = new Fuzzy(Tags.Items.SANDS, "sand").add(Blocks.SAND); + public static final Fuzzy SAND = new Fuzzy(Tags.Items.SAND, "sand").add(Blocks.SAND); public static final Fuzzy PISTON = new Fuzzy("piston").add(Items.PISTON); public static final Fuzzy GOLD_INGOT = new Fuzzy(Tags.Items.INGOTS_GOLD, "ingotGold").add(Items.GOLD_INGOT); @@ -41,7 +41,7 @@ public class Fuzzy { public static final Fuzzy IRON_BARS = new Fuzzy("barsIron").add(Blocks.IRON_BARS); public static final Fuzzy NETHER_BRICK = new Fuzzy("brickNether").add(Blocks.NETHER_BRICKS); - public static final Fuzzy GRAVEL_BLOCK = new Fuzzy(Tags.Items.GRAVELS, "gravel").add(Blocks.GRAVEL); + public static final Fuzzy GRAVEL_BLOCK = new Fuzzy(Tags.Items.GRAVEL, "gravel").add(Blocks.GRAVEL); public static final Fuzzy BRICK_BLOCK = new Fuzzy("brickBlock").add(Blocks.BRICKS); public static final Fuzzy COBBLESTONE = new Fuzzy(Tags.Items.COBBLESTONES, "cobblestone").add(Blocks.COBBLESTONE); public static final Fuzzy CONCRETE = new Fuzzy("concrete") diff --git a/src/main/java/cam72cam/mod/item/IInventory.java b/src/main/java/cam72cam/mod/item/IInventory.java index 0faf4a944..9842022a3 100644 --- a/src/main/java/cam72cam/mod/item/IInventory.java +++ b/src/main/java/cam72cam/mod/item/IInventory.java @@ -1,7 +1,7 @@ package cam72cam.mod.item; import net.minecraft.world.entity.player.Inventory; -import net.neoforged.neoforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.IItemHandlerModifiable; public interface IInventory { /** Wraps MC construct. Do not use */ diff --git a/src/main/java/cam72cam/mod/item/ItemStack.java b/src/main/java/cam72cam/mod/item/ItemStack.java index cc0e8bd08..3e1680b60 100644 --- a/src/main/java/cam72cam/mod/item/ItemStack.java +++ b/src/main/java/cam72cam/mod/item/ItemStack.java @@ -10,7 +10,7 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.world.item.component.CustomData; import net.minecraft.world.item.crafting.RecipeType; -import net.neoforged.neoforge.fluids.FluidUtil; +import net.minecraftforge.fluids.FluidUtil; import java.util.function.Supplier; diff --git a/src/main/java/cam72cam/mod/item/ItemStackHandler.java b/src/main/java/cam72cam/mod/item/ItemStackHandler.java index 5e3e8c225..a2a7a11db 100644 --- a/src/main/java/cam72cam/mod/item/ItemStackHandler.java +++ b/src/main/java/cam72cam/mod/item/ItemStackHandler.java @@ -19,14 +19,14 @@ /** Standard IInventory implementation */ @TagMapped(ItemStackHandler.TagMapper.class) public class ItemStackHandler implements IInventory { - public final net.neoforged.neoforge.items.ItemStackHandler internal; + public final net.minecraftforge.items.ItemStackHandler internal; protected BiPredicate checkSlot = (integer, itemStack) -> true; private final List> onChanged = new ArrayList<>(); private Function slotLimit = null; public ItemStackHandler(int size) { - this.internal = new net.neoforged.neoforge.items.ItemStackHandler(size) { + this.internal = new net.minecraftforge.items.ItemStackHandler(size) { @Override public void setStackInSlot(int slot, @Nonnull net.minecraft.world.item.ItemStack stack) { if (checkSlot.test(slot, new ItemStack(stack))) { diff --git a/src/main/java/cam72cam/mod/item/ToolType.java b/src/main/java/cam72cam/mod/item/ToolType.java index 6de94987e..d27d85aa1 100644 --- a/src/main/java/cam72cam/mod/item/ToolType.java +++ b/src/main/java/cam72cam/mod/item/ToolType.java @@ -1,17 +1,17 @@ package cam72cam.mod.item; -import net.neoforged.neoforge.common.ItemAbilities; -import net.neoforged.neoforge.common.ItemAbility; +import net.minecraftforge.common.ToolActions; +import net.minecraftforge.common.ToolAction; /** What class a tool fits into */ public enum ToolType { - PICKAXE(ItemAbilities.PICKAXE_DIG), - AXE(ItemAbilities.AXE_DIG), - SHOVEL(ItemAbilities.SHOVEL_DIG), + PICKAXE(ToolActions.PICKAXE_DIG), + AXE(ToolActions.AXE_DIG), + SHOVEL(ToolActions.SHOVEL_DIG), ; - public final net.neoforged.neoforge.common.ItemAbility internal; + public final ToolAction internal; - ToolType(ItemAbility internal) { + ToolType(ToolAction internal) { this.internal = internal; } diff --git a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinAdvancement.java b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinAdvancement.java index 1d57cd79e..7f9328a4e 100644 --- a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinAdvancement.java +++ b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinAdvancement.java @@ -9,7 +9,7 @@ import net.minecraft.server.ServerAdvancementManager; import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.util.profiling.ProfilerFiller; -import net.neoforged.fml.ModLoader; +import net.minecraftforge.fml.ModLoader; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -28,6 +28,6 @@ public class MixinAdvancement { public void postAdvancementReload(Map p_136034_, ResourceManager p_136035_, ProfilerFiller p_136036_, CallbackInfo ci, @Local ImmutableMap.Builder map) { RegisterAdvancementEvent event = new RegisterAdvancementEvent(map); - ModLoader.postEvent(event); + ModLoader.get().postEvent(event); } } diff --git a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinMinecraftServer.java b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinMinecraftServer.java index bacf4c899..7e45fa444 100644 --- a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinMinecraftServer.java +++ b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinMinecraftServer.java @@ -4,7 +4,7 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.packs.repository.PackRepository; import net.minecraft.world.level.WorldDataConfiguration; -import net.neoforged.fml.ModLoader; +import net.minecraftforge.fml.ModLoader; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -18,6 +18,6 @@ public class MixinMinecraftServer { @Inject(method = "configurePackRepository", at = @At("HEAD")) private static void callback(PackRepository repo, WorldDataConfiguration config, boolean forceModData, boolean flags, CallbackInfoReturnable cir) { LoadDatapackEvent event = new LoadDatapackEvent(repo); - ModLoader.postEvent(event); + ModLoader.get().postEvent(event); } } diff --git a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinRecipeManager.java b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinRecipeManager.java index 2f97adef7..85e1371d0 100644 --- a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinRecipeManager.java +++ b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinRecipeManager.java @@ -15,7 +15,7 @@ import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.item.crafting.RecipeManager; import net.minecraft.world.item.crafting.RecipeType; -import net.neoforged.fml.ModLoader; +import net.minecraftforge.fml.ModLoader; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -41,7 +41,7 @@ public void captureBuilder(Map p_44037_, Resource @Local RegistryOps ops) { RegistryUtil.recipeBuildingContext(this.makeConditionalOps().context); RegisterRecipeEvent event = new RegisterRecipeEvent(builder, builder1); - ModLoader.postEvent(event); + ModLoader.get().postEvent(event); RegistryUtil.recipeBuildingContext(null); } } diff --git a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinSpriteResourceLoader.java b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinSpriteResourceLoader.java index 2e92a7dc7..f4b9128c5 100644 --- a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinSpriteResourceLoader.java +++ b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinSpriteResourceLoader.java @@ -7,6 +7,7 @@ import net.minecraft.client.renderer.texture.atlas.SpriteSourceList; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraftforge.fml.ModLoader; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -25,7 +26,7 @@ private static void inject(ResourceManager manager, ResourceLocation p_261709_, if(p_261709_.getPath().equals("blocks")) { //Only hack into main sprite RegisterTextureSpriteEvent event = new RegisterTextureSpriteEvent(list); - net.neoforged.fml.ModLoader.postEvent(event); + ModLoader.get().postEvent(event); } } } diff --git a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinTagCollection.java b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinTagCollection.java index 752b09280..01d6df04a 100644 --- a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinTagCollection.java +++ b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinTagCollection.java @@ -7,7 +7,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.tags.TagLoader; -import net.neoforged.fml.ModLoader; +import net.minecraftforge.fml.ModLoader; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -33,11 +33,11 @@ public Map> onRegisterTag(Reso //Change me when minecraft version changes case "tags/block": RegisterBlockTagEvent blockTagEvent = new RegisterBlockTagEvent(map); - ModLoader.postEvent(blockTagEvent); + ModLoader.get().postEvent(blockTagEvent); break; case "tags/item": RegisterItemTagEvent itemTagEvent = new RegisterItemTagEvent(map); - ModLoader.postEvent(itemTagEvent); + ModLoader.get().postEvent(itemTagEvent); break; default: //Waiting for more... diff --git a/src/main/java/cam72cam/mod/net/Packet.java b/src/main/java/cam72cam/mod/net/Packet.java index 9e57eaaa0..325997642 100644 --- a/src/main/java/cam72cam/mod/net/Packet.java +++ b/src/main/java/cam72cam/mod/net/Packet.java @@ -20,8 +20,8 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; -import net.neoforged.neoforge.network.PacketDistributor; -import net.neoforged.neoforge.network.handling.IPayloadContext; +import net.minecraftforge.network.PacketDistributor; +import net.minecraftforge.network.handling.IPayloadContext; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; diff --git a/src/main/java/cam72cam/mod/render/BakedScaledModel.java b/src/main/java/cam72cam/mod/render/BakedScaledModel.java index 99b7ba400..ebccab937 100644 --- a/src/main/java/cam72cam/mod/render/BakedScaledModel.java +++ b/src/main/java/cam72cam/mod/render/BakedScaledModel.java @@ -9,8 +9,8 @@ import net.minecraft.core.Direction; import net.minecraft.util.RandomSource; import net.minecraft.world.level.block.state.BlockState; -import net.neoforged.neoforge.client.model.IQuadTransformer; -import net.neoforged.neoforge.client.model.QuadTransformers; +import net.minecraftforge.client.model.IQuadTransformer; +import net.minecraftforge.client.model.QuadTransformers; import org.joml.Matrix4f; import util.Matrix4; diff --git a/src/main/java/cam72cam/mod/render/BlockRender.java b/src/main/java/cam72cam/mod/render/BlockRender.java index 80c1f14ad..a65f8e866 100644 --- a/src/main/java/cam72cam/mod/render/BlockRender.java +++ b/src/main/java/cam72cam/mod/render/BlockRender.java @@ -32,7 +32,7 @@ import net.minecraft.world.level.material.MapColor; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import net.neoforged.neoforge.client.model.data.ModelData; +import net.minecraftforge.client.model.data.ModelData; import org.jetbrains.annotations.NotNull; import java.util.*; diff --git a/src/main/java/cam72cam/mod/render/GlobalRender.java b/src/main/java/cam72cam/mod/render/GlobalRender.java index 7e36c2c98..f9a35accb 100644 --- a/src/main/java/cam72cam/mod/render/GlobalRender.java +++ b/src/main/java/cam72cam/mod/render/GlobalRender.java @@ -15,7 +15,6 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; -import net.neoforged.neoforge.client.gui.VanillaGuiLayers; import org.joml.Matrix4f; import java.util.ArrayList; diff --git a/src/main/java/cam72cam/mod/render/ItemRender.java b/src/main/java/cam72cam/mod/render/ItemRender.java index fccba1b2b..2d7971ce2 100644 --- a/src/main/java/cam72cam/mod/render/ItemRender.java +++ b/src/main/java/cam72cam/mod/render/ItemRender.java @@ -34,10 +34,9 @@ import net.minecraft.world.inventory.InventoryMenu; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.level.block.state.BlockState; -import net.neoforged.neoforge.client.model.ExtraFaceData; -import net.neoforged.neoforge.client.model.ItemLayerModel; -import net.neoforged.neoforge.client.model.SimpleModelState; -import net.neoforged.neoforge.client.model.geometry.IGeometryBakingContext; +import net.minecraftforge.client.model.ItemLayerModel; +import net.minecraftforge.client.model.SimpleModelState; +import net.minecraftforge.client.model.geometry.IGeometryBakingContext; import org.apache.commons.lang3.tuple.Pair; import org.lwjgl.BufferUtils; import org.lwjgl.opengl.GL11; diff --git a/src/main/java/cam72cam/mod/render/opengl/RenderState.java b/src/main/java/cam72cam/mod/render/opengl/RenderState.java index 63f149d6e..fcec26cd3 100644 --- a/src/main/java/cam72cam/mod/render/opengl/RenderState.java +++ b/src/main/java/cam72cam/mod/render/opengl/RenderState.java @@ -4,8 +4,8 @@ import cam72cam.mod.render.OptiFine; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import net.neoforged.fml.loading.FMLEnvironment; -import net.neoforged.neoforge.common.util.Lazy; +import net.minecraftforge.fml.loading.FMLEnvironment; +import net.minecraftforge.common.util.Lazy; import org.joml.Matrix4f; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; diff --git a/src/main/java/cam72cam/mod/resource/BuiltinPack.java b/src/main/java/cam72cam/mod/resource/BuiltinPack.java index 16a88ae8e..cbb9ebe1d 100644 --- a/src/main/java/cam72cam/mod/resource/BuiltinPack.java +++ b/src/main/java/cam72cam/mod/resource/BuiltinPack.java @@ -14,10 +14,10 @@ import net.minecraft.server.packs.repository.PackSource; import net.minecraft.server.packs.resources.IoSupplier; import net.minecraft.world.flag.FeatureFlagSet; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.ModList; -import net.neoforged.fml.common.EventBusSubscriber; -import net.neoforged.fml.loading.FMLPaths; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.ModList; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.loading.FMLPaths; import javax.annotation.Nullable; import java.io.ByteArrayInputStream; diff --git a/src/main/java/cam72cam/mod/resource/Data.java b/src/main/java/cam72cam/mod/resource/Data.java index bb913df8f..362052a5c 100644 --- a/src/main/java/cam72cam/mod/resource/Data.java +++ b/src/main/java/cam72cam/mod/resource/Data.java @@ -2,8 +2,8 @@ import net.minecraft.client.Minecraft; import net.minecraft.server.packs.resources.Resource; -import net.neoforged.fml.loading.FMLEnvironment; -import net.neoforged.fml.loading.FMLPaths; +import net.minecraftforge.fml.loading.FMLEnvironment; +import net.minecraftforge.fml.loading.FMLPaths; import org.apache.commons.io.IOUtils; import java.io.*; diff --git a/src/main/java/cam72cam/mod/text/PlayerMessage.java b/src/main/java/cam72cam/mod/text/PlayerMessage.java index 46b24d740..1a402e311 100644 --- a/src/main/java/cam72cam/mod/text/PlayerMessage.java +++ b/src/main/java/cam72cam/mod/text/PlayerMessage.java @@ -1,7 +1,7 @@ package cam72cam.mod.text; import net.minecraft.network.chat.Component; -import net.neoforged.neoforge.common.CommonHooks; +import net.minecraftforge.common.ForgeHooks; import java.util.Arrays; @@ -26,6 +26,6 @@ public static PlayerMessage translate(String msg, Object... objects) { /** URL Formatted (clickable) */ public static PlayerMessage url(String url) { - return new PlayerMessage(CommonHooks.newChatWithLinks(url)); + return new PlayerMessage(ForgeHooks.newChatWithLinks(url)); } } diff --git a/src/main/java/cam72cam/mod/util/MinecraftFiles.java b/src/main/java/cam72cam/mod/util/MinecraftFiles.java index 6444f4947..60bdc0042 100644 --- a/src/main/java/cam72cam/mod/util/MinecraftFiles.java +++ b/src/main/java/cam72cam/mod/util/MinecraftFiles.java @@ -1,7 +1,7 @@ package cam72cam.mod.util; import cam72cam.mod.world.World; -import net.neoforged.fml.loading.FMLPaths; +import net.minecraftforge.fml.loading.FMLPaths; import java.io.File; import java.nio.file.Path; diff --git a/src/main/java/cam72cam/mod/util/RegistryUtil.java b/src/main/java/cam72cam/mod/util/RegistryUtil.java index 511892a17..a18908496 100644 --- a/src/main/java/cam72cam/mod/util/RegistryUtil.java +++ b/src/main/java/cam72cam/mod/util/RegistryUtil.java @@ -5,9 +5,9 @@ import net.minecraft.client.Minecraft; import net.minecraft.core.Holder; import net.minecraft.core.RegistryAccess; -import net.neoforged.fml.util.thread.EffectiveSide; -import net.neoforged.neoforge.common.conditions.ICondition; -import net.neoforged.neoforge.server.ServerLifecycleHooks; +import net.minecraftforge.common.crafting.conditions.ICondition; +import net.minecraftforge.fml.util.thread.EffectiveSide; +import net.minecraftforge.server.ServerLifecycleHooks; import javax.annotation.Nonnull; import java.util.ArrayList; diff --git a/src/main/java/cam72cam/mod/world/World.java b/src/main/java/cam72cam/mod/world/World.java index 13772fb43..7004180dd 100644 --- a/src/main/java/cam72cam/mod/world/World.java +++ b/src/main/java/cam72cam/mod/world/World.java @@ -43,13 +43,13 @@ import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.shapes.VoxelShape; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.api.distmarker.OnlyIn; -import net.neoforged.fml.loading.FMLEnvironment; -import net.neoforged.neoforge.common.SpecialPlantable; -import net.neoforged.neoforge.fluids.capability.IFluidHandler; -import net.neoforged.neoforge.items.IItemHandler; -import net.neoforged.neoforge.items.IItemHandlerModifiable; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.loading.FMLEnvironment; +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.IItemHandlerModifiable; import org.apache.commons.lang3.NotImplementedException; import java.util.*; @@ -639,7 +639,7 @@ public boolean isReplaceable(Vec3i pos) { if (block instanceof BushBlock) { return true; } - if (block.asItem() instanceof SpecialPlantable) { + if (block.asItem() instanceof IPlantable) { return true; } if (block instanceof LiquidBlock) { diff --git a/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java b/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java index c52a693c5..c0bc5bc09 100644 --- a/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java +++ b/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java @@ -1,9 +1,9 @@ package #PACKAGE#; import cam72cam.mod.ModCore; -import net.neoforged.bus.api.SubscribeEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; -@net.neoforged.fml.common.Mod(Mod.MODID) +@net.minecraftforge.fml.common.Mod(Mod.MODID) public class Mod { public static final String MODID = "#ID#"; diff --git a/src/test/java/cam72cam/mod/model/obj/OBJModelTest.java b/src/test/java/cam72cam/mod/model/obj/OBJModelTest.java index b9baba6c6..ed2f22449 100644 --- a/src/test/java/cam72cam/mod/model/obj/OBJModelTest.java +++ b/src/test/java/cam72cam/mod/model/obj/OBJModelTest.java @@ -2,8 +2,8 @@ import cam72cam.mod.resource.Identifier; import cpw.mods.modlauncher.Launcher; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.fml.loading.FMLLoader; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.loading.FMLLoader; import org.codehaus.plexus.util.FileUtils; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; From a23522c176bc688d7b9c450006b465cd7488b4de Mon Sep 17 00:00:00 2001 From: Angelina Michalek Date: Sun, 17 May 2026 00:18:59 -0400 Subject: [PATCH 06/60] fix --- src/main/resources/mixins.feat.universalmodcore.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/resources/mixins.feat.universalmodcore.json b/src/main/resources/mixins.feat.universalmodcore.json index b21e57a44..c58697fda 100644 --- a/src/main/resources/mixins.feat.universalmodcore.json +++ b/src/main/resources/mixins.feat.universalmodcore.json @@ -15,6 +15,8 @@ ], "client": [ "data_registry.MixinSpriteResourceLoader", - "global_renderer.MixinRenderGlobal" + "global_renderer.MixinRenderGlobal", + "iris_pbr.MixinDeferredWorldRenderingPipeline", + "iris_pbr.MixinNewWorldRenderingPipeline" ] } From aecc037e68abc73c97b93e672258abb9a07bd36b Mon Sep 17 00:00:00 2001 From: Angelina Michalek Date: Sun, 17 May 2026 00:30:09 -0400 Subject: [PATCH 07/60] Template --- build.gradle | 4 - src/main/resources/template/UMC.md | 2 +- src/main/resources/template/build.gradle | 167 +++++++++++++----- src/main/resources/template/gradle.properties | 9 + .../gradle/wrapper/gradle-wrapper.properties | 2 +- src/main/resources/template/settings.gradle | 3 + .../src/main/resources/META-INF/mods.toml | 24 +++ .../resources/META-INF/neoforge.mods.toml | 24 --- 8 files changed, 156 insertions(+), 79 deletions(-) create mode 100644 src/main/resources/template/gradle.properties create mode 100644 src/main/resources/template/settings.gradle create mode 100644 src/main/resources/template/src/main/resources/META-INF/mods.toml delete mode 100644 src/main/resources/template/src/main/resources/META-INF/neoforge.mods.toml diff --git a/build.gradle b/build.gradle index 8bec24103..5a26976ca 100644 --- a/build.gradle +++ b/build.gradle @@ -85,10 +85,6 @@ minecraft { } } -repositories { - mavenCentral() -} - sourceSets.main.resources { srcDir layout.projectDirectory.dir('src/generated/resources') } // This methods registers jarJar for the default jar task. diff --git a/src/main/resources/template/UMC.md b/src/main/resources/template/UMC.md index d60e3afd5..b0c28ce55 100644 --- a/src/main/resources/template/UMC.md +++ b/src/main/resources/template/UMC.md @@ -1 +1 @@ -You don't need to run anything manually, NeoGradle has done them for you \ No newline at end of file +You don't need to run anything manually, ForgeGradle 7 has done them for you \ No newline at end of file diff --git a/src/main/resources/template/build.gradle b/src/main/resources/template/build.gradle index 77c5816d3..54e12fd03 100644 --- a/src/main/resources/template/build.gradle +++ b/src/main/resources/template/build.gradle @@ -1,68 +1,122 @@ -//BUILDSCRIPT// -buildscript { - repositories { - maven { - name "neoforgedReleases" - url "https://maven.neoforged.net/releases" - } - maven { url "https://plugins.gradle.org/m2/" } - mavenCentral() - } - dependencies { - classpath group: 'net.neoforged.gradle', name: 'userdev', version: '7.1.11' - classpath group: 'net.neoforged.gradle', name: 'common', version: '7.1.11' - } -} - //PLUGINS// -apply plugin: 'net.neoforged.gradle.userdev' -apply plugin: 'net.neoforged.gradle.common' -apply plugin: 'eclipse' +plugins { + id 'java' + id 'idea' + id 'eclipse' + id 'maven-publish' + id 'net.minecraftforge.gradle' version '[7.0.23,8.0)' + id 'net.minecraftforge.jarjar' version '0.2.3' +} //MINECRAFT// -sourceSets { - main { - resources { - srcDirs = [ - "$rootDir/src/main/resources", - "$rootDir/src/generated/resources" - ] - } - } -} java.toolchain.languageVersion = JavaLanguageVersion.of(21) +println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + '(' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch')) -runs { - configureEach { - systemProperty 'forge.logging.markers', 'REGISTRIES' - systemProperty 'forge.logging.console.level', 'debug' +minecraft { + mappings channel: "official", version: "1.21.1" + accessTransformer = true - modSource project.sourceSets.main - } + runs { + // applies to all the run configs below + configureEach { + workingDir.convention layout.projectDirectory.dir('run') + // Mixin requires either specifying the config via command line, or in the Manifest + args "--mixin.config=universalmodcore.feat.mixins.json", "--mixin.config=universalmodcore.fix.mixins.json" - client { - systemProperty 'neoforge.enabledGameTestNamespaces', '#ID#' - } + systemProperty "mixin.debug.verbose", "true" + systemProperty "mixin.debug.export", "true" + // Recommended logging data for a userdev environment + // The markers can be added/remove as needed separated by commas. + // "SCAN": For mods scan. + // "REGISTRIES": For firing of registry events. + // "REGISTRYDUMP": For getting the contents of all registries. + systemProperty 'forge.logging.markers', 'REGISTRIES' - server { - systemProperty 'neoforge.enabledGameTestNamespaces', '#ID#' - argument '--nogui' - } + // Recommended logging level for the console + // You can set various levels here. + // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels + systemProperty 'forge.logging.console.level', 'debug' + } - gameTestServer { - systemProperty 'neoforge.enabledGameTestNamespaces', '#ID#' - } + register('client') { + // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. + systemProperty 'forge.enabledGameTestNamespaces', 'universalmodcore' + } + + register('server') { + systemProperty 'forge.enabledGameTestNamespaces', 'universalmodcore' + args '--nogui' + } + + // This run config launches GameTestServer and runs all registered gametests, then exits. + // By default, the server will crash when no gametests are provided. + // The gametest system is also enabled by default for other run configs under the /test command. + register('gameTestServer') { + systemProperty 'forge.enabledGameTestNamespaces', 'universalmodcore' + } + + register('data') { + // example of overriding the workingDirectory set in configureEach above, uncomment if you want to use it + // workingDirectory project.file('run-data') - data {arguments.addAll '--mod', '#ID#', '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath() + // Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources. + args '--mod', 'universalmodcore', '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath() + } } } +sourceSets.main.resources { srcDir layout.projectDirectory.dir('src/generated/resources') } + //DEPENDENCIES// + +// This methods registers jarJar for the default jar task. +// The closure allows you to configure the task, instead of needing to do this: +// tasks.named('jarJar', net.minecraftforge.jarjar.gradle.JarJar) +jarJar.register() { + archiveClassifier = null +} + #UMC_REPO# +repositories { + minecraft.mavenizer(it) + maven fg.forgeMaven + maven fg.minecraftLibsMaven + exclusiveContent { + forRepository { + maven { + name = 'Sponge' + url = 'https://repo.spongepowered.org/repository/maven-public' + } + } + filter { + includeGroupAndSubgroups('org.spongepowered') + } + } + mavenCentral() + mavenLocal() +} dependencies { - implementation "net.neoforged:neoforge:21.1.216" - implementation group: 'javax.vecmath', name: 'vecmath', version: '1.5.2' + implementation minecraft.dependency("net.minecraftforge:forge:1.21.1-52.1.14") + implementation(jarJar(group: 'javax.vecmath', name: 'vecmath', version: '1.5.2')) { + jarJar.configure(it) { + module { + group = 'javax.vecmath' + name = 'vecmath' + } + version = "1.5.2" + } + } + compileOnly(annotationProcessor('io.github.llamalad7:mixinextras-common:0.5.0')) + implementation(jarJar('io.github.llamalad7:mixinextras-forge:0.5.0')) { + jarJar.configure(it) { + module { + group = 'io.github.llamalad7' + name = 'mixinextras' + } + range = "[0.5.0,)" + } + } implementation #UMC_DEPENDENCY# } @@ -76,7 +130,6 @@ jar { "Implementation-Title": project.name, "Implementation-Version": "${version}", "Implementation-Vendor" :"#ID#", - "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") ]) } } @@ -84,3 +137,19 @@ jar { tasks.withType(JavaCompile).configureEach { options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation } + +// IntelliJ no longer downloads javadocs and sources by default, this tells Gradle to force IntelliJ to do it. +idea.module { downloadJavadoc = downloadSources = true } + +eclipse { + // Eclipse no longer downloads javadocs and sources by default, this tells Gradle to force Eclipse to do it. + classpath { downloadJavadoc = downloadSources = true } + + // NOTE: ForgeGradle 7 does not yet support Eclipse run configurations + // Run everytime eclipse builds the code + //autoBuildTasks genEclipseRuns + // Run when importing the project + //synchronizationTasks 'genEclipseRuns' +} + +// NOTE: Merging of source sets is now controlled by the property 'net.minecraftforge.gradle.merge-source-sets' \ No newline at end of file diff --git a/src/main/resources/template/gradle.properties b/src/main/resources/template/gradle.properties new file mode 100644 index 000000000..b1828365f --- /dev/null +++ b/src/main/resources/template/gradle.properties @@ -0,0 +1,9 @@ +org.gradle.caching=true +org.gradle.parallel=true +org.gradle.configureondemand=true + +org.gradle.configuration-cache=true +org.gradle.configuration-cache.parallel=true +org.gradle.configuration-cache.problems=warn + +net.minecraftforge.gradle.merge-source-sets=true \ No newline at end of file diff --git a/src/main/resources/template/gradle/wrapper/gradle-wrapper.properties b/src/main/resources/template/gradle/wrapper/gradle-wrapper.properties index 7471fbebb..23a74e6e7 100644 --- a/src/main/resources/template/gradle/wrapper/gradle-wrapper.properties +++ b/src/main/resources/template/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip diff --git a/src/main/resources/template/settings.gradle b/src/main/resources/template/settings.gradle new file mode 100644 index 000000000..3e187fe5a --- /dev/null +++ b/src/main/resources/template/settings.gradle @@ -0,0 +1,3 @@ +plugins { + id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0' +} \ No newline at end of file diff --git a/src/main/resources/template/src/main/resources/META-INF/mods.toml b/src/main/resources/template/src/main/resources/META-INF/mods.toml new file mode 100644 index 000000000..09c0e4510 --- /dev/null +++ b/src/main/resources/template/src/main/resources/META-INF/mods.toml @@ -0,0 +1,24 @@ +modLoader="javafml" +loaderVersion="[52,)" +license="TODO" + +[[mods]] +modId="#ID#" +version="${file.jarVersion}" +displayName="#NAME#" + +[[dependencies.#ID#]] +modId="forge" +mandatory=true +versionRange="[52.1.14,)" +ordering="NONE" +side="BOTH" + +[[dependencies.#ID#]] +modId="minecraft" +mandatory=true +versionRange="[1.21.1]" +ordering="NONE" +side="BOTH" + +#FORGE_TOML_DEPENDENCIES# diff --git a/src/main/resources/template/src/main/resources/META-INF/neoforge.mods.toml b/src/main/resources/template/src/main/resources/META-INF/neoforge.mods.toml deleted file mode 100644 index c864ff75a..000000000 --- a/src/main/resources/template/src/main/resources/META-INF/neoforge.mods.toml +++ /dev/null @@ -1,24 +0,0 @@ -modLoader="javafml" -loaderVersion="[2,)" -license="TODO" - -[[mods]] -modId="#ID#" -version="${file.jarVersion}" -displayName="#NAME#" - -[[dependencies.#ID#]] - modId="neoforge" - type='required' - versionRange="[21.1.1,)" - ordering="NONE" - side="BOTH" - -[[dependencies.#ID#]] - modId="minecraft" - type='required' - versionRange="[1.21.1]" - ordering="NONE" - side="BOTH" - -#FORGE_TOML_DEPENDENCIES# From 96333abd6867861df997729743554b7c8044bb5e Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Mon, 18 May 2026 18:35:09 +0800 Subject: [PATCH 08/60] fix: GUI item lighting --- src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java b/src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java index be173e740..61b975ede 100644 --- a/src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java +++ b/src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java @@ -16,6 +16,7 @@ import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.util.text.ITextComponent; @@ -178,9 +179,11 @@ public static void drawItem(ItemStack stack, int x, int y, Matrix4 matrix) { //Otherwise we don't care // .stage(RenderContext.Stage.GUI); state.model_view().multiply(matrix); + RenderHelper.enableGUIStandardItemLighting(); try (With ctx = RenderContext.apply(state)) { Minecraft.getMinecraft().getRenderItem().renderItemIntoGUI(stack.internal, x, y); } + RenderHelper.disableStandardItemLighting(); } /** Try to open an external link in player's browser */ From 1d6ebfa8f884ad28af9076472e72b96cb1a0c583 Mon Sep 17 00:00:00 2001 From: Angelina Michalek Date: Mon, 18 May 2026 15:55:32 -0400 Subject: [PATCH 09/60] And that --- build.gradle | 4 +--- src/main/java/cam72cam/mod/net/Packet.java | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 5a26976ca..1ab354899 100644 --- a/build.gradle +++ b/build.gradle @@ -146,7 +146,6 @@ dependencies { } } - //testImplementation ('junit:junit:4.13') testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.7.2' implementation(jarJar(group: 'javax.vecmath', name: 'vecmath', version: '1.5.2')) { @@ -155,10 +154,9 @@ dependencies { group = 'javax.vecmath' name = 'vecmath' } - version = "1.5.2" + range = "[1.5.2,)" } } -// implementation(shade group: 'at.yawk.lz4', name: 'lz4-java', version: '1.10.2') } repositories { diff --git a/src/main/java/cam72cam/mod/net/Packet.java b/src/main/java/cam72cam/mod/net/Packet.java index 325997642..6b978ab3e 100644 --- a/src/main/java/cam72cam/mod/net/Packet.java +++ b/src/main/java/cam72cam/mod/net/Packet.java @@ -21,7 +21,6 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraftforge.network.PacketDistributor; -import net.minecraftforge.network.handling.IPayloadContext; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; From 710031c423afa67750999c1603b8644719b9a49a Mon Sep 17 00:00:00 2001 From: Angelina Michalek Date: Mon, 18 May 2026 21:23:25 -0400 Subject: [PATCH 10/60] Convert to MinecraftForge 1.21.1 (part 2) --- src/main/java/cam72cam/mod/ModCore.java | 4 +- .../cam72cam/mod/block/tile/TileEntity.java | 245 ++++++++---------- .../java/cam72cam/mod/event/ClientEvents.java | 25 +- .../java/cam72cam/mod/event/CommonEvents.java | 14 +- .../MixinDeferredWorldRenderingPipeline.java | 20 -- .../MixinNewWorldRenderingPipeline.java | 51 ---- src/main/java/cam72cam/mod/net/Packet.java | 127 ++++----- src/main/java/cam72cam/mod/render/Light.java | 28 +- 8 files changed, 199 insertions(+), 315 deletions(-) delete mode 100644 src/main/java/cam72cam/mod/mixin/feat/iris_pbr/MixinDeferredWorldRenderingPipeline.java delete mode 100644 src/main/java/cam72cam/mod/mixin/feat/iris_pbr/MixinNewWorldRenderingPipeline.java diff --git a/src/main/java/cam72cam/mod/ModCore.java b/src/main/java/cam72cam/mod/ModCore.java index 7811d18fd..9f3421f63 100644 --- a/src/main/java/cam72cam/mod/ModCore.java +++ b/src/main/java/cam72cam/mod/ModCore.java @@ -22,6 +22,7 @@ import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent; import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.fml.loading.FMLEnvironment; import net.minecraftforge.fml.loading.FMLLoader; import net.minecraftforge.fml.loading.FMLPaths; @@ -78,9 +79,10 @@ public static void register(Mod ctr) { } /** Called during Mod Construction phase */ - public ModCore(IEventBus modEventBus, Dist dist) { + public ModCore(FMLJavaModLoadingContext context) { System.out.println("Welcome to UniversalModCore!"); instance = this; + var modEventBus = context.getModEventBus(); ModCore.register(new Internal()); proxy.setup(); diff --git a/src/main/java/cam72cam/mod/block/tile/TileEntity.java b/src/main/java/cam72cam/mod/block/tile/TileEntity.java index 5356b8674..96b6280b2 100644 --- a/src/main/java/cam72cam/mod/block/tile/TileEntity.java +++ b/src/main/java/cam72cam/mod/block/tile/TileEntity.java @@ -39,6 +39,8 @@ import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraftforge.client.model.data.ModelData; import net.minecraftforge.client.model.data.ModelProperty; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.energy.IEnergyStorage; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; @@ -63,8 +65,6 @@ * @see BlockEntity */ public class TileEntity extends net.minecraft.world.level.block.entity.BlockEntity { - public static final AABB INFINITE_EXTENT_AABB = new net.minecraft.world.phys.AABB(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY); - private static final Map> types = HashBiMap.create(); // InstanceId -> Supplier mapping private static final Map> registry = HashBiMap.create(); @@ -165,7 +165,7 @@ public static void register(Supplier instance, Identifier id, Block BlockEntity example = instance.get(); // Force legacy registration -// example.supplier(id); + example.supplier(id); CommonEvents.Tile.REGISTER.subscribe(helper -> { BlockEntityType type = new BlockEntityType<>((pos, state) -> { @@ -348,160 +348,141 @@ public double getViewDistance() { return instance() != null ? instance().getRenderDistance() * instance().getRenderDistance() : Integer.MAX_VALUE; }*/ - public static final BlockCapability ITEM_HANDLER_BLOCK = - BlockCapability.create(ResourceLocation.tryBuild(ModCore.MODID, "item_handler"), - IItemHandler.class, Direction.class); - - public static final BlockCapability FLUID_HANDLER_BLOCK = - BlockCapability.create(ResourceLocation.tryBuild(ModCore.MODID, "fluid_handler"), - IFluidHandler.class, Direction.class); - - public static final BlockCapability ENERGY_HANDLER_BLOCK = - BlockCapability.create(ResourceLocation.tryBuild(ModCore.MODID, "energy_handler"), - IEnergyStorage.class, Direction.class); - - public IItemHandler getItemHandler(@Nullable Direction side) { - IInventory target = getInventory(Facing.from(side)); - if (target == null) { - return null; - } - return new IItemHandlerModifiable() { - @Override - public int getSlots() { - return target.getSlotCount(); + @Override + @Nullable + public LazyOptional getCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable net.minecraft.core.Direction facing) { + if (capability == ForgeCapabilities.FLUID_HANDLER) { + ITank target = getTank(Facing.from(facing)); + if (target == null) { + return LazyOptional.empty(); } - @Override - public void setStackInSlot(int slot, @Nonnull ItemStack stack) { - target.set(slot, new cam72cam.mod.item.ItemStack(stack)); - } + return LazyOptional.of(() -> new IFluidHandler() { + @Override + public int getTanks() { + return 1; + } - @Nonnull - @Override - public ItemStack getStackInSlot(int slot) { - return target.get(slot).internal(); - } + @Nonnull + @Override + public FluidStack getFluidInTank(int tank) { + return target.getContents().internal; + } - @Nonnull - @Override - public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) { - return target.insert(slot, new cam72cam.mod.item.ItemStack(stack), simulate).internal(); - } + @Override + public int getTankCapacity(int tank) { + return target.getCapacity(); + } - @Nonnull - @Override - public ItemStack extractItem(int slot, int amount, boolean simulate) { - return target.extract(slot, amount, simulate).internal(); - } + @Override + public boolean isFluidValid(int tank, @Nonnull FluidStack stack) { + return target.allows(Fluid.getFluid(stack.getFluid())); + } - @Override - public int getSlotLimit(int slot) { - return target.getLimit(slot); - } + @Override + public int fill(FluidStack resource, FluidAction action) { + return target.fill(new cam72cam.mod.fluid.FluidStack(resource), action.simulate()); + } - @Override - public boolean isItemValid(int slot, @Nonnull ItemStack stack) { - return true; //TODO 1.14.4 - } - }; - } + @Nonnull + @Override + public FluidStack drain(FluidStack resource, FluidAction action) { + return target.drain(new cam72cam.mod.fluid.FluidStack(resource), action.simulate()).internal; + } - public IFluidHandler getFluidHandler(@Nullable Direction side) { - ITank target = getTank(Facing.from(side)); - if (target == null) { - return null; + @Nonnull + @Override + public FluidStack drain(int maxDrain, FluidAction action) { + if (target.getContents().internal.isEmpty()) { + return FluidStack.EMPTY; + } + return target.drain(new cam72cam.mod.fluid.FluidStack(new FluidStack(target.getContents().internal, maxDrain)), action.simulate()).internal; + } + }).cast(); } - return new IFluidHandler() { - @Override - public int getTanks() { - return 1; - } - - @Nonnull - @Override - public FluidStack getFluidInTank(int tank) { - return target.getContents().internal; + if (capability == ForgeCapabilities.ITEM_HANDLER) { + IInventory target = getInventory(Facing.from(facing)); + if (target == null) { + return LazyOptional.empty(); } + return LazyOptional.of(() -> new IItemHandlerModifiable() { + @Override + public int getSlots() { + return target.getSlotCount(); + } - @Override - public int getTankCapacity(int tank) { - return target.getCapacity(); - } + @Override + public void setStackInSlot(int slot, @Nonnull ItemStack stack) { + target.set(slot, new cam72cam.mod.item.ItemStack(stack)); + } - @Override - public boolean isFluidValid(int tank, @Nonnull FluidStack stack) { - return target.allows(Fluid.getFluid(stack.getFluid())); - } + @Nonnull + @Override + public ItemStack getStackInSlot(int slot) { + return target.get(slot).internal(); + } - @Override - public int fill(FluidStack resource, FluidAction action) { - return target.fill(new cam72cam.mod.fluid.FluidStack(resource), action.simulate()); - } + @Nonnull + @Override + public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) { + return target.insert(slot, new cam72cam.mod.item.ItemStack(stack), simulate).internal(); + } - @Nonnull - @Override - public FluidStack drain(FluidStack resource, FluidAction action) { - return target.drain(new cam72cam.mod.fluid.FluidStack(resource), action.simulate()).internal; - } + @Nonnull + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate) { + return target.extract(slot, amount, simulate).internal(); + } - @Nonnull - @Override - public FluidStack drain(int maxDrain, FluidAction action) { - if (target.getContents().internal.isEmpty()) { - return FluidStack.EMPTY; + @Override + public int getSlotLimit(int slot) { + return target.getLimit(slot); } - return target.drain(new cam72cam.mod.fluid.FluidStack(new FluidStack(target.getContents().internal.getFluid(), maxDrain)), action.simulate()).internal; - } - }; - } - public IEnergyStorage getEnergyStorage(@Nullable Direction side) { - IEnergy target = getEnergy(Facing.from(side)); - if (target == null) { - return null; + @Override + public boolean isItemValid(int slot, @Nonnull ItemStack stack) { + return true; //TODO 1.14.4 + } + }).cast(); } - return new IEnergyStorage() { - @Override - public int receiveEnergy(int maxReceive, boolean simulate) { - return target.receive(maxReceive, simulate); - } - - @Override - public int extractEnergy(int maxExtract, boolean simulate) { - return target.extract(maxExtract, simulate); + if (capability == ForgeCapabilities.ENERGY) { + IEnergy target = getEnergy(Facing.from(facing)); + if (target == null) { + return LazyOptional.empty(); } + return LazyOptional.of(() -> new IEnergyStorage() { + @Override + public int receiveEnergy(int maxReceive, boolean simulate) { + return target.receive(maxReceive, simulate); + } - @Override - public int getEnergyStored() { - return target.getCurrent(); - } + @Override + public int extractEnergy(int maxExtract, boolean simulate) { + return target.extract(maxExtract, simulate); + } - @Override - public int getMaxEnergyStored() { - return target.getMax(); - } + @Override + public int getEnergyStored() { + return target.getCurrent(); + } - @Override - public boolean canExtract() { - return true; - } + @Override + public int getMaxEnergyStored() { + return target.getMax(); + } - @Override - public boolean canReceive() { - return true; - } - }; - } + @Override + public boolean canExtract() { + return true; + } - public boolean hasCapacity(BlockCapability capability, Direction side) { - if (capability == ITEM_HANDLER_BLOCK) { - return getInventory(Facing.from(side)) != null; - } else if (capability == FLUID_HANDLER_BLOCK) { - return getTank(Facing.from(side)) != null; - } else if (capability == ENERGY_HANDLER_BLOCK) { - return getEnergy(Facing.from(side)) != null; + @Override + public boolean canReceive() { + return true; + } + }).cast(); } - return false; + return LazyOptional.empty(); } /* diff --git a/src/main/java/cam72cam/mod/event/ClientEvents.java b/src/main/java/cam72cam/mod/event/ClientEvents.java index 8b36b94a5..1e540c36c 100644 --- a/src/main/java/cam72cam/mod/event/ClientEvents.java +++ b/src/main/java/cam72cam/mod/event/ClientEvents.java @@ -18,6 +18,7 @@ import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.RenderType; import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.event.TickEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.client.event.*; @@ -94,14 +95,11 @@ public MouseGuiEvent(MouseAction action, int x, int y, int button, double scroll public static final Event REGISTER_ENTITY = new Event<>(); public static final Event> REGISTER_SHADER = new Event<>(); public static final Event> RENDER_DEBUG = new Event<>(); - public static final Event> RENDER_OVERLAY = new Event<>(); public static final Event> RENDER_MOUSEOVER = new Event<>(); public static final Event> SOUND_LOAD = new Event<>(); public static final Event RELOAD = new Event<>(); // public static final Event> OPTIFINE_SUCKS = new Event<>(); public static final Event> KEY_MAPPING_REGISTER = new Event<>(); - public static final Event> CLIENT_EXTENSIONS_REGISTER = new Event<>(); - public static final Event> MENU_SCREENS_REGISTER = new Event<>(); @EventBusSubscriber(modid = ModCore.MODID, value = Dist.CLIENT) public static class ClientEventBus { @@ -113,17 +111,17 @@ public static class ClientEventBus { } @SubscribeEvent - public static void onClientTick(ClientTickEvent.Pre event) { + public static void onClientTick(TickEvent.ClientTickEvent.Pre event) { TICK.execute(Runnable::run); } @SubscribeEvent - public static void onClientTick(ClientTickEvent.Post event) { + public static void onClientTick(TickEvent.ClientTickEvent.Post event) { TICK_POST.execute(Runnable::run); } private static void onGuiMouse(ScreenEvent event, int x, int y, int btn, MouseAction action) { - MouseGuiEvent mevt = new MouseGuiEvent(action, x, y, btn, action == MouseAction.SCROLL ? (int) ((ScreenEvent.MouseScrolled) event).getScrollDeltaY() : 0); + MouseGuiEvent mevt = new MouseGuiEvent(action, x, y, btn, action == MouseAction.SCROLL ? (int) ((ScreenEvent.MouseScrolled) event).getDeltaY() : 0); if (!MOUSE_GUI.executeCancellable(h -> h.apply(mevt))) { event.setCanceled(true); @@ -167,7 +165,7 @@ private static void hackInputState(int event) { @SubscribeEvent public static void onScroll(InputEvent.MouseScrollingEvent event) { - if (!SCROLL.executeCancellable(x -> x.apply(event.getScrollDeltaY()))) { + if (!SCROLL.executeCancellable(x -> x.apply(event.getDeltaY()))) { event.setCanceled(true); } } @@ -203,7 +201,7 @@ public static void onClick(InputEvent.MouseButton.Pre event) { } @SubscribeEvent - public static void onFrame(RenderFrameEvent.Pre event) { + public static void onFrame(TickEvent.RenderTickEvent.Pre event) { if (dragPos != null) { //Minecraft.getMinecraft().mouseHelper.mouseXYChange(); dragPos = dragPos.add(Minecraft.getInstance().mouseHandler.getXVelocity(), Minecraft.getInstance().mouseHandler.getYVelocity(), 0); @@ -220,11 +218,6 @@ public static void onDebugRender(CustomizeGuiOverlayEvent.DebugText event) { RENDER_DEBUG.execute(x -> x.accept(event)); } - @SubscribeEvent - public static void onOverlayEvent(RenderGuiLayerEvent.Pre event) { - RENDER_OVERLAY.execute(x -> x.accept(event)); - } - @SubscribeEvent public static void onRenderMouseover(RenderHighlightEvent.Block event) { RenderType.cutout().setupRenderState(); @@ -248,7 +241,7 @@ public static void onRenderMouseover(RenderHighlightEvent.Block event) { static boolean hasHacked = false; @SubscribeEvent - public static void onHackShaders(RenderFrameEvent.Pre event) { + public static void onHackShaders(TickEvent.RenderTickEvent.Pre event) { if (!hasHacked/* && event.phase == TickEvent.Phase.START*/) { if (GameRenderer.getRendertypeCutoutShader() != null) { hasHacked = true; @@ -299,7 +292,7 @@ public static void registerVanillaShader(RegisterShadersEvent event) { REGISTER_SHADER.execute(x -> x.accept(event)); } - @SubscribeEvent + /*@SubscribeEvent public static void registerClientExtensions(RegisterClientExtensionsEvent event) { CLIENT_EXTENSIONS_REGISTER.execute(x -> x.accept(event)); } @@ -307,7 +300,7 @@ public static void registerClientExtensions(RegisterClientExtensionsEvent event) @SubscribeEvent public static void registerMenuScreen(RegisterMenuScreensEvent event) { MENU_SCREENS_REGISTER.execute(x -> x.accept(event)); - } + }*/ @SubscribeEvent public static void onSoundLoad(SoundEngineLoadEvent event) { diff --git a/src/main/java/cam72cam/mod/event/CommonEvents.java b/src/main/java/cam72cam/mod/event/CommonEvents.java index 5f25b832c..8f04a4d38 100644 --- a/src/main/java/cam72cam/mod/event/CommonEvents.java +++ b/src/main/java/cam72cam/mod/event/CommonEvents.java @@ -20,7 +20,6 @@ import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent; import net.minecraftforge.event.entity.EntityEvent; import net.minecraftforge.event.entity.EntityJoinLevelEvent; import net.minecraftforge.event.level.BlockEvent; @@ -52,7 +51,6 @@ public static final class World { public static final class Block { public static final Event>> REGISTER = new Event<>(); - public static final Event> REGISTER_CAPABILITY = new Event<>(); public static final Event BROKEN = new Event<>(); public static final Event> TAGS = new Event<>(); } @@ -83,10 +81,6 @@ public static final class Permissions { public static final Event> NODES = new Event<>(); } - public static final class Networking { - public static final Event> REGISTER_PACKET = new Event<>(); - } - @EventBusSubscriber(modid = ModCore.MODID) public static final class EventBusForge { // World @@ -114,8 +108,8 @@ public static void onWorldUnload(LevelEvent.Unload event) { public static void onWorldTick(LevelTickEvent.Pre event) { //Since 1.18.2 this is called both server and client //We only want server side - if (!event.getLevel().isClientSide()) { - World.TICK.execute(x -> x.accept(event.getLevel())); + if (!event.level.isClientSide()) { + World.TICK.execute(x -> x.accept(event.level)); } } @@ -174,7 +168,7 @@ public static void registerBlocks(RegisterEvent event) { event.register(BuiltInRegistries.MENU.key(), helper -> CONTAINER_REGISTRY.execute(x -> x.accept(helper))); } - @SubscribeEvent + /*@SubscribeEvent public static void registerCapability(RegisterCapabilitiesEvent event) { Block.REGISTER_CAPABILITY.execute(x -> x.accept(event)); } @@ -185,7 +179,7 @@ public static void registerPacket(RegisterPayloadHandlersEvent event) { .versioned(Packet.VERSION) .optional(); Networking.REGISTER_PACKET.execute(x -> x.accept(registrar)); - } + }*/ @SubscribeEvent public static void registerBlockTags(RegisterBlockTagEvent event) { diff --git a/src/main/java/cam72cam/mod/mixin/feat/iris_pbr/MixinDeferredWorldRenderingPipeline.java b/src/main/java/cam72cam/mod/mixin/feat/iris_pbr/MixinDeferredWorldRenderingPipeline.java deleted file mode 100644 index c9e93b8c9..000000000 --- a/src/main/java/cam72cam/mod/mixin/feat/iris_pbr/MixinDeferredWorldRenderingPipeline.java +++ /dev/null @@ -1,20 +0,0 @@ -package cam72cam.mod.mixin.feat.iris_pbr; - -import net.irisshaders.iris.pipeline.VanillaRenderingPipeline; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -/** - * PBR handler for RenderContext (optional) - */ -@Pseudo -@Mixin(value = VanillaRenderingPipeline.class, remap = false) -public class MixinDeferredWorldRenderingPipeline { - @Inject(method = "onSetShaderTexture", at = @At(value = "HEAD")) - public void onSetPBRTex(int id, CallbackInfo ci) { - //Nothing to do with vanilla - } -} diff --git a/src/main/java/cam72cam/mod/mixin/feat/iris_pbr/MixinNewWorldRenderingPipeline.java b/src/main/java/cam72cam/mod/mixin/feat/iris_pbr/MixinNewWorldRenderingPipeline.java deleted file mode 100644 index e1dc0d668..000000000 --- a/src/main/java/cam72cam/mod/mixin/feat/iris_pbr/MixinNewWorldRenderingPipeline.java +++ /dev/null @@ -1,51 +0,0 @@ -package cam72cam.mod.mixin.feat.iris_pbr; - -import cam72cam.mod.render.opengl.RenderContext; -import cam72cam.mod.render.opengl.RenderState; -import cam72cam.mod.render.opengl.Texture; -import net.irisshaders.iris.pbr.texture.PBRTextureManager; -import net.irisshaders.iris.pipeline.IrisRenderingPipeline; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - - -/** - * PBR handler for RenderContext (optional) - */ -@Pseudo -@Mixin(value = IrisRenderingPipeline.class, remap = false) -public class MixinNewWorldRenderingPipeline { - @Shadow - private int currentNormalTexture; - - @Shadow - private int currentSpecularTexture; - - @Shadow - private boolean shouldBindPBR; - - @Shadow - private boolean isRenderingWorld; - - @Inject(method = "onSetShaderTexture", at = @At("HEAD"), cancellable = true) - public void onSetPBRTex(int id, CallbackInfo ci) { - if (this.shouldBindPBR && this.isRenderingWorld) { - if (RenderContext.currentState.get() != null) { - RenderState state = RenderContext.currentState.get(); - if (state.getNormals() != Texture.NO_TEXTURE && state.getNormals() != null && state.getNormals().getId() != -1) { - currentNormalTexture = state.getNormals().getId(); - } - if (state.getSpecular() != Texture.NO_TEXTURE && state.getSpecular() != null && state.getSpecular().getId() != -1) { - currentSpecularTexture = state.getSpecular().getId(); - } - - PBRTextureManager.notifyPBRTexturesChanged(); - ci.cancel(); - } - } - } -} diff --git a/src/main/java/cam72cam/mod/net/Packet.java b/src/main/java/cam72cam/mod/net/Packet.java index 6b978ab3e..f1849a4cc 100644 --- a/src/main/java/cam72cam/mod/net/Packet.java +++ b/src/main/java/cam72cam/mod/net/Packet.java @@ -11,22 +11,28 @@ import cam72cam.mod.serialization.TagField; import cam72cam.mod.serialization.TagSerializer; import cam72cam.mod.world.World; +import io.netty.util.AttributeKey; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.PacketFlow; +import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket; +import net.minecraft.network.protocol.common.ServerboundCustomPayloadPacket; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.network.PacketDistributor; +import net.minecraftforge.event.network.CustomPayloadEvent; +import net.minecraftforge.network.*; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Locale; import java.util.Map; +import java.util.function.BiConsumer; import java.util.function.Supplier; /** @@ -41,6 +47,9 @@ public abstract class Packet { // Received packet data private TagCompound data = new TagCompound(); + // Each packet is given its own channel + private static Map channels = new HashMap<>(); + /** * So either forge or minecraft has a bug where it mixes up the player in the context handler... * @@ -61,81 +70,43 @@ public static void register(Supplier sup, PacketDirection dir) { } types.put(pktClass, sup); ResourceLocation name = ResourceLocation.tryBuild(ModCore.MODID, sup.get().getClass().getName().toLowerCase(Locale.ROOT).replace("$", ".")); - CustomPacketPayload.Type type = new CustomPacketPayload.Type<>(name); - CommonEvents.Networking.REGISTER_PACKET.subscribe(reg -> { - reg.commonBidirectional(type, Message.codec, (msg, context) -> { - context.enqueueWork(() -> { - msg.packet.ctx = context; - Packet newPacket = copyFreshPacket(msg); - World world = (context.protocol().isPlay() && context.flow() == PacketFlow.CLIENTBOUND) - ? MinecraftClient.getPlayer().getWorld() : World.get(context.player().level()); - try { - TagSerializer.deserialize(msg.packet.data, newPacket, world); - } catch (SerializationException e) { - ModCore.catching(e); - return; - } - newPacket.ctx = context; - if (newPacket.getPlayer() == null) { - try { - throw new Exception( - String.format("Invalid Packet %s: missing player", newPacket.getClass())); - } catch (Exception e) { - ModCore.catching(e); - return; - } - } - newPacket.handle(); - }); - }); - }); + var channel = ChannelBuilder.named(name) + .networkProtocolVersion(0) // versions are handled separately + .simpleChannel() + .configuration().clientbound() + .add(ClientboundCustomPayloadPacket.class, ClientboundCustomPayloadPacket.CONFIG_STREAM_CODEC, UMCPacketHandler::applyClientbound) + .play().clientbound() + .add(ClientboundCustomPayloadPacket.class, ClientboundCustomPayloadPacket.GAMEPLAY_STREAM_CODEC, UMCPacketHandler::applyClientbound) + .any().serverbound() + .add(ServerboundCustomPayloadPacket.class, ServerboundCustomPayloadPacket.STREAM_CODEC, UMCPacketHandler::applyServerbound) + .build(); + channels.put(pktClass, channel); } - //Since 1.20.4 NeoForge will use the identical packet object for networking in singleplayer - //Good optimization but bad for UMC - //Create a new copy to avoid modifying original packet object - private static Packet copyFreshPacket(Message msg) { - Packet newPacket; - try { - Constructor constructor = - msg.packet.getClass().getDeclaredConstructor(); - constructor.setAccessible(true); - newPacket = constructor.newInstance(); - } catch (InstantiationException | IllegalAccessException | - InvocationTargetException | NoSuchMethodException e) { - throw new RuntimeException(e); - } - return newPacket; - } - - IPayloadContext ctx; + CustomPayloadEvent.Context ctx; /** Called after deserialization */ protected abstract void handle(); /** Only valid during handle */ protected final World getWorld() { - if (ctx.protocol().isPlay() && ctx.flow() == PacketFlow.CLIENTBOUND) { - return getPlayer().getWorld(); - } return world; } /** Only valid during handle */ protected final Player getPlayer() { - return (ctx.protocol().isPlay() && ctx.flow() == PacketFlow.CLIENTBOUND) - ? MinecraftClient.getPlayer() - : player; + return player; } /** Send from server to all players around this pos */ public void sendToAllAround(World world, Vec3d pos, double distance) { - PacketDistributor.sendToPlayersNear((ServerLevel) world.internal, null, pos.x, pos.y, pos.z, distance, new Message(this)); + PacketDistributor.NEAR + .with(new PacketDistributor.TargetPoint(pos.x, pos.y, pos.z, distance, world.internal.dimension())) + .send(new ClientboundCustomPayloadPacket(new Message(this))); } /** Send from server to any player who is within viewing (entity tracker update) distance of the entity */ public void sendToObserving(Entity entity) { - net.minecraft.world.entity.Entity internal = entity.internal; int syncDist = entity.internal.getType().clientTrackingRange(); this.sendToAllAround(entity.getWorld(), entity.getPosition(), syncDist); } @@ -144,17 +115,20 @@ public void sendToObserving(Entity entity) { public void sendToServer() { this.player = MinecraftClient.getPlayer(); this.world = MinecraftClient.getPlayer().getWorld(); - PacketDistributor.sendToServer(new Message(this)); + PacketDistributor.SERVER.noArg() + .send(new ServerboundCustomPayloadPacket(new Message(this))); } /** Broadcast to all players from server */ public void sendToAll() { - PacketDistributor.sendToAllPlayers(new Message(this)); + PacketDistributor.ALL.noArg() + .send(new ClientboundCustomPayloadPacket(new Message(this))); } /** Send from server to player */ public void sendToPlayer(Player player) { - PacketDistributor.sendToPlayer((ServerPlayer) player.internal, new Message(this)); + PacketDistributor.PLAYER.with((ServerPlayer) player.internal) + .send(new ClientboundCustomPayloadPacket(new Message(this))); } /** Forge message construct. Do not use directly */ @@ -208,4 +182,41 @@ public CustomPacketPayload.Type type() { return type; } } + + private static class UMCPacketHandler { + + private static void apply(Message message, CustomPayloadEvent.Context context) { + context.enqueueWork(() -> { + World world = World.get(context.getSender().level()); + try { + TagSerializer.deserialize(message.packet.data, message.packet, world); + } catch (SerializationException e) { + ModCore.catching(e); + return; + } + if (message.packet.getPlayer() == null) { + try { + throw new Exception( + String.format("Invalid Packet %s: missing player", message.packet.getClass())); + } catch (Exception e) { + ModCore.catching(e); + return; + } + } + message.packet.handle(); + }); + } + + public static void applyClientbound(ClientboundCustomPayloadPacket packet, CustomPayloadEvent.Context context) { + if (packet.payload() instanceof Message message) { + apply(message, context); + } + } + + public static void applyServerbound(ServerboundCustomPayloadPacket packet, CustomPayloadEvent.Context context) { + if (packet.payload() instanceof Message message) { + apply(message, context); + } + } + } } diff --git a/src/main/java/cam72cam/mod/render/Light.java b/src/main/java/cam72cam/mod/render/Light.java index eeca5e129..ff29e2016 100644 --- a/src/main/java/cam72cam/mod/render/Light.java +++ b/src/main/java/cam72cam/mod/render/Light.java @@ -5,9 +5,6 @@ import cam72cam.mod.event.CommonEvents; import cam72cam.mod.math.Vec3d; import cam72cam.mod.world.World; -import dev.lambdaurora.lambdynlights.api.DynamicLightsContext; -import dev.lambdaurora.lambdynlights.api.DynamicLightsInitializer; -import dev.lambdaurora.lambdynlights.api.item.ItemLightSourceManager; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.SynchedEntityData; @@ -144,29 +141,6 @@ public static boolean enabled() { } private static boolean isLDLInstalled() { - try { - Class cls = Class.forName("dev.lambdaurora.lambdynlights.LambDynLights"); - return true; - } catch (ClassNotFoundException ignored) { - return false; - } - } - - public static class UMCDynLightInitializer implements DynamicLightsInitializer { - @Override - public void onInitializeDynamicLights(DynamicLightsContext lightCtx) { - lightCtx.entityLightSourceManager().onRegisterEvent().register(context -> { - for (int i = 1; i <= 15; i++) { - EntityType et = types[i]; - context.register(et, i); - } - }); - } - - @Deprecated(forRemoval = true) - @Override - public void onInitializeDynamicLights(ItemLightSourceManager itemLightSourceManager) { - //Deprecated - } + return false; // Cannot be installed on MinecraftForge >1.20.1 } } From 93ce8346b8e75534d6aef46d82eada0ae8df4536 Mon Sep 17 00:00:00 2001 From: Angelina Michalek Date: Mon, 18 May 2026 22:40:43 -0400 Subject: [PATCH 11/60] Convert to MinecraftForge 1.21.1 (part 3) --- build.gradle | 4 +-- .../java/cam72cam/mod/block/BlockType.java | 27 -------------- .../java/cam72cam/mod/fluid/FluidTank.java | 4 +-- src/main/java/cam72cam/mod/fluid/ITank.java | 2 +- .../java/cam72cam/mod/gui/GuiRegistry.java | 3 +- .../java/cam72cam/mod/item/CustomItem.java | 25 ++++++------- .../java/cam72cam/mod/item/ItemStack.java | 3 +- .../data_registry/MixinRecipeManager.java | 17 +++++---- .../java/cam72cam/mod/render/BlockRender.java | 8 ----- .../cam72cam/mod/render/GlobalRender.java | 24 +++++++------ src/main/java/cam72cam/mod/world/World.java | 35 +++++++------------ .../resources/META-INF/accesstransformer.cfg | 3 ++ 12 files changed, 62 insertions(+), 93 deletions(-) diff --git a/build.gradle b/build.gradle index 1ab354899..52dc3ccf9 100644 --- a/build.gradle +++ b/build.gradle @@ -41,7 +41,7 @@ minecraft { configureEach { workingDir.convention layout.projectDirectory.dir('run') // Mixin requires either specifying the config via command line, or in the Manifest - args "--mixin.config=universalmodcore.feat.mixins.json", "--mixin.config=universalmodcore.fix.mixins.json" + args "--mixin.config=mixins.feat.universalmodcore.json", "--mixin.config=mixins.fix.universalmodcore.json" systemProperty "mixin.debug.verbose", "true" systemProperty "mixin.debug.export", "true" @@ -185,7 +185,7 @@ jar { "Implementation-Title": project.name, "Implementation-Version": umcVersion, "Implementation-Vendor" :"", - "MixinConfigs" : "universalmodcore.feat.mixins.json, universalmodcore.fix.mixins.json" + "MixinConfigs" : "mixins.feat.universalmodcore.json,mixins.fix.universalmodcore.json" ]) } } diff --git a/src/main/java/cam72cam/mod/block/BlockType.java b/src/main/java/cam72cam/mod/block/BlockType.java index e3e4f4828..b103dd8ed 100644 --- a/src/main/java/cam72cam/mod/block/BlockType.java +++ b/src/main/java/cam72cam/mod/block/BlockType.java @@ -68,33 +68,6 @@ public BlockType(String modID, String name) { internal = getBlock(); helper.register(id.internal, internal); }); - - CommonEvents.Block.REGISTER_CAPABILITY.subscribe(event -> { - event.registerBlock(Capabilities.ItemHandler.BLOCK, - (level, pos, state, be, side) -> { - if (be instanceof TileEntity tile) { - return tile.getItemHandler(side); - } - return null; - }, - internal); - event.registerBlock(Capabilities.FluidHandler.BLOCK, - (level, pos, state, be, side) -> { - if (be instanceof TileEntity tile) { - return tile.getFluidHandler(side); - } - return null; - }, - internal); - event.registerBlock(Capabilities.EnergyStorage.BLOCK, - (level, pos, state, be, side) -> { - if (be instanceof TileEntity tile) { - return tile.getEnergyStorage(side); - } - return null; - }, - internal); - }); } /** Override to provide a custom Minecraft Block implementation (ex: support tile entities) */ diff --git a/src/main/java/cam72cam/mod/fluid/FluidTank.java b/src/main/java/cam72cam/mod/fluid/FluidTank.java index e4e10e80a..3ef34c2aa 100644 --- a/src/main/java/cam72cam/mod/fluid/FluidTank.java +++ b/src/main/java/cam72cam/mod/fluid/FluidTank.java @@ -93,11 +93,11 @@ public FluidStack drain(FluidStack fluidStack, boolean simulate) { } public TagCompound write(TagCompound tag) { - return new TagCompound(internal.writeToNBT(RegistryUtil.getRegistry(), tag.internal)); + return new TagCompound(internal.writeToNBT(tag.internal)); } public void read(TagCompound tag) { - internal.readFromNBT(RegistryUtil.getRegistry(), tag.internal); + internal.readFromNBT(tag.internal); } static class Mapper implements TagMapper { diff --git a/src/main/java/cam72cam/mod/fluid/ITank.java b/src/main/java/cam72cam/mod/fluid/ITank.java index c2bb499a6..1fa4d4c0e 100644 --- a/src/main/java/cam72cam/mod/fluid/ITank.java +++ b/src/main/java/cam72cam/mod/fluid/ITank.java @@ -21,7 +21,7 @@ public interface ITank { * See ImmersiveRailroading's FreightTank for an example. */ static ITank getTank(ItemStack inputCopy, Consumer onUpdate) { - Optional handler = FluidUtil.getFluidHandler(inputCopy.internal()); + Optional handler = FluidUtil.getFluidHandler(inputCopy.internal()).resolve(); if (handler.isEmpty()) { return null; } diff --git a/src/main/java/cam72cam/mod/gui/GuiRegistry.java b/src/main/java/cam72cam/mod/gui/GuiRegistry.java index ec8b5d830..19a2310fe 100644 --- a/src/main/java/cam72cam/mod/gui/GuiRegistry.java +++ b/src/main/java/cam72cam/mod/gui/GuiRegistry.java @@ -15,6 +15,7 @@ import cam72cam.mod.resource.Identifier; import cam72cam.mod.world.World; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.MenuScreens; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; @@ -54,7 +55,7 @@ public static void registerEvents() { /** Internal event registration, do not use */ @OnlyIn(Dist.CLIENT) public static void registerClientEvents() { - ClientEvents.MENU_SCREENS_REGISTER.subscribe(e -> e.register(TYPE, ClientContainerBuilder::new)); + ClientEvents.REGISTER_ENTITY.subscribe(() -> MenuScreens.register(TYPE, ClientContainerBuilder::new)); } public GuiRegistry() { diff --git a/src/main/java/cam72cam/mod/item/CustomItem.java b/src/main/java/cam72cam/mod/item/CustomItem.java index 4f899326f..16f201620 100644 --- a/src/main/java/cam72cam/mod/item/CustomItem.java +++ b/src/main/java/cam72cam/mod/item/CustomItem.java @@ -30,6 +30,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.function.Consumer; /** Implement to create/register a custom item */ public abstract class CustomItem { @@ -103,14 +104,14 @@ private class ItemInternal extends Item { public ItemInternal(Properties p_i48487_1_) { super(p_i48487_1_); - ClientEvents.CLIENT_EXTENSIONS_REGISTER.subscribe(e -> { + /*ClientEvents.CLIENT_EXTENSIONS_REGISTER.subscribe(e -> { e.registerItem(new IClientItemExtensions() { @Override public BlockEntityWithoutLevelRenderer getCustomRenderer() { return ItemRender.ISTER(); } }, this); - }); + });*/ } @Override @@ -162,16 +163,16 @@ public InteractionResultHolder use(net.minec ItemStack stack = umcPlayer.getHeldItem(umcHand).copy(); return InteractionResultHolder.consume(stack.internal()); } -//See constructor -// @Override -// public void initializeClient(Consumer consumer) { -// consumer.accept(new IClientItemExtensions() { -// @Override -// public BlockEntityWithoutLevelRenderer getCustomRenderer() { -// return ItemRender.ISTER(); -// } -// }); -// } + + @Override + public void initializeClient(Consumer consumer) { + consumer.accept(new IClientItemExtensions() { + @Override + public BlockEntityWithoutLevelRenderer getCustomRenderer() { + return ItemRender.ISTER(); + } + }); + } } /** * Helper for serializing / deserializing data on a stack diff --git a/src/main/java/cam72cam/mod/item/ItemStack.java b/src/main/java/cam72cam/mod/item/ItemStack.java index 3e1680b60..4f46cd2de 100644 --- a/src/main/java/cam72cam/mod/item/ItemStack.java +++ b/src/main/java/cam72cam/mod/item/ItemStack.java @@ -8,6 +8,7 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.component.CustomData; import net.minecraft.world.item.crafting.RecipeType; import net.minecraftforge.fluids.FluidUtil; @@ -159,7 +160,7 @@ public String toString() { /** Increase the damage counter on the item by the player */ public void damageItem(int i, Player player) { - internal().hurtAndBreak(i, (ServerLevel) player.internal.level(), player.internal, (s) -> {}); + internal().hurtAndBreak(i, (ServerLevel) player.internal.level(), (ServerPlayer) player.internal, (s) -> {}); } /** Completely null out the tag compound */ diff --git a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinRecipeManager.java b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinRecipeManager.java index 85e1371d0..b9fc0736e 100644 --- a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinRecipeManager.java +++ b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinRecipeManager.java @@ -7,7 +7,6 @@ import com.google.gson.Gson; import com.google.gson.JsonElement; import com.llamalad7.mixinextras.sugar.Local; -import net.minecraft.resources.RegistryOps; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener; @@ -15,8 +14,11 @@ import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.item.crafting.RecipeManager; import net.minecraft.world.item.crafting.RecipeType; +import net.minecraftforge.common.crafting.conditions.ICondition; import net.minecraftforge.fml.ModLoader; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -29,17 +31,20 @@ */ @Mixin(RecipeManager.class) public abstract class MixinRecipeManager extends SimpleJsonResourceReloadListener { + @Shadow + @Final + private ICondition.IContext context; + private MixinRecipeManager(Gson p_10768_, String p_10769_) { super(p_10768_, p_10769_); } @Inject(method = "apply(Ljava/util/Map;Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/util/profiling/ProfilerFiller;)V", - at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/world/item/crafting/RecipeManager;makeConditionalOps()Lnet/neoforged/neoforge/common/conditions/ConditionalOps;")) + at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/resources/RegistryOps;withContext(Lnet/minecraft/resources/ResourceLocation;Ljava/lang/Object;)Ljava/lang/Object;")) public void captureBuilder(Map p_44037_, ResourceManager p_44038_, ProfilerFiller p_44039_, CallbackInfo ci, - @Local ImmutableMultimap.Builder, RecipeHolder> builder, - @Local ImmutableMap.Builder> builder1, - @Local RegistryOps ops) { - RegistryUtil.recipeBuildingContext(this.makeConditionalOps().context); + @Local(name = "builder") ImmutableMultimap.Builder, RecipeHolder> builder, + @Local(name = "builder1") ImmutableMap.Builder> builder1) { + RegistryUtil.recipeBuildingContext(context); RegisterRecipeEvent event = new RegisterRecipeEvent(builder, builder1); ModLoader.get().postEvent(event); RegistryUtil.recipeBuildingContext(null); diff --git a/src/main/java/cam72cam/mod/render/BlockRender.java b/src/main/java/cam72cam/mod/render/BlockRender.java index a65f8e866..577622f33 100644 --- a/src/main/java/cam72cam/mod/render/BlockRender.java +++ b/src/main/java/cam72cam/mod/render/BlockRender.java @@ -123,14 +123,6 @@ public void render(TileEntity te, float partialTicks, PoseStack var3, MultiBuffe public boolean shouldRenderOffScreen(TileEntity te) { return true; } - - @Override - public AABB getRenderBoundingBox(TileEntity blockEntity) { - if (blockEntity.instance() != null) { - return blockEntity.bbCache.get(blockEntity.instance().getRenderBoundingBox()); - } - return TileEntity.INFINITE_EXTENT_AABB; - } }); }); } diff --git a/src/main/java/cam72cam/mod/render/GlobalRender.java b/src/main/java/cam72cam/mod/render/GlobalRender.java index f9a35accb..c75bd7fa6 100644 --- a/src/main/java/cam72cam/mod/render/GlobalRender.java +++ b/src/main/java/cam72cam/mod/render/GlobalRender.java @@ -15,6 +15,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; +import net.minecraftforge.client.event.CustomizeGuiOverlayEvent; import org.joml.Matrix4f; import java.util.ArrayList; @@ -29,15 +30,16 @@ public class GlobalRender { public static void registerClientEvents() { // Nice to have GPU info in F3 ClientEvents.RENDER_DEBUG.subscribe(event -> { - if (Minecraft.getInstance().getDebugOverlay().showDebugScreen() && GPUInfo.hasGPUInfo()) { + if (Minecraft.getInstance().getDebugOverlay().showDebugScreen() + && event.getSide() == CustomizeGuiOverlayEvent.DebugText.Side.Right && GPUInfo.hasGPUInfo()) { int i; - for (i = 0; i < event.getRight().size(); i++) { - if (event.getRight().get(i).startsWith("Display: ")) { + for (i = 0; i < event.getText().size(); i++) { + if (event.getText().get(i).startsWith("Display: ")) { i++; break; } } - event.getRight().add(i, GPUInfo.debug()); + event.getText().add(i, GPUInfo.debug()); } }); } @@ -48,12 +50,12 @@ public static void registerRender(RenderFunction func) { } /** Register a function that is called (with partial ticks) during the UI render phase */ - public static void registerOverlay(RenderFunction func) { - ClientEvents.RENDER_OVERLAY.subscribe(event -> { - if (event.getName().equals(VanillaGuiLayers.HOTBAR) && !Minecraft.getInstance().options.hideGui) { - func.render(new RenderState(event.getGuiGraphics().pose()).stage(RenderContext.Stage.GUI), event.getPartialTick().getRealtimeDeltaTicks()); - } - }); + public static void registerOverlay(RenderFunction func) { // TODO + //ClientEvents.RENDER_OVERLAY.subscribe(event -> { + // if (event.getName().equals(VanillaGuiLayers.HOTBAR) && !Minecraft.getInstance().options.hideGui) { + // func.render(new RenderState(event.getGuiGraphics().pose()).stage(RenderContext.Stage.GUI), event.getPartialTick().getRealtimeDeltaTicks()); + // } + //}); } /** Register a function that is called to render during the mouse over phase (only if a block is moused over) */ @@ -63,7 +65,7 @@ public static void registerItemMouseover(CustomItem item, MouseoverEvent fn) { Player player = MinecraftClient.getPlayer(); if (item.internal == player.getHeldItem(Player.Hand.PRIMARY).internal().getItem()) { fn.render(player, player.getHeldItem(Player.Hand.PRIMARY), MinecraftClient.getBlockMouseOver().down(), - MinecraftClient.getPosMouseOver(), new RenderState(event.getPoseStack()).stage(RenderContext.Stage.OVERLAY), event.getDeltaTracker().getRealtimeDeltaTicks()); + MinecraftClient.getPosMouseOver(), new RenderState(event.getPoseStack()).stage(RenderContext.Stage.OVERLAY), event.getPartialTick()); } } }); diff --git a/src/main/java/cam72cam/mod/world/World.java b/src/main/java/cam72cam/mod/world/World.java index 7004180dd..43bab3f70 100644 --- a/src/main/java/cam72cam/mod/world/World.java +++ b/src/main/java/cam72cam/mod/world/World.java @@ -45,6 +45,7 @@ import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.fml.loading.FMLEnvironment; import net.minecraftforge.common.IPlantable; import net.minecraftforge.fluids.capability.IFluidHandler; @@ -672,17 +673,12 @@ public IInventory getInventory(Vec3i offset) { /** Get the inventory at this block (accessed from given side) */ public IInventory getInventory(Vec3i offset, Facing dir) { - if (dir != null) { - IItemHandler capability = internal.getCapability(TileEntity.ITEM_HANDLER_BLOCK, offset.internal(), dir.internal); - if (capability instanceof IItemHandlerModifiable) { - return IInventory.from((IItemHandlerModifiable) capability); - } - } else { - for(Facing facing : Facing.values()){ - IItemHandler capability = internal.getCapability(TileEntity.ITEM_HANDLER_BLOCK, offset.internal(), facing.internal); - if (capability instanceof IItemHandlerModifiable) { - return IInventory.from((IItemHandlerModifiable) capability); - } + net.minecraft.world.level.block.entity.BlockEntity te = internal.getBlockEntity(offset.internal()); + Direction face = dir != null ? dir.internal : null; + if (te != null && te.getCapability(ForgeCapabilities.ITEM_HANDLER, face).isPresent()) { + IItemHandler inv = te.getCapability(ForgeCapabilities.ITEM_HANDLER, face).orElse(null); + if (inv instanceof IItemHandlerModifiable) { + return IInventory.from((IItemHandlerModifiable) inv); } } return null; @@ -701,17 +697,12 @@ public List getTank(Vec3i offset) { /** Get the tank at this block (accessed from given side) */ public List getTank(Vec3i offset, Facing dir) { - if (dir != null) { - IFluidHandler capability = internal.getCapability(TileEntity.FLUID_HANDLER_BLOCK, offset.internal(), dir.internal); - if (capability != null) { - return ITank.getTank(capability); - } - } else { - for(Facing facing : Facing.values()){ - IFluidHandler capability = internal.getCapability(TileEntity.FLUID_HANDLER_BLOCK, offset.internal(), facing.internal); - if (capability != null) { - return ITank.getTank(capability); - } + net.minecraft.world.level.block.entity.BlockEntity te = internal.getBlockEntity(offset.internal()); + Direction face = dir != null ? dir.internal : null; + if (te != null && te.getCapability(ForgeCapabilities.FLUID_HANDLER, face).isPresent()) { + IFluidHandler tank = te.getCapability(ForgeCapabilities.FLUID_HANDLER, face).orElse(null); + if (tank != null) { + return ITank.getTank(tank); } } return null; diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index cac06a698..e3a47e231 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -1,6 +1,9 @@ public net.minecraft.server.level.ServerChunkCache distanceManager # distanceManager public net.minecraft.server.level.DistanceManager tickets # tickets public net.minecraft.server.MinecraftServer storageSource # storageSource +public net.minecraft.server.packs.FilePackResources (Lnet/minecraft/server/packs/PackLocationInfo;Lnet/minecraft/server/packs/FilePackResources$SharedZipFileAccess;Ljava/lang/String;)V +public net.minecraft.server.packs.FilePackResources$SharedZipFileAccess +public net.minecraft.server.packs.FilePackResources$SharedZipFileAccess (Ljava/io/File;)V public net.minecraft.server.packs.FolderPackResources getFile(Ljava/lang/String;)Ljava/io/File; # getFile public net.minecraft.server.level.ChunkMap getChunks()Ljava/lang/Iterable; # getChunks public-f net.minecraft.world.entity.Entity getBoundingBox()Lnet/minecraft/world/phys/AABB; # net/minecraft/world/entity/Entity/getBoundingBox ()Lnet/minecraft/world/phys/AABB From f90eda95e8a26ec7cf4e6ce40c2ca38a892be636 Mon Sep 17 00:00:00 2001 From: Angelina Michalek Date: Mon, 18 May 2026 22:42:26 -0400 Subject: [PATCH 12/60] And that too --- build.gradle | 2 +- src/main/resources/mixins.feat.universalmodcore.json | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 52dc3ccf9..b174923d9 100644 --- a/build.gradle +++ b/build.gradle @@ -39,7 +39,7 @@ minecraft { runs { // applies to all the run configs below configureEach { - workingDir.convention layout.projectDirectory.dir('run') + workingDir.convention layout.projectDirectory.dir('runs') // Mixin requires either specifying the config via command line, or in the Manifest args "--mixin.config=mixins.feat.universalmodcore.json", "--mixin.config=mixins.fix.universalmodcore.json" diff --git a/src/main/resources/mixins.feat.universalmodcore.json b/src/main/resources/mixins.feat.universalmodcore.json index c58697fda..b21e57a44 100644 --- a/src/main/resources/mixins.feat.universalmodcore.json +++ b/src/main/resources/mixins.feat.universalmodcore.json @@ -15,8 +15,6 @@ ], "client": [ "data_registry.MixinSpriteResourceLoader", - "global_renderer.MixinRenderGlobal", - "iris_pbr.MixinDeferredWorldRenderingPipeline", - "iris_pbr.MixinNewWorldRenderingPipeline" + "global_renderer.MixinRenderGlobal" ] } From abd2e0dc7640fa740c8da9fea86aa1d70b3d1a2b Mon Sep 17 00:00:00 2001 From: Angelina Michalek Date: Tue, 19 May 2026 15:44:38 -0400 Subject: [PATCH 13/60] Update build.gradle+small modifications elsewhere --- build.gradle | 16 +++++++----- .../java/cam72cam/mod/block/BlockEntity.java | 2 +- .../cam72cam/mod/block/tile/TileEntity.java | 26 +++++++++---------- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/build.gradle b/build.gradle index b174923d9..018203ba6 100644 --- a/build.gradle +++ b/build.gradle @@ -13,15 +13,15 @@ java { repositories { maven { - url "https://cursemaven.com" + url = uri("https://cursemaven.com") } } String umcVersion = "1.2.3" if (!"release".equalsIgnoreCase(System.getProperty("target"))) { try { - umcVersion += "-" + 'git rev-parse --verify --short=7 HEAD'.execute().text.trim() - } catch (Exception ex) { + umcVersion += "-${providers.exec { commandLine("git", "rev-parse", "--verify", "--short=7", "HEAD") }.standardOutput.asText.get()}" + } catch (Exception ignored) { umcVersion += "-unknown" } } @@ -30,7 +30,9 @@ group = "cam72cam.universalmodcore" // http://maven.apache.org/guides/mini/guide base.archivesName = "UniversalModCore" java.toolchain.languageVersion = JavaLanguageVersion.of(21) -println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + '(' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch')) +println("Java: ${providers.systemProperty("java.version").get()}, " + + "JVM: ${providers.systemProperty("java.vm.version").get()} (${providers.systemProperty("java.vendor").get()}), " + + "Arch: ${providers.systemProperty("os.arch").get()}") minecraft { mappings channel: "official", version: "1.21.1" @@ -146,9 +148,9 @@ dependencies { } } - testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.7.2' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.2' - implementation(jarJar(group: 'javax.vecmath', name: 'vecmath', version: '1.5.2')) { + implementation(jarJar('javax.vecmath:vecmath:1.5.2')) { jarJar.configure(it) { module { group = 'javax.vecmath' @@ -203,7 +205,7 @@ publishing { } repositories { maven { - url "sftp://teamopenindustry.cc:22/var/www/html/maven/" + url = uri("sftp://teamopenindustry.cc:22/var/www/html/maven/") credentials { username = "mavenci" password = System.getenv("MAVENCI_PASS") diff --git a/src/main/java/cam72cam/mod/block/BlockEntity.java b/src/main/java/cam72cam/mod/block/BlockEntity.java index 8c3f0232f..d4786a4af 100644 --- a/src/main/java/cam72cam/mod/block/BlockEntity.java +++ b/src/main/java/cam72cam/mod/block/BlockEntity.java @@ -11,8 +11,8 @@ import cam72cam.mod.math.Vec3i; import cam72cam.mod.resource.Identifier; import cam72cam.mod.serialization.SerializationException; -import cam72cam.mod.serialization.TagCompound; import cam72cam.mod.util.Facing; +import cam72cam.mod.serialization.TagCompound; import cam72cam.mod.world.World; /** diff --git a/src/main/java/cam72cam/mod/block/tile/TileEntity.java b/src/main/java/cam72cam/mod/block/tile/TileEntity.java index 96b6280b2..e68355ee1 100644 --- a/src/main/java/cam72cam/mod/block/tile/TileEntity.java +++ b/src/main/java/cam72cam/mod/block/tile/TileEntity.java @@ -20,13 +20,11 @@ import cam72cam.mod.world.World; import com.google.common.collect.HashBiMap; import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; import net.minecraft.core.HolderLookup; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.Connection; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; @@ -35,16 +33,15 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.phys.AABB; +import net.minecraftforge.client.model.data.ModelData; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import net.minecraftforge.client.model.data.ModelData; import net.minecraftforge.client.model.data.ModelProperty; import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.energy.IEnergyStorage; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; import javax.annotation.Nonnull; @@ -327,16 +324,17 @@ public void setChanged() { public final SingleCache bbCache = new SingleCache<>(internal -> BoundingBox.from(internal).move(getBlockPos().getX(), getBlockPos().getY(), getBlockPos().getZ())); - - /* Moved to cam72cam.mod.render.BlockRender - @Override - public net.minecraft.world.phys.AABB getRenderBoundingBox() { - if (instance() != null) { - return bbCache.get(instance().getRenderBoundingBox()); - } - return INFINITE_EXTENT_AABB; - } - */ + /** + * @return Instance's bounding box + * @see BlockEntity + */ + @Override + public net.minecraft.world.phys.AABB getRenderBoundingBox() { + if (instance() != null) { + return bbCache.get(instance().getRenderBoundingBox()); + } + return INFINITE_EXTENT_AABB; + } /** * @return Instance's render distance From 8c968fa87978b46e5b21ab01159f793a65959dd7 Mon Sep 17 00:00:00 2001 From: Angelina Michalek Date: Tue, 19 May 2026 15:53:56 -0400 Subject: [PATCH 14/60] It launches! --- src/main/java/cam72cam/mod/net/Packet.java | 43 ++++++---------------- 1 file changed, 11 insertions(+), 32 deletions(-) diff --git a/src/main/java/cam72cam/mod/net/Packet.java b/src/main/java/cam72cam/mod/net/Packet.java index f1849a4cc..d5cbd5920 100644 --- a/src/main/java/cam72cam/mod/net/Packet.java +++ b/src/main/java/cam72cam/mod/net/Packet.java @@ -25,6 +25,8 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraftforge.event.network.CustomPayloadEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import net.minecraftforge.network.*; import java.lang.reflect.Constructor; @@ -39,6 +41,7 @@ * Packet abstraction and registration * @see TagSerializer */ +@Mod.EventBusSubscriber(modid = ModCore.MODID) public abstract class Packet { public static final String VERSION = "1.0"; // Packet class name -> Packet Constructor @@ -47,9 +50,6 @@ public abstract class Packet { // Received packet data private TagCompound data = new TagCompound(); - // Each packet is given its own channel - private static Map channels = new HashMap<>(); - /** * So either forge or minecraft has a bug where it mixes up the player in the context handler... * @@ -69,18 +69,6 @@ public static void register(Supplier sup, PacketDirection dir) { return; } types.put(pktClass, sup); - ResourceLocation name = ResourceLocation.tryBuild(ModCore.MODID, sup.get().getClass().getName().toLowerCase(Locale.ROOT).replace("$", ".")); - var channel = ChannelBuilder.named(name) - .networkProtocolVersion(0) // versions are handled separately - .simpleChannel() - .configuration().clientbound() - .add(ClientboundCustomPayloadPacket.class, ClientboundCustomPayloadPacket.CONFIG_STREAM_CODEC, UMCPacketHandler::applyClientbound) - .play().clientbound() - .add(ClientboundCustomPayloadPacket.class, ClientboundCustomPayloadPacket.GAMEPLAY_STREAM_CODEC, UMCPacketHandler::applyClientbound) - .any().serverbound() - .add(ServerboundCustomPayloadPacket.class, ServerboundCustomPayloadPacket.STREAM_CODEC, UMCPacketHandler::applyServerbound) - .build(); - channels.put(pktClass, channel); } CustomPayloadEvent.Context ctx; @@ -183,11 +171,14 @@ public CustomPacketPayload.Type type() { } } - private static class UMCPacketHandler { - - private static void apply(Message message, CustomPayloadEvent.Context context) { - context.enqueueWork(() -> { - World world = World.get(context.getSender().level()); + /** + * Internal + */ + @SubscribeEvent + public static void onCustomPacket(CustomPayloadEvent event) { + if (event.getPayloadObject() instanceof Message message) { + event.getSource().enqueueWork(() -> { + World world = World.get(event.getSource().getSender().level()); try { TagSerializer.deserialize(message.packet.data, message.packet, world); } catch (SerializationException e) { @@ -206,17 +197,5 @@ private static void apply(Message message, CustomPayloadEvent.Context context) { message.packet.handle(); }); } - - public static void applyClientbound(ClientboundCustomPayloadPacket packet, CustomPayloadEvent.Context context) { - if (packet.payload() instanceof Message message) { - apply(message, context); - } - } - - public static void applyServerbound(ServerboundCustomPayloadPacket packet, CustomPayloadEvent.Context context) { - if (packet.payload() instanceof Message message) { - apply(message, context); - } - } } } From 439cae8f0032360ec3cfbe17f76fb9cab3048cba Mon Sep 17 00:00:00 2001 From: Angelina Michalek Date: Tue, 19 May 2026 16:21:22 -0400 Subject: [PATCH 15/60] change that --- src/main/java/cam72cam/mod/ModCore.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cam72cam/mod/ModCore.java b/src/main/java/cam72cam/mod/ModCore.java index 9f3421f63..f48aa3fe5 100644 --- a/src/main/java/cam72cam/mod/ModCore.java +++ b/src/main/java/cam72cam/mod/ModCore.java @@ -82,7 +82,7 @@ public static void register(Mod ctr) { public ModCore(FMLJavaModLoadingContext context) { System.out.println("Welcome to UniversalModCore!"); instance = this; - var modEventBus = context.getModEventBus(); + IEventBus modEventBus = context.getModEventBus(); ModCore.register(new Internal()); proxy.setup(); From fdf7e3ff16699cc450980de7db86f9bd933ff08d Mon Sep 17 00:00:00 2001 From: Angelina Michalek Date: Tue, 19 May 2026 16:49:28 -0400 Subject: [PATCH 16/60] Fix error when building --- build.gradle | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 018203ba6..2183e2375 100644 --- a/build.gradle +++ b/build.gradle @@ -20,7 +20,7 @@ repositories { String umcVersion = "1.2.3" if (!"release".equalsIgnoreCase(System.getProperty("target"))) { try { - umcVersion += "-${providers.exec { commandLine("git", "rev-parse", "--verify", "--short=7", "HEAD") }.standardOutput.asText.get()}" + umcVersion += "-${(providers.exec { commandLine("git", "rev-parse", "--verify", "--short=7", "HEAD") }.standardOutput.asText.get() as String).substring(0, 7)}" } catch (Exception ignored) { umcVersion += "-unknown" } @@ -29,6 +29,8 @@ version = "1.21.1-forge-" + umcVersion group = "cam72cam.universalmodcore" // http://maven.apache.org/guides/mini/guide-naming-conventions.html base.archivesName = "UniversalModCore" +println("version: ${version}") + java.toolchain.languageVersion = JavaLanguageVersion.of(21) println("Java: ${providers.systemProperty("java.version").get()}, " + "JVM: ${providers.systemProperty("java.vm.version").get()} (${providers.systemProperty("java.vendor").get()}), " + From d505d5c56a31d044d9300c6f271716315a9bb126 Mon Sep 17 00:00:00 2001 From: Zuo Fei <119470535+Goldenfield192@users.noreply.github.com> Date: Wed, 27 May 2026 18:30:11 +0800 Subject: [PATCH 17/60] [Mainline Chore] Update template files to Java25 (#241) * update template file to Java25 * remove comment * update build file * fix forge mod loading with multi release --- .../fix/multi_release/MixinJarDiscoverer.java | 24 +++++ .../mixins.feat.universalmodcore.json | 3 + .../mixins.fix.universalmodcore.json | 4 + src/main/resources/template/build.gradle | 95 +++++++++++++++---- .../gradle/wrapper/gradle-wrapper.properties | 2 +- src/main/resources/template/settings.gradle | 19 ++++ 6 files changed, 126 insertions(+), 21 deletions(-) create mode 100644 src/main/java/cam72cam/mod/mixin/fix/multi_release/MixinJarDiscoverer.java create mode 100644 src/main/resources/template/settings.gradle diff --git a/src/main/java/cam72cam/mod/mixin/fix/multi_release/MixinJarDiscoverer.java b/src/main/java/cam72cam/mod/mixin/fix/multi_release/MixinJarDiscoverer.java new file mode 100644 index 000000000..a39f6c00a --- /dev/null +++ b/src/main/java/cam72cam/mod/mixin/fix/multi_release/MixinJarDiscoverer.java @@ -0,0 +1,24 @@ +package cam72cam.mod.mixin.fix.multi_release; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; +import net.minecraftforge.fml.common.discovery.JarDiscoverer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +import java.util.regex.Matcher; +import java.util.zip.ZipEntry; + +@Mixin(JarDiscoverer.class) +public class MixinJarDiscoverer { + //Skip Java9+ classes in Multi-Release as Forge can't process them + @WrapOperation(method = "findClassesASM", at = @At(value = "INVOKE", target = "Ljava/util/regex/Matcher;matches()Z"), remap = false, require = 0) + private boolean checkClass(Matcher instance, Operation original, @Local(name = "ze") ZipEntry ze) { + if (original.call(instance)) { + return !ze.getName().endsWith("module-info.class") + && !ze.getName().startsWith("META-INF/versions/"); + } + return false; + } +} diff --git a/src/main/resources/mixins.feat.universalmodcore.json b/src/main/resources/mixins.feat.universalmodcore.json index 70e0018fa..4f73bae51 100644 --- a/src/main/resources/mixins.feat.universalmodcore.json +++ b/src/main/resources/mixins.feat.universalmodcore.json @@ -7,6 +7,9 @@ "minVersion": "0.8.2", "compatibilityLevel": "JAVA_8", "mixinPriority": 1300, + "mixinextras": { + "minVersion": "0.5.0" + }, "mixins": [ "large_entity_collision.MixinVanillaWorld" ], diff --git a/src/main/resources/mixins.fix.universalmodcore.json b/src/main/resources/mixins.fix.universalmodcore.json index 36a5e3a0e..aca368e9e 100644 --- a/src/main/resources/mixins.fix.universalmodcore.json +++ b/src/main/resources/mixins.fix.universalmodcore.json @@ -6,7 +6,11 @@ "minVersion": "0.8.2", "compatibilityLevel": "JAVA_8", "mixinPriority": 1301, + "mixinextras": { + "minVersion": "0.5.0" + }, "mixins": [ + "multi_release.MixinJarDiscoverer" ], "client": [ ] diff --git a/src/main/resources/template/build.gradle b/src/main/resources/template/build.gradle index 4e3e99c05..304bf6939 100644 --- a/src/main/resources/template/build.gradle +++ b/src/main/resources/template/build.gradle @@ -1,45 +1,100 @@ //BUILDSCRIPT// -buildscript { - repositories { - maven { url = "https://maven.minecraftforge.net/" } - } - dependencies { - classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT' - } +plugins { + id 'java' + //A customized fork for better support on Cleanroom + id 'xyz.wagyourtail.unimined' version "1.4.18-kappa" + id 'com.gradleup.shadow' version "9.4.1" + id "maven-publish" + id 'xyz.wagyourtail.jvmdowngrader' version '1.3.6' +} +configurations { + umcShade + modImplementation.extendsFrom umcShade } //PLUGINS// -apply plugin: 'net.minecraftforge.gradle.forge' //MINECRAFT// -sourceCompatibility = targetCompatibility = '1.8' -compileJava { - sourceCompatibility = targetCompatibility = '1.8' +java { + toolchain { + languageVersion = JavaLanguageVersion.of(25) + } + + withSourcesJar() +} + +tasks.withType(JavaCompile).configureEach { + options.release = 25 +} + +jvmdg { + quiet = false + downgradeTo = JavaVersion.VERSION_1_8 + multiReleaseOriginal = true + shadeInlining = false + dg(configurations.umcShade, false) + //MR-JAR uses a Incremental Update-like strategy, so add versions here won't cause too much waste + multiReleaseVersions = [ + JavaVersion.VERSION_1_8, // 1.16 and below + JavaVersion.VERSION_16, // 1.17 + JavaVersion.VERSION_17, // 1.18 - 1.20 + JavaVersion.VERSION_21, // 1.21 + JavaVersion.VERSION_25 // 26.1 and beyond as well as modern 1.7.10/1.12.2 + ].toSet() } -minecraft { - version = "1.12.2-14.23.5.2847" - runDir = "run" - mappings = "stable_39" +unimined.minecraft { + version "1.12.2" + + mappings { + searge() + mcp("stable", "39-1.12") + } + + cleanroom { + loader("0.5.12-alpha") + } + + defaultRemapJar = true } //DEPENDENCIES// #UMC_REPO# dependencies { - runtime "net.minecrell:terminalconsoleappender:1.3.0" - compile #UMC_DEPENDENCY# + compileOnly "com.cleanroommc:lwjglx:1.0.0" + modImplementation #UMC_DEPENDENCY# } //JAR// -jar.finalizedBy('reobfJar') +jar { + enabled = false +} + +shadowJar { + configurations = [project.configurations.umcShade] + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + mergeServiceFiles() + archiveClassifier = 'shadow' +} + +remapJar { + inputFile = tasks.shadeDowngradedApi.archiveFile + dependsOn(tasks.named("shadowJar")) + archiveClassifier = '' +} + +tasks.named("assemble") { + dependsOn(tasks.named("remapJar")) +} processResources { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE inputs.property "version", project.version - inputs.property "mcversion", project.minecraft.version + inputs.property "mcversion", "#MINECRAFT#" from(sourceSets.main.resources.srcDirs) { include 'mcmod.info' - expand 'version':project.version, 'mcversion':project.minecraft.version + expand 'version':project.version, 'mcversion':"#MINECRAFT#" } from(sourceSets.main.resources.srcDirs) { exclude 'mcmod.info' diff --git a/src/main/resources/template/gradle/wrapper/gradle-wrapper.properties b/src/main/resources/template/gradle/wrapper/gradle-wrapper.properties index 6f1e0c162..23a74e6e7 100644 --- a/src/main/resources/template/gradle/wrapper/gradle-wrapper.properties +++ b/src/main/resources/template/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip diff --git a/src/main/resources/template/settings.gradle b/src/main/resources/template/settings.gradle new file mode 100644 index 000000000..be61b5cac --- /dev/null +++ b/src/main/resources/template/settings.gradle @@ -0,0 +1,19 @@ +pluginManagement { + repositories { + mavenCentral() + gradlePluginPortal() + maven {url = "https://plugins.gradle.org/"} + maven {url = "https://maven.neoforged.net/releases"} + maven {url = "https://maven.minecraftforge.net/"} + maven {url = "https://maven.fabricmc.net/"} + maven {url = "https://maven.wagyourtail.xyz/releases"} + maven {url = "https://maven.wagyourtail.xyz/snapshots"} + maven {url = 'https://maven.arcseekers.com/releases'} + } +} + +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" +} + +rootProject.name = '#NAME#' \ No newline at end of file From 006a96443e6d9770b6283c53eb2b6b8f2d97b74a Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Wed, 27 May 2026 18:43:29 +0800 Subject: [PATCH 18/60] bump version to 1.2.4 --- build.gradle | 2 +- src/main/java/cam72cam/mod/ModCore.java | 2 +- src/main/resources/mcmod.info | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 4e0e15dd8..49c5d7bdd 100644 --- a/build.gradle +++ b/build.gradle @@ -28,7 +28,7 @@ repositories { } } -String umcVersion = "1.2.3" +String umcVersion = "1.2.4" if (!"release".equalsIgnoreCase(System.getProperty("target"))) { try { umcVersion += "-" + 'git rev-parse --verify --short=7 HEAD'.execute().text.trim() diff --git a/src/main/java/cam72cam/mod/ModCore.java b/src/main/java/cam72cam/mod/ModCore.java index 3cf3fec07..ec94585d6 100644 --- a/src/main/java/cam72cam/mod/ModCore.java +++ b/src/main/java/cam72cam/mod/ModCore.java @@ -46,7 +46,7 @@ public class ModCore { public static final String MODID = "universalmodcore"; public static final String NAME = "UniversalModCore"; - public static final String VERSION = "1.2.3"; + public static final String VERSION = "1.2.4"; public static ModCore instance; private List mods = new ArrayList<>(); diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index ae9db0c9e..a7fa56a07 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "universalmodcore", "name": "UniversalModCore", "description": "Universal Mod Core", - "version": "1.2.3", + "version": "1.2.4", "mcversion": "1.12.2", "url": "", "updateUrl": "", From f8b65d3a900bf27089321fbb4f39b20550f3be3f Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Thu, 28 May 2026 18:13:45 +0800 Subject: [PATCH 19/60] use mixin AP in 1.14 --- build.gradle | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 7a81d44eb..fc23107e1 100644 --- a/build.gradle +++ b/build.gradle @@ -141,11 +141,12 @@ dependencies { // for more info... // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html // http://www.gradle.org/docs/current/userguide/dependency_management.html - annotationProcessor(shade('org.spongepowered:mixin:0.8.3') { + annotationProcessor('org.spongepowered:mixin:0.8.3:processor') + shade('org.spongepowered:mixin:0.8.3') { exclude module: 'guava' exclude module: 'commons-io' exclude module: 'gson' - }) + } annotationProcessor(shade('io.github.llamalad7:mixinextras-common:0.5.0')) annotationProcessor 'org.ow2.asm:asm-debug-all:5.2' annotationProcessor 'com.google.guava:guava:32.1.2-jre' From ae5dc352621747b9987744638ad4787c848db6ce Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Thu, 28 May 2026 18:44:51 +0800 Subject: [PATCH 20/60] resolve 1.14 conflicts --- .../fix/multi_release/MixinJarDiscoverer.java | 23 ++++++++----------- src/main/resources/META-INF/mods.toml | 2 +- src/main/resources/mcmod.info | 0 3 files changed, 11 insertions(+), 14 deletions(-) delete mode 100644 src/main/resources/mcmod.info diff --git a/src/main/java/cam72cam/mod/mixin/fix/multi_release/MixinJarDiscoverer.java b/src/main/java/cam72cam/mod/mixin/fix/multi_release/MixinJarDiscoverer.java index a39f6c00a..72a487526 100644 --- a/src/main/java/cam72cam/mod/mixin/fix/multi_release/MixinJarDiscoverer.java +++ b/src/main/java/cam72cam/mod/mixin/fix/multi_release/MixinJarDiscoverer.java @@ -1,24 +1,21 @@ package cam72cam.mod.mixin.fix.multi_release; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.llamalad7.mixinextras.sugar.Local; -import net.minecraftforge.fml.common.discovery.JarDiscoverer; +import net.minecraftforge.fml.loading.moddiscovery.AbstractJarFileLocator; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import java.util.regex.Matcher; -import java.util.zip.ZipEntry; +import java.nio.file.Path; +import java.util.function.Consumer; +import java.util.stream.Stream; -@Mixin(JarDiscoverer.class) +@Mixin(AbstractJarFileLocator.class) public class MixinJarDiscoverer { //Skip Java9+ classes in Multi-Release as Forge can't process them - @WrapOperation(method = "findClassesASM", at = @At(value = "INVOKE", target = "Ljava/util/regex/Matcher;matches()Z"), remap = false, require = 0) - private boolean checkClass(Matcher instance, Operation original, @Local(name = "ze") ZipEntry ze) { - if (original.call(instance)) { - return !ze.getName().endsWith("module-info.class") - && !ze.getName().startsWith("META-INF/versions/"); - } - return false; + @Inject(method = "lambda$scanFile$1", at = @At(value = "INVOKE", target = "Ljava/util/stream/Stream;forEach(Ljava/util/function/Consumer;)V"), remap = false, require = 0) + private static void checkClass(Consumer pathConsumer, Path path, CallbackInfo ci, @Local(name = "files") Stream files) { + files.filter(p -> !p.toString().endsWith("module-info.class") && !p.toString().startsWith("META-INF/versions/")); } } diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index b9e26efa0..2d3d339fb 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -4,7 +4,7 @@ issueTrackerURL="https://github.com/TeamOpenIndustry/UniversalModCore/issues" [[mods]] modId="universalmodcore" -version="1.2.3" +version="1.2.4" displayName="Universal Mod Core" displayURL="https://github.com/TeamOpenIndustry/UniversalModCore" authors="cam72cam" diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info deleted file mode 100644 index e69de29bb..000000000 From 52cd14742caf5a245238e79366d6b08c0a067f4e Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Thu, 28 May 2026 19:32:13 +0800 Subject: [PATCH 21/60] no need to fix MRJAR since 1.14 --- .../fix/multi_release/MixinJarDiscoverer.java | 21 ------------------- .../mod/render/opengl/RenderContext.java | 5 +++-- .../mixins.fix.universalmodcore.json | 1 - 3 files changed, 3 insertions(+), 24 deletions(-) delete mode 100644 src/main/java/cam72cam/mod/mixin/fix/multi_release/MixinJarDiscoverer.java diff --git a/src/main/java/cam72cam/mod/mixin/fix/multi_release/MixinJarDiscoverer.java b/src/main/java/cam72cam/mod/mixin/fix/multi_release/MixinJarDiscoverer.java deleted file mode 100644 index 72a487526..000000000 --- a/src/main/java/cam72cam/mod/mixin/fix/multi_release/MixinJarDiscoverer.java +++ /dev/null @@ -1,21 +0,0 @@ -package cam72cam.mod.mixin.fix.multi_release; - -import com.llamalad7.mixinextras.sugar.Local; -import net.minecraftforge.fml.loading.moddiscovery.AbstractJarFileLocator; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import java.nio.file.Path; -import java.util.function.Consumer; -import java.util.stream.Stream; - -@Mixin(AbstractJarFileLocator.class) -public class MixinJarDiscoverer { - //Skip Java9+ classes in Multi-Release as Forge can't process them - @Inject(method = "lambda$scanFile$1", at = @At(value = "INVOKE", target = "Ljava/util/stream/Stream;forEach(Ljava/util/function/Consumer;)V"), remap = false, require = 0) - private static void checkClass(Consumer pathConsumer, Path path, CallbackInfo ci, @Local(name = "files") Stream files) { - files.filter(p -> !p.toString().endsWith("module-info.class") && !p.toString().startsWith("META-INF/versions/")); - } -} diff --git a/src/main/java/cam72cam/mod/render/opengl/RenderContext.java b/src/main/java/cam72cam/mod/render/opengl/RenderContext.java index 4f6145e4c..65ef3f765 100644 --- a/src/main/java/cam72cam/mod/render/opengl/RenderContext.java +++ b/src/main/java/cam72cam/mod/render/opengl/RenderContext.java @@ -236,10 +236,11 @@ public static With apply(RenderState state) { int height = (int) state.scissor_range.getHeight() * scaleFactor; if (fourIntBuffer == null) { - fourIntBuffer = GLAllocation.createDirectIntBuffer(16); + //16 ints in case it overflows... + fourIntBuffer = GLAllocation.createDirectByteBuffer(64).asIntBuffer(); } fourIntBuffer.position(0); - GL11.glGetInteger(GL11.GL_SCISSOR_BOX, fourIntBuffer); + GL11.glGetIntegerv(GL11.GL_SCISSOR_BOX, fourIntBuffer); int[] oldScissor = new int[]{fourIntBuffer.get(0), fourIntBuffer.get(1), fourIntBuffer.get(2), fourIntBuffer.get(3)}; restore.add(() -> GL11.glScissor(oldScissor[0], oldScissor[1], oldScissor[2], oldScissor[3])); diff --git a/src/main/resources/mixins.fix.universalmodcore.json b/src/main/resources/mixins.fix.universalmodcore.json index 8eaf22bae..968bf8528 100644 --- a/src/main/resources/mixins.fix.universalmodcore.json +++ b/src/main/resources/mixins.fix.universalmodcore.json @@ -11,7 +11,6 @@ }, "mixins": [ "custom_bb_collision.MixinVoxelShapes" - "multi_release.MixinJarDiscoverer" ], "client": [ ] From 1896387f6a8d7cda5ae7ef71db408cca14829b8a Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Thu, 28 May 2026 19:46:27 +0800 Subject: [PATCH 22/60] fix mcp mapping name --- src/main/resources/template/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/template/build.gradle b/src/main/resources/template/build.gradle index 40e635f26..113a56de9 100644 --- a/src/main/resources/template/build.gradle +++ b/src/main/resources/template/build.gradle @@ -49,7 +49,7 @@ unimined.minecraft { mappings { searge() - mcp("stable", "58-1.14") + mcp("stable", "58-1.14.4") } minecraftForge { From 44874359305df6e6ba1493b7d9816a34abff0fc8 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Thu, 28 May 2026 20:50:59 +0800 Subject: [PATCH 23/60] fix 1.15 conflicts --- src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java b/src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java index 593351022..d68a06d5a 100644 --- a/src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java +++ b/src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java @@ -180,7 +180,7 @@ public static void drawItem(ItemStack stack, int x, int y, Matrix4 matrix) { //Otherwise we don't care // .stage(RenderContext.Stage.GUI); state.model_view().multiply(matrix); - RenderHelper.enableGUIStandardItemLighting(); + RenderHelper.enableStandardItemLighting(); try (With ctx = RenderContext.apply(state)) { Minecraft.getInstance().getItemRenderer().renderItemIntoGUI(stack.internal, x, y); } From eb324e05611e672b64e280717d7842f8ce5747ec Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Thu, 28 May 2026 21:04:17 +0800 Subject: [PATCH 24/60] fix mc version --- src/main/resources/template/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/template/build.gradle b/src/main/resources/template/build.gradle index fb2a6cf30..7b91fecc5 100644 --- a/src/main/resources/template/build.gradle +++ b/src/main/resources/template/build.gradle @@ -45,7 +45,7 @@ jvmdg { } unimined.minecraft { - version "1.14.4" + version "1.15.2" mappings { searge() From 1a233336842688e6fbd59f55ea2135a57cf57ee7 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Fri, 29 May 2026 18:48:03 +0800 Subject: [PATCH 25/60] resolve 1.16 conflicts --- src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java | 5 +++-- src/main/java/cam72cam/mod/render/opengl/RenderContext.java | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java b/src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java index afdffc0f0..279651235 100644 --- a/src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java +++ b/src/main/java/cam72cam/mod/gui/helpers/GUIHelpers.java @@ -182,11 +182,12 @@ public static void drawItem(ItemStack stack, int x, int y, Matrix4 matrix) { //Otherwise we don't care // .stage(RenderContext.Stage.GUI); state.model_view().multiply(matrix); - RenderHelper.enableStandardItemLighting(); + RenderHelper.turnBackOn(); + RenderHelper.setupFor3DItems(); try (With ctx = RenderContext.apply(state)) { Minecraft.getInstance().getItemRenderer().renderAndDecorateItem(stack.internal, x, y); } - RenderHelper.disableStandardItemLighting(); + RenderHelper.turnOff(); } /** Try to open an external link in player's browser */ diff --git a/src/main/java/cam72cam/mod/render/opengl/RenderContext.java b/src/main/java/cam72cam/mod/render/opengl/RenderContext.java index 29d4da4f3..55bb51662 100644 --- a/src/main/java/cam72cam/mod/render/opengl/RenderContext.java +++ b/src/main/java/cam72cam/mod/render/opengl/RenderContext.java @@ -251,7 +251,7 @@ public static With apply(RenderState state) { if (fourIntBuffer == null) { //16 ints in case it overflows... - fourIntBuffer = GLAllocation.createDirectByteBuffer(64).asIntBuffer(); + fourIntBuffer = GLAllocation.createByteBuffer(64).asIntBuffer(); } fourIntBuffer.position(0); GL11.glGetIntegerv(GL11.GL_SCISSOR_BOX, fourIntBuffer); From 523ee93259575e52a4d4840f282bb99aa98880d9 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Fri, 29 May 2026 20:50:33 +0800 Subject: [PATCH 26/60] change JVM vendor --- src/main/resources/template/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/template/build.gradle b/src/main/resources/template/build.gradle index 2d23b85ae..f70ba1fd1 100644 --- a/src/main/resources/template/build.gradle +++ b/src/main/resources/template/build.gradle @@ -19,6 +19,7 @@ configurations { java { toolchain { languageVersion = JavaLanguageVersion.of(25) + vendor = JvmVendorSpec.AZUL } withSourcesJar() From cd6b55ba7e80a614d631928867dd4b870c840b67 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Fri, 29 May 2026 20:57:10 +0800 Subject: [PATCH 27/60] Revert "change JVM vendor" This reverts commit 523ee93259575e52a4d4840f282bb99aa98880d9. --- src/main/resources/template/build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/resources/template/build.gradle b/src/main/resources/template/build.gradle index f70ba1fd1..2d23b85ae 100644 --- a/src/main/resources/template/build.gradle +++ b/src/main/resources/template/build.gradle @@ -19,7 +19,6 @@ configurations { java { toolchain { languageVersion = JavaLanguageVersion.of(25) - vendor = JvmVendorSpec.AZUL } withSourcesJar() From 7a8e1b7cf42e1d82f4eb8c6b82cabc29f8d7b79c Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Fri, 29 May 2026 21:21:21 +0800 Subject: [PATCH 28/60] change foojay version --- src/main/resources/template/settings.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/template/settings.gradle b/src/main/resources/template/settings.gradle index be61b5cac..f130cc7b7 100644 --- a/src/main/resources/template/settings.gradle +++ b/src/main/resources/template/settings.gradle @@ -13,7 +13,7 @@ pluginManagement { } plugins { - id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" + id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" } rootProject.name = '#NAME#' \ No newline at end of file From ab7fa01f810975a408882af78f94df8f2a98a6ce Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Fri, 29 May 2026 21:30:23 +0800 Subject: [PATCH 29/60] update foojay resolver --- src/main/resources/template/settings.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/template/settings.gradle b/src/main/resources/template/settings.gradle index be61b5cac..f130cc7b7 100644 --- a/src/main/resources/template/settings.gradle +++ b/src/main/resources/template/settings.gradle @@ -13,7 +13,7 @@ pluginManagement { } plugins { - id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" + id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" } rootProject.name = '#NAME#' \ No newline at end of file From cee8b055473c7b2dd0e919a097f3e2c98b805256 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Fri, 29 May 2026 21:50:38 +0800 Subject: [PATCH 30/60] use UTF-8 encoding when compile --- src/main/resources/template/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/template/build.gradle b/src/main/resources/template/build.gradle index 304bf6939..21c51fb43 100644 --- a/src/main/resources/template/build.gradle +++ b/src/main/resources/template/build.gradle @@ -25,6 +25,7 @@ java { tasks.withType(JavaCompile).configureEach { options.release = 25 + options.encoding = 'UTF-8' } jvmdg { From 9c216d86a2609ed660304d1cb5cdb5d492d03abc Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Fri, 29 May 2026 22:38:19 +0800 Subject: [PATCH 31/60] fix parchment version --- src/main/resources/template/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/template/build.gradle b/src/main/resources/template/build.gradle index c15de2138..21f2cee44 100644 --- a/src/main/resources/template/build.gradle +++ b/src/main/resources/template/build.gradle @@ -49,7 +49,7 @@ unimined.minecraft { mappings { mojmap() - parchment("1.19.4", "2023.06.25") + parchment("1.19.4", "2023.06.26") } minecraftForge { From c8765ebb0082b28e54a1f362606f02838e9d9123 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Fri, 29 May 2026 23:14:12 +0800 Subject: [PATCH 32/60] add intermediary mapping --- src/main/resources/template/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/template/build.gradle b/src/main/resources/template/build.gradle index 113a56de9..f79614a7e 100644 --- a/src/main/resources/template/build.gradle +++ b/src/main/resources/template/build.gradle @@ -48,6 +48,7 @@ unimined.minecraft { version "1.14.4" mappings { + intermediary() searge() mcp("stable", "58-1.14.4") } From 7809dfd459a111cd6372e4af43116fcb0c3b200c Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Sat, 30 May 2026 09:55:18 +0800 Subject: [PATCH 33/60] fix named access widener --- src/main/resources/template/build.gradle | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/resources/template/build.gradle b/src/main/resources/template/build.gradle index f79614a7e..d25b8144a 100644 --- a/src/main/resources/template/build.gradle +++ b/src/main/resources/template/build.gradle @@ -53,6 +53,13 @@ unimined.minecraft { mcp("stable", "58-1.14.4") } + mods { + modImplementation { + //In case something uses named mapping in AW + catchAWNamespaceAssertion() + } + } + minecraftForge { loader("28.2.26") } From 0d3613702fa1b378eaa4523189a05a35f001b99f Mon Sep 17 00:00:00 2001 From: Angelina Michalek Date: Sat, 30 May 2026 00:24:18 -0400 Subject: [PATCH 34/60] Swap to UniMined for Template. --- src/main/resources/template/build.gradle | 16 +++++----------- src/main/resources/template/gradle.properties | 9 --------- 2 files changed, 5 insertions(+), 20 deletions(-) delete mode 100644 src/main/resources/template/gradle.properties diff --git a/src/main/resources/template/build.gradle b/src/main/resources/template/build.gradle index 634e67e42..a746403e2 100644 --- a/src/main/resources/template/build.gradle +++ b/src/main/resources/template/build.gradle @@ -46,12 +46,12 @@ jvmdg { } unimined.minecraft { - version "1.20.1" + version "1.21.1" mappings { intermediary() mojmap() - parchment("1.20.1", "2023.09.03") + parchment("1.21.1", "2024.11.17") } mods { @@ -62,10 +62,10 @@ unimined.minecraft { } minecraftForge { - loader("47.4.20") + loader("52.1.14") } - defaultRemapJar = true + defaultRemapJar = false } //DEPENDENCIES// @@ -88,14 +88,8 @@ shadowJar { archiveClassifier = 'shadow' } -remapJar { - inputFile = tasks.shadeDowngradedApi.archiveFile - dependsOn(tasks.named("shadowJar")) - archiveClassifier = '' -} - tasks.named("assemble") { - dependsOn(tasks.named("remapJar")) + dependsOn(tasks.named("shadowJar")) } processResources { diff --git a/src/main/resources/template/gradle.properties b/src/main/resources/template/gradle.properties deleted file mode 100644 index b1828365f..000000000 --- a/src/main/resources/template/gradle.properties +++ /dev/null @@ -1,9 +0,0 @@ -org.gradle.caching=true -org.gradle.parallel=true -org.gradle.configureondemand=true - -org.gradle.configuration-cache=true -org.gradle.configuration-cache.parallel=true -org.gradle.configuration-cache.problems=warn - -net.minecraftforge.gradle.merge-source-sets=true \ No newline at end of file From 69f6816e778eaaeca8cee4cda920a5165e63c724 Mon Sep 17 00:00:00 2001 From: Deepseasaltyfish <111645282+Deepseasaltyfish@users.noreply.github.com> Date: Sat, 30 May 2026 21:19:42 +0800 Subject: [PATCH 35/60] Fix PBR map not valid without scaling & add LoD (#232) --- .../java/cam72cam/mod/model/obj/OBJModel.java | 122 +++++++++++++++--- 1 file changed, 106 insertions(+), 16 deletions(-) diff --git a/src/main/java/cam72cam/mod/model/obj/OBJModel.java b/src/main/java/cam72cam/mod/model/obj/OBJModel.java index e90f51f6c..2aa16cd62 100644 --- a/src/main/java/cam72cam/mod/model/obj/OBJModel.java +++ b/src/main/java/cam72cam/mod/model/obj/OBJModel.java @@ -30,8 +30,8 @@ public class OBJModel { public final int textureHeight; public final int defaultLodSize; public final Map> textures = new HashMap<>(); - public final Map normals = new HashMap<>(); - public final Map speculars = new HashMap<>(); + public final Map> normals = new HashMap<>(); + public final Map> speculars = new HashMap<>(); public final LinkedHashMap groups; //Order by vertex start/stop public final boolean isSmoothShading; @@ -112,7 +112,7 @@ public OBJModel(Identifier modelLoc, float darken, double scale, Collection k.getString("variant"))) { ModCore.debug("%s : tex %s", modelLoc, variant); - Map lodMap = new HashMap<>(); + Map baseTexLodMap = new HashMap<>(); int texSize = Math.max(textureWidth, textureHeight); Supplier texData = cache.getResource(variant + ".rgba", builder -> { @@ -128,7 +128,7 @@ public OBJModel(Identifier modelLoc, float darken, double scale, Collection lodData = cache.getResource(variant + String.format("_%s.rgba", lodValue), builder -> new GenericByteBuffer(toRGBA(scaleImage(builder.getTextures().get(variant).get(), lodValue))) ); - lodMap.put(lodValue, new OBJTextureSheet(size.getLeft(), size.getRight(), lodData, cacheSeconds)); + baseTexLodMap.put(lodValue, new OBJTextureSheet(size.getLeft(), size.getRight(), lodData, cacheSeconds)); } } - this.textures.put(variant, lodMap); + this.textures.put(variant, baseTexLodMap); if (hasNormals) { + Map normalTexLodMap = new HashMap<>(); try { - Supplier normData = cache.getResource(variant + ".norm", builder -> new GenericByteBuffer(toRGBA(builder.getNormals().get(variant).get()))); - this.normals.put(variant, new OBJTextureSheet(textureWidth, textureHeight, normData, cacheSeconds)); + Supplier normData = cache.getResource(variant + ".norm", builder -> { + BufferedImage img = builder.getNormals().get(variant).get(); + if (Config.DebugTextureSheets) { + try { + File cacheFile = ModCore.cacheFile(new Identifier(modelLoc.getDomain() + "debug", modelLoc.getPath() + "_" + variant + "_norm.png")); + ModCore.info("Writing debug normal to " + cacheFile); + ImageIO.write(img, "png", cacheFile); + } catch (IOException e) { + ModCore.catching(e); + } + } + return new GenericByteBuffer(toRGBA(img)); + }); + normalTexLodMap.put(texSize, new OBJTextureSheet(textureWidth, textureHeight, normData, cacheSeconds)); + + for (Integer lodValue : lodValues) { + if (lodValue < texSize) { + Pair size = scaleSize(textureWidth, textureHeight, lodValue); + Supplier lodNormData = cache.getResource(variant + "_" + lodValue + ".norm", + builder -> new GenericByteBuffer(toRGBA(scaleImage(builder.getNormals().get(variant).get(), lodValue)))); + normalTexLodMap.put(lodValue, new OBJTextureSheet(size.getLeft(), size.getRight(), lodNormData, cacheSeconds)); + } + } + this.normals.put(variant, normalTexLodMap); } catch (Exception ex) { ModCore.warn("Unable to load normal map for %s, %s", modelLoc, ex); } } if (hasSpeculars) { + Map specularTexLodMap = new HashMap<>(); try { - Supplier specData = cache.getResource(variant + ".spec", builder -> new GenericByteBuffer(toRGBA(builder.getSpeculars().get(variant).get()))); - this.speculars.put(variant, new OBJTextureSheet(textureWidth, textureHeight, specData, cacheSeconds)); + Supplier specData = cache.getResource(variant + ".spec", builder -> { + BufferedImage img = builder.getSpeculars().get(variant).get(); + if (Config.DebugTextureSheets) { + try { + File cacheFile = ModCore.cacheFile(new Identifier(modelLoc.getDomain() + "debug", modelLoc.getPath() + "_" + variant + "_spec.png")); + ModCore.info("Writing debug specular to " + cacheFile); + ImageIO.write(img, "png", cacheFile); + } catch (IOException e) { + ModCore.catching(e); + } + } + return new GenericByteBuffer(toRGBA(img)); + }); + specularTexLodMap.put(texSize, new OBJTextureSheet(textureWidth, textureHeight, specData, cacheSeconds)); + + for (Integer lodValue : lodValues) { + if (lodValue < texSize) { + Pair size = scaleSize(textureWidth, textureHeight, lodValue); + Supplier lodSpecData = cache.getResource(variant + "_" + lodValue + ".spec", + builder -> new GenericByteBuffer(toRGBA(scaleImage(builder.getSpeculars().get(variant).get(), lodValue)))); + specularTexLodMap.put(lodValue, new OBJTextureSheet(size.getLeft(), size.getRight(), lodSpecData, cacheSeconds)); + } + } + this.speculars.put(variant, specularTexLodMap); } catch (Exception ex) { ModCore.warn("Unable to load specular map for %s, %s", modelLoc, ex); } @@ -302,18 +348,62 @@ public void apply(RenderState state) { } } - - - if (lodSize == defaultLodSize && OBJModel.this.normals.containsKey(texName)) { - state.normals(OBJModel.this.normals.get(texName).synchronous(wait)); + OBJTextureSheet normTex = null; + if (OBJModel.this.normals.containsKey(texName)) { + Map normLodMap = OBJModel.this.normals.get(texName); + normTex = normLodMap.get(lodSize); + if (normTex == null) { + normTex = normLodMap.get(defaultLodSize); + } + } + if (normTex != null) { + if (wait) { + state.normals(normTex.synchronous(true)); + } else { + normTex.getId(); + if (!normTex.isLoaded()) { + normTex = OBJModel.this.normals.get(texName).values().stream() + .filter(CustomTexture::isLoaded) + .findAny().orElse(null); + } + if (normTex != null) { + state.normals(normTex); + } else { + state.normals(defTex); + } + } } else { state.normals(defTex); } - if (lodSize == defaultLodSize && OBJModel.this.speculars.containsKey(texName)) { - state.specular(OBJModel.this.speculars.get(texName).synchronous(wait)); + + OBJTextureSheet specTex = null; + if (OBJModel.this.speculars.containsKey(texName)) { + Map specLodMap = OBJModel.this.speculars.get(texName); + specTex = specLodMap.get(lodSize); + if (specTex == null) { + specTex = specLodMap.get(defaultLodSize); + } + } + if (specTex != null) { + if (wait) { + state.specular(specTex.synchronous(true)); + } else { + specTex.getId(); + if (!specTex.isLoaded()) { + specTex = OBJModel.this.speculars.get(texName).values().stream() + .filter(CustomTexture::isLoaded) + .findAny().orElse(null); + } + if (specTex != null) { + state.specular(specTex); + } else { + state.specular(defTex); + } + } } else { state.specular(defTex); } + state.smooth_shading(OBJModel.this.isSmoothShading); } From 4347fbf4b2900ffde3af9fa7c9e972041d8bcc7d Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Tue, 9 Jun 2026 22:26:07 +0800 Subject: [PATCH 36/60] feat: add ModCore.semanticVersion --- src/main/java/cam72cam/mod/ModCore.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/cam72cam/mod/ModCore.java b/src/main/java/cam72cam/mod/ModCore.java index ec94585d6..65693e66f 100644 --- a/src/main/java/cam72cam/mod/ModCore.java +++ b/src/main/java/cam72cam/mod/ModCore.java @@ -349,6 +349,10 @@ public static int mcVersion() { return 11202; } + public static String semanticVersion() { + return "1.12.2-forge"; + } + private static Boolean isDev = null; public static boolean isDevelopmentEnvironment() { From 0c16505fee784a99231ef6cd942baef325ce06bf Mon Sep 17 00:00:00 2001 From: Zuo Fei <119470535+Goldenfield192@users.noreply.github.com> Date: Fri, 12 Jun 2026 20:25:50 +0800 Subject: [PATCH 37/60] [Mainline Feature] Roll rotation support (#226) * feat: add roll axis * remove testing code * fix: restrict degrees range * ref: remove unnecessary side check * ref: roll implementation * fix: sync roll separately * Revert "fix: sync roll separately" This reverts commit 29adb36ae973d0463f920f1e9187b3f1389c67e2. * Revert "ref: roll implementation" This reverts commit 953247aba04b640d695a92b65e28fbeecd037376. * ref: reorganize rotation methods order * ref: move data initialization to entityInit * cleanup * ref: change roll to heritage impl * fix: update prevRoll before entity tick * fix: make prevRoll server-only --- .../cam72cam/mod/entity/CustomEntity.java | 31 ++++++++ src/main/java/cam72cam/mod/entity/Entity.java | 70 +++++++++++++++---- .../cam72cam/mod/entity/ModdedEntity.java | 25 +++++++ .../cam72cam/mod/render/EntityRenderer.java | 6 +- 4 files changed, 116 insertions(+), 16 deletions(-) diff --git a/src/main/java/cam72cam/mod/entity/CustomEntity.java b/src/main/java/cam72cam/mod/entity/CustomEntity.java index 9ed08d116..fd4c84fbd 100644 --- a/src/main/java/cam72cam/mod/entity/CustomEntity.java +++ b/src/main/java/cam72cam/mod/entity/CustomEntity.java @@ -2,6 +2,8 @@ import cam72cam.mod.entity.sync.EntitySync; import cam72cam.mod.world.World; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.math.MathHelper; import java.util.List; @@ -89,4 +91,33 @@ public List getPassengers() { return internal.getActualPassengers(); } + @Override + public float getRotationRoll() { + return internal.getDataManager().get(ModdedEntity.ROLL); + } + + @Override + public float getRotationRoll(float partialTicks) { + return (float) MathHelper.clampedLerp(getPrevRotationRoll(), getRotationRoll(), partialTicks); + } + + @Override + public void setRotationRoll(float roll) { + EntityDataManager dataManager = internal.getDataManager(); + float prevRoll = dataManager.get(ModdedEntity.PREV_ROLL); + while (roll - prevRoll < -180.0F) + { + prevRoll -= 360.0F; + } + while (roll - prevRoll >= 180.0F) + { + prevRoll += 360.0F; + } + dataManager.set(ModdedEntity.PREV_ROLL, prevRoll); + dataManager.set(ModdedEntity.ROLL, roll); + } + + public float getPrevRotationRoll() { + return internal.getDataManager().get(ModdedEntity.PREV_ROLL); + } } diff --git a/src/main/java/cam72cam/mod/entity/Entity.java b/src/main/java/cam72cam/mod/entity/Entity.java index 9e6f460dd..4bb2d20d8 100644 --- a/src/main/java/cam72cam/mod/entity/Entity.java +++ b/src/main/java/cam72cam/mod/entity/Entity.java @@ -7,9 +7,9 @@ import cam72cam.mod.world.World; import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.passive.EntityVillager; -import net.minecraft.util.DamageSource; +import net.minecraft.network.datasync.EntityDataManager; import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; import net.minecraft.world.Explosion; import java.util.List; @@ -19,7 +19,7 @@ /** * The base entity abstraction that wraps MC entities. - * + *

* TODO: Make sure we are setting prevRot/Loc stuff correctly. Should it only be changed on a tick processing the movement? */ public class Entity { @@ -76,29 +76,64 @@ public float getRotationYaw() { return internal.rotationYaw; } + public float getRotationPitch() { + return internal.rotationPitch; + } + + /** + * @see CustomEntity#getRotationRoll() + */ + public float getRotationRoll() { + return 0f; + } + + public float getRotationYaw(float partialTicks) { + return (float) MathHelper.clampedLerp(internal.prevRotationYaw, internal.rotationYaw, partialTicks); + } + + public float getRotationPitch(float partialTicks) { + return (float) MathHelper.clampedLerp(internal.prevRotationPitch, internal.rotationPitch, partialTicks); + } + + /** + * @see CustomEntity#getRotationRoll(float) + */ + public float getRotationRoll(float partialTicks) { + return 0; + } + public void setRotationYaw(float yaw) { internal.prevRotationYaw = internal.rotationYaw; internal.rotationYaw = yaw; - double d0 = internal.prevRotationYaw - yaw; - if (d0 < -180.0D) - { - internal.prevRotationYaw += 360.0F; - } - if (d0 >= 180.0D) + while (internal.rotationYaw - internal.prevRotationYaw < -180.0F) { internal.prevRotationYaw -= 360.0F; } - - } - - public float getRotationPitch() { - return internal.rotationPitch; + while (internal.rotationYaw - internal.prevRotationYaw >= 180.0F) + { + internal.prevRotationYaw += 360.0F; + } } public void setRotationPitch(float pitch) { internal.prevRotationPitch = internal.rotationPitch; internal.rotationPitch = pitch; + + while (internal.rotationPitch - internal.prevRotationPitch < -180.0F) + { + internal.prevRotationPitch -= 360.0F; + } + while (internal.rotationPitch - internal.prevRotationPitch >= 180.0F) + { + internal.prevRotationPitch += 360.0F; + } + } + + /** + * @see CustomEntity#setRotationRoll(float) + */ + public void setRotationRoll(float roll) { } public float getPrevRotationYaw() { @@ -109,6 +144,13 @@ public float getPrevRotationPitch() { return internal.prevRotationPitch; } + /** + * @see CustomEntity#getPrevRotationRoll() + */ + public float getPrevRotationRoll() { + return 0f; + } + Vec3d eyeCache; public Vec3d getPositionEyes() { if (eyeCache == null || ( diff --git a/src/main/java/cam72cam/mod/entity/ModdedEntity.java b/src/main/java/cam72cam/mod/entity/ModdedEntity.java index dfda57422..5613fd23d 100644 --- a/src/main/java/cam72cam/mod/entity/ModdedEntity.java +++ b/src/main/java/cam72cam/mod/entity/ModdedEntity.java @@ -15,6 +15,9 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; import net.minecraft.util.DamageSource; import net.minecraft.util.EnumHand; import net.minecraft.util.math.AxisAlignedBB; @@ -37,6 +40,15 @@ public class ModdedEntity extends Entity implements IEntityAdditionalSpawnData { @TagField(value = "passengers", mapper = PassengerMapper.class) private Map passengerPositions = new HashMap<>(); + //Data synchronization + static final DataParameter PREV_ROLL = EntityDataManager.createKey(ModdedEntity.class, DataSerializers.FLOAT); + static final DataParameter ROLL = EntityDataManager.createKey(ModdedEntity.class, DataSerializers.FLOAT); + //Data storage + @TagField + private float roll = 0; + @TagField + private float prevRoll = 0; + // All of the known seats attached to this entity private final List seats = new ArrayList<>(); @@ -74,6 +86,8 @@ public ModdedEntity(World world) { @Override protected final void entityInit() { + this.dataManager.register(ROLL, 0f); + this.dataManager.register(PREV_ROLL, 0f); } /** Setup self if we have not done so already. This happens during entity data load. */ @@ -129,6 +143,11 @@ private void load(TagCompound data) { ModCore.catching(e, "Error during entity load: %s - %s", this, data); } + if (!this.world.isRemote) { + dataManager.set(ROLL, this.roll); + dataManager.set(PREV_ROLL, this.prevRoll); + } + TagCompound selfData = data.get("selfData"); if (selfData == null) { // Old style used to save everything in one giant NBT blob. New versions save self in a sub tag. @@ -162,6 +181,9 @@ protected final void writeEntityToNBT(NBTTagCompound compound) { */ private void save(TagCompound data) { data.setString("custom_mob_type", type); + this.roll = dataManager.get(ROLL); + this.prevRoll = dataManager.get(PREV_ROLL); + try { TagSerializer.serialize(data, this); } catch (SerializationException e) { @@ -225,6 +247,9 @@ public final void writeSpawnData(ByteBuf buffer) { */ @Override public final void onUpdate() { + if (!world.isRemote) { + this.dataManager.set(PREV_ROLL, this.dataManager.get(ROLL)); + } iTickable.onTick(); try { self.sync.send(); diff --git a/src/main/java/cam72cam/mod/render/EntityRenderer.java b/src/main/java/cam72cam/mod/render/EntityRenderer.java index 7ff9cc8c8..03a2f6f2c 100644 --- a/src/main/java/cam72cam/mod/render/EntityRenderer.java +++ b/src/main/java/cam72cam/mod/render/EntityRenderer.java @@ -102,7 +102,8 @@ public void doRender(ModdedEntity stock, double x, double y, double z, float ent RenderState state = new RenderState(); state.translate(x, y, z); state.rotate(180 - entityYaw, 0, 1, 0); - state.rotate(self.getRotationPitch(), 1, 0, 0); + state.rotate(self.getRotationPitch(partialTicks), 1, 0, 0); + state.rotate(self.getRotationRoll(partialTicks), 0, 0, 1); state.rotate(-90, 0, 1, 0); state.stage(RenderContext.Stage.ENTITY); renderers.get(self.getClass()).render(self, state, partialTicks); @@ -120,7 +121,8 @@ public void renderMultipass(ModdedEntity stock, double x, double y, double z, fl RenderState state = new RenderState(); state.translate(x, y, z); state.rotate(180 - entityYaw, 0, 1, 0); - state.rotate(self.getRotationPitch(), 1, 0, 0); + state.rotate(self.getRotationPitch(partialTicks), 1, 0, 0); + state.rotate(self.getRotationRoll(partialTicks), 0, 0, 1); state.rotate(-90, 0, 1, 0); state.stage(RenderContext.Stage.ENTITY); renderers.get(self.getClass()).postRender(self, state, partialTicks); From c36b595f6b07ff0b333e151edd123fad90ca3b55 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Sun, 14 Jun 2026 15:44:01 +0800 Subject: [PATCH 38/60] bump version to 1.3.0 --- build.gradle | 4 ++-- src/main/java/cam72cam/mod/ModCore.java | 2 +- src/main/resources/mcmod.info | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 49c5d7bdd..a77e16d0b 100644 --- a/build.gradle +++ b/build.gradle @@ -28,7 +28,7 @@ repositories { } } -String umcVersion = "1.2.4" +String umcVersion = "1.3.0" if (!"release".equalsIgnoreCase(System.getProperty("target"))) { try { umcVersion += "-" + 'git rev-parse --verify --short=7 HEAD'.execute().text.trim() @@ -49,7 +49,7 @@ minecraft { version = "1.12.2-14.23.5.2847" runDir = "run" - coreMod = 'cam72cam.mod.UMCMixinPlugin' + coreMod = 'cam72cam.mod.UMCCoremodPlugin' // clientRunArgs.addAll('--tweakClass', 'org.spongepowered.asm.launch.MixinTweaker', '--mixin', 'mixins.universalmodcore.json') // serverRunArgs.addAll('--tweakClass', 'org.spongepowered.asm.launch.MixinTweaker', '--mixin', 'mixins.universalmodcore.json') // the mappings can be changed at any time, and must be in the following format. diff --git a/src/main/java/cam72cam/mod/ModCore.java b/src/main/java/cam72cam/mod/ModCore.java index 65693e66f..03c38303b 100644 --- a/src/main/java/cam72cam/mod/ModCore.java +++ b/src/main/java/cam72cam/mod/ModCore.java @@ -46,7 +46,7 @@ public class ModCore { public static final String MODID = "universalmodcore"; public static final String NAME = "UniversalModCore"; - public static final String VERSION = "1.2.4"; + public static final String VERSION = "1.3.0"; public static ModCore instance; private List mods = new ArrayList<>(); diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index a7fa56a07..1e584e886 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "universalmodcore", "name": "UniversalModCore", "description": "Universal Mod Core", - "version": "1.2.4", + "version": "1.3.0", "mcversion": "1.12.2", "url": "", "updateUrl": "", From 4e486171471d4f99547f8d1e3293b2e00ee0bce8 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Mon, 15 Jun 2026 16:12:02 +0800 Subject: [PATCH 39/60] fix: mistake in coremod name --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index a77e16d0b..948ded2af 100644 --- a/build.gradle +++ b/build.gradle @@ -49,7 +49,7 @@ minecraft { version = "1.12.2-14.23.5.2847" runDir = "run" - coreMod = 'cam72cam.mod.UMCCoremodPlugin' + coreMod = 'cam72cam.mod.UMCMixinPlugin' // clientRunArgs.addAll('--tweakClass', 'org.spongepowered.asm.launch.MixinTweaker', '--mixin', 'mixins.universalmodcore.json') // serverRunArgs.addAll('--tweakClass', 'org.spongepowered.asm.launch.MixinTweaker', '--mixin', 'mixins.universalmodcore.json') // the mappings can be changed at any time, and must be in the following format. From c3e7e2d94c1ca1ded91e2885a1e33784c8ead661 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Wed, 17 Jun 2026 00:56:44 +0800 Subject: [PATCH 40/60] fix: 1.14 semantic version --- src/main/java/cam72cam/mod/ModCore.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cam72cam/mod/ModCore.java b/src/main/java/cam72cam/mod/ModCore.java index e014aa30a..213d9b6b5 100644 --- a/src/main/java/cam72cam/mod/ModCore.java +++ b/src/main/java/cam72cam/mod/ModCore.java @@ -422,7 +422,7 @@ public static int mcVersion() { } public static String semanticVersion() { - return "1.12.2-forge"; + return "1.14.4-forge"; } private static Boolean isDev = null; From 471247ca9a8ca43f991dd4077eab0d8cf64d60c0 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Wed, 17 Jun 2026 01:06:56 +0800 Subject: [PATCH 41/60] update 1.14+ mods.toml --- src/main/resources/META-INF/mods.toml | 2 +- src/main/resources/mcmod.info | 0 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 src/main/resources/mcmod.info diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 2d3d339fb..e322d1e7c 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -4,7 +4,7 @@ issueTrackerURL="https://github.com/TeamOpenIndustry/UniversalModCore/issues" [[mods]] modId="universalmodcore" -version="1.2.4" +version="1.3.0" displayName="Universal Mod Core" displayURL="https://github.com/TeamOpenIndustry/UniversalModCore" authors="cam72cam" diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info deleted file mode 100644 index e69de29bb..000000000 From 63ecca8c0dcf5a9531fc377eee5a1386f4d5f9a3 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Wed, 17 Jun 2026 16:24:12 +0800 Subject: [PATCH 42/60] resolve 1.16 conflicts --- src/main/java/cam72cam/mod/ModCore.java | 2 +- src/main/java/cam72cam/mod/entity/CustomEntity.java | 7 +++---- src/main/java/cam72cam/mod/entity/Entity.java | 8 +++----- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/main/java/cam72cam/mod/ModCore.java b/src/main/java/cam72cam/mod/ModCore.java index 41f2a721c..2744fd4b6 100644 --- a/src/main/java/cam72cam/mod/ModCore.java +++ b/src/main/java/cam72cam/mod/ModCore.java @@ -441,7 +441,7 @@ public static int mcVersion() { } public static String semanticVersion() { - return "1.15.2-forge"; + return "1.16.5-forge"; } public static boolean isDevelopmentEnvironment() { diff --git a/src/main/java/cam72cam/mod/entity/CustomEntity.java b/src/main/java/cam72cam/mod/entity/CustomEntity.java index 8e6f8ac89..d48b6bfdf 100644 --- a/src/main/java/cam72cam/mod/entity/CustomEntity.java +++ b/src/main/java/cam72cam/mod/entity/CustomEntity.java @@ -1,7 +1,6 @@ package cam72cam.mod.entity; import cam72cam.mod.entity.sync.EntitySync; -import cam72cam.mod.world.World; import net.minecraft.network.datasync.EntityDataManager; import net.minecraft.util.math.MathHelper; @@ -93,7 +92,7 @@ public List getPassengers() { @Override public float getRotationRoll() { - return internal.getDataManager().get(ModdedEntity.ROLL); + return internal.getEntityData().get(ModdedEntity.ROLL); } @Override @@ -103,7 +102,7 @@ public float getRotationRoll(float partialTicks) { @Override public void setRotationRoll(float roll) { - EntityDataManager dataManager = internal.getDataManager(); + EntityDataManager dataManager = internal.getEntityData(); float prevRoll = dataManager.get(ModdedEntity.PREV_ROLL); while (roll - prevRoll < -180.0F) { @@ -118,6 +117,6 @@ public void setRotationRoll(float roll) { } public float getPrevRotationRoll() { - return internal.getDataManager().get(ModdedEntity.PREV_ROLL); + return internal.getEntityData().get(ModdedEntity.PREV_ROLL); } } diff --git a/src/main/java/cam72cam/mod/entity/Entity.java b/src/main/java/cam72cam/mod/entity/Entity.java index c242cda87..b8c07e816 100644 --- a/src/main/java/cam72cam/mod/entity/Entity.java +++ b/src/main/java/cam72cam/mod/entity/Entity.java @@ -7,8 +7,6 @@ import cam72cam.mod.world.World; import net.minecraft.entity.MobEntity; import net.minecraft.entity.merchant.villager.VillagerEntity; -import net.minecraft.util.DamageSource; -import net.minecraft.network.datasync.EntityDataManager; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.MathHelper; import net.minecraft.world.Explosion; @@ -80,7 +78,7 @@ public float getRotationYaw() { } public float getRotationPitch() { - return internal.rotationPitch; + return internal.xRot; } /** @@ -91,11 +89,11 @@ public float getRotationRoll() { } public float getRotationYaw(float partialTicks) { - return (float) MathHelper.clampedLerp(internal.prevRotationYaw, internal.rotationYaw, partialTicks); + return (float) MathHelper.clampedLerp(internal.yRotO, internal.yRot, partialTicks); } public float getRotationPitch(float partialTicks) { - return (float) MathHelper.clampedLerp(internal.prevRotationPitch, internal.rotationPitch, partialTicks); + return (float) MathHelper.clampedLerp(internal.xRotO, internal.xRot, partialTicks); } /** From b5022c1c3fdf74e4b14602ad116147defbb9d64c Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Wed, 17 Jun 2026 16:32:55 +0800 Subject: [PATCH 43/60] resolve 1.17 conflicts --- src/main/java/cam72cam/mod/ModCore.java | 2 +- src/main/java/cam72cam/mod/entity/CustomEntity.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/cam72cam/mod/ModCore.java b/src/main/java/cam72cam/mod/ModCore.java index a4866c84f..294859f46 100644 --- a/src/main/java/cam72cam/mod/ModCore.java +++ b/src/main/java/cam72cam/mod/ModCore.java @@ -436,7 +436,7 @@ public static int mcVersion() { } public static String semanticVersion() { - return "1.16.5-forge"; + return "1.17.1-forge"; } public static boolean isDevelopmentEnvironment() { diff --git a/src/main/java/cam72cam/mod/entity/CustomEntity.java b/src/main/java/cam72cam/mod/entity/CustomEntity.java index d48b6bfdf..1465355f0 100644 --- a/src/main/java/cam72cam/mod/entity/CustomEntity.java +++ b/src/main/java/cam72cam/mod/entity/CustomEntity.java @@ -1,8 +1,8 @@ package cam72cam.mod.entity; import cam72cam.mod.entity.sync.EntitySync; -import net.minecraft.network.datasync.EntityDataManager; -import net.minecraft.util.math.MathHelper; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.util.Mth; import java.util.List; @@ -97,12 +97,12 @@ public float getRotationRoll() { @Override public float getRotationRoll(float partialTicks) { - return (float) MathHelper.clampedLerp(getPrevRotationRoll(), getRotationRoll(), partialTicks); + return Mth.clampedLerp(getPrevRotationRoll(), getRotationRoll(), partialTicks); } @Override public void setRotationRoll(float roll) { - EntityDataManager dataManager = internal.getEntityData(); + SynchedEntityData dataManager = internal.getEntityData(); float prevRoll = dataManager.get(ModdedEntity.PREV_ROLL); while (roll - prevRoll < -180.0F) { From f21e9579a94743be9c8af9967350f4eb5bfc529b Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Wed, 17 Jun 2026 16:42:11 +0800 Subject: [PATCH 44/60] resolve 1.18 conflicts --- src/main/java/cam72cam/mod/ModCore.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cam72cam/mod/ModCore.java b/src/main/java/cam72cam/mod/ModCore.java index 773273547..d5421c8d3 100644 --- a/src/main/java/cam72cam/mod/ModCore.java +++ b/src/main/java/cam72cam/mod/ModCore.java @@ -447,7 +447,7 @@ public static int mcVersion() { } public static String semanticVersion() { - return "1.17.1-forge"; + return "1.18.2-forge"; } public static boolean isDevelopmentEnvironment() { From cac0fbca53c9da119c62306323439d469de87810 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Wed, 17 Jun 2026 18:22:34 +0800 Subject: [PATCH 45/60] resolve 1.19 conflicts --- src/main/java/cam72cam/mod/ModCore.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cam72cam/mod/ModCore.java b/src/main/java/cam72cam/mod/ModCore.java index e5f5e363d..dba492db0 100644 --- a/src/main/java/cam72cam/mod/ModCore.java +++ b/src/main/java/cam72cam/mod/ModCore.java @@ -458,7 +458,7 @@ public static int mcVersion() { } public static String semanticVersion() { - return "1.18.2-forge"; + return "1.19.4-forge"; } public static boolean isDevelopmentEnvironment() { From a40f932ccc411ddc00e7a45811211e586b9a2290 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Wed, 17 Jun 2026 18:37:48 +0800 Subject: [PATCH 46/60] resolve 1.20 conflicts --- src/main/java/cam72cam/mod/ModCore.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cam72cam/mod/ModCore.java b/src/main/java/cam72cam/mod/ModCore.java index 5e350a550..17d59ca5b 100644 --- a/src/main/java/cam72cam/mod/ModCore.java +++ b/src/main/java/cam72cam/mod/ModCore.java @@ -449,7 +449,7 @@ public static int mcVersion() { } public static String semanticVersion() { - return "1.19.4-forge"; + return "1.20.1-forge"; } public static boolean isDevelopmentEnvironment() { From 36a1ffb9bdb6499ccb784014f3d98ab78dbde7c1 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Wed, 17 Jun 2026 18:43:29 +0800 Subject: [PATCH 47/60] resolve 1.20 conflicts (again) --- src/main/java/cam72cam/mod/entity/ModdedEntity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/cam72cam/mod/entity/ModdedEntity.java b/src/main/java/cam72cam/mod/entity/ModdedEntity.java index 37ae1d85a..e9c5c0ba9 100644 --- a/src/main/java/cam72cam/mod/entity/ModdedEntity.java +++ b/src/main/java/cam72cam/mod/entity/ModdedEntity.java @@ -122,7 +122,7 @@ private void load(TagCompound data) { ModCore.catching(e, "Error during entity load: %s - %s", this, data); } - if (!this.level.isClientSide()) { + if (!this.level().isClientSide()) { getEntityData().set(ROLL, this.roll); getEntityData().set(PREV_ROLL, this.prevRoll); } @@ -247,7 +247,7 @@ public EntityType getType() { */ @Override public final void tick() { - if (!level.isClientSide()) { + if (!level().isClientSide()) { this.getEntityData().set(PREV_ROLL, getEntityData().get(ROLL)); } iTickable.onTick(); From 8c1d2914094527b207e5776cc402dde20e6b9864 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Wed, 17 Jun 2026 20:30:30 +0800 Subject: [PATCH 48/60] update README to wikis --- README.md | 29 +---------------------------- 1 file changed, 1 insertion(+), 28 deletions(-) diff --git a/README.md b/README.md index 63e719655..ebe337aa9 100644 --- a/README.md +++ b/README.md @@ -4,31 +4,4 @@ Universal Mod Core allows developers to build mods against a stable API that is In the past UMC has been packaged directly with ImmersiveRailroading as it is was the only mod using it. Now that the API is reasonably stable, it can be published as it's own mod. This mod contains the logic for each Minecraft Version / Loader that it exposes in a simplified way to child mods. -| Minecraft Version | Status | -|----------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------| -| [1.7.10-forge](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.7.10-forge) | ![Universal Mod Core 1.7.10-forge](https://github.com/TeamOpenIndustry/UniversalModCore/actions/workflows/build.yml/badge.svg?branch=1.7.10-forge) | -| [1.10.2-forge](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.10.2-forge) | ![Universal Mod Core 1.10.2-forge](https://github.com/TeamOpenIndustry/UniversalModCore/actions/workflows/build.yml/badge.svg?branch=1.10.2-forge) | -| [1.11.2-forge](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.11.2-forge) | ![Universal Mod Core 1.11.2-forge](https://github.com/TeamOpenIndustry/UniversalModCore/actions/workflows/build.yml/badge.svg?branch=1.11.2-forge) | -| [1.12.2-forge](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.12.2-forge) | ![Universal Mod Core 1.12.2-forge](https://github.com/TeamOpenIndustry/UniversalModCore/actions/workflows/build.yml/badge.svg?branch=1.12.2-forge) | -| [1.14.4-forge](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.14.4-forge) | ![Universal Mod Core 1.14.4-forge](https://github.com/TeamOpenIndustry/UniversalModCore/actions/workflows/build.yml/badge.svg?branch=1.14.4-forge) | -| [1.14.4-fabric](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.14.4-fabric) | ![Universal Mod Core 1.14.4-fabric](https://github.com/TeamOpenIndustry/UniversalModCore/actions/workflows/build.yml/badge.svg?branch=1.14.4-fabric) | -| [1.15.2-forge](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.15.2-forge) | ![Universal Mod Core 1.15.2-forge](https://github.com/TeamOpenIndustry/UniversalModCore/actions/workflows/build.yml/badge.svg?branch=1.15.2-forge) | -| [1.15.2-fabric](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.15.2-fabric) | ![Universal Mod Core 1.15.2-fabric](https://github.com/TeamOpenIndustry/UniversalModCore/actions/workflows/build.yml/badge.svg?branch=1.16.2-fabric) | -| [1.16.5-forge](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.16.5-forge) | ![Universal Mod Core 1.16.5-forge](https://github.com/TeamOpenIndustry/UniversalModCore/actions/workflows/build.yml/badge.svg?branch=1.16.5-forge) | -| [1.16.5-fabric](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.16.5-fabric) | ![Universal Mod Core 1.16.5-fabric](https://github.com/TeamOpenIndustry/UniversalModCore/actions/workflows/build.yml/badge.svg?branch=1.16.5-fabric) | -| [1.17.1-forge](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.17.1-forge) | ![Universal Mod Core 1.17.1-forge](https://github.com/TeamOpenIndustry/UniversalModCore/actions/workflows/build.yml/badge.svg?branch=1.17.1-forge) | -| [1.17.1-fabric](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.17.1-fabric) | ![Universal Mod Core 1.17.1-fabric](https://github.com/TeamOpenIndustry/UniversalModCore/actions/workflows/build.yml/badge.svg?branch=1.17.1-fabric) | -| [1.18.2-forge](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.18.2-forge) | ![Universal Mod Core 1.18.2-forge](https://github.com/TeamOpenIndustry/UniversalModCore/actions/workflows/build.yml/badge.svg?branch=1.18.2-forge) | -| [1.18.2-fabric](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.18.2-fabric) | ![Universal Mod Core 1.18.2-fabric](https://github.com/TeamOpenIndustry/UniversalModCore/actions/workflows/build.yml/badge.svg?branch=1.18.2-fabric) | -| [1.19.4-forge](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.19.4-forge) | ![Universal Mod Core 1.19.4-forge](https://github.com/TeamOpenIndustry/UniversalModCore/actions/workflows/build.yml/badge.svg?branch=1.19.4-forge) | -| [1.19.4-fabric](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.19.4-fabric) | ![Universal Mod Core 1.19.4-fabric](https://github.com/TeamOpenIndustry/UniversalModCore/actions/workflows/build.yml/badge.svg?branch=1.19.4-fabric) | -| [1.20.1-forge](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.20.1-forge) | ![Universal Mod Core 1.20.1-forge](https://github.com/TeamOpenIndustry/UniversalModCore/actions/workflows/build.yml/badge.svg?branch=1.20.1-forge) | -| [1.20.1-fabric](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.20.1-fabric) | ![Universal Mod Core 1.20.1-fabric](https://github.com/TeamOpenIndustry/UniversalModCore/actions/workflows/build.yml/badge.svg?branch=1.20.1-fabric) | -| [1.20.4-neoforge](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.20.4-neoforge) | EOL | -| [1.20.4-fabric](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.20.4-fabric) | EOL | -| [1.21.1-neoforge](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.21.1-neoforge) | ![Universal Mod Core 1.21.1-neoforge](https://github.com/TeamOpenIndustry/UniversalModCore/actions/workflows/build.yml/badge.svg?branch=1.21.1-neoforge) | -| [1.21.1-fabric](https://github.com/TeamOpenIndustry/UniversalModCore/tree/1.21.1-fabric) | ![Universal Mod Core 1.21.1-fabric](https://github.com/TeamOpenIndustry/UniversalModCore/actions/workflows/build.yml/badge.svg?branch=1.21.1-fabric) | - -## Developer Guide - -TODO once beta is ready +Check out the [wiki](https://github.com/TeamOpenIndustry/UniversalModCore/wiki) page for more information! \ No newline at end of file From 3bc2398eac774e0a27a5889b3f3fe897de2bcaa0 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Sat, 20 Jun 2026 20:33:26 +0800 Subject: [PATCH 49/60] ref: use MixinBootstrap in 1.14 --- build.gradle | 13 +---- .../java/cam72cam/mod/UMCMixinPlugin.java | 48 ------------------- ...ods.modlauncher.api.ITransformationService | 1 - 3 files changed, 2 insertions(+), 60 deletions(-) delete mode 100644 src/main/java/cam72cam/mod/UMCMixinPlugin.java delete mode 100644 src/main/resources/META-INF/services/cpw.mods.modlauncher.api.ITransformationService diff --git a/build.gradle b/build.gradle index 87c86492d..c3427b993 100644 --- a/build.gradle +++ b/build.gradle @@ -141,19 +141,10 @@ dependencies { // for more info... // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html // http://www.gradle.org/docs/current/userguide/dependency_management.html - annotationProcessor('org.spongepowered:mixin:0.8.3:processor') - shade('org.spongepowered:mixin:0.8.3') { - exclude module: 'guava' - exclude module: 'commons-io' - exclude module: 'gson' - } + annotationProcessor('org.spongepowered:mixin:0.8.5:processor') + implementation fg.deobf("curse.maven:mixinbootstrap-357178:3437402") annotationProcessor(shade('io.github.llamalad7:mixinextras-common:0.5.0')) - annotationProcessor 'org.ow2.asm:asm-debug-all:5.2' - annotationProcessor 'com.google.guava:guava:32.1.2-jre' - annotationProcessor 'com.google.code.gson:gson:2.8.9' testImplementation ('junit:junit:4.13.1') -// No need in FG3+ -// runtime "net.minecrell:terminalconsoleappender:1.3.0" shade group: 'at.yawk.lz4', name: 'lz4-java', version: '1.10.2' } diff --git a/src/main/java/cam72cam/mod/UMCMixinPlugin.java b/src/main/java/cam72cam/mod/UMCMixinPlugin.java deleted file mode 100644 index 24225b7bc..000000000 --- a/src/main/java/cam72cam/mod/UMCMixinPlugin.java +++ /dev/null @@ -1,48 +0,0 @@ -package cam72cam.mod; - -import cpw.mods.modlauncher.api.IEnvironment; -import cpw.mods.modlauncher.api.ITransformationService; -import cpw.mods.modlauncher.api.ITransformer; -import cpw.mods.modlauncher.api.IncompatibleEnvironmentException; -import org.spongepowered.asm.launch.MixinBootstrap; -import org.spongepowered.asm.mixin.Mixins; - -import javax.annotation.Nonnull; -import java.util.Collections; -import java.util.List; -import java.util.Set; - -public class UMCMixinPlugin implements ITransformationService { - public UMCMixinPlugin() { - MixinBootstrap.init(); - Mixins.addConfiguration("mixins.feat.universalmodcore.json"); - Mixins.addConfiguration("mixins.fix.universalmodcore.json"); - } - - @Nonnull - @Override - public String name() { - return "UniversalModCoreMixinInitializer"; - } - - @Override - public void initialize(IEnvironment iEnvironment) { - - } - - @Override - public void beginScanning(IEnvironment iEnvironment) { - - } - - @Override - public void onLoad(IEnvironment iEnvironment, Set set) throws IncompatibleEnvironmentException { - - } - - @Nonnull - @Override - public List transformers() { - return Collections.emptyList(); - } -} diff --git a/src/main/resources/META-INF/services/cpw.mods.modlauncher.api.ITransformationService b/src/main/resources/META-INF/services/cpw.mods.modlauncher.api.ITransformationService deleted file mode 100644 index cb6c2f54f..000000000 --- a/src/main/resources/META-INF/services/cpw.mods.modlauncher.api.ITransformationService +++ /dev/null @@ -1 +0,0 @@ -cam72cam.mod.UMCMixinPlugin \ No newline at end of file From e9bbb8dbba1b6043c8eed0794b45c9e103414d59 Mon Sep 17 00:00:00 2001 From: Angelina Michalek Date: Sun, 21 Jun 2026 11:50:05 -0400 Subject: [PATCH 50/60] [PATCH] Add remapJar task back to align with 1.21.1-neoforge --- src/main/resources/template/build.gradle | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/resources/template/build.gradle b/src/main/resources/template/build.gradle index a746403e2..ece594936 100644 --- a/src/main/resources/template/build.gradle +++ b/src/main/resources/template/build.gradle @@ -65,7 +65,7 @@ unimined.minecraft { loader("52.1.14") } - defaultRemapJar = false + defaultRemapJar = true } //DEPENDENCIES// @@ -87,9 +87,15 @@ shadowJar { mergeServiceFiles() archiveClassifier = 'shadow' } - -tasks.named("assemble") { - dependsOn(tasks.named("shadowJar")) + +remapJar { + inputFile = tasks.shadeDowngradedApi.archiveFile + dependsOn(tasks.named("shadowJar")) + archiveClassifier = '' +} + +tasks.named("assemble") { + dependsOn(tasks.named("remapJar")) } processResources { From 3e04cf93916ef5d7090321eb14ec022d89843688 Mon Sep 17 00:00:00 2001 From: Angelina Michalek Date: Sun, 21 Jun 2026 16:11:29 -0400 Subject: [PATCH 51/60] Something has gone horribly wrong and I can't figure out what. --- src/main/java/cam72cam/mod/ModCore.java | 4 ++-- src/main/java/cam72cam/mod/block/tile/TileEntity.java | 2 +- src/main/resources/mixins.feat.universalmodcore.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/cam72cam/mod/ModCore.java b/src/main/java/cam72cam/mod/ModCore.java index 9a5ff7803..bdf2763da 100644 --- a/src/main/java/cam72cam/mod/ModCore.java +++ b/src/main/java/cam72cam/mod/ModCore.java @@ -444,7 +444,7 @@ public static synchronized File cacheFile(Identifier id) { /* Loader Utils */ public static String loaderBrand() { - return "neoforge"; + return "forge"; } public static int mcVersion() { @@ -452,7 +452,7 @@ public static int mcVersion() { } public static String semanticVersion() { - return "1.20.1-forge"; + return "1.21.1-forge"; } public static boolean isDevelopmentEnvironment() { diff --git a/src/main/java/cam72cam/mod/block/tile/TileEntity.java b/src/main/java/cam72cam/mod/block/tile/TileEntity.java index e68355ee1..e7f92bd74 100644 --- a/src/main/java/cam72cam/mod/block/tile/TileEntity.java +++ b/src/main/java/cam72cam/mod/block/tile/TileEntity.java @@ -162,7 +162,7 @@ public static void register(Supplier instance, Identifier id, Block BlockEntity example = instance.get(); // Force legacy registration - example.supplier(id); + //example.supplier(id); CommonEvents.Tile.REGISTER.subscribe(helper -> { BlockEntityType type = new BlockEntityType<>((pos, state) -> { diff --git a/src/main/resources/mixins.feat.universalmodcore.json b/src/main/resources/mixins.feat.universalmodcore.json index 76eeb9d36..f543f3eee 100644 --- a/src/main/resources/mixins.feat.universalmodcore.json +++ b/src/main/resources/mixins.feat.universalmodcore.json @@ -4,7 +4,7 @@ "refmap": "mixins.universalmodcore.refmap.json", "target": "@env(DEFAULT)", "minVersion": "0.8.2", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_21", "mixinPriority": 1300, "mixinextras": { "minVersion": "0.5.0" From 883344b611556aecd057030004284f56576a77cb Mon Sep 17 00:00:00 2001 From: Angelina Michalek Date: Sun, 21 Jun 2026 16:27:19 -0400 Subject: [PATCH 52/60] There were no game tests in 1.20.1 forge so remove them from 1.21.1 forge --- build.gradle | 7 ------- 1 file changed, 7 deletions(-) diff --git a/build.gradle b/build.gradle index a21a58ad3..184e999de 100644 --- a/build.gradle +++ b/build.gradle @@ -72,13 +72,6 @@ minecraft { args '--nogui' } - // This run config launches GameTestServer and runs all registered gametests, then exits. - // By default, the server will crash when no gametests are provided. - // The gametest system is also enabled by default for other run configs under the /test command. - register('gameTestServer') { - systemProperty 'forge.enabledGameTestNamespaces', 'universalmodcore' - } - register('data') { // example of overriding the workingDirectory set in configureEach above, uncomment if you want to use it // workingDirectory project.file('run-data') From f8969d36161e5954d759cc6eabeafd36304c36df Mon Sep 17 00:00:00 2001 From: Angelina Michalek Date: Sun, 21 Jun 2026 18:39:53 -0400 Subject: [PATCH 53/60] That needed to be fixed --- .../src/main/java/PACKAGEPATH/Mod.java | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java b/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java index c0bc5bc09..4c98b1784 100644 --- a/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java +++ b/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java @@ -1,17 +1,38 @@ package #PACKAGE#; import cam72cam.mod.ModCore; +import cam72cam.mod.ModEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; @net.minecraftforge.fml.common.Mod(Mod.MODID) -public class Mod { +public class Mod extends ModCore.Mod { public static final String MODID = "#ID#"; static { try { - ModCore.register(new #PACKAGE#.#CLASS#()); + ModCore.register(new Mod()); } catch (Exception e) { throw new RuntimeException("Could not load mod " + MODID, e); } } + + @Override + public String modID() { + return MODID; + } + + @Override + public void commonEvent(ModEvent modEvent) { + + } + + @Override + public void clientEvent(ModEvent modEvent) { + + } + + @Override + public void serverEvent(ModEvent modEvent) { + + } } From 62985a3c4e08afb8ac2f68188ac5ef06d1984d1a Mon Sep 17 00:00:00 2001 From: Angelina Michalek Date: Sun, 21 Jun 2026 19:04:34 -0400 Subject: [PATCH 54/60] Change back, I made a mistake --- .../src/main/java/PACKAGEPATH/Mod.java | 26 ++----------------- 1 file changed, 2 insertions(+), 24 deletions(-) diff --git a/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java b/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java index 4c98b1784..fb419a265 100644 --- a/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java +++ b/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java @@ -1,38 +1,16 @@ package #PACKAGE#; import cam72cam.mod.ModCore; -import cam72cam.mod.ModEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; @net.minecraftforge.fml.common.Mod(Mod.MODID) -public class Mod extends ModCore.Mod { +public class Mod { public static final String MODID = "#ID#"; static { try { - ModCore.register(new Mod()); + ModCore.register(new #PACKAGE#.#CLASS#()); } catch (Exception e) { throw new RuntimeException("Could not load mod " + MODID, e); } } - - @Override - public String modID() { - return MODID; - } - - @Override - public void commonEvent(ModEvent modEvent) { - - } - - @Override - public void clientEvent(ModEvent modEvent) { - - } - - @Override - public void serverEvent(ModEvent modEvent) { - - } } From a2c06c3e139b1a288dfc9926517ffa9838b9684c Mon Sep 17 00:00:00 2001 From: Angelina Michalek Date: Sun, 21 Jun 2026 19:47:46 -0400 Subject: [PATCH 55/60] It boots! Still can't get into a world though... --- src/main/java/cam72cam/mod/event/CommonEvents.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cam72cam/mod/event/CommonEvents.java b/src/main/java/cam72cam/mod/event/CommonEvents.java index 8f04a4d38..bcef9ff87 100644 --- a/src/main/java/cam72cam/mod/event/CommonEvents.java +++ b/src/main/java/cam72cam/mod/event/CommonEvents.java @@ -153,7 +153,7 @@ public static void registerContainers(PermissionGatherEvent.Nodes event) { } - @EventBusSubscriber(modid = ModCore.MODID) + @EventBusSubscriber(modid = ModCore.MODID, bus = EventBusSubscriber.Bus.MOD) public static final class EventBusMod { static { registerEvents(); From 3baecfe44132692140f896791bb65f64bb372c57 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Mon, 22 Jun 2026 14:12:46 +0800 Subject: [PATCH 56/60] chore: switch to MixinBooter for 1.12 --- build.gradle | 21 ++++++--- gradle/wrapper/gradle-wrapper.properties | 2 +- src/main/java/cam72cam/mod/ModCore.java | 2 +- .../cam72cam/mod/UMCMixinExtrasLoader.java | 47 ------------------- .../java/cam72cam/mod/UMCMixinPlugin.java | 36 ++++---------- .../mixins.feat.universalmodcore.json | 1 - 6 files changed, 24 insertions(+), 85 deletions(-) delete mode 100644 src/main/java/cam72cam/mod/UMCMixinExtrasLoader.java diff --git a/build.gradle b/build.gradle index 948ded2af..ecef68ecf 100644 --- a/build.gradle +++ b/build.gradle @@ -62,7 +62,9 @@ minecraft { } repositories { - maven { url = "https://repo.spongepowered.org/maven" } + maven { + url 'https://maven.cleanroommc.com' + } } dependencies { @@ -88,14 +90,19 @@ dependencies { // http://www.gradle.org/docs/current/userguide/dependency_management.html shade "curse.maven:invtweaks-223094:2482482" - shade('org.spongepowered:mixin:0.8.3') { - exclude module: 'guava' - exclude module: 'commons-io' - exclude module: 'gson' - } - shade('io.github.llamalad7:mixinextras-common:0.5.0') testCompile('junit:junit:4.13.1') + annotationProcessor 'org.ow2.asm:asm-debug-all:5.2' + annotationProcessor 'com.google.guava:guava:32.1.2-jre' + annotationProcessor 'com.google.code.gson:gson:2.8.9' + + compile ('zone.rong:mixinbooter:10.7') { + transitive = false + } + annotationProcessor ('zone.rong:mixinbooter:10.7') { + transitive = false + } + runtime "net.minecrell:terminalconsoleappender:1.3.0" shade group: 'at.yawk.lz4', name: 'lz4-java', version: '1.10.2' diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 59cd8d8cc..f6953549f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip diff --git a/src/main/java/cam72cam/mod/ModCore.java b/src/main/java/cam72cam/mod/ModCore.java index 03c38303b..fdaa28644 100644 --- a/src/main/java/cam72cam/mod/ModCore.java +++ b/src/main/java/cam72cam/mod/ModCore.java @@ -42,7 +42,7 @@ import java.util.List; /** UMC Mod, do not touch... */ -@net.minecraftforge.fml.common.Mod(modid = ModCore.MODID, name = ModCore.NAME, version = ModCore.VERSION, acceptedMinecraftVersions = "[1.12,1.13)") +@net.minecraftforge.fml.common.Mod(modid = ModCore.MODID, name = ModCore.NAME, version = ModCore.VERSION, acceptedMinecraftVersions = "[1.12,1.13)", dependencies = "required-after:mixinbooter@[10.7,)") public class ModCore { public static final String MODID = "universalmodcore"; public static final String NAME = "UniversalModCore"; diff --git a/src/main/java/cam72cam/mod/UMCMixinExtrasLoader.java b/src/main/java/cam72cam/mod/UMCMixinExtrasLoader.java deleted file mode 100644 index b12491f52..000000000 --- a/src/main/java/cam72cam/mod/UMCMixinExtrasLoader.java +++ /dev/null @@ -1,47 +0,0 @@ -package cam72cam.mod; - -import com.llamalad7.mixinextras.MixinExtrasBootstrap; -import org.objectweb.asm.tree.ClassNode; -import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; -import org.spongepowered.asm.mixin.extensibility.IMixinInfo; - -import java.util.Collections; -import java.util.List; -import java.util.Set; - -public class UMCMixinExtrasLoader implements IMixinConfigPlugin { - @Override - public void onLoad(String mixinPackage) { - MixinExtrasBootstrap.init(); - } - - @Override - public String getRefMapperConfig() { - return ""; - } - - @Override - public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { - return true; - } - - @Override - public void acceptTargets(Set myTargets, Set otherTargets) { - - } - - @Override - public List getMixins() { - return Collections.emptyList(); - } - - @Override - public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { - - } - - @Override - public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { - - } -} diff --git a/src/main/java/cam72cam/mod/UMCMixinPlugin.java b/src/main/java/cam72cam/mod/UMCMixinPlugin.java index 788984731..68b0a0235 100644 --- a/src/main/java/cam72cam/mod/UMCMixinPlugin.java +++ b/src/main/java/cam72cam/mod/UMCMixinPlugin.java @@ -1,41 +1,21 @@ package cam72cam.mod; -import net.minecraftforge.fml.common.FMLLog; -import net.minecraftforge.fml.relauncher.CoreModManager; import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin; -import org.spongepowered.asm.launch.MixinBootstrap; -import org.spongepowered.asm.mixin.Mixins; +import zone.rong.mixinbooter.IEarlyMixinLoader; import javax.annotation.Nullable; -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; -import java.security.CodeSource; +import java.util.Arrays; +import java.util.List; import java.util.Map; @IFMLLoadingPlugin.MCVersion("1.12.2") -public class UMCMixinPlugin implements IFMLLoadingPlugin { +public class UMCMixinPlugin implements IFMLLoadingPlugin, IEarlyMixinLoader { public UMCMixinPlugin() { - MixinBootstrap.init(); - Mixins.addConfiguration("mixins.feat.universalmodcore.json"); - Mixins.addConfiguration("mixins.fix.universalmodcore.json"); + } - CodeSource codeSource = this.getClass().getProtectionDomain().getCodeSource(); - if (codeSource != null) { - URL location = codeSource.getLocation(); - try { - File file = new File(location.toURI()); - if (file.isFile() && !CoreModManager.getReparseableCoremods().contains(file.getName())) { - //Due to FML's bad behaviour on processing FMLCorePluginContainsFMLMod we add here manually - CoreModManager.getIgnoredMods().remove(file.getName()); - if (!ModCore.isDevelopmentEnvironment()) { - CoreModManager.getReparseableCoremods().add(file.getName()); - } - } - } catch (URISyntaxException e) { - FMLLog.log.warn(e); - } - } + @Override + public List getMixinConfigs() { + return Arrays.asList("mixins.feat.universalmodcore.json", "mixins.fix.universalmodcore.json"); } @Override diff --git a/src/main/resources/mixins.feat.universalmodcore.json b/src/main/resources/mixins.feat.universalmodcore.json index 4f73bae51..c6f2ebbba 100644 --- a/src/main/resources/mixins.feat.universalmodcore.json +++ b/src/main/resources/mixins.feat.universalmodcore.json @@ -2,7 +2,6 @@ "required": true, "package": "cam72cam.mod.mixin.feat", "refmap": "mixins.universalmodcore.refmap.json", - "plugin": "cam72cam.mod.UMCMixinExtrasLoader", "target": "@env(DEFAULT)", "minVersion": "0.8.2", "compatibilityLevel": "JAVA_8", From 60c5b91c75454bd36bd6f98ceefb85fee6f2946a Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Mon, 22 Jun 2026 14:14:39 +0800 Subject: [PATCH 57/60] add MixinBooter in template --- src/main/resources/template/build.gradle | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/resources/template/build.gradle b/src/main/resources/template/build.gradle index 21c51fb43..5a44330de 100644 --- a/src/main/resources/template/build.gradle +++ b/src/main/resources/template/build.gradle @@ -62,8 +62,13 @@ unimined.minecraft { //DEPENDENCIES// #UMC_REPO# +repositories { + maven { url = 'https://maven.cleanroommc.com' } +} + dependencies { compileOnly "com.cleanroommc:lwjglx:1.0.0" + modImplementation ('zone.rong:mixinbooter:10.7') { transitive = false } modImplementation #UMC_DEPENDENCY# } From 67c4e736c3a99145e7e95f7be5b7f1fb17eb1204 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Mon, 22 Jun 2026 14:22:49 +0800 Subject: [PATCH 58/60] fix: 1.15/1.16 model depth error --- .../java/cam72cam/mod/render/opengl/VBO.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/cam72cam/mod/render/opengl/VBO.java b/src/main/java/cam72cam/mod/render/opengl/VBO.java index 78bb51e09..d37cf0c7b 100644 --- a/src/main/java/cam72cam/mod/render/opengl/VBO.java +++ b/src/main/java/cam72cam/mod/render/opengl/VBO.java @@ -3,6 +3,7 @@ import cam72cam.mod.event.ClientEvents; import cam72cam.mod.model.obj.VertexBuffer; import cam72cam.mod.util.With; +import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.renderer.GLAllocation; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL15; @@ -135,12 +136,6 @@ protected Binding(RenderState state, boolean wait) { int oldVbo = GL11.glGetInteger(GL15.GL_ARRAY_BUFFER_BINDING); GL11.glPushClientAttrib(GL11.GL_CLIENT_VERTEX_ARRAY_BIT); - this.restore = RenderContext.apply(state).and(() -> { - GL11.glPopClientAttrib(); - GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, oldVbo); - }); - - GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY); GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY); GL11.glEnableClientState(GL11.GL_COLOR_ARRAY); @@ -159,6 +154,19 @@ protected Binding(RenderState state, boolean wait) { if (vbInfo.hasNormals) { GL11.glNormalPointer(GL11.GL_FLOAT, stride, (long) vbInfo.normalOffset * Float.BYTES); } + + if (state.stage == RenderContext.Stage.GUI) { + RenderSystem.enableDepthTest(); + } + + this.restore = RenderContext.apply(state).and(() -> { + GL11.glPopClientAttrib(); + GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, oldVbo); + + if (state.stage == RenderContext.Stage.GUI) { + RenderSystem.disableDepthTest(); + } + }); } @Override From b5610322c39fad9c64cf156a3c9b395fa0938595 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Mon, 22 Jun 2026 14:27:37 +0800 Subject: [PATCH 59/60] resolve 1.14 conflicts --- src/main/java/cam72cam/mod/UMCMixinPlugin.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/main/java/cam72cam/mod/UMCMixinPlugin.java diff --git a/src/main/java/cam72cam/mod/UMCMixinPlugin.java b/src/main/java/cam72cam/mod/UMCMixinPlugin.java deleted file mode 100644 index e69de29bb..000000000 From ca39a46b0ad906734cceefcf188a2c4a5e367049 Mon Sep 17 00:00:00 2001 From: Goldenfield192 <1437356849@qq.com> Date: Mon, 22 Jun 2026 14:37:41 +0800 Subject: [PATCH 60/60] re-add MixinExtras booter --- .../cam72cam/mod/UMCMixinExtrasLoader.java | 47 +++++++++++++++++++ .../mixins.feat.universalmodcore.json | 1 + 2 files changed, 48 insertions(+) create mode 100644 src/main/java/cam72cam/mod/UMCMixinExtrasLoader.java diff --git a/src/main/java/cam72cam/mod/UMCMixinExtrasLoader.java b/src/main/java/cam72cam/mod/UMCMixinExtrasLoader.java new file mode 100644 index 000000000..967169777 --- /dev/null +++ b/src/main/java/cam72cam/mod/UMCMixinExtrasLoader.java @@ -0,0 +1,47 @@ +package cam72cam.mod; + +import com.llamalad7.mixinextras.MixinExtrasBootstrap; +import org.objectweb.asm.tree.ClassNode; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import java.util.Collections; +import java.util.List; +import java.util.Set; + +public class UMCMixinExtrasLoader implements IMixinConfigPlugin { + @Override + public void onLoad(String mixinPackage) { + MixinExtrasBootstrap.init(); + } + + @Override + public String getRefMapperConfig() { + return ""; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + return true; + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) { + + } + + @Override + public List getMixins() { + return Collections.emptyList(); + } + + @Override + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } + + @Override + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } +} \ No newline at end of file diff --git a/src/main/resources/mixins.feat.universalmodcore.json b/src/main/resources/mixins.feat.universalmodcore.json index ecd577878..7cfed9620 100644 --- a/src/main/resources/mixins.feat.universalmodcore.json +++ b/src/main/resources/mixins.feat.universalmodcore.json @@ -2,6 +2,7 @@ "required": true, "package": "cam72cam.mod.mixin.feat", "refmap": "mixins.universalmodcore.refmap.json", + "plugin": "cam72cam.mod.UMCMixinExtrasLoader", "target": "@env(DEFAULT)", "minVersion": "0.8.2", "compatibilityLevel": "JAVA_8",