diff --git a/src/main/java/de/florianmichael/viaforge/common/platform/ViaForgeConfig.java b/src/main/java/de/florianmichael/viaforge/common/platform/ViaForgeConfig.java index 732b1d2..18dae76 100644 --- a/src/main/java/de/florianmichael/viaforge/common/platform/ViaForgeConfig.java +++ b/src/main/java/de/florianmichael/viaforge/common/platform/ViaForgeConfig.java @@ -11,15 +11,15 @@ import java.util.Map; public class ViaForgeConfig extends Config { public final static String CLIENT_SIDE_VERSION = "client-side-version"; + public final static String VERIFY_SESSION_IN_OLD_VERSIONS = "verify-session-in-old-versions"; + public final static String ALLOW_BETACRAFT_AUTHENTICATION = "allow-betacraft-authentication"; + public final static String SHOW_PROTOCOL_VERSION_IN_F3 = "show-protocol-version-in-f3"; public final static String SHOW_MAIN_MENU_BUTTON = "show-main-menu-button"; public final static String SHOW_MULTIPLAYER_BUTTON = "show-multiplayer-button"; public final static String SHOW_DIRECT_CONNECT_BUTTON = "show-direct-connect-button"; public final static String SHOW_ADD_SERVER_BUTTON = "show-add-server-button"; - public final static String VERIFY_SESSION_IN_OLD_VERSIONS = "verify-session-in-old-versions"; - public final static String ALLOW_BETACRAFT_AUTHENTICATION = "allow-betacraft-authentication"; - public final static String VIA_FORGE_BUTTON_POSITION = "via-forge-button-position"; public final static String ADD_SERVER_SCREEN_BUTTON_POSITION = "add-server-screen-button-position"; @@ -59,6 +59,18 @@ public class ViaForgeConfig extends Config { set(CLIENT_SIDE_VERSION, version); } + public boolean isVerifySessionInOldVersions() { + return getBoolean(VERIFY_SESSION_IN_OLD_VERSIONS, true); + } + + public boolean isAllowBetacraftAuthentication() { + return getBoolean(ALLOW_BETACRAFT_AUTHENTICATION, true); + } + + public boolean isShowProtocolVersionInF3() { + return getBoolean(SHOW_PROTOCOL_VERSION_IN_F3, true); + } + public boolean isShowMainMenuButton() { return getBoolean(SHOW_MAIN_MENU_BUTTON, true); } @@ -75,14 +87,6 @@ public class ViaForgeConfig extends Config { return getBoolean(SHOW_ADD_SERVER_BUTTON, true); } - public boolean isVerifySessionInOldVersions() { - return getBoolean(VERIFY_SESSION_IN_OLD_VERSIONS, true); - } - - public boolean isAllowBetacraftAuthentication() { - return getBoolean(ALLOW_BETACRAFT_AUTHENTICATION, true); - } - public ButtonPosition getViaForgeButtonPosition() { return ButtonPosition.valueOf(getString(VIA_FORGE_BUTTON_POSITION, ButtonPosition.TOP_LEFT.name())); } diff --git a/src/main/java/de/florianmichael/viaforge/common/protocolhack/netty/VFNetworkManager.java b/src/main/java/de/florianmichael/viaforge/common/protocolhack/netty/VFNetworkManager.java index 0312592..29f5686 100644 --- a/src/main/java/de/florianmichael/viaforge/common/protocolhack/netty/VFNetworkManager.java +++ b/src/main/java/de/florianmichael/viaforge/common/protocolhack/netty/VFNetworkManager.java @@ -10,7 +10,15 @@ public interface VFNetworkManager { */ void viaforge_setupPreNettyDecryption(); + /** + * @return the target version of the connection + */ VersionEnum viaforge_getTrackedVersion(); + /** + * Sets the target version of the connection. + * + * @param version the target version + */ void viaforge_setTrackedVersion(final VersionEnum version); } diff --git a/src/main/resources/assets/viaforge/config.yml b/src/main/resources/assets/viaforge/config.yml index 9c064a3..7f947cc 100644 --- a/src/main/resources/assets/viaforge/config.yml +++ b/src/main/resources/assets/viaforge/config.yml @@ -18,6 +18,9 @@ verify-session-in-old-versions: true # Allow ViaForge to authenticate with BetaCraft's MP-Pass system for <= c0.30 servers. allow-betacraft-authentication: true # +# If enabled, ViaForge will show the current protocol version in the F3 menu. +show-protocol-version-in-f3: true +# #----------------------------------------------------------# # GUI OPTIONS # #----------------------------------------------------------# diff --git a/viaforge-mc112/src/main/java/de/florianmichael/viaforge/gui/GuiProtocolSelector.java b/viaforge-mc112/src/main/java/de/florianmichael/viaforge/gui/GuiProtocolSelector.java index 2a0e47b..a05e34f 100644 --- a/viaforge-mc112/src/main/java/de/florianmichael/viaforge/gui/GuiProtocolSelector.java +++ b/viaforge-mc112/src/main/java/de/florianmichael/viaforge/gui/GuiProtocolSelector.java @@ -36,6 +36,7 @@ import java.util.concurrent.ExecutionException; public class GuiProtocolSelector extends GuiScreen { private final GuiScreen parent; + private final boolean simple; private final FinishedCallback finishedCallback; private SlotList list; @@ -44,14 +45,15 @@ public class GuiProtocolSelector extends GuiScreen { private long time; public GuiProtocolSelector(final GuiScreen parent) { - this(parent, (version, unused) -> { + this(parent, false, (version, unused) -> { // Default action is to set the target version and go back to the parent screen. ViaForgeCommon.getManager().setTargetVersion(version); }); } - public GuiProtocolSelector(final GuiScreen parent, final FinishedCallback finishedCallback) { + public GuiProtocolSelector(final GuiScreen parent, final boolean simple, final FinishedCallback finishedCallback) { this.parent = parent; + this.simple = simple; this.finishedCallback = finishedCallback; } @@ -59,8 +61,10 @@ public class GuiProtocolSelector extends GuiScreen { public void initGui() { super.initGui(); buttonList.add(new GuiButton(1, 5, height - 25, 20, 20, "<-")); - buttonList.add(new GuiButton(2, width - 105, 5, 100, 20, "Create dump")); - buttonList.add(new GuiButton(3, width - 105, height - 25, 100, 20, "Reload configs")); + if (!this.simple) { + buttonList.add(new GuiButton(2, width - 105, 5, 100, 20, "Create dump")); + buttonList.add(new GuiButton(3, width - 105, height - 25, 100, 20, "Reload configs")); + } list = new SlotList(mc, width, height, 3 + 3 /* start offset */ + (fontRenderer.FONT_HEIGHT + 2) * 3 /* title is 2 */, height - 30, fontRenderer.FONT_HEIGHT + 2); } @@ -151,7 +155,14 @@ public class GuiProtocolSelector extends GuiScreen { final VersionEnum targetVersion = ViaForgeCommon.getManager().getTargetVersion(); final VersionEnum version = VersionEnum.SORTED_VERSIONS.get(index); - drawCenteredString(mc.fontRenderer,(targetVersion == version ? ChatFormatting.GREEN.toString() : ChatFormatting.DARK_RED.toString()) + version.getName(), width / 2, y, -1); + String color; + if (targetVersion == version) { + color = GuiProtocolSelector.this.simple ? ChatFormatting.GOLD.toString() : ChatFormatting.GREEN.toString(); + } else { + color = GuiProtocolSelector.this.simple ? ChatFormatting.WHITE.toString() : ChatFormatting.DARK_RED.toString(); + } + + drawCenteredString(mc.fontRenderer,(color) + version.getName(), width / 2, y, -1); } } diff --git a/viaforge-mc112/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinGuiMultiplayer.java b/viaforge-mc112/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinGuiMultiplayer.java index 3e1d192..c2d57d6 100644 --- a/viaforge-mc112/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinGuiMultiplayer.java +++ b/viaforge-mc112/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinGuiMultiplayer.java @@ -34,9 +34,6 @@ public class MixinGuiMultiplayer extends GuiScreen { @Inject(method = "initGui", at = @At("RETURN")) public void hookViaForgeButton(CallbackInfo ci) { - // If the previous server forced a version, we need to restore the version to the default one. - ViaForgeCommon.getManager().restoreVersion(); - final ViaForgeConfig config = ViaForgeCommon.getManager().getConfig(); if (config.isShowMultiplayerButton()) { final Pair pos = config.getViaForgeButtonPosition().getPosition(this.width, this.height); diff --git a/viaforge-mc112/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinGuiOverlayDebug.java b/viaforge-mc112/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinGuiOverlayDebug.java new file mode 100644 index 0000000..da7ad59 --- /dev/null +++ b/viaforge-mc112/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinGuiOverlayDebug.java @@ -0,0 +1,35 @@ +package de.florianmichael.viaforge.mixin.impl; + +import de.florianmichael.viaforge.common.ViaForgeCommon; +import net.minecraft.client.gui.GuiOverlayDebug; +import net.raphimc.vialegacy.api.LegacyProtocolVersion; +import net.raphimc.vialoader.util.VersionEnum; +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.CallbackInfoReturnable; + +import java.util.List; + +@Mixin(GuiOverlayDebug.class) +public class MixinGuiOverlayDebug { + + @Inject(method = "getDebugInfoRight", at = @At(value = "TAIL")) + public void addViaForgeVersion(CallbackInfoReturnable> cir) { + final ViaForgeCommon common = ViaForgeCommon.getManager(); + final VersionEnum version = ViaForgeCommon.getManager().getTargetVersion(); + + if (common.getConfig().isShowProtocolVersionInF3() && version != common.getNativeVersion() && !common.getPlatform().isSingleplayer().get()) { + cir.getReturnValue().add(""); + + int protocolVersion = version.getVersion(); + if (version.isOlderThanOrEqualTo(VersionEnum.r1_6_4)) { + // Older versions (<= 1.6.4) are using fake ids in ViaLegacy to prevent version duplications / mismatches + // So we need to unmap the version to get the real protocol version id + protocolVersion = LegacyProtocolVersion.getRealProtocolVersion(protocolVersion); + } + + cir.getReturnValue().add("ViaForge: " + version.getName() + " (" + protocolVersion + ")"); + } + } +} diff --git a/viaforge-mc112/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinGuiScreenAddServer.java b/viaforge-mc112/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinGuiScreenAddServer.java index 5585be0..940e296 100644 --- a/viaforge-mc112/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinGuiScreenAddServer.java +++ b/viaforge-mc112/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinGuiScreenAddServer.java @@ -55,7 +55,7 @@ public class MixinGuiScreenAddServer extends GuiScreen { public void actionPerformed(GuiButton button, CallbackInfo ci) { if (ViaForgeCommon.getManager().getConfig().isShowAddServerButton()) { if (button.id == 1_000_000_000) { - mc.displayGuiScreen(new GuiProtocolSelector(this, (version, parent) -> { + mc.displayGuiScreen(new GuiProtocolSelector(this, true, (version, parent) -> { // Set version and go back to the parent screen. ((ExtendedServerData) serverData).viaforge_setVersion(version); mc.displayGuiScreen(parent); diff --git a/viaforge-mc112/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinNetworkManager.java b/viaforge-mc112/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinNetworkManager.java index 986d8c1..1dc306f 100644 --- a/viaforge-mc112/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinNetworkManager.java +++ b/viaforge-mc112/src/main/java/de/florianmichael/viaforge/mixin/impl/MixinNetworkManager.java @@ -20,12 +20,12 @@ package de.florianmichael.viaforge.mixin.impl; import de.florianmichael.viaforge.common.ViaForgeCommon; import de.florianmichael.viaforge.common.protocolhack.netty.VFNetworkManager; import io.netty.channel.Channel; -import io.netty.channel.ChannelHandlerContext; import net.minecraft.network.NettyEncryptingDecoder; import net.minecraft.network.NettyEncryptingEncoder; import net.minecraft.network.NetworkManager; import net.minecraft.util.CryptManager; import net.minecraft.util.LazyLoadBase; +import net.minecraft.util.text.ITextComponent; import net.raphimc.vialoader.netty.VLLegacyPipeline; import net.raphimc.vialoader.util.VersionEnum; import org.spongepowered.asm.mixin.Mixin; @@ -49,6 +49,9 @@ public class MixinNetworkManager implements VFNetworkManager { @Unique private Cipher viaforge_decryptionCipher; + @Unique + private VersionEnum viaforge_targetVersion; + @Inject(method = "createNetworkManagerAndConnect", at = @At(value = "INVOKE", target = "Lio/netty/bootstrap/Bootstrap;group(Lio/netty/channel/EventLoopGroup;)Lio/netty/bootstrap/AbstractBootstrap;"), locals = LocalCapture.CAPTURE_FAILHARD) private static void trackSelfTarget(InetAddress address, int serverPort, boolean useNativeTransport, CallbackInfoReturnable cir, NetworkManager networkmanager, Class oclass, LazyLoadBase lazyloadbase) { // The connecting screen and server pinger are setting the main target version when a specific version for a server is set, @@ -74,6 +77,12 @@ public class MixinNetworkManager implements VFNetworkManager { } } + @Inject(method = "closeChannel", at = @At("HEAD")) + public void restoreTargetVersion(ITextComponent message, CallbackInfo ci) { + // If the previous server forced a version, we need to restore the version to the default one. + ViaForgeCommon.getManager().restoreVersion(); + } + @Inject(method = "setCompressionThreshold", at = @At("RETURN")) public void reorderPipeline(int p_setCompressionTreshold_1_, CallbackInfo ci) { ViaForgeCommon.getManager().reorderCompression(channel); @@ -85,9 +94,6 @@ public class MixinNetworkManager implements VFNetworkManager { this.channel.pipeline().addBefore(VLLegacyPipeline.VIALEGACY_PRE_NETTY_LENGTH_REMOVER_NAME, "decrypt", new NettyEncryptingDecoder(this.viaforge_decryptionCipher)); } - @Unique - private VersionEnum viaforge_targetVersion; - @Override public VersionEnum viaforge_getTrackedVersion() { return viaforge_targetVersion; diff --git a/viaforge-mc112/src/main/resources/mixins.viaforge-mc112.json b/viaforge-mc112/src/main/resources/mixins.viaforge-mc112.json index d3019d7..00ac905 100644 --- a/viaforge-mc112/src/main/resources/mixins.viaforge-mc112.json +++ b/viaforge-mc112/src/main/resources/mixins.viaforge-mc112.json @@ -8,6 +8,7 @@ "MixinGuiConnecting_1", "MixinGuiMainMenu", "MixinGuiMultiplayer", + "MixinGuiOverlayDebug", "MixinGuiScreenAddServer", "MixinGuiScreenServerList", "MixinNetHandlerLoginClient",