Skip to content

Commit 0f350ec

Browse files
committed
build files + skeleton mod
1 parent 665ac43 commit 0f350ec

19 files changed

+1178
-0
lines changed

.gitignore

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# gradle
2+
3+
.gradle/
4+
build/
5+
out/
6+
classes/
7+
8+
# eclipse
9+
10+
*.launch
11+
12+
# idea
13+
14+
.idea/
15+
*.iml
16+
*.ipr
17+
*.iws
18+
19+
# vscode
20+
21+
.settings/
22+
.vscode/
23+
bin/
24+
.classpath
25+
.project
26+
27+
# macos
28+
29+
*.DS_Store
30+
31+
# runtime folders
32+
33+
run/
34+
run-data/
35+
runs/
36+
37+
# java junk
38+
hs_err_pid*
39+
40+
# forge generated resources cache
41+
/src/generated/resources/.cache/

build.gradle

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
plugins {
2+
id "java-library"
3+
id 'eclipse'
4+
id 'idea'
5+
id "maven-publish"
6+
7+
alias libs.plugins.modDevGradle
8+
alias libs.plugins.spotless
9+
alias libs.plugins.lombok
10+
}
11+
12+
group = maven_group
13+
version = mod_version
14+
15+
java {
16+
toolchain.languageVersion = JavaLanguageVersion.of(17)
17+
}
18+
//NOTE ; Uncomment if GTM Snapshot source is being silly, rebuild and refresh, then recomment out. Having this here constantly isn't great of an idea
19+
configurations.all {
20+
resolutionStrategy {
21+
cacheChangingModulesFor 0, 'seconds'
22+
}
23+
}
24+
sourceSets {
25+
// Include resources generated by data generators.
26+
main.resources {
27+
srcDir 'src/generated/resources'
28+
}
29+
}
30+
31+
apply from: "$rootDir/gradle/scripts/jars.gradle"
32+
apply from: "$rootDir/gradle/scripts/moddevgradle.gradle"
33+
apply from: "$rootDir/gradle/scripts/repositories.gradle"
34+
apply from: "$rootDir/dependencies.gradle"
35+
apply from: "$rootDir/gradle/scripts/resources.gradle"
36+
//apply from: "$rootDir/gradle/scripts/publishing.gradle"
37+
apply from: "$rootDir/gradle/scripts/spotless.gradle"
38+
39+
tasks.withType(JavaCompile).configureEach {
40+
options.encoding = "UTF-8"
41+
options.compilerArgs << "-Xlint:-removal"
42+
options.compilerArgs << "-Aquiet=true"
43+
}
44+
45+
lombok {
46+
version = "1.18.36"
47+
}

dependencies.gradle

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
dependencies {
2+
compileOnly(libs.jetbrains.annotations)
3+
4+
// GTCEu
5+
modImplementation(forge.ldlib)
6+
modImplementation(forge.gtceu)
7+
8+
// Storage Drawers
9+
10+
modRuntimeOnly(forge.jade)
11+
modRuntimeOnly(forge.emi)
12+
}

gradle.properties

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
org.gradle.jvmargs = -Xmx6G
2+
org.gradle.java.installations.auto-download=false
3+
org.gradle.parallel = true
4+
org.gradle.caching = true
5+
6+
# Mod Properties
7+
mod_id = gtstoragedrawers
8+
mod_name = GregTech Storage Drawers
9+
mod_version = 1.0.0
10+
mod_description = Rubber and Treated Wood Storage Drawers for GregTech Modern
11+
mod_authors = serenibyss
12+
mod_license = MIT License
13+
mod_url = https://github.com/serenibyss/GregTechStorageDrawers/
14+
mod_issue_tracker = https://github.com/serenibyss/GregTechStorageDrawers/issues/
15+
maven_group = com.gregtechceu.gtstoragedrawers
16+
17+
# Mod dependency versions
18+
emi_version=1.1.13+1.20.1
19+
storagedrawers_projid=223852
20+
storagedrawers_fileid=5631332

gradle/forge.versions.toml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
[versions]
2+
ldlib = "1.0.40.b"
3+
gtceu = "7.0.1"
4+
emi = "1.1.13+1.20.1"
5+
6+
## modrinth maven ##
7+
jade = "11.12.3+forge"
8+
9+
## cursemaven ##
10+
11+
12+
[libraries]
13+
ldlib = { module = "com.lowdragmc.ldlib:ldlib-forge-1.20.1", version.ref = "ldlib" }
14+
gtceu = { module = "com.gregtechceu.gtceu:gtceu-1.20.1", version.ref = "gtceu" }
15+
emi = { module = "dev.emi:emi-forge", version.ref = "emi" }
16+
17+
## modrinth maven ##
18+
jade = { module = "maven.modrinth:jade", version.ref = "jade" }
19+
20+
## cursemaven ##

