From 957cfa41188e0755f031a2d00b3dde17d81a19b7 Mon Sep 17 00:00:00 2001 From: CDAGaming Date: Tue, 26 Nov 2024 00:30:03 -0600 Subject: [PATCH] [Port] Update to 1.20.2 (v2.5.3) --- .../utils/server/ServerUtils.java | 8 +- .../resources/craftpresence.accesswidener | 2 +- fabric/src/main/resources/pack.mcmeta | 2 +- .../resources/META-INF/accesstransformer.cfg | 2 +- forge/src/main/resources/pack.mcmeta | 2 +- gradle.properties | 34 ++--- neoforge/build.gradle.kts | 121 ++++++++++++++++++ .../neoforge/CraftPresenceNeoForge.java | 85 ++++++++++++ .../resources/META-INF/accesstransformer.cfg | 2 + .../src/main/resources/META-INF/mods.toml | 37 ++++++ neoforge/src/main/resources/logo.png | Bin 0 -> 30077 bytes neoforge/src/main/resources/pack.mcmeta | 6 + quilt/src/main/resources/pack.mcmeta | 2 +- 13 files changed, 279 insertions(+), 24 deletions(-) create mode 100644 neoforge/build.gradle.kts create mode 100644 neoforge/src/main/java/com/gitlab/cdagaming/craftpresence/neoforge/CraftPresenceNeoForge.java create mode 100644 neoforge/src/main/resources/META-INF/accesstransformer.cfg create mode 100644 neoforge/src/main/resources/META-INF/mods.toml create mode 100644 neoforge/src/main/resources/logo.png create mode 100644 neoforge/src/main/resources/pack.mcmeta diff --git a/common/src/main/java/com/gitlab/cdagaming/craftpresence/utils/server/ServerUtils.java b/common/src/main/java/com/gitlab/cdagaming/craftpresence/utils/server/ServerUtils.java index c7ff012ab0..a0b2075c38 100644 --- a/common/src/main/java/com/gitlab/cdagaming/craftpresence/utils/server/ServerUtils.java +++ b/common/src/main/java/com/gitlab/cdagaming/craftpresence/utils/server/ServerUtils.java @@ -275,7 +275,7 @@ public void preTick() { */ private RealmsServer findRealmData(final ClientPacketListener connection) { try { - if (connection.callbackScreen instanceof RealmsScreen realmsProxy && + if (connection.postDisconnectScreen instanceof RealmsScreen realmsProxy && realmsProxy instanceof RealmsMainScreen realmsMainScreen) { return realmsMainScreen.getSelectedServer(); } @@ -297,7 +297,7 @@ public void updateData() { // Note: A Realm is only checked for *once* under set conditions if (!hasCheckedRealm) { final boolean canCheckRealm = newServerData != null && newConnection != null; - if (canCheckRealm && CraftPresence.instance.isConnectedToRealms()) { + if (canCheckRealm && newServerData.isRealm()) { currentRealmData = findRealmData(newConnection); isOnRealm = currentRealmData != null; } @@ -586,7 +586,7 @@ public void verifyAndJoin(final String secret) { final boolean isValidSecret = boolParts.length <= 4 && stringParts.length <= 3 && containsValidClientID; if (isValidSecret) { - ModUtils.executeOnMainThread(CraftPresence.instance, () -> joinServer(new ServerData(serverName, serverIP, false))); + ModUtils.executeOnMainThread(CraftPresence.instance, () -> joinServer(new ServerData(serverName, serverIP, ServerData.Type.OTHER))); } else { Constants.LOG.error(Constants.TRANSLATOR.translate("craftpresence.logger.error.discord.join", secret)); } @@ -847,7 +847,7 @@ public void initPresence() { // Attempt to find alternative icons, if no overrides are present if (StringUtils.isNullOrEmpty(currentServerIcon)) { // Logic cloned from ScrollableListControl#renderSlotItem - final String originalName = currentRealmData.ownerUUID; + final String originalName = currentRealmData.ownerUUID.toString(); final boolean isValidUuid = StringUtils.isValidUuid(originalName); if (!CraftPresence.CONFIG.hasChanged() && CraftPresence.CONFIG.advancedSettings.allowEndpointIcons && !StringUtils.isNullOrEmpty(CraftPresence.CONFIG.advancedSettings.playerSkinEndpoint)) { diff --git a/fabric/src/main/resources/craftpresence.accesswidener b/fabric/src/main/resources/craftpresence.accesswidener index a505d70237..c06a1f58fd 100644 --- a/fabric/src/main/resources/craftpresence.accesswidener +++ b/fabric/src/main/resources/craftpresence.accesswidener @@ -1,4 +1,4 @@ accessWidener v2 named -accessible field net/minecraft/client/multiplayer/ClientPacketListener callbackScreen Lnet/minecraft/client/gui/screens/Screen; +accessible field net/minecraft/client/multiplayer/ClientCommonPacketListenerImpl postDisconnectScreen Lnet/minecraft/client/gui/screens/Screen; accessible method com/mojang/realmsclient/RealmsMainScreen getSelectedServer ()Lcom/mojang/realmsclient/dto/RealmsServer; \ No newline at end of file diff --git a/fabric/src/main/resources/pack.mcmeta b/fabric/src/main/resources/pack.mcmeta index 7d8b4f8498..2a39a40f0d 100644 --- a/fabric/src/main/resources/pack.mcmeta +++ b/fabric/src/main/resources/pack.mcmeta @@ -1,6 +1,6 @@ { "pack": { "description": "${mod_name} Resources", - "pack_format": 15 + "pack_format": 18 } } diff --git a/forge/src/main/resources/META-INF/accesstransformer.cfg b/forge/src/main/resources/META-INF/accesstransformer.cfg index 664fa1ba1a..c65178e877 100644 --- a/forge/src/main/resources/META-INF/accesstransformer.cfg +++ b/forge/src/main/resources/META-INF/accesstransformer.cfg @@ -1,2 +1,2 @@ -public net.minecraft.client.multiplayer.ClientPacketListener callbackScreen +public net.minecraft.client.multiplayer.ClientCommonPacketListenerImpl postDisconnectScreen public com.mojang.realmsclient.RealmsMainScreen getSelectedServer()Lcom/mojang/realmsclient/dto/RealmsServer; diff --git a/forge/src/main/resources/pack.mcmeta b/forge/src/main/resources/pack.mcmeta index 7d8b4f8498..2a39a40f0d 100644 --- a/forge/src/main/resources/pack.mcmeta +++ b/forge/src/main/resources/pack.mcmeta @@ -1,6 +1,6 @@ { "pack": { "description": "${mod_name} Resources", - "pack_format": 15 + "pack_format": 18 } } diff --git a/gradle.properties b/gradle.properties index f1008b594b..ef8855d99d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,38 +6,42 @@ org.gradle.daemon=false mod_name=CraftPresence mod_id=craftpresence group=com.gitlab.cdagaming -enabled_platforms=fabric,forge,quilt +enabled_platforms=fabric,forge,quilt,neoforge # Critical Info isLegacy=false isJarMod=false # Mapping Info mc_mappings= mc_mappings_type=mojmap -mc_version=1.20.1 -mc_protocol=763 +mc_version=1.20.2 +mc_protocol=764 display_version= # Fabric Info fabric_loader_version=0.16.9 -fabric_api_version=0.92.2+1.20.1 -fabric_game_version_range=>=1.20 <1.20.2 +fabric_api_version=0.91.6+1.20.2 +fabric_game_version_range=>=1.20.2 <1.20.3 fabric_loader_version_range=>=0.13.0 # Quilt Info quilt_loader_version=0.26.3 -quilt_api_version=6.2.0+1.20.1 -quilt_fabric_api_version=7.6.0+0.92.2-1.20.1 -quilt_game_version_range=>=1.20,<1.20.2 +quilt_api_version=7.0.0-alpha.13+1.20.2 +quilt_fabric_api_version=8.0.0-alpha.6+0.91.6-1.20.2 +quilt_game_version_range=>=1.20.2,<1.20.3 quilt_loader_version_range=>=0.19.2 # Forge Info -forge_version=47.1.0 -fml_version_range=[46,) -forge_game_version_range=[1.20, 1.20.2) -forge_loader_version_range=[46.0.0,) -additional_forge_loaders=neoforge +forge_version=48.1.0 +fml_version_range=[48,) +forge_game_version_range=[1.20.2, 1.20.3) +forge_loader_version_range=[48.0.0,) +# NeoForge Info +neoforge_version=88 +neo_fml_version_range=[1.0,) +neoforge_game_version_range=[1.20.2, 1.20.3) +neoforge_loader_version_range=[20.2,) # Deployment Info versionId=2.5.3 deploymentType=Release versionLabel=Release -additional_mc_versions=1.20 +additional_mc_versions= # Integration Info source_java_version=21 build_java_version=17 @@ -53,4 +57,4 @@ unilib_build_version=1.0.5 unilib_minimum_version=1.0.1 # Dependency Info modmenu_group=com.terraformersmc -modmenu_version=7.2.2 \ No newline at end of file +modmenu_version=8.0.1 \ No newline at end of file diff --git a/neoforge/build.gradle.kts b/neoforge/build.gradle.kts new file mode 100644 index 0000000000..ae0b7a5e44 --- /dev/null +++ b/neoforge/build.gradle.kts @@ -0,0 +1,121 @@ +import xyz.wagyourtail.unimined.api.minecraft.task.RemapJarTask + +/** + * Retrieve a Project Property + */ +operator fun String.invoke(): String? { + return project.properties[this] as String? +} + +val modName: String by extra +val modId: String by extra + +val isLegacy: Boolean by extra +val protocol: Int by extra +val isJarMod: Boolean by extra +val accessWidenerFile: File by extra +val isMCPJar: Boolean by extra +val isModern: Boolean by extra +val versionFormat: String by extra +val versionLabel: String by extra +val mcVersionLabel: String by extra +val mcMappingsType: String by extra +val canUseATs: Boolean by extra +val baseVersionLabel: String by extra + +val forgeVersion = "neoforge_version"()!! + +unimined.minecraft { + if (!isJarMod) { + neoForge { + if (canUseATs) { + accessTransformer(aw2at(accessWidenerFile)) + } + loader(forgeVersion) + customSearge = (mcMappingsType != "mojmap" && mcMappingsType != "parchment") + } + } else { + jarMod {} + } +} + +val common: Configuration by configurations.creating +val shadowCommon: Configuration by configurations.creating + +configurations.compileClasspath.get().extendsFrom(common) +configurations.runtimeClasspath.get().extendsFrom(common) + +dependencies { + if (isJarMod) { + "jarMod"("risugami:modloader:$forgeVersion") + } + + common(project(path = ":common")) { isTransitive = false } + common(project(path = ":common", configuration = "shade")) + common(project(path = ":common", configuration = "runtime")) + shadowCommon(project(path = ":common", configuration = "shadeOnly")) + shadowCommon(project(path = ":common")) { isTransitive = false } +} + +val resourceTargets = listOf( + "mcmod.info", + "META-INF/mods.toml", + "META-INF/neoforge.mods.toml", + "mod_$modName.info", + "pack.mcmeta" +) +val replaceProperties = mapOf( + "mod_id" to modId, + "mod_name" to modName, + "version" to baseVersionLabel, + "mcversion" to mcVersionLabel, + "forge_id" to name, + "fml_version_range" to "neo_fml_version_range"(), + "game_version_range" to "neoforge_game_version_range"(), + "loader_version_range" to "neoforge_loader_version_range"(), + "unilib_min_version" to "unilib_minimum_version"()!! +) + +tasks.processResources { + inputs.properties(replaceProperties) + + filesMatching(resourceTargets) { + expand(replaceProperties) + } +} + +tasks.shadowJar { + mustRunAfter(project(":common").tasks.shadowJar) + dependsOn(project(":common").tasks.shadowJar) + from(zipTree(project(":common").tasks.shadowJar.get().archiveFile)) + configurations = listOf(shadowCommon) + archiveClassifier.set("dev-shadow") +} + +tasks.named("remapJar") { + dependsOn(tasks.shadowJar.get()) + asJar { + inputFile.set(tasks.shadowJar.get().archiveFile) + archiveClassifier.set(project.name) + } +} + +tasks.jar { + if (canUseATs) { + manifest { + attributes( + mapOf( + "FMLAT" to "accesstransformer.cfg" + ) + ) + } + } + archiveClassifier.set("dev") +} + +tasks.sourcesJar { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + val commonSources = project(":common").tasks.sourcesJar + dependsOn(commonSources) + from(commonSources.get().archiveFile.map { zipTree(it) }) +} \ No newline at end of file diff --git a/neoforge/src/main/java/com/gitlab/cdagaming/craftpresence/neoforge/CraftPresenceNeoForge.java b/neoforge/src/main/java/com/gitlab/cdagaming/craftpresence/neoforge/CraftPresenceNeoForge.java new file mode 100644 index 0000000000..e49932ea38 --- /dev/null +++ b/neoforge/src/main/java/com/gitlab/cdagaming/craftpresence/neoforge/CraftPresenceNeoForge.java @@ -0,0 +1,85 @@ +/* + * MIT License + * + * Copyright (c) 2018 - 2025 CDAGaming (cstack2011@yahoo.com) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package com.gitlab.cdagaming.craftpresence.neoforge; + +import com.gitlab.cdagaming.craftpresence.CraftPresence; +import com.gitlab.cdagaming.craftpresence.config.gui.MainGui; +import com.gitlab.cdagaming.unilib.core.CoreUtils; +import io.github.cdagaming.unicore.utils.OSUtils; +import net.neoforged.fml.IExtensionPoint; +import net.neoforged.fml.ModList; +import net.neoforged.fml.ModLoadingContext; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.loading.FMLEnvironment; +import net.neoforged.neoforge.client.ConfigScreenHandler; + +/** + * The Primary Application Class and Utilities + * + * @author CDAGaming + */ +@Mod("@MOD_ID@") +public class CraftPresenceNeoForge { + /** + * Begins Scheduling Ticks on Class Initialization + */ + public CraftPresenceNeoForge() { + try { + if (OSUtils.JAVA_SPEC < 1.8f) { + throw new UnsupportedOperationException("Incompatible JVM!!! @MOD_NAME@ requires Java 8 or above to work properly!"); + } + + try { + // Workaround: Client-side only fix for Forge Clients + // - Reference => https://gitlab.com/CDAGaming/CraftPresence/-/issues/99 + ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> IExtensionPoint.DisplayTest.IGNORESERVERONLY, (a, b) -> true)); + } catch (Throwable ignored) { + // before forge-1.13.2-25.0.103 + } + + try { + // Register The Config GUI Factory, used in Forge for Mod Menu integration + ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () -> new ConfigScreenHandler.ConfigScreenFactory((mc, parentScreen) -> new MainGui(parentScreen))); + } catch (Throwable ex) { + CoreUtils.LOG.error("Failed to register Config GUI Factory for @MOD_NAME@.", ex); + } + + if (FMLEnvironment.dist.isClient()) { + new CraftPresence(this::setupIntegrations); + } else { + CoreUtils.LOG.info("Disabling @MOD_NAME@, as it is client side only."); + } + } catch (NoClassDefFoundError ex) { + throw new UnsupportedOperationException("Unable to initialize @MOD_NAME@! @UNILIB_NAME@ (unilib) is required to run this mod (Requires @UNILIB_MIN_VERSION@ or above)", ex); + } + } + + /** + * Setup external integrations and attachments to the primary application + */ + public void setupIntegrations() { + // N/A + } +} \ No newline at end of file diff --git a/neoforge/src/main/resources/META-INF/accesstransformer.cfg b/neoforge/src/main/resources/META-INF/accesstransformer.cfg new file mode 100644 index 0000000000..c65178e877 --- /dev/null +++ b/neoforge/src/main/resources/META-INF/accesstransformer.cfg @@ -0,0 +1,2 @@ +public net.minecraft.client.multiplayer.ClientCommonPacketListenerImpl postDisconnectScreen +public com.mojang.realmsclient.RealmsMainScreen getSelectedServer()Lcom/mojang/realmsclient/dto/RealmsServer; diff --git a/neoforge/src/main/resources/META-INF/mods.toml b/neoforge/src/main/resources/META-INF/mods.toml new file mode 100644 index 0000000000..5781025430 --- /dev/null +++ b/neoforge/src/main/resources/META-INF/mods.toml @@ -0,0 +1,37 @@ +modLoader="javafml" +loaderVersion="${fml_version_range}" +license="MIT" +issueTrackerURL="https://gitlab.com/CDAGaming/CraftPresence/issues" +[[mods]] +modId="${mod_id}" +version="${version}" +displayName="${mod_name}" +updateJSONURL="https://raw.githubusercontent.com/CDAGaming/VersionLibrary/master/CraftPresence/update.json" +displayURL="https://www.curseforge.com/minecraft/mc-mods/craftpresence" +logoFile="logo.png" +credits="" +authors="CDAGaming" +description=''' +Completely Customize the way others see you play in Discord! +''' + +[[dependencies.${mod_id}]] + modId="${forge_id}" + mandatory=true + versionRange="${loader_version_range}" + ordering="NONE" + side="BOTH" + +[[dependencies.${mod_id}]] + modId="unilib" + mandatory=true + versionRange="[${unilib_min_version},]" + ordering="AFTER" + side="BOTH" + +[[dependencies.${mod_id}]] + modId="minecraft" + mandatory=true + versionRange="${game_version_range}" + ordering="NONE" + side="BOTH" \ No newline at end of file diff --git a/neoforge/src/main/resources/logo.png b/neoforge/src/main/resources/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8118b5712861ac8e63efdd06f7b5c4ea5b343fcd GIT binary patch literal 30077 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