Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 2 additions & 125 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,127 +1,4 @@
plugins {
id 'java-library'
id 'maven-publish'
id 'net.neoforged.moddev' version '2.0.141'
id 'idea'
id 'org.jetbrains.kotlin.jvm' version '2.3.20'
}

version = mod_version
group = mod_group_id

base {
archivesName = mod_id
}

sourceSets.main.resources {
srcDir('src/generated/resources')
exclude("**/*.bbmodel")
exclude("src/generated/**/.cache")
}

repositories {
mavenCentral()
}

// Minecraft 26.1 ships Java 25
java.toolchain.languageVersion = JavaLanguageVersion.of(25)

neoForge {
version = project.neo_version

runs {
client {
client()
}

server {
server()
programArgument '--nogui'
}

data {
clientData()
programArguments.addAll '--mod', project.mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath()
}

configureEach {
systemProperty 'forge.logging.markers', 'REGISTRIES'
logLevel = org.slf4j.event.Level.DEBUG
}
}

mods {
"${mod_id}" {
sourceSet(sourceSets.main)
}
}
}

configurations {
runtimeClasspath.extendsFrom localRuntime
}

dependencies {
implementation 'com.profesorfalken:jPowerShell:3.1.1'
jarJar('com.profesorfalken:jPowerShell:[3.1.1,4.0.0)') {
version { prefer '3.1.1' }
}

// Bundle Kotlin stdlib since we're not using KotlinForForge
jarJar('org.jetbrains.kotlin:kotlin-stdlib:[2.3.20,2.4.0)') {
version { prefer '2.3.20' }
}

implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2'
jarJar('org.jetbrains.kotlinx:kotlinx-coroutines-core:[1.10.2,1.11.0)') {
version { prefer '1.10.2' }
}

implementation 'org.jetbrains.kotlinx:kotlinx-datetime:0.7.1'
jarJar('org.jetbrains.kotlinx:kotlinx-datetime:[0.7.1,0.8.0)') {
version { prefer '0.7.1' }
}
}

var generateModMetadata = tasks.register("generateModMetadata", ProcessResources) {
var replaceProperties = [
minecraft_version : minecraft_version,
minecraft_version_range: minecraft_version_range,
neo_version : neo_version,
mod_id : mod_id,
mod_name : mod_name,
mod_license : mod_license,
mod_version : mod_version,
]
inputs.properties replaceProperties
expand replaceProperties
from "src/main/templates"
into "build/generated/sources/modMetadata"
}
sourceSets.main.resources.srcDir generateModMetadata
neoForge.ideSyncTask generateModMetadata

publishing {
publications {
register('mavenJava', MavenPublication) {
from components.java
}
}
repositories {
maven {
url "file://${project.projectDir}/repo"
}
}
}

tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8'
}


idea {
module {
downloadSources = true
downloadJavadoc = true
}
// see https://projects.neoforged.net/neoforged/moddevgradle for new versions
id 'net.neoforged.moddev' version '2.0.141' apply false
}
12 changes: 12 additions & 0 deletions buildSrc/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
plugins {
id 'groovy-gradle-plugin'
}

repositories {
gradlePluginPortal()
mavenCentral()
}

dependencies {
implementation 'org.jetbrains.kotlin:kotlin-gradle-plugin:2.3.20'
}
56 changes: 56 additions & 0 deletions buildSrc/src/main/groovy/multiloader-common.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
plugins {
id 'java-library'
id 'maven-publish'
id 'org.jetbrains.kotlin.jvm'
}

version = mod_version
group = mod_group_id

base {
archivesName = "${mod_id}-${project.name}"
}

java {
toolchain.languageVersion = JavaLanguageVersion.of(25)
withSourcesJar()
withJavadocJar()
}

repositories {
mavenCentral()
}

jar {
from(rootProject.file('LICENSE')) {
rename { "${it}_${mod_name}" }
}

manifest {
attributes([
'Specification-Title' : mod_name,
'Specification-Version' : project.jar.archiveVersion,
'Implementation-Title' : project.name,
'Implementation-Version': project.jar.archiveVersion,
'Built-On-Minecraft' : minecraft_version
])
}
}

tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8'
}

publishing {
publications {
register('mavenJava', MavenPublication) {
artifactId base.archivesName.get()
from components.java
}
}
repositories {
maven {
url "file://${project.projectDir}/repo"
}
}
}
45 changes: 45 additions & 0 deletions buildSrc/src/main/groovy/multiloader-loader.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
plugins {
id 'multiloader-common'
}

configurations {
commonJava {
canBeResolved = true
}
commonResources {
canBeResolved = true
}
}

dependencies {
compileOnly project(':common')
commonJava project(path: ':common', configuration: 'commonJava')
commonResources project(path: ':common', configuration: 'commonResources')
}

tasks.named('compileJava', JavaCompile) {
dependsOn(configurations.commonJava)
source(configurations.commonJava)
}

tasks.named('compileKotlin') {
dependsOn(configurations.commonJava)
source(configurations.commonJava)
}

processResources {
dependsOn(configurations.commonResources)
from(configurations.commonResources)
}

tasks.named('javadoc', Javadoc).configure {
dependsOn(configurations.commonJava)
source(configurations.commonJava)
}

tasks.named('sourcesJar', Jar) {
dependsOn(configurations.commonJava)
from(configurations.commonJava)
dependsOn(configurations.commonResources)
from(configurations.commonResources)
}
30 changes: 30 additions & 0 deletions common/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
plugins {
id 'multiloader-common'
id 'net.neoforged.moddev'
}

