Forge Adapter

This commit is contained in:
Brian Neumann-Fopiano
2026-06-12 02:32:45 -04:00
parent 921a98f210
commit 516537db72
68 changed files with 2049 additions and 13 deletions
+203 -5
View File
@@ -1,17 +1,215 @@
/*
* Iris is a World Generator for Minecraft Servers
* Copyright (c) 2026 Arcane Arts (Volmit Software)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.gradle.api.tasks.compile.JavaCompile
import org.gradle.jvm.toolchain.JavaLanguageVersion
plugins {
id 'java'
id 'net.minecraftforge.gradle' version '7.0.27'
alias(libs.plugins.shadow)
}
Properties rootProperties = new Properties()
file('../../gradle.properties').withInputStream { InputStream stream -> rootProperties.load(stream) }
String irisVersion = providers.gradleProperty('irisVersion').getOrElse(rootProperties.getProperty('irisVersion', '4.0.0-26.1'))
String minecraftVersion = providers.gradleProperty('minecraftVersion').getOrElse(rootProperties.getProperty('minecraftVersion', '26.1.2'))
String forgeVersion = providers.gradleProperty('forgeVersion').getOrElse('26.1.2-64.0.9')
group = 'art.arcane'
version = rootProject.version
version = irisVersion
java {
toolchain {
languageVersion = JavaLanguageVersion.of(25)
}
}
sourceSets {
main {
java {
srcDir '../modded-common/src/main/java'
}
resources {
srcDir '../modded-common/src/main/resources'
}
}
}
repositories {
minecraft.mavenizer(it)
maven fg.forgeMaven
maven fg.minecraftLibsMaven
mavenCentral()
maven { url = uri('https://repo.codemc.org/repository/maven-public/') }
maven { url = uri('https://jitpack.io') }
maven { url = uri('https://hub.spigotmc.org/nexus/content/repositories/snapshots/') }
}
configurations {
bundle {
canBeConsumed = false
canBeResolved = true
}
devBundle {
canBeConsumed = false
canBeResolved = true
}
runBundle {
canBeConsumed = false
canBeResolved = true
}
commonsLangRaw {
canBeConsumed = false
canBeResolved = true
transitive = false
}
}
configurations.named('bundle').configure {
exclude(group: 'com.google.code.gson')
exclude(group: 'com.google.guava')
exclude(group: 'commons-io')
exclude(group: 'org.apache.commons', module: 'commons-lang3')
exclude(group: 'it.unimi.dsi', module: 'fastutil')
exclude(group: 'org.slf4j')
exclude(group: 'org.apache.logging.log4j')
exclude(group: 'de.crazydev22.slimjar.helper')
exclude(group: 'de.crazydev22.slimjar')
exclude(group: 'io.github.slimjar')
}
configurations.named('runBundle').configure {
exclude(group: 'de.crazydev22.slimjar.helper')
exclude(group: 'de.crazydev22.slimjar')
exclude(group: 'io.github.slimjar')
}
configurations.compileClasspath.extendsFrom(configurations.devBundle)
configurations.runtimeClasspath.extendsFrom(configurations.runBundle)
['compileClasspath', 'runtimeClasspath'].each { String name ->
configurations.named(name).configure {
resolutionStrategy.capabilitiesResolution.withCapability('org.lz4:lz4-java') {
selectHighestVersion()
}
}
}
dependencies {
implementation(project(':spi'))
implementation minecraft.dependency("net.minecraftforge:forge:${forgeVersion}")
compileOnly('org.slf4j:slf4j-api:2.0.17')
compileOnly(libs.spigot) {
transitive = false
}
List<Object> shared = [
"art.arcane:core:${irisVersion}".toString(),
"art.arcane:spi:${irisVersion}".toString(),
'com.github.VolmitSoftware:VolmLib:master-SNAPSHOT',
libs.paralithic,
libs.lru,
libs.kotlin.stdlib,
libs.kotlin.coroutines,
libs.commons.math3,
libs.caffeine,
libs.lz4,
libs.zip,
libs.sentry,
libs.oshi,
libs.byteBuddy.core,
libs.byteBuddy.agent
]
shared.each { Object notation ->
add('bundle', notation)
add('devBundle', notation)
add('runBundle', notation)
}
add('bundle', libs.commons.lang)
add('devBundle', libs.commons.lang)
add('commonsLangRaw', libs.commons.lang)
}
TaskProvider<Jar> sanitizedCommonsLang = tasks.register('sanitizedCommonsLang', Jar) {
archiveBaseName.set('commons-lang-sanitized')
destinationDirectory.set(layout.buildDirectory.dir('sanitized'))
from({ zipTree(configurations.named('commonsLangRaw').get().singleFile) })
exclude('org/apache/commons/lang/enum/**')
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
dependencies {
add('runBundle', files(sanitizedCommonsLang))
}
minecraft {
runs {
register('server') {
workingDir = layout.projectDirectory.dir('run')
String parity = providers.gradleProperty('irisParity').getOrNull()
if (parity != null) {
systemProperty('iris.parity', parity)
}
String parityGolden = providers.gradleProperty('irisParityGolden').getOrNull()
if (parityGolden != null) {
systemProperty('iris.parity.golden', parityGolden)
}
String parityDeep = providers.gradleProperty('irisParityDeep').getOrNull()
if (parityDeep != null) {
systemProperty('iris.parity.deep', parityDeep)
}
String worldCheck = providers.gradleProperty('irisWorldCheck').getOrNull()
if (worldCheck != null) {
systemProperty('iris.worldcheck', worldCheck)
}
jvmArgs('-Xmx8G')
args('--nogui')
}
}
}
tasks.named('compileJava', JavaCompile).configure {
options.encoding = 'UTF-8'
options.release.set(25)
}
processResources {
inputs.property('version', project.version)
inputs.property('minecraftVersion', minecraftVersion)
filesMatching('META-INF/mods.toml') {
expand('version': project.version)
expand('version': project.version, 'minecraftVersion': minecraftVersion)
}
}
tasks.named('jar', Jar).configure {
archiveFileName.set("Iris-${project.version}-forge-skeleton.jar")
tasks.named('shadowJar', ShadowJar).configure {
archiveFileName.set("Iris-${project.version}+mc${minecraftVersion}-forge.jar")
configurations = [project.configurations.named('bundle').get()]
mergeServiceFiles()
exclude('META-INF/maven/**')
exclude('META-INF/proguard/**')
exclude('META-INF/*.SF')
exclude('META-INF/*.DSA')
exclude('META-INF/*.RSA')
exclude('org/apache/commons/lang/enum/**')
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
tasks.named('assemble').configure {
dependsOn(tasks.named('shadowJar'))
}
+6
View File
@@ -0,0 +1,6 @@
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.jvmargs=-Xmx3072m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.caching=true
org.gradle.configuration-cache=false
net.minecraftforge.gradle.merge-source-sets=true
+1
View File
@@ -0,0 +1 @@
[]
+1
View File
@@ -0,0 +1 @@
[]
+28
View File
@@ -0,0 +1,28 @@
#Early window height
earlyWindowHeight = 480
#Enable forge global version checking
versionCheck = true
#Should we control the window. Disabling this disables new GL features and can be bad for mods that rely on them.
earlyWindowControl = true
#Early window framebuffer scale
earlyWindowFBScale = 1
#Early window provider
earlyWindowProvider = "fmlearlywindow"
#Early window width
earlyWindowWidth = 854
#Early window starts maximized
earlyWindowMaximized = false
#Default config path for servers
defaultConfigPath = "defaultconfigs"
#Disables Optimized DFU client-side - already disabled on servers
disableOptimizedDFU = true
#Skip specific GL versions, may help with buggy graphics card drivers
earlyWindowSkipGLVersions = []
#Whether to log a help message on first attempt, to aid troubleshooting. This setting should automatically disable itself after a successful launch
earlyWindowLogHelpMessage = true
#Max threads for early initialization parallelism, -1 is based on processor count
maxThreads = -1
#Squir?
earlyWindowSquir = false
#Whether to show CPU usage stats in early window
earlyWindowShowCPU = false
@@ -0,0 +1,5 @@
#General configuration settings
[general]
#A config option to help developers find known legacy modded tags that have common convention equivalents when running on integrated server. Defaults to OFF.
#Allowed Values: OFF, ONLY_IN_DEV_ENV, ALWAYS
logLegacyTagWarnings = "OFF"
@@ -0,0 +1,84 @@
{
"general": {
"commandSounds": true,
"debug": false,
"dumpMantleOnError": false,
"disableNMS": false,
"pluginMetrics": true,
"splashLogoStartup": true,
"useConsoleCustomColors": true,
"useCustomColorsIngame": true,
"adjustVanillaHeight": false,
"autoIngestDatapacks": true,
"autoImportDatapackStructures": true,
"forceMainWorld": "",
"spinh": -20,
"spins": 7,
"spinb": 8
},
"world": {
"postLoadBlockUpdates": true,
"forcePersistEntities": true,
"anbientEntitySpawningSystem": true,
"asyncTickIntervalMS": 700,
"targetSpawnEntitiesPerChunk": 0.95,
"markerEntitySpawningSystem": true,
"effectSystem": true,
"worldEditWandCUI": true,
"globalPregenCache": false
},
"gui": {
"useServerLaunchedGuis": true,
"maximumPregenGuiFPS": false,
"colorMode": true
},
"autoConfiguration": {
"configureSpigotTimeoutTime": true,
"configurePaperWatchdogDelay": true,
"autoRestartOnCustomBiomeInstall": true
},
"generator": {
"defaultWorldType": "overworld",
"maxBiomeChildDepth": 4,
"preventLeafDecay": true
},
"concurrency": {},
"studio": {
"studio": true,
"openVSCode": true,
"disableTimeAndWeather": true,
"enableEntitySpawning": false,
"autoStartDefaultStudio": false
},
"performance": {
"engineSVC": {
"useVirtualThreads": true,
"forceMulticoreWrite": false,
"priority": 5
},
"trimMantleInStudio": false,
"mantleKeepAlive": 30,
"noiseCacheSize": 1024,
"resourceLoaderCacheSize": 1024,
"objectLoaderCacheSize": 4096,
"tectonicPlateSize": -1,
"mantleCleanupDelay": 200,
"simdKernels": true
},
"pregen": {
"useTicketQueue": true,
"runtimeSchedulerMode": "AUTO",
"paperLikeBackendMode": "AUTO",
"chunkLoadTimeoutSeconds": 15,
"timeoutWarnIntervalMs": 500,
"saveIntervalMs": 30000,
"maxResidentTectonicPlates": 96,
"mantleBackpressureWaitMs": 25,
"mantleBackpressureTimeoutMs": 60000
},
"sentry": {
"includeServerId": true,
"disableAutoReporting": false,
"debug": false
}
}
Submodule adapters/forge/run/config/irisworldgen/packs/overworld added at 8e32852ee6
@@ -0,0 +1,147 @@
---- Minecraft Crash Report ----
// Quite honestly, I wouldn't worry myself about that.
Time: 2026-06-12 02:26:22
Description: Mod loading error has occurred
java.lang.Exception: Mod Loading has failed
at TRANSFORMER/net.minecraftforge.forge@64.0.9/net.minecraftforge.logging.CrashReportExtender.dumpModLoadingCrashReport(CrashReportExtender.java:49) [forge-26.1.2-64.0.9.jar%231!/:?]
at TRANSFORMER/net.minecraftforge.forge@64.0.9/net.minecraftforge.server.loading.ServerModLoader.load(ServerModLoader.java:36) [forge-26.1.2-64.0.9.jar%231!/:?]
at TRANSFORMER/minecraft@26.1.2/net.minecraft.server.Main.main(Main.java:128) [forge-26.1.2-64.0.9.jar%230!/:?]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[?:?]
at java.base/java.lang.reflect.Method.invoke(Method.java:565) ~[?:?]
at SECURE-BOOTSTRAP/net.minecraftforge.fmlloader@26.1.2-64.0.9/net.minecraftforge.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:96) [fmlloader-26.1.2-64.0.9.jar!/:?]
at SECURE-BOOTSTRAP/net.minecraftforge.fmlloader@26.1.2-64.0.9/net.minecraftforge.fml.loading.targets.CommonLaunchHandler.lambda$makeService$0(CommonLaunchHandler.java:79) [fmlloader-26.1.2-64.0.9.jar!/:?]
at SECURE-BOOTSTRAP/cpw.mods.modlauncher@10.2.4/cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:77) [modlauncher-10.2.4.jar!/:?]
at SECURE-BOOTSTRAP/cpw.mods.modlauncher@10.2.4/cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:97) [modlauncher-10.2.4.jar!/:?]
at SECURE-BOOTSTRAP/cpw.mods.modlauncher@10.2.4/cpw.mods.modlauncher.Launcher.run(Launcher.java:116) [modlauncher-10.2.4.jar!/:?]
at SECURE-BOOTSTRAP/cpw.mods.modlauncher@10.2.4/cpw.mods.modlauncher.Launcher.main(Launcher.java:75) [modlauncher-10.2.4.jar!/:?]
at SECURE-BOOTSTRAP/cpw.mods.modlauncher@10.2.4/cpw.mods.modlauncher.BootstrapEntry.main(BootstrapEntry.java:17) [modlauncher-10.2.4.jar!/:?]
at net.minecraftforge.bootstrap@2.1.7/net.minecraftforge.bootstrap.Bootstrap.moduleMain(Bootstrap.java:188) [bootstrap-2.1.8.jar!/:?]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[?:?]
at java.base/java.lang.reflect.Method.invoke(Method.java:565) ~[?:?]
at net.minecraftforge.bootstrap.Bootstrap.bootstrapMain(Bootstrap.java:133) [bootstrap-2.1.8.jar:2.1.8]
at net.minecraftforge.bootstrap.Bootstrap.start(Bootstrap.java:53) [bootstrap-2.1.8.jar:2.1.8]
at net.minecraftforge.bootstrap.ForgeBootstrap.main(ForgeBootstrap.java:19) [bootstrap-2.1.8.jar:2.1.8]
at net.minecraftforge.launcher.Main$Launcher.run(Main.java:270) [slime-launcher-0.2.1.jar:0.2.1]
at net.minecraftforge.launcher.Main$Launcher.access$000(Main.java:256) [slime-launcher-0.2.1.jar:0.2.1]
at net.minecraftforge.launcher.Main.main(Main.java:57) [slime-launcher-0.2.1.jar:0.2.1]
Transformer Audit:
net.minecraft.server.Main
REASON: classloading
net.minecraftforge.logging.CrashReportExtender
REASON: classloading
net.minecraftforge.server.loading.ServerModLoader
REASON: classloading
A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------
-- Head --
Thread: main
Suspected Mods: NONE
Stacktrace:
at TRANSFORMER/net.minecraftforge.forge@64.0.9/net.minecraftforge.logging.CrashReportExtender.lambda$dumpModLoadingCrashReport$0(CrashReportExtender.java:52) ~[forge-26.1.2-64.0.9.jar%231!/:?]
Transformer Audit:
net.minecraftforge.logging.CrashReportExtender
REASON: classloading
-- NO MOD INFO AVAILABLE --
Details:
Mod File: NO FILE INFO
Failure message: The Mod File /Users/brianfopiano/Developer/RemoteGit/VolmitSoftware/Iris/adapters/forge/build/resources/main has mods that were not found
Mod Version: NO MOD INFO AVAILABLE
Mod Issue URL: NOT PROVIDED
Exception message: MISSING EXCEPTION MESSAGE
Stacktrace:
at TRANSFORMER/net.minecraftforge.forge@64.0.9/net.minecraftforge.logging.CrashReportExtender.lambda$dumpModLoadingCrashReport$0(CrashReportExtender.java:52) ~[forge-26.1.2-64.0.9.jar%231!/:?]
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604) ~[?:?]
at TRANSFORMER/net.minecraftforge.forge@64.0.9/net.minecraftforge.logging.CrashReportExtender.dumpModLoadingCrashReport(CrashReportExtender.java:50) [forge-26.1.2-64.0.9.jar%231!/:?]
at TRANSFORMER/net.minecraftforge.forge@64.0.9/net.minecraftforge.server.loading.ServerModLoader.load(ServerModLoader.java:36) [forge-26.1.2-64.0.9.jar%231!/:?]
at TRANSFORMER/minecraft@26.1.2/net.minecraft.server.Main.main(Main.java:128) [forge-26.1.2-64.0.9.jar%230!/:?]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[?:?]
at java.base/java.lang.reflect.Method.invoke(Method.java:565) ~[?:?]
at SECURE-BOOTSTRAP/net.minecraftforge.fmlloader@26.1.2-64.0.9/net.minecraftforge.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:96) [fmlloader-26.1.2-64.0.9.jar!/:?]
at SECURE-BOOTSTRAP/net.minecraftforge.fmlloader@26.1.2-64.0.9/net.minecraftforge.fml.loading.targets.CommonLaunchHandler.lambda$makeService$0(CommonLaunchHandler.java:79) [fmlloader-26.1.2-64.0.9.jar!/:?]
at SECURE-BOOTSTRAP/cpw.mods.modlauncher@10.2.4/cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:77) [modlauncher-10.2.4.jar!/:?]
at SECURE-BOOTSTRAP/cpw.mods.modlauncher@10.2.4/cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:97) [modlauncher-10.2.4.jar!/:?]
at SECURE-BOOTSTRAP/cpw.mods.modlauncher@10.2.4/cpw.mods.modlauncher.Launcher.run(Launcher.java:116) [modlauncher-10.2.4.jar!/:?]
at SECURE-BOOTSTRAP/cpw.mods.modlauncher@10.2.4/cpw.mods.modlauncher.Launcher.main(Launcher.java:75) [modlauncher-10.2.4.jar!/:?]
at SECURE-BOOTSTRAP/cpw.mods.modlauncher@10.2.4/cpw.mods.modlauncher.BootstrapEntry.main(BootstrapEntry.java:17) [modlauncher-10.2.4.jar!/:?]
at net.minecraftforge.bootstrap@2.1.7/net.minecraftforge.bootstrap.Bootstrap.moduleMain(Bootstrap.java:188) [bootstrap-2.1.8.jar!/:?]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[?:?]
at java.base/java.lang.reflect.Method.invoke(Method.java:565) ~[?:?]
at net.minecraftforge.bootstrap.Bootstrap.bootstrapMain(Bootstrap.java:133) [bootstrap-2.1.8.jar:2.1.8]
at net.minecraftforge.bootstrap.Bootstrap.start(Bootstrap.java:53) [bootstrap-2.1.8.jar:2.1.8]
at net.minecraftforge.bootstrap.ForgeBootstrap.main(ForgeBootstrap.java:19) [bootstrap-2.1.8.jar:2.1.8]
at net.minecraftforge.launcher.Main$Launcher.run(Main.java:270) [slime-launcher-0.2.1.jar:0.2.1]
at net.minecraftforge.launcher.Main$Launcher.access$000(Main.java:256) [slime-launcher-0.2.1.jar:0.2.1]
at net.minecraftforge.launcher.Main.main(Main.java:57) [slime-launcher-0.2.1.jar:0.2.1]
Transformer Audit:
net.minecraft.server.Main
REASON: classloading
net.minecraftforge.logging.CrashReportExtender
REASON: classloading
net.minecraftforge.server.loading.ServerModLoader
REASON: classloading
-- System Details --
Details:
Minecraft Version: 26.1.2
Minecraft Version ID: 26.1.2
Operating System: Mac OS X (aarch64) version 26.6
Java Version: 25.0.2, Eclipse Adoptium
Java VM Version: OpenJDK 64-Bit Server VM (mixed mode, sharing), Eclipse Adoptium
Memory: 191387352 bytes (182 MiB) / 390070272 bytes (372 MiB) up to 8589934592 bytes (8192 MiB)
Memory (heap): init: 2048MiB, used: 185MiB, committed: 372MiB, max: 8192MiB
Memory (non-head): init: 007MiB, used: 112MiB, committed: 114MiB, max: 000MiB
CPUs: 16
Processor Vendor: Apple Inc.
Processor Name: Apple M3 Max
Identifier: Apple Inc. Family 0x8765edea Model 0 Stepping 0
Microarchitecture: ARM64 SoC: Everest + Sawtooth
Frequency (GHz): 4.06
Number of physical packages: 1
Number of physical CPUs: 16
Number of logical CPUs: 16
Graphics card #0 name: Apple M3 Max
Graphics card #0 vendor: Apple (0x106b)
Graphics card #0 VRAM (MiB): 0.00
Graphics card #0 deviceId: unknown
Graphics card #0 versionInfo: unknown
Memory slot #0 capacity (MiB): 0.00
Memory slot #0 clockSpeed (GHz): 0.00
Memory slot #0 type: unknown
Virtual memory max (MiB): 131072.00
Virtual memory used (MiB): 51282.34
Swap memory total (MiB): 0.00
Swap memory used (MiB): 0.00
Space in storage for jna.tmpdir (MiB): <path not set>
Space in storage for org.lwjgl.system.SharedLibraryExtractPath (MiB): <path not set>
Space in storage for io.netty.native.workdir (MiB): <path not set>
Space in storage for java.io.tmpdir (MiB): available: 292345.31, total: 948554.19
Space in storage for workdir (MiB): available: 292345.31, total: 948554.19
JVM Flags: 2 total; -XX:+UseCompactObjectHeaders -Xmx8G
Debug Flags: 0 total;
ModLauncher: 10.2.4
ModLauncher launch target: forge_userdev_server
ModLauncher naming: mcp
ModLauncher services:
/ slf4jfixer PLUGINSERVICE
/ runtimedistcleaner PLUGINSERVICE
/ runtime_enum_extender PLUGINSERVICE
/ capability_token_subclass PLUGINSERVICE
/ accesstransformer PLUGINSERVICE
/ mixin PLUGINSERVICE
/ fml TRANSFORMATIONSERVICE
/ forge TRANSFORMATIONSERVICE
/ mixin TRANSFORMATIONSERVICE
FML Language Providers:
lowcodefml@64
minecraft@1.0
javafml@64.0.9
Mod List:
union:/Users/brianfopiano/Developer/RemoteGit/Volm|Minecraft |minecraft |26.1.2 |NONE |Manifest: NOSIGNATURE
union:/Users/brianfopiano/Developer/RemoteGit/Volm|Forge |forge |64.0.9 |NONE |Manifest: NOSIGNATURE
/Users/brianfopiano/Developer/RemoteGit/VolmitSoft|Iris |irisworldgen |4.0.0-26.1 |NONE |Manifest: NOSIGNATURE
+1
View File
@@ -0,0 +1 @@
eula=true
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
+83
View File
@@ -0,0 +1,83 @@
[12Jun2026 02:27:13.584] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher running: args [--launchTarget, forge_userdev_server, --gameDir, ., --nogui]
[12Jun2026 02:27:13.585] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: JVM identified as Eclipse Adoptium OpenJDK 64-Bit Server VM 25.0.2+10-LTS
[12Jun2026 02:27:13.585] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher 10.2.4 starting: java version 25.0.2 by Eclipse Adoptium; OS Mac OS X arch aarch64 version 26.6
[12Jun2026 02:27:13.635] [main/INFO] [net.minecraftforge.fml.loading.ImmediateWindowHandler/]: ImmediateWindowProvider not loading because launch target is forge_userdev_server
[12Jun2026 02:27:13.680] [main/INFO] [mixin/]: SpongePowered MIXIN Subsystem Version=0.8.7 Source=jar:file:///Users/brianfopiano/.gradle/caches/modules-2/files-2.1/org.spongepowered/mixin/0.8.7/8ab114ac385e6dbdad5efafe28aba4df8120915f/mixin-0.8.7.jar!/ Service=ModLauncher Env=SERVER
[12Jun2026 02:27:14.173] [main/INFO] [net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator/]: No dependencies to load found. Skipping!
[12Jun2026 02:27:14.264] [main/INFO] [cpw.mods.modlauncher.LaunchServiceHandler/MODLAUNCHER]: Launching target 'forge_userdev_server' with arguments [--gameDir, ., --nogui]
[12Jun2026 02:27:17.821] [modloading-worker-0/INFO] [Iris/]: Iris 4.0.0-26.1 bootstrapping on Minecraft 26.1.2 (Forge 64.0.9)
[12Jun2026 02:27:17.825] [modloading-worker-0/INFO] [net.minecraftforge.common.ForgeMod/FORGEMOD]: Forge mod loading, version 64.0.9, for MC 26.1.2 with MCP 20260409.101008
[12Jun2026 02:27:17.825] [modloading-worker-0/INFO] [net.minecraftforge.common.MinecraftForge/FORGE]: MinecraftForge v64.0.9 Initialized
[12Jun2026 02:27:17.827] [modloading-worker-0/INFO] [Iris/]: Iris core loaded (3 classes ok)
[12Jun2026 02:27:17.830] [modloading-worker-0/INFO] [net.minecraftforge.common.ForgeMod/FORGEMOD]: Opening jdk.naming.dns/com.sun.jndi.dns to java.naming
[12Jun2026 02:27:17.834] [modloading-worker-0/INFO] [Iris/]: Iris chunk generator registered as irisworldgen:iris
[12Jun2026 02:27:17.834] [modloading-worker-0/INFO] [Iris/]: Iris world check armed
[12Jun2026 02:27:17.930] [main/WARN] [net.minecraftforge.common.ForgeConfigSpec/CORE]: Configuration file /Users/brianfopiano/Developer/RemoteGit/VolmitSoftware/Iris/adapters/forge/run/config/forge-common.toml is not correct. Correcting
[12Jun2026 02:27:17.930] [main/WARN] [net.minecraftforge.common.ForgeConfigSpec/CORE]: Incorrect key general was corrected from null to its default, SynchronizedConfig{DataHolder:{}}.
[12Jun2026 02:27:17.934] [main/WARN] [net.minecraftforge.common.ForgeConfigSpec/CORE]: Incorrect key general.logLegacyTagWarnings was corrected from null to its default, OFF.
[12Jun2026 02:27:18.014] [Forge Version Check/INFO] [net.minecraftforge.fml.VersionChecker/]: [forge] Starting version check at https://files.minecraftforge.net/net/minecraftforge/forge/promotions_slim.json
[12Jun2026 02:27:18.243] [Forge Version Check/INFO] [net.minecraftforge.fml.VersionChecker/]: [forge] Found status: BETA Current: 64.0.9 Target: 64.0.9
[12Jun2026 02:27:18.504] [main/INFO] [com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService/]: Environment: Environment[sessionHost=https://sessionserver.mojang.com, servicesHost=https://api.minecraftservices.com, profilesHost=https://api.mojang.com, name=PROD]
[12Jun2026 02:27:18.529] [main/WARN] [net.minecraft.server.packs.VanillaPackResourcesBuilder/]: Assets URL 'union:/Users/brianfopiano/Developer/RemoteGit/VolmitSoftware/Iris/adapters/forge/.gradle/mavenizer/repo/net/minecraftforge/forge/26.1.2-64.0.9/forge-26.1.2-64.0.9.jar%230!/assets/.mcassetsroot' uses unexpected schema
[12Jun2026 02:27:18.529] [main/WARN] [net.minecraft.server.packs.VanillaPackResourcesBuilder/]: Assets URL 'union:/Users/brianfopiano/Developer/RemoteGit/VolmitSoftware/Iris/adapters/forge/.gradle/mavenizer/repo/net/minecraftforge/forge/26.1.2-64.0.9/forge-26.1.2-64.0.9.jar%230!/data/.mcassetsroot' uses unexpected schema
[12Jun2026 02:27:18.850] [Worker-Main-7/INFO] [net.minecraft.server.Main/]: No existing world data, creating new world
[12Jun2026 02:27:19.225] [main/INFO] [net.minecraft.world.item.crafting.RecipeManager/]: Loaded 1515 recipes
[12Jun2026 02:27:19.235] [main/INFO] [net.minecraft.advancements.AdvancementTree/]: Loaded 1617 advancements
[12Jun2026 02:27:19.317] [Server thread/INFO] [net.minecraft.server.dedicated.DedicatedServer/]: Starting minecraft server version 26.1.2
[12Jun2026 02:27:19.317] [Server thread/INFO] [net.minecraft.server.dedicated.DedicatedServer/]: Loading properties
[12Jun2026 02:27:19.317] [Server thread/INFO] [net.minecraft.server.dedicated.DedicatedServer/]: Default game type: SURVIVAL
[12Jun2026 02:27:19.317] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Generating keypair
[12Jun2026 02:27:19.355] [Server thread/INFO] [net.minecraft.server.dedicated.DedicatedServer/]: Starting Minecraft server on *:25601
[12Jun2026 02:27:19.724] [Server thread/WARN] [net.minecraft.server.dedicated.DedicatedServer/]: **** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!
[12Jun2026 02:27:19.724] [Server thread/WARN] [net.minecraft.server.dedicated.DedicatedServer/]: The server will make no attempt to authenticate usernames. Beware.
[12Jun2026 02:27:19.724] [Server thread/WARN] [net.minecraft.server.dedicated.DedicatedServer/]: While this makes the game possible to play without internet access, it also opens up the ability for hackers to connect with any username they choose.
[12Jun2026 02:27:19.724] [Server thread/WARN] [net.minecraft.server.dedicated.DedicatedServer/]: To change this, set "online-mode" to "true" in the server.properties file.
[12Jun2026 02:27:19.733] [Server thread/WARN] [net.minecraftforge.common.ForgeConfigSpec/CORE]: Configuration file ./world/serverconfig/forge-server.toml is not correct. Correcting
[12Jun2026 02:27:19.733] [Server thread/WARN] [net.minecraftforge.common.ForgeConfigSpec/CORE]: Incorrect key server was corrected from null to its default, SynchronizedConfig{DataHolder:{}}.
[12Jun2026 02:27:19.733] [Server thread/WARN] [net.minecraftforge.common.ForgeConfigSpec/CORE]: Incorrect key server.removeErroringBlockEntities was corrected from null to its default, false.
[12Jun2026 02:27:19.734] [Server thread/WARN] [net.minecraftforge.common.ForgeConfigSpec/CORE]: Incorrect key server.removeErroringEntities was corrected from null to its default, false.
[12Jun2026 02:27:19.734] [Server thread/WARN] [net.minecraftforge.common.ForgeConfigSpec/CORE]: Incorrect key server.fullBoundingBoxLadders was corrected from null to its default, false.
[12Jun2026 02:27:19.734] [Server thread/WARN] [net.minecraftforge.common.ForgeConfigSpec/CORE]: Incorrect key server.permissionHandler was corrected from null to its default, forge:default_handler.
[12Jun2026 02:27:19.734] [Server thread/WARN] [net.minecraftforge.common.ForgeConfigSpec/CORE]: Incorrect key server.advertiseDedicatedServerToLan was corrected from null to its default, true.
[12Jun2026 02:27:19.739] [Server thread/INFO] [net.minecraft.server.dedicated.DedicatedServer/]: Preparing level "world"
[12Jun2026 02:27:19.812] [Server thread/INFO] [net.minecraft.server.level.progress.LoggingLevelLoadListener/]: Selecting global world spawn...
[12Jun2026 02:27:20.087] [Worker-Main-5/INFO] [Iris/]: Engine init: minecraft_overworld/overworld seed=2668990339094804701
[12Jun2026 02:27:21.416] [Worker-Main-5/INFO] [Iris/]: Iris engine up for minecraft:overworld: pack=/Users/brianfopiano/Developer/RemoteGit/VolmitSoftware/Iris/adapters/forge/run/config/irisworldgen/packs/overworld dim=overworld seed=2668990339094804701 height=-256..512
[12Jun2026 02:27:21.416] [Worker-Main-5/INFO] [Iris/]: Iris generating overworld through IrisModdedChunkGenerator (dim=overworld first chunk -2,-1)
[12Jun2026 02:27:56.453] [Server thread/INFO] [net.minecraft.server.level.progress.LoggingLevelLoadListener/]: Loading 0 persistent chunks...
[12Jun2026 02:27:56.453] [Server thread/INFO] [net.minecraft.server.level.progress.LoggingLevelLoadListener/]: Preparing spawn area: 100%
[12Jun2026 02:27:56.454] [Server thread/INFO] [net.minecraft.server.level.progress.LoggingLevelLoadListener/]: Time elapsed: 36642 ms
[12Jun2026 02:27:56.454] [Server thread/INFO] [net.minecraft.server.dedicated.DedicatedServer/]: Done (36.722s)! For help, type "help"
[12Jun2026 02:27:56.455] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Saving chunks for level 'ServerLevel[world]'/minecraft:overworld
[12Jun2026 02:27:56.491] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Saving chunks for level 'ServerLevel[world]'/minecraft:the_nether
[12Jun2026 02:27:56.493] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Saving chunks for level 'ServerLevel[world]'/minecraft:the_end
[12Jun2026 02:27:56.513] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: ThreadedAnvilChunkStorage (world): All chunks are saved
[12Jun2026 02:27:56.513] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: ThreadedAnvilChunkStorage (DIM-1): All chunks are saved
[12Jun2026 02:27:56.513] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: ThreadedAnvilChunkStorage (DIM1): All chunks are saved
[12Jun2026 02:27:56.513] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: ThreadedAnvilChunkStorage: All dimensions are saved
[12Jun2026 02:27:56.533] [Server thread/INFO] [net.minecraftforge.server.permission.PermissionAPI/]: Successfully initialized permission handler forge:default_handler
[12Jun2026 02:27:56.830] [Server thread/INFO] [Iris/]: [worldcheck] overworld generator: art.arcane.iris.modded.IrisModdedChunkGenerator
[12Jun2026 02:27:56.830] [Server thread/INFO] [Iris/]: [worldcheck] spawn: 0 200 0 (minY=-256 height=768)
[12Jun2026 02:27:58.025] [LanServerPinger #1/WARN] [net.minecraft.client.server.LanServerPinger/]: LanServerPinger: No route to host
[12Jun2026 02:28:03.910] [Server thread/INFO] [Iris/]: [worldcheck] surface sample: -24 205 -24 minecraft:basalt
[12Jun2026 02:28:03.910] [Server thread/INFO] [Iris/]: [worldcheck] surface sample: -24 199 -8 minecraft:lava
[12Jun2026 02:28:03.910] [Server thread/INFO] [Iris/]: [worldcheck] surface sample: -24 197 8 minecraft:magma_block
[12Jun2026 02:28:03.910] [Server thread/INFO] [Iris/]: [worldcheck] surface sample: -24 201 24 minecraft:magma_block
[12Jun2026 02:28:03.910] [Server thread/INFO] [Iris/]: [worldcheck] surface sample: -8 203 -24 minecraft:basalt
[12Jun2026 02:28:03.910] [Server thread/INFO] [Iris/]: [worldcheck] surface sample: -8 198 -8 minecraft:basalt
[12Jun2026 02:28:03.910] [Server thread/INFO] [Iris/]: [worldcheck] surface digest: 47ef866543a5 (16 columns, 4 distinct surface blocks: [minecraft:basalt, minecraft:lava, minecraft:magma_block, minecraft:tuff])
[12Jun2026 02:28:03.910] [Server thread/INFO] [Iris/]: [worldcheck] chunk 0,0: 29 non-empty sections of 48; column blocks at (8,*,8): [minecraft:bedrock, minecraft:deepslate, minecraft:stone, minecraft:dripstone_block, minecraft:blackstone]
[12Jun2026 02:28:03.910] [Server thread/INFO] [Iris/]: [worldcheck] PASS
[12Jun2026 02:28:03.911] [Iris World Check/INFO] [Iris/]: [worldcheck] shutting down dev server (result=PASS)
[12Jun2026 02:28:03.911] [Server thread/WARN] [net.minecraft.server.MinecraftServer/]: Can't keep up! Is the server overloaded? Running 7077ms or 141 ticks behind
[12Jun2026 02:28:04.560] [Server thread/INFO] [Iris/]: Iris engine closed for minecraft:overworld
[12Jun2026 02:28:04.561] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Stopping server
[12Jun2026 02:28:04.561] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Saving players
[12Jun2026 02:28:04.561] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Saving worlds
[12Jun2026 02:28:04.618] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Saving chunks for level 'ServerLevel[world]'/minecraft:overworld
[12Jun2026 02:28:04.845] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Saving chunks for level 'ServerLevel[world]'/minecraft:the_nether
[12Jun2026 02:28:04.846] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Saving chunks for level 'ServerLevel[world]'/minecraft:the_end
[12Jun2026 02:28:04.864] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: ThreadedAnvilChunkStorage (world): All chunks are saved
[12Jun2026 02:28:04.864] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: ThreadedAnvilChunkStorage (DIM-1): All chunks are saved
[12Jun2026 02:28:04.864] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: ThreadedAnvilChunkStorage (DIM1): All chunks are saved
[12Jun2026 02:28:04.864] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: ThreadedAnvilChunkStorage: All dimensions are saved
+1
View File
@@ -0,0 +1 @@
[]
+69
View File
@@ -0,0 +1,69 @@
#Minecraft server properties
#Fri Jun 12 02:27:18 EDT 2026
accepts-transfers=false
allow-flight=false
broadcast-console-to-ops=true
broadcast-rcon-to-ops=true
bug-report-link=
difficulty=easy
enable-code-of-conduct=false
enable-jmx-monitoring=false
enable-query=false
enable-rcon=false
enable-status=true
enforce-secure-profile=true
enforce-whitelist=false
entity-broadcast-range-percentage=100
force-gamemode=false
function-permission-level=2
gamemode=survival
generate-structures=true
generator-settings={}
hardcore=false
hide-online-players=false
initial-disabled-packs=
initial-enabled-packs=vanilla
level-name=world
level-seed=
level-type=minecraft\:normal
log-ips=true
management-server-allowed-origins=
management-server-enabled=false
management-server-host=localhost
management-server-port=0
management-server-secret=gw5pwUKFpNvEqtk8fveDSDQCSnmiB63EXSaiRp6h
management-server-tls-enabled=true
management-server-tls-keystore=
management-server-tls-keystore-password=
max-chained-neighbor-updates=1000000
max-players=20
max-tick-time=60000
max-world-size=29999984
motd=A Minecraft Server
network-compression-threshold=256
online-mode=false
op-permission-level=4
pause-when-empty-seconds=60
player-idle-timeout=0
prevent-proxy-connections=false
query.port=25565
rate-limit=0
rcon.password=
rcon.port=25575
region-file-compression=deflate
require-resource-pack=false
resource-pack=
resource-pack-id=
resource-pack-prompt=
resource-pack-sha1=
server-ip=
server-port=25601
simulation-distance=10
spawn-protection=16
status-heartbeat-interval=0
sync-chunk-writes=false
text-filtering-config=
text-filtering-version=0
use-native-transport=true
view-distance=10
white-list=false
+1
View File
@@ -0,0 +1 @@
[]
+1
View File
@@ -0,0 +1 @@
[]
Binary file not shown.
@@ -0,0 +1 @@
{"statistics":{"totalHotloads":0,"chunksGenerated":64,"IrisToUpgradedVersion":0,"IrisCreationVersion":0,"MinecraftVersion":0},"chunks":{},"cooldowns":{}}
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,12 @@
#Server configuration settings
[server]
#Set this to true to remove any BlockEntity that throws an error in its update method instead of closing the server and reporting a crash log. BE WARNED THIS COULD SCREW UP EVERYTHING USE SPARINGLY WE ARE NOT RESPONSIBLE FOR DAMAGES.
removeErroringBlockEntities = false
#Set this to true to remove any Entity (Note: Does not include BlockEntities) that throws an error in its tick method instead of closing the server and reporting a crash log. BE WARNED THIS COULD SCREW UP EVERYTHING USE SPARINGLY WE ARE NOT RESPONSIBLE FOR DAMAGES.
removeErroringEntities = false
#Set this to true to check the entire entity's collision bounding box for ladders instead of just the block they are in. Causes noticeable differences in mechanics so default is vanilla behavior. Default: false.
fullBoundingBoxLadders = false
#The permission handler used by the server. Defaults to forge:default_handler if no such handler with that name is registered.
permissionHandler = "forge:default_handler"
#Set this to true to enable advertising the dedicated server to local LAN clients so that it shows up in the Multiplayer screen automatically.
advertiseDedicatedServerToLan = true
+1
View File
@@ -0,0 +1 @@
+95
View File
@@ -0,0 +1,95 @@
/*
* Iris is a World Generator for Minecraft Servers
* Copyright (c) 2026 Arcane Arts (Volmit Software)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import java.io.File
pluginManagement {
repositories {
gradlePluginPortal()
maven {
name = 'MinecraftForge'
url = uri('https://maven.minecraftforge.net/')
}
mavenCentral()
}
}
plugins {
id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0'
}
rootProject.name = 'iris-forge'
dependencyResolutionManagement {
versionCatalogs {
libs {
from(files('../../gradle/libs.versions.toml'))
}
}
}
boolean hasVolmLibSettings(File directory) {
new File(directory, 'settings.gradle.kts').exists() || new File(directory, 'settings.gradle').exists()
}
File resolveLocalVolmLibDirectory() {
String configuredPath = providers.gradleProperty('localVolmLibDirectory')
.orElse(providers.environmentVariable('VOLMLIB_DIR'))
.orNull
if (configuredPath != null && !configuredPath.isBlank()) {
File configuredDirectory = file(configuredPath)
if (hasVolmLibSettings(configuredDirectory)) {
return configuredDirectory
}
}
File currentDirectory = settingsDir
while (currentDirectory != null) {
File candidate = new File(currentDirectory, 'VolmLib')
if (hasVolmLibSettings(candidate)) {
return candidate
}
currentDirectory = currentDirectory.parentFile
}
null
}
boolean useLocalVolmLib = providers.gradleProperty('useLocalVolmLib')
.orElse('true')
.map { String value -> value.equalsIgnoreCase('true') }
.get()
File localVolmLibDirectory = resolveLocalVolmLibDirectory()
if (useLocalVolmLib && localVolmLibDirectory != null) {
includeBuild(localVolmLibDirectory) {
dependencySubstitution {
substitute(module('com.github.VolmitSoftware:VolmLib')).using(project(':shared'))
substitute(module('com.github.VolmitSoftware.VolmLib:shared')).using(project(':shared'))
substitute(module('com.github.VolmitSoftware.VolmLib:volmlib-shared')).using(project(':shared'))
}
}
}
includeBuild('../..') {
dependencySubstitution {
substitute(module('art.arcane:core')).using(project(':core'))
substitute(module('art.arcane:spi')).using(project(':spi'))
}
}
@@ -0,0 +1,58 @@
/*
* Iris is a World Generator for Minecraft Servers
* Copyright (c) 2026 Arcane Arts (Volmit Software)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package art.arcane.iris.forge;
import art.arcane.iris.modded.ModdedLoader;
import net.minecraft.server.MinecraftServer;
import net.minecraftforge.fml.ModList;
import net.minecraftforge.fml.loading.FMLLoader;
import net.minecraftforge.fml.loading.FMLPaths;
import net.minecraftforge.forgespi.language.IModFileInfo;
import net.minecraftforge.server.ServerLifecycleHooks;
import java.io.File;
import java.nio.file.Path;
public final class ForgeModdedLoader implements ModdedLoader {
@Override
public String platformName() {
return "forge";
}
@Override
public String minecraftVersion() {
return FMLLoader.versionInfo().mcVersion();
}
@Override
public MinecraftServer currentServer() {
return ServerLifecycleHooks.getCurrentServer();
}
@Override
public Path configDir() {
return FMLPaths.CONFIGDIR.get();
}
@Override
public File modJar() {
IModFileInfo info = ModList.getModFileById("irisworldgen");
return info == null ? null : info.getFile().getFilePath().toFile();
}
}
@@ -18,8 +18,57 @@
package art.arcane.iris.forge;
import art.arcane.iris.modded.IrisModdedChunkGenerator;
import art.arcane.iris.modded.ModdedEngineBootstrap;
import art.arcane.iris.modded.ModdedParityProbe;
import art.arcane.iris.modded.ModdedWorldCheck;
import art.arcane.iris.modded.ModdedWorldEngines;
import com.mojang.serialization.MapCodec;
import net.minecraft.core.registries.Registries;
import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraftforge.event.server.ServerStoppingEvent;
import net.minecraftforge.fml.ModContainer;
import net.minecraftforge.fml.ModList;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.fml.loading.FMLLoader;
import net.minecraftforge.fml.loading.VersionInfo;
import net.minecraftforge.registries.DeferredRegister;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Mod("irisworldgen")
public final class IrisForgeBootstrap {
public IrisForgeBootstrap() {
throw new UnsupportedOperationException("The Iris Forge adapter is a build skeleton; worldgen is not wired yet (see CROSSPLATFORM_PLAN.md Phase 5).");
private static final Logger LOGGER = LoggerFactory.getLogger("Iris");
public IrisForgeBootstrap(FMLJavaModLoadingContext context) {
ModdedEngineBootstrap.initialize(new ForgeModdedLoader());
String modVersion = ModList.getModContainerById("irisworldgen")
.map((ModContainer container) -> container.getModInfo().getVersion().toString())
.orElse("unknown");
VersionInfo versionInfo = FMLLoader.versionInfo();
LOGGER.info("Iris {} bootstrapping on Minecraft {} (Forge {})", modVersion, versionInfo.mcVersion(), versionInfo.forgeVersion());
ModdedEngineBootstrap.selfTest(IrisForgeBootstrap.class.getClassLoader());
ModdedEngineBootstrap.bind();
DeferredRegister<MapCodec<? extends ChunkGenerator>> chunkGenerators = DeferredRegister.create(Registries.CHUNK_GENERATOR, "irisworldgen");
chunkGenerators.register("iris", () -> IrisModdedChunkGenerator.CODEC);
chunkGenerators.register(context.getModBusGroup());
LOGGER.info("Iris chunk generator registered as irisworldgen:iris");
ServerStoppingEvent.BUS.addListener((ServerStoppingEvent event) -> ModdedWorldEngines.shutdown());
String parity = System.getProperty("iris.parity");
if (parity != null) {
LOGGER.info("Iris parity probe armed: {}", parity);
ModdedParityProbe.schedule(parity);
}
String worldCheck = System.getProperty("iris.worldcheck");
if (worldCheck != null) {
LOGGER.info("Iris world check armed");
ModdedWorldCheck.schedule();
}
}
}
@@ -1,10 +1,24 @@
modLoader = "javafml"
loaderVersion = "[1,)"
loaderVersion = "[64,)"
license = "GPL-3.0"
[[mods]]
modId = "irisworldgen"
version = "${version}"
displayName = "Iris"
description = "Iris World Generation Engine (Forge adapter - SKELETON, worldgen not yet wired)"
description = "Iris World Generation Engine (Forge adapter - native chunk generator, overworld override datapack, engine lifecycle)"
authors = "Arcane Arts (Volmit Software)"
[[dependencies.irisworldgen]]
modId = "forge"
mandatory = true
versionRange = "[64,)"
ordering = "NONE"
side = "BOTH"
[[dependencies.irisworldgen]]
modId = "minecraft"
mandatory = true
versionRange = "[${minecraftVersion}]"
ordering = "NONE"
side = "BOTH"
@@ -0,0 +1,10 @@
{
"pack": {
"description": "Iris World Generation Engine resources",
"max_format": 101,
"min_format": [
101,
1
]
}
}
+9 -3
View File
@@ -147,11 +147,17 @@ tasks.register('buildFabric', Copy) {
into(layout.projectDirectory.dir('dist'))
}
tasks.register('forgeJar', Exec) {
group = 'iris'
workingDir = layout.projectDirectory.dir('adapters/forge').asFile
String wrapperScript = System.getProperty('os.name').toLowerCase().contains('windows') ? 'gradlew.bat' : 'gradlew'
commandLine(layout.projectDirectory.file(wrapperScript).asFile.absolutePath, 'shadowJar', '--console=plain')
}
tasks.register('buildForge', Copy) {
group = 'iris'
dependsOn(':adapters:forge:jar')
from(project(':adapters:forge').layout.buildDirectory.file("libs/Iris-${project.version}-forge-skeleton.jar"))
rename { "Iris-${project.version}+mc${minecraftVersion}-forge-skeleton.jar" }
dependsOn('forgeJar')
from(layout.projectDirectory.file("adapters/forge/build/libs/Iris-${project.version}+mc${minecraftVersion}-forge.jar"))
into(layout.projectDirectory.dir('dist'))
}
-1
View File
@@ -74,4 +74,3 @@ include(':spi')
include(':adapters:bukkit:plugin')
include(':adapters:bukkit:nms:v1_21_R7')
include(':adapters:bukkit:nms:v26_1_R1')
include(':adapters:forge')