mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-10-26 14:00:26 +00:00
Fabric Tooling
This commit is contained in:
1 parent
763ff90a61
commit
26d9115904
8 files changed
+268
-14
No files matched your search
@@ -1,9 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* 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 {
|
plugins {
|
||||||
id 'java'
|
id 'java'
|
||||||
|
id 'net.fabricmc.fabric-loom' version '1.17.11'
|
||||||
|
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 fabricLoaderVersion = providers.gradleProperty('fabricLoaderVersion').getOrElse('0.19.3')
|
||||||
|
|
||||||
group = 'art.arcane'
|
group = 'art.arcane'
|
||||||
version = rootProject.version
|
version = irisVersion
|
||||||
|
|
||||||
java {
|
java {
|
||||||
toolchain {
|
toolchain {
|
||||||
@@ -11,17 +41,85 @@ java {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
|
maven {
|
||||||
|
name = 'FabricMC'
|
||||||
|
url = uri('https://maven.fabricmc.net/')
|
||||||
|
}
|
||||||
|
maven { url = uri('https://repo.codemc.org/repository/maven-public/') }
|
||||||
|
maven { url = uri('https://jitpack.io') }
|
||||||
|
}
|
||||||
|
|
||||||
|
configurations {
|
||||||
|
bundle {
|
||||||
|
canBeConsumed = false
|
||||||
|
canBeResolved = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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')
|
||||||
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':spi'))
|
minecraft("com.mojang:minecraft:${minecraftVersion}")
|
||||||
|
implementation("net.fabricmc:fabric-loader:${fabricLoaderVersion}")
|
||||||
|
compileOnly('org.slf4j:slf4j-api:2.0.17')
|
||||||
|
|
||||||
|
bundle("art.arcane:core:${irisVersion}")
|
||||||
|
bundle("art.arcane:spi:${irisVersion}")
|
||||||
|
bundle('com.github.VolmitSoftware:VolmLib:master-SNAPSHOT')
|
||||||
|
|
||||||
|
bundle(libs.paralithic)
|
||||||
|
bundle(libs.lru)
|
||||||
|
bundle(libs.kotlin.stdlib)
|
||||||
|
bundle(libs.kotlin.coroutines)
|
||||||
|
bundle(libs.commons.lang)
|
||||||
|
bundle(libs.commons.math3)
|
||||||
|
bundle(libs.caffeine)
|
||||||
|
bundle(libs.lz4)
|
||||||
|
bundle(libs.zip)
|
||||||
|
bundle(libs.sentry)
|
||||||
|
bundle(libs.oshi)
|
||||||
|
bundle(libs.byteBuddy.core)
|
||||||
|
bundle(libs.byteBuddy.agent)
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.named('compileJava', JavaCompile).configure {
|
||||||
|
options.encoding = 'UTF-8'
|
||||||
|
options.release.set(25)
|
||||||
}
|
}
|
||||||
|
|
||||||
processResources {
|
processResources {
|
||||||
inputs.property('version', project.version)
|
inputs.property('version', project.version)
|
||||||
|
inputs.property('minecraftVersion', minecraftVersion)
|
||||||
filesMatching('fabric.mod.json') {
|
filesMatching('fabric.mod.json') {
|
||||||
expand('version': project.version)
|
expand('version': project.version, 'minecraftVersion': minecraftVersion)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.named('jar', Jar).configure {
|
tasks.named('shadowJar', ShadowJar).configure {
|
||||||
archiveFileName.set("Iris-${project.version}-fabric-skeleton.jar")
|
archiveFileName.set("Iris-${project.version}+mc${minecraftVersion}-fabric.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')
|
||||||
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.named('assemble').configure {
|
||||||
|
dependsOn(tasks.named('shadowJar'))
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
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
|
||||||
@@ -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 {
|
||||||
|
maven {
|
||||||
|
name = 'FabricMC'
|
||||||
|
url = uri('https://maven.fabricmc.net/')
|
||||||
|
}
|
||||||
|
gradlePluginPortal()
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0'
|
||||||
|
}
|
||||||
|
|
||||||
|
rootProject.name = 'iris-fabric'
|
||||||
|
|
||||||
|
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'))
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -18,8 +18,46 @@
|
|||||||
|
|
||||||
package art.arcane.iris.fabric;
|
package art.arcane.iris.fabric;
|
||||||
|
|
||||||
public final class IrisFabricBootstrap {
|
import net.fabricmc.api.ModInitializer;
|
||||||
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
|
import net.fabricmc.loader.api.ModContainer;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
public final class IrisFabricBootstrap implements ModInitializer {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger("Iris");
|
||||||
|
private static final String[] CORE_SELF_TEST_CLASSES = {
|
||||||
|
"art.arcane.iris.engine.IrisEngine",
|
||||||
|
"art.arcane.iris.util.common.data.B",
|
||||||
|
"art.arcane.iris.core.loader.IrisData"
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
public void onInitialize() {
|
public void onInitialize() {
|
||||||
throw new UnsupportedOperationException("The Iris Fabric adapter is a build skeleton; worldgen is not wired yet (see CROSSPLATFORM_PLAN.md Phase 4).");
|
FabricLoader loader = FabricLoader.getInstance();
|
||||||
|
String modVersion = loader.getModContainer("irisworldgen")
|
||||||
|
.map((ModContainer container) -> container.getMetadata().getVersion().getFriendlyString())
|
||||||
|
.orElse("unknown");
|
||||||
|
String minecraftVersion = loader.getModContainer("minecraft")
|
||||||
|
.map((ModContainer container) -> container.getMetadata().getVersion().getFriendlyString())
|
||||||
|
.orElse("unknown");
|
||||||
|
LOGGER.info("Iris {} bootstrapping on Minecraft {} (Fabric)", modVersion, minecraftVersion);
|
||||||
|
|
||||||
|
int loadedClasses = 0;
|
||||||
|
for (String className : CORE_SELF_TEST_CLASSES) {
|
||||||
|
try {
|
||||||
|
Class.forName(className, true, IrisFabricBootstrap.class.getClassLoader());
|
||||||
|
loadedClasses++;
|
||||||
|
} catch (Throwable error) {
|
||||||
|
LOGGER.error("Iris core self-test failed to initialize {}", className, error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (loadedClasses != CORE_SELF_TEST_CLASSES.length) {
|
||||||
|
throw new IllegalStateException("Iris core self-test failed: only " + loadedClasses + " of " + CORE_SELF_TEST_CLASSES.length + " engine classes initialized");
|
||||||
|
}
|
||||||
|
|
||||||
|
LOGGER.info("Iris core loaded ({} classes ok)", loadedClasses);
|
||||||
|
LOGGER.info("Iris worldgen is not wired on Fabric yet; this build verifies packaging and engine classloading");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3,11 +3,19 @@
|
|||||||
"id": "irisworldgen",
|
"id": "irisworldgen",
|
||||||
"version": "${version}",
|
"version": "${version}",
|
||||||
"name": "Iris",
|
"name": "Iris",
|
||||||
"description": "Iris World Generation Engine (Fabric adapter - SKELETON, worldgen not yet wired)",
|
"description": "Iris World Generation Engine (Fabric adapter - packaging + core bundle; worldgen wiring lands next milestone)",
|
||||||
"authors": ["Arcane Arts (Volmit Software)"],
|
"authors": ["Arcane Arts (Volmit Software)"],
|
||||||
|
"contact": {
|
||||||
|
"sources": "https://github.com/VolmitSoftware/Iris"
|
||||||
|
},
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"environment": "server",
|
"environment": "*",
|
||||||
"entrypoints": {
|
"entrypoints": {
|
||||||
"main": ["art.arcane.iris.fabric.IrisFabricBootstrap"]
|
"main": ["art.arcane.iris.fabric.IrisFabricBootstrap"]
|
||||||
|
},
|
||||||
|
"depends": {
|
||||||
|
"fabricloader": ">=0.19.0",
|
||||||
|
"minecraft": "~${minecraftVersion}",
|
||||||
|
"java": ">=25"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+14
-3
@@ -42,6 +42,11 @@ plugins {
|
|||||||
|
|
||||||
group = 'art.arcane'
|
group = 'art.arcane'
|
||||||
version = providers.gradleProperty('irisVersion').getOrElse('4.0.0-26.1')
|
version = providers.gradleProperty('irisVersion').getOrElse('4.0.0-26.1')
|
||||||
|
|
||||||
|
project(':core') {
|
||||||
|
group = 'art.arcane'
|
||||||
|
version = rootProject.version
|
||||||
|
}
|
||||||
String minecraftVersion = providers.gradleProperty('minecraftVersion').getOrElse('26.1.2')
|
String minecraftVersion = providers.gradleProperty('minecraftVersion').getOrElse('26.1.2')
|
||||||
String volmLibCoordinate = providers.gradleProperty('volmLibCoordinate')
|
String volmLibCoordinate = providers.gradleProperty('volmLibCoordinate')
|
||||||
.orElse('com.github.VolmitSoftware:VolmLib:master-SNAPSHOT')
|
.orElse('com.github.VolmitSoftware:VolmLib:master-SNAPSHOT')
|
||||||
@@ -128,11 +133,17 @@ tasks.register('buildBukkit', Copy) {
|
|||||||
into(layout.projectDirectory.dir('dist'))
|
into(layout.projectDirectory.dir('dist'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tasks.register('fabricJar', Exec) {
|
||||||
|
group = 'iris'
|
||||||
|
workingDir = layout.projectDirectory.dir('adapters/fabric').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('buildFabric', Copy) {
|
tasks.register('buildFabric', Copy) {
|
||||||
group = 'iris'
|
group = 'iris'
|
||||||
dependsOn(':adapters:fabric:jar')
|
dependsOn('fabricJar')
|
||||||
from(project(':adapters:fabric').layout.buildDirectory.file("libs/Iris-${project.version}-fabric-skeleton.jar"))
|
from(layout.projectDirectory.file("adapters/fabric/build/libs/Iris-${project.version}+mc${minecraftVersion}-fabric.jar"))
|
||||||
rename { "Iris-${project.version}+mc${minecraftVersion}-fabric-skeleton.jar" }
|
|
||||||
into(layout.projectDirectory.dir('dist'))
|
into(layout.projectDirectory.dir('dist'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
validateDistributionUrl=true
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|||||||
@@ -74,6 +74,5 @@ include(':spi')
|
|||||||
include(':adapters:bukkit:plugin')
|
include(':adapters:bukkit:plugin')
|
||||||
include(':adapters:bukkit:nms:v1_21_R7')
|
include(':adapters:bukkit:nms:v1_21_R7')
|
||||||
include(':adapters:bukkit:nms:v26_1_R1')
|
include(':adapters:bukkit:nms:v26_1_R1')
|
||||||
include(':adapters:fabric')
|
|
||||||
include(':adapters:forge')
|
include(':adapters:forge')
|
||||||
include(':adapters:neoforge')
|
include(':adapters:neoforge')
|
||||||
Reference in new issue
Block a user