Compare commits

...
Author SHA1 Message Date
apion 263bccca4b idk whats up here but I wanna swap off this branch so 2025-02-07 17:49:10 -05:00
apion 1d94adface Fabric now boots 2025-01-26 03:02:57 -05:00
apion c741ddbc2e Comments 2025-01-25 04:23:40 -05:00
apion 8cad44ffb1 NEOFORGE IS BOOTING INTO A WORLD!!! 2025-01-25 04:05:34 -05:00
apion dec0376d11 More MDG testing 2025-01-18 15:46:50 -05:00
apion 007b2a49f4 More ModDevGradle porting 2025-01-18 01:19:26 -05:00
apion 082683723d Initial moddevgradle port 2025-01-17 21:31:25 -05:00
44 changed files with 1075 additions and 339 deletions
+27
View File
@@ -0,0 +1,27 @@
plugins {
id("java-gradle-plugin")
kotlin("jvm") version "2.1.0"
}
repositories {
mavenCentral()
gradlePluginPortal()
maven("https://maven.architectury.dev/")
maven("https://maven.fabricmc.net/")
}
dependencies {
implementation("net.neoforged:moddev-gradle:2.0.75")
implementation("dev.architectury:at:1.0.1")
implementation("net.fabricmc:access-widener:2.1.0")
}
gradlePlugin {
plugins {
create("cobblemongradle") {
id = "com.cobblemon.gradle"
implementationClass = "com.cobblemon.gradle.CobblemonGradle"
version = "1.0.0"
}
}
}
+7
View File
@@ -0,0 +1,7 @@
dependencyResolutionManagement {
versionCatalogs {
create("libs") {
from(files("../gradle/libs.versions.toml"))
}
}
}
@@ -0,0 +1,85 @@
package com.cobblemon.gradle
import com.cobblemon.gradle.extension.CobblemonGradleExtension
import com.cobblemon.gradle.extension.tasks.ConvertAccessWidenersTask
import com.cobblemon.gradle.extension.tasks.UnzipAccessWidenersTask
import net.neoforged.nfrtgradle.CreateMinecraftArtifacts
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.attributes.LibraryElements
import org.gradle.language.jvm.tasks.ProcessResources
class CobblemonGradle : Plugin<Project> {
override fun apply(project: Project) {
val cobblemonExtension = project.extensions.create(
CobblemonGradleExtension.EXTENSION_NAME,
CobblemonGradleExtension::class.java
)
//This exists because all of
// - com.cobblemon:mod
// - com.cobblemon:mod-resources
// - com.cobblemon:accesswidener
//technically point to the same dependency (the :common project). To pick the proper artifact from that project
//we set attributes in that project and check for them here.
val accessWideners = project.configurations.register("accessWidener") { configuration ->
configuration.isCanBeConsumed = false
configuration.isCanBeResolved = true
configuration.isCanBeDeclared = true
configuration.attributes {
it.attribute(
LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE,
project.objects.named(LibraryElements::class.java, LibraryElements.OBJECTS)
)
}
}
val includeRootResources = project.configurations.register("includeRootResources") { configuration ->
configuration.isCanBeConsumed = false
configuration.isCanBeResolved = true
configuration.isCanBeDeclared = true
configuration.attributes {
it.attribute(
LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE,
project.objects.named(LibraryElements::class.java, LibraryElements.RESOURCES)
)
}
}
val unzipAwTask = project.tasks.register("unzipAccessWideners", UnzipAccessWidenersTask::class.java) {
it.accessWidenerZips = accessWideners.get()
}
val convertAwTask = project.tasks.register(ConvertAccessWidenersTask.NAME, ConvertAccessWidenersTask::class.java) {
it.enabled = cobblemonExtension.convertAccessWideners
it.dependsOn(unzipAwTask)
it.accessWideners = project.files(unzipAwTask).plus(project.files(cobblemonExtension.additionalAccessWideners))
}
//Add root resources and access wideners to output jar
project.tasks.named("processResources", ProcessResources::class.java) { task ->
task.dependsOn(includeRootResources)
if (cobblemonExtension.convertAccessWideners) {
task.dependsOn(convertAwTask)
task.from(convertAwTask)
}
else {
task.dependsOn(unzipAwTask)
task.from(unzipAwTask)
}
task.doLast {
project.copy {
it.from(project.provider {
includeRootResources.get().resolve().map { project.zipTree(it) }
})
it.into(task.destinationDir)
}
}
}
project.tasks.withType(CreateMinecraftArtifacts::class.java) {
it.dependsOn(convertAwTask)
it.accessTransformers.from(convertAwTask)
}
}
}
@@ -0,0 +1,12 @@
package com.cobblemon.gradle.extension
import org.gradle.api.file.FileCollection
abstract class CobblemonGradleExtension {
var additionalAccessWideners: FileCollection? = null
var convertAccessWideners = true
companion object {
const val EXTENSION_NAME = "cobblemon"
}
}
@@ -0,0 +1,82 @@
package com.cobblemon.gradle.extension.tasks
import dev.architectury.at.AccessChange
import dev.architectury.at.AccessTransform
import dev.architectury.at.AccessTransformSet
import dev.architectury.at.ModifierChange
import dev.architectury.at.io.AccessTransformFormats
import net.fabricmc.accesswidener.AccessWidenerReader
import net.fabricmc.accesswidener.AccessWidenerVisitor
import org.cadixdev.bombe.type.signature.MethodSignature
import org.gradle.api.DefaultTask
import org.gradle.api.file.FileCollection
import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.OutputFiles
import org.gradle.api.tasks.TaskAction
import java.io.Writer
import java.nio.file.Files
abstract class ConvertAccessWidenersTask : DefaultTask() {
abstract var accessWideners: FileCollection
@InputFiles get
@Internal
val accessTransformerDir = project.layout.buildDirectory.dir("access-transformers")
@OutputFiles
val accessTransformers = project.files ({
accessWideners.files.map {
accessTransformerDir.get().file(it.name.replace("accesswidener", "accesstransformer.cfg"))
}
})
@TaskAction
fun convertAccessWideners() {
accessWideners.files.forEach { file ->
val awFile = Files.newBufferedReader(file.toPath())
val result = AccessTransformSet.create();
AccessWidenerReader(object : AccessWidenerVisitor {
override fun visitClass(name: String, access: AccessWidenerReader.AccessType, transitive: Boolean) {
result.getOrCreateClass(name).merge(toAt(access));
}
override fun visitMethod(owner: String, name: String, descriptor: String, access: AccessWidenerReader.AccessType, transitive: Boolean) {
result.getOrCreateClass(owner).mergeMethod(MethodSignature.of(name, descriptor), toAt(access));
}
override fun visitField(owner: String, name: String, descriptor: String, access: AccessWidenerReader.AccessType, transitive: Boolean) {
result.getOrCreateClass(owner).mergeField(name, toAt(access));
}
}).read(awFile)
val outputFile = accessTransformerDir.get().file(
file.name.replace("accesswidener", "accesstransformer.cfg")
)
var outputWriter: Writer? = null
try {
outputWriter = outputFile.asFile.writer()
AccessTransformFormats.FML.write(outputWriter, result)
}
finally {
outputWriter?.flush()
outputWriter?.close()
}
}
}
private fun toAt(access: AccessWidenerReader.AccessType): AccessTransform {
return when (access) {
AccessWidenerReader.AccessType.ACCESSIBLE -> AccessTransform.of(AccessChange.PUBLIC)
AccessWidenerReader.AccessType.EXTENDABLE, AccessWidenerReader.AccessType.MUTABLE -> AccessTransform.of(
AccessChange.PUBLIC,
ModifierChange.REMOVE
)
}
}
companion object {
const val NAME = "convertAccessWideners"
}
}
@@ -0,0 +1,33 @@
package com.cobblemon.gradle.extension.tasks
import org.gradle.api.DefaultTask
import org.gradle.api.Task
import org.gradle.api.file.FileCollection
import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.OutputFiles
import org.gradle.api.tasks.TaskAction
abstract class UnzipAccessWidenersTask : DefaultTask() {
abstract var accessWidenerZips: FileCollection
@InputFiles get
@OutputFiles
val outputFiles = project.provider {
project.files(accessWidenerZips.flatMap { zip ->
project.zipTree(zip).files.map { OUTPUT_DIR.get().file(it.name) }
})
}
@Internal
val OUTPUT_DIR = project.layout.buildDirectory.dir("cobblemon-working/access-wideners")
@TaskAction
fun run() {
project.copy {
it.from(accessWidenerZips.map(project::zipTree))
it.into(OUTPUT_DIR)
}
}
}
+3 -1
View File
@@ -1,12 +1,14 @@
plugins { plugins {
id("cobblemon.root-conventions") //id("cobblemon.root-conventions")
id ("net.nemerosa.versioning") version "3.1.0" id ("net.nemerosa.versioning") version "3.1.0"
} }
version = "${project.property("mod_version")}+${project.property("mc_version")}" version = "${project.property("mod_version")}+${project.property("mc_version")}"
val isSnapshot = project.property("snapshot")?.equals("true") ?: false val isSnapshot = project.property("snapshot")?.equals("true") ?: false
/*
if (isSnapshot) { if (isSnapshot) {
val fixedBranchName = versioning.info.branch.substringAfter("/") val fixedBranchName = versioning.info.branch.substringAfter("/")
version = "$version-${fixedBranchName}-${versioning.info.build}" version = "$version-${fixedBranchName}-${versioning.info.build}"
} }
*/
+90 -54
View File
@@ -1,68 +1,102 @@
import java.time.OffsetDateTime
import java.time.ZoneOffset
import java.time.format.DateTimeFormatter
import utilities.isSnapshot
import utilities.version
/*
*
* * Copyright (C) 2023 Cobblemon Contributors
* *
* * This Source Code Form is subject to the terms of the Mozilla Public
* * License, v. 2.0. If a copy of the MPL was not distributed with this
* * file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
*/
plugins { plugins {
id("cobblemon.base-conventions") kotlin("jvm") version "2.1.0"
id("cobblemon.publish-conventions") id ("net.neoforged.moddev") version "2.0.75"
id("net.kyori.blossom") version "2.1.0"
id("net.kyori.blossom") id("com.github.johnrengelman.shadow") version "8.1.1"
id("org.jetbrains.gradle.plugin.idea-ext") id("com.cobblemon.gradle")
id("net.nemerosa.versioning") version "3.1.0"
} }
architectury { cobblemon {
common("neoforge", "fabric") additionalAccessWideners = files(sourceSets.main.get().resources).filter { it.extension == "accesswidener" }
}
val rootResources = configurations.create("rootResources") {
isCanBeConsumed = true
isCanBeResolved = false
attributes {
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.RESOURCES))
}
}
val accessWidenerExport = configurations.create("accessWidenerExport") {
isCanBeConsumed = true
isCanBeResolved = false
attributes {
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.OBJECTS))
}
}
tasks.processResources {
exclude("*.accesswidener")
}
tasks.create<Zip>("zipResources") {
dependsOn("processResources")
from(tasks.processResources.get().destinationDir)
this.archiveBaseName = "mod-resources"
}
tasks.create<Zip>("zipAccessWideners") {
from(sourceSets.main.get().resources)
include("*.accesswidener")
this.archiveBaseName = "mod-accesswideners"
}
tasks.jar {
archiveBaseName = "mod"
manifest {
attributes(mapOf("FMLModType" to "GAMELIBRARY"))
}
exclude {
it.file in tasks.processResources.get().outputs.files
}
}
tasks.assemble {
dependsOn(tasks.named("zipResources"))
dependsOn(tasks.named("zipAccessWideners"))
}
artifacts {
add("rootResources", tasks.getByName<Zip>("zipResources"))
add("accessWidenerExport", tasks.getByName("zipAccessWideners"))
}
buildscript {
repositories {
mavenCentral()
gradlePluginPortal()
maven("https://maven.architectury.dev/")
maven("https://maven.fabricmc.net/")
}
} }
repositories { repositories {
maven(url = "${rootProject.projectDir}/deps") mavenCentral()
maven(url = "https://api.modrinth.com/maven") maven("https://maven.fabricmc.net/")
maven(url = "https://maven.neoforged.net/releases") maven("https://maven.blamejared.com/")
mavenLocal() maven("https://api.modrinth.com/maven")
maven(url = "../deps")
} }
dependencies { dependencies {
implementation(libs.bundles.kotlin) compileOnly(libs.bundles.mongo)
modImplementation(libs.fabric.loader) compileOnly(libs.bundles.kotlin)
modApi(libs.molang) compileOnly(libs.molang)
compileOnly(libs.graal)
// Integrations compileOnly(libs.jei.api)
compileOnlyApi(libs.jei.api) compileOnly(libs.bundles.fabric.integrations.compileOnly) {
modCompileOnly(libs.bundles.fabric.integrations.compileOnly) {
isTransitive = false isTransitive = false
} }
// Flywheel has no common dep so just pick one and don't use any platform specific code in common compileOnly("net.fabricmc:sponge-mixin:0.15.5+mixin.0.8.7")
// modCompileOnly(libs.flywheelFabric) compileOnly("io.github.llamalad7:mixinextras-fabric:0.4.1")
// Showdown
modCompileOnly(libs.graal)
// Data Storage
modCompileOnly(libs.bundles.mongo)
// Unit Testing
testImplementation(libs.bundles.unitTesting) testImplementation(libs.bundles.unitTesting)
} }
tasks.withType<Test> { neoForge {
useJUnitPlatform() neoFormVersion = "1.21.1-20240808.144430"
testLogging { interfaceInjectionData.from("src/main/resources/interfaces.json")
setEvents(listOf("failed")) validateAccessTransformers = true
setExceptionFormat("full")
}
} }
sourceSets { sourceSets {
@@ -72,7 +106,7 @@ sourceSets {
fun generateLicenseHeader() : String { fun generateLicenseHeader() : String {
val builder = StringBuilder() val builder = StringBuilder()
builder.append("/*\n") builder.append("/*\n")
rootProject.file("HEADER").forEachLine { project.projectDir.parentFile.resolve("HEADER").forEachLine {
if(it.isEmpty()) { if(it.isEmpty()) {
builder.append(" *").append("\n") builder.append(" *").append("\n")
} else { } else {
@@ -85,12 +119,14 @@ sourceSets {
property("license", generateLicenseHeader()) property("license", generateLicenseHeader())
property("modid", "cobblemon") property("modid", "cobblemon")
property("version", project.version()) property("version", project.version as String)
property("isSnapshot", if(rootProject.isSnapshot()) "true" else "false") property("isSnapshot", "true")
/*
property("gitCommit", versioning.info.commit) property("gitCommit", versioning.info.commit)
property("branch", versioning.info.branch) property("branch", versioning.info.branch)
System.getProperty("buildNumber")?.let { property("buildNumber", it) } System.getProperty("buildNumber")?.let { property("buildNumber", it) }
property("timestamp", OffsetDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ofPattern("MM/dd/yyyy hh:mm:ss")) + " UTC") property("timestamp", OffsetDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ofPattern("MM/dd/yyyy hh:mm:ss")) + " UTC")
*/
} }
} }
} }
+97
View File
@@ -0,0 +1,97 @@
import java.time.OffsetDateTime
import java.time.ZoneOffset
import java.time.format.DateTimeFormatter
import utilities.isSnapshot
import utilities.version
/*
*
* * Copyright (C) 2023 Cobblemon Contributors
* *
* * This Source Code Form is subject to the terms of the Mozilla Public
* * License, v. 2.0. If a copy of the MPL was not distributed with this
* * file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
*/
plugins {
id("cobblemon.base-conventions")
id("cobblemon.publish-conventions")
id("net.kyori.blossom")
id("org.jetbrains.gradle.plugin.idea-ext")
id("net.nemerosa.versioning") version "3.1.0"
}
architectury {
common("neoforge", "fabric")
}
repositories {
maven(url = "${rootProject.projectDir}/deps")
maven(url = "https://api.modrinth.com/maven")
maven(url = "https://maven.neoforged.net/releases")
mavenLocal()
}
dependencies {
implementation(libs.bundles.kotlin)
modImplementation(libs.fabric.loader)
modApi(libs.molang)
// Integrations
compileOnlyApi(libs.jei.api)
modCompileOnly(libs.bundles.fabric.integrations.compileOnly) {
isTransitive = false
}
// Flywheel has no common dep so just pick one and don't use any platform specific code in common
// modCompileOnly(libs.flywheelFabric)
// Showdown
modCompileOnly(libs.graal)
// Data Storage
modCompileOnly(libs.bundles.mongo)
// Unit Testing
testImplementation(libs.bundles.unitTesting)
}
tasks.withType<Test> {
useJUnitPlatform()
testLogging {
setEvents(listOf("failed"))
setExceptionFormat("full")
}
}
sourceSets {
main {
blossom {
kotlinSources {
fun generateLicenseHeader() : String {
val builder = StringBuilder()
builder.append("/*\n")
rootProject.file("HEADER").forEachLine {
if(it.isEmpty()) {
builder.append(" *").append("\n")
} else {
builder.append(" * ").append(it).append("\n")
}
}
return builder.append(" */").append("\n").toString()
}
property("license", generateLicenseHeader())
property("modid", "cobblemon")
property("version", project.version())
property("isSnapshot", if(rootProject.isSnapshot()) "true" else "false")
property("gitCommit", versioning.info.commit)
property("branch", versioning.info.branch)
System.getProperty("buildNumber")?.let { property("buildNumber", it) }
property("timestamp", OffsetDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ofPattern("MM/dd/yyyy hh:mm:ss")) + " UTC")
}
}
}
}
+95
View File
@@ -0,0 +1,95 @@
[versions]
# Kotlin
kotlin = "2.0.0"
# Plugins
licenser = "0.6.1"
shadow = "8.1.1"
blossom = "2.1.0"
idea-ext = "1.1.7"
# Loom
loom = "1.7-SNAPSHOT"
architectury-plugin = "3.4-SNAPSHOT"
# Common
molang = "1.1.18"
graal = "22.3.0"
icu4j = "71.1"
jei-api = "19.8.2.99"
# Fabric
fabric-loader = "0.16.5"
fabric-api = "0.104.0+1.21.1"
fabric-kotlin = "1.11.0+kotlin.2.0.0"
fabric-permissions-api = "0.2-SNAPSHOT"
lambDynamicLights = "3.0.1+1.21.1"
debugutils-fabric = "1.21-1.0.6-fabric"
# NeoForge
neoforge = "21.1.66"
neo-kotlin-for-forge = "5.5.0"
debugutils-forge = "1.21-1.0.6-neoforge"
# Data Storage
mongo = "4.10.2"
# Testing
junit = "5.9.0"
mockito = "5.2.0"
mockk = "1.12.1"
classgraph = "4.8.153"
[libraries]
# General Buildscript Plugins
kotlin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" }
loom = { group = "dev.architectury", name = "architectury-loom", version.ref = "loom" }
architectury = { group = "architectury-plugin", name = "architectury-plugin.gradle.plugin", version.ref = "architectury-plugin" }
shadow = { group = "com.github.johnrengelman", name = "shadow", version.ref = "shadow" }
blossom = { group = "net.kyori", name = "blossom", version.ref = "blossom" }
ideaExt = { group = "org.jetbrains.gradle.plugin.idea-ext", name = "org.jetbrains.gradle.plugin.idea-ext.gradle.plugin", version.ref = "idea-ext"}
licenser = { group = "gradle.plugin.org.cadixdev.gradle", name = "licenser", version.ref = "licenser" }
# Kotlin
kotlin-stdlib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib-jdk8", version.ref = "kotlin" }
kotlin-reflect = { group = "org.jetbrains.kotlin", name = "kotlin-reflect", version.ref = "kotlin" }
# Common
jei-api = { group = "mezz.jei", name = "jei-1.21-common-api", version.ref = "jei-api"}
molang = { group = "local.com.bedrockk", name = "molang", version.ref = "molang" }
graal = { group = "org.graalvm.js", name = "js", version.ref = "graal" }
icu4j = { group = "com.ibm.icu", name = "icu4j", version.ref = "icu4j" }
# Fabric
fabric-loader = { group = "net.fabricmc", name = "fabric-loader", version.ref = "fabric-loader" }
fabric-api = { group = "net.fabricmc.fabric-api", name = "fabric-api", version.ref = "fabric-api" }
fabric-kotlin = { group = "net.fabricmc", name = "fabric-language-kotlin", version.ref = "fabric-kotlin" }
fabric-permissions = { group = "me.lucko", name = "fabric-permissions-api", version.ref = "fabric-permissions-api" }
adorn-fabric = { group = "maven.modrinth", name = "adorn", version = "6.0.0-neoforge"}
lambDynamicLights = { group = "maven.modrinth", name = "lambdynamiclights", version.ref = "lambDynamicLights"}
jei-api-fabric = { group = "mezz.jei", name = "jei-1.21-fabric-api", version.ref = "jei-api" }
jei-fabric = { group = "mezz.jei", name = "jei-1.21-fabric", version.ref = "jei-api"}
fabric-debugutils = { group = "maven.modrinth", name = "debugutils", version.ref = "debugutils-fabric"}
# NeoForge
neoforge = { group = "net.neoforged", name = "neoforge", version.ref = "neoforge" }
neo-kotlin-forge = { group = "thedarkcolour", name = "kotlinforforge-neoforge", version.ref = "neo-kotlin-for-forge" }
neoforge-debugutils = { group = "maven.modrinth", name = "debugutils", version.ref = "debugutils-forge"}
# Data Storage
mongo-driver-core = { group = "org.mongodb", name = "mongodb-driver-core", version.ref = "mongo" }
mongo-driver-sync = { group = "org.mongodb", name = "mongodb-driver-sync", version.ref = "mongo" }
# Testing
junit = { group = "org.junit.jupiter", name = "junit-jupiter", version.ref = "junit" }
mockito-core = { group = "org.mockito", name = "mockito-core", version.ref = "mockito" }
mock-kotlin = { group = "io.mockk", name = "mockk", version.ref = "mockk" }
classgraph = { group = "io.github.classgraph", name = "classgraph", version.ref = "classgraph" }
[bundles]
kotlin = [ "kotlin-stdlib", "kotlin-reflect" ]
fabric = [ "fabric-kotlin", "fabric-permissions" ]
fabric-integrations-compileOnly = [ "adorn-fabric", "lambDynamicLights", "jei-api-fabric" ]
fabric-integrations-runtimeOnly = [ "jei-fabric" ]
mongo = [ "mongo-driver-core", "mongo-driver-sync" ]
unitTesting = [ "junit", "mockito-core", "mock-kotlin", "classgraph" ]
@@ -53,7 +53,7 @@ class BestSpawnerConfig {
.create() .create()
const val CONFIG_NAME = "best-spawner-config" const val CONFIG_NAME = "best-spawner-config"
const val INTERNAL_PATH = "/data/${Cobblemon.MODID}/spawning/$CONFIG_NAME.json" const val INTERNAL_PATH = "data/${Cobblemon.MODID}/spawning/$CONFIG_NAME.json"
const val EXTERNAL_PATH = "config/${Cobblemon.MODID}/spawning/$CONFIG_NAME.json" const val EXTERNAL_PATH = "config/${Cobblemon.MODID}/spawning/$CONFIG_NAME.json"
fun load(): BestSpawnerConfig { fun load(): BestSpawnerConfig {
@@ -77,7 +77,7 @@ class BestSpawnerConfig {
} }
private fun loadInternal(): BestSpawnerConfig { private fun loadInternal(): BestSpawnerConfig {
val reader = InputStreamReader(Cobblemon::class.java.getResourceAsStream(INTERNAL_PATH)!!) val reader = InputStreamReader(Cobblemon.javaClass.classLoader.getResourceAsStream(INTERNAL_PATH)!!)
val config = GSON.fromJson(reader, BestSpawnerConfig::class.java) val config = GSON.fromJson(reader, BestSpawnerConfig::class.java)
reader.close() reader.close()
return config return config
@@ -9,7 +9,6 @@
package com.cobblemon.mod.common.battles.dispatch package com.cobblemon.mod.common.battles.dispatch
import com.cobblemon.mod.common.api.battles.model.PokemonBattle import com.cobblemon.mod.common.api.battles.model.PokemonBattle
import org.objectweb.asm.tree.analysis.Interpreter
class InstructionSet { class InstructionSet {
val instructions: MutableList<InterpreterInstruction> = mutableListOf() val instructions: MutableList<InterpreterInstruction> = mutableListOf()
@@ -65,8 +65,8 @@ class GraalShowdownUnbundler {
} }
if (extract) { if (extract) {
FileUtils.copyInternalToExternal("/data/${Cobblemon.MODID}/showdown.zip", showdownZip.toPath()) FileUtils.copyInternalToExternal("data/${Cobblemon.MODID}/showdown.zip", showdownZip.toPath())
FileUtils.copyInternalToExternal("/data/${Cobblemon.MODID}/showdown.json", showdownMetadataFile.toPath()) FileUtils.copyInternalToExternal("data/${Cobblemon.MODID}/showdown.json", showdownMetadataFile.toPath())
FileUtils.unzipFile(showdownZip.toPath(), showdownDir.toPath()) FileUtils.unzipFile(showdownZip.toPath(), showdownDir.toPath())
showdownZip.delete() showdownZip.delete()
} }
@@ -75,7 +75,7 @@ class GraalShowdownUnbundler {
private fun loadShowdownMetadata() : ShowdownMetadata? { private fun loadShowdownMetadata() : ShowdownMetadata? {
try { try {
val inputStream = javaClass.getResourceAsStream("/data/${Cobblemon.MODID}/showdown.json")!! val inputStream = javaClass.classLoader.getResourceAsStream("data/${Cobblemon.MODID}/showdown.json")!!
return gson.fromJson<ShowdownMetadata>(InputStreamReader(inputStream)) return gson.fromJson<ShowdownMetadata>(InputStreamReader(inputStream))
} catch (exception: Exception) { } catch (exception: Exception) {
exception.printStackTrace() exception.printStackTrace()
@@ -9,8 +9,6 @@
package com.cobblemon.mod.common.client.gui.toast package com.cobblemon.mod.common.client.gui.toast
import com.cobblemon.mod.common.net.messages.client.toast.ToastPacket import com.cobblemon.mod.common.net.messages.client.toast.ToastPacket
import net.fabricmc.api.EnvType
import net.fabricmc.api.Environment
import net.minecraft.client.gui.GuiGraphics import net.minecraft.client.gui.GuiGraphics
import net.minecraft.client.gui.components.toasts.Toast import net.minecraft.client.gui.components.toasts.Toast
import net.minecraft.client.gui.components.toasts.ToastComponent import net.minecraft.client.gui.components.toasts.ToastComponent
@@ -21,7 +19,6 @@ import net.minecraft.util.Mth
import java.util.* import java.util.*
import kotlin.math.min import kotlin.math.min
@Environment(EnvType.CLIENT)
class CobblemonToast( class CobblemonToast(
val id: UUID, val id: UUID,
var icon: ItemStack, var icon: ItemStack,
@@ -10,7 +10,6 @@ package com.cobblemon.mod.common.client.render
import com.cobblemon.mod.common.util.math.geometry.getOrigin import com.cobblemon.mod.common.util.math.geometry.getOrigin
import com.cobblemon.mod.common.util.math.geometry.transformPosition import com.cobblemon.mod.common.util.math.geometry.transformPosition
import net.fabricmc.loader.impl.lib.sat4j.core.Vec
import org.joml.Matrix4f import org.joml.Matrix4f
import net.minecraft.world.phys.Vec3 import net.minecraft.world.phys.Vec3
@@ -14,8 +14,6 @@ import com.cobblemon.mod.common.entity.fishing.PokeRodFishingBobberEntity
import com.cobblemon.mod.common.item.interactive.PokerodItem import com.cobblemon.mod.common.item.interactive.PokerodItem
import com.cobblemon.mod.common.util.cobblemonResource import com.cobblemon.mod.common.util.cobblemonResource
import java.awt.Color import java.awt.Color
import net.fabricmc.api.EnvType
import net.fabricmc.api.Environment
import net.minecraft.client.Minecraft import net.minecraft.client.Minecraft
import net.minecraft.client.renderer.texture.OverlayTexture import net.minecraft.client.renderer.texture.OverlayTexture
import net.minecraft.client.renderer.RenderType import net.minecraft.client.renderer.RenderType
@@ -33,7 +31,6 @@ import net.minecraft.world.entity.HumanoidArm
import net.minecraft.world.item.ItemDisplayContext import net.minecraft.world.item.ItemDisplayContext
import org.joml.Quaternionf import org.joml.Quaternionf
@Environment(value = EnvType.CLIENT)
class PokeBobberEntityRenderer(context: EntityRendererProvider.Context?) : EntityRenderer<PokeRodFishingBobberEntity>(context) { class PokeBobberEntityRenderer(context: EntityRendererProvider.Context?) : EntityRenderer<PokeRodFishingBobberEntity>(context) {
override fun render(fishingBobberEntity: PokeRodFishingBobberEntity, elapsedPartialTicks: Float, tickDelta: Float, matrixStack: PoseStack, vertexConsumerProvider: MultiBufferSource, light: Int) { override fun render(fishingBobberEntity: PokeRodFishingBobberEntity, elapsedPartialTicks: Float, tickDelta: Float, matrixStack: PoseStack, vertexConsumerProvider: MultiBufferSource, light: Int) {
@@ -21,7 +21,7 @@ import java.util.zip.ZipInputStream
object FileUtils { object FileUtils {
private fun getResourceStream(internal: String): InputStream { private fun getResourceStream(internal: String): InputStream {
return Cobblemon::class.java.getResourceAsStream(internal) return Cobblemon.javaClass.classLoader.getResourceAsStream(internal)
?: throw Exception("Could not read $internal") ?: throw Exception("Could not read $internal")
} }
@@ -1,6 +0,0 @@
{
"accessWidener": "cobblemon-common.accesswidener",
"injected_interfaces": {
"net/minecraft/class_630": ["com/cobblemon/mod/common/client/render/models/blockbench/pose/Bone"]
}
}
@@ -32,7 +32,7 @@ transitive-accessible field net/minecraft/client/model/geom/builders/CubeDeforma
transitive-accessible field net/minecraft/client/model/geom/builders/CubeDeformation growZ F transitive-accessible field net/minecraft/client/model/geom/builders/CubeDeformation growZ F
transitive-extendable method net/minecraft/world/entity/LivingEntity canBreatheUnderwater ()Z transitive-extendable method net/minecraft/world/entity/LivingEntity canBreatheUnderwater ()Z
transitive-extendable class net/minecraft/world/level/block/grower/TreeGrower transitive-extendable class net/minecraft/world/level/block/grower/TreeGrower
accessible method net/minecraft/world/level/block/state/BlockBehaviour codec ()Lcom/mojang/serialization/MapCodec; #accessible method net/minecraft/world/level/block/state/BlockBehaviour codec ()Lcom/mojang/serialization/MapCodec;
accessible method net/minecraft/network/protocol/game/ClientboundAddEntityPacket <init> (Lnet/minecraft/network/RegistryFriendlyByteBuf;)V accessible method net/minecraft/network/protocol/game/ClientboundAddEntityPacket <init> (Lnet/minecraft/network/RegistryFriendlyByteBuf;)V
transitive-accessible field net/minecraft/world/entity/player/Inventory compartments Ljava/util/List; transitive-accessible field net/minecraft/world/entity/player/Inventory compartments Ljava/util/List;
@@ -68,6 +68,7 @@ transitive-accessible field net/minecraft/client/renderer/RenderStateShard NO_CU
#transitive-accessible field net/minecraft/recipe/BrewingRecipeRegistry ITEM_RECIPES Ljava/util/List; #transitive-accessible field net/minecraft/recipe/BrewingRecipeRegistry ITEM_RECIPES Ljava/util/List;
#transitive-accessible field net/minecraft/recipe/BrewingRecipeRegistry POTION_RECIPES Ljava/util/List; #transitive-accessible field net/minecraft/recipe/BrewingRecipeRegistry POTION_RECIPES Ljava/util/List;
#transitive-accessible field net/minecraft/recipe/BrewingRecipeRegistry POTION_TYPES Ljava/util/List; #transitive-accessible field net/minecraft/recipe/BrewingRecipeRegistry POTION_TYPES Ljava/util/List;
transitive-accessible method net/minecraft/world/item/alchemy/PotionBrewing$Mix <init> (Lnet/minecraft/core/Holder;Lnet/minecraft/world/item/crafting/Ingredient;Lnet/minecraft/core/Holder;)V
transitive-accessible class net/minecraft/world/item/alchemy/PotionBrewing$Mix transitive-accessible class net/minecraft/world/item/alchemy/PotionBrewing$Mix
transitive-accessible class net/minecraft/util/datafix/fixes/ItemStackComponentizationFix$ItemStackData transitive-accessible class net/minecraft/util/datafix/fixes/ItemStackComponentizationFix$ItemStackData
@@ -76,6 +77,7 @@ accessible field net/minecraft/server/network/ServerCommonPacketListenerImpl con
transitive-accessible method net/minecraft/world/level/block/state/properties/WoodType register (Lnet/minecraft/world/level/block/state/properties/WoodType;)Lnet/minecraft/world/level/block/state/properties/WoodType; transitive-accessible method net/minecraft/world/level/block/state/properties/WoodType register (Lnet/minecraft/world/level/block/state/properties/WoodType;)Lnet/minecraft/world/level/block/state/properties/WoodType;
transitive-accessible field com/mojang/blaze3d/systems/RenderSystem shaderLightDirections [Lorg/joml/Vector3f; transitive-accessible field com/mojang/blaze3d/systems/RenderSystem shaderLightDirections [Lorg/joml/Vector3f;
transitive-accessible class net/minecraft/world/inventory/BrewingStandMenu$PotionSlot transitive-accessible class net/minecraft/world/inventory/BrewingStandMenu$PotionSlot
transitive-accessible method net/minecraft/world/level/biome/Biome$ClimateSettings <init> (ZFLnet/minecraft/world/level/biome/Biome$TemperatureModifier;F)V
transitive-accessible class net/minecraft/world/level/biome/Biome$ClimateSettings transitive-accessible class net/minecraft/world/level/biome/Biome$ClimateSettings
accessible field net/minecraft/client/gui/components/toasts/AdvancementToast BACKGROUND_SPRITE Lnet/minecraft/resources/ResourceLocation; accessible field net/minecraft/client/gui/components/toasts/AdvancementToast BACKGROUND_SPRITE Lnet/minecraft/resources/ResourceLocation;
#accessible method net/minecraft/text/Text$Serialization fromJson (Lcom/google/gson/JsonElement;)Lnet/minecraft/text/MutableComponent; #accessible method net/minecraft/text/Text$Serialization fromJson (Lcom/google/gson/JsonElement;)Lnet/minecraft/text/MutableComponent;
@@ -90,7 +92,7 @@ transitive-accessible field net/minecraft/world/entity/ai/goal/FollowOwnerGoal s
transitive-accessible field net/minecraft/world/level/levelgen/structure/pools/SinglePoolElement template Lcom/mojang/datafixers/util/Either; transitive-accessible field net/minecraft/world/level/levelgen/structure/pools/SinglePoolElement template Lcom/mojang/datafixers/util/Either;
transitive-accessible class net/minecraft/world/level/levelgen/structure/pools/JigsawPlacement$Placer transitive-accessible class net/minecraft/world/level/levelgen/structure/pools/JigsawPlacement$Placer
transitive-accessible class net/minecraft/world/level/levelgen/structure/pools/JigsawPlacement$PieceState transitive-accessible class net/minecraft/world/level/levelgen/structure/pools/JigsawPlacement$PieceState
transitive-accessible field net/minecraft/world/level/levelgen/structure/pools/JigsawPlacement$PieceState piece Lnet/minecraft/world/level/levelgen/structure/PoolElementStructurePiece; transitive-accessible method net/minecraft/world/level/levelgen/structure/pools/JigsawPlacement$PieceState <init> (Lnet/minecraft/world/level/levelgen/structure/PoolElementStructurePiece;Lorg/apache/commons/lang3/mutable/MutableObject;I)V
transitive-accessible method net/minecraft/client/resources/TextureAtlasHolder getSprite (Lnet/minecraft/resources/ResourceLocation;)Lnet/minecraft/client/renderer/texture/TextureAtlasSprite; transitive-accessible method net/minecraft/client/resources/TextureAtlasHolder getSprite (Lnet/minecraft/resources/ResourceLocation;)Lnet/minecraft/client/renderer/texture/TextureAtlasSprite;
transitive-accessible field net/minecraft/client/resources/TextureAtlasHolder textureAtlas Lnet/minecraft/client/renderer/texture/TextureAtlas; transitive-accessible field net/minecraft/client/resources/TextureAtlasHolder textureAtlas Lnet/minecraft/client/renderer/texture/TextureAtlas;
transitive-accessible field net/minecraft/client/renderer/texture/TextureAtlas width I transitive-accessible field net/minecraft/client/renderer/texture/TextureAtlas width I
@@ -0,0 +1,5 @@
{
"net/minecraft/client/model/geom/ModelPart": [
"com/cobblemon/mod/common/client/render/models/blockbench/pose/Bone"
]
}
@@ -12,5 +12,5 @@ import org.junit.jupiter.api.extension.ExtendWith
@Retention(AnnotationRetention.RUNTIME) @Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.CLASS) @Target(AnnotationTarget.CLASS)
@ExtendWith(BootstrapMinecraftExtension::class) //@ExtendWith(BootstrapMinecraftExtension::class)
annotation class BootstrapMinecraft annotation class BootstrapMinecraft
@@ -8,6 +8,7 @@
package com.cobblemon.mod.common.junit package com.cobblemon.mod.common.junit
/*
import net.minecraft.SharedConstants import net.minecraft.SharedConstants
import net.minecraft.server.Bootstrap import net.minecraft.server.Bootstrap
import org.junit.jupiter.api.extension.BeforeAllCallback import org.junit.jupiter.api.extension.BeforeAllCallback
@@ -19,4 +20,6 @@ class BootstrapMinecraftExtension : Extension, BeforeAllCallback {
SharedConstants.tryDetectVersion() SharedConstants.tryDetectVersion()
Bootstrap.bootStrap() Bootstrap.bootStrap()
} }
} }
*/
@@ -8,6 +8,7 @@
package com.cobblemon.mod.common.spawning package com.cobblemon.mod.common.spawning
/*
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.GsonBuilder import com.google.gson.GsonBuilder
import com.google.gson.JsonObject import com.google.gson.JsonObject
@@ -75,4 +76,5 @@ internal class SpawnValidator {
return javaClass.classLoader.getResource(adjustedPath)?.toURI() return javaClass.classLoader.getResource(adjustedPath)?.toURI()
?: throw FileNotFoundException(adjustedPath) ?: throw FileNotFoundException(adjustedPath)
} }
} }
*/
@@ -7,7 +7,7 @@
*/ */
package com.cobblemon.mod.common.util.math package com.cobblemon.mod.common.util.math
/*
import kotlin.math.round import kotlin.math.round
import net.minecraft.world.phys.Vec3 import net.minecraft.world.phys.Vec3
import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertEquals
@@ -26,4 +26,6 @@ class SimpleMathExtensionsKtTest {
assertEquals(2.0, round(result.y)) assertEquals(2.0, round(result.y))
assertEquals(0.0, result.z) assertEquals(0.0, result.z)
} }
} }
*/
+67 -89
View File
@@ -1,106 +1,84 @@
/* import com.cobblemon.gradle.extension.tasks.UnzipAccessWidenersTask
* import net.fabricmc.loom.configuration.accesswidener.AccessWidenerJarProcessor
* * Copyright (C) 2023 Cobblemon Contributors import net.fabricmc.loom.extension.LoomGradleExtensionImpl
* *
* * This Source Code Form is subject to the terms of the Mozilla Public
* * License, v. 2.0. If a copy of the MPL was not distributed with this
* * file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
*/
configurations.all {
resolutionStrategy {
force(libs.fabric.loader)
}
}
plugins { plugins {
id("cobblemon.platform-conventions") kotlin("jvm") version "2.1.0"
id("cobblemon.publish-conventions") id("fabric-loom") version "1.9-SNAPSHOT"
} id("com.cobblemon.gradle")
architectury {
platformSetupLoomIde()
fabric()
}
val generatedResources = file("src/generated/resources")
sourceSets {
main {
resources {
srcDir(generatedResources)
}
}
} }
repositories { repositories {
maven(url = "${rootProject.projectDir}/deps") mavenCentral()
mavenLocal() maven("https://maven.fabricmc.net/")
maven("https://oss.sonatype.org/content/repositories/snapshots") maven("https://maven.blamejared.com/")
maven(url = "https://api.modrinth.com/maven") maven("https://api.modrinth.com/maven")
maven(url = "https://thedarkcolour.github.io/KotlinForForge/")
maven(url = "../deps")
}
loom {
mods {
create("cobblemon") {
sourceSet(sourceSets.main.get())
}
}
}
cobblemon {
convertAccessWideners = false
} }
dependencies { dependencies {
implementation(project(":common", configuration = "namedElements")) { minecraft("com.mojang:minecraft:1.21.1")
isTransitive = false mappings(loom.officialMojangMappings())
} //Originally I had this jar-in-jared, but the way that NF does class loading for JiJed dependencies
"developmentFabric"(project(":common", configuration = "namedElements")) { //Makes it so that they can't access minecraft classes. So instead we do an implementation dependency
isTransitive = false //and make sure that the FMLModType variable is set in this jar's manifest
} implementation("com.cobblemon:mod:1.6.0-SNAPSHOT")
bundle(project(path = ":common", configuration = "transformProductionFabric")) { includeRootResources("com.cobblemon:mod-resources:1.6.0-SNAPSHOT")
isTransitive = false accessWidener("com.cobblemon:mod-accesswideners:1.6.0-SNAPSHOT")
}
modLocalRuntime(libs.fabric.debugutils) //additionalRuntimeClasspathLibraries are libraries that need to be added to the task runtime classpath
api(libs.molang)
//"additionalRuntimeClasspath"(libs.molang)
//implementation("thedarkcolour:kotlinforforge-neoforge:5.7.0:slim")
//"additionalRuntimeClasspath"("org.jetbrains.kotlin:kotlin-stdlib:2.1.0")
//"additionalRuntimeClasspath"("org.jetbrains.kotlin:kotlin-reflect:2.1.0")
//"additionalRuntimeClasspath"("org.jetbrains.kotlinx:kotlinx-coroutines-core")
//"additionalRuntimeClasspath"("org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3")
//"additionalRuntimeClasspath"("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
modImplementation(libs.fabric.loader) modImplementation(libs.fabric.loader)
modApi(libs.fabric.api) modImplementation(libs.fabric.api)
modApi(libs.bundles.fabric) modApi(libs.bundles.fabric)
modCompileOnly(libs.bundles.fabric.integrations.compileOnly) { compileOnly(libs.bundles.mongo)
isTransitive = false
}
modRuntimeOnly(libs.bundles.fabric.integrations.runtimeOnly)
// modImplementation(libs.flywheelFabric)
// include(libs.flywheelFabric)
include(libs.fabric.kotlin) compileOnly(libs.graal)
//"additionalRuntimeClasspath"(libs.graal)
listOf( //compileOnly("net.fabricmc:sponge-mixin:0.15.5+mixin.0.8.7")
libs.graal, //compileOnly("io.github.llamalad7:mixinextras-fabric:0.4.1")
libs.molang //api(libs.jei.api)
).forEach { //compileOnly(libs.bundles.fabric.integrations.compileOnly) {
bundle(it) // isTransitive = false
runtimeOnly(it) //}
}
minecraftServerLibraries(libs.icu4j)
testImplementation(libs.bundles.unitTesting)
} }
tasks { tasks.named("prepareKotlinBuildScriptModel") {
// The AW file is needed in :fabric project resources when the game is run. dependsOn(tasks.named("unzipAccessWideners"))
val copyAccessWidener by registering(Copy::class) { doFirst {
from(loom.accessWidenerPath) val file = tasks.named<UnzipAccessWidenersTask>("unzipAccessWideners").get().outputFiles.get().first()
into(generatedResources) println(file.name)
dependsOn(checkLicenseMain) val minecraftJarProcessors = loom.minecraftJarProcessors
val processorList = minecraftJarProcessors.get()
processorList.removeIf { it is AccessWidenerJarProcessor }
val newProp = project.objects.fileProperty()
newProp.set(file)
processorList.add(AccessWidenerJarProcessor("AccessWidener", true, newProp))
} }
}
processResources {
dependsOn(copyAccessWidener)
inputs.property("version", rootProject.version)
inputs.property("fabric_loader_version", libs.fabric.loader.get().version)
inputs.property("minecraft_version", rootProject.property("mc_version").toString())
filesMatching("fabric.mod.json") {
expand(
"version" to rootProject.version,
"fabric_loader_version" to libs.fabric.loader.get().version,
"minecraft_version" to rootProject.property("mc_version").toString()
)
}
}
sourcesJar {
dependsOn(copyAccessWidener)
}
}
+106
View File
@@ -0,0 +1,106 @@
/*
*
* * Copyright (C) 2023 Cobblemon Contributors
* *
* * This Source Code Form is subject to the terms of the Mozilla Public
* * License, v. 2.0. If a copy of the MPL was not distributed with this
* * file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
*/
configurations.all {
resolutionStrategy {
force(libs.fabric.loader)
}
}
plugins {
id("cobblemon.platform-conventions")
id("cobblemon.publish-conventions")
}
architectury {
platformSetupLoomIde()
fabric()
}
val generatedResources = file("src/generated/resources")
sourceSets {
main {
resources {
srcDir(generatedResources)
}
}
}
repositories {
maven(url = "${rootProject.projectDir}/deps")
mavenLocal()
maven("https://oss.sonatype.org/content/repositories/snapshots")
maven(url = "https://api.modrinth.com/maven")
}
dependencies {
implementation(project(":common", configuration = "namedElements")) {
isTransitive = false
}
"developmentFabric"(project(":common", configuration = "namedElements")) {
isTransitive = false
}
bundle(project(path = ":common", configuration = "transformProductionFabric")) {
isTransitive = false
}
modLocalRuntime(libs.fabric.debugutils)
modImplementation(libs.fabric.loader)
modApi(libs.fabric.api)
modApi(libs.bundles.fabric)
modCompileOnly(libs.bundles.fabric.integrations.compileOnly) {
isTransitive = false
}
modRuntimeOnly(libs.bundles.fabric.integrations.runtimeOnly)
// modImplementation(libs.flywheelFabric)
// include(libs.flywheelFabric)
include(libs.fabric.kotlin)
listOf(
libs.graal,
libs.molang
).forEach {
bundle(it)
runtimeOnly(it)
}
minecraftServerLibraries(libs.icu4j)
}
tasks {
// The AW file is needed in :fabric project resources when the game is run.
val copyAccessWidener by registering(Copy::class) {
from(loom.accessWidenerPath)
into(generatedResources)
dependsOn(checkLicenseMain)
}
processResources {
dependsOn(copyAccessWidener)
inputs.property("version", rootProject.version)
inputs.property("fabric_loader_version", libs.fabric.loader.get().version)
inputs.property("minecraft_version", rootProject.property("mc_version").toString())
filesMatching("fabric.mod.json") {
expand(
"version" to rootProject.version,
"fabric_loader_version" to libs.fabric.loader.get().version,
"minecraft_version" to rootProject.property("mc_version").toString()
)
}
}
sourcesJar {
dependsOn(copyAccessWidener)
}
}
@@ -1,20 +1,16 @@
rootProject.name = "build-logic"
pluginManagement { pluginManagement {
repositories { repositories {
gradlePluginPortal()
mavenCentral() mavenCentral()
gradlePluginPortal()
maven("https://maven.architectury.dev/") maven("https://maven.architectury.dev/")
maven("https://maven.fabricmc.net/") maven("https://maven.fabricmc.net/")
maven("https://maven.minecraftforge.net/")
maven("https://repo.papermc.io/repository/maven-public/")
} }
} }
dependencyResolutionManagement { dependencyResolutionManagement {
versionCatalogs { versionCatalogs {
create("libs") { create("libs") {
from(files("../libs.versions.toml")) from(files("../gradle/libs.versions.toml"))
} }
} }
} }
@@ -5,7 +5,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. * file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/ */
/*
package com.cobblemon.mod.fabric.compat.lambdynamiclights; package com.cobblemon.mod.fabric.compat.lambdynamiclights;
import com.cobblemon.mod.common.Cobblemon; import com.cobblemon.mod.common.Cobblemon;
@@ -22,3 +22,5 @@ public class LambDynamicLightsCompatEntrypoint implements DynamicLightsInitializ
Cobblemon.LOGGER.info("Lamb Dynamic Lights compatibility enabled"); Cobblemon.LOGGER.info("Lamb Dynamic Lights compatibility enabled");
} }
} }
*/
@@ -16,7 +16,7 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(BrewingStandMenu.PotionSlot.class) @Mixin(BrewingStandMenu.PotionSlot.class)
public class PotionSlotMixin { public class PotionSlotMixin {
@Inject(method = "mayPlaceItem", at = @At("RETURN"), cancellable = true) @Inject(method = "mayPlaceItem", at = @At("RETURN"), cancellable = true)
+2 -5
View File
@@ -24,9 +24,6 @@
], ],
"jei_mod_plugin": [ "jei_mod_plugin": [
"com.cobblemon.mod.common.integration.jei.CobblemonJeiPlugin" "com.cobblemon.mod.common.integration.jei.CobblemonJeiPlugin"
],
"dynamiclights": [
"com.cobblemon.mod.fabric.compat.lambdynamiclights.LambDynamicLightsCompatEntrypoint"
] ]
}, },
"mixins": [ "mixins": [
@@ -35,9 +32,9 @@
], ],
"accessWidener": "cobblemon-common.accesswidener", "accessWidener": "cobblemon-common.accesswidener",
"depends": { "depends": {
"fabricloader": ">=${fabric_loader_version}", "fabricloader": ">=0.16.5",
"fabric-api": "*", "fabric-api": "*",
"minecraft": ">=${minecraft_version}", "minecraft": ">=1.21.1",
"java": ">=17" "java": ">=17"
}, },
"custom": { "custom": {
+1 -5
View File
@@ -1,8 +1,6 @@
# Sets default memory used for gradle commands. Can be overridden by user or command line properties. # Sets default memory used for gradle commands. Can be overridden by user or command line properties.
# This is required to provide enough memory for the Minecraft decompilation process. # This is required to provide enough memory for the Minecraft decompilation process.
org.gradle.jvmargs=-Xmx8G org.gradle.jvmargs=-Xmx8G
org.gradle.daemon=false
org.gradle.parallel=true
group=com.cobblemon.mod group=com.cobblemon.mod
@@ -12,6 +10,4 @@ parchment_version = 2024.07.28@zip
mod_id=cobblemon mod_id=cobblemon
mod_version=1.6.1 mod_version=1.6.1
snapshot=true snapshot=true
fabric.loom.multiProjectOptimisation=false
@@ -1,9 +0,0 @@
plugins {
base
}
tasks {
withType<Test> {
useJUnitPlatform()
}
}
+4 -5
View File
@@ -22,13 +22,13 @@ jei-api = "19.8.2.99"
fabric-loader = "0.16.5" fabric-loader = "0.16.5"
fabric-api = "0.104.0+1.21.1" fabric-api = "0.104.0+1.21.1"
fabric-kotlin = "1.11.0+kotlin.2.0.0" fabric-kotlin = "1.11.0+kotlin.2.0.0"
fabric-permissions-api = "0.2-SNAPSHOT" fabric-permissions-api = "0.3.1"
lambDynamicLights = "3.0.1+1.21.1" lambDynamicLights = "3.0.1+1.21.1"
debugutils-fabric = "1.21-1.0.6-fabric" debugutils-fabric = "1.21-1.0.6-fabric"
# NeoForge # NeoForge
neoforge = "21.1.66" neoforge = "21.1.66"
neo-kotlin-for-forge = "5.5.0" neo-kotlin-for-forge = "5.7.0"
debugutils-forge = "1.21-1.0.6-neoforge" debugutils-forge = "1.21-1.0.6-neoforge"
# Data Storage # Data Storage
@@ -81,8 +81,7 @@ mongo-driver-core = { group = "org.mongodb", name = "mongodb-driver-core", versi
mongo-driver-sync = { group = "org.mongodb", name = "mongodb-driver-sync", version.ref = "mongo" } mongo-driver-sync = { group = "org.mongodb", name = "mongodb-driver-sync", version.ref = "mongo" }
# Testing # Testing
junit-fabric = { group = "net.fabricmc", name = "fabric-loader-junit", version.ref = "fabric-loader" } junit = { group = "org.junit.jupiter", name = "junit-jupiter", version.ref = "junit" }
junit-params = { group = "org.junit.jupiter", name = "junit-jupiter-params", version.ref = "junit" }
mockito-core = { group = "org.mockito", name = "mockito-core", version.ref = "mockito" } mockito-core = { group = "org.mockito", name = "mockito-core", version.ref = "mockito" }
mock-kotlin = { group = "io.mockk", name = "mockk", version.ref = "mockk" } mock-kotlin = { group = "io.mockk", name = "mockk", version.ref = "mockk" }
classgraph = { group = "io.github.classgraph", name = "classgraph", version.ref = "classgraph" } classgraph = { group = "io.github.classgraph", name = "classgraph", version.ref = "classgraph" }
@@ -93,4 +92,4 @@ fabric = [ "fabric-kotlin", "fabric-permissions" ]
fabric-integrations-compileOnly = [ "adorn-fabric", "lambDynamicLights", "jei-api-fabric" ] fabric-integrations-compileOnly = [ "adorn-fabric", "lambDynamicLights", "jei-api-fabric" ]
fabric-integrations-runtimeOnly = [ "jei-fabric" ] fabric-integrations-runtimeOnly = [ "jei-fabric" ]
mongo = [ "mongo-driver-core", "mongo-driver-sync" ] mongo = [ "mongo-driver-core", "mongo-driver-sync" ]
unitTesting = [ "junit-fabric", "junit-params", "mockito-core", "mock-kotlin", "classgraph" ] unitTesting = [ "junit", "mockito-core", "mock-kotlin", "classgraph" ]
+1 -1
View File
@@ -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-8.8-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip
networkTimeout=10000 networkTimeout=10000
validateDistributionUrl=true validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
+80 -111
View File
@@ -1,129 +1,98 @@
/* import org.gradle.internal.impldep.bsh.commands.dir
* import java.nio.file.Files
* * Copyright (C) 2023 Cobblemon Contributors import java.nio.file.StandardOpenOption
* * import kotlin.io.path.name
* * This Source Code Form is subject to the terms of the Mozilla Public
* * License, v. 2.0. If a copy of the MPL was not distributed with this
* * file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
*/
plugins { plugins {
id("cobblemon.platform-conventions") kotlin("jvm") version "2.1.0"
id("cobblemon.publish-conventions") id ("net.neoforged.moddev") version "2.0.75"
} id("com.cobblemon.gradle")
architectury {
platformSetupLoomIde()
neoForge()
}
loom {
neoForge {
}
} }
repositories { repositories {
maven(url = "${rootProject.projectDir}/deps") mavenCentral()
maven("https://maven.fabricmc.net/")
maven("https://maven.blamejared.com/")
maven("https://api.modrinth.com/maven")
maven(url = "https://thedarkcolour.github.io/KotlinForForge/") maven(url = "https://thedarkcolour.github.io/KotlinForForge/")
maven(url = "https://api.modrinth.com/maven") maven(url = "../deps")
maven(url = "https://maven.neoforged.net/releases") }
mavenLocal()
neoForge {
version = "21.1.95"
runs {
create("client") {
client()
}
create("server") {
server()
}
}
mods {
create("cobblemon") {
sourceSet(sourceSets.main.get())
}
}
} }
dependencies { dependencies {
neoForge(libs.neoforge) //Originally I had this jar-in-jared, but the way that NF does class loading for JiJed dependencies
//Because of the JEI mapping issues if we want //Makes it so that they can't access minecraft classes. So instead we do an implementation dependency
//a forge launch we gotta do some wacky stuff //and make sure that the FMLModType variable is set in this jar's manifest
//modImplementation(libs.jeiForge) implementation("com.cobblemon:mod:1.6.0-SNAPSHOT")
//shadowCommon group: 'commons-io', name: 'commons-io', version: '2.6' includeRootResources("com.cobblemon:mod-resources:1.6.0-SNAPSHOT")
//modImplementation(libs.flywheelForge) "accessWidener"("com.cobblemon:mod-accesswideners:1.6.0-SNAPSHOT")
//include(libs.flywheelForge)
modLocalRuntime(libs.neoforge.debugutils)
implementation(project(":common", configuration = "namedElements")) {
isTransitive = false
}
implementation(libs.neo.kotlin.forge) {
exclude(group = "net.neoforged.fancymodloader", module = "loader")
}
"developmentNeoForge"(project(":common", configuration = "namedElements")) {
isTransitive = false
}
bundle(project(path = ":common", configuration = "transformProductionNeoForge")) {
isTransitive = false
}
testImplementation(project(":common", configuration = "namedElements"))
listOf( //additionalRuntimeClasspathLibraries are libraries that need to be added to the task runtime classpath
libs.graal, api(libs.molang)
libs.molang "additionalRuntimeClasspath"(libs.molang)
).forEach {
forgeRuntimeLibrary(it) implementation("thedarkcolour:kotlinforforge-neoforge:5.7.0:slim")
bundle(it) "additionalRuntimeClasspath"("org.jetbrains.kotlin:kotlin-stdlib:2.1.0")
} "additionalRuntimeClasspath"("org.jetbrains.kotlin:kotlin-reflect:2.1.0")
"additionalRuntimeClasspath"("org.jetbrains.kotlinx:kotlinx-coroutines-core")
"additionalRuntimeClasspath"("org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3")
"additionalRuntimeClasspath"("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
compileOnly(libs.bundles.mongo)
compileOnly(libs.graal)
"additionalRuntimeClasspath"(libs.graal)
compileOnly("net.fabricmc:sponge-mixin:0.15.5+mixin.0.8.7")
compileOnly("io.github.llamalad7:mixinextras-fabric:0.4.1")
//api(libs.jei.api)
//compileOnly(libs.bundles.fabric.integrations.compileOnly) {
// isTransitive = false
//}
testImplementation(libs.bundles.unitTesting)
} }
tasks { tasks.register("addAccessTransformersToToml") {
shadowJar { dependsOn(tasks.processResources)
exclude("architectury-common.accessWidener") doLast {
exclude("architectury.common.json") tasks.processResources.get().outputs.files.filter {
it.path.endsWith("accesstransformer.cfg")
relocate ("com.ibm.icu", "com.cobblemon.mod.relocations.ibm.icu")
}
processResources {
inputs.property("version", rootProject.version)
inputs.property("minecraft_version", rootProject.property("mc_version").toString())
filesMatching("META-INF/neoforge.mods.toml") {
expand(
"version" to rootProject.version,
"minecraft_version" to rootProject.property("mc_version").toString()
)
} }
} }
} }
tasks { //Add access tranformers to neoforge.mods.toml
sourcesJar { tasks.processResources {
val depSources = project(":common").tasks.sourcesJar val accessTransformers = mutableSetOf<String>()
duplicatesStrategy = DuplicatesStrategy.EXCLUDE eachFile {
dependsOn(depSources) if (name.endsWith("accesstransformer.cfg")) {
from(depSources.get().archiveFile.map { zipTree(it) }) { accessTransformers.add(relativeSourcePath.pathString)
exclude("architectury.accessWidener")
} }
} }
} doLast {
val modsFile = Files.walk(destinationDir.toPath()).filter { it.name == "neoforge.mods.toml" }.findFirst().orElse(null)
//Stole from architect discord, replaces loom.forge.convertAccessWideners if (modsFile != null) {
tasks.remapJar { val rawFile = Files.readString(modsFile)
atAccessWideners.add("cobblemon-common.accesswidener") val genAccessTransformersStr = accessTransformers.joinToString { "[[accessTransformers]]\nfile=\"$it\"\n" }
} val transformedFile = rawFile.replace("ACCESS_TRANSFORMERS_TEMPLATE", genAccessTransformersStr)
Files.writeString(modsFile, transformedFile, StandardOpenOption.TRUNCATE_EXISTING)
}
//jar { }
// classifier("dev") }
// manifest {
// attributes(
// "Specification-Title" to rootProject.mod_id,
// "Specification-Vendor" to "Cable MC",
// "Specification-Version" to "1",
// "Implementation-Title" to rootProject.mod_id,
// "Implementation-Version" to project.version,
// "Implementation-Vendor" to "Cable MC",
// )
// }
//}
//
//sourcesJar {
// def commonSources = project(":common").sourcesJar
// dependsOn commonSources
// from commonSources.archiveFile.map { zipTree(it) }
//}
//
//components.java {
// withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) {
// skip()
// }
//}
+129
View File
@@ -0,0 +1,129 @@
/*
*
* * Copyright (C) 2023 Cobblemon Contributors
* *
* * This Source Code Form is subject to the terms of the Mozilla Public
* * License, v. 2.0. If a copy of the MPL was not distributed with this
* * file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
*/
plugins {
id("cobblemon.platform-conventions")
id("cobblemon.publish-conventions")
}
architectury {
platformSetupLoomIde()
neoForge()
}
loom {
neoForge {
}
}
repositories {
maven(url = "${rootProject.projectDir}/deps")
maven(url = "https://thedarkcolour.github.io/KotlinForForge/")
maven(url = "https://api.modrinth.com/maven")
maven(url = "https://maven.neoforged.net/releases")
mavenLocal()
}
dependencies {
neoForge(libs.neoforge)
//Because of the JEI mapping issues if we want
//a forge launch we gotta do some wacky stuff
//modImplementation(libs.jeiForge)
//shadowCommon group: 'commons-io', name: 'commons-io', version: '2.6'
//modImplementation(libs.flywheelForge)
//include(libs.flywheelForge)
modLocalRuntime(libs.neoforge.debugutils)
implementation(project(":common", configuration = "namedElements")) {
isTransitive = false
}
implementation(libs.neo.kotlin.forge) {
exclude(group = "net.neoforged.fancymodloader", module = "loader")
}
"developmentNeoForge"(project(":common", configuration = "namedElements")) {
isTransitive = false
}
bundle(project(path = ":common", configuration = "transformProductionNeoForge")) {
isTransitive = false
}
testImplementation(project(":common", configuration = "namedElements"))
listOf(
libs.graal,
libs.molang
).forEach {
forgeRuntimeLibrary(it)
bundle(it)
}
}
tasks {
shadowJar {
exclude("architectury-common.accessWidener")
exclude("architectury.common.json")
relocate ("com.ibm.icu", "com.cobblemon.mod.relocations.ibm.icu")
}
processResources {
inputs.property("version", rootProject.version)
inputs.property("minecraft_version", rootProject.property("mc_version").toString())
filesMatching("META-INF/neoforge.mods.toml") {
expand(
"version" to rootProject.version,
"minecraft_version" to rootProject.property("mc_version").toString()
)
}
}
}
tasks {
sourcesJar {
val depSources = project(":common").tasks.sourcesJar
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
dependsOn(depSources)
from(depSources.get().archiveFile.map { zipTree(it) }) {
exclude("architectury.accessWidener")
}
}
}
//Stole from architect discord, replaces loom.forge.convertAccessWideners
tasks.remapJar {
atAccessWideners.add("cobblemon-common.accesswidener")
}
//jar {
// classifier("dev")
// manifest {
// attributes(
// "Specification-Title" to rootProject.mod_id,
// "Specification-Vendor" to "Cable MC",
// "Specification-Version" to "1",
// "Implementation-Title" to rootProject.mod_id,
// "Implementation-Version" to project.version,
// "Implementation-Vendor" to "Cable MC",
// )
// }
//}
//
//sourcesJar {
// def commonSources = project(":common").sourcesJar
// dependsOn commonSources
// from commonSources.archiveFile.map { zipTree(it) }
//}
//
//components.java {
// withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) {
// skip()
// }
//}
+1
View File
@@ -1 +1,2 @@
loom.platform = neoforge loom.platform = neoforge
mod_accesstranformers = "TEST"
+95
View File
@@ -0,0 +1,95 @@
[versions]
# Kotlin
kotlin = "2.0.0"
# Plugins
licenser = "0.6.1"
shadow = "8.1.1"
blossom = "2.1.0"
idea-ext = "1.1.7"
# Loom
loom = "1.7-SNAPSHOT"
architectury-plugin = "3.4-SNAPSHOT"
# Common
molang = "1.1.18"
graal = "22.3.0"
icu4j = "71.1"
jei-api = "19.8.2.99"
# Fabric
fabric-loader = "0.16.5"
fabric-api = "0.104.0+1.21.1"
fabric-kotlin = "1.11.0+kotlin.2.0.0"
fabric-permissions-api = "0.2-SNAPSHOT"
lambDynamicLights = "3.0.1+1.21.1"
debugutils-fabric = "1.21-1.0.6-fabric"
# NeoForge
neoforge = "21.1.66"
neo-kotlin-for-forge = "5.5.0"
debugutils-forge = "1.21-1.0.6-neoforge"
# Data Storage
mongo = "4.10.2"
# Testing
junit = "5.9.0"
mockito = "5.2.0"
mockk = "1.12.1"
classgraph = "4.8.153"
[libraries]
# General Buildscript Plugins
kotlin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" }
loom = { group = "dev.architectury", name = "architectury-loom", version.ref = "loom" }
architectury = { group = "architectury-plugin", name = "architectury-plugin.gradle.plugin", version.ref = "architectury-plugin" }
shadow = { group = "com.github.johnrengelman", name = "shadow", version.ref = "shadow" }
blossom = { group = "net.kyori", name = "blossom", version.ref = "blossom" }
ideaExt = { group = "org.jetbrains.gradle.plugin.idea-ext", name = "org.jetbrains.gradle.plugin.idea-ext.gradle.plugin", version.ref = "idea-ext"}
licenser = { group = "gradle.plugin.org.cadixdev.gradle", name = "licenser", version.ref = "licenser" }
# Kotlin
kotlin-stdlib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib-jdk8", version.ref = "kotlin" }
kotlin-reflect = { group = "org.jetbrains.kotlin", name = "kotlin-reflect", version.ref = "kotlin" }
# Common
jei-api = { group = "mezz.jei", name = "jei-1.21-common-api", version.ref = "jei-api"}
molang = { group = "local.com.bedrockk", name = "molang", version.ref = "molang" }
graal = { group = "org.graalvm.js", name = "js", version.ref = "graal" }
icu4j = { group = "com.ibm.icu", name = "icu4j", version.ref = "icu4j" }
# Fabric
fabric-loader = { group = "net.fabricmc", name = "fabric-loader", version.ref = "fabric-loader" }
fabric-api = { group = "net.fabricmc.fabric-api", name = "fabric-api", version.ref = "fabric-api" }
fabric-kotlin = { group = "net.fabricmc", name = "fabric-language-kotlin", version.ref = "fabric-kotlin" }
fabric-permissions = { group = "me.lucko", name = "fabric-permissions-api", version.ref = "fabric-permissions-api" }
adorn-fabric = { group = "maven.modrinth", name = "adorn", version = "6.0.0-neoforge"}
lambDynamicLights = { group = "maven.modrinth", name = "lambdynamiclights", version.ref = "lambDynamicLights"}
jei-api-fabric = { group = "mezz.jei", name = "jei-1.21-fabric-api", version.ref = "jei-api" }
jei-fabric = { group = "mezz.jei", name = "jei-1.21-fabric", version.ref = "jei-api"}
fabric-debugutils = { group = "maven.modrinth", name = "debugutils", version.ref = "debugutils-fabric"}
# NeoForge
neoforge = { group = "net.neoforged", name = "neoforge", version.ref = "neoforge" }
neo-kotlin-forge = { group = "thedarkcolour", name = "kotlinforforge-neoforge", version.ref = "neo-kotlin-for-forge" }
neoforge-debugutils = { group = "maven.modrinth", name = "debugutils", version.ref = "debugutils-forge"}
# Data Storage
mongo-driver-core = { group = "org.mongodb", name = "mongodb-driver-core", version.ref = "mongo" }
mongo-driver-sync = { group = "org.mongodb", name = "mongodb-driver-sync", version.ref = "mongo" }
# Testing
junit = { group = "org.junit.jupiter", name = "junit-jupiter", version.ref = "junit" }
mockito-core = { group = "org.mockito", name = "mockito-core", version.ref = "mockito" }
mock-kotlin = { group = "io.mockk", name = "mockk", version.ref = "mockk" }
classgraph = { group = "io.github.classgraph", name = "classgraph", version.ref = "classgraph" }
[bundles]
kotlin = [ "kotlin-stdlib", "kotlin-reflect" ]
fabric = [ "fabric-kotlin", "fabric-permissions" ]
fabric-integrations-compileOnly = [ "adorn-fabric", "lambDynamicLights", "jei-api-fabric" ]
fabric-integrations-runtimeOnly = [ "jei-fabric" ]
mongo = [ "mongo-driver-core", "mongo-driver-sync" ]
unitTesting = [ "junit", "mockito-core", "mock-kotlin", "classgraph" ]
+8
View File
@@ -0,0 +1,8 @@
pluginManagement {
repositories {
mavenCentral()
gradlePluginPortal()
maven("https://maven.architectury.dev/")
maven("https://maven.fabricmc.net/")
}
}
@@ -111,6 +111,7 @@ class CobblemonNeoForge : CobblemonImplementation {
with(MOD_BUS) { with(MOD_BUS) {
this@CobblemonNeoForge.commandArgumentTypes.register(this) this@CobblemonNeoForge.commandArgumentTypes.register(this)
addListener(this@CobblemonNeoForge::initialize) addListener(this@CobblemonNeoForge::initialize)
val test = ResourceLocation.fromNamespaceAndPath("mincras", "asdfa")
Cobblemon.preInitialize(this@CobblemonNeoForge) Cobblemon.preInitialize(this@CobblemonNeoForge)
addListener(CobblemonBiomeModifiers::register) addListener(CobblemonBiomeModifiers::register)
addListener(this@CobblemonNeoForge::on) addListener(this@CobblemonNeoForge::on)
@@ -19,7 +19,6 @@ import com.cobblemon.mod.common.client.pokedex.PokedexType
import com.cobblemon.mod.common.client.render.atlas.CobblemonAtlases import com.cobblemon.mod.common.client.render.atlas.CobblemonAtlases
import com.cobblemon.mod.common.client.render.item.CobblemonModelPredicateRegistry import com.cobblemon.mod.common.client.render.item.CobblemonModelPredicateRegistry
import com.cobblemon.mod.common.client.render.shader.CobblemonShaders import com.cobblemon.mod.common.client.render.shader.CobblemonShaders
import com.cobblemon.mod.common.compat.LambDynamicLightsCompat
import com.cobblemon.mod.common.item.PokedexItem import com.cobblemon.mod.common.item.PokedexItem
import com.cobblemon.mod.common.particle.CobblemonParticles import com.cobblemon.mod.common.particle.CobblemonParticles
import com.cobblemon.mod.common.particle.SnowstormParticleType import com.cobblemon.mod.common.particle.SnowstormParticleType
@@ -233,7 +232,7 @@ object CobblemonNeoForgeClient : CobblemonClientImplementation {
// They have no Maven nor are they published on Modrinth :( // They have no Maven nor are they published on Modrinth :(
// Good thing is they are a copy pasta adapted to Forge :D // Good thing is they are a copy pasta adapted to Forge :D
if (Cobblemon.implementation.isModInstalled("dynamiclightsreforged")) { if (Cobblemon.implementation.isModInstalled("dynamiclightsreforged")) {
LambDynamicLightsCompat.hookCompat() //LambDynamicLightsCompat.hookCompat()
Cobblemon.LOGGER.info("Dynamic Lights Reforged compatibility enabled") Cobblemon.LOGGER.info("Dynamic Lights Reforged compatibility enabled")
} }
} }
@@ -5,7 +5,7 @@ issueTrackerURL="https://gitlab.com/cable-mc/cobblemon/-/issues"
[[mods]] #mandatory [[mods]] #mandatory
modId="cobblemon" #mandatory modId="cobblemon" #mandatory
version="${version}" #mandatory version="1.6.0" #mandatory
displayName="Cobblemon" #mandatory displayName="Cobblemon" #mandatory
displayURL="https://cobblemon.com/" displayURL="https://cobblemon.com/"
#logoFile="examplemod.png" #optional #logoFile="examplemod.png" #optional
@@ -24,10 +24,12 @@ config = "mixins.cobblemon-neoforge.json"
[[mixins]] [[mixins]]
config = "mixins.cobblemon-common.json" config = "mixins.cobblemon-common.json"
ACCESS_TRANSFORMERS_TEMPLATE
[[dependencies.cobblemon]] [[dependencies.cobblemon]]
modId="minecraft" modId="minecraft"
mandatory=true mandatory=true
versionRange="[${minecraft_version}]" versionRange="[1.21.1]"
[[dependencies.cobblemon]] [[dependencies.cobblemon]]
modId="neoforge" #mandatory modId="neoforge" #mandatory
+11 -20
View File
@@ -1,31 +1,22 @@
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
pluginManagement { pluginManagement {
repositories { repositories {
gradlePluginPortal()
mavenCentral() mavenCentral()
gradlePluginPortal()
maven("https://maven.fabricmc.net/")
maven("https://maven.architectury.dev/") maven("https://maven.architectury.dev/")
maven("https://maven.minecraftforge.net/") maven("https://maven.fabricmc.net/")
} }
includeBuild("gradle/build-logic")
} }
rootProject.name = "cobblemon" rootProject.name = "cobblemon"
listOf( includeBuild("build-logic")
"common", includeBuild("common") {
"fabric", dependencySubstitution {
"neoforge" substitute(module("com.cobblemon:mod")).using(project(":"))
).forEach { setupProject(it, file(it)) } substitute(module("com.cobblemon:mod-resources")).using(project(":"))
substitute(module("com.cobblemon:mod-accesswideners")).using(project(":"))
fun setupProject(name: String, projectDirectory: File) = setupProject(name) { }
projectDir = projectDirectory
} }
inline fun setupProject(name: String, block: ProjectDescriptor.() -> Unit) { includeBuild("neoforge")
include(name) includeBuild("fabric")
project(":$name").apply(block)
}