Port to upstream changes

This commit is contained in:
FlorianMichael 2024-05-17 21:39:54 +02:00
parent cd41e5cab3
commit 38580e328c
No known key found for this signature in database
GPG Key ID: C2FB87E71C425126
51 changed files with 358 additions and 382 deletions

View File

@ -14,16 +14,16 @@ maven_group=de.florianmichael
archives_base_name=ViaFabricPlus
# ViaVersion Libraries
viaversion_version=4.10.3-20240515.214803-2
viabackwards_version=4.10.3-20240510.194921-1
vialegacy_version=2.2.22
viaaprilfools_version=2.0.12
vialoader_version=2.2.13
viaversion_version=5.0.0-SNAPSHOT
viabackwards_version=5.0.0-SNAPSHOT
vialegacy_version=3.0.0-SNAPSHOT
viaaprilfools_version=3.0.0-SNAPSHOT
vialoader_version=3.0.0-SNAPSHOT
# RaphiMC Libraries
minecraftauth_version=4.0.0
viabedrock_version=0.0.7-SNAPSHOT
viabedrock_version=0.0.8-SNAPSHOT
raknet_transport_version=1.0.0.CR3-SNAPSHOT
# Lenni0451 Libraries

View File

@ -26,8 +26,9 @@ import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType;
import com.viaversion.viaversion.api.protocol.packet.State;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.packet.ClientboundPackets1_20_5;
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.packet.ServerboundPackets1_20_5;
import com.viaversion.viaversion.api.type.Types;
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ClientboundPackets1_20_5;
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ServerboundPackets1_20_5;
import com.viaversion.viaversion.util.Key;
import net.minecraft.network.packet.BrandCustomPayload;
import net.minecraft.network.packet.CustomPayload;
@ -48,12 +49,12 @@ public class VFPProtocol extends AbstractSimpleProtocol {
private final Map<String, Pair<ProtocolVersion, PacketReader>> payloadDiff = new HashMap<>();
public VFPProtocol() {
registerMapping(BrandCustomPayload.ID, LegacyProtocolVersion.c0_0_15a_1, wrapper -> wrapper.passthrough(Type.STRING));
registerMapping(BrandCustomPayload.ID, LegacyProtocolVersion.c0_0_15a_1, wrapper -> wrapper.passthrough(Types.STRING));
registerMapping(DebugGameTestAddMarkerCustomPayload.ID, ProtocolVersion.v1_14, wrapper -> {
wrapper.passthrough(Type.POSITION1_14);
wrapper.passthrough(Type.INT);
wrapper.passthrough(Type.STRING);
wrapper.passthrough(Type.INT);
wrapper.passthrough(Types.BLOCK_POSITION1_14);
wrapper.passthrough(Types.INT);
wrapper.passthrough(Types.STRING);
wrapper.passthrough(Types.INT);
});
registerMapping(DebugGameTestClearCustomPayload.ID, ProtocolVersion.v1_14, wrapper -> {});
}
@ -61,7 +62,7 @@ public class VFPProtocol extends AbstractSimpleProtocol {
@Override
protected void registerPackets() {
registerClientbound(State.PLAY, getPluginMessagePacket().getId(), getPluginMessagePacket().getId(), wrapper -> {
final String channel = Key.namespaced(wrapper.passthrough(Type.STRING));
final String channel = Key.namespaced(wrapper.passthrough(Types.STRING));
if (!channel.startsWith(Identifier.DEFAULT_NAMESPACE)) {
// Mods might add custom payloads that we don't want to filter, so we check for the namespace.
// Mods should NEVER use the default namespace of the game, not only to not break this code,
@ -83,7 +84,7 @@ public class VFPProtocol extends AbstractSimpleProtocol {
final PacketReader reader = payloadDiff.get(channel).getRight();
try {
reader.read(wrapper);
wrapper.read(Type.REMAINING_BYTES);
wrapper.read(Types.REMAINING_BYTES);
} catch (Exception ignored) {
wrapper.cancel();
}
@ -96,11 +97,11 @@ public class VFPProtocol extends AbstractSimpleProtocol {
}
public static ServerboundPacketType getCreativeInventoryActionPacket() {
return ServerboundPackets1_20_5.CREATIVE_INVENTORY_ACTION;
return ServerboundPackets1_20_5.SET_CREATIVE_MODE_SLOT;
}
public static ClientboundPacketType getPluginMessagePacket() {
return ClientboundPackets1_20_5.PLUGIN_MESSAGE;
return ClientboundPackets1_20_5.CUSTOM_PAYLOAD;
}
@FunctionalInterface

View File

@ -26,8 +26,9 @@ import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.Types;
import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_17;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
import com.viaversion.nbt.tag.CompoundTag;
import net.raphimc.vialegacy.api.LegacyProtocolVersion;
import net.raphimc.vialegacy.protocols.classic.protocola1_0_15toc0_28_30.model.ClassicLevel;
import net.raphimc.vialegacy.protocols.classic.protocola1_0_15toc0_28_30.providers.ClassicWorldHeightProvider;
@ -45,10 +46,10 @@ public class WorldHeightSupport {
if (wrapper.isCancelled()) return;
if (wrapper.user().getProtocolInfo().serverProtocolVersion().olderThanOrEqualTo(LegacyProtocolVersion.c0_28toc0_30)) {
for (CompoundTag dimension : wrapper.get(Type.NAMED_COMPOUND_TAG, 0).getCompoundTag("minecraft:dimension_type").getListTag("value", CompoundTag.class)) {
for (CompoundTag dimension : wrapper.get(Types.NAMED_COMPOUND_TAG, 0).getCompoundTag("minecraft:dimension_type").getListTag("value", CompoundTag.class)) {
changeDimensionTagHeight(wrapper.user(), dimension.getCompoundTag("element"));
}
changeDimensionTagHeight(wrapper.user(), wrapper.get(Type.NAMED_COMPOUND_TAG, 1));
changeDimensionTagHeight(wrapper.user(), wrapper.get(Types.NAMED_COMPOUND_TAG, 1));
}
};
}
@ -59,7 +60,7 @@ public class WorldHeightSupport {
if (wrapper.isCancelled()) return;
if (wrapper.user().getProtocolInfo().serverProtocolVersion().olderThanOrEqualTo(LegacyProtocolVersion.c0_28toc0_30)) {
changeDimensionTagHeight(wrapper.user(), wrapper.get(Type.NAMED_COMPOUND_TAG, 0));
changeDimensionTagHeight(wrapper.user(), wrapper.get(Types.NAMED_COMPOUND_TAG, 0));
}
};
}
@ -103,14 +104,14 @@ public class WorldHeightSupport {
final PacketHandler classicLightHandler = new PacketHandlers() {
@Override
public void register() {
map(Type.VAR_INT); // x
map(Type.VAR_INT); // y
map(Type.BOOLEAN); // trust edges
map(Types.VAR_INT); // x
map(Types.VAR_INT); // y
map(Types.BOOLEAN); // trust edges
handler(wrapper -> {
wrapper.read(Type.VAR_INT); // sky light mask
wrapper.read(Type.VAR_INT); // block light mask
final int emptySkyLightMask = wrapper.read(Type.VAR_INT); // empty sky light mask
final int emptyBlockLightMask = wrapper.read(Type.VAR_INT); // empty block light mask
wrapper.read(Types.VAR_INT); // sky light mask
wrapper.read(Types.VAR_INT); // block light mask
final int emptySkyLightMask = wrapper.read(Types.VAR_INT); // empty sky light mask
final int emptyBlockLightMask = wrapper.read(Types.VAR_INT); // empty block light mask
final ClassicLevel level = wrapper.user().get(ClassicLevelStorage.class).getClassicLevel();
final ClassicWorldHeightProvider heightProvider = Via.getManager().getProviders().get(ClassicWorldHeightProvider.class);
@ -122,8 +123,8 @@ public class WorldHeightSupport {
}
final List<byte[]> lightArrays = new ArrayList<>();
while (wrapper.isReadable(Type.BYTE_ARRAY_PRIMITIVE, 0)) {
lightArrays.add(wrapper.read(Type.BYTE_ARRAY_PRIMITIVE));
while (wrapper.isReadable(Types.BYTE_ARRAY_PRIMITIVE, 0)) {
lightArrays.add(wrapper.read(Types.BYTE_ARRAY_PRIMITIVE));
}
int skyLightCount = 16;
@ -141,18 +142,18 @@ public class WorldHeightSupport {
skyLightMask.set(0, skyLightCount);
blockLightMask.set(0, blockLightCount);
wrapper.write(Type.LONG_ARRAY_PRIMITIVE, skyLightMask.toLongArray());
wrapper.write(Type.LONG_ARRAY_PRIMITIVE, blockLightMask.toLongArray());
wrapper.write(Type.LONG_ARRAY_PRIMITIVE, new long[emptySkyLightMask]);
wrapper.write(Type.LONG_ARRAY_PRIMITIVE, new long[emptyBlockLightMask]);
wrapper.write(Types.LONG_ARRAY_PRIMITIVE, skyLightMask.toLongArray());
wrapper.write(Types.LONG_ARRAY_PRIMITIVE, blockLightMask.toLongArray());
wrapper.write(Types.LONG_ARRAY_PRIMITIVE, new long[emptySkyLightMask]);
wrapper.write(Types.LONG_ARRAY_PRIMITIVE, new long[emptyBlockLightMask]);
wrapper.write(Type.VAR_INT, skyLightCount);
wrapper.write(Types.VAR_INT, skyLightCount);
for (int i = 0; i < skyLightCount; i++) {
wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, lightArrays.remove(0));
wrapper.write(Types.BYTE_ARRAY_PRIMITIVE, lightArrays.remove(0));
}
wrapper.write(Type.VAR_INT, blockLightCount);
wrapper.write(Types.VAR_INT, blockLightCount);
for (int i = 0; i < blockLightCount; i++) {
wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, lightArrays.remove(0));
wrapper.write(Types.BYTE_ARRAY_PRIMITIVE, lightArrays.remove(0));
}
});
}

View File

@ -26,7 +26,7 @@ import net.minecraft.util.Formatting;
import net.raphimc.vialegacy.api.LegacyProtocolVersion;
import net.raphimc.vialegacy.protocols.classic.protocolc0_28_30toc0_28_30cpe.storage.ExtensionProtocolMetadataStorage;
public class ListExtensionsCommand extends VFPViaSubCommand {
public class ListExtensionsCommand implements VFPViaSubCommand {
@Override
public String name() {

View File

@ -25,7 +25,7 @@ import net.minecraft.util.Formatting;
import net.raphimc.vialegacy.api.LegacyProtocolVersion;
import net.raphimc.vialegacy.protocols.alpha.protocola1_0_17_1_0_17_4toa1_0_16_2.storage.TimeLockStorage;
public class SetTimeCommand extends VFPViaSubCommand {
public class SetTimeCommand implements VFPViaSubCommand {
@Override
public String name() {

View File

@ -21,10 +21,10 @@ package de.florianmichael.viafabricplus.fixes.versioned.visual;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.protocols.protocol1_9to1_8.ArmorType;
import com.viaversion.viaversion.protocols.protocol1_9to1_8.ClientboundPackets1_9;
import com.viaversion.viaversion.protocols.protocol1_9to1_8.Protocol1_9To1_8;
import com.viaversion.viaversion.api.type.Types;
import com.viaversion.viaversion.protocols.v1_8to1_9.Protocol1_8To1_9;
import com.viaversion.viaversion.protocols.v1_8to1_9.data.ArmorTypes1_8;
import com.viaversion.viaversion.protocols.v1_8to1_9.packet.ClientboundPackets1_9;
import de.florianmichael.viafabricplus.ViaFabricPlus;
import de.florianmichael.viafabricplus.protocoltranslator.ProtocolTranslator;
import de.florianmichael.viafabricplus.settings.impl.VisualSettings;
@ -62,11 +62,11 @@ public class ArmorHudEmulation1_8 {
});
}
private static void sendArmorUpdate(final UserConnection userConnection) throws Exception {
private static void sendArmorUpdate(final UserConnection userConnection) {
// Calculate the armor points.
int armor = 0;
for (final ItemStack stack : MinecraftClient.getInstance().player.getInventory().armor) {
armor += ArmorType.findByType(Registries.ITEM.getId(stack.getItem()).toString()).getArmorPoints();
armor += ArmorTypes1_8.findByType(Registries.ITEM.getId(stack.getItem()).toString()).getArmorPoints();
}
// We only want to update the armor points if they actually changed.
@ -75,16 +75,16 @@ public class ArmorHudEmulation1_8 {
}
previousArmorPoints = armor;
final PacketWrapper entityProperties = PacketWrapper.create(ClientboundPackets1_9.ENTITY_PROPERTIES, userConnection);
entityProperties.write(Type.VAR_INT, MinecraftClient.getInstance().player.getId());
entityProperties.write(Type.INT, 1);
entityProperties.write(Type.STRING, "generic.armor");
entityProperties.write(Type.DOUBLE, 0.0D);
entityProperties.write(Type.VAR_INT, 1);
entityProperties.write(Type.UUID, ARMOR_POINTS_UUID);
entityProperties.write(Type.DOUBLE, (double) armor);
entityProperties.write(Type.BYTE, (byte) 0);
entityProperties.scheduleSend(Protocol1_9To1_8.class);
final PacketWrapper entityProperties = PacketWrapper.create(ClientboundPackets1_9.UPDATE_ATTRIBUTES, userConnection);
entityProperties.write(Types.VAR_INT, MinecraftClient.getInstance().player.getId());
entityProperties.write(Types.INT, 1);
entityProperties.write(Types.STRING, "generic.armor");
entityProperties.write(Types.DOUBLE, 0.0D);
entityProperties.write(Types.VAR_INT, 1);
entityProperties.write(Types.UUID, ARMOR_POINTS_UUID);
entityProperties.write(Types.DOUBLE, (double) armor);
entityProperties.write(Types.BYTE, (byte) 0);
entityProperties.scheduleSend(Protocol1_8To1_9.class);
}
}

View File

@ -23,9 +23,9 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import com.llamalad7.mixinextras.injector.v2.WrapWithCondition;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.protocols.protocol1_12to1_11_1.Protocol1_12To1_11_1;
import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.ServerboundPackets1_9_3;
import com.viaversion.viaversion.api.type.Types;
import com.viaversion.viaversion.protocols.v1_11_1to1_12.Protocol1_11_1To1_12;
import com.viaversion.viaversion.protocols.v1_9_1to1_9_3.packet.ServerboundPackets1_9_3;
import de.florianmichael.viafabricplus.fixes.data.ItemRegistryDiff;
import de.florianmichael.viafabricplus.injection.access.IMouseKeyboard;
import de.florianmichael.viafabricplus.protocoltranslator.ProtocolTranslator;
@ -122,9 +122,9 @@ public abstract class MixinMinecraftClient {
@Inject(method = "handleInputEvents", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/tutorial/TutorialManager;onInventoryOpened()V", shift = At.Shift.AFTER))
private void sendOpenInventoryPacket(CallbackInfo ci) throws Exception {
if (DebugSettings.global().sendOpenInventoryPacket.isEnabled()) {
final PacketWrapper clientStatus = PacketWrapper.create(ServerboundPackets1_9_3.CLIENT_STATUS, ProtocolTranslator.getPlayNetworkUserConnection());
clientStatus.write(Type.VAR_INT, 2); // Open Inventory Achievement
clientStatus.scheduleSendToServer(Protocol1_12To1_11_1.class);
final PacketWrapper clientStatus = PacketWrapper.create(ServerboundPackets1_9_3.CLIENT_COMMAND, ProtocolTranslator.getPlayNetworkUserConnection());
clientStatus.write(Types.VAR_INT, 2); // Open Inventory Achievement
clientStatus.scheduleSendToServer(Protocol1_11_1To1_12.class);
}
}

View File

@ -24,7 +24,7 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition;
import com.mojang.authlib.GameProfile;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.Types;
import de.florianmichael.viafabricplus.injection.access.IClientConnection;
import de.florianmichael.viafabricplus.protocoltranslator.ProtocolTranslator;
import de.florianmichael.viafabricplus.settings.impl.DebugSettings;
@ -217,16 +217,16 @@ public abstract class MixinClientPlayerEntity extends AbstractClientPlayerEntity
}
@Redirect(method = "tick", slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;hasVehicle()Z")), at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayNetworkHandler;sendPacket(Lnet/minecraft/network/packet/Packet;)V", ordinal = 0))
private void modifyPositionPacket(ClientPlayNetworkHandler instance, Packet<?> packet) throws Exception {
private void modifyPositionPacket(ClientPlayNetworkHandler instance, Packet<?> packet) {
if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_5_2)) {
final PacketWrapper playerPosition = PacketWrapper.create(ServerboundPackets1_5_2.PLAYER_POSITION_AND_ROTATION, ((IClientConnection) this.networkHandler.getConnection()).viaFabricPlus$getUserConnection());
playerPosition.write(Type.DOUBLE, this.getVelocity().x); // x
playerPosition.write(Type.DOUBLE, -999.0D); // y
playerPosition.write(Type.DOUBLE, -999.0D); // stance
playerPosition.write(Type.DOUBLE, this.getVelocity().z); // z
playerPosition.write(Type.FLOAT, this.getYaw()); // yaw
playerPosition.write(Type.FLOAT, this.getPitch()); // pitch
playerPosition.write(Type.BOOLEAN, this.isOnGround()); // onGround
final PacketWrapper playerPosition = PacketWrapper.create(ServerboundPackets1_5_2.MOVE_PLAYER_POS_ROT, ((IClientConnection) this.networkHandler.getConnection()).viaFabricPlus$getUserConnection());
playerPosition.write(Types.DOUBLE, this.getVelocity().x); // x
playerPosition.write(Types.DOUBLE, -999.0D); // y
playerPosition.write(Types.DOUBLE, -999.0D); // stance
playerPosition.write(Types.DOUBLE, this.getVelocity().z); // z
playerPosition.write(Types.FLOAT, this.getYaw()); // yaw
playerPosition.write(Types.FLOAT, this.getPitch()); // pitch
playerPosition.write(Types.BOOLEAN, this.isOnGround()); // onGround
playerPosition.scheduleSendToServer(Protocol1_6_1to1_5_2.class);
return;
}

View File

@ -20,7 +20,7 @@
package de.florianmichael.viafabricplus.injection.mixin.fixes.minecraft.network;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.storage.InventoryAcknowledgements;
import com.viaversion.viaversion.protocols.v1_16_4to1_17.storage.InventoryAcknowledgements;
import de.florianmichael.viafabricplus.fixes.ClientsideFixes;
import de.florianmichael.viafabricplus.injection.access.IClientConnection;
import de.florianmichael.viafabricplus.protocoltranslator.ProtocolTranslator;

View File

@ -23,9 +23,9 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition;
import com.llamalad7.mixinextras.sugar.Local;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ServerboundPackets1_16_2;
import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.Protocol1_17To1_16_4;
import com.viaversion.viaversion.api.type.Types;
import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.packet.ServerboundPackets1_16_2;
import com.viaversion.viaversion.protocols.v1_16_4to1_17.Protocol1_16_4To1_17;
import de.florianmichael.viafabricplus.fixes.versioned.ActionResultException1_12_2;
import de.florianmichael.viafabricplus.fixes.versioned.ClientPlayerInteractionManager1_18_2;
import de.florianmichael.viafabricplus.injection.access.IClientConnection;
@ -142,7 +142,7 @@ public abstract class MixinClientPlayerInteractionManager implements IClientPlay
}
@WrapWithCondition(method = "clickSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayNetworkHandler;sendPacket(Lnet/minecraft/network/packet/Packet;)V"))
private boolean handleWindowClick1_16_5(ClientPlayNetworkHandler instance, Packet<?> packet) throws Exception {
private boolean handleWindowClick1_16_5(ClientPlayNetworkHandler instance, Packet<?> packet) {
if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_16_4) && packet instanceof ClickSlotC2SPacket clickSlot) {
ItemStack slotItemBeforeModification;
if (this.viaFabricPlus$shouldBeEmpty(clickSlot.getActionType(), clickSlot.getSlot())) {
@ -153,14 +153,14 @@ public abstract class MixinClientPlayerInteractionManager implements IClientPlay
slotItemBeforeModification = viaFabricPlus$oldItems.get(clickSlot.getSlot());
}
final PacketWrapper clickWindowPacket = PacketWrapper.create(ServerboundPackets1_16_2.CLICK_WINDOW, ((IClientConnection) networkHandler.getConnection()).viaFabricPlus$getUserConnection());
clickWindowPacket.write(Type.UNSIGNED_BYTE, (short) clickSlot.getSyncId());
clickWindowPacket.write(Type.SHORT, (short) clickSlot.getSlot());
clickWindowPacket.write(Type.BYTE, (byte) clickSlot.getButton());
clickWindowPacket.write(Type.SHORT, ((IScreenHandler) client.player.currentScreenHandler).viaFabricPlus$incrementAndGetActionId());
clickWindowPacket.write(Type.VAR_INT, clickSlot.getActionType().ordinal());
clickWindowPacket.write(Type.ITEM1_13_2, ItemTranslator.mcToVia(slotItemBeforeModification, ProtocolVersion.v1_16_4));
clickWindowPacket.scheduleSendToServer(Protocol1_17To1_16_4.class);
final PacketWrapper clickWindowPacket = PacketWrapper.create(ServerboundPackets1_16_2.CONTAINER_CLICK, ((IClientConnection) networkHandler.getConnection()).viaFabricPlus$getUserConnection());
clickWindowPacket.write(Types.UNSIGNED_BYTE, (short) clickSlot.getSyncId());
clickWindowPacket.write(Types.SHORT, (short) clickSlot.getSlot());
clickWindowPacket.write(Types.BYTE, (byte) clickSlot.getButton());
clickWindowPacket.write(Types.SHORT, ((IScreenHandler) client.player.currentScreenHandler).viaFabricPlus$incrementAndGetActionId());
clickWindowPacket.write(Types.VAR_INT, clickSlot.getActionType().ordinal());
clickWindowPacket.write(Types.ITEM1_13_2, ItemTranslator.mcToVia(slotItemBeforeModification, ProtocolVersion.v1_16_4));
clickWindowPacket.scheduleSendToServer(Protocol1_16_4To1_17.class);
viaFabricPlus$oldCursorStack = null;
viaFabricPlus$oldItems = null;

View File

@ -22,9 +22,9 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes.vialegacy;
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_8.ClientboundPackets1_8;
import com.viaversion.viaversion.protocols.protocol1_8.ServerboundPackets1_8;
import com.viaversion.viaversion.api.type.Types;
import com.viaversion.viaversion.protocols.v1_8to1_9.packet.ClientboundPackets1_8;
import com.viaversion.viaversion.protocols.v1_8to1_9.packet.ServerboundPackets1_8;
import de.florianmichael.viafabricplus.fixes.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;
@ -42,38 +42,38 @@ public abstract class MixinProtocol1_8to1_7_6_10 extends AbstractProtocol<Client
this.registerClientbound(ClientboundPackets1_7_2.PLAYER_POSITION, ClientboundPackets1_8.PLAYER_POSITION, new PacketHandlers() {
@Override
public void register() {
map(Type.DOUBLE); // x
map(Type.DOUBLE, Type.DOUBLE, stance -> stance - 1.62F); // y
map(Type.DOUBLE); // z
map(Type.FLOAT); // yaw
map(Type.FLOAT); // pitch
map(Types.DOUBLE); // x
map(Types.DOUBLE, Types.DOUBLE, stance -> stance - 1.62F); // y
map(Types.DOUBLE); // z
map(Types.FLOAT); // yaw
map(Types.FLOAT); // pitch
handler(wrapper -> {
final boolean onGround = wrapper.read(Type.BOOLEAN); // On Ground
final boolean onGround = wrapper.read(Types.BOOLEAN); // On Ground
final TeleportTracker teleportTracker = wrapper.user().get(TeleportTracker.class);
if (teleportTracker != null) {
teleportTracker.setPending(onGround);
}
wrapper.write(Type.BYTE, (byte) 0); // flags
wrapper.write(Types.BYTE, (byte) 0); // flags
});
}
}, true);
this.registerServerbound(ServerboundPackets1_8.PLAYER_POSITION_AND_ROTATION, ServerboundPackets1_7_2.PLAYER_POSITION_AND_ROTATION, new PacketHandlers() {
this.registerServerbound(ServerboundPackets1_8.MOVE_PLAYER_POS_ROT, ServerboundPackets1_7_2.MOVE_PLAYER_POS_ROT, new PacketHandlers() {
@Override
public void register() {
map(Type.DOUBLE); // x
map(Type.DOUBLE); // y
handler(wrapper -> wrapper.write(Type.DOUBLE, wrapper.get(Type.DOUBLE, 1) + 1.62)); // stance
map(Type.DOUBLE); // z
map(Type.FLOAT); // yaw
map(Type.FLOAT); // pitch
map(Type.BOOLEAN); // onGround
map(Types.DOUBLE); // x
map(Types.DOUBLE); // y
handler(wrapper -> wrapper.write(Types.DOUBLE, wrapper.get(Types.DOUBLE, 1) + 1.62)); // stance
map(Types.DOUBLE); // z
map(Types.FLOAT); // yaw
map(Types.FLOAT); // pitch
map(Types.BOOLEAN); // onGround
handler(wrapper -> {
final TeleportTracker teleportTracker = wrapper.user().get(TeleportTracker.class);
if (teleportTracker != null) {
Boolean pendingTeleport = teleportTracker.getPending();
if (pendingTeleport != null) {
wrapper.set(Type.BOOLEAN, 0, pendingTeleport);
wrapper.set(Types.BOOLEAN, 0, pendingTeleport);
teleportTracker.setPending(null);
}
}

View File

@ -22,9 +22,9 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes.vialegacy;
import com.viaversion.viaversion.api.protocol.AbstractProtocol;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.protocols.protocol1_19_4to1_19_3.ClientboundPackets1_19_4;
import com.viaversion.viaversion.protocols.protocol1_19_4to1_19_3.Protocol1_19_4To1_19_3;
import com.viaversion.viaversion.api.type.Types;
import com.viaversion.viaversion.protocols.v1_19_3to1_19_4.Protocol1_19_3To1_19_4;
import com.viaversion.viaversion.protocols.v1_19_3to1_19_4.packet.ClientboundPackets1_19_4;
import de.florianmichael.viafabricplus.fixes.versioned.classic.CPEAdditions;
import net.raphimc.vialegacy.protocols.classic.protocola1_0_15toc0_28_30.ClientboundPacketsc0_28;
import net.raphimc.vialegacy.protocols.classic.protocola1_0_15toc0_28_30.ServerboundPacketsc0_28;
@ -46,18 +46,18 @@ public abstract class MixinProtocolc0_30toc0_30cpe extends AbstractProtocol<Clie
public void register() {
handler(wrapper -> {
wrapper.cancel();
final byte weatherType = wrapper.read(Type.BYTE);
final byte weatherType = wrapper.read(Types.BYTE);
final PacketWrapper changeRainState = PacketWrapper.create(ClientboundPackets1_19_4.GAME_EVENT, wrapper.user());
changeRainState.write(Type.BYTE, weatherType == 0 /* sunny */ ? (byte) 2 : (byte) 1); // start raining
changeRainState.write(Type.FLOAT, 0F); // unused
changeRainState.send(Protocol1_19_4To1_19_3.class);
changeRainState.write(Types.UNSIGNED_BYTE, weatherType == 0 /* sunny */ ? (short) 2 : (short) 1); // start raining
changeRainState.write(Types.FLOAT, 0F); // unused
changeRainState.send(Protocol1_19_3To1_19_4.class);
if (weatherType == 1 /* raining */ || weatherType == 2 /* snowing */) {
final PacketWrapper changeRainType = PacketWrapper.create(ClientboundPackets1_19_4.GAME_EVENT, wrapper.user());
changeRainType.write(Type.BYTE, (byte) 7);
changeRainType.write(Type.FLOAT, weatherType == 1 /* raining */ ? 0F : 1F);
changeRainType.send(Protocol1_19_4To1_19_3.class);
changeRainType.write(Types.UNSIGNED_BYTE, (short) 7);
changeRainType.write(Types.FLOAT, weatherType == 1 /* raining */ ? 0F : 1F);
changeRainType.send(Protocol1_19_3To1_19_4.class);
}
});
}

View File

@ -35,10 +35,10 @@ import com.viaversion.viaversion.libs.fastutil.ints.IntSet;
import com.viaversion.viaversion.libs.gson.JsonArray;
import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.libs.gson.JsonObject;
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ClientboundPacket1_20_3;
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.Protocol1_20_5To1_20_3;
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.packet.ServerboundPacket1_20_5;
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.rewriter.BlockItemPacketRewriter1_20_5;
import com.viaversion.viaversion.protocols.v1_20_2to1_20_3.packet.ClientboundPacket1_20_3;
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.Protocol1_20_3To1_20_5;
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ServerboundPacket1_20_5;
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.rewriter.BlockItemPacketRewriter1_20_5;
import com.viaversion.viaversion.rewriter.ItemRewriter;
import de.florianmichael.viafabricplus.event.PostViaVersionLoadCallback;
import de.florianmichael.viafabricplus.protocoltranslator.impl.ViaFabricPlusMappingDataLoader;
@ -53,7 +53,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.*;
@Mixin(value = BlockItemPacketRewriter1_20_5.class, remap = false)
public abstract class MixinBlockItemPacketRewriter1_20_5 extends ItemRewriter<ClientboundPacket1_20_3, ServerboundPacket1_20_5, Protocol1_20_5To1_20_3> {
public abstract class MixinBlockItemPacketRewriter1_20_5 extends ItemRewriter<ClientboundPacket1_20_3, ServerboundPacket1_20_5, Protocol1_20_3To1_20_5> {
@Unique
private final Set<String> viaFabricPlus$foodItems_b1_7_3 = new HashSet<>();
@ -67,12 +67,12 @@ public abstract class MixinBlockItemPacketRewriter1_20_5 extends ItemRewriter<Cl
@Unique
private final Map<ProtocolVersion, Map<String, ToolProperties>> viaFabricPlus$toolDataChanges = new LinkedHashMap<>();
public MixinBlockItemPacketRewriter1_20_5(Protocol1_20_5To1_20_3 protocol, Type<Item> itemType, Type<Item[]> itemArrayType, Type<Item> mappedItemType, Type<Item[]> mappedItemArrayType) {
public MixinBlockItemPacketRewriter1_20_5(Protocol1_20_3To1_20_5 protocol, Type<Item> itemType, Type<Item[]> itemArrayType, Type<Item> mappedItemType, Type<Item[]> mappedItemArrayType) {
super(protocol, itemType, itemArrayType, mappedItemType, mappedItemArrayType);
}
@Inject(method = "<init>", at = @At("RETURN"))
public void loadItemMappings(Protocol1_20_5To1_20_3 protocol, CallbackInfo ci) {
public void loadItemMappings(Protocol1_20_3To1_20_5 protocol, CallbackInfo ci) {
// Technically it would be cleaner to split mapping loading into there respective protocols, but that will be impossible
// in a clean way, so let's just wait for Via* to load all protocols and then load everything in here.
this.viaFabricPlus$foodItems_b1_7_3.add("minecraft:apple");
@ -134,33 +134,33 @@ public abstract class MixinBlockItemPacketRewriter1_20_5 extends ItemRewriter<Cl
// Older servers don't have these components, so we can use them to emulate old item behaviour without the need
// of modifying tons of code in the game.
@Inject(method = "toStructuredItem", at = @At("RETURN"))
private void appendItemDataFixComponents(UserConnection connection, Item old, CallbackInfoReturnable<Item> cir) {
private void appendItemDataFixComponents(UserConnection user, Item old, CallbackInfoReturnable<Item> cir) {
final StructuredDataContainer data = cir.getReturnValue().structuredData();
final String identifier = this.protocol.getMappingData().getFullItemMappings().identifier(cir.getReturnValue().identifier());
// Fix damage bar being displayed wrong
if (connection.getProtocolInfo().serverProtocolVersion().olderThanOrEqualTo(ProtocolVersion.v1_17_1)) {
if (user.getProtocolInfo().serverProtocolVersion().olderThanOrEqualTo(ProtocolVersion.v1_17_1)) {
if (identifier.equals("minecraft:crossbow")) {
data.set(StructuredDataKey.MAX_DAMAGE, 326);
}
}
// Add item blocking by make the sword eatable, counterpart in MixinSwordItem
if (connection.getProtocolInfo().serverProtocolVersion().betweenInclusive(LegacyProtocolVersion.b1_8tob1_8_1, ProtocolVersion.v1_8)) {
if (user.getProtocolInfo().serverProtocolVersion().betweenInclusive(LegacyProtocolVersion.b1_8tob1_8_1, ProtocolVersion.v1_8)) {
if (this.viaFabricPlus$swordItems1_8.contains(identifier)) {
data.set(StructuredDataKey.FOOD, new FoodProperties(0, 0F, true, 3600, new FoodEffect[0]));
}
}
// Fix durability tooltip displaying wrong
if (connection.getProtocolInfo().serverProtocolVersion().olderThanOrEqualTo(LegacyProtocolVersion.b1_8tob1_8_1)) {
if (user.getProtocolInfo().serverProtocolVersion().olderThanOrEqualTo(LegacyProtocolVersion.b1_8tob1_8_1)) {
if (this.viaFabricPlus$armorMaxDamage_b1_8_1.containsKey(identifier)) {
data.set(StructuredDataKey.MAX_DAMAGE, this.viaFabricPlus$armorMaxDamage_b1_8_1.get(identifier));
}
}
// Fix item desyncs
if (connection.getProtocolInfo().serverProtocolVersion().olderThanOrEqualTo(LegacyProtocolVersion.b1_7tob1_7_3)) {
if (user.getProtocolInfo().serverProtocolVersion().olderThanOrEqualTo(LegacyProtocolVersion.b1_7tob1_7_3)) {
if (this.viaFabricPlus$foodItems_b1_7_3.contains(identifier)) {
data.set(StructuredDataKey.MAX_STACK_SIZE, 1);
data.addEmpty(StructuredDataKey.FOOD);
@ -169,7 +169,7 @@ public abstract class MixinBlockItemPacketRewriter1_20_5 extends ItemRewriter<Cl
// Tool data changes include mining speeds as well as suitable blocks and damage values
for (Map.Entry<ProtocolVersion, Map<String, ToolProperties>> entry : this.viaFabricPlus$toolDataChanges.entrySet()) {
if (connection.getProtocolInfo().serverProtocolVersion().olderThanOrEqualTo(entry.getKey())) {
if (user.getProtocolInfo().serverProtocolVersion().olderThanOrEqualTo(entry.getKey())) {
final ToolProperties toolProperties = entry.getValue().get(identifier);
if (toolProperties != null) {
data.set(StructuredDataKey.TOOL, toolProperties);

View File

@ -19,7 +19,7 @@
package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion;
import com.viaversion.viaversion.protocols.protocol1_9to1_8.providers.CommandBlockProvider;
import com.viaversion.viaversion.protocols.v1_8to1_9.provider.CommandBlockProvider;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.Constant;
import org.spongepowered.asm.mixin.injection.ModifyConstant;

View File

@ -20,17 +20,17 @@
package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion;
import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ByteTag;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
import com.viaversion.viaversion.protocols.protocol1_11to1_10.rewriter.EntityIdRewriter;
import com.viaversion.nbt.tag.ByteTag;
import com.viaversion.nbt.tag.CompoundTag;
import com.viaversion.viaversion.protocols.v1_10to1_11.data.EntityMappings1_11;
import de.florianmichael.viafabricplus.fixes.ClientsideFixes;
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;
@Mixin(value = EntityIdRewriter.class, remap = false)
public abstract class MixinEntityIdRewriter {
@Mixin(value = EntityMappings1_11.class, remap = false)
public abstract class MixinEntityMappings1_11 {
@Inject(method = "toClientItem(Lcom/viaversion/viaversion/api/minecraft/item/Item;Z)V", at = @At("HEAD"))
private static void handleNegativeItemCountS2C(Item item, boolean backwards, CallbackInfo ci) {
@ -50,7 +50,7 @@ public abstract class MixinEntityIdRewriter {
private static void handleNegativeItemCountC2S(Item item, boolean backwards, CallbackInfo ci) {
if (item != null && item.tag() != null) {
if (item.tag().contains(ClientsideFixes.ITEM_COUNT_FIX_KEY)) {
item.setAmount(item.tag().<ByteTag>remove(ClientsideFixes.ITEM_COUNT_FIX_KEY).asByte());
item.setAmount(item.tag().<ByteTag>removeUnchecked(ClientsideFixes.ITEM_COUNT_FIX_KEY).asByte());
if (item.tag().isEmpty()) item.setTag(null);
}
}

View File

@ -19,25 +19,25 @@
package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion;
import com.viaversion.viaversion.protocols.protocol1_14_4to1_14_3.ClientboundPackets1_14_4;
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.protocols.v1_14_3to1_14_4.packet.ClientboundPackets1_14_4;
import com.viaversion.viaversion.protocols.v1_14_4to1_15.Protocol1_14_4To1_15;
import com.viaversion.viaversion.protocols.v1_14_4to1_15.rewriter.EntityPacketRewriter1_15;
import com.viaversion.viaversion.rewriter.EntityRewriter;
import com.viaversion.viaversion.rewriter.meta.MetaFilter;
import com.viaversion.viaversion.rewriter.entitydata.EntityDataFilter;
import de.florianmichael.viafabricplus.fixes.tracker.WolfHealthTracker;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(value = MetadataRewriter1_15To1_14_4.class, remap = false)
public abstract class MixinMetadataRewriter1_15To1_14_4 extends EntityRewriter<ClientboundPackets1_14_4, Protocol1_15To1_14_4> {
@Mixin(value = EntityPacketRewriter1_15.class, remap = false)
public abstract class MixinEntityPacketRewriter1_15 extends EntityRewriter<ClientboundPackets1_14_4, Protocol1_14_4To1_15> {
public MixinMetadataRewriter1_15To1_14_4(Protocol1_15To1_14_4 protocol) {
public MixinEntityPacketRewriter1_15(Protocol1_14_4To1_15 protocol) {
super(protocol);
}
@Redirect(method = "registerRewrites", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/rewriter/meta/MetaFilter$Builder;removeIndex(I)V"))
private void trackHealth(MetaFilter.Builder instance, int index) {
@Redirect(method = "registerRewrites", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/rewriter/entitydata/EntityDataFilter$Builder;removeIndex(I)V"))
private void trackHealth(EntityDataFilter.Builder instance, int index) {
instance.handler((event, meta) -> { // Basically removeIndex, but we need to track the actual health value
final int metaIndex = event.index();
if (metaIndex == index) {

View File

@ -22,21 +22,21 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion;
import com.viaversion.viaversion.api.protocol.Protocol;
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ClientboundPackets1_16_2;
import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.Protocol1_17To1_16_4;
import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.packets.EntityPackets;
import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.packet.ClientboundPackets1_16_2;
import com.viaversion.viaversion.protocols.v1_16_4to1_17.Protocol1_16_4To1_17;
import com.viaversion.viaversion.protocols.v1_16_4to1_17.rewriter.EntityPacketRewriter1_17;
import de.florianmichael.viafabricplus.fixes.versioned.classic.WorldHeightSupport;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@SuppressWarnings({"unchecked", "rawtypes"})
@Mixin(value = EntityPackets.class, remap = false)
public abstract class MixinEntityPackets1_17 {
@Mixin(value = EntityPacketRewriter1_17.class, remap = false)
public abstract class MixinEntityPacketRewriter1_17 {
@Redirect(method = "registerPackets", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/protocols/protocol1_17to1_16_4/Protocol1_17To1_16_4;registerClientbound(Lcom/viaversion/viaversion/api/protocol/packet/ClientboundPacketType;Lcom/viaversion/viaversion/api/protocol/remapper/PacketHandler;)V"))
private void handleClassicWorldHeight(Protocol1_17To1_16_4 instance, ClientboundPacketType packetType, PacketHandler packetHandler) {
if (packetType == ClientboundPackets1_16_2.JOIN_GAME) packetHandler = WorldHeightSupport.handleJoinGame(packetHandler);
@Redirect(method = "registerPackets", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/protocols/v1_16_4to1_17/Protocol1_16_4To1_17;registerClientbound(Lcom/viaversion/viaversion/api/protocol/packet/ClientboundPacketType;Lcom/viaversion/viaversion/api/protocol/remapper/PacketHandler;)V"))
private void handleClassicWorldHeight(Protocol1_16_4To1_17 instance, ClientboundPacketType packetType, PacketHandler packetHandler) {
if (packetType == ClientboundPackets1_16_2.LOGIN) packetHandler = WorldHeightSupport.handleJoinGame(packetHandler);
if (packetType == ClientboundPackets1_16_2.RESPAWN) packetHandler = WorldHeightSupport.handleRespawn(packetHandler);
((Protocol) instance).registerClientbound(packetType, packetHandler);

View File

@ -19,26 +19,26 @@
package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion;
import com.viaversion.viaversion.protocols.protocol1_19_3to1_19_1.ClientboundPackets1_19_3;
import com.viaversion.viaversion.protocols.protocol1_19_4to1_19_3.ClientboundPackets1_19_4;
import com.viaversion.viaversion.protocols.protocol1_19_4to1_19_3.Protocol1_19_4To1_19_3;
import com.viaversion.viaversion.protocols.protocol1_19_4to1_19_3.packets.EntityPackets;
import com.viaversion.viaversion.protocols.v1_19_1to1_19_3.packet.ClientboundPackets1_19_3;
import com.viaversion.viaversion.protocols.v1_19_3to1_19_4.Protocol1_19_3To1_19_4;
import com.viaversion.viaversion.protocols.v1_19_3to1_19_4.packet.ClientboundPackets1_19_4;
import com.viaversion.viaversion.protocols.v1_19_3to1_19_4.rewriter.EntityPacketRewriter1_19_4;
import com.viaversion.viaversion.rewriter.EntityRewriter;
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;
@Mixin(value = EntityPackets.class, remap = false)
public abstract class MixinEntityPackets1_19_4 extends EntityRewriter<ClientboundPackets1_19_3, Protocol1_19_4To1_19_3> {
@Mixin(value = EntityPacketRewriter1_19_4.class, remap = false)
public abstract class MixinEntityPacketRewriter1_19_4 extends EntityRewriter<ClientboundPackets1_19_3, Protocol1_19_3To1_19_4> {
protected MixinEntityPackets1_19_4(Protocol1_19_4To1_19_3 protocol) {
protected MixinEntityPacketRewriter1_19_4(Protocol1_19_3To1_19_4 protocol) {
super(protocol);
}
@Inject(method = "registerPackets", at = @At("RETURN"))
private void fixTeleportBehaviour(CallbackInfo ci) {
this.protocol.registerClientbound(ClientboundPackets1_19_3.ENTITY_TELEPORT, ClientboundPackets1_19_4.ENTITY_TELEPORT, wrapper -> {
this.protocol.registerClientbound(ClientboundPackets1_19_3.TELEPORT_ENTITY, ClientboundPackets1_19_4.TELEPORT_ENTITY, wrapper -> {
}, true);
}

View File

@ -20,7 +20,7 @@
package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.rewriter.EntityPacketRewriter1_20_3;
import com.viaversion.viaversion.protocols.v1_20_2to1_20_3.rewriter.EntityPacketRewriter1_20_3;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;

View File

@ -22,11 +22,11 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ClientboundPacket1_20_3;
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.Protocol1_20_5To1_20_3;
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.packet.ClientboundPackets1_20_5;
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.rewriter.EntityPacketRewriter1_20_5;
import com.viaversion.viaversion.api.type.Types;
import com.viaversion.viaversion.protocols.v1_20_2to1_20_3.packet.ClientboundPacket1_20_3;
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.Protocol1_20_3To1_20_5;
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ClientboundPackets1_20_5;
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.rewriter.EntityPacketRewriter1_20_5;
import com.viaversion.viaversion.rewriter.EntityRewriter;
import net.raphimc.vialegacy.api.LegacyProtocolVersion;
import org.checkerframework.checker.nullness.qual.Nullable;
@ -38,7 +38,7 @@ import org.spongepowered.asm.mixin.Shadow;
import java.util.UUID;
@Mixin(value = EntityPacketRewriter1_20_5.class, remap = false)
public abstract class MixinEntityPacketRewriter1_20_5 extends EntityRewriter<ClientboundPacket1_20_3, Protocol1_20_5To1_20_3> {
public abstract class MixinEntityPacketRewriter1_20_5 extends EntityRewriter<ClientboundPacket1_20_3, Protocol1_20_3To1_20_5> {
@Shadow
@Final
@ -48,7 +48,7 @@ public abstract class MixinEntityPacketRewriter1_20_5 extends EntityRewriter<Cli
@Final
private static UUID CREATIVE_ENTITY_INTERACTION_RANGE;
protected MixinEntityPacketRewriter1_20_5(Protocol1_20_5To1_20_3 protocol) {
protected MixinEntityPacketRewriter1_20_5(Protocol1_20_3To1_20_5 protocol) {
super(protocol);
}
@ -61,13 +61,13 @@ public abstract class MixinEntityPacketRewriter1_20_5 extends EntityRewriter<Cli
*/
@Overwrite
private void sendRangeAttributes(final UserConnection connection, final boolean creativeMode) throws Exception {
final PacketWrapper wrapper = PacketWrapper.create(ClientboundPackets1_20_5.ENTITY_PROPERTIES, connection);
wrapper.write(Type.VAR_INT, this.tracker(connection).clientEntityId());
final PacketWrapper wrapper = PacketWrapper.create(ClientboundPackets1_20_5.UPDATE_ATTRIBUTES, connection);
wrapper.write(Types.VAR_INT, this.tracker(connection).clientEntityId());
if (connection.getProtocolInfo().serverProtocolVersion().olderThanOrEqualTo(ProtocolVersion.v1_7_6)) {
wrapper.write(Type.VAR_INT, 3); // Number of attributes
wrapper.write(Types.VAR_INT, 3); // Number of attributes
this.writeAttribute(wrapper, "generic.step_height", 0.5D, null, 0D);
} else {
wrapper.write(Type.VAR_INT, 2); // Number of attributes
wrapper.write(Types.VAR_INT, 2); // Number of attributes
}
if (connection.getProtocolInfo().serverProtocolVersion().olderThan(LegacyProtocolVersion.r1_0_0tor1_0_1)) {
this.writeAttribute(wrapper, "player.block_interaction_range", 4D, creativeMode ? CREATIVE_BLOCK_INTERACTION_RANGE : null, 1D);
@ -81,7 +81,7 @@ public abstract class MixinEntityPacketRewriter1_20_5 extends EntityRewriter<Cli
} else {
this.writeAttribute(wrapper, "player.entity_interaction_range", 3D, creativeMode ? CREATIVE_ENTITY_INTERACTION_RANGE : null, 2D);
}
wrapper.scheduleSend(Protocol1_20_5To1_20_3.class);
wrapper.scheduleSend(Protocol1_20_3To1_20_5.class);
}
}

View File

@ -19,21 +19,21 @@
package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.protocols.protocol1_9to1_8.Protocol1_9To1_8;
import com.viaversion.viaversion.protocols.protocol1_9to1_8.metadata.MetadataRewriter1_9To1_8;
import com.viaversion.viaversion.rewriter.meta.MetaHandlerEvent;
import com.viaversion.viaversion.api.minecraft.entitydata.EntityData;
import com.viaversion.viaversion.protocols.v1_8to1_9.Protocol1_8To1_9;
import com.viaversion.viaversion.protocols.v1_8to1_9.rewriter.EntityPacketRewriter1_9;
import com.viaversion.viaversion.rewriter.entitydata.EntityDataHandlerEvent;
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;
@Mixin(value = MetadataRewriter1_9To1_8.class, remap = false)
public abstract class MixinMetadataRewriter1_9To1_8 {
@Mixin(value = EntityPacketRewriter1_9.class, remap = false)
public abstract class MixinEntityPacketRewriter1_9 {
@Inject(method = "handleMetadata", at = @At(value = "FIELD", target = "Lcom/viaversion/viaversion/protocols/protocol1_9to1_8/metadata/MetaIndex;PLAYER_HAND:Lcom/viaversion/viaversion/protocols/protocol1_9to1_8/metadata/MetaIndex;", ordinal = 0, shift = At.Shift.BEFORE), cancellable = true)
private void preventMetadataForClientPlayer(MetaHandlerEvent event, Metadata metadata, CallbackInfo ci) {
if (event.user().getEntityTracker(Protocol1_9To1_8.class).clientEntityId() == event.entityId()) {
@Inject(method = "handleMetadata", at = @At(value = "FIELD", target = "Lcom/viaversion/viaversion/api/minecraft/entities/EntityTypes1_9$EntityType;PLAYER:Lcom/viaversion/viaversion/api/minecraft/entities/EntityTypes1_9$EntityType;", ordinal = 0, shift = At.Shift.BEFORE), cancellable = true)
private void preventMetadataForClientPlayer(EntityDataHandlerEvent event, EntityData metadata, CallbackInfo ci) {
if (event.user().getEntityTracker(Protocol1_8To1_9.class).clientEntityId() == event.entityId()) {
ci.cancel();
}
}

View File

@ -19,8 +19,8 @@
package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.protocols.protocol1_9to1_8.storage.EntityTracker1_9;
import com.viaversion.viaversion.api.minecraft.entitydata.EntityData;
import com.viaversion.viaversion.protocols.v1_8to1_9.storage.EntityTracker1_9;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@ -39,8 +39,8 @@ public abstract class MixinEntityTracker1_9 {
return b;
}
@Redirect(method = "handleMetadata", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/api/minecraft/metadata/Metadata;getValue()Ljava/lang/Object;"), slice = @Slice(from = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/api/configuration/ViaVersionConfig;isBossbarAntiflicker()Z")))
private Object remapNaNToZero(Metadata instance) {
@Redirect(method = "handleMetadata", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/api/minecraft/entitydata/EntityData;getValue()Ljava/lang/Object;"), slice = @Slice(from = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/api/configuration/ViaVersionConfig;isBossbarAntiflicker()Z")))
private Object remapNaNToZero(EntityData instance) {
if (instance.getValue() instanceof Float && ((Float) instance.getValue()).isNaN()) {
return 0F;
} else {

View File

@ -20,7 +20,7 @@
package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion;
import com.viaversion.viaversion.libs.fastutil.ints.IntList;
import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.storage.InventoryAcknowledgements;
import com.viaversion.viaversion.protocols.v1_16_4to1_17.storage.InventoryAcknowledgements;
import it.unimi.dsi.fastutil.ints.IntArrayList;
import it.unimi.dsi.fastutil.ints.IntLists;
import org.spongepowered.asm.mixin.*;

View File

@ -1,48 +0,0 @@
/*
* This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus
* Copyright (C) 2021-2024 FlorianMichael/EnZaXD <florian.michael07@gmail.com> and RK_01/RaphiMC
* Copyright (C) 2023-2024 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;
import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13;
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ServerboundPackets1_13;
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.Protocol1_14To1_13_2;
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ServerboundPackets1_14;
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.packets.InventoryPackets;
import com.viaversion.viaversion.rewriter.ItemRewriter;
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;
@Mixin(value = InventoryPackets.class, remap = false)
public abstract class MixinInventoryPackets1_13 extends ItemRewriter<ClientboundPackets1_13, ServerboundPackets1_14, Protocol1_14To1_13_2> {
public MixinInventoryPackets1_13(Protocol1_14To1_13_2 protocol, Type<Item> itemType, Type<Item[]> itemArrayType) {
super(protocol, itemType, itemArrayType);
}
@Inject(method = "registerPackets", at = @At("RETURN"))
private void dontResyncInventory(CallbackInfo ci) {
this.protocol.registerServerbound(ServerboundPackets1_14.SELECT_TRADE, ServerboundPackets1_13.SELECT_TRADE, (PacketHandler) null, true);
}
}

View File

@ -19,7 +19,7 @@
package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion;
import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.storage.InventoryTracker1_16;
import com.viaversion.viaversion.protocols.v1_15_2to1_16.storage.InventoryTracker1_16;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;

View File

@ -19,11 +19,19 @@
package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion;
import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.Types;
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 com.viaversion.viaversion.protocols.v1_12_2to1_13.packet.ClientboundPackets1_13;
import com.viaversion.viaversion.protocols.v1_12_2to1_13.packet.ServerboundPackets1_13;
import com.viaversion.viaversion.protocols.v1_13_2to1_14.Protocol1_13_2To1_14;
import com.viaversion.viaversion.protocols.v1_13_2to1_14.packet.ClientboundPackets1_14;
import com.viaversion.viaversion.protocols.v1_13_2to1_14.packet.ServerboundPackets1_14;
import com.viaversion.viaversion.protocols.v1_13_2to1_14.rewriter.ItemPacketRewriter1_14;
import com.viaversion.viaversion.rewriter.ItemRewriter;
import de.florianmichael.viafabricplus.fixes.ClientsideFixes;
import de.florianmichael.viafabricplus.protocoltranslator.translator.TextComponentTranslator;
import net.minecraft.client.MinecraftClient;
@ -39,11 +47,20 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
@Mixin(value = InventoryPackets.class, remap = false)
public abstract class MixinInventoryPackets {
@Mixin(value = ItemPacketRewriter1_14.class, remap = false)
public abstract class MixinItemPacketRewriter1_14 extends ItemRewriter<ClientboundPackets1_13, ServerboundPackets1_14, Protocol1_13_2To1_14> {
@Inject(method = "lambda$registerPackets$0", at = @At(value = "INVOKE", target = "Ljava/util/logging/Logger;warning(Ljava/lang/String;)V", remap = false), locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true)
private static void supportLargeContainers(PacketWrapper wrapper, CallbackInfo ci, Short windowId, String type, JsonElement title, Short slots) {
public MixinItemPacketRewriter1_14(Protocol1_13_2To1_14 protocol, Type<Item> itemType, Type<Item[]> itemArrayType) {
super(protocol, itemType, itemArrayType);
}
@Inject(method = "registerPackets", at = @At("RETURN"))
private void dontResyncInventory(CallbackInfo ci) {
this.protocol.registerServerbound(ServerboundPackets1_14.SELECT_TRADE, ServerboundPackets1_13.SELECT_TRADE, null, true);
}
@Inject(method = "lambda$registerPackets$0", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/util/ProtocolLogger;warning(Ljava/lang/String;)V", remap = false), locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true)
private void supportLargeContainers(PacketWrapper wrapper, CallbackInfo ci, Short windowId, String type, JsonElement title, Short slots) {
if ((type.equals("minecraft:container") || type.equals("minecraft:chest")) && (slots > 54 || slots <= 0)) {
ci.cancel();
@ -64,12 +81,12 @@ public abstract class MixinInventoryPackets {
});
wrapper.clearPacket();
wrapper.setPacketType(ClientboundPackets1_14.PLUGIN_MESSAGE);
wrapper.write(Type.STRING, ClientsideFixes.PACKET_SYNC_IDENTIFIER); // sync task header
wrapper.write(Type.STRING, uuid); // sync task id
wrapper.write(Type.UNSIGNED_BYTE, windowId);
wrapper.write(Type.UNSIGNED_BYTE, slots);
wrapper.write(Type.TAG, TextComponentTranslator.via1_14toViaLatest(title));
wrapper.setPacketType(ClientboundPackets1_14.CUSTOM_PAYLOAD);
wrapper.write(Types.STRING, ClientsideFixes.PACKET_SYNC_IDENTIFIER); // sync task header
wrapper.write(Types.STRING, uuid); // sync task id
wrapper.write(Types.UNSIGNED_BYTE, windowId);
wrapper.write(Types.UNSIGNED_BYTE, slots);
wrapper.write(Types.TAG, TextComponentTranslator.via1_14toViaLatest(title));
}
}

View File

@ -22,27 +22,27 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ClientboundPackets1_16_2;
import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ServerboundPackets1_16_2;
import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.Protocol1_17To1_16_4;
import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.ServerboundPackets1_17;
import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.packets.InventoryPackets;
import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.packet.ClientboundPackets1_16_2;
import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.packet.ServerboundPackets1_16_2;
import com.viaversion.viaversion.protocols.v1_16_4to1_17.Protocol1_16_4To1_17;
import com.viaversion.viaversion.protocols.v1_16_4to1_17.packet.ServerboundPackets1_17;
import com.viaversion.viaversion.protocols.v1_16_4to1_17.rewriter.ItemPacketRewriter1_17;
import com.viaversion.viaversion.rewriter.ItemRewriter;
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;
@Mixin(value = InventoryPackets.class, remap = false)
public abstract class MixinInventoryPackets1_17 extends ItemRewriter<ClientboundPackets1_16_2, ServerboundPackets1_17, Protocol1_17To1_16_4> {
@Mixin(value = ItemPacketRewriter1_17.class, remap = false)
public abstract class MixinItemPacketRewriter1_17 extends ItemRewriter<ClientboundPackets1_16_2, ServerboundPackets1_17, Protocol1_16_4To1_17> {
public MixinInventoryPackets1_17(Protocol1_17To1_16_4 protocol, Type<Item> itemType, Type<Item[]> itemArrayType) {
public MixinItemPacketRewriter1_17(Protocol1_16_4To1_17 protocol, Type<Item> itemType, Type<Item[]> itemArrayType) {
super(protocol, itemType, itemArrayType);
}
@Inject(method = "registerPackets", at = @At("RETURN"))
private void removeWindowClickHandler(CallbackInfo ci) {
this.protocol.registerServerbound(ServerboundPackets1_17.CLICK_WINDOW, ServerboundPackets1_16_2.CLICK_WINDOW, wrapper -> {
this.protocol.registerServerbound(ServerboundPackets1_17.CONTAINER_CLICK, ServerboundPackets1_16_2.CONTAINER_CLICK, wrapper -> {
Via.getPlatform().getLogger().severe("Tried to remap >=1.17 CLICK_WINDOW packet which is impossible without breaking the content! Find the cause and fix it!");
wrapper.cancel();
}, true);

View File

@ -25,9 +25,9 @@ import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectMap;
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectOpenHashMap;
import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.libs.gson.JsonObject;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag;
import com.viaversion.viaversion.protocols.protocol1_9to1_8.ItemRewriter;
import com.viaversion.nbt.tag.CompoundTag;
import com.viaversion.nbt.tag.ListTag;
import com.viaversion.viaversion.protocols.v1_8to1_9.rewriter.ItemPacketRewriter1_9;
import com.viaversion.viaversion.util.Pair;
import de.florianmichael.viafabricplus.fixes.ClientsideFixes;
import de.florianmichael.viafabricplus.protocoltranslator.impl.ViaFabricPlusMappingDataLoader;
@ -36,25 +36,26 @@ import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@Mixin(value = ItemRewriter.class, remap = false)
public abstract class MixinItemRewriter {
@Mixin(value = ItemPacketRewriter1_9.class, remap = false)
public abstract class MixinItemPacketRewriter1_9 {
@Unique
private static final Int2ObjectMap<String> ITEM_IDENTIFIERS = new Int2ObjectOpenHashMap<>();
private final Int2ObjectMap<String> viaFabricPlus$itemIdentifiers = new Int2ObjectOpenHashMap<>();
@Unique
private static final Map<String, Map<String, Pair<String, ModifierData>>> ITEM_ATTRIBUTES = new HashMap<>();
private final Map<String, Map<String, Pair<String, ModifierData>>> viaFabricPlus$itemAttributes = new HashMap<>();
@Inject(method = "<clinit>", at = @At("RETURN"))
private static void loadAdditionalData(CallbackInfo ci) {
@Inject(method = "<init>", at = @At("RETURN"))
private void loadAdditionalData(CallbackInfo ci) {
final JsonObject itemIdentifiers = ViaFabricPlusMappingDataLoader.INSTANCE.loadData("item-identifiers-1.8.json");
for (Map.Entry<String, JsonElement> entry : itemIdentifiers.entrySet()) {
ITEM_IDENTIFIERS.put(entry.getValue().getAsInt(), entry.getKey());
viaFabricPlus$itemIdentifiers.put(entry.getValue().getAsInt(), entry.getKey());
}
final JsonObject itemAttributes = ViaFabricPlusMappingDataLoader.INSTANCE.loadData("item-attributes-1.8.json");
@ -68,17 +69,18 @@ public abstract class MixinItemRewriter {
final String slot = attributeData.get("slot").getAsString();
attributes.put(attribute, new Pair<>(slot, modifierData));
}
ITEM_ATTRIBUTES.put(itemIdentifier, attributes);
viaFabricPlus$itemAttributes.put(itemIdentifier, attributes);
}
}
@Inject(method = "toClient", at = @At("RETURN"))
private static void addAttributeFixData(Item item, CallbackInfo ci) {
@Inject(method = "handleItemToClient", at = @At("RETURN"))
private void addAttributeFixData(CallbackInfoReturnable<Item> cir) {
final Item item = cir.getReturnValue();
if (item == null) return;
final String identifier = ITEM_IDENTIFIERS.get(item.identifier());
if (identifier != null && ITEM_ATTRIBUTES.containsKey(identifier)) {
final Map<String, Pair<String, ModifierData>> attributes = ITEM_ATTRIBUTES.get(identifier);
final String identifier = viaFabricPlus$itemIdentifiers.get(item.identifier());
if (identifier != null && viaFabricPlus$itemAttributes.containsKey(identifier)) {
final Map<String, Pair<String, ModifierData>> attributes = viaFabricPlus$itemAttributes.get(identifier);
final CompoundTag attributeFixTag = new CompoundTag();
CompoundTag tag = item.tag();
if (tag == null) {
@ -108,8 +110,9 @@ public abstract class MixinItemRewriter {
}
}
@Inject(method = "toServer", at = @At("RETURN"))
private static void removeAttributeFixData(Item item, CallbackInfo ci) {
@Inject(method = "handleItemToServer", at = @At("RETURN"))
private void removeAttributeFixData(CallbackInfoReturnable<Item> cir) {
final Item item = cir.getReturnValue();
if (item == null) return;
final CompoundTag tag = item.tag();
if (tag == null) return;

View File

@ -20,7 +20,7 @@
package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion;
import com.viaversion.viaversion.api.type.types.misc.NamedCompoundTagType;
import com.viaversion.viaversion.libs.opennbt.tag.limiter.TagLimiter;
import com.viaversion.nbt.limiter.TagLimiter;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@ -28,7 +28,7 @@ import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(value = NamedCompoundTagType.class, remap = false)
public abstract class MixinNamedCompoundTagType {
@Redirect(method = "read(Lio/netty/buffer/ByteBuf;Z)Lcom/viaversion/viaversion/libs/opennbt/tag/builtin/CompoundTag;", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/libs/opennbt/tag/limiter/TagLimiter;create(II)Lcom/viaversion/viaversion/libs/opennbt/tag/limiter/TagLimiter;"))
@Redirect(method = "read(Lio/netty/buffer/ByteBuf;Z)Lcom/viaversion/nbt/tag/CompoundTag;", at = @At(value = "INVOKE", target = "Lcom/viaversion/nbt/limiter/TagLimiter;create(II)Lcom/viaversion/nbt/limiter/TagLimiter;"))
private static TagLimiter removeNBTSizeLimit(int maxBytes, int maxLevels) {
return TagLimiter.noop();
}

View File

@ -19,7 +19,7 @@
package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion;
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.data.ParticleRewriter;
import com.viaversion.viaversion.protocols.v1_12_2to1_13.data.ParticleIdMappings1_13;
import de.florianmichael.viafabricplus.fixes.versioned.visual.FootStepParticle1_12_2;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
@ -31,8 +31,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.List;
@Mixin(value = ParticleRewriter.class, remap = false)
public abstract class MixinParticleRewriter {
@Mixin(value = ParticleIdMappings1_13.class, remap = false)
public abstract class MixinParticleIdMappings1_13 {
@Shadow
@Final
@ -45,7 +45,7 @@ public abstract class MixinParticleRewriter {
}
}
@ModifyArg(method = "add(I)V", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/protocols/protocol1_13to1_12_2/data/ParticleRewriter$NewParticle;<init>(ILcom/viaversion/viaversion/protocols/protocol1_13to1_12_2/data/ParticleRewriter$ParticleDataHandler;)V"))
@ModifyArg(method = "add(I)V", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/protocols/v1_12_2to1_13/data/ParticleIdMappings1_13$NewParticle;<init>(ILcom/viaversion/viaversion/protocols/v1_12_2to1_13/data/ParticleIdMappings1_13$ParticleDataHandler;)V"))
private static int replaceFootStepId(int id) {
if (particles.size() == 28) { // minecraft:footstep -> viafabricplus:footstep
return FootStepParticle1_12_2.ID;

View File

@ -24,8 +24,8 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.Constant;
import org.spongepowered.asm.mixin.injection.ModifyConstant;
@Mixin(targets = "com.viaversion.viaversion.protocols.protocol1_11to1_10.Protocol1_11To1_10$13", remap = false)
public abstract class MixinProtocol1_11To1_10 {
@Mixin(targets = "com.viaversion.viaversion.protocols.v1_10to1_11.Protocol1_10To1_11$8", remap = false)
public abstract class MixinProtocol1_10To1_11 {
@ModifyConstant(method = "lambda$register$0", constant = @Constant(intValue = 100))
private static int changeMaxChatLength(int constant) {

View File

@ -24,8 +24,8 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(targets = "com.viaversion.viaversion.protocols.protocol1_12to1_11_1.Protocol1_12To1_11_1$3", remap = false)
public abstract class MixinProtocol1_12To1_11_1 {
@Mixin(targets = "com.viaversion.viaversion.protocols.v1_11_1to1_12.Protocol1_11_1To1_12$1", remap = false)
public abstract class MixinProtocol1_11_1To1_12 {
@Redirect(method = "lambda$register$1", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/api/protocol/version/ProtocolVersion;newerThanOrEqualTo(Lcom/viaversion/viaversion/api/protocol/version/ProtocolVersion;)Z"))
private static boolean dontClearRecipes(ProtocolVersion instance, ProtocolVersion other) {

View File

@ -20,24 +20,24 @@
package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.protocols.protocol1_19_4to1_19_3.ServerboundPackets1_19_4;
import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.Protocol1_20_2To1_20;
import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.packet.ServerboundPackets1_20_2;
import com.viaversion.viaversion.protocols.v1_19_3to1_19_4.packet.ServerboundPackets1_19_4;
import com.viaversion.viaversion.protocols.v1_20to1_20_2.Protocol1_20To1_20_2;
import com.viaversion.viaversion.protocols.v1_20to1_20_2.packet.ServerboundPackets1_20_2;
import de.florianmichael.viafabricplus.settings.impl.DebugSettings;
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;
@Mixin(value = Protocol1_20_2To1_20.class, remap = false)
public abstract class MixinProtocol1_20_2To1_20 {
@Mixin(value = Protocol1_20To1_20_2.class, remap = false)
public abstract class MixinProtocol1_20To1_20_2 {
@Inject(method = "lambda$queueServerboundPacket$11", at = @At("HEAD"), cancellable = true)
private static void dontQueueConfigPackets(ServerboundPackets1_20_2 packetType, PacketWrapper wrapper, CallbackInfo ci) {
if (!DebugSettings.global().queueConfigPackets.getValue()) {
ci.cancel();
switch (packetType) {
case PLUGIN_MESSAGE -> wrapper.setPacketType(ServerboundPackets1_19_4.PLUGIN_MESSAGE);
case CUSTOM_PAYLOAD -> wrapper.setPacketType(ServerboundPackets1_19_4.CUSTOM_PAYLOAD);
case KEEP_ALIVE -> wrapper.setPacketType(ServerboundPackets1_19_4.KEEP_ALIVE);
case PONG -> wrapper.setPacketType(ServerboundPackets1_19_4.PONG);
default -> throw new IllegalStateException("Unexpected packet type: " + packetType);

View File

@ -20,7 +20,7 @@
package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion;
import com.viaversion.viaversion.api.type.types.misc.TagType;
import com.viaversion.viaversion.libs.opennbt.tag.limiter.TagLimiter;
import com.viaversion.nbt.limiter.TagLimiter;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@ -28,7 +28,7 @@ import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(value = TagType.class, remap = false)
public abstract class MixinTagType {
@Redirect(method = "read(Lio/netty/buffer/ByteBuf;)Lcom/viaversion/viaversion/libs/opennbt/tag/builtin/Tag;", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/libs/opennbt/tag/limiter/TagLimiter;create(II)Lcom/viaversion/viaversion/libs/opennbt/tag/limiter/TagLimiter;"))
@Redirect(method = "read(Lio/netty/buffer/ByteBuf;)Lcom/viaversion/nbt/tag/Tag;", at = @At(value = "INVOKE", target = "Lcom/viaversion/nbt/limiter/TagLimiter;create(II)Lcom/viaversion/nbt/limiter/TagLimiter;"))
private TagLimiter removeNBTSizeLimit(int maxBytes, int maxLevels) {
return TagLimiter.noop();
}

View File

@ -19,15 +19,15 @@
package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion;
import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.packets.WorldPackets;
import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.rewriter.WorldPacketRewriter1_16_2;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.Constant;
import org.spongepowered.asm.mixin.injection.ModifyConstant;
@Mixin(value = WorldPackets.class, remap = false)
public abstract class MixinWorldPackets1_16_2 {
@Mixin(value = WorldPacketRewriter1_16_2.class, remap = false)
public abstract class MixinWorldPacketRewriter1_16_2 {
@ModifyConstant(method = "lambda$register$1", constant = @Constant(intValue = 16))
@ModifyConstant(method = "lambda$register$0", constant = @Constant(intValue = 16))
private static int modifySectionCountToSupportClassicWorldHeight(int constant) {
return 64;
}

View File

@ -22,22 +22,22 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion;
import com.viaversion.viaversion.api.protocol.Protocol;
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.ClientboundPackets1_16_2;
import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.Protocol1_17To1_16_4;
import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.packets.WorldPackets;
import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.packet.ClientboundPackets1_16_2;
import com.viaversion.viaversion.protocols.v1_16_4to1_17.Protocol1_16_4To1_17;
import com.viaversion.viaversion.protocols.v1_16_4to1_17.rewriter.WorldPacketRewriter1_17;
import de.florianmichael.viafabricplus.fixes.versioned.classic.WorldHeightSupport;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@SuppressWarnings({"unchecked", "rawtypes"})
@Mixin(value = WorldPackets.class, remap = false)
public abstract class MixinWorldPackets1_17 {
@Mixin(value = WorldPacketRewriter1_17.class, remap = false)
public abstract class MixinWorldPacketRewriter1_17 {
@Redirect(method = "register", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/protocols/protocol1_17to1_16_4/Protocol1_17To1_16_4;registerClientbound(Lcom/viaversion/viaversion/api/protocol/packet/ClientboundPacketType;Lcom/viaversion/viaversion/api/protocol/remapper/PacketHandler;)V"))
private static void handleClassicWorldHeight(Protocol1_17To1_16_4 instance, ClientboundPacketType packetType, PacketHandler packetHandler) {
if (packetType == ClientboundPackets1_16_2.CHUNK_DATA) packetHandler = WorldHeightSupport.handleChunkData(packetHandler);
if (packetType == ClientboundPackets1_16_2.UPDATE_LIGHT) packetHandler = WorldHeightSupport.handleUpdateLight(packetHandler);
@Redirect(method = "register", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/protocols/v1_16_4to1_17/Protocol1_16_4To1_17;registerClientbound(Lcom/viaversion/viaversion/api/protocol/packet/ClientboundPacketType;Lcom/viaversion/viaversion/api/protocol/remapper/PacketHandler;)V"))
private static void handleClassicWorldHeight(Protocol1_16_4To1_17 instance, ClientboundPacketType packetType, PacketHandler packetHandler) {
if (packetType == ClientboundPackets1_16_2.LEVEL_CHUNK) packetHandler = WorldHeightSupport.handleChunkData(packetHandler);
if (packetType == ClientboundPackets1_16_2.LIGHT_UPDATE) packetHandler = WorldHeightSupport.handleUpdateLight(packetHandler);
((Protocol) instance).registerClientbound(packetType, packetHandler);
}

View File

@ -20,11 +20,11 @@
package de.florianmichael.viafabricplus.injection.mixin.fixes.viaversion;
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.ClientboundPackets1_18;
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 com.viaversion.viaversion.api.type.Types;
import com.viaversion.viaversion.protocols.v1_17_1to1_18.packet.ClientboundPackets1_18;
import com.viaversion.viaversion.protocols.v1_18_2to1_19.Protocol1_18_2To1_19;
import com.viaversion.viaversion.protocols.v1_18_2to1_19.packet.ClientboundPackets1_19;
import com.viaversion.viaversion.protocols.v1_18_2to1_19.rewriter.WorldPacketRewriter1_19;
import de.florianmichael.viafabricplus.fixes.ClientsideFixes;
import de.florianmichael.viafabricplus.injection.access.IClientPlayerInteractionManager;
import de.florianmichael.viafabricplus.protocoltranslator.translator.BlockStateTranslator;
@ -36,12 +36,12 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(value = WorldPackets.class, remap = false)
public abstract class MixinWorldPackets1_19 {
@Mixin(value = WorldPacketRewriter1_19.class, remap = false)
public abstract class MixinWorldPacketRewriter1_19 {
@Redirect(method = "register", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/protocols/protocol1_19to1_18_2/Protocol1_19To1_18_2;cancelClientbound(Lcom/viaversion/viaversion/api/protocol/packet/ClientboundPacketType;)V"))
private static void handleLegacyAcknowledgePlayerDigging(Protocol1_19To1_18_2 instance, ClientboundPacketType clientboundPacketType) {
instance.registerClientbound(ClientboundPackets1_18.ACKNOWLEDGE_PLAYER_DIGGING, ClientboundPackets1_19.PLUGIN_MESSAGE, wrapper -> {
@Redirect(method = "register", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/protocols/v1_18_2to1_19/Protocol1_18_2To1_19;cancelClientbound(Lcom/viaversion/viaversion/api/protocol/packet/ClientboundPacketType;)V"))
private static void handleLegacyAcknowledgePlayerDigging(Protocol1_18_2To1_19 instance, ClientboundPacketType clientboundPacketType) {
instance.registerClientbound(ClientboundPackets1_18.BLOCK_BREAK_ACK, ClientboundPackets1_19.CUSTOM_PAYLOAD, wrapper -> {
wrapper.resetReader();
final String uuid = ClientsideFixes.executeSyncTask(data -> {
@ -57,8 +57,8 @@ public abstract class MixinWorldPackets1_19 {
throw new RuntimeException("Failed to handle BlockBreakAck packet data", t);
}
});
wrapper.write(Type.STRING, ClientsideFixes.PACKET_SYNC_IDENTIFIER);
wrapper.write(Type.STRING, uuid);
wrapper.write(Types.STRING, ClientsideFixes.PACKET_SYNC_IDENTIFIER);
wrapper.write(Types.STRING, uuid);
});
}

View File

@ -33,7 +33,7 @@ import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viaversion.api.protocol.version.VersionType;
import com.viaversion.viaversion.connection.UserConnectionImpl;
import com.viaversion.viaversion.protocol.ProtocolPipelineImpl;
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.Protocol1_20_5To1_20_3;
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.Protocol1_20_3To1_20_5;
import de.florianmichael.viafabricplus.event.ChangeProtocolVersionCallback;
import de.florianmichael.viafabricplus.fixes.VFPProtocol;
import de.florianmichael.viafabricplus.injection.access.IClientConnection;
@ -321,7 +321,7 @@ public class ProtocolTranslator {
ViaAprilFoolsPlatformImpl::new,
ViaBedrockPlatformImpl::new
);
Protocol1_20_5To1_20_3.strictErrorHandling = false;
Protocol1_20_3To1_20_5.strictErrorHandling = false;
ProtocolVersion.register(AUTO_DETECT_PROTOCOL);
VFPProtocol.INSTANCE.initialize();
});

View File

@ -25,16 +25,16 @@ import com.viaversion.viaversion.api.connection.UserConnection;
import de.florianmichael.viafabricplus.protocoltranslator.ProtocolTranslator;
import de.florianmichael.viafabricplus.util.ChatUtil;
public abstract class VFPViaSubCommand extends ViaSubCommand {
public interface VFPViaSubCommand extends ViaSubCommand {
/**
* Automatically prefix all messages
*/
public void sendMessage(final ViaCommandSender sender, final String message) {
ViaSubCommand.sendMessage(sender, ChatUtil.PREFIX + " " + message);
default void sendMessage(final ViaCommandSender sender, final String message) {
ViaSubCommand.super.sendMessage(sender, ChatUtil.PREFIX + " " + message);
}
public UserConnection getUser() {
default UserConnection getUser() {
return ProtocolTranslator.getPlayNetworkUserConnection();
}

View File

@ -38,7 +38,7 @@ public class ViaFabricPlusViaVersionPlatformImpl extends ViaVersionPlatformImpl
@Override
protected AbstractViaConfig createConfig() {
return new ViaFabricPlusVLViaConfig(new File(this.getDataFolder(), "viaversion.yml"));
return new ViaFabricPlusVLViaConfig(new File(this.getDataFolder(), "viaversion.yml"), this.getLogger());
}
@Override

View File

@ -20,7 +20,7 @@
package de.florianmichael.viafabricplus.protocoltranslator.impl.provider.viaversion;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.provider.AckSequenceProvider;
import com.viaversion.viaversion.protocols.v1_18_2to1_19.provider.AckSequenceProvider;
public class ViaFabricPlusAckSequenceProvider extends AckSequenceProvider {

View File

@ -21,7 +21,7 @@ package de.florianmichael.viafabricplus.protocoltranslator.impl.provider.viavers
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viaversion.protocols.base.BaseVersionProvider;
import com.viaversion.viaversion.protocol.version.BaseVersionProvider;
import de.florianmichael.viafabricplus.protocoltranslator.ProtocolTranslator;
public class ViaFabricPlusBaseVersionProvider extends BaseVersionProvider {

View File

@ -22,7 +22,7 @@ package de.florianmichael.viafabricplus.protocoltranslator.impl.provider.viavers
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viaversion.protocols.protocol1_9to1_8.providers.HandItemProvider;
import com.viaversion.viaversion.protocols.v1_8to1_9.provider.HandItemProvider;
import de.florianmichael.viafabricplus.protocoltranslator.translator.ItemTranslator;
import net.minecraft.item.ItemStack;

View File

@ -20,7 +20,7 @@
package de.florianmichael.viafabricplus.protocoltranslator.impl.provider.viaversion;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.provider.PlayerAbilitiesProvider;
import com.viaversion.viaversion.protocols.v1_15_2to1_16.provider.PlayerAbilitiesProvider;
import net.minecraft.client.MinecraftClient;
public class ViaFabricPlusPlayerAbilitiesProvider extends PlayerAbilitiesProvider {

View File

@ -21,7 +21,7 @@ package de.florianmichael.viafabricplus.protocoltranslator.impl.provider.viavers
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.Position;
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.providers.PlayerLookTargetProvider;
import com.viaversion.viaversion.protocols.v1_12_2to1_13.provider.PlayerLookTargetProvider;
import net.minecraft.client.MinecraftClient;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;

View File

@ -23,10 +23,10 @@ import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.minecraft.signature.SignableCommandArgumentsProvider;
import com.viaversion.viaversion.api.platform.providers.ViaProviders;
import com.viaversion.viaversion.api.protocol.version.VersionProvider;
import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.providers.PlayerLookTargetProvider;
import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.provider.PlayerAbilitiesProvider;
import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.provider.AckSequenceProvider;
import com.viaversion.viaversion.protocols.protocol1_9to1_8.providers.HandItemProvider;
import com.viaversion.viaversion.protocols.v1_12_2to1_13.provider.PlayerLookTargetProvider;
import com.viaversion.viaversion.protocols.v1_15_2to1_16.provider.PlayerAbilitiesProvider;
import com.viaversion.viaversion.protocols.v1_18_2to1_19.provider.AckSequenceProvider;
import com.viaversion.viaversion.protocols.v1_8to1_9.provider.HandItemProvider;
import de.florianmichael.viafabricplus.event.PostViaVersionLoadCallback;
import de.florianmichael.viafabricplus.protocoltranslator.impl.provider.viabedrock.ViaFabricPlusNettyPipelineProvider;
import de.florianmichael.viafabricplus.protocoltranslator.impl.provider.vialegacy.*;

View File

@ -22,11 +22,12 @@ package de.florianmichael.viafabricplus.protocoltranslator.impl.viaversion;
import net.raphimc.vialoader.impl.viaversion.VLViaConfig;
import java.io.File;
import java.util.logging.Logger;
public class ViaFabricPlusVLViaConfig extends VLViaConfig {
public ViaFabricPlusVLViaConfig(File configFile) {
super(configFile);
public ViaFabricPlusVLViaConfig(File configFile, Logger logger) {
super(configFile, logger);
UNSUPPORTED.add("simulate-pt");
}

View File

@ -25,8 +25,8 @@ import com.viaversion.viaversion.api.protocol.packet.Direction;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.packet.State;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.ClientboundPackets1_18;
import com.viaversion.viaversion.api.type.Types;
import com.viaversion.viaversion.protocols.v1_17_1to1_18.packet.ClientboundPackets1_18;
import de.florianmichael.viafabricplus.ViaFabricPlus;
import de.florianmichael.viafabricplus.protocoltranslator.ProtocolTranslator;
import net.minecraft.block.Block;
@ -45,18 +45,18 @@ public class BlockStateTranslator {
*/
public static BlockState via1_18_2toMc(final int blockStateId) {
try {
final PacketWrapper wrapper = PacketWrapper.create(ClientboundPackets1_18.EFFECT, DUMMY_USER_CONNECTION);
wrapper.write(Type.INT, 2001); // eventId
wrapper.write(Type.POSITION1_14, new Position(0, 0, 0)); // position
wrapper.write(Type.INT, blockStateId); // data
wrapper.write(Type.BOOLEAN, false); // global
final PacketWrapper wrapper = PacketWrapper.create(ClientboundPackets1_18.LEVEL_EVENT, DUMMY_USER_CONNECTION);
wrapper.write(Types.INT, 2001); // eventId
wrapper.write(Types.BLOCK_POSITION1_14, new Position(0, 0, 0)); // position
wrapper.write(Types.INT, blockStateId); // data
wrapper.write(Types.BOOLEAN, false); // global
wrapper.resetReader();
wrapper.user().getProtocolInfo().getPipeline().transform(Direction.CLIENTBOUND, State.PLAY, wrapper);
wrapper.read(Type.INT); // eventId
wrapper.read(Type.POSITION1_14); // position
return Block.getStateFromRawId(wrapper.read(Type.INT)); // data
wrapper.read(Types.INT); // eventId
wrapper.read(Types.BLOCK_POSITION1_14); // position
return Block.getStateFromRawId(wrapper.read(Types.INT)); // data
} catch (Throwable t) {
ViaFabricPlus.global().getLogger().error("Error converting ViaVersion 1.18.2 block state to native block state", t);
return Blocks.AIR.getDefaultState();

View File

@ -26,6 +26,7 @@ import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.packet.State;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.Types;
import com.viaversion.viaversion.api.type.types.version.Types1_20_5;
import de.florianmichael.viafabricplus.ViaFabricPlus;
import de.florianmichael.viafabricplus.fixes.VFPProtocol;
@ -62,7 +63,7 @@ public class ItemTranslator {
final PacketWrapper wrapper = PacketWrapper.create(VFPProtocol.getCreativeInventoryActionPacket(), buf, user);
user.getProtocolInfo().getPipeline().transform(Direction.SERVERBOUND, State.PLAY, wrapper);
wrapper.read(Type.SHORT); // slot
wrapper.read(Types.SHORT); // slot
return wrapper.read(getItemType(targetVersion)); // item
} catch (Throwable t) {
ViaFabricPlus.global().getLogger().error("Error converting native item stack to ViaVersion {} item stack", targetVersion, t);
@ -80,13 +81,13 @@ public class ItemTranslator {
if (targetVersion.olderThanOrEqualTo(LegacyProtocolVersion.b1_8tob1_8_1)) {
return Typesb1_8_0_1.CREATIVE_ITEM;
} else if (targetVersion.olderThan(ProtocolVersion.v1_13)) {
return Type.ITEM1_8;
return Types.ITEM1_8;
} else if (targetVersion.olderThan(ProtocolVersion.v1_13_2)) {
return Type.ITEM1_13;
return Types.ITEM1_13;
} else if (targetVersion.olderThanOrEqualTo(ProtocolVersion.v1_20_2)) {
return Type.ITEM1_13_2;
return Types.ITEM1_13_2;
} else if (targetVersion.olderThanOrEqualTo(ProtocolVersion.v1_20_3)) {
return Type.ITEM1_20_2;
return Types.ITEM1_20_2;
} else {
return Types1_20_5.ITEM;
}
@ -100,17 +101,17 @@ public class ItemTranslator {
*/
public static ItemStack viaB1_8toMc(final Item item) {
try {
final PacketWrapper wrapper = PacketWrapper.create(ClientboundPacketsb1_8.SET_SLOT, VIA_B1_8_TO_MC_USER_CONNECTION);
wrapper.write(Type.BYTE, (byte) 0); // window id
wrapper.write(Type.SHORT, (short) 0); // slot
final PacketWrapper wrapper = PacketWrapper.create(ClientboundPacketsb1_8.CONTAINER_SET_SLOT, VIA_B1_8_TO_MC_USER_CONNECTION);
wrapper.write(Types.BYTE, (byte) 0); // window id
wrapper.write(Types.SHORT, (short) 0); // slot
wrapper.write(Types1_4_2.NBTLESS_ITEM, item); // item
wrapper.resetReader();
wrapper.user().getProtocolInfo().getPipeline().transform(Direction.CLIENTBOUND, State.PLAY, wrapper);
wrapper.read(Type.UNSIGNED_BYTE); // sync id
wrapper.read(Type.VAR_INT); // revision
wrapper.read(Type.SHORT); // slot
wrapper.read(Types.UNSIGNED_BYTE); // sync id
wrapper.read(Types.VAR_INT); // revision
wrapper.read(Types.SHORT); // slot
final Item viaItem = wrapper.read(getItemType(ProtocolTranslator.NATIVE_VERSION)); // item
final ItemStack mcItem = new ItemStack(Registries.ITEM.get(viaItem.identifier()));
mcItem.setCount(viaItem.amount());

View File

@ -25,9 +25,10 @@ import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.packet.State;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.Types;
import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag;
import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.ClientboundPackets1_14;
import com.viaversion.viaversion.protocols.v1_13_2to1_14.packet.ClientboundPackets1_14;
import com.viaversion.nbt.tag.Tag;
import de.florianmichael.viafabricplus.ViaFabricPlus;
import de.florianmichael.viafabricplus.protocoltranslator.ProtocolTranslator;
@ -43,17 +44,17 @@ public class TextComponentTranslator {
*/
public static Tag via1_14toViaLatest(final JsonElement component) {
try {
final PacketWrapper wrapper = PacketWrapper.create(ClientboundPackets1_14.OPEN_WINDOW, DUMMY_USER_CONNECTION);
wrapper.write(Type.VAR_INT, 1); // window id
wrapper.write(Type.VAR_INT, 0); // type id
wrapper.write(Type.COMPONENT, component); // title
final PacketWrapper wrapper = PacketWrapper.create(ClientboundPackets1_14.OPEN_SCREEN, DUMMY_USER_CONNECTION);
wrapper.write(Types.VAR_INT, 1); // window id
wrapper.write(Types.VAR_INT, 0); // type id
wrapper.write(Types.COMPONENT, component); // title
wrapper.resetReader();
wrapper.user().getProtocolInfo().getPipeline().transform(Direction.CLIENTBOUND, State.PLAY, wrapper);
wrapper.read(Type.VAR_INT); // window id
wrapper.read(Type.VAR_INT); // type id
return wrapper.read(Type.TAG); // title
wrapper.read(Types.VAR_INT); // window id
wrapper.read(Types.VAR_INT); // type id
return wrapper.read(Types.TAG); // title
} catch (Throwable t) {
ViaFabricPlus.global().getLogger().error("Error converting ViaVersion 1.14 text component to native text component", t);
return null;

View File

@ -167,36 +167,35 @@
"fixes.viaversion.MixinBlockItemPacketRewriter1_20_5",
"fixes.viaversion.MixinCommandBlockProvider",
"fixes.viaversion.MixinCommonBoss",
"fixes.viaversion.MixinEntityIdRewriter",
"fixes.viaversion.MixinEntityMappings1_11",
"fixes.viaversion.MixinEntityPacketRewriter1_20_3",
"fixes.viaversion.MixinEntityPacketRewriter1_20_5",
"fixes.viaversion.MixinEntityPackets1_17",
"fixes.viaversion.MixinEntityPackets1_19_4",
"fixes.viaversion.MixinEntityPacketRewriter1_17",
"fixes.viaversion.MixinEntityPacketRewriter1_19_4",
"fixes.viaversion.MixinEntityTracker1_9",
"fixes.viaversion.MixinInventoryAcknowledgements",
"fixes.viaversion.MixinInventoryPackets",
"fixes.viaversion.MixinInventoryPackets1_13",
"fixes.viaversion.MixinInventoryPackets1_17",
"fixes.viaversion.MixinItemPacketRewriter1_14",
"fixes.viaversion.MixinItemPacketRewriter1_17",
"fixes.viaversion.MixinInventoryTracker1_16",
"fixes.viaversion.MixinItemRewriter",
"fixes.viaversion.MixinItemPacketRewriter1_9",
"fixes.viaversion.MixinMappingDataBase",
"fixes.viaversion.MixinMetadataRewriter1_15To1_14_4",
"fixes.viaversion.MixinMetadataRewriter1_9To1_8",
"fixes.viaversion.MixinEntityPacketRewriter1_15",
"fixes.viaversion.MixinEntityPacketRewriter1_9",
"fixes.viaversion.MixinNamedCompoundTagType",
"fixes.viaversion.MixinParticleRewriter",
"fixes.viaversion.MixinProtocol1_11To1_10",
"fixes.viaversion.MixinProtocol1_12To1_11_1",
"fixes.viaversion.MixinProtocol1_20_2To1_20",
"fixes.viaversion.MixinParticleIdMappings1_13",
"fixes.viaversion.MixinProtocol1_10To1_11",
"fixes.viaversion.MixinProtocol1_11_1To1_12",
"fixes.viaversion.MixinProtocol1_20To1_20_2",
"fixes.viaversion.MixinTagType",
"fixes.viaversion.MixinUserConnectionImpl",
"fixes.viaversion.MixinWorldPackets1_16_2",
"fixes.viaversion.MixinWorldPackets1_17",
"fixes.viaversion.MixinWorldPackets1_19",
"fixes.viaversion.MixinWorldPacketRewriter1_16_2",
"fixes.viaversion.MixinWorldPacketRewriter1_17",
"fixes.viaversion.MixinWorldPacketRewriter1_19",
"viabedrock.MixinBedrockProtocol",
"viabedrock.MixinJoinPackets",
"vialegacy.MixinExtensionProtocolMetadataStorage",
"vialegacy.MixinViaLegacyConfig",
"fixes.viaversion.MixinItemRewriter"
"fixes.viaversion.MixinItemPacketRewriter1_9"
],
"injectors": {
"defaultRequire": 1