From 8056c947e484420976a090288269ec43528b56d6 Mon Sep 17 00:00:00 2001 From: HypherionSA Date: Sat, 17 Jan 2026 21:13:41 +0200 Subject: [PATCH 1/8] [CHORE] Update to Gradle 8.14 --- gradle/wrapper/gradle-wrapper.jar | Bin 43462 -> 43764 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 12 ++++++----- gradlew.bat | 26 ++++++++++++----------- 4 files changed, 22 insertions(+), 18 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index d64cd4917707c1f8861d8cb53dd15194d4248596..1b33c55baabb587c669f562ae36f953de2481846 100644 GIT binary patch delta 34753 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%0AF=STgWRWL+V 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 W(m*lz*HoBlEiM*bU{am~Dx&}eeNGnu diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1af9e09..ca025c8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 1aa94a4..23d15a9 100644 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -84,7 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -112,7 +114,7 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar +CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -203,7 +205,7 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. @@ -211,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index 93e3f59..db3a6ac 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @@ -43,11 +45,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,22 +59,22 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar +set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell From a978df5d01b6319e7429b67af4296ef78a2d8a06 Mon Sep 17 00:00:00 2001 From: HypherionSA Date: Sat, 17 Jan 2026 21:32:38 +0200 Subject: [PATCH 2/8] [FEAT] Support uploading Hytale Plugins to CurseForge --- gradle.properties | 10 ++--- .../plugin/ModPublisherGradleExtension.java | 4 ++ .../modpublisher/tasks/CurseUploadTask.java | 43 +++++++++++-------- .../modpublisher/util/UploadPreChecks.java | 4 +- 4 files changed, 35 insertions(+), 26 deletions(-) diff --git a/gradle.properties b/gradle.properties index e4ccbe5..87e0a4d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,13 +1,13 @@ version_major=2 -version_minor=1 -version_patch=8 -version_build=4 +version_minor=2 +version_patch=0 +version_build=0 release_type=snapshot # Dependencies -curse4j=1.0.12 +curse4j=1.0.13 modrinth4j=2.2.0 -github=1.318 +github=1.330 mavenart=4.0.0-alpha-10 junit=5.10.1 lombok=1.18.38 diff --git a/src/main/java/com/hypherionmc/modpublisher/plugin/ModPublisherGradleExtension.java b/src/main/java/com/hypherionmc/modpublisher/plugin/ModPublisherGradleExtension.java index 1a0c771..766d2fd 100644 --- a/src/main/java/com/hypherionmc/modpublisher/plugin/ModPublisherGradleExtension.java +++ b/src/main/java/com/hypherionmc/modpublisher/plugin/ModPublisherGradleExtension.java @@ -117,6 +117,8 @@ public class ModPublisherGradleExtension { @Getter private final Property isManualRelease; + @Getter private final Property gameType; + // Proxy Config @Getter private final ProxyConfig proxyConfig; @@ -140,6 +142,7 @@ public ModPublisherGradleExtension(Project project) { this.artifacts = new HashMap<>(); this.artifact = project.getObjects().property(Object.class); this.isManualRelease = project.getObjects().property(Boolean.class).convention(false); + this.gameType = project.getObjects().property(String.class).convention("minecraft"); // GitHub config this.github = new GithubConfig(); @@ -399,6 +402,7 @@ public void copyFrom(ModPublisherGradleExtension other, SourceSet sourceSet) { this.useModrinthStaging.convention(other.useModrinthStaging); this.additionalFiles.convention(other.additionalFiles); this.javaVersions.convention(other.javaVersions); + this.gameType.convention(other.gameType); if (other.artifacts != null && !other.artifacts.isEmpty()) { if (this.artifacts == null) this.artifacts = new HashMap<>(); diff --git a/src/main/java/com/hypherionmc/modpublisher/tasks/CurseUploadTask.java b/src/main/java/com/hypherionmc/modpublisher/tasks/CurseUploadTask.java index 7b79f9f..5e6c4e9 100644 --- a/src/main/java/com/hypherionmc/modpublisher/tasks/CurseUploadTask.java +++ b/src/main/java/com/hypherionmc/modpublisher/tasks/CurseUploadTask.java @@ -13,6 +13,7 @@ import me.hypherionmc.curseupload.CurseUploadApi; import me.hypherionmc.curseupload.constants.CurseChangelogType; import me.hypherionmc.curseupload.constants.CurseReleaseType; +import me.hypherionmc.curseupload.constants.GameType; import me.hypherionmc.curseupload.requests.CurseArtifact; import org.apache.maven.artifact.versioning.DefaultArtifactVersion; import org.gradle.api.DefaultTask; @@ -64,6 +65,7 @@ public void upload() throws Exception { // Create the API Client and pass the Gradle logger as logger uploadApi = new CurseUploadApi(extension.getApiKeys().getCurseforge(), project.getLogger()); + uploadApi.setGameType(extension.getGameType().get().equalsIgnoreCase("minecraft") ? GameType.MINECRAFT : GameType.HYTALE); // Enable debug mode if required uploadApi.setDebug(extension.getDebug().get()); @@ -112,26 +114,28 @@ public void upload() throws Exception { } } - for (String modLoader : extension.getLoaders().get()) { - // Replace `modloader` with `risugamis-modloader` - if (modLoader.equalsIgnoreCase("modloader")) { - artifact.modLoader("risugami's modloader"); - continue; - } - - // Replace `flint` with `flint loader` - if (modLoader.equalsIgnoreCase("flint")) { - artifact.modLoader("flint loader"); - continue; + if (uploadApi.getGameType() == GameType.MINECRAFT) { + for (String modLoader : extension.getLoaders().get()) { + // Replace `modloader` with `risugamis-modloader` + if (modLoader.equalsIgnoreCase("modloader")) { + artifact.modLoader("risugami's modloader"); + continue; + } + + // Replace `flint` with `flint loader` + if (modLoader.equalsIgnoreCase("flint")) { + artifact.modLoader("flint loader"); + continue; + } + + // No changes needed, pass the modloader along + artifact.modLoader(modLoader); } - - // No changes needed, pass the modloader along - artifact.modLoader(modLoader); } // Back to our regularly scheduled code // Add Curse Environment tags if they are specified - if (extension.getCurseEnvironment().isPresent() && !extension.getCurseEnvironment().get().isEmpty()) { + if (extension.getCurseEnvironment().isPresent() && !extension.getCurseEnvironment().get().isEmpty() && uploadApi.getGameType() == GameType.MINECRAFT) { String env = extension.getCurseEnvironment().get().toLowerCase(); switch (env) { @@ -142,14 +146,13 @@ public void upload() throws Exception { artifact.addGameVersion("server"); break; default: - case "both": artifact.addGameVersion("client"); artifact.addGameVersion("server"); break; } } - if (extension.getJavaVersions().isPresent() && !extension.getJavaVersions().get().isEmpty()) { + if (extension.getJavaVersions().isPresent() && !extension.getJavaVersions().get().isEmpty() && uploadApi.getGameType() == GameType.MINECRAFT) { for (JavaVersion javaVersion : extension.getJavaVersions().get()) { artifact.javaVersion("Java " + javaVersion.getMajorVersion()); } @@ -165,7 +168,7 @@ public void upload() throws Exception { artifact.manualRelease(); } - if (extension.getCurseDepends() != null) { + if (extension.getCurseDepends() != null && uploadApi.getGameType() == GameType.MINECRAFT) { extension.getCurseDepends().getRequired().get().forEach(artifact::requirement); extension.getCurseDepends().getOptional().get().forEach(artifact::optional); extension.getCurseDepends().getIncompatible().get().forEach(artifact::incompatibility); @@ -179,7 +182,9 @@ public void upload() throws Exception { } } - UploadPreChecks.checkEmptyJar(extension, uploadFile, extension.getLoaders().get()); + if (uploadApi.getGameType() == GameType.MINECRAFT) { + UploadPreChecks.checkEmptyJar(extension, uploadFile, extension.getLoaders().get()); + } // If debug mode is enabled, this will only log the JSON that will be sent and // will not actually upload the file diff --git a/src/main/java/com/hypherionmc/modpublisher/util/UploadPreChecks.java b/src/main/java/com/hypherionmc/modpublisher/util/UploadPreChecks.java index 7264d16..201a449 100644 --- a/src/main/java/com/hypherionmc/modpublisher/util/UploadPreChecks.java +++ b/src/main/java/com/hypherionmc/modpublisher/util/UploadPreChecks.java @@ -43,7 +43,7 @@ public static boolean canUploadCurse(Project project, ModPublisherGradleExtensio // Check that both the Curseforge API key and Project ID is defined if (extension.getApiKeys() != null && !extension.getApiKeys().getCurseforge().isEmpty()) { if (!extension.getCurseID().isPresent() || extension.getCurseID().get().isEmpty()) { - throw new Exception("Found Curseforge API token, but curseID is not defined"); + throw new Exception("Found CurseForge API token, but curseID is not defined"); } else { return true; } @@ -56,7 +56,7 @@ public static boolean canUploadModrinth(Project project, ModPublisherGradleExten return false; if (StringUtils.isBlank(extension.getProjectVersion().getOrNull())) { - throw new Exception("Version is not defined. This is REQUIRED by modrinth"); + throw new Exception("Version is not defined. This is REQUIRED by Modrinth"); } // Check that both the Modrinth API key and Project ID is defined From e054357a20e83a6dadff7694645ca9e6bbc14bff Mon Sep 17 00:00:00 2001 From: HypherionSA Date: Sat, 17 Jan 2026 21:35:17 +0200 Subject: [PATCH 3/8] [FEAT] Skip Modrinth Upload task for Hytale --- .../hypherionmc/modpublisher/tasks/ModrinthPublishTask.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/hypherionmc/modpublisher/tasks/ModrinthPublishTask.java b/src/main/java/com/hypherionmc/modpublisher/tasks/ModrinthPublishTask.java index 230ae5f..1eb20e8 100644 --- a/src/main/java/com/hypherionmc/modpublisher/tasks/ModrinthPublishTask.java +++ b/src/main/java/com/hypherionmc/modpublisher/tasks/ModrinthPublishTask.java @@ -55,6 +55,11 @@ public ModrinthPublishTask(Project project, ModPublisherGradleExtension extensio */ @TaskAction public void upload() throws Exception { + if (extension.getGameType().get() == "hytale") { + project.getLogger().lifecycle("Hytale Plugins are not supported by Modrinth. Skipping..."); + return; + } + if (extension.getSourceSet() == null) { project.getLogger().lifecycle("Uploading to Modrinth"); } else { From 4edd5b6dbe8fd5a8a98b1c165f183e40a82ed32f Mon Sep 17 00:00:00 2001 From: HypherionSA Date: Sat, 17 Jan 2026 22:21:06 +0200 Subject: [PATCH 4/8] [FEAT] Initial Support for Modtale --- .../hypherionmc/modpublisher/Constants.java | 1 + .../plugin/ModPublisherGradleExtension.java | 15 +++ .../plugin/ModPublisherPlugin.java | 23 +++- .../modpublisher/properties/Platform.java | 3 +- .../modpublisher/tasks/ModtaleUploadTask.java | 92 ++++++++++++++++ .../modpublisher/util/UploadPreChecks.java | 19 ++++ .../util/modtale/ModtaleApiClient.java | 102 ++++++++++++++++++ .../util/modtale/meta/ModtaleMetadata.java | 59 ++++++++++ 8 files changed, 310 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/hypherionmc/modpublisher/tasks/ModtaleUploadTask.java create mode 100644 src/main/java/com/hypherionmc/modpublisher/util/modtale/ModtaleApiClient.java create mode 100644 src/main/java/com/hypherionmc/modpublisher/util/modtale/meta/ModtaleMetadata.java diff --git a/src/main/java/com/hypherionmc/modpublisher/Constants.java b/src/main/java/com/hypherionmc/modpublisher/Constants.java index 713f71a..ceab201 100644 --- a/src/main/java/com/hypherionmc/modpublisher/Constants.java +++ b/src/main/java/com/hypherionmc/modpublisher/Constants.java @@ -17,6 +17,7 @@ public class Constants { public static final String GITHUB_TASK = "publishGitHub"; public static final String MODRINTH_TASK = "publishModrinth"; public static final String NIGHTBLOOM_TASK = "publishNightbloom"; + public static final String MODTALE_TASK = "publishModtale"; public static final String TASK_GROUP = "publishing"; public static final String EXTENSION_NAME = "publisher"; public static final String INTERNAL_TASK_GROUP = "modpublisher"; diff --git a/src/main/java/com/hypherionmc/modpublisher/plugin/ModPublisherGradleExtension.java b/src/main/java/com/hypherionmc/modpublisher/plugin/ModPublisherGradleExtension.java index 766d2fd..4c2b957 100644 --- a/src/main/java/com/hypherionmc/modpublisher/plugin/ModPublisherGradleExtension.java +++ b/src/main/java/com/hypherionmc/modpublisher/plugin/ModPublisherGradleExtension.java @@ -57,6 +57,9 @@ public class ModPublisherGradleExtension { // GitHub Repo. username/repo or URL @Getter private final Property githubRepo; + // Modtale Project ID + @Getter private final Property modtaleID; + // Type of release. Valid entries: release, beta, alpha @Getter private final Property versionType; @@ -131,6 +134,7 @@ public ModPublisherGradleExtension(Project project) { this.modrinthID = project.getObjects().property(String.class); this.nightbloomID = project.getObjects().property(String.class); this.githubRepo = project.getObjects().property(String.class); + this.modtaleID = project.getObjects().property(String.class); this.versionType = project.getObjects().property(String.class).convention("release"); this.changelog = project.getObjects().property(Object.class); this.version = project.getObjects().property(String.class); @@ -387,6 +391,7 @@ public void copyFrom(ModPublisherGradleExtension other, SourceSet sourceSet) { this.modrinthID.convention(other.modrinthID); this.nightbloomID.convention(other.nightbloomID); this.githubRepo.convention(other.githubRepo); + this.modtaleID.convention(other.modtaleID); this.versionType.convention(other.versionType); this.changelog.convention(other.changelog); this.version.convention(other.version); @@ -461,6 +466,7 @@ public static class ApiKeys { private String modrinth = ""; private String github = ""; private String nightbloom = ""; + private String modtale = ""; /** * Mostly for Kotlin support @@ -497,6 +503,15 @@ public void github(String github) { public void nightbloom(String nightbloom) { this.nightbloom = nightbloom; } + + /** + * Mostly for Kotlin support + * Set the Modtale API key + * @param modtale The API Key + */ + public void modtale(String modtale) { + this.modtale = modtale; + } } /** diff --git a/src/main/java/com/hypherionmc/modpublisher/plugin/ModPublisherPlugin.java b/src/main/java/com/hypherionmc/modpublisher/plugin/ModPublisherPlugin.java index fc6bf38..36eb1fe 100644 --- a/src/main/java/com/hypherionmc/modpublisher/plugin/ModPublisherPlugin.java +++ b/src/main/java/com/hypherionmc/modpublisher/plugin/ModPublisherPlugin.java @@ -57,6 +57,10 @@ public void apply(@Nonnull Project project) { nightbloomUploadTask.setDescription("Upload your mod to NightBloom"); nightbloomUploadTask.setGroup(TASK_GROUP); + final Task modtaleUploadTask = project.getTasks().create(MODTALE_TASK, ModtaleUploadTask.class, project, extension); + modtaleUploadTask.setDescription("Upload your mod to Modtale"); + modtaleUploadTask.setGroup(TASK_GROUP); + project.getPlugins().withId("java", p -> { Object maybeContainer = project.getExtensions().getByName("sourceSets"); @@ -91,6 +95,10 @@ public void apply(@Nonnull Project project) { ssNightbloom.setDescription("Upload '" + ssName + "' to NightBloom"); ssNightbloom.setGroup(INTERNAL_TASK_GROUP); + final Task ssmodtaleUploadTask = project.getTasks().create(MODTALE_TASK, ModtaleUploadTask.class, project, extension); + ssmodtaleUploadTask.setDescription("Upload '" + ssName + "' to Modtale"); + ssmodtaleUploadTask.setGroup(TASK_GROUP); + project.afterEvaluate(c -> { ssExt.copyFrom(extension, ss); @@ -100,10 +108,11 @@ public void apply(@Nonnull Project project) { ssGithub.setEnabled(false); ssModrinth.setEnabled(false); ssNightbloom.setEnabled(false); + ssmodtaleUploadTask.setEnabled(false); return; } - doPreChecks(project, ssExt, ssCurse, ssModrinth, ssGithub, ssNightbloom, ssUploadTask); + doPreChecks(project, ssExt, ssCurse, ssModrinth, ssGithub, ssNightbloom, ssUploadTask, ssmodtaleUploadTask); uploadTask.dependsOn(ssUploadTask); }); }); @@ -125,11 +134,11 @@ public void apply(@Nonnull Project project) { project.getLogger().lifecycle("Added Proxy Information"); } - doPreChecks(project, extension, curseUploadTask, modrinthUploadTask, gitHubUploadTask, nightbloomUploadTask, uploadTask); + doPreChecks(project, extension, curseUploadTask, modrinthUploadTask, gitHubUploadTask, nightbloomUploadTask, uploadTask, modtaleUploadTask); }); } - private void doPreChecks(Project project, ModPublisherGradleExtension extension, Task curseUploadTask, Task modrinthUploadTask, Task gitHubUploadTask, Task nightbloomUploadTask, Task uploadTask) { + private void doPreChecks(Project project, ModPublisherGradleExtension extension, Task curseUploadTask, Task modrinthUploadTask, Task gitHubUploadTask, Task nightbloomUploadTask, Task uploadTask, Task modtaleTask) { try { if (UploadPreChecks.canUploadCurse(project, extension)) { Object artifactObject = CommonUtil.getPlatformArtifact(Platform.CURSEFORGE, extension); @@ -160,6 +169,14 @@ private void doPreChecks(Project project, ModPublisherGradleExtension extension, resolveInputTask(project, artifactObject, nightbloomUploadTask); uploadTask.dependsOn(nightbloomUploadTask); } + + try { + if (UploadPreChecks.canUploadModtale(project, extension)) { + Object artifactObject = CommonUtil.getPlatformArtifact(Platform.MODTALE, extension); + resolveInputTask(project, artifactObject, modtaleTask); + uploadTask.dependsOn(modtaleTask); + } + } catch (Exception ignored) {} } catch (Exception ignored) {} } diff --git a/src/main/java/com/hypherionmc/modpublisher/properties/Platform.java b/src/main/java/com/hypherionmc/modpublisher/properties/Platform.java index 2ea2b3c..49fcfb5 100644 --- a/src/main/java/com/hypherionmc/modpublisher/properties/Platform.java +++ b/src/main/java/com/hypherionmc/modpublisher/properties/Platform.java @@ -14,5 +14,6 @@ public enum Platform { CURSEFORGE, MODRINTH, GITHUB, - NIGHTBLOOM + NIGHTBLOOM, + MODTALE } diff --git a/src/main/java/com/hypherionmc/modpublisher/tasks/ModtaleUploadTask.java b/src/main/java/com/hypherionmc/modpublisher/tasks/ModtaleUploadTask.java new file mode 100644 index 0000000..f9e86e7 --- /dev/null +++ b/src/main/java/com/hypherionmc/modpublisher/tasks/ModtaleUploadTask.java @@ -0,0 +1,92 @@ +package com.hypherionmc.modpublisher.tasks; + +import com.hypherionmc.modpublisher.plugin.ModPublisherGradleExtension; +import com.hypherionmc.modpublisher.properties.Platform; +import com.hypherionmc.modpublisher.util.CommonUtil; +import com.hypherionmc.modpublisher.util.UploadPreChecks; +import com.hypherionmc.modpublisher.util.modtale.ModtaleApiClient; +import com.hypherionmc.modpublisher.util.modtale.meta.ModtaleMetadata; +import org.gradle.api.DefaultTask; +import org.gradle.api.GradleException; +import org.gradle.api.Project; +import org.gradle.api.tasks.TaskAction; + +import javax.inject.Inject; +import java.io.File; +import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author HypherionSA + * Sub-Task to handle Modtale publishing. This task will only be executed if + * a Modtale API Key and Project ID is supplied + */ +public class ModtaleUploadTask extends DefaultTask { + + private final Project project; + private final ModPublisherGradleExtension extension; + + @Inject + public ModtaleUploadTask(Project project, ModPublisherGradleExtension extension) { + this.project = project; + this.extension = extension; + } + + @TaskAction + public void upload() throws Exception { + if (!extension.getGameType().get().equalsIgnoreCase("hytale")) + return; + + if (extension.getSourceSet() == null) { + project.getLogger().lifecycle("Uploading to Modtale"); + } else { + project.getLogger().lifecycle("Uploading {} to Modtale", extension.getProjectName()); + } + + UploadPreChecks.checkRequiredValues(project, Platform.MODTALE, extension); + boolean canUpload = UploadPreChecks.canUploadCurse(project, extension); + if (!canUpload) + return; + + // Modtale enforces x.x.x versioning + if (!extension.getProjectVersion().get().matches("^\\d+\\.\\d+\\.\\d+$")) { + throw new GradleException(extension.getProjectVersion().get() + " is not a valid file version for Modtale. Version needs to be in format X.Y.Z"); + } + + // Create the API Client and pass the Gradle logger as logger + ModtaleApiClient apiClient = ModtaleApiClient.of(extension.getApiKeys().getModtale(), getLogger()); + + // Enable debug mode if required + apiClient.setDebugMode(extension.getDebug().get()); + + Object artifactObject = CommonUtil.getPlatformArtifact(Platform.MODTALE, extension); + File uploadFile = CommonUtil.resolveFile(project, artifactObject); + + if (uploadFile == null || !uploadFile.exists()) + throw new FileNotFoundException("Cannot find file " + artifactObject); + + ModtaleMetadata metadata = ModtaleMetadata.builder() + .setChangelog(CommonUtil.resolveString(extension.getChangelog().get())) + .setChannel(extension.getVersionType().get().toUpperCase()) + .setVersionNumber(extension.getProjectVersion().get()) + .setGameVersions(getGameVersions(extension.getGameVersions().get())); + + // If debug mode is enabled, this will only log the JSON that will be sent and + // will not actually upload the file + apiClient.upload(extension.getModtaleID().get(), metadata, uploadFile); + } + + // TODO: This conversion needs to be automated! + private List getGameVersions(List inputVersions) { + List retVersions = new ArrayList<>(); + + for (String version : inputVersions) { + if (!version.equalsIgnoreCase("early access")) continue; + retVersions.add("1.0-SNAPSHOT"); + } + + return retVersions; + } + +} diff --git a/src/main/java/com/hypherionmc/modpublisher/util/UploadPreChecks.java b/src/main/java/com/hypherionmc/modpublisher/util/UploadPreChecks.java index 201a449..52d6ac1 100644 --- a/src/main/java/com/hypherionmc/modpublisher/util/UploadPreChecks.java +++ b/src/main/java/com/hypherionmc/modpublisher/util/UploadPreChecks.java @@ -70,6 +70,25 @@ public static boolean canUploadModrinth(Project project, ModPublisherGradleExten return false; } + public static boolean canUploadModtale(Project project, ModPublisherGradleExtension extension) throws Exception { + if (extension == null) + return false; + + if (StringUtils.isBlank(extension.getProjectVersion().getOrNull())) { + throw new Exception("Version is not defined. This is REQUIRED by Modtale"); + } + + // Check that both the Modrinth API key and Project ID is defined + if (extension.getApiKeys() != null && !extension.getApiKeys().getModtale().isEmpty()) { + if (!extension.getModtaleID().isPresent() || extension.getModtaleID().get().isEmpty()) { + throw new Exception("Found Modtale API token, but modtaleID is not defined"); + } else { + return true; + } + } + return false; + } + public static boolean canUploadNightbloom(Project project, ModPublisherGradleExtension extension) throws Exception { if (extension == null) return false; diff --git a/src/main/java/com/hypherionmc/modpublisher/util/modtale/ModtaleApiClient.java b/src/main/java/com/hypherionmc/modpublisher/util/modtale/ModtaleApiClient.java new file mode 100644 index 0000000..96b4922 --- /dev/null +++ b/src/main/java/com/hypherionmc/modpublisher/util/modtale/ModtaleApiClient.java @@ -0,0 +1,102 @@ +package com.hypherionmc.modpublisher.util.modtale; + +import com.google.gson.JsonObject; +import com.hypherionmc.modpublisher.util.modtale.meta.ModtaleMetadata; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import me.hypherionmc.curseupload.CurseUploadApi; +import me.hypherionmc.curseupload.util.HTTPUtils; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.config.CookieSpecs; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.mime.HttpMultipartMode; +import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.apache.http.impl.client.HttpClientBuilder; +import org.gradle.api.logging.Logger; + +import java.io.File; +import java.io.InputStreamReader; + +@RequiredArgsConstructor(staticName = "of") +public class ModtaleApiClient { + + private final String apiKey; + private final Logger logger; + private static final String MODTALE_API = "https://api.modtale.net/api/v1/projects/%s/versions"; + + @Setter @Getter + private boolean debugMode = false; + + public void upload(String id, ModtaleMetadata metadata, File artifact) { + final HttpClient client = HttpClientBuilder.create() + .setDefaultRequestConfig(RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build()) + .setUserAgent("ModPublisher") + .build(); + + MultipartEntityBuilder requestBody = MultipartEntityBuilder.create().setMode(HttpMultipartMode.STRICT); + + requestBody.addBinaryBody( + "file", + artifact, + ContentType.APPLICATION_OCTET_STREAM, + artifact.getName() + ); + + requestBody.addTextBody( + "versionNumber", + metadata.getVersionNumber(), + ContentType.TEXT_PLAIN + ); + + requestBody.addTextBody( + "channel", + metadata.getChannel(), + ContentType.TEXT_PLAIN + ); + + for (String gv : metadata.getGameVersions()) { + requestBody.addTextBody("gameVersions", gv, ContentType.TEXT_PLAIN); + } + + requestBody.addTextBody( + "changelog", + metadata.getChangelog().isEmpty() ? "Coming Soon!" : metadata.getChangelog(), + ContentType.TEXT_PLAIN + ); + + final HttpPost request = new HttpPost(String.format(MODTALE_API, id)); + request.addHeader("X-MODTALE-KEY", apiKey); + request.setEntity(requestBody.build()); + + if (!debugMode) { + try { + final HttpResponse response = client.execute(request); + + if (response.getStatusLine().getStatusCode() == 200) { + final InputStreamReader reader = new InputStreamReader(response.getEntity().getContent()); + reader.close(); + logger.lifecycle("Successfully uploaded artifact {}", artifact.getName()); + } else { + int errorCode = response.getStatusLine().getStatusCode(); + String errorMessage = response.getStatusLine().getReasonPhrase(); + + logger.error("Failed to Upload artifact to Modtale. Code: {}, Error: {}", errorCode, errorMessage); + } + } catch (Exception e) { + CurseUploadApi.INSTANCE.getLogger().error("Failed to Upload artifact to Modtale.", e); + } + } else { + // Do not upload the file. Instead, write the JSON that will be sent to the console + JsonObject object = new JsonObject(); + object.add("metadata", HTTPUtils.gson.toJsonTree(metadata)); + object.addProperty("file", artifact.getName()); + + logger.lifecycle(HTTPUtils.gson.toJson(object)); + } + } + +} diff --git a/src/main/java/com/hypherionmc/modpublisher/util/modtale/meta/ModtaleMetadata.java b/src/main/java/com/hypherionmc/modpublisher/util/modtale/meta/ModtaleMetadata.java new file mode 100644 index 0000000..cadc63a --- /dev/null +++ b/src/main/java/com/hypherionmc/modpublisher/util/modtale/meta/ModtaleMetadata.java @@ -0,0 +1,59 @@ +package com.hypherionmc.modpublisher.util.modtale.meta; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; + +@Getter +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class ModtaleMetadata { + + private String versionNumber; + private List gameVersions; + private String changelog; + private String channel; + + public static ModtaleMetadata builder() { + return new ModtaleMetadata(); + } + + public ModtaleMetadata setVersionNumber(String version) { + this.versionNumber = version; + return this; + } + + public ModtaleMetadata addGameVersion(String gameVersion) { + if (this.gameVersions == null) + this.gameVersions = new ArrayList<>(); + + this.gameVersions.add(gameVersion); + return this; + } + + public ModtaleMetadata setGameVersions(List gameVersions) { + if (this.gameVersions == null) { + this.gameVersions = new ArrayList<>(); + } else { + this.gameVersions.clear(); + } + + this.gameVersions.addAll(gameVersions); + return this; + } + + public ModtaleMetadata setChangelog(String changelog) { + this.changelog = changelog; + return this; + } + + public ModtaleMetadata setChannel(String channel) { + this.channel = channel.toUpperCase(); + return this; + } + +} From 78e813445bcef74cb08ed4af9da2eff8ec0edfaf Mon Sep 17 00:00:00 2001 From: HypherionSA Date: Sat, 17 Jan 2026 22:29:28 +0200 Subject: [PATCH 5/8] [CHORE] Update Readme, License and Changelog --- changelog.md | 11 ++++++++--- license.txt | 2 +- readme.md | 42 +++++++++++++++++++++++++++++++++--------- 3 files changed, 42 insertions(+), 13 deletions(-) diff --git a/changelog.md b/changelog.md index 76a5a3e..9f89d29 100644 --- a/changelog.md +++ b/changelog.md @@ -1,11 +1,16 @@ +### Version 2.2.0 + +* [Exp] - Add experimental support for multi-sourceset projects +* [Feat] - Add support for new snapshot version formats for CurseForge +* [Feat] - Add option to not set GitHub release as latest +* [Feat] - Add Support for Modtale +* [Feat] - Add Support for uploading Hytale plugins to CurseForge + ### Version 2.1.8 * [Bug] - Fix commit `3562a62` that was wiped out by release 2.1.7 * [Chore] - Update dependencies * [Bug] - Fix NightBloom File ID extraction regex following API change -* [Exp] - Add experimental support for multi-sourceset projects -* [Feat] - Add support for new snapshot version formats for CurseForge -* [Feat] - Add option to not set GitHub release as latest ### Version 2.1.7 diff --git a/license.txt b/license.txt index 4e88084..16b2dde 100644 --- a/license.txt +++ b/license.txt @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2023-2025 HypherionSA and Contributors +Copyright (c) 2023-2026 HypherionSA and Contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/readme.md b/readme.md index e88521d..e25b192 100644 --- a/readme.md +++ b/readme.md @@ -1,11 +1,19 @@ ## ModPublisher -ModPublisher is a Gradle Plugin that allows modders to publish their mods to Modrinth, Curseforge and GitHub in one go. +ModPublisher is a Gradle Plugin that allows modders to publish their mods to Modrinth, CurseForge and GitHub in one go. No need for separate plugins, just one! --- +### Supported Platforms + +- [CurseForge](https://curseforge.com) +- [Modrinth](https://modrinth.com) +- [GitHub](https://github.com) +- [NightBloom](https://nightbloom.cc) +- [Modtale](https://modtale.net) + ### Setup For full documentation, checkout [ModPublisher Docs](https://modpublisher.fdd-docs.com/) @@ -60,8 +68,14 @@ publisher { curseforge System.getenv("CURSE_TOKEN") // GitHub Token github System.getenv("GITHUB_TOKEN") + // Modtale Token + modtale System.getenv("MODTALE_TOKEN") } + // Set the Game Type you are uploading for. This is Optional, but needed for Hytale Mods + // Current valid values are `hytale` and `minecraft`. minecraft is the default + setGameType("minecraft") + // Enable Debug mode. When enabled, no files will actually be uploaded setDebug(true) @@ -71,6 +85,9 @@ publisher { // Modrinth Project ID setModrinthID("dsgfhs79789") + // Modtale Project ID + setModtaleID("jfghg") + // Type of release. beta, alpha or release // You can also use VersionType.BETA, VersionType.ALPHA or VersionType.RELEASE setVersionType("beta") @@ -81,7 +98,7 @@ publisher { // Or https://gist.githubusercontent.com/hypherionmc/92f825d3c9337964cc77c9c8c9bf65e6/raw/ceeaaee5b98c688a23398864fe480b84796a1651/test_gist.md setChangelog("changelog.md") - // Required for Modrinth/GitHub + // Required for Modrinth/GitHub/Modtale setProjectVersion("1.20.2-${project.version}") // Fancy display name for the upload. @@ -94,15 +111,17 @@ publisher { // The modloaders your upload supports. // This can also be an Enum from ModLoader, // like setLoaders(ModLoader.FABRIC, ModLoader.FORGE) + // NOT NEEDED FOR HYTALE PLUGINS setLoaders("forge", "fabric") // The new Curseforge Environment tag. Optional // Valid values are "server", "client" or "both" // You can also use CurseEnvironment.BOTH, or CurseEnvironment.SERVER or CurseEnvironment.CLIENT + // NOT NEEDED FOR HYTALE PLUGINS setCurseEnvironment("both") // Upload the release, but keep it "private" until you are ready - // Unreleased feature on CurseForge, working on Modrinth + // Working CurseForge, not working on Modrinth setIsManualRelease(true) // The file to be uploaded. This can be a file, task, or string. @@ -117,16 +136,15 @@ publisher { // If this is a task, the task specified will be executed before publishing // Valid platforms are modrinth, curseforge and github setPlatformArtifact("modrinth", modrinthJar) - - // Disable the built in Fractureizer scanner - setDisableMalwareScanner(true) // Add supported java versions. Currently only used by CurseForge // Supports anything that can be parsed using JavaVersion.toVersion() + // NOT NEEDED FOR HYTALE PLUGINS setJavaVersions(JavaVersion.VERSION_1_8, 11) // Safety check to check if the artifact contains a valid mod metadata entry, // which could possibly mean that the jar is empty + // NOT NEEDED FOR HYTALE PLUGINS setDisableEmptyJarCheck(true) // Additional files to upload. Same as artifact, this can be a task, file or string @@ -268,8 +286,14 @@ publisher { curseforge(System.getenv("CURSE_TOKEN")) // GitHub Token github(System.getenv("GITHUB_TOKEN")) + // Modtale Token + modtale(System.getenv("MODTALE_TOKEN")) } + // Set the Game Type you are uploading for. This is Optional, but needed for Hytale Mods + // Current valid values are `hytale` and `minecraft`. minecraft is the default + gameType.set("minecraft") + // Enable Debug mode. When enabled, no files will actually be uploaded debug.set(true) @@ -279,6 +303,9 @@ publisher { // Modrinth Project ID modrinthID.set("sdjkg8867") + // Modtale Project ID + modtaleID.set("gjgndg") + // GitHub repo to publish to. Only required for GitHub githubRepo.set("OWNER/REPO") @@ -330,9 +357,6 @@ publisher { // If this is a task, the task specified will be executed before publishing // Valid platforms are modrinth, curseforge and github setPlatformArtifact("modrinth", modrinthJar) - - // Disable the built in Fractureizer scanner - disableMalwareScanner.set(true) // Safety check to check if the artifact contains a valid mod metadata entry, // which could possibly mean that the jar is empty From 9c2e1e47bf32af2ae4c59eb2eea8ff2aad6a1aab Mon Sep 17 00:00:00 2001 From: HypherionSA Date: Sun, 18 Jan 2026 23:53:34 +0200 Subject: [PATCH 6/8] [FEAT] NightBloom Hytale support --- changelog.md | 2 +- gradle.properties | 4 ++-- .../hypherionmc/modpublisher/tasks/NightBloomUploadTask.java | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/changelog.md b/changelog.md index 9f89d29..97e81af 100644 --- a/changelog.md +++ b/changelog.md @@ -4,7 +4,7 @@ * [Feat] - Add support for new snapshot version formats for CurseForge * [Feat] - Add option to not set GitHub release as latest * [Feat] - Add Support for Modtale -* [Feat] - Add Support for uploading Hytale plugins to CurseForge +* [Feat] - Add Support for uploading Hytale plugins to CurseForge and NightBloom ### Version 2.1.8 diff --git a/gradle.properties b/gradle.properties index 87e0a4d..8f865cb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ version_major=2 version_minor=2 version_patch=0 -version_build=0 +version_build=1 release_type=snapshot # Dependencies @@ -11,4 +11,4 @@ github=1.330 mavenart=4.0.0-alpha-10 junit=5.10.1 lombok=1.18.38 -nightbloom=1.2.8 \ No newline at end of file +nightbloom=1.2.13 \ No newline at end of file diff --git a/src/main/java/com/hypherionmc/modpublisher/tasks/NightBloomUploadTask.java b/src/main/java/com/hypherionmc/modpublisher/tasks/NightBloomUploadTask.java index 167bec5..e3676ba 100644 --- a/src/main/java/com/hypherionmc/modpublisher/tasks/NightBloomUploadTask.java +++ b/src/main/java/com/hypherionmc/modpublisher/tasks/NightBloomUploadTask.java @@ -78,6 +78,7 @@ public void upload() throws Exception { metab.changelog(CommonUtil.resolveString(extension.getChangelog().get())); metab.type(extension.getVersionType().get().toLowerCase()); metab.version(extension.getProjectVersion().get()); + metab.game(extension.getGameType().get()); if (extension.getDisplayName().isPresent() && !extension.getDisplayName().get().isEmpty()) { metab.displayName(extension.getDisplayName().get()); From 344cdbac2b3ab62a32a3dcf7ec87b1d9301d96c6 Mon Sep 17 00:00:00 2001 From: HypherionSA Date: Fri, 23 Jan 2026 20:40:59 +0200 Subject: [PATCH 7/8] [BUG] Fix Modtale uploading --- dummy.jar | Bin 0 -> 48472 bytes gradle.properties | 2 +- .../modpublisher/tasks/CurseUploadTask.java | 2 +- .../modpublisher/tasks/ModtaleUploadTask.java | 15 +--------- .../util/modtale/ModtaleApiClient.java | 24 ++++++++------- src/test/java/ModtaleTest.java | 28 ++++++++++++++++++ 6 files changed, 44 insertions(+), 27 deletions(-) create mode 100644 dummy.jar create mode 100644 src/test/java/ModtaleTest.java diff --git a/dummy.jar b/dummy.jar new file mode 100644 index 0000000000000000000000000000000000000000..49f6b3a24ab758c7b765c2e715e9c9ad52aa20cf GIT binary patch literal 48472 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 literal 0 HcmV?d00001 diff --git a/gradle.properties b/gradle.properties index 8f865cb..5a2c3c3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ version_major=2 version_minor=2 version_patch=0 -version_build=1 +version_build=2 release_type=snapshot # Dependencies diff --git a/src/main/java/com/hypherionmc/modpublisher/tasks/CurseUploadTask.java b/src/main/java/com/hypherionmc/modpublisher/tasks/CurseUploadTask.java index 5e6c4e9..e7f4157 100644 --- a/src/main/java/com/hypherionmc/modpublisher/tasks/CurseUploadTask.java +++ b/src/main/java/com/hypherionmc/modpublisher/tasks/CurseUploadTask.java @@ -95,7 +95,7 @@ public void upload() throws Exception { continue; } - if (gameVersion.contains("-pre") || gameVersion.contains("-rc")) + if (gameVersion.contains("-pre") || gameVersion.contains("-rc") || gameVersion.matches("^\\d{4}\\.\\d{2}\\.\\d{2}-[a-zA-Z0-9]+$")) continue; DefaultArtifactVersion min = new DefaultArtifactVersion("b1.6.6"); diff --git a/src/main/java/com/hypherionmc/modpublisher/tasks/ModtaleUploadTask.java b/src/main/java/com/hypherionmc/modpublisher/tasks/ModtaleUploadTask.java index f9e86e7..2ce2d4a 100644 --- a/src/main/java/com/hypherionmc/modpublisher/tasks/ModtaleUploadTask.java +++ b/src/main/java/com/hypherionmc/modpublisher/tasks/ModtaleUploadTask.java @@ -70,23 +70,10 @@ public void upload() throws Exception { .setChangelog(CommonUtil.resolveString(extension.getChangelog().get())) .setChannel(extension.getVersionType().get().toUpperCase()) .setVersionNumber(extension.getProjectVersion().get()) - .setGameVersions(getGameVersions(extension.getGameVersions().get())); + .setGameVersions(extension.getGameVersions().get()); // If debug mode is enabled, this will only log the JSON that will be sent and // will not actually upload the file apiClient.upload(extension.getModtaleID().get(), metadata, uploadFile); } - - // TODO: This conversion needs to be automated! - private List getGameVersions(List inputVersions) { - List retVersions = new ArrayList<>(); - - for (String version : inputVersions) { - if (!version.equalsIgnoreCase("early access")) continue; - retVersions.add("1.0-SNAPSHOT"); - } - - return retVersions; - } - } diff --git a/src/main/java/com/hypherionmc/modpublisher/util/modtale/ModtaleApiClient.java b/src/main/java/com/hypherionmc/modpublisher/util/modtale/ModtaleApiClient.java index 96b4922..fd3ada9 100644 --- a/src/main/java/com/hypherionmc/modpublisher/util/modtale/ModtaleApiClient.java +++ b/src/main/java/com/hypherionmc/modpublisher/util/modtale/ModtaleApiClient.java @@ -15,11 +15,12 @@ import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.apache.http.entity.mime.content.FileBody; import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.util.EntityUtils; import org.gradle.api.logging.Logger; import java.io.File; -import java.io.InputStreamReader; @RequiredArgsConstructor(staticName = "of") public class ModtaleApiClient { @@ -37,13 +38,11 @@ public void upload(String id, ModtaleMetadata metadata, File artifact) { .setUserAgent("ModPublisher") .build(); - MultipartEntityBuilder requestBody = MultipartEntityBuilder.create().setMode(HttpMultipartMode.STRICT); + MultipartEntityBuilder requestBody = MultipartEntityBuilder.create().setMode(HttpMultipartMode.STRICT).setMode(HttpMultipartMode.BROWSER_COMPATIBLE); - requestBody.addBinaryBody( + requestBody.addPart( "file", - artifact, - ContentType.APPLICATION_OCTET_STREAM, - artifact.getName() + new FileBody(artifact, ContentType.APPLICATION_OCTET_STREAM, artifact.getName()) ); requestBody.addTextBody( @@ -76,15 +75,18 @@ public void upload(String id, ModtaleMetadata metadata, File artifact) { try { final HttpResponse response = client.execute(request); - if (response.getStatusLine().getStatusCode() == 200) { - final InputStreamReader reader = new InputStreamReader(response.getEntity().getContent()); - reader.close(); + int status = response.getStatusLine().getStatusCode(); + + String body = response.getEntity() != null + ? EntityUtils.toString(response.getEntity()) + : ""; + + if (status == 200) { logger.lifecycle("Successfully uploaded artifact {}", artifact.getName()); } else { int errorCode = response.getStatusLine().getStatusCode(); String errorMessage = response.getStatusLine().getReasonPhrase(); - - logger.error("Failed to Upload artifact to Modtale. Code: {}, Error: {}", errorCode, errorMessage); + logger.error("Failed to Upload artifact to Modtale. Code: {}, Error: {}, Output: {}", errorCode, errorMessage, body); } } catch (Exception e) { CurseUploadApi.INSTANCE.getLogger().error("Failed to Upload artifact to Modtale.", e); diff --git a/src/test/java/ModtaleTest.java b/src/test/java/ModtaleTest.java new file mode 100644 index 0000000..baca28d --- /dev/null +++ b/src/test/java/ModtaleTest.java @@ -0,0 +1,28 @@ +import com.hypherionmc.modpublisher.util.CommonUtil; +import com.hypherionmc.modpublisher.util.modtale.ModtaleApiClient; +import com.hypherionmc.modpublisher.util.modtale.meta.ModtaleMetadata; + +import java.io.File; +import java.io.IOException; +import java.util.Collections; + +import static org.gradle.internal.cc.base.LoggingKt.getLogger; + +public class ModtaleTest { + + public static void main(String[] args) throws IOException { + ModtaleApiClient apiClient = ModtaleApiClient.of("", getLogger()); + //apiClient.setDebugMode(true); + + ModtaleMetadata metadata = ModtaleMetadata.builder() + .setChangelog("Testing") + .setChannel("RELEASE") + .setVersionNumber("1.0.0") + .setGameVersions(Collections.singletonList("2026.01.17-4b0f30090")); + + // If debug mode is enabled, this will only log the JSON that will be sent and + // will not actually upload the file + apiClient.upload("67a31f5e-255e-41b4-80ca-94eb58328695", metadata, new File("dummy.jar")); + } + +} From 1cd42ff060899ec923795705d2829d508f8012bd Mon Sep 17 00:00:00 2001 From: HypherionSA Date: Fri, 23 Jan 2026 20:45:34 +0200 Subject: [PATCH 8/8] [BUG] Fix NightBloom and Modtale version filtering --- gradle.properties | 2 +- .../modpublisher/tasks/ModtaleUploadTask.java | 15 ++++++++++++++- .../modpublisher/tasks/NightBloomUploadTask.java | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index 5a2c3c3..8f865cb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ version_major=2 version_minor=2 version_patch=0 -version_build=2 +version_build=1 release_type=snapshot # Dependencies diff --git a/src/main/java/com/hypherionmc/modpublisher/tasks/ModtaleUploadTask.java b/src/main/java/com/hypherionmc/modpublisher/tasks/ModtaleUploadTask.java index 2ce2d4a..e278929 100644 --- a/src/main/java/com/hypherionmc/modpublisher/tasks/ModtaleUploadTask.java +++ b/src/main/java/com/hypherionmc/modpublisher/tasks/ModtaleUploadTask.java @@ -70,10 +70,23 @@ public void upload() throws Exception { .setChangelog(CommonUtil.resolveString(extension.getChangelog().get())) .setChannel(extension.getVersionType().get().toUpperCase()) .setVersionNumber(extension.getProjectVersion().get()) - .setGameVersions(extension.getGameVersions().get()); + .setGameVersions(getGameVersions(extension.getGameVersions().get())); // If debug mode is enabled, this will only log the JSON that will be sent and // will not actually upload the file apiClient.upload(extension.getModtaleID().get(), metadata, uploadFile); } + + // TODO: This conversion needs to be automated! + private List getGameVersions(List inputVersions) { + List retVersions = new ArrayList<>(); + + for (String version : inputVersions) { + if (version.equalsIgnoreCase("early access")) continue; + retVersions.add(version); + } + + return retVersions; + } + } diff --git a/src/main/java/com/hypherionmc/modpublisher/tasks/NightBloomUploadTask.java b/src/main/java/com/hypherionmc/modpublisher/tasks/NightBloomUploadTask.java index e3676ba..ae1d6cb 100644 --- a/src/main/java/com/hypherionmc/modpublisher/tasks/NightBloomUploadTask.java +++ b/src/main/java/com/hypherionmc/modpublisher/tasks/NightBloomUploadTask.java @@ -88,7 +88,7 @@ public void upload() throws Exception { List finalGameVersions = new ArrayList<>(); for (String gameVersion : extension.getGameVersions().get()) { - if (gameVersion.endsWith("-snapshot")) + if (gameVersion.endsWith("-snapshot") || gameVersion.matches("^\\d{4}\\.\\d{2}\\.\\d{2}-[a-zA-Z0-9]+$")) continue; finalGameVersions.add(gameVersion.toLowerCase()); }