diff --git a/viaforge-mc1217/src/main/java/de/florianmichael/viaforge/ViaForge1217.java b/viaforge-mc1217/src/main/java/de/florianmichael/viaforge/ViaForge1217.java index b5b18302..601c7eff 100644 --- a/viaforge-mc1217/src/main/java/de/florianmichael/viaforge/ViaForge1217.java +++ b/viaforge-mc1217/src/main/java/de/florianmichael/viaforge/ViaForge1217.java @@ -36,8 +36,18 @@ @Mod("viaforge") public class ViaForge1217 implements VFPlatform { + @SuppressWarnings("all") public ViaForge1217(final FMLJavaModLoadingContext context) { - FMLCommonSetupEvent.getBus(context.getModBusGroup()).addListener(this::onInit); + if (SharedConstants.getProtocolVersion() >= 771) { + FMLCommonSetupEvent.getBus(context.getModBusGroup()).addListener(this::onInit);; + } else { + try { + Object bus = FMLJavaModLoadingContext.class.getDeclaredMethod("getModEventBus").invoke(context); + bus.getClass().getDeclaredMethod("addListener", java.util.function.Consumer.class).invoke(bus, (java.util.function.Consumer) this::onInit); + } catch (Exception e) { + throw new IllegalArgumentException(e); + } + } } private void onInit(FMLCommonSetupEvent event) { diff --git a/viaforge-mc1217/src/main/java/de/florianmichael/viaforge/gui/GuiProtocolSelector.java b/viaforge-mc1217/src/main/java/de/florianmichael/viaforge/gui/GuiProtocolSelector.java index 0731f56a..caa3ffb1 100644 --- a/viaforge-mc1217/src/main/java/de/florianmichael/viaforge/gui/GuiProtocolSelector.java +++ b/viaforge-mc1217/src/main/java/de/florianmichael/viaforge/gui/GuiProtocolSelector.java @@ -18,12 +18,15 @@ package de.florianmichael.viaforge.gui; +import com.mojang.blaze3d.vertex.PoseStack; import com.viaversion.vialoader.util.ProtocolVersionList; import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.util.DumpUtil; import de.florianmichael.viaforge.common.ViaForgeCommon; import net.minecraft.ChatFormatting; +import net.minecraft.SharedConstants; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.ObjectSelectionList; @@ -32,6 +35,8 @@ import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import org.lwjgl.glfw.GLFW; +import javax.annotation.Nullable; +import java.lang.reflect.Method; import java.util.UUID; import java.util.concurrent.ExecutionException; @@ -102,15 +107,49 @@ public void render(GuiGraphics graphics, int p_230430_2_, int p_230430_3_, float super.render(graphics, p_230430_2_, p_230430_3_, p_230430_4_); - final var pose = graphics.pose(); - - pose.pushMatrix(); - pose.scale(2.0F, 2.0F); - graphics.drawCenteredString(font, ChatFormatting.GOLD + "ViaForge", width / 4, 3, -1); - pose.popMatrix(); - + if (SharedConstants.getProtocolVersion() >= 771) { + final var pose = graphics.pose(); + pose.pushMatrix(); + pose.scale(2.0F, 2.0F); + graphics.drawCenteredString(font, ChatFormatting.GOLD + "ViaForge", width / 4, 3, -1); + pose.popMatrix(); + } else { // 1.21.5 and before has different type + try { + if (viaforge$pose == null) { + viaforge$pose = GuiGraphics.class.getDeclaredMethod("pose"); + } + final PoseStack pose = (PoseStack) viaforge$pose.invoke(graphics); + pose.pushPose(); + pose.scale(2.0F, 2.0F, 2.0F); + graphics.drawCenteredString(font, ChatFormatting.GOLD + "ViaForge", width / 4, 3, 16777215); + pose.popPose(); + } catch (Exception e) { + throw new IllegalArgumentException(e); + } + } graphics.drawCenteredString(font, "https://github.com/ViaVersion/ViaForge", width / 2, (font.lineHeight + 2) * 2 + 3, -1); - graphics.drawString(font, status != null ? status : "Discord: florianmichael", 3, 3, -1); + drawString(graphics, font, status != null ? status : "Discord: florianmichael"); + } + + /** + * 1.21.5 Compat + */ + private static Method viaforge$pose; + private static Method viaforge$drawString; + + private static void drawString(GuiGraphics graphics, Font font, String s) { + if (SharedConstants.getProtocolVersion() >= 771) { + graphics.drawString(font, s, 3, 3, -1); + } else { + try { + if (viaforge$drawString == null) { + viaforge$drawString = GuiGraphics.class.getDeclaredMethod("drawString", Font.class, String.class, int.class, int.class, int.class); + } + viaforge$drawString.invoke(graphics, font, s, 3, 3, -1); + } catch (Exception e) { + throw new IllegalArgumentException(e); + } + } } class SlotList extends ObjectSelectionList { diff --git a/viaforge-mc1217/src/main/java/de/florianmichael/viaforge/mixin/MixinServerData.java b/viaforge-mc1217/src/main/java/de/florianmichael/viaforge/mixin/MixinServerData.java index 2cbd4c39..07cfa68c 100644 --- a/viaforge-mc1217/src/main/java/de/florianmichael/viaforge/mixin/MixinServerData.java +++ b/viaforge-mc1217/src/main/java/de/florianmichael/viaforge/mixin/MixinServerData.java @@ -19,6 +19,7 @@ package de.florianmichael.viaforge.mixin; import de.florianmichael.viaforge.common.gui.ExtendedServerData; +import net.minecraft.SharedConstants; import net.minecraft.client.multiplayer.ServerData; import net.minecraft.nbt.CompoundTag; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; @@ -29,6 +30,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; +import java.lang.reflect.Method; @Mixin(ServerData.class) public class MixinServerData implements ExtendedServerData { @@ -46,7 +48,7 @@ public void saveVersion(CallbackInfoReturnable cir, CompoundTag com @Inject(method = "read", at = @At(value = "TAIL")) private static void getVersion(CompoundTag compoundnbt, CallbackInfoReturnable cir) { if (compoundnbt.contains("viaForge$version")) { - ((ExtendedServerData) cir.getReturnValue()).viaForge$setVersion(ProtocolVersion.getClosest(compoundnbt.getStringOr("viaForge$version", ""))); + ((ExtendedServerData) cir.getReturnValue()).viaForge$setVersion(ProtocolVersion.getClosest(viaforge$getString(compoundnbt))); } } @@ -67,4 +69,28 @@ public void track(ServerData serverDataIn, CallbackInfo ci) { viaForge$version = version; } + @Unique + private static Method viaForge$getString; + + /** + * 1.21.4 Compat + */ + @Unique + private static String viaforge$getString(CompoundTag compoundnbt) { + if (SharedConstants.getProtocolVersion() >= 770) { + return compoundnbt.getStringOr("viaForge$version", ""); + } else { + String s = ""; + try { + if (viaForge$getString == null) { + viaForge$getString = CompoundTag.class.getDeclaredMethod("getString", String.class); + } + s = (String) viaForge$getString.invoke(compoundnbt, "viaForge$version"); + } catch (Exception e) { + throw new IllegalArgumentException(e); + } + return s; + } + } } +