Skip to content

Restore compatibility for 1.21.4/5 #195

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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<FMLCommonSetupEvent>) this::onInit);
} catch (Exception e) {
throw new IllegalArgumentException(e);
}
}
}

private void onInit(FMLCommonSetupEvent event) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

Expand Down Expand Up @@ -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<SlotList.SlotEntry> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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 {
Expand All @@ -46,7 +48,7 @@ public void saveVersion(CallbackInfoReturnable<CompoundTag> cir, CompoundTag com
@Inject(method = "read", at = @At(value = "TAIL"))
private static void getVersion(CompoundTag compoundnbt, CallbackInfoReturnable<ServerData> 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)));
}
}

Expand All @@ -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;
}
}
}