neoForge {
neoFormVersion = neo_form_version
}

dependencies {
implementation 'com.profesorfalken:jPowerShell:3.1.1'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2'
implementation 'org.jetbrains.kotlinx:kotlinx-datetime:0.7.1'
}

configurations {
commonJava {
canBeResolved = false
canBeConsumed = true
}
commonResources {
canBeResolved = false
canBeConsumed = true
}
}

artifacts {
commonJava file('src/main/kotlin')
commonResources sourceSets.main.resources.sourceDirectories.singleFile
}
24 changes: 24 additions & 0 deletions common/src/main/kotlin/com/vandendaelen/nicephore/Nicephore.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.vandendaelen.nicephore

import com.mojang.logging.LogUtils
import com.vandendaelen.nicephore.utils.TrashManager
import kotlinx.coroutines.*
import org.slf4j.Logger

object Nicephore {
const val MODID: String = "nicephore"
const val MOD_NAME: String = "Nicephore"
@JvmField
val LOGGER: Logger = LogUtils.getLogger()

private val backgroundScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)

fun startBackgroundTasks() {
backgroundScope.launch {
while (isActive) {
TrashManager.cleanupOldFiles()
delay(60 * 60 * 1000L) // 1 hour
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.vandendaelen.nicephore.client.gui

import com.vandendaelen.nicephore.Nicephore
import com.vandendaelen.nicephore.config.NicephoreConfig
import com.vandendaelen.nicephore.platform.Services
import com.vandendaelen.nicephore.utils.FilterListener
import com.vandendaelen.nicephore.utils.PlayerHelper
import net.minecraft.client.Minecraft
Expand Down Expand Up @@ -71,15 +71,15 @@ abstract class AbstractNicephoreScreen(title: Component) : Screen(title) {
}

protected fun cycleFilter(listener: FilterListener? = null) {
val nextFilter = NicephoreConfig.Client.getScreenshotFilter().next()
NicephoreConfig.Client.setScreenshotFilter(nextFilter)
val nextFilter = Services.config.getScreenshotFilter().next()
Services.config.setScreenshotFilter(nextFilter)
init()
listener?.onFilterChange(nextFilter)
}

protected fun addToolbarButtons(onFilterChange: () -> Unit) {
this.addRenderableWidget(
Button.builder(Component.translatable("nicephore.screenshot.filter", NicephoreConfig.Client.getScreenshotFilter().name)) { onFilterChange() }
Button.builder(Component.translatable("nicephore.screenshot.filter", Services.config.getScreenshotFilter().name)) { onFilterChange() }
.bounds(PADDING, PADDING, 100, BUTTON_HEIGHT).build()
)
this.addRenderableWidget(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.vandendaelen.nicephore.client.gui

import com.vandendaelen.nicephore.config.NicephoreConfig
import com.vandendaelen.nicephore.platform.Services
import com.vandendaelen.nicephore.enums.ScreenshotFilter
import com.vandendaelen.nicephore.utils.FilterListener
import com.vandendaelen.nicephore.utils.ScreenshotLoader
Expand Down Expand Up @@ -30,8 +30,8 @@ class GalleryScreen(
super.init()
selectedIndices.clear()

val sortOrder = NicephoreConfig.Client.getSortOrder()
val filter = NicephoreConfig.Client.getScreenshotFilter().predicate
val sortOrder = Services.config.getSortOrder()
val filter = Services.config.getScreenshotFilter().predicate
allScreenshots = SCREENSHOTS_DIR.listFiles(filter)
?.sortedWith(sortOrder.comparator)
?: emptyList()
Expand All @@ -46,12 +46,12 @@ class GalleryScreen(
var buttonY = SIDEBAR_PADDING + SIDEBAR_TITLE_HEIGHT

this.addRenderableWidget(
Button.builder(Component.translatable("nicephore.screenshot.filter", NicephoreConfig.Client.getScreenshotFilter().name)) { cycleFilter() }
Button.builder(Component.translatable("nicephore.screenshot.filter", Services.config.getScreenshotFilter().name)) { cycleFilter() }
.bounds(SIDEBAR_PADDING, buttonY, SIDEBAR_BUTTON_WIDTH, BUTTON_HEIGHT).build()
)
buttonY += BUTTON_HEIGHT + SIDEBAR_GAP

val sortOrder = NicephoreConfig.Client.getSortOrder()
val sortOrder = Services.config.getSortOrder()
this.addRenderableWidget(
Button.builder(Component.translatable("nicephore.sort.label", Component.translatable(sortOrder.displayKey).string)) { cycleSortOrder() }
.bounds(SIDEBAR_PADDING, buttonY, SIDEBAR_BUTTON_WIDTH, BUTTON_HEIGHT).build()
Expand Down Expand Up @@ -173,8 +173,8 @@ class GalleryScreen(
}

private fun cycleSortOrder() {
val next = NicephoreConfig.Client.getSortOrder().next()
NicephoreConfig.Client.setSortOrder(next)
val next = Services.config.getSortOrder().next()
Services.config.setSortOrder(next)
init()
}

Expand All @@ -189,7 +189,7 @@ class GalleryScreen(
}

override fun onFilterChange(filter: ScreenshotFilter) {
NicephoreConfig.Client.setScreenshotFilter(filter)
Services.config.setScreenshotFilter(filter)
init()
}

Expand Down
Loading