gradle/libs.versions.toml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
[versions]
2+
minecraft = "1.20.1"
3+
forge = "47.3.0"
4+
minecraftForge = "1.20.1-47.3.22"
5+
parchment = "2023.09.03"
6+
spotless = "7.0.2"
7+
modDevGradle = "2.0.96"
8+
lombok = "8.11"
9+
jetbrains-annotations = "26.0.1"
10+
11+
[libraries]
12+
minecraft = { module = "com.mojang:minecraft", version.ref = "minecraft" }
13+
minecraftForge = { module = "net.minecraftforge:forge", version.ref = "minecraftForge" }
14+
jetbrains-annotations = { module = "org.jetbrains:annotations", version.ref = "jetbrains-annotations" }
15+
16+
[plugins]
17+
modDevGradle = { id = "net.neoforged.moddev.legacyforge", version.ref = "modDevGradle" }
18+
spotless = { id = "com.diffplug.spotless", version.ref = "spotless" }
19+
lombok = { id = "io.freefair.lombok", version.ref = "lombok" }

gradle/scripts/jars.gradle

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
tasks.register('slimJar', Jar) {
2+
archiveClassifier = "dev-slim"
3+
from sourceSets.main.output
4+
}
5+
6+
obfuscation {
7+
reobfuscate(tasks.named('slimJar'), sourceSets.main) {
8+
archiveClassifier = "slim"
9+
}
10+
}
11+
12+
// Add slim and sources jar to components.java
13+
java {
14+
artifacts.archives(reobfSlimJar)
15+
withSourcesJar()
16+
}
17+
18+
// Use delombok's files for sources
19+
sourcesJar {
20+
exclude {
21+
sourceSets.main.allSource.contains it.file
22+
}
23+
from delombok
24+
}
25+
jar.archiveClassifier = "dev"
26+
base {
27+
archivesName = "${project.name}-${libs.versions.minecraft.get()}"
28+
}
29+
30+
afterEvaluate {
31+
reobfJar.archiveClassifier = ""
32+
tasks.withType(org.gradle.jvm.tasks.Jar).configureEach {
33+
destinationDirectory = file('build/libs/')
34+
manifest.attributes([
35+
'Specification-Title': project.name,
36+
'Specification-Version': mod_version,
37+
'Specification-Vendor': mod_authors,
38+
'Implementation-Title': base.archivesName,
39+
'Implementation-Version': version,
40+
'Implementation-Vendor': mod_authors,
41+
])
42+
}
43+
}

gradle/scripts/moddevgradle.gradle

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
legacyForge {
2+
// Specify Forge version
3+
version = libs.versions.minecraftForge.get()
4+
5+
parchment {
6+
minecraftVersion = libs.versions.minecraft.get()
7+
mappingsVersion = libs.versions.parchment.get()
8+
}
9+
10+
mods {
11+
// define mod <-> source bindings
12+
"${mod_id}" {
13+
sourceSet(sourceSets.main)
14+
}
15+
}
16+
17+
runs {
18+
client {
19+
client()
20+
sourceSet = sourceSets.main
21+
ideName = "Client"
22+
23+
gameDirectory.set(file("runs/client"))
24+
systemProperty('forge.enabledGameTestNamespaces', project.mod_id)
25+
}
26+
27+
client2 {
28+
client()
29+
sourceSet = sourceSets.main
30+
ideName = "Client (2)"
31+
32+
programArguments.addAll('--username', 'YoungOnion')
33+
gameDirectory.set(file("runs/client2"))
34+
systemProperty('forge.enabledGameTestNamespaces', project.mod_id)
35+
}
36+
37+
server {
38+
server()
39+
sourceSet = sourceSets.main
40+
ideName = "Server"
41+
42+
gameDirectory.set(file("runs/server"))
43+
programArgument '--nogui'
44+
systemProperty('forge.enabledGameTestNamespaces', project.mod_id)
45+
}
46+
47+
data {
48+
data()
49+
sourceSet = sourceSets.main
50+
ideName = "Data Generation"
51+
52+
gameDirectory.set(file("runs/data"))
53+
programArguments.addAll('--mod', project.mod_id)
54+
programArguments.addAll('--all')
55+
programArguments.addAll('--output', file('src/generated/resources/').getAbsolutePath())
56+
programArguments.addAll('--existing', file('src/main/resources/').getAbsolutePath())
57+
programArguments.addAll('--existing-mod', 'gtceu', '--existing-mod', 'bloodmagic')
58+
}
59+
60+
configureEach {
61+
// Recommended logging data for a userdev environment
62+
// The markers can be added/remove as needed separated by commas.
63+
// "SCAN": For mods scan.
64+
// "REGISTRIES": For firing of registry events.
65+
// "REGISTRYDUMP": For getting the contents of all registries.
66+
systemProperty 'forge.logging.markers', 'REGISTRIES'
67+
68+
// Recommended logging level for the console
69+
// You can set various levels here.
70+
// Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
71+
logLevel = org.slf4j.event.Level.INFO
72+
}
73+
}
74+
}
75+
76+
// IDEA no longer automatically downloads sources/javadoc jars for dependencies, so we need to explicitly enable the behavior.
77+
idea {
78+
module {
79+
downloadSources = true
80+
downloadJavadoc = true
81+
}
82+
}

