From 7b6355ada88094610d5cc579347febb1850c1c54 Mon Sep 17 00:00:00 2001
From: FlorianMichael <60033407+FlorianMichael@users.noreply.github.com>
Date: Sat, 2 Sep 2023 23:46:01 +0200
Subject: [PATCH] Rewrite handling of almost all clientside fixes
Fixed https://github.com/ViaVersion/ViaFabricPlus/issues/237
---
.../viafabricplus/ViaFabricPlus.java | 12 +-
.../base/settings/groups/BedrockSettings.java | 2 +-
.../definition/ArmorPointCalculation.java | 71 ------
.../definition/BuiltinEmptyGlyph1_12_2.java | 67 ++++++
.../definition/ChatLengthCalculation.java | 58 -----
.../definition/ClientsideFixes.java | 208 ++++++++++++++++++
.../definition/FontRenderer1_12_2.java | 86 --------
.../definition/LegacyServerAddress.java | 35 ---
.../definition/PacketSyncBase.java | 46 ----
.../definition/SpawnPositionTracker.java | 49 -----
.../BedrockAccountHandler.java | 2 +-
.../ClassiCubeAccountHandler.java | 2 +-
.../definition/bedrock/ModelFormats.java | 30 ---
.../{ => tracker}/TeleportTracker.java | 2 +-
.../WolfHealthTracker.java} | 17 +-
.../bedrock/JoinGameTracker.java} | 6 +-
.../information/impl/BedrockInformation.java | 23 +-
.../mixin/base/MixinConnectScreen_1.java | 4 +-
.../mixin/base/MixinMinecraftClient.java | 14 +-
.../mixin/base/MixinMultiplayerScreen.java | 4 +-
.../MixinClientPlayNetworkHandler.java | 8 +-
.../fixes/minecraft/MixinFontStorage.java | 11 +-
.../MixinMultiplayerServerListPinger.java | 6 +-
.../fixes/minecraft/MixinStringHelper.java | 5 +-
.../minecraft/block/MixinFarmlandBlock.java | 2 +-
.../entity/MixinClientPlayerEntity.java | 4 +-
.../minecraft/entity/MixinWolfEntity.java | 8 +-
.../packet/MixinChatMessageC2SPacket.java | 5 +-
.../minecraft/screen/MixinChatScreen.java | 5 +-
.../screen/MixinConnectScreen_1.java | 4 +-
.../viabedrock/MixinBedrockProtocol.java | 4 +-
.../fixes/viabedrock/MixinJoinPackets.java | 8 +-
.../vialegacy/MixinProtocol1_8to1_7_6_10.java | 2 +-
.../MixinProtocol1_11To1_10.java | 4 +-
.../MixinInventoryPackets.java | 9 +-
.../MixinMetadataRewriter1_15To1_14_4.java | 9 +-
.../MixinProtocol1_18_2To1_18.java | 62 ------
.../MixinWorldPackets.java | 6 +-
.../MixinInventoryPackets.java | 6 +-
.../screen/base/ProtocolSelectionScreen.java | 2 +-
.../screen/thirdparty/BetaCraftScreen.java | 4 +-
.../classicube/ClassiCubeLoginScreen.java | 2 +-
.../classicube/ClassiCubeMFAScreen.java | 2 +-
.../ClassiCubeServerListScreen.java | 2 +-
src/main/resources/viafabricplus.mixins.json | 9 +-
45 files changed, 393 insertions(+), 534 deletions(-)
delete mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/ArmorPointCalculation.java
create mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/BuiltinEmptyGlyph1_12_2.java
delete mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/ChatLengthCalculation.java
create mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/ClientsideFixes.java
delete mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/FontRenderer1_12_2.java
delete mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/LegacyServerAddress.java
delete mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/PacketSyncBase.java
delete mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/SpawnPositionTracker.java
rename src/main/java/de/florianmichael/viafabricplus/definition/{bedrock => account}/BedrockAccountHandler.java (98%)
rename src/main/java/de/florianmichael/viafabricplus/definition/{classic => account}/ClassiCubeAccountHandler.java (97%)
delete mode 100644 src/main/java/de/florianmichael/viafabricplus/definition/bedrock/ModelFormats.java
rename src/main/java/de/florianmichael/viafabricplus/definition/{ => tracker}/TeleportTracker.java (95%)
rename src/main/java/de/florianmichael/viafabricplus/definition/{Meta18Storage.java => tracker/WolfHealthTracker.java} (66%)
rename src/main/java/de/florianmichael/viafabricplus/definition/{bedrock/storage/JoinGameStorage.java => tracker/bedrock/JoinGameTracker.java} (89%)
delete mode 100644 src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_18_2to1_18/MixinProtocol1_18_2To1_18.java
diff --git a/src/main/java/de/florianmichael/viafabricplus/ViaFabricPlus.java b/src/main/java/de/florianmichael/viafabricplus/ViaFabricPlus.java
index 82908a72..2e09fc6a 100644
--- a/src/main/java/de/florianmichael/viafabricplus/ViaFabricPlus.java
+++ b/src/main/java/de/florianmichael/viafabricplus/ViaFabricPlus.java
@@ -23,12 +23,10 @@ import de.florianmichael.viafabricplus.base.file.ViaJarReplacer;
import de.florianmichael.viafabricplus.base.event.FinishMinecraftLoadCallback;
import de.florianmichael.viafabricplus.base.event.PreLoadCallback;
import de.florianmichael.viafabricplus.base.settings.SettingsSystem;
-import de.florianmichael.viafabricplus.definition.ChatLengthCalculation;
-import de.florianmichael.viafabricplus.definition.bedrock.BedrockAccountHandler;
-import de.florianmichael.viafabricplus.definition.classic.ClassiCubeAccountHandler;
+import de.florianmichael.viafabricplus.definition.ClientsideFixes;
+import de.florianmichael.viafabricplus.definition.account.BedrockAccountHandler;
+import de.florianmichael.viafabricplus.definition.account.ClassiCubeAccountHandler;
import de.florianmichael.viafabricplus.definition.classic.protocol.CustomClassicProtocolExtensions;
-import de.florianmichael.viafabricplus.definition.FontRenderer1_12_2;
-import de.florianmichael.viafabricplus.definition.ArmorPointCalculation;
import de.florianmichael.viafabricplus.information.InformationSystem;
import de.florianmichael.viafabricplus.mappings.CharacterMappings;
import de.florianmichael.viafabricplus.mappings.ItemReleaseVersionMappings;
@@ -82,9 +80,8 @@ public class ViaFabricPlus {
BedrockAccountHandler.create();
// Fixes which requires to be loaded pre
- ChatLengthCalculation.create();
+ ClientsideFixes.init();
CharacterMappings.load();
- FontRenderer1_12_2.init();
// Protocol Translator
ProtocolHack.init();
@@ -101,7 +98,6 @@ public class ViaFabricPlus {
// Version related mappings
PackFormatsMappings.load();
ItemReleaseVersionMappings.create();
- ArmorPointCalculation.load();
});
}
diff --git a/src/main/java/de/florianmichael/viafabricplus/base/settings/groups/BedrockSettings.java b/src/main/java/de/florianmichael/viafabricplus/base/settings/groups/BedrockSettings.java
index 7cb3ac65..b8d6ee89 100644
--- a/src/main/java/de/florianmichael/viafabricplus/base/settings/groups/BedrockSettings.java
+++ b/src/main/java/de/florianmichael/viafabricplus/base/settings/groups/BedrockSettings.java
@@ -21,7 +21,7 @@ import com.mojang.blaze3d.systems.RenderSystem;
import de.florianmichael.viafabricplus.base.settings.base.SettingGroup;
import de.florianmichael.viafabricplus.base.settings.type_impl.BooleanSetting;
import de.florianmichael.viafabricplus.base.settings.type_impl.ButtonSetting;
-import de.florianmichael.viafabricplus.definition.bedrock.BedrockAccountHandler;
+import de.florianmichael.viafabricplus.definition.account.BedrockAccountHandler;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.ConfirmScreen;
import net.minecraft.client.gui.screen.NoticeScreen;
diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/ArmorPointCalculation.java b/src/main/java/de/florianmichael/viafabricplus/definition/ArmorPointCalculation.java
deleted file mode 100644
index 4a5ec462..00000000
--- a/src/main/java/de/florianmichael/viafabricplus/definition/ArmorPointCalculation.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus
- * 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.viafabricplus.definition;
-
-import com.viaversion.viaversion.protocols.protocol1_9to1_8.ArmorType;
-import net.minecraft.client.MinecraftClient;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
-import net.minecraft.item.Items;
-import net.minecraft.registry.Registries;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class ArmorPointCalculation {
- public final static List- ARMOR_ITEMS_IN_1_8 = Arrays.asList(
- Items.LEATHER_HELMET,
- Items.LEATHER_CHESTPLATE,
- Items.LEATHER_BOOTS,
- Items.CHAINMAIL_HELMET,
- Items.CHAINMAIL_CHESTPLATE,
- Items.CHAINMAIL_LEGGINGS,
- Items.CHAINMAIL_BOOTS,
- Items.IRON_HELMET,
- Items.IRON_CHESTPLATE,
- Items.IRON_LEGGINGS,
- Items.IRON_BOOTS,
- Items.DIAMOND_HELMET,
- Items.DIAMOND_CHESTPLATE,
- Items.DIAMOND_LEGGINGS,
- Items.DIAMOND_BOOTS,
- Items.GOLDEN_HELMET,
- Items.GOLDEN_CHESTPLATE,
- Items.GOLDEN_LEGGINGS,
- Items.GOLDEN_BOOTS
- );
-
- private final static Map
- armorTracker = new HashMap<>();
-
- public static void load() {
- for (Item armorItem : ARMOR_ITEMS_IN_1_8) {
- armorTracker.put(armorItem, ArmorType.findByType(Registries.ITEM.getId(armorItem).toString()).getArmorPoints());
- }
- }
-
- private static int getArmorPoints(final ItemStack itemStack) {
- if (!armorTracker.containsKey(itemStack.getItem())) return 0;
- return armorTracker.get(itemStack.getItem());
- }
-
- public static int sum() {
- return MinecraftClient.getInstance().player.getInventory().armor.stream().mapToInt(ArmorPointCalculation::getArmorPoints).sum();
- }
-}
diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/BuiltinEmptyGlyph1_12_2.java b/src/main/java/de/florianmichael/viafabricplus/definition/BuiltinEmptyGlyph1_12_2.java
new file mode 100644
index 00000000..9f6cb254
--- /dev/null
+++ b/src/main/java/de/florianmichael/viafabricplus/definition/BuiltinEmptyGlyph1_12_2.java
@@ -0,0 +1,67 @@
+/*
+ * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus
+ * 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.viafabricplus.definition;
+
+import net.minecraft.client.font.Glyph;
+import net.minecraft.client.font.GlyphRenderer;
+import net.minecraft.client.font.RenderableGlyph;
+
+import java.util.function.Function;
+
+/**
+ * Implementation of a "Very Missing" Glyph which doesn't have any rendering at all ("Missing" in <= 1.12.2)
+ */
+public enum BuiltinEmptyGlyph1_12_2 implements Glyph {
+
+ VERY_MISSING;
+
+ @Override
+ public float getAdvance() {
+ return 1;
+ }
+
+ @Override
+ public GlyphRenderer bake(Function function) {
+ return function.apply(new RenderableGlyph() {
+
+ @Override
+ public int getWidth() {
+ return 0;
+ }
+
+ @Override
+ public int getHeight() {
+ return 0;
+ }
+
+ @Override
+ public float getOversample() {
+ return 1.0f;
+ }
+
+ @Override
+ public void upload(int x, int y) {
+ }
+
+ @Override
+ public boolean hasColor() {
+ return true;
+ }
+ });
+ }
+}
diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/ChatLengthCalculation.java b/src/main/java/de/florianmichael/viafabricplus/definition/ChatLengthCalculation.java
deleted file mode 100644
index feaa9cdc..00000000
--- a/src/main/java/de/florianmichael/viafabricplus/definition/ChatLengthCalculation.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus
- * 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.viafabricplus.definition;
-
-import net.raphimc.vialoader.util.VersionEnum;
-import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
-import de.florianmichael.viafabricplus.base.event.ChangeProtocolVersionCallback;
-import de.florianmichael.viafabricplus.base.event.LoadClassicProtocolExtensionCallback;
-import net.minecraft.client.MinecraftClient;
-import net.raphimc.vialoader.util.VersionEnum;
-import net.raphimc.vialegacy.api.LegacyProtocolVersion;
-import net.raphimc.vialegacy.protocols.classic.protocolc0_28_30toc0_28_30cpe.data.ClassicProtocolExtension;
-
-public class ChatLengthCalculation {
- public static ChatLengthCalculation INSTANCE;
-
- private int maxLength = 256;
-
- public static void create() {
- INSTANCE = new ChatLengthCalculation();
-
- ChangeProtocolVersionCallback.EVENT.register(protocolVersion -> {
- INSTANCE.maxLength = 256;
- if (protocolVersion.isOlderThanOrEqualTo(VersionEnum.r1_10)) {
- INSTANCE.maxLength = 100;
-
- if (protocolVersion.isOlderThanOrEqualTo(VersionEnum.c0_28toc0_30)) {
- INSTANCE.maxLength = 64 - MinecraftClient.getInstance().getSession().getUsername().length() - 2;
- }
- }
- });
-
- LoadClassicProtocolExtensionCallback.EVENT.register(classicProtocolExtension -> {
- if (classicProtocolExtension == ClassicProtocolExtension.LONGER_MESSAGES) {
- INSTANCE.maxLength = Short.MAX_VALUE * 2;
- }
- });
- }
-
- public int getMaxLength() {
- return maxLength;
- }
-}
diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/ClientsideFixes.java b/src/main/java/de/florianmichael/viafabricplus/definition/ClientsideFixes.java
new file mode 100644
index 00000000..8628b942
--- /dev/null
+++ b/src/main/java/de/florianmichael/viafabricplus/definition/ClientsideFixes.java
@@ -0,0 +1,208 @@
+/*
+ * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus
+ * 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.viafabricplus.definition;
+
+import com.mojang.blaze3d.systems.RenderSystem;
+import com.viaversion.viaversion.protocols.protocol1_9to1_8.ArmorType;
+import de.florianmichael.viafabricplus.base.event.ChangeProtocolVersionCallback;
+import de.florianmichael.viafabricplus.base.event.FinishMinecraftLoadCallback;
+import de.florianmichael.viafabricplus.base.event.LoadClassicProtocolExtensionCallback;
+import de.florianmichael.viafabricplus.injection.access.IFontStorage;
+import net.fabricmc.loader.api.FabricLoader;
+import net.minecraft.block.Block;
+import net.minecraft.block.Blocks;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.font.FontStorage;
+import net.minecraft.client.network.ServerAddress;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.Items;
+import net.minecraft.network.PacketByteBuf;
+import net.minecraft.registry.Registries;
+import net.raphimc.vialegacy.protocols.classic.protocolc0_28_30toc0_28_30cpe.data.ClassicProtocolExtension;
+import net.raphimc.vialoader.util.VersionEnum;
+import net.raphimc.vialoader.util.VersionRange;
+
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Consumer;
+
+/**
+ * This class contains random fields and methods that are used to fix bugs on the client side
+ */
+public class ClientsideFixes {
+
+ /**
+ * A list of blocks that need to be reloaded when the protocol version changes to change bounding boxes
+ */
+ private static List RELOADABLE_BLOCKS;
+
+ /**
+ * Legacy versions do not support SRV records, so we need to resolve them manually
+ */
+ public final static VersionRange LEGACY_SRV_RESOLVE = VersionRange.andOlder(VersionEnum.r1_2_4tor1_2_5).add(VersionRange.single(VersionEnum.bedrockLatest));
+
+ /**
+ * Tracks if the client is using DashLoader, so we can skip some fixes in the font rendering since they break DashLoader
+ */
+ public final static boolean DASH_LOADER = FabricLoader.getInstance().isModLoaded("dashloader");
+
+ /**
+ * Contains the armor points of all armor items in legacy versions (<= 1.8.x)
+ */
+ private final static Map
- LEGACY_ARMOR_POINTS = new HashMap<>();
+
+ /**
+ * Contains all tasks that are waiting for a packet to be received, this system can be used to sync ViaVersion tasks with the correct thread
+ */
+ private final static Map> PENDING_EXECUTION_TASKS = new ConcurrentHashMap<>();
+
+ /**
+ * This identifier is an internal identifier that is used to identify packets that are sent by ViaFabricPlus
+ */
+ public final static String PACKET_SYNC_IDENTIFIER = UUID.randomUUID() + ":" + UUID.randomUUID();
+
+ /**
+ * The current chat limit
+ */
+ private static int currentChatLimit = 256;
+
+ public static void init() {
+ FinishMinecraftLoadCallback.EVENT.register(() -> {
+ // Loads the armor points of all armor items in legacy versions (<= 1.8.x)
+ for (Item armorItem : Arrays.asList(Items.LEATHER_HELMET, Items.LEATHER_CHESTPLATE, Items.LEATHER_BOOTS,
+ Items.CHAINMAIL_HELMET, Items.CHAINMAIL_CHESTPLATE, Items.CHAINMAIL_LEGGINGS, Items.CHAINMAIL_BOOTS,
+ Items.IRON_HELMET, Items.IRON_CHESTPLATE, Items.IRON_LEGGINGS, Items.IRON_BOOTS, Items.DIAMOND_HELMET,
+ Items.DIAMOND_CHESTPLATE, Items.DIAMOND_LEGGINGS, Items.DIAMOND_BOOTS, Items.GOLDEN_HELMET,
+ Items.GOLDEN_CHESTPLATE, Items.GOLDEN_LEGGINGS, Items.GOLDEN_BOOTS)) {
+ LEGACY_ARMOR_POINTS.put(armorItem, ArmorType.findByType(Registries.ITEM.getId(armorItem).toString()).getArmorPoints());
+ }
+
+ RELOADABLE_BLOCKS = Arrays.asList(Blocks.ANVIL, Blocks.WHITE_BED, Blocks.ORANGE_BED,
+ Blocks.MAGENTA_BED, Blocks.LIGHT_BLUE_BED, Blocks.YELLOW_BED, Blocks.LIME_BED, Blocks.PINK_BED, Blocks.GRAY_BED,
+ Blocks.LIGHT_GRAY_BED, Blocks.CYAN_BED, Blocks.PURPLE_BED, Blocks.BLUE_BED, Blocks.BROWN_BED, Blocks.GREEN_BED,
+ Blocks.RED_BED, Blocks.BLACK_BED, Blocks.BREWING_STAND, Blocks.CAULDRON, Blocks.CHEST, Blocks.PITCHER_CROP,
+ Blocks.END_PORTAL, Blocks.END_PORTAL_FRAME, Blocks.FARMLAND, Blocks.OAK_FENCE, Blocks.HOPPER, Blocks.LADDER,
+ Blocks.LILY_PAD, Blocks.GLASS_PANE, Blocks.WHITE_STAINED_GLASS_PANE, Blocks.ORANGE_STAINED_GLASS_PANE,
+ Blocks.MAGENTA_STAINED_GLASS_PANE, Blocks.LIGHT_BLUE_STAINED_GLASS_PANE, Blocks.YELLOW_STAINED_GLASS_PANE,
+ Blocks.LIME_STAINED_GLASS_PANE, Blocks.PINK_STAINED_GLASS_PANE, Blocks.GRAY_STAINED_GLASS_PANE,
+ Blocks.LIGHT_GRAY_STAINED_GLASS_PANE, Blocks.CYAN_STAINED_GLASS_PANE, Blocks.PURPLE_STAINED_GLASS_PANE,
+ Blocks.BLUE_STAINED_GLASS_PANE, Blocks.BROWN_STAINED_GLASS_PANE, Blocks.GREEN_STAINED_GLASS_PANE,
+ Blocks.RED_STAINED_GLASS_PANE, Blocks.BLACK_STAINED_GLASS_PANE, Blocks.PISTON, Blocks.PISTON_HEAD,
+ Blocks.SNOW, Blocks.COBBLESTONE_WALL, Blocks.MOSSY_COBBLESTONE_WALL
+ );
+ });
+
+ // Reloads some clientside stuff when the protocol version changes
+ ChangeProtocolVersionCallback.EVENT.register(protocolVersion -> {
+ // Reloads all bounding boxes
+ for (Block block : RELOADABLE_BLOCKS) {
+ block.getDefaultState().initShapeCache();
+ }
+
+ // Calculates the current chat limit, since it changes depending on the protocol version
+ currentChatLimit = 256;
+ if (protocolVersion.isOlderThanOrEqualTo(VersionEnum.r1_10)) {
+ currentChatLimit = 100;
+ if (protocolVersion.isOlderThanOrEqualTo(VersionEnum.c0_28toc0_30)) {
+ currentChatLimit = 64 - MinecraftClient.getInstance().getSession().getUsername().length() - 2;
+ }
+ }
+
+ if (DASH_LOADER) {
+ // Reloads all font storages to fix the font renderer
+ for (FontStorage storage : MinecraftClient.getInstance().fontManager.fontStorages.values()) {
+ RenderSystem.recordRenderCall(() -> ((IFontStorage) storage).viafabricplus_clearCaches());
+ }
+ }
+ });
+
+ // Calculates the current chat limit, since it changes depending on the protocol version
+ LoadClassicProtocolExtensionCallback.EVENT.register(classicProtocolExtension -> {
+ if (classicProtocolExtension == ClassicProtocolExtension.LONGER_MESSAGES) {
+ currentChatLimit = Short.MAX_VALUE * 2;
+ }
+ });
+ }
+
+ /**
+ * Parses a server address and returns a {@link ServerAddress} object that is compatible with the specified version
+ *
+ * @param version The version to use
+ * @param address The address to parse
+ * @return The parsed {@link ServerAddress}
+ */
+ public static ServerAddress parse(VersionEnum version, String address) {
+ final ServerAddress modern = ServerAddress.parse(address);
+ if (LEGACY_SRV_RESOLVE.contains(version) && !modern.equals(ServerAddress.INVALID)) {
+ final var addressParts = address.split(":");
+ return new ServerAddress(addressParts[0], addressParts.length > 1 ? Integer.parseInt(addressParts[1]) : 25565);
+ }
+ return modern;
+ }
+
+ /**
+ * Returns the sync task for the specified uuid and removes it from the list
+ *
+ * @param uuid The uuid of the sync task
+ * @return The sync task
+ */
+ public static Consumer getSyncTask(final String uuid) {
+ final var task = PENDING_EXECUTION_TASKS.get(uuid);
+ PENDING_EXECUTION_TASKS.remove(uuid);
+ return task;
+ }
+
+ /**
+ * Checks if there is a sync task for the specified uuid
+ *
+ * @param uuid The uuid to check
+ * @return True if there is a sync task, otherwise false
+ */
+ public static boolean hasSyncTask(final String uuid) {
+ return PENDING_EXECUTION_TASKS.containsKey(uuid);
+ }
+
+ /**
+ * Executes a sync task and returns the uuid of the task
+ *
+ * @param task The task to execute
+ * @return The uuid of the task
+ */
+ public static String executeSyncTask(final Consumer task) {
+ final var uuid = UUID.randomUUID().toString();
+ PENDING_EXECUTION_TASKS.put(uuid, task);
+ return uuid;
+ }
+
+ /**
+ * Returns the armor points of an armor item in legacy versions (<= 1.8.x)
+ *
+ * @param itemStack The item stack to get the armor points from
+ * @return The armor points of the item stack
+ */
+ public static int getLegacyArmorPoints(final ItemStack itemStack) {
+ if (!LEGACY_ARMOR_POINTS.containsKey(itemStack.getItem())) return 0; // Just in case
+
+ return LEGACY_ARMOR_POINTS.get(itemStack.getItem());
+ }
+
+ public static int getCurrentChatLimit() {
+ return currentChatLimit;
+ }
+}
diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/FontRenderer1_12_2.java b/src/main/java/de/florianmichael/viafabricplus/definition/FontRenderer1_12_2.java
deleted file mode 100644
index f62b9dba..00000000
--- a/src/main/java/de/florianmichael/viafabricplus/definition/FontRenderer1_12_2.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus
- * 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.viafabricplus.definition;
-
-import com.mojang.blaze3d.systems.RenderSystem;
-import de.florianmichael.viafabricplus.base.settings.groups.VisualSettings;
-import de.florianmichael.viafabricplus.base.event.ChangeProtocolVersionCallback;
-import de.florianmichael.viafabricplus.injection.access.IFontStorage;
-import net.fabricmc.loader.api.FabricLoader;
-import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.font.Glyph;
-import net.minecraft.client.font.GlyphRenderer;
-import net.minecraft.client.font.RenderableGlyph;
-
-import java.util.function.Function;
-
-public class FontRenderer1_12_2 {
- public final static boolean DASH_LOADER = FabricLoader.getInstance().isModLoaded("dashloader");
-
- public static void init() {
- if (DASH_LOADER) return;
-
- // Reload all font renderer storage
- ChangeProtocolVersionCallback.EVENT.register(protocolVersion ->
- MinecraftClient.getInstance().fontManager.fontStorages.values().
- forEach(fontStorage -> RenderSystem.recordRenderCall(() -> ((IFontStorage) fontStorage).viafabricplus_clearCaches())));
- }
-
- /**
- * Implementation of a "Very Missing" Glyph which doesn't have any rendering at all ("Missing" in <= 1.12.2)
- */
- public enum BuiltinEmptyGlyph1_12_2 implements Glyph {
-
- VERY_MISSING;
-
- @Override
- public float getAdvance() {
- return 1;
- }
-
- @Override
- public GlyphRenderer bake(Function function) {
- return function.apply(new RenderableGlyph() {
-
- @Override
- public int getWidth() {
- return 0;
- }
-
- @Override
- public int getHeight() {
- return 0;
- }
-
- @Override
- public float getOversample() {
- return 1.0f;
- }
-
- @Override
- public void upload(int x, int y) {
- }
-
- @Override
- public boolean hasColor() {
- return true;
- }
- });
- }
- }
-}
diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/LegacyServerAddress.java b/src/main/java/de/florianmichael/viafabricplus/definition/LegacyServerAddress.java
deleted file mode 100644
index eb2c7eac..00000000
--- a/src/main/java/de/florianmichael/viafabricplus/definition/LegacyServerAddress.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus
- * 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.viafabricplus.definition;
-
-import net.minecraft.client.network.ServerAddress;
-import net.raphimc.vialoader.util.VersionEnum;
-import net.raphimc.vialoader.util.VersionRange;
-
-public class LegacyServerAddress {
- public final static VersionRange SRV_RANGE = VersionRange.andOlder(VersionEnum.r1_2_4tor1_2_5).add(VersionRange.single(VersionEnum.bedrockLatest));
-
- public static ServerAddress parse(VersionEnum version, String address) {
- final ServerAddress modern = ServerAddress.parse(address);
- if (SRV_RANGE.contains(version) && !modern.equals(ServerAddress.INVALID)) {
- final var addressParts = address.split(":");
- return new ServerAddress(addressParts[0], addressParts.length > 1 ? Integer.parseInt(addressParts[1]) : 25565);
- }
- return modern;
- }
-}
diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/PacketSyncBase.java b/src/main/java/de/florianmichael/viafabricplus/definition/PacketSyncBase.java
deleted file mode 100644
index d86d9a37..00000000
--- a/src/main/java/de/florianmichael/viafabricplus/definition/PacketSyncBase.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus
- * 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.viafabricplus.definition;
-
-import net.minecraft.network.PacketByteBuf;
-
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.function.Consumer;
-
-public class PacketSyncBase {
- public final static String PACKET_SYNC_IDENTIFIER = UUID.randomUUID() + ":" + UUID.randomUUID();
- private final static Map> tasks = new ConcurrentHashMap<>();
-
- public static Consumer get(final String uuid) {
- final var task = tasks.get(uuid);
- tasks.remove(uuid);
- return task;
- }
-
- public static boolean has(final String uuid) {
- return tasks.containsKey(uuid);
- }
-
- public static String track(final Consumer task) {
- final String uuid = UUID.randomUUID().toString();
- tasks.put(uuid, task);
- return uuid;
- }
-}
diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/SpawnPositionTracker.java b/src/main/java/de/florianmichael/viafabricplus/definition/SpawnPositionTracker.java
deleted file mode 100644
index cd3e6587..00000000
--- a/src/main/java/de/florianmichael/viafabricplus/definition/SpawnPositionTracker.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus
- * 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.viafabricplus.definition;
-
-import com.viaversion.viaversion.api.connection.StoredObject;
-import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.api.minecraft.Position;
-import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
-import com.viaversion.viaversion.api.type.Type;
-import com.viaversion.viaversion.protocols.protocol1_18_2to1_18.Protocol1_18_2To1_18;
-import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.ClientboundPackets1_18;
-
-public class SpawnPositionTracker extends StoredObject {
-
- private Position spawnPosition = new Position(8, 64, 8);
- private float angle = 0F;
-
- public SpawnPositionTracker(final UserConnection user) {
- super(user);
- }
-
- public void setSpawnPosition(final Position spawnPosition, final float angle) {
- this.spawnPosition = spawnPosition;
- this.angle = angle;
- }
-
- public void sendSpawnPosition() throws Exception {
- final PacketWrapper spawnPosition = PacketWrapper.create(ClientboundPackets1_18.SPAWN_POSITION, this.getUser());
- spawnPosition.write(Type.POSITION1_14, this.spawnPosition); // position
- spawnPosition.write(Type.FLOAT, this.angle); // angle
-
- spawnPosition.send(Protocol1_18_2To1_18.class);
- }
-}
diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/bedrock/BedrockAccountHandler.java b/src/main/java/de/florianmichael/viafabricplus/definition/account/BedrockAccountHandler.java
similarity index 98%
rename from src/main/java/de/florianmichael/viafabricplus/definition/bedrock/BedrockAccountHandler.java
rename to src/main/java/de/florianmichael/viafabricplus/definition/account/BedrockAccountHandler.java
index bff169e6..7885ba6b 100644
--- a/src/main/java/de/florianmichael/viafabricplus/definition/bedrock/BedrockAccountHandler.java
+++ b/src/main/java/de/florianmichael/viafabricplus/definition/account/BedrockAccountHandler.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package de.florianmichael.viafabricplus.definition.bedrock;
+package de.florianmichael.viafabricplus.definition.account;
import com.google.gson.JsonObject;
import de.florianmichael.viafabricplus.ViaFabricPlus;
diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/classic/ClassiCubeAccountHandler.java b/src/main/java/de/florianmichael/viafabricplus/definition/account/ClassiCubeAccountHandler.java
similarity index 97%
rename from src/main/java/de/florianmichael/viafabricplus/definition/classic/ClassiCubeAccountHandler.java
rename to src/main/java/de/florianmichael/viafabricplus/definition/account/ClassiCubeAccountHandler.java
index 5b1888c6..ba87237c 100644
--- a/src/main/java/de/florianmichael/viafabricplus/definition/classic/ClassiCubeAccountHandler.java
+++ b/src/main/java/de/florianmichael/viafabricplus/definition/account/ClassiCubeAccountHandler.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package de.florianmichael.viafabricplus.definition.classic;
+package de.florianmichael.viafabricplus.definition.account;
import com.google.gson.JsonObject;
import de.florianmichael.classic4j.model.classicube.highlevel.CCAccount;
diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/bedrock/ModelFormats.java b/src/main/java/de/florianmichael/viafabricplus/definition/bedrock/ModelFormats.java
deleted file mode 100644
index dada1c5e..00000000
--- a/src/main/java/de/florianmichael/viafabricplus/definition/bedrock/ModelFormats.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus
- * 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.viafabricplus.definition.bedrock;
-
-import net.raphimc.viabedrock.protocol.data.enums.bedrock.ServerMovementModes;
-
-public class ModelFormats {
-
- public static String formatMovementMode(final int movementMode) {
- if (movementMode == ServerMovementModes.CLIENT) return "Client";
- if (movementMode == ServerMovementModes.SERVER) return "Server";
-
- return "Server with rewind";
- }
-}
diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/TeleportTracker.java b/src/main/java/de/florianmichael/viafabricplus/definition/tracker/TeleportTracker.java
similarity index 95%
rename from src/main/java/de/florianmichael/viafabricplus/definition/TeleportTracker.java
rename to src/main/java/de/florianmichael/viafabricplus/definition/tracker/TeleportTracker.java
index 1f68a904..51079641 100644
--- a/src/main/java/de/florianmichael/viafabricplus/definition/TeleportTracker.java
+++ b/src/main/java/de/florianmichael/viafabricplus/definition/tracker/TeleportTracker.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package de.florianmichael.viafabricplus.definition;
+package de.florianmichael.viafabricplus.definition.tracker;
import com.viaversion.viaversion.api.connection.StoredObject;
import com.viaversion.viaversion.api.connection.UserConnection;
diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/Meta18Storage.java b/src/main/java/de/florianmichael/viafabricplus/definition/tracker/WolfHealthTracker.java
similarity index 66%
rename from src/main/java/de/florianmichael/viafabricplus/definition/Meta18Storage.java
rename to src/main/java/de/florianmichael/viafabricplus/definition/tracker/WolfHealthTracker.java
index fe5986ac..bc4723fa 100644
--- a/src/main/java/de/florianmichael/viafabricplus/definition/Meta18Storage.java
+++ b/src/main/java/de/florianmichael/viafabricplus/definition/tracker/WolfHealthTracker.java
@@ -15,23 +15,34 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package de.florianmichael.viafabricplus.definition;
+package de.florianmichael.viafabricplus.definition.tracker;
import com.viaversion.viaversion.api.connection.StoredObject;
import com.viaversion.viaversion.api.connection.UserConnection;
+import de.florianmichael.viafabricplus.protocolhack.ProtocolHack;
import java.util.HashMap;
import java.util.Map;
-public class Meta18Storage extends StoredObject {
+public class WolfHealthTracker extends StoredObject {
private final Map healthDataMap = new HashMap<>();
- public Meta18Storage(UserConnection user) {
+ public WolfHealthTracker(UserConnection user) {
super(user);
}
public Map getHealthDataMap() {
return healthDataMap;
}
+
+ public static WolfHealthTracker get() {
+ final var connection = ProtocolHack.getMainUserConnection();
+ if (connection == null) return null;
+
+ if (!connection.has(WolfHealthTracker.class)) {
+ connection.put(new WolfHealthTracker(connection));
+ }
+ return connection.get(WolfHealthTracker.class);
+ }
}
diff --git a/src/main/java/de/florianmichael/viafabricplus/definition/bedrock/storage/JoinGameStorage.java b/src/main/java/de/florianmichael/viafabricplus/definition/tracker/bedrock/JoinGameTracker.java
similarity index 89%
rename from src/main/java/de/florianmichael/viafabricplus/definition/bedrock/storage/JoinGameStorage.java
rename to src/main/java/de/florianmichael/viafabricplus/definition/tracker/bedrock/JoinGameTracker.java
index 4e4381e1..b8736fb1 100644
--- a/src/main/java/de/florianmichael/viafabricplus/definition/bedrock/storage/JoinGameStorage.java
+++ b/src/main/java/de/florianmichael/viafabricplus/definition/tracker/bedrock/JoinGameTracker.java
@@ -15,18 +15,18 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package de.florianmichael.viafabricplus.definition.bedrock.storage;
+package de.florianmichael.viafabricplus.definition.tracker.bedrock;
import com.viaversion.viaversion.api.connection.StoredObject;
import com.viaversion.viaversion.api.connection.UserConnection;
-public class JoinGameStorage extends StoredObject {
+public class JoinGameTracker extends StoredObject {
private long seed;
private String levelId;
private long enchantmentSeed;
- public JoinGameStorage(UserConnection user) {
+ public JoinGameTracker(UserConnection user) {
super(user);
}
diff --git a/src/main/java/de/florianmichael/viafabricplus/information/impl/BedrockInformation.java b/src/main/java/de/florianmichael/viafabricplus/information/impl/BedrockInformation.java
index 632e2273..f0101b0d 100644
--- a/src/main/java/de/florianmichael/viafabricplus/information/impl/BedrockInformation.java
+++ b/src/main/java/de/florianmichael/viafabricplus/information/impl/BedrockInformation.java
@@ -19,14 +19,14 @@ package de.florianmichael.viafabricplus.information.impl;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.connection.UserConnection;
-import de.florianmichael.viafabricplus.definition.bedrock.storage.JoinGameStorage;
-import de.florianmichael.viafabricplus.definition.bedrock.ModelFormats;
+import de.florianmichael.viafabricplus.definition.tracker.bedrock.JoinGameTracker;
import de.florianmichael.viafabricplus.information.AbstractInformationGroup;
import de.florianmichael.viafabricplus.protocolhack.provider.viabedrock.ViaFabricPlusBlobCacheProvider;
import net.lenni0451.reflect.stream.RStream;
import net.lenni0451.reflect.stream.field.FieldStream;
import net.raphimc.viabedrock.api.chunk.BedrockChunk;
import net.raphimc.viabedrock.api.model.entity.Entity;
+import net.raphimc.viabedrock.protocol.data.enums.bedrock.ServerMovementModes;
import net.raphimc.viabedrock.protocol.providers.BlobCacheProvider;
import net.raphimc.viabedrock.protocol.storage.BlobCache;
import net.raphimc.viabedrock.protocol.storage.ChunkTracker;
@@ -45,6 +45,13 @@ public class BedrockInformation extends AbstractInformationGroup {
super(VersionRange.single(VersionEnum.bedrockLatest));
}
+ public String formatMovementMode(final int movementMode) {
+ if (movementMode == ServerMovementModes.CLIENT) return "Client";
+ if (movementMode == ServerMovementModes.SERVER) return "Server";
+
+ return "Server with rewind";
+ }
+
@Override
public void applyInformation(UserConnection userConnection, List output) {
final ViaFabricPlusBlobCacheProvider blobCache = (ViaFabricPlusBlobCacheProvider) Via.getManager().getProviders().get(BlobCacheProvider.class);
@@ -86,18 +93,18 @@ public class BedrockInformation extends AbstractInformationGroup {
output.add("Entity Tracker: " + entities);
}
}
- final JoinGameStorage joinGameStorage = userConnection.get(JoinGameStorage.class);
- if (!joinGameStorage.getLevelId().isEmpty() || joinGameStorage.getSeed() != 0 || joinGameStorage.getEnchantmentSeed() != 0) {
+ final JoinGameTracker joinGameTracker = userConnection.get(JoinGameTracker.class);
+ if (!joinGameTracker.getLevelId().isEmpty() || joinGameTracker.getSeed() != 0 || joinGameTracker.getEnchantmentSeed() != 0) {
if (!output.isEmpty()) output.add("");
output.add("Join Game:");
}
- if (joinGameStorage.getSeed() != 0) output.add("World Seed: " + joinGameStorage.getSeed());
- if (!joinGameStorage.getLevelId().isEmpty()) output.add("Level Id: " + joinGameStorage.getLevelId());
- if (joinGameStorage.getEnchantmentSeed() != 0) output.add("Enchantment Seed: " + joinGameStorage.getEnchantmentSeed());
+ if (joinGameTracker.getSeed() != 0) output.add("World Seed: " + joinGameTracker.getSeed());
+ if (!joinGameTracker.getLevelId().isEmpty()) output.add("Level Id: " + joinGameTracker.getLevelId());
+ if (joinGameTracker.getEnchantmentSeed() != 0) output.add("Enchantment Seed: " + joinGameTracker.getEnchantmentSeed());
final GameSessionStorage gameSessionStorage = userConnection.get(GameSessionStorage.class);
if (gameSessionStorage != null) {
- output.add("Movement mode: " + ModelFormats.formatMovementMode(gameSessionStorage.getMovementMode()));
+ output.add("Movement mode: " + formatMovementMode(gameSessionStorage.getMovementMode()));
}
}
}
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinConnectScreen_1.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinConnectScreen_1.java
index c6db0103..545a1a78 100644
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinConnectScreen_1.java
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinConnectScreen_1.java
@@ -18,7 +18,7 @@
package de.florianmichael.viafabricplus.injection.mixin.base;
import de.florianmichael.viafabricplus.base.event.ChangeProtocolVersionCallback;
-import de.florianmichael.viafabricplus.definition.LegacyServerAddress;
+import de.florianmichael.viafabricplus.definition.ClientsideFixes;
import de.florianmichael.viafabricplus.injection.access.IServerInfo;
import de.florianmichael.viafabricplus.protocolhack.ProtocolHack;
import net.minecraft.client.network.ServerAddress;
@@ -46,7 +46,7 @@ public class MixinConnectScreen_1 {
@Redirect(method = "run", at = @At(value = "INVOKE", target = "Ljava/util/Optional;get()Ljava/lang/Object;"))
public Object mapSocketAddress(Optional instance) {
- if (LegacyServerAddress.SRV_RANGE.contains(ProtocolHack.getTargetVersion())) {
+ if (ClientsideFixes.LEGACY_SRV_RESOLVE.contains(ProtocolHack.getTargetVersion())) {
return new InetSocketAddress(field_33737.getAddress(), field_33737.getPort());
}
final InetSocketAddress address = instance.get();
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinMinecraftClient.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinMinecraftClient.java
index 11db9efe..4bc888db 100644
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinMinecraftClient.java
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinMinecraftClient.java
@@ -17,19 +17,31 @@
*/
package de.florianmichael.viafabricplus.injection.mixin.base;
+import de.florianmichael.viafabricplus.base.event.ChangeProtocolVersionCallback;
import de.florianmichael.viafabricplus.base.event.FinishMinecraftLoadCallback;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.RunArgs;
+import net.raphimc.vialoader.util.VersionEnum;
import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(MinecraftClient.class)
-public class MixinMinecraftClient {
+public abstract class MixinMinecraftClient {
+
+ @Shadow public abstract boolean isInSingleplayer();
@Inject(method = "", at = @At("RETURN"))
public void postLoad(RunArgs args, CallbackInfo ci) {
FinishMinecraftLoadCallback.EVENT.invoker().onFinishMinecraftLoad();
}
+
+ @Inject(method = "setWorld", at = @At("HEAD"))
+ public void preSetWorld(CallbackInfo ci) {
+ if (isInSingleplayer()) {
+ ChangeProtocolVersionCallback.EVENT.invoker().onChangeProtocolVersion(VersionEnum.r1_20tor1_20_1);
+ }
+ }
}
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinMultiplayerScreen.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinMultiplayerScreen.java
index ba2996f4..63a8f733 100644
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinMultiplayerScreen.java
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinMultiplayerScreen.java
@@ -17,7 +17,7 @@
*/
package de.florianmichael.viafabricplus.injection.mixin.base;
-import de.florianmichael.viafabricplus.definition.LegacyServerAddress;
+import de.florianmichael.viafabricplus.definition.ClientsideFixes;
import de.florianmichael.viafabricplus.protocolhack.ProtocolHack;
import de.florianmichael.viafabricplus.screen.base.ProtocolSelectionScreen;
import de.florianmichael.viafabricplus.base.settings.groups.GeneralSettings;
@@ -66,6 +66,6 @@ public class MixinMultiplayerScreen extends Screen {
@Redirect(method = "connect(Lnet/minecraft/client/network/ServerInfo;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ServerAddress;parse(Ljava/lang/String;)Lnet/minecraft/client/network/ServerAddress;"))
public ServerAddress doOwnParse(String address) {
- return LegacyServerAddress.parse(ProtocolHack.getTargetVersion(viafabricplus_lastConnect), address);
+ return ClientsideFixes.parse(ProtocolHack.getTargetVersion(viafabricplus_lastConnect), address);
}
}
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinClientPlayNetworkHandler.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinClientPlayNetworkHandler.java
index eaf6a9ab..f822077d 100644
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinClientPlayNetworkHandler.java
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinClientPlayNetworkHandler.java
@@ -21,7 +21,7 @@ import com.llamalad7.mixinextras.injector.WrapWithCondition;
import com.mojang.authlib.GameProfile;
import de.florianmichael.viafabricplus.ViaFabricPlus;
import de.florianmichael.viafabricplus.base.settings.groups.VisualSettings;
-import de.florianmichael.viafabricplus.definition.PacketSyncBase;
+import de.florianmichael.viafabricplus.definition.ClientsideFixes;
import de.florianmichael.viafabricplus.protocolhack.ProtocolHack;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.DownloadingTerrainScreen;
@@ -177,11 +177,11 @@ public abstract class MixinClientPlayNetworkHandler {
final var channel = packet.getChannel().toString();
final var data = packet.getData();
- if (channel.equals(PacketSyncBase.PACKET_SYNC_IDENTIFIER)) {
+ if (channel.equals(ClientsideFixes.PACKET_SYNC_IDENTIFIER)) {
final var uuid = data.readString();
- if (PacketSyncBase.has(uuid)) {
- PacketSyncBase.get(uuid).accept(data);
+ if (ClientsideFixes.hasSyncTask(uuid)) {
+ ClientsideFixes.getSyncTask(uuid).accept(data);
ci.cancel();
}
}
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinFontStorage.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinFontStorage.java
index 1db3f7ad..7f25a28a 100644
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinFontStorage.java
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinFontStorage.java
@@ -18,7 +18,8 @@
package de.florianmichael.viafabricplus.injection.mixin.fixes.minecraft;
import de.florianmichael.viafabricplus.base.settings.groups.VisualSettings;
-import de.florianmichael.viafabricplus.definition.FontRenderer1_12_2;
+import de.florianmichael.viafabricplus.definition.BuiltinEmptyGlyph1_12_2;
+import de.florianmichael.viafabricplus.definition.ClientsideFixes;
import de.florianmichael.viafabricplus.injection.access.IFontStorage;
import de.florianmichael.viafabricplus.mappings.CharacterMappings;
import de.florianmichael.viafabricplus.protocolhack.ProtocolHack;
@@ -82,26 +83,26 @@ public abstract class MixinFontStorage implements IFontStorage {
@Inject(method = "findGlyph", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/font/Font;getGlyph(I)Lnet/minecraft/client/font/Glyph;"), locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true)
public void injectFindGlyph(int codePoint, CallbackInfoReturnable cir, Glyph glyph, Iterator var3, Font font) {
- if (FontRenderer1_12_2.DASH_LOADER || !this.id.getNamespace().equals("minecraft")) return;
+ if (ClientsideFixes.DASH_LOADER || !this.id.getNamespace().equals("minecraft")) return;
if (ProtocolHack.getTargetVersion().isOlderThanOrEqualTo(VersionEnum.r1_19_4)) {
if (viafabricplus_isForbiddenCharacter(font, codePoint)) cir.setReturnValue(FontStorage.GlyphPair.MISSING);
if (VisualSettings.INSTANCE.changeFontRendererBehaviour.isEnabled() && cir.getReturnValue() == FontStorage.GlyphPair.MISSING) {
- cir.setReturnValue(new FontStorage.GlyphPair(FontRenderer1_12_2.BuiltinEmptyGlyph1_12_2.VERY_MISSING, FontRenderer1_12_2.BuiltinEmptyGlyph1_12_2.VERY_MISSING));
+ cir.setReturnValue(new FontStorage.GlyphPair(BuiltinEmptyGlyph1_12_2.VERY_MISSING, BuiltinEmptyGlyph1_12_2.VERY_MISSING));
}
}
}
@Inject(method = "findGlyphRenderer", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/font/Font;getGlyph(I)Lnet/minecraft/client/font/Glyph;"), locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true)
public void injectFindGlyphRenderer(int codePoint, CallbackInfoReturnable cir, Iterator var2, Font font) {
- if (FontRenderer1_12_2.DASH_LOADER || !this.id.getNamespace().equals("minecraft")) return;
+ if (ClientsideFixes.DASH_LOADER || !this.id.getNamespace().equals("minecraft")) return;
if (!viafabricplus_obfuscation && ProtocolHack.getTargetVersion().isOlderThanOrEqualTo(VersionEnum.r1_19_4)) {
if (viafabricplus_isForbiddenCharacter(font, codePoint)) cir.setReturnValue(this.blankGlyphRenderer);
if (VisualSettings.INSTANCE.changeFontRendererBehaviour.isEnabled() && cir.getReturnValue() == this.blankGlyphRenderer) {
- cir.setReturnValue(FontRenderer1_12_2.BuiltinEmptyGlyph1_12_2.VERY_MISSING.bake(this::getGlyphRenderer));
+ cir.setReturnValue(BuiltinEmptyGlyph1_12_2.VERY_MISSING.bake(this::getGlyphRenderer));
}
}
}
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinMultiplayerServerListPinger.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinMultiplayerServerListPinger.java
index dcaa5b08..2cf933a6 100644
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinMultiplayerServerListPinger.java
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinMultiplayerServerListPinger.java
@@ -18,8 +18,7 @@
package de.florianmichael.viafabricplus.injection.mixin.fixes.minecraft;
import com.google.common.net.HostAndPort;
-import de.florianmichael.viafabricplus.definition.LegacyServerAddress;
-import de.florianmichael.viafabricplus.injection.access.IServerInfo;
+import de.florianmichael.viafabricplus.definition.ClientsideFixes;
import de.florianmichael.viafabricplus.protocolhack.ProtocolHack;
import net.lenni0451.reflect.stream.RStream;
import net.minecraft.client.network.MultiplayerServerListPinger;
@@ -36,7 +35,8 @@ public class MixinMultiplayerServerListPinger {
@Inject(method = "add", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/AllowedAddressResolver;resolve(Lnet/minecraft/client/network/ServerAddress;)Ljava/util/Optional;"), locals = LocalCapture.CAPTURE_FAILHARD)
public void mapParsing(ServerInfo entry, Runnable saver, CallbackInfo ci, ServerAddress serverAddress) {
- final ServerAddress remapped = LegacyServerAddress.parse(ProtocolHack.getTargetVersion(entry), serverAddress.hostAndPort.toString());
+ final var remapped = ClientsideFixes.parse(ProtocolHack.getTargetVersion(entry), serverAddress.hostAndPort.toString());
+
RStream.of(serverAddress).fields().filter(HostAndPort.class).by(0).set(RStream.of(remapped).fields().filter(HostAndPort.class).by(0).get());
}
}
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinStringHelper.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinStringHelper.java
index 8e8bf882..2d2c0a40 100644
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinStringHelper.java
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/MixinStringHelper.java
@@ -17,7 +17,7 @@
*/
package de.florianmichael.viafabricplus.injection.mixin.fixes.minecraft;
-import de.florianmichael.viafabricplus.definition.ChatLengthCalculation;
+import de.florianmichael.viafabricplus.definition.ClientsideFixes;
import net.minecraft.client.MinecraftClient;
import net.minecraft.util.StringHelper;
import org.spongepowered.asm.mixin.Mixin;
@@ -32,6 +32,7 @@ public class MixinStringHelper {
if (MinecraftClient.getInstance().isInSingleplayer()) {
return 256;
}
- return ChatLengthCalculation.INSTANCE.getMaxLength();
+
+ return ClientsideFixes.getCurrentChatLimit();
}
}
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/block/MixinFarmlandBlock.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/block/MixinFarmlandBlock.java
index 02526573..a8f41962 100644
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/block/MixinFarmlandBlock.java
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/block/MixinFarmlandBlock.java
@@ -58,6 +58,6 @@ public class MixinFarmlandBlock extends Block {
@Override
public VoxelShape getCullingShape(BlockState state, BlockView world, BlockPos pos) {
- return SHAPE;
+ return SHAPE; // Always use the real outline shape for culling
}
}
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/entity/MixinClientPlayerEntity.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/entity/MixinClientPlayerEntity.java
index fdee50b7..3b2e18db 100644
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/entity/MixinClientPlayerEntity.java
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/entity/MixinClientPlayerEntity.java
@@ -18,10 +18,10 @@
package de.florianmichael.viafabricplus.injection.mixin.fixes.minecraft.entity;
import com.mojang.authlib.GameProfile;
+import de.florianmichael.viafabricplus.definition.ClientsideFixes;
import net.minecraft.world.GameMode;
import net.raphimc.vialoader.util.VersionEnum;
import de.florianmichael.viafabricplus.base.settings.groups.DebugSettings;
-import de.florianmichael.viafabricplus.definition.ArmorPointCalculation;
import de.florianmichael.viafabricplus.injection.access.IClientPlayerEntity;
import de.florianmichael.viafabricplus.base.settings.groups.VisualSettings;
import de.florianmichael.viafabricplus.protocolhack.ProtocolHack;
@@ -197,7 +197,7 @@ public abstract class MixinClientPlayerEntity extends AbstractClientPlayerEntity
@Override
public int getArmor() {
if (VisualSettings.INSTANCE.emulateArmorHud.isEnabled()) {
- return ArmorPointCalculation.sum();
+ return client.player.getInventory().armor.stream().mapToInt(ClientsideFixes::getLegacyArmorPoints).sum();
}
return super.getArmor();
}
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/entity/MixinWolfEntity.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/entity/MixinWolfEntity.java
index a8f2dd5f..bcc781d8 100644
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/entity/MixinWolfEntity.java
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/entity/MixinWolfEntity.java
@@ -17,9 +17,8 @@
*/
package de.florianmichael.viafabricplus.injection.mixin.fixes.minecraft.entity;
-import com.viaversion.viaversion.api.connection.UserConnection;
import net.raphimc.vialoader.util.VersionEnum;
-import de.florianmichael.viafabricplus.definition.Meta18Storage;
+import de.florianmichael.viafabricplus.definition.tracker.WolfHealthTracker;
import de.florianmichael.viafabricplus.protocolhack.ProtocolHack;
import net.minecraft.entity.passive.WolfEntity;
import org.spongepowered.asm.mixin.Mixin;
@@ -34,10 +33,9 @@ public class MixinWolfEntity {
public float rewriteHealth(WolfEntity instance) {
float health = instance.getHealth();
if (ProtocolHack.getTargetVersion().isOlderThanOrEqualTo(VersionEnum.r1_14_4)) {
- final UserConnection userConnection = ProtocolHack.getMainUserConnection();
- if (!userConnection.has(Meta18Storage.class)) userConnection.put(new Meta18Storage(userConnection));
- return userConnection.get(Meta18Storage.class).getHealthDataMap().getOrDefault(instance.getId(), health);
+ return WolfHealthTracker.get().getHealthDataMap().getOrDefault(instance.getId(), health);
}
+
return health;
}
}
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/packet/MixinChatMessageC2SPacket.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/packet/MixinChatMessageC2SPacket.java
index 4427eb16..b249e6d7 100644
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/packet/MixinChatMessageC2SPacket.java
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/packet/MixinChatMessageC2SPacket.java
@@ -17,7 +17,7 @@
*/
package de.florianmichael.viafabricplus.injection.mixin.fixes.minecraft.packet;
-import de.florianmichael.viafabricplus.definition.ChatLengthCalculation;
+import de.florianmichael.viafabricplus.definition.ClientsideFixes;
import net.minecraft.client.MinecraftClient;
import net.minecraft.network.packet.c2s.play.ChatMessageC2SPacket;
import org.spongepowered.asm.mixin.Mixin;
@@ -32,6 +32,7 @@ public class MixinChatMessageC2SPacket {
if (MinecraftClient.getInstance().isInSingleplayer()) {
return 256;
}
- return ChatLengthCalculation.INSTANCE.getMaxLength();
+
+ return ClientsideFixes.getCurrentChatLimit();
}
}
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/screen/MixinChatScreen.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/screen/MixinChatScreen.java
index f86fc54a..bcd88060 100644
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/screen/MixinChatScreen.java
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/screen/MixinChatScreen.java
@@ -17,8 +17,8 @@
*/
package de.florianmichael.viafabricplus.injection.mixin.fixes.minecraft.screen;
-import de.florianmichael.viafabricplus.definition.ChatLengthCalculation;
import de.florianmichael.viafabricplus.base.settings.groups.VisualSettings;
+import de.florianmichael.viafabricplus.definition.ClientsideFixes;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.hud.ChatHud;
import net.minecraft.client.gui.hud.MessageIndicator;
@@ -39,7 +39,7 @@ public class MixinChatScreen {
@Inject(method = "init", at = @At("RETURN"))
public void changeChatLength(CallbackInfo ci) {
if (!MinecraftClient.getInstance().isInSingleplayer()) {
- this.chatField.setMaxLength(ChatLengthCalculation.INSTANCE.getMaxLength());
+ this.chatField.setMaxLength(ClientsideFixes.getCurrentChatLimit());
}
}
@@ -48,6 +48,7 @@ public class MixinChatScreen {
if (VisualSettings.INSTANCE.hideSignatureIndicator.isEnabled()) {
return null;
}
+
return instance.getIndicatorAt(mouseX, mouseY);
}
}
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/screen/MixinConnectScreen_1.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/screen/MixinConnectScreen_1.java
index f9e55b8f..60dc5b52 100644
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/screen/MixinConnectScreen_1.java
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/minecraft/screen/MixinConnectScreen_1.java
@@ -22,8 +22,8 @@ import com.viaversion.viaversion.api.minecraft.ProfileKey;
import net.raphimc.mcauth.util.MicrosoftConstants;
import net.raphimc.vialoader.util.VersionEnum;
import de.florianmichael.viafabricplus.ViaFabricPlus;
-import de.florianmichael.viafabricplus.definition.bedrock.BedrockAccountHandler;
-import de.florianmichael.viafabricplus.definition.classic.ClassiCubeAccountHandler;
+import de.florianmichael.viafabricplus.definition.account.BedrockAccountHandler;
+import de.florianmichael.viafabricplus.definition.account.ClassiCubeAccountHandler;
import de.florianmichael.viafabricplus.injection.access.IPublicKeyData;
import de.florianmichael.viafabricplus.definition.signatures.v1_19_0.ChatSession1_19_0;
import de.florianmichael.viafabricplus.definition.signatures.v1_19_2.ChatSession1_19_2;
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viabedrock/MixinBedrockProtocol.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viabedrock/MixinBedrockProtocol.java
index ece94961..5947aa50 100644
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viabedrock/MixinBedrockProtocol.java
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viabedrock/MixinBedrockProtocol.java
@@ -18,7 +18,7 @@
package de.florianmichael.viafabricplus.injection.mixin.fixes.viabedrock;
import com.viaversion.viaversion.api.connection.UserConnection;
-import de.florianmichael.viafabricplus.definition.bedrock.storage.JoinGameStorage;
+import de.florianmichael.viafabricplus.definition.tracker.bedrock.JoinGameTracker;
import net.raphimc.viabedrock.protocol.BedrockProtocol;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@@ -30,6 +30,6 @@ public class MixinBedrockProtocol {
@Inject(method = "init", at = @At("RETURN"))
public void hookStorages(UserConnection user, CallbackInfo ci) {
- user.put(new JoinGameStorage(user));
+ user.put(new JoinGameTracker(user));
}
}
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viabedrock/MixinJoinPackets.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viabedrock/MixinJoinPackets.java
index b1cff840..7ed9d5d6 100644
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viabedrock/MixinJoinPackets.java
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viabedrock/MixinJoinPackets.java
@@ -19,7 +19,7 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes.viabedrock;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.type.Type;
-import de.florianmichael.viafabricplus.definition.bedrock.storage.JoinGameStorage;
+import de.florianmichael.viafabricplus.definition.tracker.bedrock.JoinGameTracker;
import net.raphimc.viabedrock.protocol.packets.JoinPackets;
import net.raphimc.viabedrock.protocol.types.primitive.LongLEType;
import net.raphimc.viabedrock.protocol.types.primitive.StringType;
@@ -34,21 +34,21 @@ public class MixinJoinPackets {
@Redirect(method = "lambda$register$2", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/api/protocol/packet/PacketWrapper;read(Lcom/viaversion/viaversion/api/type/Type;)Ljava/lang/Object;", ordinal = 5))
private static Object trackWorldSeed(PacketWrapper instance, Type tType) throws Exception {
final Object seed = instance.read(tType);
- instance.user().get(JoinGameStorage.class).setSeed((long) seed);
+ instance.user().get(JoinGameTracker.class).setSeed((long) seed);
return seed;
}
@Redirect(method = "lambda$register$2", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/api/protocol/packet/PacketWrapper;read(Lcom/viaversion/viaversion/api/type/Type;)Ljava/lang/Object;", ordinal = 56))
private static Object trackLevelId(PacketWrapper instance, Type tType) throws Exception {
final Object levelId = instance.read(tType);
- instance.user().get(JoinGameStorage.class).setLevelId((String) levelId);
+ instance.user().get(JoinGameTracker.class).setLevelId((String) levelId);
return levelId;
}
@Redirect(method = "lambda$register$2", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/api/protocol/packet/PacketWrapper;read(Lcom/viaversion/viaversion/api/type/Type;)Ljava/lang/Object;", ordinal = 63))
private static Object trackEnchantmentSeed(PacketWrapper instance, Type tType) throws Exception {
final Object enchantmentSeed = instance.read(tType);
- instance.user().get(JoinGameStorage.class).setEnchantmentSeed((Integer) enchantmentSeed);
+ instance.user().get(JoinGameTracker.class).setEnchantmentSeed((Integer) enchantmentSeed);
return enchantmentSeed;
}
}
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/vialegacy/MixinProtocol1_8to1_7_6_10.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/vialegacy/MixinProtocol1_8to1_7_6_10.java
index 516fc0d5..e8128ac1 100644
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/vialegacy/MixinProtocol1_8to1_7_6_10.java
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/vialegacy/MixinProtocol1_8to1_7_6_10.java
@@ -23,7 +23,7 @@ import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.protocols.protocol1_8.ClientboundPackets1_8;
import com.viaversion.viaversion.protocols.protocol1_8.ServerboundPackets1_8;
-import de.florianmichael.viafabricplus.definition.TeleportTracker;
+import de.florianmichael.viafabricplus.definition.tracker.TeleportTracker;
import net.raphimc.vialegacy.protocols.release.protocol1_7_6_10to1_7_2_5.ClientboundPackets1_7_2;
import net.raphimc.vialegacy.protocols.release.protocol1_7_6_10to1_7_2_5.ServerboundPackets1_7_2;
import net.raphimc.vialegacy.protocols.release.protocol1_8to1_7_6_10.Protocol1_8to1_7_6_10;
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_11to1_10/MixinProtocol1_11To1_10.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_11to1_10/MixinProtocol1_11To1_10.java
index 133d5c4e..8d3ed537 100644
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_11to1_10/MixinProtocol1_11To1_10.java
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_11to1_10/MixinProtocol1_11To1_10.java
@@ -17,7 +17,7 @@
*/
package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion.protocol1_11to1_10;
-import de.florianmichael.viafabricplus.definition.ChatLengthCalculation;
+import de.florianmichael.viafabricplus.definition.ClientsideFixes;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.Constant;
import org.spongepowered.asm.mixin.injection.ModifyConstant;
@@ -27,6 +27,6 @@ public class MixinProtocol1_11To1_10 {
@ModifyConstant(method = "lambda$register$0", constant = @Constant(intValue = 100))
private static int changeMaxChatLength(int constant) {
- return ChatLengthCalculation.INSTANCE.getMaxLength();
+ return ClientsideFixes.getCurrentChatLimit();
}
}
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_14to1_13_2/MixinInventoryPackets.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_14to1_13_2/MixinInventoryPackets.java
index c5a7ce61..3dc390f6 100644
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_14to1_13_2/MixinInventoryPackets.java
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_14to1_13_2/MixinInventoryPackets.java
@@ -27,7 +27,7 @@ import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14;
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.packets.InventoryPackets;
-import de.florianmichael.viafabricplus.definition.PacketSyncBase;
+import de.florianmichael.viafabricplus.definition.ClientsideFixes;
import de.florianmichael.viafabricplus.definition.screen.CustomScreenHandler;
import de.florianmichael.viafabricplus.protocolhack.ProtocolHack;
import io.netty.buffer.Unpooled;
@@ -39,6 +39,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
import java.util.List;
+import java.util.logging.Level;
import java.util.stream.Collectors;
@Mixin(value = InventoryPackets.class, remap = false)
@@ -49,7 +50,7 @@ public class MixinInventoryPackets {
if (typeId == -1) {
wrapper.clearPacket();
wrapper.setPacketType(ClientboundPackets1_14.PLUGIN_MESSAGE);
- wrapper.write(Type.STRING, PacketSyncBase.PACKET_SYNC_IDENTIFIER);
+ wrapper.write(Type.STRING, ClientsideFixes.PACKET_SYNC_IDENTIFIER);
final List protocolPath = Via.getManager().getProtocolManager().getProtocolPath(SharedConstants.getProtocolVersion(), ProtocolVersion.v1_13_2.getVersion());
final var userConnection = ProtocolHack.createFakerUserConnection();
@@ -64,14 +65,14 @@ public class MixinInventoryPackets {
fakeOpenWindow.read(Type.VAR_INT);
fakeOpenWindow.read(Type.VAR_INT);
- final String uuid = PacketSyncBase.track(CustomScreenHandler.TRIPLE_CHEST_HANDLER);
+ final String uuid = ClientsideFixes.executeSyncTask(CustomScreenHandler.TRIPLE_CHEST_HANDLER);
wrapper.write(Type.STRING, uuid);
wrapper.write(Type.SHORT, windowId);
wrapper.write(Type.COMPONENT, fakeOpenWindow.read(Type.COMPONENT));
wrapper.write(Type.SHORT, slots);
} catch (Exception e) {
- e.printStackTrace();
+ Via.getPlatform().getLogger().log(Level.SEVERE, "Failed to emulate Triple Chest", e);
}
ci.cancel();
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_15to1_14_4/MixinMetadataRewriter1_15To1_14_4.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_15to1_14_4/MixinMetadataRewriter1_15To1_14_4.java
index d3b214c9..fcd3d884 100644
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_15to1_14_4/MixinMetadataRewriter1_15To1_14_4.java
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_15to1_14_4/MixinMetadataRewriter1_15To1_14_4.java
@@ -17,7 +17,6 @@
*/
package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion.protocol1_15to1_14_4;
-import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
@@ -25,7 +24,7 @@ import com.viaversion.viaversion.protocols.protocol1_14_4to1_14_3.ClientboundPac
import com.viaversion.viaversion.protocols.protocol1_15to1_14_4.Protocol1_15To1_14_4;
import com.viaversion.viaversion.protocols.protocol1_15to1_14_4.metadata.MetadataRewriter1_15To1_14_4;
import com.viaversion.viaversion.rewriter.EntityRewriter;
-import de.florianmichael.viafabricplus.definition.Meta18Storage;
+import de.florianmichael.viafabricplus.definition.tracker.WolfHealthTracker;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
@@ -43,10 +42,6 @@ public abstract class MixinMetadataRewriter1_15To1_14_4 extends EntityRewriter metadatas, UserConnection connection, CallbackInfo ci) {
- if (protocol.get(Meta18Storage.class) == null) {
- protocol.put(new Meta18Storage(connection));
- Via.getPlatform().getLogger().severe("Metadata 18 storage is missing!");
- }
- protocol.get(Meta18Storage.class).getHealthDataMap().put(entityId, (Float) metadata.getValue());
+ WolfHealthTracker.get().getHealthDataMap().put(entityId, (Float) metadata.getValue());
}
}
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_18_2to1_18/MixinProtocol1_18_2To1_18.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_18_2to1_18/MixinProtocol1_18_2To1_18.java
deleted file mode 100644
index 9cdffacb..00000000
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_18_2to1_18/MixinProtocol1_18_2To1_18.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * This file is part of ViaProxy - https://github.com/RaphiMC/ViaProxy
- * Copyright (C) 2023 RK_01/RaphiMC 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.viafabricplus.injection.mixin.fixes.viaversion.protocol1_18_2to1_18;
-
-import com.viaversion.viaversion.api.connection.UserConnection;
-import com.viaversion.viaversion.api.protocol.AbstractProtocol;
-import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
-import com.viaversion.viaversion.api.type.Type;
-import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.ServerboundPackets1_17;
-import com.viaversion.viaversion.protocols.protocol1_18_2to1_18.Protocol1_18_2To1_18;
-import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.ClientboundPackets1_18;
-import de.florianmichael.viafabricplus.definition.SpawnPositionTracker;
-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;
-
-@SuppressWarnings("DataFlowIssue")
-@Mixin(value = Protocol1_18_2To1_18.class, remap = false)
-public class MixinProtocol1_18_2To1_18 extends AbstractProtocol {
-
- @Inject(method = "registerPackets", at = @At("RETURN"))
- public void fixSpawnPositionSending(CallbackInfo ci) {
- this.registerClientbound(ClientboundPackets1_18.PLAYER_POSITION, new PacketHandlers() {
- @Override
- public void register() {
- handler(wrapper -> wrapper.user().get(SpawnPositionTracker.class).sendSpawnPosition());
- }
- });
- this.registerClientbound(ClientboundPackets1_18.SPAWN_POSITION, new PacketHandlers() {
- @Override
- public void register() {
- map(Type.POSITION1_14); // position
- map(Type.FLOAT); // angle
-
- handler(wrapper -> wrapper.user().get(SpawnPositionTracker.class).setSpawnPosition(wrapper.get(Type.POSITION1_14, 0), wrapper.get(Type.FLOAT, 0)));
- }
- });
- }
-
- @Override
- public void init(UserConnection connection) {
- super.init(connection);
-
- connection.put(new SpawnPositionTracker(connection));
- }
-}
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_19to1_18_2/MixinWorldPackets.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_19to1_18_2/MixinWorldPackets.java
index 97f60708..c37a596d 100644
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_19to1_18_2/MixinWorldPackets.java
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_19to1_18_2/MixinWorldPackets.java
@@ -24,8 +24,8 @@ import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.ClientboundPacke
import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.ClientboundPackets1_19;
import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.Protocol1_19To1_18_2;
import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.packets.WorldPackets;
-import de.florianmichael.viafabricplus.definition.PacketSyncBase;
import de.florianmichael.viafabricplus.definition.ClientPlayerInteractionManager1_18_2;
+import de.florianmichael.viafabricplus.definition.ClientsideFixes;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@@ -42,9 +42,9 @@ public class MixinWorldPackets {
}
wrapper.resetReader();
- final String uuid = PacketSyncBase.track(ClientPlayerInteractionManager1_18_2.OLD_PACKET_HANDLER);
+ final var uuid = ClientsideFixes.executeSyncTask(ClientPlayerInteractionManager1_18_2.OLD_PACKET_HANDLER);
- wrapper.write(Type.STRING, PacketSyncBase.PACKET_SYNC_IDENTIFIER);
+ wrapper.write(Type.STRING, ClientsideFixes.PACKET_SYNC_IDENTIFIER);
wrapper.write(Type.STRING, uuid);
});
}
diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_20to1_19_4/MixinInventoryPackets.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_20to1_19_4/MixinInventoryPackets.java
index 27f13785..a58d12bc 100644
--- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_20to1_19_4/MixinInventoryPackets.java
+++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/viaversion/protocol1_20to1_19_4/MixinInventoryPackets.java
@@ -24,7 +24,7 @@ import com.viaversion.viaversion.protocols.protocol1_19_4to1_19_3.ServerboundPac
import com.viaversion.viaversion.protocols.protocol1_20to1_19_4.Protocol1_20To1_19_4;
import com.viaversion.viaversion.protocols.protocol1_20to1_19_4.packets.InventoryPackets;
import com.viaversion.viaversion.rewriter.ItemRewriter;
-import de.florianmichael.viafabricplus.definition.PacketSyncBase;
+import de.florianmichael.viafabricplus.definition.ClientsideFixes;
import de.florianmichael.viafabricplus.definition.screen.CustomScreenHandler;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@@ -56,8 +56,8 @@ public class MixinInventoryPackets extends ItemRewriter