diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/Numismatics.java b/common/src/main/java/dev/ithundxr/createnumismatics/Numismatics.java index 7bc84b6..9f11194 100644 --- a/common/src/main/java/dev/ithundxr/createnumismatics/Numismatics.java +++ b/common/src/main/java/dev/ithundxr/createnumismatics/Numismatics.java @@ -39,6 +39,7 @@ import dev.ithundxr.createnumismatics.registry.NumismaticsCommands; import dev.ithundxr.createnumismatics.registry.NumismaticsCreativeModeTabs.Tabs; import dev.ithundxr.createnumismatics.registry.NumismaticsPackets; +import dev.ithundxr.createnumismatics.util.UpdateCheck; import dev.ithundxr.createnumismatics.util.Utils; import net.minecraft.SharedConstants; import net.minecraft.commands.CommandSourceStack; @@ -65,7 +66,8 @@ public class Numismatics { public static void init() { LOGGER.info("{} v{} initializing! Commit hash: {} Create version: {} on platform: {}", NAME, NumismaticsBuildInfo.VERSION, NumismaticsBuildInfo.GIT_COMMIT, Create.VERSION, Loader.getFormatted()); - + UpdateCheck.execute(); + ModSetup.register(); finalizeRegistrate(); diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/compat/Mods.java b/common/src/main/java/dev/ithundxr/createnumismatics/compat/Mods.java index ff4abec..7d6818b 100644 --- a/common/src/main/java/dev/ithundxr/createnumismatics/compat/Mods.java +++ b/common/src/main/java/dev/ithundxr/createnumismatics/compat/Mods.java @@ -95,6 +95,10 @@ public void assertForDataGen() { assert (!requiredForDataGen || isLoaded); } + public static boolean isModLoaded(String id) { + return isModLoaded(id, null); + } + @ExpectPlatform public static boolean isModLoaded(String id, @Nullable String fabricId) { throw new AssertionError(); diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/multiloader/Loader.java b/common/src/main/java/dev/ithundxr/createnumismatics/multiloader/Loader.java index b093751..d962b24 100644 --- a/common/src/main/java/dev/ithundxr/createnumismatics/multiloader/Loader.java +++ b/common/src/main/java/dev/ithundxr/createnumismatics/multiloader/Loader.java @@ -19,6 +19,7 @@ package dev.ithundxr.createnumismatics.multiloader; import dev.architectury.injectables.annotations.ExpectPlatform; +import dev.ithundxr.createnumismatics.compat.Mods; import dev.ithundxr.createnumismatics.util.TextUtils; import org.jetbrains.annotations.ApiStatus.Internal; @@ -26,7 +27,7 @@ import java.util.function.Supplier; public enum Loader { - FORGE, FABRIC; + FORGE, NEOFORGE, FABRIC, QUILT; public static final Loader CURRENT = getCurrent(); @@ -40,7 +41,15 @@ public void runIfCurrent(Supplier run) { } public static String getFormatted() { - return TextUtils.titleCaseConversion(Loader.CURRENT.name().toLowerCase(Locale.ROOT)); + return TextUtils.titleCaseConversion(getActual().name().toLowerCase(Locale.ROOT)); + } + + // Returns the actual loader, ex: quilt on quilt instead of fabric for quilt + public static Loader getActual() { + //noinspection ConstantValue + if (FABRIC.isCurrent() && Mods.isModLoaded("quilt_loader")) + return QUILT; + return CURRENT; } @Internal diff --git a/common/src/main/java/dev/ithundxr/createnumismatics/util/UpdateCheck.java b/common/src/main/java/dev/ithundxr/createnumismatics/util/UpdateCheck.java new file mode 100644 index 0000000..44d0fc5 --- /dev/null +++ b/common/src/main/java/dev/ithundxr/createnumismatics/util/UpdateCheck.java @@ -0,0 +1,61 @@ +/* + * Numismatics + * Copyright (c) 2024 The Railways Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package dev.ithundxr.createnumismatics.util; + +import dev.ithundxr.createnumismatics.Numismatics; +import dev.ithundxr.createnumismatics.NumismaticsBuildInfo; +import dev.ithundxr.createnumismatics.multiloader.Loader; +import net.minecraft.SharedConstants; +import net.minecraft.Util; + +import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.nio.charset.StandardCharsets; +import java.time.Duration; + +public class UpdateCheck { + public static void execute() { + // TODO switch to nonCriticalIoPool() in 1.21.1 + Util.ioPool().submit(() -> { + String uri = String.format( + "https://update.api.ithundxr.dev/update-check?mod_id=%s&mod_version=%s&mc_version=%s&loader=%s", + Numismatics.MOD_ID, + NumismaticsBuildInfo.VERSION, + SharedConstants.getCurrentVersion().getName(), + Loader.getActual() + ); + + HttpRequest request = HttpRequest.newBuilder() + .GET() + .uri(URI.create(uri)) + .build(); + + try { + HttpClient.newBuilder() + .connectTimeout(Duration.ofSeconds(10L)) + .followRedirects(HttpClient.Redirect.ALWAYS) + .build() + .send(request, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8)); + } catch (IOException | InterruptedException ignored) {} + }); + } +} diff --git a/fabric/src/main/java/dev/ithundxr/createnumismatics/multiloader/fabric/LoaderImpl.java b/fabric/src/main/java/dev/ithundxr/createnumismatics/multiloader/fabric/LoaderImpl.java index 4c21308..5d3f37c 100644 --- a/fabric/src/main/java/dev/ithundxr/createnumismatics/multiloader/fabric/LoaderImpl.java +++ b/fabric/src/main/java/dev/ithundxr/createnumismatics/multiloader/fabric/LoaderImpl.java @@ -19,7 +19,6 @@ package dev.ithundxr.createnumismatics.multiloader.fabric; import dev.ithundxr.createnumismatics.multiloader.Loader; -import net.fabricmc.loader.api.FabricLoader; public class LoaderImpl { public static Loader getCurrent() {