From b7dfb38927bcef0917717badffb78d407326e52a Mon Sep 17 00:00:00 2001 From: Howard ZHY <96782166+HowardZHY@users.noreply.github.com> Date: Mon, 20 Jan 2025 16:33:33 +0800 Subject: [PATCH] Add NeoForge support in 1.20.6+ versions (#153) --- build.gradle | 12 ++- .../viaforge/ViaNeoForge1206.java | 79 +++++++++++++++++++ .../resources/META-INF/neoforge.mods.toml | 17 ++++ .../viaforge/ViaNeoForge1214.java | 79 +++++++++++++++++++ .../resources/META-INF/neoforge.mods.toml | 17 ++++ 5 files changed, 202 insertions(+), 2 deletions(-) create mode 100644 viaforge-mc1206/src/main/java/de/florianmichael/viaforge/ViaNeoForge1206.java create mode 100644 viaforge-mc1206/src/main/resources/META-INF/neoforge.mods.toml create mode 100644 viaforge-mc1214/src/main/java/de/florianmichael/viaforge/ViaNeoForge1214.java create mode 100644 viaforge-mc1214/src/main/resources/META-INF/neoforge.mods.toml diff --git a/build.gradle b/build.gradle index cf8fdfe..96a4b8c 100644 --- a/build.gradle +++ b/build.gradle @@ -46,6 +46,9 @@ allprojects { maven { url = "https://repo.spongepowered.org/repository/maven-public" } + maven { + url = "https://maven.neoforged.net/" + } maven { url = "https://repo.viaversion.com" metadataSources { @@ -130,14 +133,19 @@ subprojects { dependencies { minecraft "net.minecraftforge:forge:${forge_version}" library "org.slf4j:slf4j-api:2.0.16" - if (versionId < 1_20_6) { // Always include for refmap in versions that don't have official mappings at runtime, // later exclude classes to prevent loading conflicts... library "org.spongepowered:mixin:${mixin_version}" annotationProcessor "org.spongepowered:mixin:${mixin_version}:processor" + } else { + compileOnly("net.neoforged.fancymodloader:loader:2.0.20") { + transitive = false + } + compileOnly("net.neoforged:bus:7.2.0") { + transitive = false + } } - library project(":") // Include the base project } diff --git a/viaforge-mc1206/src/main/java/de/florianmichael/viaforge/ViaNeoForge1206.java b/viaforge-mc1206/src/main/java/de/florianmichael/viaforge/ViaNeoForge1206.java new file mode 100644 index 0000000..6bd11a1 --- /dev/null +++ b/viaforge-mc1206/src/main/java/de/florianmichael/viaforge/ViaNeoForge1206.java @@ -0,0 +1,79 @@ +/* + * This file is part of ViaForge - https://github.com/FlorianMichael/ViaForge + * Copyright (C) 2021-2025 FlorianMichael/EnZaXD and contributors + * + * This program 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 de.florianmichael.viaforge; + +import de.florianmichael.viaforge.common.ViaForgeCommon; +import de.florianmichael.viaforge.common.platform.VFPlatform; +import de.florianmichael.viaforge.provider.ViaForgeGameProfileFetcher; +import net.minecraft.SharedConstants; +import net.minecraft.client.Minecraft; +import net.minecraft.client.User; +import net.minecraft.network.HandlerNames; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; +import net.raphimc.vialegacy.protocol.release.r1_7_6_10tor1_8.provider.GameProfileFetcher; + +import java.io.File; +import java.util.function.Supplier; + +@Mod("viaforge") +public class ViaNeoForge1206 implements VFPlatform { + + public ViaNeoForge1206(IEventBus modEventBus) { + modEventBus.addListener(this::onInit); + } + + private void onInit(FMLCommonSetupEvent event) { + ViaForgeCommon.init(this); + } + + @Override + public int getGameVersion() { + return SharedConstants.getProtocolVersion(); + } + + @Override + public Supplier isSingleplayer() { + return () -> Minecraft.getInstance().isSingleplayer(); + } + + @Override + public File getLeadingDirectory() { + return Minecraft.getInstance().gameDirectory; + } + + @Override + public void joinServer(String serverId) throws Throwable { + final User session = Minecraft.getInstance().getUser(); + + Minecraft.getInstance().getMinecraftSessionService().joinServer(session.getProfileId(), session.getAccessToken(), serverId); + } + + @Override + public GameProfileFetcher getGameProfileFetcher() { + return new ViaForgeGameProfileFetcher(); + } + + @Override + public String getDecodeHandlerName() { + return HandlerNames.INBOUND_CONFIG; + } + +} diff --git a/viaforge-mc1206/src/main/resources/META-INF/neoforge.mods.toml b/viaforge-mc1206/src/main/resources/META-INF/neoforge.mods.toml new file mode 100644 index 0000000..ce1e3d1 --- /dev/null +++ b/viaforge-mc1206/src/main/resources/META-INF/neoforge.mods.toml @@ -0,0 +1,17 @@ +modLoader="javafml" #mandatory +loaderVersion="[2,)" #mandatory + + +license="GPL-3.0 license" +issueTrackerURL="https://github.com/ViaVersion/ViaForge/issues" +showAsResourcePack=false + +[[mods]] +modId="viaforge" +version="1.20.6" +displayName="ViaForge" +displayURL="https://github.com/FlorianMichael" +logoFile="icon.png" +credits="Github contributors" +authors="FlorianMichael/EnZaXD" +description="description" diff --git a/viaforge-mc1214/src/main/java/de/florianmichael/viaforge/ViaNeoForge1214.java b/viaforge-mc1214/src/main/java/de/florianmichael/viaforge/ViaNeoForge1214.java new file mode 100644 index 0000000..81a4ab4 --- /dev/null +++ b/viaforge-mc1214/src/main/java/de/florianmichael/viaforge/ViaNeoForge1214.java @@ -0,0 +1,79 @@ +/* + * This file is part of ViaForge - https://github.com/FlorianMichael/ViaForge + * Copyright (C) 2021-2025 FlorianMichael/EnZaXD and contributors + * + * This program 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 de.florianmichael.viaforge; + +import de.florianmichael.viaforge.common.ViaForgeCommon; +import de.florianmichael.viaforge.common.platform.VFPlatform; +import de.florianmichael.viaforge.provider.ViaForgeGameProfileFetcher; +import net.minecraft.SharedConstants; +import net.minecraft.client.Minecraft; +import net.minecraft.client.User; +import net.minecraft.network.HandlerNames; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; +import net.raphimc.vialegacy.protocol.release.r1_7_6_10tor1_8.provider.GameProfileFetcher; + +import java.io.File; +import java.util.function.Supplier; + +@Mod("viaforge") +public class ViaNeoForge1214 implements VFPlatform { + + public ViaNeoForge1214(IEventBus modEventBus) { + modEventBus.addListener(this::onInit); + } + + private void onInit(FMLCommonSetupEvent event) { + ViaForgeCommon.init(this); + } + + @Override + public int getGameVersion() { + return SharedConstants.getProtocolVersion(); + } + + @Override + public Supplier isSingleplayer() { + return () -> Minecraft.getInstance().isSingleplayer(); + } + + @Override + public File getLeadingDirectory() { + return Minecraft.getInstance().gameDirectory; + } + + @Override + public void joinServer(String serverId) throws Throwable { + final User session = Minecraft.getInstance().getUser(); + + Minecraft.getInstance().getMinecraftSessionService().joinServer(session.getProfileId(), session.getAccessToken(), serverId); + } + + @Override + public GameProfileFetcher getGameProfileFetcher() { + return new ViaForgeGameProfileFetcher(); + } + + @Override + public String getDecodeHandlerName() { + return HandlerNames.INBOUND_CONFIG; + } + +} diff --git a/viaforge-mc1214/src/main/resources/META-INF/neoforge.mods.toml b/viaforge-mc1214/src/main/resources/META-INF/neoforge.mods.toml new file mode 100644 index 0000000..8a654fb --- /dev/null +++ b/viaforge-mc1214/src/main/resources/META-INF/neoforge.mods.toml @@ -0,0 +1,17 @@ +modLoader="javafml" #mandatory +loaderVersion="[2,)" #mandatory + + +license="GPL-3.0 license" +issueTrackerURL="https://github.com/ViaVersion/ViaForge/issues" +showAsResourcePack=false + +[[mods]] +modId="viaforge" +version="1.21.4" +displayName="ViaForge" +displayURL="https://github.com/FlorianMichael" +logoFile="icon.png" +credits="Github contributors" +authors="FlorianMichael/EnZaXD" +description="description"