diff --git a/.gitattributes b/.gitattributes index 2125666..08a8c1d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,3 @@ +/gradlew text eol=lf +*.bat text eol=crlf * text=auto \ No newline at end of file diff --git a/.gitignore b/.gitignore index 29c5304..3fc9d80 100644 --- a/.gitignore +++ b/.gitignore @@ -41,5 +41,5 @@ replay_*.log # custom -src/main/generated/.cache +src/main/generated .local/ diff --git a/README.md b/README.md index 31b3380..af91ce0 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,19 @@ # Joy + Joy is a work in progress mod for Minecraft: Java Edition made by Pridecraft Studios. + ## What's in it? -Currently, nothing, but we plan to add everything from PridePack, as their own things to go *with* the vanilla game instead of replacing them, along wtih a few exclusive features. + +Currently, nothing, but we plan to add everything from PridePack, as their own things to go *with* the vanilla game +instead of replacing them, along wtih a few exclusive features. + ## How do I get it? -You either compile it from source, like you would compile any other Fabric/Quilt mod, or you check on the releases tab for pre-releases. + +You either compile it from source, like you would compile any other Fabric/Quilt mod, or you check on the releases tab +for pre-releases. + ## When are you making this? + Sometime between ``December 31, 1969 9:00 PM`` and ``November 16, 5138 6:46 AM`` ## Licensing diff --git a/build.gradle.kts b/build.gradle.kts index 5b9a3e4..e5789f2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,88 +1,22 @@ plugins { java - id("fabric-loom") version "1.7-SNAPSHOT" + alias(libs.plugins.loom) + alias(libs.plugins.minotaur) } -class ModInfo { - val id = property("mod.id").toString() - val group = property("mod.group").toString() - val version = property("mod.version").toString() -} - -class Dependencies { - val minecraft = property("deps.minecraft").toString() - val loader = property("deps.loader").toString() - val yarn = property("deps.yarn").toString() - - val fabricApi = property("deps.fabricapi").toString() - val mavApi = property("deps.mavapi").toString() - val midnightLib = property("deps.midnightlib").toString() - val badgesLib = property("deps.badgeslib").toString() -} - -val mod = ModInfo() -val deps = Dependencies() - -version = mod.version -group = mod.group - -base.archivesName = "${mod.id}-${mod.version}" +val id: String by project loom { splitEnvironmentSourceSets() - mods.create(mod.id) { - sourceSet(sourceSets.getByName("main")) - sourceSet(sourceSets.getByName("client")) - } -} - -repositories { - mavenCentral() - maven("https://maven.terraformersmc.com/") - maven("https://api.modrinth.com/maven") - maven("https://maven.bawnorton.com/releases") } fabricApi { - configureDataGeneration() -} - -dependencies { - minecraft("com.mojang:minecraft:${deps.minecraft}") - mappings("net.fabricmc:yarn:${deps.yarn}:v2") - modImplementation("net.fabricmc:fabric-loader:${deps.loader}") - - modImplementation("net.fabricmc.fabric-api:fabric-api:${deps.fabricApi}") - modImplementation("maven.modrinth:mavapi:${deps.mavApi}") - modImplementation("maven.modrinth:midnightlib:${deps.midnightLib}") - - annotationProcessor("com.github.bawnorton.mixinsquared:mixinsquared-fabric:0.2.0") - include("com.github.bawnorton.mixinsquared:mixinsquared-fabric:0.2.0") - implementation("com.github.bawnorton.mixinsquared:mixinsquared-fabric:0.2.0") - - include("maven.modrinth:modmenu-badges-lib:${deps.badgesLib}") - modImplementation("maven.modrinth:modmenu-badges-lib:${deps.badgesLib}") -} - -tasks.processResources { - inputs.property("id", mod.id) - inputs.property("version", mod.version) - inputs.property("loader_version", deps.loader) - inputs.property("minecraft_version", deps.minecraft) - - val map = mapOf( - "id" to mod.id, - "version" to mod.version, - "loader_version" to deps.loader, - "minecraft_version" to deps.minecraft - ) - - filesMatching("fabric.mod.json") { expand(map) } -} - -tasks.withType { - options.encoding = "UTF-8" - options.release = 21 + configureDataGeneration { + createSourceSet = true + strictValidation = true + modId = id + client = true + } } java { @@ -92,6 +26,62 @@ java { targetCompatibility = JavaVersion.VERSION_21 } -tasks.withType { - from("LICENSE") { rename { "${it}_${project.base.archivesName.get()}" } } -} \ No newline at end of file +repositories { + mavenCentral() + maven("https://maven.neoforged.net/releases") { name = "Neoforged" } + maven("https://files.minecraftforge.net/maven/") { name = "Forge" } + maven("https://maven.quiltmc.org/repository/release") { name = "Quilt" } + maven("https://api.modrinth.com/maven") { name = "Modrinth" } + maven("https://maven.terraformersmc.com") { name = "TerraformersMC" } + maven("https://maven.ladysnake.org/releases") { name = "Ladysnake Libs" } + maven("https://maven.theillusivec4.top/") { name = "TheIllusiveC4" } + maven("https://maven.bawnorton.com/releases") { name = "Bawnorton" } +} + +dependencies { + minecraft(libs.minecraft) + mappings(variantOf(libs.yarn) { classifier("v2") }) + modImplementation(libs.bundles.fabric) + + annotationProcessor(libs.mixin.squared) + + include(libs.bundles.fabric.bundle) + modImplementation(libs.bundles.fabric.bundle) + + modRuntimeOnly(libs.bundles.fabric.runtime) +} + +tasks { + processResources { + val map = mapOf( + "id" to id, + "version" to version, + "java" to java.targetCompatibility.majorVersion, + "loader" to libs.versions.fabric.loader.get(), + "minecraftRequired" to libs.versions.minecraft.required.get(), + ) + + inputs.properties(map) + + filesMatching(listOf("fabric.mod.json", "quilt.mod.json", "META-INF/mods.toml")) { + expand(map) + } + + exclude("*/.editorconfig") + } + + withType { + options.encoding = "UTF-8" + options.release = 21 + } + + withType { + from("LICENSE*") { + rename { "${project.name}-${it}" } + } + } + + "sourcesJar" { + dependsOn("runDatagen") + } +} diff --git a/gradle.properties b/gradle.properties index 2901ed1..8cf8978 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,15 +1,8 @@ org.gradle.jvmargs=-Xmx2G org.gradle.parallel=true -mod.version = 1.0.0 -mod.group = gay.pridecraft -mod.id = joy +version = 1.0.0-alpha.1 +group = gay.pridecraft +id = joy -deps.minecraft=1.21 -deps.loader=0.16.5 -deps.yarn=1.21+build.9 - -deps.fabricapi=0.104.0+1.21.1 deps.midnightlib=1.5.7-fabric -deps.mavapi=1.2.1 -deps.badgeslib=2023.6.1 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index a4b76b9..9bbc975 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index df97d72..37f853b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index f5feea6..faf9300 100755 --- a/gradlew +++ b/gradlew @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -206,7 +205,7 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. diff --git a/libs.versions.toml b/libs.versions.toml new file mode 100644 index 0000000..401f45e --- /dev/null +++ b/libs.versions.toml @@ -0,0 +1,94 @@ +[versions] +# Minecraft +minecraft-version = "1.21.1" +minecraft-required = "1.21.1" +minecraft-forge-compatible = "1.21.1" +minecraft-fabric-compatible = "1.21.1" +minecraft-neoforge-compatible = "1.21.1" + +yarn = "1.21.1+build.3" +quilt-mappings = "1.21.1+build.9" + +# Fabric +fabric-loader = "0.16.+" +fabric-api = "0.115.0+1.21.1" + +# Forge +forge-loader = "1.21.1-52.1.0" + +# Neoforged +neoforge-loader = "21.1.121" + +# Mods +trinkets = "3.10.0" +curios = "5.9.1+1.20.1" +emi = "1.1.10+1.21" +mavapi = "1.2.1" + +modmenu = "11.0.3" +modmenu-badges = "2023.6.1" + +midnight-fabric = "1.6.9+1.21-fabric" +midnight-neoforge = "1.6.9+1.21-neoforge" + +# Libraries +annotations = "23.+" +mixin = "0.15.0+mixin.0.8.7" +mixin-squared = "0.2.0" + +testng = "7.5.1" + +# Plugins +loom = "1.+" +minotaur = "2.+" + +[libraries] +minecraft = { module = "com.mojang:minecraft", version.ref = "minecraft-version" } +yarn = { module = "net.fabricmc:yarn", version.ref = "yarn" } +quilt-mappings = { module = "org.quiltmc:quilt-mappings", version.ref = "quilt-mappings" } + +fabric-loader = { module = "net.fabricmc:fabric-loader", version.ref = "fabric-loader" } +fabric-api = { module = "net.fabricmc.fabric-api:fabric-api", version.ref = "fabric-api" } + +forge-loader = { module = "net.minecraftforge:forge", version.ref = "forge-loader" } +neoforge-loader = { module = "net.neoforged:neoforge", version.ref = "neoforge-loader" } + +trinkets = { module = "dev.emi:trinkets", version.ref = "trinkets" } + +curios = { module = "top.theillusivec4.curios:curios-forge", version.ref = "curios" } + +emi = { module = "dev.emi:emi-xplat-intermediary", version.ref = "emi" } +emi-fabric = { module = "dev.emi:emi-fabric", version.ref = "emi" } +emi-forge = { module = "dev.emi:emi-forge", version.ref = "emi" } +emi-neoforge = { module = "dev.emi:emi-neoforge", version.ref = "emi" } + +mavapi = { module = "maven.modrinth:mavapi", version.ref = "mavapi"} + +modmenu = { module = "maven.modrinth:modmenu", version.ref = "modmenu" } +modmenu-badges = { module = "maven.modrinth:modmenu-badges-lib", version.ref = "modmenu-badges" } + +midnight-fabric = { module = "maven.modrinth:midnightlib", version.ref = "midnight-fabric" } +midnight-neoforge = { module = "maven.modrinth:midnightlib", version.ref = "midnight-neoforge" } + +annotations = { module = "org.jetbrains:annotations", version.ref = "annotations" } +mixin = { module = "net.fabricmc:sponge-mixin", version.ref = "mixin" } +mixin-squared = { module = "com.github.bawnorton.mixinsquared:mixinsquared-fabric", version.ref = "mixin-squared" } + +testng = { module = "org.testng:testng", version.ref = "testng" } + +[bundles] +fabric = ["fabric-loader", "fabric-api", "trinkets", "mavapi", "midnight-fabric"] +fabric-bundle = ["mixin-squared", "modmenu-badges"] +fabric-runtime = ["emi-fabric", "modmenu"] + +forge = ["curios"] +forge-runtime = [] + +neoforge = [] +neoforge-runtime = ["emi-neoforge"] + +compile-only = ["annotations"] + +[plugins] +loom = { id = "dev.architectury.loom", version.ref = "loom" } +minotaur = { id = "com.modrinth.minotaur", version.ref = "minotaur" } diff --git a/settings.gradle.kts b/settings.gradle.kts index f5f3c1d..a56e1cc 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,7 +1,20 @@ +dependencyResolutionManagement { + versionCatalogs { + create("libs") { + from(files("libs.versions.toml")) + } + } +} + pluginManagement { repositories { - maven("https://maven.fabricmc.net/") + maven("https://maven.fabricmc.net/") { name = "Fabric" } + maven("https://maven.architectury.dev/") { name = "Architectury" } + maven("https://maven.neoforged.net/releases") { name = "Neoforged" } + maven("https://files.minecraftforge.net/maven/") { name = "Forge" } mavenCentral() gradlePluginPortal() } -} \ No newline at end of file +} + +rootProject.name = "joy" \ No newline at end of file diff --git a/src/datagen/java/gay/pridecraft/joy/JoyData.java b/src/datagen/java/gay/pridecraft/joy/JoyData.java new file mode 100644 index 0000000..f593e3f --- /dev/null +++ b/src/datagen/java/gay/pridecraft/joy/JoyData.java @@ -0,0 +1,27 @@ +package gay.pridecraft.joy; + +import com.mojang.logging.LogUtils; +import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; +import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; +import net.minecraft.Bootstrap; +import net.minecraft.SharedConstants; +import org.slf4j.Logger; + +/** + * @author Ampflower + * @since 1.0.0 + **/ +public class JoyData implements DataGeneratorEntrypoint { + private static final Logger logger = LogUtils.getLogger(); + + @Override + public void onInitializeDataGenerator(final FabricDataGenerator fabricDataGenerator) { + SharedConstants.isDevelopment = true; + + final var pack = fabricDataGenerator.createPack(); + + for (final var translation : Bootstrap.getMissingTranslations()) { + logger.warn("Missing translation: {}", translation); + } + } +} diff --git a/src/datagen/resources/fabric.mod.json b/src/datagen/resources/fabric.mod.json new file mode 100644 index 0000000..5bac45c --- /dev/null +++ b/src/datagen/resources/fabric.mod.json @@ -0,0 +1,20 @@ +{ + "schemaVersion": 1, + "id": "${id}", + "name": "Joy Datagen", + "version": "${version}", + "entrypoints": { + "main": [ + "gay.pridecraft.joy.Joy" + ], + "client": [ + "gay.pridecraft.joy.JoyClient" + ], + "fabric-datagen": [ + "gay.pridecraft.joy.JoyData" + ] + }, + "mixins": [ + "joy-data.mixin.json" + ] +} diff --git a/src/datagen/resources/joy-data.mixin.json b/src/datagen/resources/joy-data.mixin.json new file mode 100644 index 0000000..59f70ac --- /dev/null +++ b/src/datagen/resources/joy-data.mixin.json @@ -0,0 +1,15 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "gay.pridecraft.joy.data.mixin", + "refmap": "joy.refmap.json", + "compatibilityLevel": "JAVA_21", + "mixins": [ + ], + "injectors": { + "defaultRequire": 1 + }, + "overwrites": { + "conformVisibility": true + } +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index d5b82d3..bf99de7 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -50,11 +50,11 @@ } ], "depends": { - "fabricloader": ">=${loader_version}", - "minecraft": "~${minecraft_version}", - "java": ">=21", + "fabricloader": "*", + "minecraft": "${minecraftRequired}", + "java": "${java}", "fabric-api": "*", - "midnightlib": ">=1.5.3-fabric", - "mavapi": ">=1.2.1" + "midnightlib": "*", + "mavapi": "*" } } diff --git a/src/main/resources/joy.mixins.json b/src/main/resources/joy.mixins.json index 9372a79..6bc1eb1 100644 --- a/src/main/resources/joy.mixins.json +++ b/src/main/resources/joy.mixins.json @@ -10,5 +10,8 @@ ], "injectors": { "defaultRequire": 1 + }, + "overwrites": { + "conformVisibility": true } }