diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 32830dc..6e77860 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -28,5 +28,5 @@ jobs:
if: ${{ runner.os == 'Linux' && matrix.java == '8' }}
uses: actions/upload-artifact@v2
with:
- name: ViaForge-1.12.2
+ name: ViaForge-1.8.9
path: build/libs/
diff --git a/build.gradle b/build.gradle
index 22d7429..be200e3 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,8 +1,9 @@
buildscript {
repositories {
mavenCentral()
- maven { url = "https://repo.viaversion.com" }
+ maven { url = "https://maven.minecraftforge.net/" }
maven { url = "https://repo.spongepowered.org/repository/maven-public/" }
+ maven { url = "https://repo.viaversion.com" }
maven { url = "https://jitpack.io/" }
}
@@ -28,9 +29,9 @@ compileJava.options.encoding = 'UTF-8'
repositories {
mavenCentral()
- maven { url = "https://repo.viaversion.com" }
maven { url = "https://maven.minecraftforge.net/" }
maven { url = "https://repo.spongepowered.org/repository/maven-public/" }
+ maven { url = "https://repo.viaversion.com" }
maven { url = "https://jitpack.io/" }
}
@@ -53,14 +54,13 @@ configurations {
implementation.extendsFrom(include)
}
-// ViaProtocolHack READ-ME
def viaLibs = [
"com.viaversion:viaversion:${project.viaversion_version}",
"com.viaversion:viabackwards:${project.viabackwards_version}",
"com.viaversion:viarewind-core:${project.viarewind_version}",
- "org.yaml:snakeyaml:1.29",
+ "org.yaml:snakeyaml:${project.snake_yml_version}",
- "com.github.RejectedVia:ViaProtocolHack:${project.viaprotocolhack_version}"
+ "com.github.FlorianMichael:ViaLoadingBase:${project.vialoadingbase_version}"
]
dependencies {
@@ -133,4 +133,4 @@ reobf {
shadowJar {}
}
-jar.dependsOn("shadowJar")
\ No newline at end of file
+jar.dependsOn("shadowJar")
diff --git a/gradle.properties b/gradle.properties
index 6866490..f23571a 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -5,14 +5,15 @@ org.gradle.daemon=false
# forge
mod_id=viaforge
mod_name=ViaForge
-mod_version=2.0.0
-mod_base_package=de.enzaxd
+mod_version=3.1.0
+mod_base_package=de.florianmichael
# mixin
mixin_version=0.8.3
# via-version
-viaprotocolhack_version=ba5dcf9ce6
-viaversion_version=4.5.2-SNAPSHOT
-viabackwards_version=4.5.2-SNAPSHOT
-viarewind_version=2.0.2-SNAPSHOT
+vialoadingbase_version=ff86e681d7
+viaversion_version=4.7.0-23w16a-SNAPSHOT
+viabackwards_version=4.7.0-23w16a-SNAPSHOT
+viarewind_version=2.0.4-SNAPSHOT
+snake_yml_version=2.0
diff --git a/settings.gradle b/settings.gradle
index e032b8d..5f0a7df 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,3 +1,2 @@
rootProject.name = "ViaForge"
-include 'mc1122'
diff --git a/src/main/java/de/florianmichael/viaforge/ViaForge.java b/src/main/java/de/florianmichael/viaforge/ViaForge.java
index 835d5f0..7ee83de 100644
--- a/src/main/java/de/florianmichael/viaforge/ViaForge.java
+++ b/src/main/java/de/florianmichael/viaforge/ViaForge.java
@@ -1,63 +1,34 @@
+/*
+ * This file is part of ViaForge - https://github.com/FlorianMichael/ViaForge
+ * Copyright (C) 2021-2023 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 com.viaversion.viaversion.libs.gson.JsonObject;
-import de.florianmichael.viaprotocolhack.INativeProvider;
-import de.florianmichael.viaprotocolhack.ViaProtocolHack;
-import io.netty.channel.EventLoop;
-import io.netty.channel.local.LocalEventLoopGroup;
+import de.florianmichael.vialoadingbase.ViaLoadingBase;
import net.minecraft.client.Minecraft;
import net.minecraft.realms.RealmsSharedConstants;
-import java.io.File;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.ThreadFactory;
-
-public class ViaForge implements INativeProvider {
-
- public static int targetVersion = RealmsSharedConstants.NETWORK_PROTOCOL_VERSION;
+public class ViaForge {
public static void start() {
- try {
- ViaProtocolHack.instance().init(new ViaForge(), () -> System.out.println("ViaProtocolHack loaded successfully"));
- } catch (Exception ignored) {
- }
- }
-
- @Override
- public boolean isSinglePlayer() {
- return Minecraft.getMinecraft().isSingleplayer();
- }
-
- @Override
- public int nativeVersion() {
- return RealmsSharedConstants.NETWORK_PROTOCOL_VERSION;
- }
-
- @Override
- public int targetVersion() {
- return targetVersion;
- }
-
- @Override
- public String[] nettyOrder() {
- return new String[] {
- "decompress",
- "compress"
- };
- }
-
- @Override
- public File run() {
- return Minecraft.getMinecraft().mcDataDir;
- }
-
- @Override
- public JsonObject createDump() {
- return new JsonObject();
- }
-
- @Override
- public EventLoop eventLoop(ThreadFactory threadFactory, ExecutorService executorService) {
- return new LocalEventLoopGroup(1, threadFactory).next();
+ ViaLoadingBase.ViaLoadingBaseBuilder.
+ create().
+ runDirectory(Minecraft.getMinecraft().mcDataDir).
+ nativeVersion(RealmsSharedConstants.NETWORK_PROTOCOL_VERSION).
+ forceNativeVersionCondition(() -> Minecraft.getMinecraft().isSingleplayer()).
+ build();
}
}
diff --git a/src/main/java/de/florianmichael/viaforge/ViaForgeVLBPipeline.java b/src/main/java/de/florianmichael/viaforge/ViaForgeVLBPipeline.java
new file mode 100644
index 0000000..d0bdec2
--- /dev/null
+++ b/src/main/java/de/florianmichael/viaforge/ViaForgeVLBPipeline.java
@@ -0,0 +1,47 @@
+/*
+ * This file is part of ViaForge - https://github.com/FlorianMichael/ViaForge
+ * Copyright (C) 2021-2023 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 com.viaversion.viaversion.api.connection.UserConnection;
+import de.florianmichael.vialoadingbase.netty.VLBPipeline;
+
+public class ViaForgeVLBPipeline extends VLBPipeline {
+ public ViaForgeVLBPipeline(UserConnection info) {
+ super(info);
+ }
+
+ @Override
+ public String getDecoderHandlerName() {
+ return "decoder";
+ }
+
+ @Override
+ public String getEncoderHandlerName() {
+ return "encoder";
+ }
+
+ @Override
+ public String getDecompressionHandlerName() {
+ return "decompress";
+ }
+
+ @Override
+ public String getCompressionHandlerName() {
+ return "compress";
+ }
+}
diff --git a/src/main/java/de/florianmichael/viaforge/GuiProtocolSelector.java b/src/main/java/de/florianmichael/viaforge/gui/GuiProtocolSelector.java
similarity index 64%
rename from src/main/java/de/florianmichael/viaforge/GuiProtocolSelector.java
rename to src/main/java/de/florianmichael/viaforge/gui/GuiProtocolSelector.java
index c947369..3866138 100644
--- a/src/main/java/de/florianmichael/viaforge/GuiProtocolSelector.java
+++ b/src/main/java/de/florianmichael/viaforge/gui/GuiProtocolSelector.java
@@ -1,8 +1,25 @@
-package de.florianmichael.viaforge;
+/*
+ * This file is part of ViaForge - https://github.com/FlorianMichael/ViaForge
+ * Copyright (C) 2021-2023 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.gui;
import com.mojang.realmsclient.gui.ChatFormatting;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
-import de.florianmichael.viaprotocolhack.util.VersionList;
+import de.florianmichael.vialoadingbase.ViaLoadingBase;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
@@ -13,9 +30,9 @@ import java.io.IOException;
public class GuiProtocolSelector extends GuiScreen {
- public SlotList list;
+ private final GuiScreen parent;
- private GuiScreen parent;
+ public SlotList list;
public GuiProtocolSelector(GuiScreen parent) {
this.parent = parent;
@@ -68,12 +85,12 @@ public class GuiProtocolSelector extends GuiScreen {
@Override
protected int getSize() {
- return VersionList.getProtocols().size();
+ return ViaLoadingBase.getProtocols().size();
}
@Override
protected void elementClicked(int i, boolean b, int i1, int i2) {
- ViaForge.targetVersion = VersionList.getProtocols().get(i).getVersion();
+ ViaLoadingBase.getInstance().reload(ViaLoadingBase.getProtocols().get(i));
}
@Override
@@ -88,9 +105,9 @@ public class GuiProtocolSelector extends GuiScreen {
@Override
protected void drawSlot(int i, int i1, int i2, int i3, int i4, int i5) {
- final ProtocolVersion version = VersionList.getProtocols().get(i);
+ final ProtocolVersion version = ViaLoadingBase.getProtocols().get(i);
- drawCenteredString(mc.fontRendererObj,(ViaForge.targetVersion == version.getVersion() ? ChatFormatting.GREEN.toString() : ChatFormatting.DARK_RED.toString()) + version.getName(), width / 2, i2, -1);
+ drawCenteredString(mc.fontRendererObj, (ViaLoadingBase.getInstance().getTargetVersion().getVersion() == version.getVersion() ? ChatFormatting.GREEN.toString() : ChatFormatting.DARK_RED.toString()) + version.getName(), width / 2, i2, -1);
}
}
}
diff --git a/src/main/java/de/florianmichael/viaforge/mixin/MixinLoader.java b/src/main/java/de/florianmichael/viaforge/mixin/MixinLoader.java
index e4b66a7..215a971 100644
--- a/src/main/java/de/florianmichael/viaforge/mixin/MixinLoader.java
+++ b/src/main/java/de/florianmichael/viaforge/mixin/MixinLoader.java
@@ -1,3 +1,20 @@
+/*
+ * This file is part of ViaForge - https://github.com/FlorianMichael/ViaForge
+ * Copyright (C) 2021-2023 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.mixin;
import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin;
diff --git a/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinGuiMainMenuGuiMultiplayerGuiServerList.java b/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinGuiMainMenuGuiMultiplayerGuiServerList.java
index 22bdf39..7cd1a25 100644
--- a/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinGuiMainMenuGuiMultiplayerGuiServerList.java
+++ b/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinGuiMainMenuGuiMultiplayerGuiServerList.java
@@ -1,6 +1,23 @@
+/*
+ * This file is part of ViaForge - https://github.com/FlorianMichael/ViaForge
+ * Copyright (C) 2021-2023 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.mixin.impl;
-import de.florianmichael.viaforge.GuiProtocolSelector;
+import de.florianmichael.viaforge.gui.GuiProtocolSelector;
import net.minecraft.client.gui.*;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
diff --git a/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinMinecraft.java b/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinMinecraft.java
index ef170fe..0587739 100644
--- a/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinMinecraft.java
+++ b/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinMinecraft.java
@@ -1,3 +1,20 @@
+/*
+ * This file is part of ViaForge - https://github.com/FlorianMichael/ViaForge
+ * Copyright (C) 2021-2023 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.mixin.impl;
import de.florianmichael.viaforge.ViaForge;
diff --git a/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinNetworkManager.java b/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinNetworkManager.java
index df31e99..7b23ae2 100644
--- a/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinNetworkManager.java
+++ b/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinNetworkManager.java
@@ -1,6 +1,23 @@
+/*
+ * This file is part of ViaForge - https://github.com/FlorianMichael/ViaForge
+ * Copyright (C) 2021-2023 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.mixin.impl;
-import de.florianmichael.viaprotocolhack.event.PipelineReorderEvent;
+import de.florianmichael.vialoadingbase.netty.event.CompressionReorderEvent;
import io.netty.channel.Channel;
import net.minecraft.network.NetworkManager;
import org.spongepowered.asm.mixin.Mixin;
@@ -16,6 +33,6 @@ public class MixinNetworkManager {
@Inject(method = "setCompressionTreshold", at = @At("RETURN"))
public void reOrderPipeline(int p_setCompressionTreshold_1_, CallbackInfo ci) {
- channel.pipeline().fireUserEventTriggered(new PipelineReorderEvent());
+ channel.pipeline().fireUserEventTriggered(new CompressionReorderEvent());
}
}
diff --git a/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinNetworkManagerSub5.java b/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinNetworkManagerSub5.java
deleted file mode 100644
index 80c0dcc..0000000
--- a/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinNetworkManagerSub5.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package de.florianmichael.viaforge.mixin.impl;
-
-import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.connection.UserConnectionImpl;
-import com.viaversion.viaversion.protocol.ProtocolPipelineImpl;
-import de.florianmichael.viaforge.ViaForge;
-import de.florianmichael.viaprotocolhack.netty.CustomViaDecodeHandler;
-import de.florianmichael.viaprotocolhack.netty.CustomViaEncodeHandler;
-import de.florianmichael.viaprotocolhack.netty.NettyConstants;
-import io.netty.channel.Channel;
-import io.netty.channel.socket.SocketChannel;
-import net.minecraft.realms.RealmsSharedConstants;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-
-@Mixin(targets = "net.minecraft.network.NetworkManager$5")
-public class MixinNetworkManagerSub5 {
-
- @Inject(method = "initChannel", at = @At(value = "TAIL"), remap = false)
- private void onInitChannel(Channel channel, CallbackInfo ci) {
- if (channel instanceof SocketChannel && ViaForge.targetVersion != RealmsSharedConstants.NETWORK_PROTOCOL_VERSION) {
-
- UserConnection user = new UserConnectionImpl(channel, true);
- new ProtocolPipelineImpl(user);
-
- channel.pipeline()
- .addBefore("encoder", NettyConstants.HANDLER_ENCODER_NAME, new CustomViaEncodeHandler(user))
- .addBefore("decoder", NettyConstants.HANDLER_DECODER_NAME, new CustomViaDecodeHandler(user));
- }
- }
-}
diff --git a/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinNetworkManager_5.java b/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinNetworkManager_5.java
new file mode 100644
index 0000000..9e27abe
--- /dev/null
+++ b/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinNetworkManager_5.java
@@ -0,0 +1,45 @@
+/*
+ * This file is part of ViaForge - https://github.com/FlorianMichael/ViaForge
+ * Copyright (C) 2021-2023 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.mixin.impl;
+
+import com.viaversion.viaversion.api.connection.UserConnection;
+import com.viaversion.viaversion.connection.UserConnectionImpl;
+import com.viaversion.viaversion.protocol.ProtocolPipelineImpl;
+import de.florianmichael.viaforge.ViaForgeVLBPipeline;
+import de.florianmichael.vialoadingbase.ViaLoadingBase;
+import io.netty.channel.Channel;
+import io.netty.channel.socket.SocketChannel;
+import net.minecraft.realms.RealmsSharedConstants;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(targets = "net.minecraft.network.NetworkManager$5")
+public class MixinNetworkManager_5 {
+
+ @Inject(method = "initChannel", at = @At(value = "TAIL"), remap = false)
+ private void onInitChannel(Channel channel, CallbackInfo ci) {
+ if (channel instanceof SocketChannel && ViaLoadingBase.getInstance().getTargetVersion().getVersion() != RealmsSharedConstants.NETWORK_PROTOCOL_VERSION) {
+ final UserConnection user = new UserConnectionImpl(channel, true);
+ new ProtocolPipelineImpl(user);
+
+ channel.pipeline().addLast(new ViaForgeVLBPipeline(user));
+ }
+ }
+}
diff --git a/src/main/resources/mixins.viaforge.json b/src/main/resources/mixins.viaforge.json
index c57cc0d..c87fcbc 100644
--- a/src/main/resources/mixins.viaforge.json
+++ b/src/main/resources/mixins.viaforge.json
@@ -1,16 +1,16 @@
{
- "required": true,
- "minVersion": "0.7.5",
- "compatibilityLevel": "JAVA_8",
- "package": "de.florianmichael.viaforge.mixin.impl",
- "refmap": "mixins.viaforge.refmap.json",
- "mixins": [
- "MixinNetworkManager",
- "MixinNetworkManagerSub5"
- ],
- "verbose": true,
- "client": [
- "MixinGuiMainMenuGuiMultiplayerGuiServerList",
- "MixinMinecraft"
- ]
+ "required": true,
+ "minVersion": "0.7.5",
+ "compatibilityLevel": "JAVA_8",
+ "package": "de.florianmichael.viaforge.mixin.impl",
+ "refmap": "mixins.viaforge.refmap.json",
+ "mixins": [
+ "MixinNetworkManager",
+ "MixinNetworkManager_5"
+ ],
+ "verbose": true,
+ "client": [
+ "MixinGuiMainMenuGuiMultiplayerGuiServerList",
+ "MixinMinecraft"
+ ]
}