From b9e919731031b5884586bc6720a18b82d48912cf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 3 Apr 2026 14:27:54 +0000 Subject: [PATCH 1/3] Scaffold multi-module structure: buildSrc, common, neoforge modules with build files Agent-Logs-Url: https://github.com/LotuxPunk/Nicephore/sessions/c4e32123-ecc6-47b1-b9e9-664b878580e3 Co-authored-by: LotuxPunk <16562647+LotuxPunk@users.noreply.github.com> --- build.gradle | 129 +----------------- buildSrc/build.gradle | 12 ++ .../src/main/groovy/multiloader-common.gradle | 56 ++++++++ .../src/main/groovy/multiloader-loader.gradle | 45 ++++++ common/build.gradle | 30 ++++ .../com/vandendaelen/nicephore/Nicephore.kt | 24 ++++ .../client/gui/AbstractNicephoreScreen.kt | 0 .../client/gui/DeleteConfirmScreen.kt | 0 .../nicephore/client/gui/GalleryScreen.kt | 0 .../nicephore/client/gui/RenameScreen.kt | 0 .../nicephore/client/gui/ScreenshotScreen.kt | 0 .../client/gui/ScrollableGalleryWidget.kt | 0 .../nicephore/client/gui/SettingsScreen.kt | 0 .../nicephore/client/gui/TrashScreen.kt | 0 .../nicephore/clipboard/ClipboardManager.kt | 0 .../impl/MacOSClipboardManagerImpl.kt | 0 .../impl/WindowsClipboardManagerImpl.kt | 0 .../config/NicephoreConfigProvider.kt | 24 ++++ .../nicephore/enums/OperatingSystems.kt | 0 .../nicephore/enums/ScreenshotFilter.kt | 0 .../vandendaelen/nicephore/enums/SortOrder.kt | 0 .../nicephore/platform/Services.kt | 7 + .../nicephore/thread/InitThread.kt | 0 .../nicephore/thread/ScreenshotThread.kt | 0 .../nicephore/utils/CopyImageToClipBoard.kt | 0 .../nicephore/utils/FilterListener.kt | 0 .../nicephore/utils/PlayerHelper.kt | 0 .../vandendaelen/nicephore/utils/Reference.kt | 0 .../nicephore/utils/ScreenshotLoader.kt | 0 .../nicephore/utils/ThumbnailCache.kt | 0 .../nicephore/utils/TrashManager.kt | 0 .../com/vandendaelen/nicephore/utils/Util.kt | 0 .../assets/nicephore/lang/en_gb.json | 0 .../assets/nicephore/lang/en_us.json | 0 .../assets/nicephore/lang/fr_fr.json | 0 .../assets/nicephore/lang/ru_ru.json | 0 .../assets/nicephore/lang/tr_tr.json | 0 .../src}/main/resources/nicephore.png | Bin .../src}/main/resources/pack.mcmeta | 0 gradle.properties | 4 + neoforge/build.gradle | 85 ++++++++++++ .../nicephore/NicephoreNeoForge.kt | 18 +++ .../nicephore/client/KeyMappings.kt | 0 .../client/event/ClientGameBusEvents.kt | 0 .../client/event/ClientModBusEvents.kt | 0 .../nicephore/config/NicephoreConfig.kt | 0 .../platform/NeoForgeConfigProvider.kt | 26 ++++ .../templates/META-INF/neoforge.mods.toml | 0 settings.gradle | 7 +- .../com/vandendaelen/nicephore/Nicephore.kt | 37 ----- 50 files changed, 341 insertions(+), 163 deletions(-) create mode 100644 buildSrc/build.gradle create mode 100644 buildSrc/src/main/groovy/multiloader-common.gradle create mode 100644 buildSrc/src/main/groovy/multiloader-loader.gradle create mode 100644 common/build.gradle create mode 100644 common/src/main/kotlin/com/vandendaelen/nicephore/Nicephore.kt rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/client/gui/AbstractNicephoreScreen.kt (100%) rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/client/gui/DeleteConfirmScreen.kt (100%) rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/client/gui/GalleryScreen.kt (100%) rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/client/gui/RenameScreen.kt (100%) rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/client/gui/ScreenshotScreen.kt (100%) rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/client/gui/ScrollableGalleryWidget.kt (100%) rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/client/gui/SettingsScreen.kt (100%) rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/client/gui/TrashScreen.kt (100%) rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/clipboard/ClipboardManager.kt (100%) rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/clipboard/impl/MacOSClipboardManagerImpl.kt (100%) rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/clipboard/impl/WindowsClipboardManagerImpl.kt (100%) create mode 100644 common/src/main/kotlin/com/vandendaelen/nicephore/config/NicephoreConfigProvider.kt rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/enums/OperatingSystems.kt (100%) rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/enums/ScreenshotFilter.kt (100%) rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/enums/SortOrder.kt (100%) create mode 100644 common/src/main/kotlin/com/vandendaelen/nicephore/platform/Services.kt rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/thread/InitThread.kt (100%) rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/thread/ScreenshotThread.kt (100%) rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/utils/CopyImageToClipBoard.kt (100%) rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/utils/FilterListener.kt (100%) rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/utils/PlayerHelper.kt (100%) rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/utils/Reference.kt (100%) rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/utils/ScreenshotLoader.kt (100%) rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/utils/ThumbnailCache.kt (100%) rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/utils/TrashManager.kt (100%) rename {src => common/src}/main/kotlin/com/vandendaelen/nicephore/utils/Util.kt (100%) rename {src => common/src}/main/resources/assets/nicephore/lang/en_gb.json (100%) rename {src => common/src}/main/resources/assets/nicephore/lang/en_us.json (100%) rename {src => common/src}/main/resources/assets/nicephore/lang/fr_fr.json (100%) rename {src => common/src}/main/resources/assets/nicephore/lang/ru_ru.json (100%) rename {src => common/src}/main/resources/assets/nicephore/lang/tr_tr.json (100%) rename {src => common/src}/main/resources/nicephore.png (100%) rename {src => common/src}/main/resources/pack.mcmeta (100%) create mode 100644 neoforge/build.gradle create mode 100644 neoforge/src/main/kotlin/com/vandendaelen/nicephore/NicephoreNeoForge.kt rename {src => neoforge/src}/main/kotlin/com/vandendaelen/nicephore/client/KeyMappings.kt (100%) rename {src => neoforge/src}/main/kotlin/com/vandendaelen/nicephore/client/event/ClientGameBusEvents.kt (100%) rename {src => neoforge/src}/main/kotlin/com/vandendaelen/nicephore/client/event/ClientModBusEvents.kt (100%) rename {src => neoforge/src}/main/kotlin/com/vandendaelen/nicephore/config/NicephoreConfig.kt (100%) create mode 100644 neoforge/src/main/kotlin/com/vandendaelen/nicephore/platform/NeoForgeConfigProvider.kt rename {src => neoforge/src}/main/templates/META-INF/neoforge.mods.toml (100%) delete mode 100644 src/main/kotlin/com/vandendaelen/nicephore/Nicephore.kt diff --git a/build.gradle b/build.gradle index 8291300..a6c3149 100644 --- a/build.gradle +++ b/build.gradle @@ -1,127 +1,6 @@ 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 + // see https://kotlinlang.org/docs/releases.html for new versions + id 'org.jetbrains.kotlin.jvm' version '2.3.20' apply false } diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle new file mode 100644 index 0000000..1c07f65 --- /dev/null +++ b/buildSrc/build.gradle @@ -0,0 +1,12 @@ +plugins { + id 'groovy-gradle-plugin' +} + +repositories { + gradlePluginPortal() + mavenCentral() +} + +dependencies { + implementation 'org.jetbrains.kotlin:kotlin-gradle-plugin:2.3.20' +} diff --git a/buildSrc/src/main/groovy/multiloader-common.gradle b/buildSrc/src/main/groovy/multiloader-common.gradle new file mode 100644 index 0000000..5a0eae1 --- /dev/null +++ b/buildSrc/src/main/groovy/multiloader-common.gradle @@ -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" + } + } +} diff --git a/buildSrc/src/main/groovy/multiloader-loader.gradle b/buildSrc/src/main/groovy/multiloader-loader.gradle new file mode 100644 index 0000000..3f3794b --- /dev/null +++ b/buildSrc/src/main/groovy/multiloader-loader.gradle @@ -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) +} diff --git a/common/build.gradle b/common/build.gradle new file mode 100644 index 0000000..d655a95 --- /dev/null +++ b/common/build.gradle @@ -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 +} diff --git a/common/src/main/kotlin/com/vandendaelen/nicephore/Nicephore.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/Nicephore.kt new file mode 100644 index 0000000..3a4e593 --- /dev/null +++ b/common/src/main/kotlin/com/vandendaelen/nicephore/Nicephore.kt @@ -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 + } + } + } +} diff --git a/src/main/kotlin/com/vandendaelen/nicephore/client/gui/AbstractNicephoreScreen.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/AbstractNicephoreScreen.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/client/gui/AbstractNicephoreScreen.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/AbstractNicephoreScreen.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/client/gui/DeleteConfirmScreen.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/DeleteConfirmScreen.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/client/gui/DeleteConfirmScreen.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/DeleteConfirmScreen.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/client/gui/GalleryScreen.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/GalleryScreen.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/client/gui/GalleryScreen.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/GalleryScreen.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/client/gui/RenameScreen.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/RenameScreen.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/client/gui/RenameScreen.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/RenameScreen.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/client/gui/ScreenshotScreen.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/ScreenshotScreen.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/client/gui/ScreenshotScreen.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/ScreenshotScreen.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/client/gui/ScrollableGalleryWidget.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/ScrollableGalleryWidget.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/client/gui/ScrollableGalleryWidget.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/ScrollableGalleryWidget.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/client/gui/SettingsScreen.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/SettingsScreen.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/client/gui/SettingsScreen.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/SettingsScreen.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/client/gui/TrashScreen.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/TrashScreen.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/client/gui/TrashScreen.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/TrashScreen.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/clipboard/ClipboardManager.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/clipboard/ClipboardManager.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/clipboard/ClipboardManager.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/clipboard/ClipboardManager.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/clipboard/impl/MacOSClipboardManagerImpl.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/clipboard/impl/MacOSClipboardManagerImpl.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/clipboard/impl/MacOSClipboardManagerImpl.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/clipboard/impl/MacOSClipboardManagerImpl.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/clipboard/impl/WindowsClipboardManagerImpl.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/clipboard/impl/WindowsClipboardManagerImpl.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/clipboard/impl/WindowsClipboardManagerImpl.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/clipboard/impl/WindowsClipboardManagerImpl.kt diff --git a/common/src/main/kotlin/com/vandendaelen/nicephore/config/NicephoreConfigProvider.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/config/NicephoreConfigProvider.kt new file mode 100644 index 0000000..8a8e930 --- /dev/null +++ b/common/src/main/kotlin/com/vandendaelen/nicephore/config/NicephoreConfigProvider.kt @@ -0,0 +1,24 @@ +package com.vandendaelen.nicephore.config + +import com.vandendaelen.nicephore.enums.ScreenshotFilter +import com.vandendaelen.nicephore.enums.SortOrder + +interface NicephoreConfigProvider { + fun getCompressionLevel(): Float + fun getJPEGToggle(): Boolean + fun setJPEGToggle(value: Boolean) + fun getOptimisedOutputToggle(): Boolean + fun getShouldShowOptStatus(): Boolean + fun setShouldShowOptStatus(value: Boolean) + fun getScreenshotToClipboard(): Boolean + fun setScreenshotToClipboard(value: Boolean) + fun getScreenshotCustomMessage(): Boolean + fun setScreenshotCustomMessage(value: Boolean) + fun getPNGOptimisationLevel(): Byte + fun getScreenshotFilter(): ScreenshotFilter + fun setScreenshotFilter(filter: ScreenshotFilter) + fun getGalleryColumns(): Int + fun setGalleryColumns(value: Int) + fun getSortOrder(): SortOrder + fun setSortOrder(value: SortOrder) +} diff --git a/src/main/kotlin/com/vandendaelen/nicephore/enums/OperatingSystems.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/enums/OperatingSystems.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/enums/OperatingSystems.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/enums/OperatingSystems.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/enums/ScreenshotFilter.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/enums/ScreenshotFilter.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/enums/ScreenshotFilter.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/enums/ScreenshotFilter.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/enums/SortOrder.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/enums/SortOrder.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/enums/SortOrder.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/enums/SortOrder.kt diff --git a/common/src/main/kotlin/com/vandendaelen/nicephore/platform/Services.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/platform/Services.kt new file mode 100644 index 0000000..9be28a4 --- /dev/null +++ b/common/src/main/kotlin/com/vandendaelen/nicephore/platform/Services.kt @@ -0,0 +1,7 @@ +package com.vandendaelen.nicephore.platform + +import com.vandendaelen.nicephore.config.NicephoreConfigProvider + +object Services { + lateinit var config: NicephoreConfigProvider +} diff --git a/src/main/kotlin/com/vandendaelen/nicephore/thread/InitThread.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/thread/InitThread.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/thread/InitThread.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/thread/InitThread.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/thread/ScreenshotThread.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/thread/ScreenshotThread.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/thread/ScreenshotThread.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/thread/ScreenshotThread.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/utils/CopyImageToClipBoard.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/utils/CopyImageToClipBoard.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/utils/CopyImageToClipBoard.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/utils/CopyImageToClipBoard.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/utils/FilterListener.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/utils/FilterListener.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/utils/FilterListener.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/utils/FilterListener.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/utils/PlayerHelper.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/utils/PlayerHelper.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/utils/PlayerHelper.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/utils/PlayerHelper.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/utils/Reference.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/utils/Reference.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/utils/Reference.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/utils/Reference.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/utils/ScreenshotLoader.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/utils/ScreenshotLoader.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/utils/ScreenshotLoader.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/utils/ScreenshotLoader.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/utils/ThumbnailCache.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/utils/ThumbnailCache.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/utils/ThumbnailCache.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/utils/ThumbnailCache.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/utils/TrashManager.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/utils/TrashManager.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/utils/TrashManager.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/utils/TrashManager.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/utils/Util.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/utils/Util.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/utils/Util.kt rename to common/src/main/kotlin/com/vandendaelen/nicephore/utils/Util.kt diff --git a/src/main/resources/assets/nicephore/lang/en_gb.json b/common/src/main/resources/assets/nicephore/lang/en_gb.json similarity index 100% rename from src/main/resources/assets/nicephore/lang/en_gb.json rename to common/src/main/resources/assets/nicephore/lang/en_gb.json diff --git a/src/main/resources/assets/nicephore/lang/en_us.json b/common/src/main/resources/assets/nicephore/lang/en_us.json similarity index 100% rename from src/main/resources/assets/nicephore/lang/en_us.json rename to common/src/main/resources/assets/nicephore/lang/en_us.json diff --git a/src/main/resources/assets/nicephore/lang/fr_fr.json b/common/src/main/resources/assets/nicephore/lang/fr_fr.json similarity index 100% rename from src/main/resources/assets/nicephore/lang/fr_fr.json rename to common/src/main/resources/assets/nicephore/lang/fr_fr.json diff --git a/src/main/resources/assets/nicephore/lang/ru_ru.json b/common/src/main/resources/assets/nicephore/lang/ru_ru.json similarity index 100% rename from src/main/resources/assets/nicephore/lang/ru_ru.json rename to common/src/main/resources/assets/nicephore/lang/ru_ru.json diff --git a/src/main/resources/assets/nicephore/lang/tr_tr.json b/common/src/main/resources/assets/nicephore/lang/tr_tr.json similarity index 100% rename from src/main/resources/assets/nicephore/lang/tr_tr.json rename to common/src/main/resources/assets/nicephore/lang/tr_tr.json diff --git a/src/main/resources/nicephore.png b/common/src/main/resources/nicephore.png similarity index 100% rename from src/main/resources/nicephore.png rename to common/src/main/resources/nicephore.png diff --git a/src/main/resources/pack.mcmeta b/common/src/main/resources/pack.mcmeta similarity index 100% rename from src/main/resources/pack.mcmeta rename to common/src/main/resources/pack.mcmeta diff --git a/gradle.properties b/gradle.properties index 614dc13..2165ef4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,6 +10,10 @@ minecraft_version=26.1 minecraft_version_range=[26.1,) neo_version=26.1.0.2-beta +## This is the version of minecraft that the 'common' project uses +## https://projects.neoforged.net/neoforged/neoform +neo_form_version=26.1-1 + ## Mod Properties mod_id=nicephore mod_name=Nicéphore diff --git a/neoforge/build.gradle b/neoforge/build.gradle new file mode 100644 index 0000000..129f260 --- /dev/null +++ b/neoforge/build.gradle @@ -0,0 +1,85 @@ +plugins { + id 'multiloader-loader' + id 'net.neoforged.moddev' +} + +neoForge { + version = neo_version + + runs { + configureEach { + systemProperty 'forge.logging.markers', 'REGISTRIES' + logLevel = org.slf4j.event.Level.DEBUG + } + 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() + } + } + + mods { + "${mod_id}" { + sourceSet sourceSets.main + } + } +} + +sourceSets.main.resources { srcDir 'src/generated/resources' } + +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 + +idea { + module { + downloadSources = true + downloadJavadoc = true + } +} diff --git a/neoforge/src/main/kotlin/com/vandendaelen/nicephore/NicephoreNeoForge.kt b/neoforge/src/main/kotlin/com/vandendaelen/nicephore/NicephoreNeoForge.kt new file mode 100644 index 0000000..d1ea7ee --- /dev/null +++ b/neoforge/src/main/kotlin/com/vandendaelen/nicephore/NicephoreNeoForge.kt @@ -0,0 +1,18 @@ +package com.vandendaelen.nicephore + +import com.vandendaelen.nicephore.config.NicephoreConfig +import com.vandendaelen.nicephore.platform.NeoForgeConfigProvider +import com.vandendaelen.nicephore.platform.Services +import net.neoforged.bus.api.IEventBus +import net.neoforged.fml.ModContainer +import net.neoforged.fml.common.Mod +import net.neoforged.fml.config.ModConfig + +@Mod(Nicephore.MODID) +class NicephoreNeoForge(modEventBus: IEventBus, modContainer: ModContainer) { + init { + Services.config = NeoForgeConfigProvider() + modContainer.registerConfig(ModConfig.Type.CLIENT, NicephoreConfig.CLIENT_SPEC) + Nicephore.startBackgroundTasks() + } +} diff --git a/src/main/kotlin/com/vandendaelen/nicephore/client/KeyMappings.kt b/neoforge/src/main/kotlin/com/vandendaelen/nicephore/client/KeyMappings.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/client/KeyMappings.kt rename to neoforge/src/main/kotlin/com/vandendaelen/nicephore/client/KeyMappings.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/client/event/ClientGameBusEvents.kt b/neoforge/src/main/kotlin/com/vandendaelen/nicephore/client/event/ClientGameBusEvents.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/client/event/ClientGameBusEvents.kt rename to neoforge/src/main/kotlin/com/vandendaelen/nicephore/client/event/ClientGameBusEvents.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/client/event/ClientModBusEvents.kt b/neoforge/src/main/kotlin/com/vandendaelen/nicephore/client/event/ClientModBusEvents.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/client/event/ClientModBusEvents.kt rename to neoforge/src/main/kotlin/com/vandendaelen/nicephore/client/event/ClientModBusEvents.kt diff --git a/src/main/kotlin/com/vandendaelen/nicephore/config/NicephoreConfig.kt b/neoforge/src/main/kotlin/com/vandendaelen/nicephore/config/NicephoreConfig.kt similarity index 100% rename from src/main/kotlin/com/vandendaelen/nicephore/config/NicephoreConfig.kt rename to neoforge/src/main/kotlin/com/vandendaelen/nicephore/config/NicephoreConfig.kt diff --git a/neoforge/src/main/kotlin/com/vandendaelen/nicephore/platform/NeoForgeConfigProvider.kt b/neoforge/src/main/kotlin/com/vandendaelen/nicephore/platform/NeoForgeConfigProvider.kt new file mode 100644 index 0000000..d7e5dae --- /dev/null +++ b/neoforge/src/main/kotlin/com/vandendaelen/nicephore/platform/NeoForgeConfigProvider.kt @@ -0,0 +1,26 @@ +package com.vandendaelen.nicephore.platform + +import com.vandendaelen.nicephore.config.NicephoreConfig +import com.vandendaelen.nicephore.config.NicephoreConfigProvider +import com.vandendaelen.nicephore.enums.ScreenshotFilter +import com.vandendaelen.nicephore.enums.SortOrder + +class NeoForgeConfigProvider : NicephoreConfigProvider { + override fun getCompressionLevel(): Float = NicephoreConfig.Client.getCompressionLevel() + override fun getJPEGToggle(): Boolean = NicephoreConfig.Client.getJPEGToggle() + override fun setJPEGToggle(value: Boolean) = NicephoreConfig.Client.setJPEGToggle(value) + override fun getOptimisedOutputToggle(): Boolean = NicephoreConfig.Client.getOptimisedOutputToggle() + override fun getShouldShowOptStatus(): Boolean = NicephoreConfig.Client.getShouldShowOptStatus() + override fun setShouldShowOptStatus(value: Boolean) = NicephoreConfig.Client.setShouldShowOptStatus(value) + override fun getScreenshotToClipboard(): Boolean = NicephoreConfig.Client.getScreenshotToClipboard() + override fun setScreenshotToClipboard(value: Boolean) = NicephoreConfig.Client.setScreenshotToClipboard(value) + override fun getScreenshotCustomMessage(): Boolean = NicephoreConfig.Client.getScreenshotCustomMessage() + override fun setScreenshotCustomMessage(value: Boolean) = NicephoreConfig.Client.setScreenshotCustomMessage(value) + override fun getPNGOptimisationLevel(): Byte = NicephoreConfig.Client.getPNGOptimisationLevel() + override fun getScreenshotFilter(): ScreenshotFilter = NicephoreConfig.Client.getScreenshotFilter() + override fun setScreenshotFilter(filter: ScreenshotFilter) = NicephoreConfig.Client.setScreenshotFilter(filter) + override fun getGalleryColumns(): Int = NicephoreConfig.Client.getGalleryColumns() + override fun setGalleryColumns(value: Int) = NicephoreConfig.Client.setGalleryColumns(value) + override fun getSortOrder(): SortOrder = NicephoreConfig.Client.getSortOrder() + override fun setSortOrder(value: SortOrder) = NicephoreConfig.Client.setSortOrder(value) +} diff --git a/src/main/templates/META-INF/neoforge.mods.toml b/neoforge/src/main/templates/META-INF/neoforge.mods.toml similarity index 100% rename from src/main/templates/META-INF/neoforge.mods.toml rename to neoforge/src/main/templates/META-INF/neoforge.mods.toml diff --git a/settings.gradle b/settings.gradle index aa40d50..9b92783 100644 --- a/settings.gradle +++ b/settings.gradle @@ -7,4 +7,9 @@ pluginManagement { plugins { id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0' -} \ No newline at end of file +} + +// This should match the folder name of the project, or else IDEA may complain +rootProject.name = 'Nicephore' +include('common') +include('neoforge') \ No newline at end of file diff --git a/src/main/kotlin/com/vandendaelen/nicephore/Nicephore.kt b/src/main/kotlin/com/vandendaelen/nicephore/Nicephore.kt deleted file mode 100644 index 815c5f4..0000000 --- a/src/main/kotlin/com/vandendaelen/nicephore/Nicephore.kt +++ /dev/null @@ -1,37 +0,0 @@ -package com.vandendaelen.nicephore - -import com.mojang.logging.LogUtils -import com.vandendaelen.nicephore.config.NicephoreConfig -import com.vandendaelen.nicephore.utils.TrashManager -import kotlinx.coroutines.* -import net.neoforged.bus.api.IEventBus -import net.neoforged.fml.ModContainer -import net.neoforged.fml.common.Mod -import net.neoforged.fml.config.ModConfig -import org.slf4j.Logger - -@Mod(Nicephore.MODID) -class Nicephore(modEventBus: IEventBus, modContainer: ModContainer) { - companion object { - 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 - } - } - } - } - - init { - modContainer.registerConfig(ModConfig.Type.CLIENT, NicephoreConfig.CLIENT_SPEC) - startBackgroundTasks() - } -} From 2a32640838c5887269b3a7fcb9b11afbdf2d3757 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 3 Apr 2026 14:41:25 +0000 Subject: [PATCH 2/3] Update common source files to use Services.config abstraction instead of NicephoreConfig.Client Agent-Logs-Url: https://github.com/LotuxPunk/Nicephore/sessions/c4e32123-ecc6-47b1-b9e9-664b878580e3 Co-authored-by: LotuxPunk <16562647+LotuxPunk@users.noreply.github.com> --- .../client/gui/AbstractNicephoreScreen.kt | 8 +++---- .../nicephore/client/gui/GalleryScreen.kt | 16 ++++++------- .../nicephore/client/gui/ScreenshotScreen.kt | 4 ++-- .../client/gui/ScrollableGalleryWidget.kt | 6 ++--- .../nicephore/client/gui/SettingsScreen.kt | 24 +++++++++---------- .../nicephore/thread/ScreenshotThread.kt | 20 ++++++++-------- .../com/vandendaelen/nicephore/utils/Util.kt | 4 ++-- 7 files changed, 41 insertions(+), 41 deletions(-) diff --git a/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/AbstractNicephoreScreen.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/AbstractNicephoreScreen.kt index 4b9089f..d74d774 100644 --- a/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/AbstractNicephoreScreen.kt +++ b/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/AbstractNicephoreScreen.kt @@ -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 @@ -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( diff --git a/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/GalleryScreen.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/GalleryScreen.kt index 74a3c5b..787693e 100644 --- a/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/GalleryScreen.kt +++ b/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/GalleryScreen.kt @@ -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 @@ -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() @@ -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() @@ -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() } @@ -189,7 +189,7 @@ class GalleryScreen( } override fun onFilterChange(filter: ScreenshotFilter) { - NicephoreConfig.Client.setScreenshotFilter(filter) + Services.config.setScreenshotFilter(filter) init() } diff --git a/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/ScreenshotScreen.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/ScreenshotScreen.kt index 2037547..a9f9370 100644 --- a/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/ScreenshotScreen.kt +++ b/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/ScreenshotScreen.kt @@ -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.OperatingSystems import com.vandendaelen.nicephore.utils.CopyImageToClipBoard import com.vandendaelen.nicephore.utils.FilterListener @@ -30,7 +30,7 @@ class ScreenshotScreen @JvmOverloads constructor( override fun init() { super.init() - val filter = NicephoreConfig.Client.getScreenshotFilter().predicate + val filter = Services.config.getScreenshotFilter().predicate screenshots = ArrayList( SCREENSHOTS_DIR.listFiles(filter) ?.sortedWith(Comparator.comparingLong(File::lastModified).reversed()) diff --git a/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/ScrollableGalleryWidget.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/ScrollableGalleryWidget.kt index 78321a7..ae8f92f 100644 --- a/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/ScrollableGalleryWidget.kt +++ b/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/ScrollableGalleryWidget.kt @@ -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.ScreenshotLoader import com.vandendaelen.nicephore.utils.Util @@ -42,7 +42,7 @@ class ScrollableGalleryWidget( private val separatorLabels: Map init { - val configColumns = NicephoreConfig.Client.getGalleryColumns() + val configColumns = Services.config.getGalleryColumns() val availableWidth = width - SCROLLBAR_WIDTH - GRID_PADDING columns = if (configColumns in 2..6) configColumns else (availableWidth / (TARGET_THUMB_WIDTH + GRID_PADDING)).coerceIn(2, 6) @@ -175,7 +175,7 @@ class ScrollableGalleryWidget( ) } - if (NicephoreConfig.Client.getScreenshotFilter() == ScreenshotFilter.BOTH) { + if (Services.config.getScreenshotFilter() == ScreenshotFilter.BOTH) { guiGraphics.text(font, FilenameUtils.getExtension(file.name).uppercase(), slotX + 2, slotY + imageHeight - 12, Color.WHITE.rgb) } diff --git a/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/SettingsScreen.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/SettingsScreen.kt index 6b90564..cdd05ca 100644 --- a/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/SettingsScreen.kt +++ b/common/src/main/kotlin/com/vandendaelen/nicephore/client/gui/SettingsScreen.kt @@ -1,6 +1,6 @@ package com.vandendaelen.nicephore.client.gui -import com.vandendaelen.nicephore.config.NicephoreConfig +import com.vandendaelen.nicephore.platform.Services import net.minecraft.client.Minecraft import net.minecraft.client.gui.GuiGraphicsExtractor import net.minecraft.client.gui.components.Button @@ -32,30 +32,30 @@ class SettingsScreen(private val onSettingsClosed: () -> Unit = {}) : AbstractNi ) this.addRenderableWidget( Button.builder( - Component.translatable("nicephore.screenshot.showOptimisationStatus", if (NicephoreConfig.Client.getShouldShowOptStatus()) "ON" else "OFF") - ) { toggleSetting { NicephoreConfig.Client.setShouldShowOptStatus(!NicephoreConfig.Client.getShouldShowOptStatus()) } } + Component.translatable("nicephore.screenshot.showOptimisationStatus", if (Services.config.getShouldShowOptStatus()) "ON" else "OFF") + ) { toggleSetting { Services.config.setShouldShowOptStatus(!Services.config.getShouldShowOptStatus()) } } .bounds(startingLine, contentStartY, 300, BUTTON_HEIGHT).build() ) this.addRenderableWidget( Button.builder( - Component.translatable("nicephore.screenshot.makeJPEGs", if (NicephoreConfig.Client.getJPEGToggle()) "ON" else "OFF") - ) { toggleSetting { NicephoreConfig.Client.setJPEGToggle(!NicephoreConfig.Client.getJPEGToggle()) } } + Component.translatable("nicephore.screenshot.makeJPEGs", if (Services.config.getJPEGToggle()) "ON" else "OFF") + ) { toggleSetting { Services.config.setJPEGToggle(!Services.config.getJPEGToggle()) } } .bounds(startingLine, contentStartY + itemHeight, 300, BUTTON_HEIGHT).build() ) this.addRenderableWidget( Button.builder( - Component.translatable("nicephore.screenshot.screenshotCustomMessage", if (NicephoreConfig.Client.getScreenshotCustomMessage()) "ON" else "OFF") - ) { toggleSetting { NicephoreConfig.Client.setScreenshotCustomMessage(!NicephoreConfig.Client.getScreenshotCustomMessage()) } } + Component.translatable("nicephore.screenshot.screenshotCustomMessage", if (Services.config.getScreenshotCustomMessage()) "ON" else "OFF") + ) { toggleSetting { Services.config.setScreenshotCustomMessage(!Services.config.getScreenshotCustomMessage()) } } .bounds(startingLine, contentStartY + 2 * itemHeight, 300, BUTTON_HEIGHT).build() ) this.addRenderableWidget( Button.builder( - Component.translatable("nicephore.screenshot.setScreenshotToClipboard", if (NicephoreConfig.Client.getScreenshotToClipboard()) "ON" else "OFF") - ) { toggleSetting { NicephoreConfig.Client.setScreenshotToClipboard(!NicephoreConfig.Client.getScreenshotToClipboard()) } } + Component.translatable("nicephore.screenshot.setScreenshotToClipboard", if (Services.config.getScreenshotToClipboard()) "ON" else "OFF") + ) { toggleSetting { Services.config.setScreenshotToClipboard(!Services.config.getScreenshotToClipboard()) } } .bounds(startingLine, contentStartY + 3 * itemHeight, 300, BUTTON_HEIGHT).build() ) - val currentColumns = NicephoreConfig.Client.getGalleryColumns() + val currentColumns = Services.config.getGalleryColumns() val label = if (currentColumns == 0) "Auto" else "$currentColumns" this.addRenderableWidget( Button.builder( @@ -83,13 +83,13 @@ class SettingsScreen(private val onSettingsClosed: () -> Unit = {}) : AbstractNi } private fun cycleGalleryColumns() { - val current = NicephoreConfig.Client.getGalleryColumns() + val current = Services.config.getGalleryColumns() val next = when (current) { 0 -> 2 in 2..5 -> current + 1 else -> 0 } - NicephoreConfig.Client.setGalleryColumns(next) + Services.config.setGalleryColumns(next) refreshWidgets() } diff --git a/common/src/main/kotlin/com/vandendaelen/nicephore/thread/ScreenshotThread.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/thread/ScreenshotThread.kt index 4edfe7b..9b3e344 100644 --- a/common/src/main/kotlin/com/vandendaelen/nicephore/thread/ScreenshotThread.kt +++ b/common/src/main/kotlin/com/vandendaelen/nicephore/thread/ScreenshotThread.kt @@ -2,7 +2,7 @@ package com.vandendaelen.nicephore.thread import com.mojang.blaze3d.platform.NativeImage import com.vandendaelen.nicephore.Nicephore -import com.vandendaelen.nicephore.config.NicephoreConfig +import com.vandendaelen.nicephore.platform.Services import com.vandendaelen.nicephore.utils.CopyImageToClipBoard import com.vandendaelen.nicephore.utils.PlayerHelper import com.vandendaelen.nicephore.utils.Reference @@ -39,12 +39,12 @@ class ScreenshotThread( val result = BufferedImage(png.width, png.height, BufferedImage.TYPE_INT_RGB) result.createGraphics().drawImage(png, 0, 0, Color.WHITE, null) - if (NicephoreConfig.Client.getJPEGToggle()) { + if (Services.config.getJPEGToggle()) { val writer = ImageIO.getImageWritersByFormatName("jpg").next() val params = writer.defaultWriteParam params.compressionMode = ImageWriteParam.MODE_EXPLICIT params.progressiveMode = ImageWriteParam.MODE_DEFAULT - params.compressionQuality = NicephoreConfig.Client.getCompressionLevel() + params.compressionQuality = Services.config.getCompressionLevel() FileImageOutputStream(jpegFile).use { outputStream -> writer.output = outputStream writer.write(null, IIOImage(result, null, null), params) @@ -52,13 +52,13 @@ class ScreenshotThread( } } - if (NicephoreConfig.Client.getOptimisedOutputToggle()) { - val shouldShowOptStatus = NicephoreConfig.Client.getShouldShowOptStatus() + if (Services.config.getOptimisedOutputToggle()) { + val shouldShowOptStatus = Services.config.getShouldShowOptStatus() if (shouldShowOptStatus) { PlayerHelper.sendHotbarMessage(Component.translatable("nicephore.screenshot.optimize")) } - if (NicephoreConfig.Client.getJPEGToggle()) { + if (Services.config.getJPEGToggle()) { try { val ect = File("mods${File.separator}nicephore${File.separator}${Reference.File.ECT}") val cmd = MessageFormat.format(Reference.Command.ECT, ect, jpegFile) @@ -71,7 +71,7 @@ class ScreenshotThread( try { val oxipng = File("mods${File.separator}nicephore${File.separator}${Reference.File.OXIPNG}") val pngFile = File(screenshot.parentFile, screenshot.name) - val cmd = MessageFormat.format(Reference.Command.OXIPNG, oxipng, NicephoreConfig.Client.getPNGOptimisationLevel(), pngFile) + val cmd = MessageFormat.format(Reference.Command.OXIPNG, oxipng, Services.config.getPNGOptimisationLevel(), pngFile) ProcessBuilder(cmd.split(" ")).start().waitFor() } catch (e: Exception) { Nicephore.LOGGER.warn("oxipng not found or failed, skipping PNG optimization", e) @@ -84,8 +84,8 @@ class ScreenshotThread( CopyImageToClipBoard.setLastScreenshot(screenshot) - if (NicephoreConfig.Client.getScreenshotCustomMessage()) { - if (NicephoreConfig.Client.getScreenshotToClipboard()) { + if (Services.config.getScreenshotCustomMessage()) { + if (Services.config.getScreenshotToClipboard()) { if (CopyImageToClipBoard.copyLastScreenshot()) { PlayerHelper.sendMessage( Component.translatable("nicephore.clipboard.success").withStyle(ChatFormatting.GREEN) @@ -119,7 +119,7 @@ class ScreenshotThread( Component.translatable("nicephore.screenshot.success", screenshot.name.replace(".png", "")) ) - if (NicephoreConfig.Client.getJPEGToggle()) { + if (Services.config.getJPEGToggle()) { PlayerHelper.sendMessage( Component.translatable("nicephore.screenshot.options", pngComponent, jpgComponent, folderComponent) ) diff --git a/common/src/main/kotlin/com/vandendaelen/nicephore/utils/Util.kt b/common/src/main/kotlin/com/vandendaelen/nicephore/utils/Util.kt index 175e837..0936fb2 100644 --- a/common/src/main/kotlin/com/vandendaelen/nicephore/utils/Util.kt +++ b/common/src/main/kotlin/com/vandendaelen/nicephore/utils/Util.kt @@ -2,7 +2,7 @@ package com.vandendaelen.nicephore.utils import com.mojang.blaze3d.platform.NativeImage import com.vandendaelen.nicephore.Nicephore -import com.vandendaelen.nicephore.config.NicephoreConfig +import com.vandendaelen.nicephore.platform.Services import kotlinx.datetime.Instant import kotlinx.datetime.TimeZone import kotlinx.datetime.toLocalDateTime @@ -41,7 +41,7 @@ object Util { fun getBatchOfFiles(toSkip: Long, toTake: Long, directory: File): List { return try { Files.list(directory.toPath()).use { stream -> - val filter = NicephoreConfig.Client.getScreenshotFilter().predicate + val filter = Services.config.getScreenshotFilter().predicate stream .filter { path -> !Files.isDirectory(path) && filter.accept(path.toFile(), path.fileName.toString()) } .sequential() From 0b6f5fca0019adcf9c0cac628a4098e1249b5922 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 3 Apr 2026 14:49:19 +0000 Subject: [PATCH 3/3] Fix root build.gradle - remove Kotlin plugin declaration (managed via buildSrc), add idea plugin to neoforge Agent-Logs-Url: https://github.com/LotuxPunk/Nicephore/sessions/c4e32123-ecc6-47b1-b9e9-664b878580e3 Co-authored-by: LotuxPunk <16562647+LotuxPunk@users.noreply.github.com> --- build.gradle | 2 -- neoforge/build.gradle | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index a6c3149..da4b49f 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,4 @@ plugins { // see https://projects.neoforged.net/neoforged/moddevgradle for new versions id 'net.neoforged.moddev' version '2.0.141' apply false - // see https://kotlinlang.org/docs/releases.html for new versions - id 'org.jetbrains.kotlin.jvm' version '2.3.20' apply false } diff --git a/neoforge/build.gradle b/neoforge/build.gradle index 129f260..c418833 100644 --- a/neoforge/build.gradle +++ b/neoforge/build.gradle @@ -1,6 +1,7 @@ plugins { id 'multiloader-loader' id 'net.neoforged.moddev' + id 'idea' } neoForge {