diff --git a/scripts b/scripts index 6d90cfc..67f52af 160000 --- a/scripts +++ b/scripts @@ -1 +1 @@ -Subproject commit 6d90cfcde1ab669cc1a90fa6f60919b11324fbb1 +Subproject commit 67f52af6aeee9a5e14b758d8cad0e50e6734fa2b diff --git a/src/main/java/org/auioc/mcmod/arnicalib/base/util/SemVer.java b/src/main/java/org/auioc/mcmod/arnicalib/base/util/SemVer.java new file mode 100644 index 0000000..ccc1f30 --- /dev/null +++ b/src/main/java/org/auioc/mcmod/arnicalib/base/util/SemVer.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2025 AUIOC.ORG + * + * This file is part of ArnicaLib, a mod made for Minecraft. + * + * ArnicaLib is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +package org.auioc.mcmod.arnicalib.base.util; + +import javax.annotation.Nullable; + +public record SemVer(int major, int minor, int patch, @Nullable String prerelease, @Nullable String build) { + + @Override + public String toString() { + return String.format( + "%d.%d.%d%s%s", + major, minor, patch, + (isPrerelease()) ? "-" + prerelease : "", + (build != null && !build.isEmpty()) ? "+" + build : "" + ); + } + + public String core() { + return String.format("%d.%d.%d", major, minor, patch); + } + + public boolean isPrerelease() { + return prerelease != null && !prerelease.isEmpty(); + } + +} diff --git a/src/main/java/org/auioc/mcmod/arnicalib/game/util/BuildInfo.java b/src/main/java/org/auioc/mcmod/arnicalib/game/util/BuildInfo.java index e62e08b..4f57433 100644 --- a/src/main/java/org/auioc/mcmod/arnicalib/game/util/BuildInfo.java +++ b/src/main/java/org/auioc/mcmod/arnicalib/game/util/BuildInfo.java @@ -20,11 +20,13 @@ package org.auioc.mcmod.arnicalib.game.util; import org.auioc.mcmod.arnicalib.ArnicaLib; +import org.auioc.mcmod.arnicalib.base.util.SemVer; import org.slf4j.Logger; import org.slf4j.Marker; import org.slf4j.MarkerFactory; public record BuildInfo( + SemVer semver, String version, String reversion, int buildNumber, @@ -40,16 +42,13 @@ public String shortReversion() { @Override public String toString() { - return String.format( - "%s-%s-rev.%s-build.%d%s%s", - minecraftVersion, version, shortReversion(), buildNumber, - isRelease ? "" : "-dev", isDirty ? "-dirty" : "" - ); + return semver.toString(); } public void log(Logger logger, Marker marker) { - logger.info(marker, "Version: " + this.version + " (" + this + ")"); - if (!this.isRelease) { logger.warn(marker, "Mod is a development version"); } + logger.info(marker, "Version: " + semver.core() + " (" + this + ")"); + if (!isRelease) { logger.warn(marker, "Mod is a development version"); } + if (semver.isPrerelease()) { logger.warn(marker, "Mod is a pre-release version"); } if (this.isDirty) { logger.warn(marker, "Mod is a dirty build"); } } @@ -61,6 +60,13 @@ public void log(Logger logger, Marker marker) { public static BuildInfo fromClass(Class clazz) { try { var b = new BuildInfo( + new SemVer( + clazz.getField("SEMVER_MAJOR").getInt(null), + clazz.getField("SEMVER_MINOR").getInt(null), + clazz.getField("SEMVER_PATCH").getInt(null), + (String) clazz.getField("SEMVER_PRERELEASE").get(null), + (String) clazz.getField("SEMVER_BUILD").get(null) + ), clazz.getField("VERSION").get(null).toString(), clazz.getField("REVERSION").get(null).toString(), clazz.getField("BUILD_NUMBER").getInt(null),