Skip to content

Commit

Permalink
Refactor as an Architectury Loom project and add Forge and NeoForge.
Browse files Browse the repository at this point in the history
* Rewrite a lot of mixins to work around Forge/NeoForge mixin limitations
* Remove JiJ'd MixinExtras except on Forge (but there it's broken)

- Target Minecraft 1.20.4 and above
- Refactor the project as an Architectory Loom project
- Add Forge support (currently broken without separate MixinExtras)
- Add NeoForge support
- New maven artifact IDs: biolith-fabric, biolith-forge, biolith-neoforge
  • Loading branch information
gniftygnome committed Dec 30, 2023
1 parent 5558ce2 commit 50298f0
Show file tree
Hide file tree
Showing 80 changed files with 2,175 additions and 551 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/check_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
if: ${{ runner.os != 'Windows' }}
run: chmod +x ./gradlew
- name: Build
run: ./gradlew build --stacktrace --parallel
run: ./gradlew build --stacktrace
- name: Capture build artifacts
if: ${{ runner.os == 'Linux' && matrix.java == '17' }} # Only upload artifacts built from LTS java on one OS
uses: actions/upload-artifact@v3
Expand Down
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# User-specific stuff
.idea/
.idea/*
!.idea/scopes

*.iml
*.ipr
Expand Down Expand Up @@ -113,6 +114,7 @@ gradle-app.setting

# Common working directory
run/
runs/

# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
!gradle-wrapper.jar
3 changes: 3 additions & 0 deletions .idea/scopes/Fabric_sources.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions .idea/scopes/Forge_sources.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

153 changes: 30 additions & 123 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,143 +1,50 @@
plugins {
id 'fabric-loom' version '1.3.+'
id 'maven-publish'
id 'io.github.juuxel.loom-vineflower' version '1.11.0'
id "architectury-plugin" version "3.4-SNAPSHOT"
id 'dev.architectury.loom' version '1.4-SNAPSHOT' apply(false)
}

archivesBaseName = project.archive_name
version = project.mod_version
group = project.maven_group

apply from: 'https://raw.githubusercontent.com/TerraformersMC/GradleScripts/3.0-beta/ferry-mpp.gradle'

sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17

repositories {
// Add repositories to retrieve artifacts from in here.
// You should only use this when depending on other mods because
// Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
// See https://docs.gradle.org/current/userguide/declaring_repositories.html
// for more information about repositories.

maven {
name = 'TerraformersMC'
url = 'https://maven.terraformersmc.com/'
}

// TerraBlender
maven {
url = 'https://maven.minecraftforge.net/'
}
architectury {
minecraft = rootProject.minecraft_version
}

dependencies {
// To change the versions see the gradle.properties file
minecraft "com.mojang:minecraft:${project.minecraft_version}"
mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"

// Fabric API. This is technically optional, but you probably want it anyway.
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
subprojects {
apply plugin: "dev.architectury.loom"

// TerraBlender so we can target it with mixins
modCompileOnlyApi "com.github.glitchfiend:TerraBlender-fabric:${terrablender_version}"
project.archivesBaseName = "${rootProject.archives_base_name}-${project.name}"

// Terraform Surfaces API for OpenSimplexNoise
include(modImplementation("com.terraformersmc.terraform-api:terraform-surfaces-api-v1:${project.terraform_surfaces_api_version}"))

// MixinExtras so we can mixin in a more compatible manner
include(implementation(annotationProcessor("io.github.llamalad7:mixinextras-fabric:${project.mixinextras_version}")))
}

processResources {
inputs.property "version", project.version

filesMatching("fabric.mod.json") {
expand "version": project.version
dependencies {
minecraft "com.mojang:minecraft:${rootProject.minecraft_version}"
mappings("net.fabricmc:yarn:${rootProject.yarn_mappings}:v2")
}
}

tasks.withType(JavaCompile).configureEach {
// Minecraft 1.18 (1.18-pre2) upwards uses Java 17.
it.options.release = 17
}

loom {
accessWidenerPath = file("src/main/resources/biolith.accesswidener")
}

vineflower {
addToRuntimeClasspath.set(true)
}

java {
// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
// if it is present.
// If you remove this line, sources will not be generated.
withSourcesJar()
}
allprojects {
apply plugin: "java"
apply plugin: "architectury-plugin"
apply plugin: "maven-publish"

jar {
from("LICENSE") {
rename { "${it}_${project.archivesBaseName}"}
}
}
version = rootProject.mod_version
group = rootProject.maven_group

publish {
onlyIf {
checkVersion(archivesBaseName, version)
}
}

publishing {
publications {
mavenJava(MavenPublication) {
from components.java
repositories {
mavenCentral()
maven {
name = 'TerraformersMC'
url = 'https://maven.terraformersmc.com/'
}

// Exclude TerraBlender from maven deps so Loom does not load it during builds
// and tests of other projects using our API (unless they configure it to).
pom.withXml {
asNode().dependencies.dependency.each { dep ->
if (dep.artifactId.last().value().last() in ["TerraBlender-fabric"]) {
assert dep.parent().remove(dep)
}
}
}
// for TerraBlender
maven {
url = 'https://maven.minecraftforge.net/'
}
}

setupRepositories(repositories)
}

static void setupRepositories(RepositoryHandler repositories) {
//repositories.mavenLocal() // uncomment for testing
def ENV = System.getenv()
if (ENV.MAVEN_URL) {
repositories.maven {
url ENV.MAVEN_URL
credentials {
username ENV.MAVEN_USERNAME
password ENV.MAVEN_PASSWORD
}
}
tasks.withType(JavaCompile).configureEach {
it.options.encoding = 'UTF-8'
it.options.getRelease().set(17)
}
}

ext.checkVersion = { archivesBaseName, version ->
try {
def xml = new URL("https://maven.terraformersmc.com/com/terraformersmc/$archivesBaseName/maven-metadata.xml").text
def metadata = new XmlSlurper().parseText(xml)
def versions = metadata.versioning.versions.version*.text()
if (versions.contains(version)) {
println "$archivesBaseName version $version will not be published; already exists"
return false
} else {
println "$archivesBaseName version $version will be published"
return true
}
} catch (FileNotFoundException ignored) {
println "$archivesBaseName is not on maven yet"
return true
java {
withSourcesJar()
}
}
15 changes: 15 additions & 0 deletions common/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
architectury {
common(rootProject.enabled_platforms.split(","))
}

loom {
accessWidenerPath = file("src/main/resources/biolith.accesswidener")
}

dependencies {
// We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies
// Do NOT use other classes from fabric loader
modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"
// Remove the next line if you don't want to depend on the API
//modApi "dev.architectury:architectury:${rootProject.architectury_version}"
}
Loading

0 comments on commit 50298f0

Please sign in to comment.