mirror of
https://github.com/ViaVersion/ViaFabricPlus.git
synced 2024-10-15 07:17:31 +02:00
Rewrite handling of almost all clientside fixes
Fixed https://github.com/ViaVersion/ViaFabricPlus/issues/237
This commit is contained in:
parent
5fe5d24145
commit
7b6355ada8
@ -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();
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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<Item> 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<Item, Integer> 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();
|
||||
}
|
||||
}
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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<RenderableGlyph, GlyphRenderer> 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;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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;
|
||||
}
|
||||
}
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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<Block> 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<Item, Integer> 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<String, Consumer<PacketByteBuf>> 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<PacketByteBuf> 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<PacketByteBuf> 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;
|
||||
}
|
||||
}
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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<RenderableGlyph, GlyphRenderer> 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;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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;
|
||||
}
|
||||
}
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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<String, Consumer<PacketByteBuf>> tasks = new ConcurrentHashMap<>();
|
||||
|
||||
public static Consumer<PacketByteBuf> 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<PacketByteBuf> task) {
|
||||
final String uuid = UUID.randomUUID().toString();
|
||||
tasks.put(uuid, task);
|
||||
return uuid;
|
||||
}
|
||||
}
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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);
|
||||
}
|
||||
}
|
@ -15,7 +15,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package de.florianmichael.viafabricplus.definition.bedrock;
|
||||
package de.florianmichael.viafabricplus.definition.account;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import de.florianmichael.viafabricplus.ViaFabricPlus;
|
@ -15,7 +15,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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;
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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";
|
||||
}
|
||||
}
|
@ -15,7 +15,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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;
|
@ -15,23 +15,34 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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<Integer, Float> healthDataMap = new HashMap<>();
|
||||
|
||||
public Meta18Storage(UserConnection user) {
|
||||
public WolfHealthTracker(UserConnection user) {
|
||||
super(user);
|
||||
}
|
||||
|
||||
public Map<Integer, Float> 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);
|
||||
}
|
||||
}
|
@ -15,18 +15,18 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
@ -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<String> 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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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<InetSocketAddress> 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();
|
||||
|
@ -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 = "<init>", 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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<FontStorage.GlyphPair> 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<GlyphRenderer> 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
@ -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<LongLEType> 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<StringType> 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<VarIntType> 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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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<ProtocolPathEntry> 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();
|
||||
|
@ -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<C
|
||||
|
||||
@Inject(method = "handleMetadata", at = @At(value = "INVOKE", target = "Ljava/util/List;remove(Ljava/lang/Object;)Z", shift = At.Shift.BEFORE), remap = false)
|
||||
public void trackHealth(int entityId, EntityType type, Metadata metadata, List<Metadata> 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());
|
||||
}
|
||||
}
|
||||
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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<ClientboundPackets1_18, ClientboundPackets1_18, ServerboundPackets1_17, ServerboundPackets1_17> {
|
||||
|
||||
@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));
|
||||
}
|
||||
}
|
@ -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);
|
||||
});
|
||||
}
|
||||
|
@ -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<ClientboundPackets1_19_4
|
||||
wrapper.clearPacket();
|
||||
wrapper.setPacketType(ClientboundPackets1_19_4.PLUGIN_MESSAGE);
|
||||
|
||||
wrapper.write(Type.STRING, PacketSyncBase.PACKET_SYNC_IDENTIFIER);
|
||||
wrapper.write(Type.STRING, PacketSyncBase.track(CustomScreenHandler.LEGACY_SMITHING_HANDLER));
|
||||
wrapper.write(Type.STRING, ClientsideFixes.PACKET_SYNC_IDENTIFIER);
|
||||
wrapper.write(Type.STRING, ClientsideFixes.executeSyncTask(CustomScreenHandler.LEGACY_SMITHING_HANDLER));
|
||||
wrapper.write(Type.VAR_INT, windowId);
|
||||
wrapper.write(Type.COMPONENT, title);
|
||||
} else {
|
||||
|
@ -18,7 +18,7 @@
|
||||
package de.florianmichael.viafabricplus.screen.base;
|
||||
|
||||
import de.florianmichael.classic4j.BetaCraftHandler;
|
||||
import de.florianmichael.viafabricplus.definition.classic.ClassiCubeAccountHandler;
|
||||
import de.florianmichael.viafabricplus.definition.account.ClassiCubeAccountHandler;
|
||||
import de.florianmichael.viafabricplus.base.screen.VFPScreen;
|
||||
import de.florianmichael.viafabricplus.screen.thirdparty.classicube.ClassiCubeLoginScreen;
|
||||
import de.florianmichael.viafabricplus.screen.thirdparty.classicube.ClassiCubeServerListScreen;
|
||||
|
@ -20,7 +20,7 @@ package de.florianmichael.viafabricplus.screen.thirdparty;
|
||||
import de.florianmichael.classic4j.model.betacraft.BCServerInfo;
|
||||
import de.florianmichael.classic4j.model.betacraft.BCServerList;
|
||||
import de.florianmichael.classic4j.model.betacraft.BCVersion;
|
||||
import de.florianmichael.viafabricplus.definition.LegacyServerAddress;
|
||||
import de.florianmichael.viafabricplus.definition.ClientsideFixes;
|
||||
import de.florianmichael.viafabricplus.protocolhack.ProtocolHack;
|
||||
import de.florianmichael.viafabricplus.base.screen.MappedSlotEntry;
|
||||
import de.florianmichael.viafabricplus.base.screen.VFPScreen;
|
||||
@ -107,7 +107,7 @@ public class BetaCraftScreen extends VFPScreen {
|
||||
|
||||
@Override
|
||||
public void mappedMouseClicked(double mouseX, double mouseY, int button) {
|
||||
final ServerAddress serverAddress = LegacyServerAddress.parse(ProtocolHack.getTargetVersion(), server.host() + ":" + server.port());
|
||||
final ServerAddress serverAddress = ClientsideFixes.parse(ProtocolHack.getTargetVersion(), server.host() + ":" + server.port());
|
||||
final ServerInfo entry = new ServerInfo(server.name(), serverAddress.getAddress(), false);
|
||||
|
||||
ConnectScreen.connect(MinecraftClient.getInstance().currentScreen, MinecraftClient.getInstance(), serverAddress, entry, false);
|
||||
|
@ -22,7 +22,7 @@ import de.florianmichael.classic4j.ClassiCubeHandler;
|
||||
import de.florianmichael.classic4j.api.LoginProcessHandler;
|
||||
import de.florianmichael.classic4j.model.classicube.highlevel.CCAccount;
|
||||
import de.florianmichael.viafabricplus.screen.base.ProtocolSelectionScreen;
|
||||
import de.florianmichael.viafabricplus.definition.classic.ClassiCubeAccountHandler;
|
||||
import de.florianmichael.viafabricplus.definition.account.ClassiCubeAccountHandler;
|
||||
import de.florianmichael.viafabricplus.base.screen.VFPScreen;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
|
@ -22,7 +22,7 @@ import de.florianmichael.classic4j.ClassiCubeHandler;
|
||||
import de.florianmichael.classic4j.api.LoginProcessHandler;
|
||||
import de.florianmichael.classic4j.model.classicube.highlevel.CCAccount;
|
||||
import de.florianmichael.classic4j.model.classicube.highlevel.CCError;
|
||||
import de.florianmichael.viafabricplus.definition.classic.ClassiCubeAccountHandler;
|
||||
import de.florianmichael.viafabricplus.definition.account.ClassiCubeAccountHandler;
|
||||
import de.florianmichael.viafabricplus.integration.Classic4JImpl;
|
||||
import de.florianmichael.viafabricplus.base.screen.VFPScreen;
|
||||
import de.florianmichael.viafabricplus.screen.base.ProtocolSelectionScreen;
|
||||
|
@ -22,7 +22,7 @@ import de.florianmichael.classic4j.ClassiCubeHandler;
|
||||
import de.florianmichael.classic4j.api.LoginProcessHandler;
|
||||
import de.florianmichael.classic4j.model.classicube.CCServerInfo;
|
||||
import de.florianmichael.classic4j.model.classicube.highlevel.CCAccount;
|
||||
import de.florianmichael.viafabricplus.definition.classic.ClassiCubeAccountHandler;
|
||||
import de.florianmichael.viafabricplus.definition.account.ClassiCubeAccountHandler;
|
||||
import de.florianmichael.viafabricplus.injection.access.IServerInfo;
|
||||
import de.florianmichael.viafabricplus.protocolhack.provider.vialegacy.ViaFabricPlusClassicMPPassProvider;
|
||||
import de.florianmichael.viafabricplus.base.screen.VFPScreen;
|
||||
|
@ -156,7 +156,6 @@
|
||||
"fixes.viaversion.protocol1_17to1_16_4.MixinEntityPackets1_17",
|
||||
"fixes.viaversion.protocol1_17to1_16_4.MixinInventoryAcknowledgements",
|
||||
"fixes.viaversion.protocol1_17to1_16_4.MixinWorldPackets1_17",
|
||||
"fixes.viaversion.protocol1_18_2to1_18.MixinProtocol1_18_2To1_18",
|
||||
"fixes.viaversion.protocol1_19_1to1_19.MixinProtocol1_19_1To1_19",
|
||||
"fixes.viaversion.protocol1_19_3to1_19_1.MixinProtocol1_19_3To1_19_1",
|
||||
"fixes.viaversion.protocol1_19to1_18_2.MixinWorldPackets",
|
||||
@ -171,12 +170,10 @@
|
||||
"ipnext.MixinAutoRefillHandler_ItemSlotMonitor",
|
||||
"jsonwebtoken.MixinClasses",
|
||||
"jsonwebtoken.MixinDefaultCompressionCodecResolver",
|
||||
"jsonwebtoken.MixinDefaultJwtParserBuilder"
|
||||
"jsonwebtoken.MixinDefaultJwtParserBuilder",
|
||||
"fixes.minecraft.entity.MixinLockableContainerBlockEntity"
|
||||
],
|
||||
"injectors": {
|
||||
"defaultRequire": 1
|
||||
},
|
||||
"mixins": [
|
||||
"fixes.minecraft.entity.MixinLockableContainerBlockEntity"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user