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