gradle/scripts/repositories.gradle

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
repositories {
2+
mavenLocal()
3+
mavenCentral()
4+
5+
maven { // GTCEu
6+
name = 'GTCEu Maven'
7+
url = 'https://maven.gtceu.com'
8+
content {
9+
includeGroup 'com.gregtechceu.gtceu'
10+
}
11+
}
12+
13+
maven { // Curseforge
14+
url = "https://cursemaven.com/"
15+
content {
16+
includeGroup "curse.maven"
17+
}
18+
}
19+
20+
maven { // Modrinth
21+
url = "https://api.modrinth.com/maven"
22+
content {
23+
includeGroup "maven.modrinth"
24+
}
25+
}
26+
27+
maven { // LDLib
28+
name = 'FirstDarkDev'
29+
url = 'https://maven.firstdarkdev.xyz/snapshots/'
30+
}
31+
32+
maven { // EMI
33+
name = "TerraformersMC"
34+
url = "https://maven.terraformersmc.com/"
35+
}
36+
}

gradle/scripts/resources.gradle

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
String getConfig(String key) {
2+
return project.properties.get(key)
3+
}
4+
5+
def mod_id = getConfig("mod_id")
6+
def version = getConfig("version")
7+
def mod_license = getConfig("mod_license")
8+
def mod_name = getConfig("mod_name")
9+
def mod_description = getConfig("mod_description")
10+
def mod_url = getConfig("mod_url")
11+
def mod_issue_tracker = getConfig("mod_issue_tracker")
12+
13+
// Create run-folders for non-client configs to avoid pollution of dev envs
14+
tasks.matching { it.name.startsWith('prepare') }.configureEach {
15+
doFirst {
16+
mkdir('run')
17+
mkdir('run/server')
18+
mkdir('run/data')
19+
}
20+
}
21+
22+
// This block of code expands all declared replace properties in the specified resource targets.
23+
// A missing property will result in an error. Properties are expanded using ${} Groovy notation.
24+
var generateModMetadata = tasks.register("generateModMetadata", ProcessResources) {
25+
var forgeVers = libs.versions.forge.get().split("\\.")[0]
26+
var replaceProperties = [
27+
version : mod_version,
28+
mod_id : mod_id,
29+
minecraft_version : libs.versions.minecraft.get(),
30+
loader_version : forgeVers,
31+
forge_version : forgeVers, // only specify major version of forge
32+
ldlib_version : forge.versions.ldlib.get(),
33+
gtceu_version : forge.versions.gtceu.get(),
34+
mod_license : mod_license,
35+
mod_name : mod_name,
36+
mod_authors : mod_authors,
37+
mod_description : mod_description,
38+
mod_url : mod_url,
39+
mod_issue_tracker : mod_issue_tracker
40+
]
41+
inputs.properties replaceProperties
42+
expand replaceProperties
43+
from "src/main/templates"
44+
into "build/generated/sources/modMetadata"
45+
}
46+
47+
// Include the output of "generateModMetadata" as an input directory for the build
48+
// this works with both building through Gradle and the IDE.
49+
sourceSets.main.resources.srcDir generateModMetadata
50+
// To avoid having to run "generateModMetadata" manually, make it run on every project reload
51+
legacyForge.ideSyncTask generateModMetadata

0 commit comments

Comments
 (0)