Mirror von
https://github.com/ViaVersion/ViaBackwards.git
synchronisiert 2024-12-26 16:12:43 +01:00
WIP 24w33a
Dieser Commit ist enthalten in:
Ursprung
752c5fc48b
Commit
5cd34e6fa8
@ -54,6 +54,7 @@ import com.viaversion.viabackwards.protocol.v1_19_1to1_19.Protocol1_19_1To1_19;
|
|||||||
import com.viaversion.viabackwards.protocol.v1_20_3to1_20_2.Protocol1_20_3To1_20_2;
|
import com.viaversion.viabackwards.protocol.v1_20_3to1_20_2.Protocol1_20_3To1_20_2;
|
||||||
import com.viaversion.viabackwards.protocol.v1_20_5to1_20_3.Protocol1_20_5To1_20_3;
|
import com.viaversion.viabackwards.protocol.v1_20_5to1_20_3.Protocol1_20_5To1_20_3;
|
||||||
import com.viaversion.viabackwards.protocol.v1_20_2to1_20.Protocol1_20_2To1_20;
|
import com.viaversion.viabackwards.protocol.v1_20_2to1_20.Protocol1_20_2To1_20;
|
||||||
|
import com.viaversion.viabackwards.protocol.v1_21_2to1_21.Protocol1_21_2To1_21;
|
||||||
import com.viaversion.viabackwards.protocol.v1_21to1_20_5.Protocol1_21To1_20_5;
|
import com.viaversion.viabackwards.protocol.v1_21to1_20_5.Protocol1_21To1_20_5;
|
||||||
import com.viaversion.viabackwards.protocol.v1_9_3to1_9_1.Protocol1_9_3To1_9_1;
|
import com.viaversion.viabackwards.protocol.v1_9_3to1_9_1.Protocol1_9_3To1_9_1;
|
||||||
import com.viaversion.viabackwards.protocol.v1_10to1_9_3.Protocol1_10To1_9_3;
|
import com.viaversion.viabackwards.protocol.v1_10to1_9_3.Protocol1_10To1_9_3;
|
||||||
@ -141,6 +142,7 @@ public interface ViaBackwardsPlatform {
|
|||||||
protocolManager.registerProtocol(new Protocol1_20_5To1_20_3(), ProtocolVersion.v1_20_3, ProtocolVersion.v1_20_5);
|
protocolManager.registerProtocol(new Protocol1_20_5To1_20_3(), ProtocolVersion.v1_20_3, ProtocolVersion.v1_20_5);
|
||||||
|
|
||||||
protocolManager.registerProtocol(new Protocol1_21To1_20_5(), ProtocolVersion.v1_20_5, ProtocolVersion.v1_21);
|
protocolManager.registerProtocol(new Protocol1_21To1_20_5(), ProtocolVersion.v1_20_5, ProtocolVersion.v1_21);
|
||||||
|
protocolManager.registerProtocol(new Protocol1_21_2To1_21(), ProtocolVersion.v1_21, ProtocolVersion.v1_21_2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -20,11 +20,11 @@ package com.viaversion.viabackwards.protocol.template;
|
|||||||
import com.viaversion.viabackwards.api.rewriters.BackwardsStructuredItemRewriter;
|
import com.viaversion.viabackwards.api.rewriters.BackwardsStructuredItemRewriter;
|
||||||
import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_20_2;
|
import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_20_2;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_21;
|
import com.viaversion.viaversion.api.type.types.version.Types1_21;
|
||||||
import com.viaversion.viaversion.protocols.v1_20_2to1_20_3.rewriter.RecipeRewriter1_20_3;
|
|
||||||
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ServerboundPacket1_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.packet.ServerboundPackets1_20_5;
|
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ServerboundPackets1_20_5;
|
||||||
import com.viaversion.viaversion.protocols.v1_20_5to1_21.packet.ClientboundPacket1_21;
|
import com.viaversion.viaversion.protocols.v1_20_5to1_21.packet.ClientboundPacket1_21;
|
||||||
import com.viaversion.viaversion.protocols.v1_20_5to1_21.packet.ClientboundPackets1_21;
|
import com.viaversion.viaversion.protocols.v1_20_5to1_21.packet.ClientboundPackets1_21;
|
||||||
|
import com.viaversion.viaversion.protocols.v1_21to1_21_2.rewriter.RecipeRewriter1_21_2;
|
||||||
import com.viaversion.viaversion.rewriter.BlockRewriter;
|
import com.viaversion.viaversion.rewriter.BlockRewriter;
|
||||||
|
|
||||||
// To replace if needed:
|
// To replace if needed:
|
||||||
@ -52,19 +52,19 @@ final class BlockItemPacketRewriter1_99 extends BackwardsStructuredItemRewriter<
|
|||||||
blockRewriter.registerLevelChunk1_19(ClientboundPackets1_21.LEVEL_CHUNK_WITH_LIGHT, ChunkType1_20_2::new);
|
blockRewriter.registerLevelChunk1_19(ClientboundPackets1_21.LEVEL_CHUNK_WITH_LIGHT, ChunkType1_20_2::new);
|
||||||
blockRewriter.registerBlockEntityData(ClientboundPackets1_21.BLOCK_ENTITY_DATA);
|
blockRewriter.registerBlockEntityData(ClientboundPackets1_21.BLOCK_ENTITY_DATA);
|
||||||
|
|
||||||
// registerOpenWindow(ClientboundPackets1_21.OPEN_WINDOW);
|
// registerOpenScreen(ClientboundPackets1_21.OPEN_SCREEN);
|
||||||
registerCooldown(ClientboundPackets1_21.COOLDOWN);
|
registerCooldown(ClientboundPackets1_21.COOLDOWN);
|
||||||
registerSetContent1_17_1(ClientboundPackets1_21.CONTAINER_SET_CONTENT);
|
registerSetContent1_21_2(ClientboundPackets1_21.CONTAINER_SET_CONTENT);
|
||||||
registerSetSlot1_17_1(ClientboundPackets1_21.CONTAINER_SET_SLOT);
|
registerSetSlot1_21_2(ClientboundPackets1_21.CONTAINER_SET_SLOT);
|
||||||
registerAdvancements1_20_3(ClientboundPackets1_21.UPDATE_ADVANCEMENTS);
|
registerAdvancements1_20_3(ClientboundPackets1_21.UPDATE_ADVANCEMENTS);
|
||||||
registerSetEquipment(ClientboundPackets1_21.SET_EQUIPMENT);
|
registerSetEquipment(ClientboundPackets1_21.SET_EQUIPMENT);
|
||||||
registerContainerClick1_17_1(ServerboundPackets1_20_5.CONTAINER_CLICK);
|
registerContainerClick1_21_2(ServerboundPackets1_20_5.CONTAINER_CLICK);
|
||||||
registerMerchantOffers1_20_5(ClientboundPackets1_21.MERCHANT_OFFERS);
|
registerMerchantOffers1_20_5(ClientboundPackets1_21.MERCHANT_OFFERS);
|
||||||
registerSetCreativeModeSlot(ServerboundPackets1_20_5.SET_CREATIVE_MODE_SLOT);
|
registerSetCreativeModeSlot(ServerboundPackets1_20_5.SET_CREATIVE_MODE_SLOT);
|
||||||
registerContainerSetData(ClientboundPackets1_21.CONTAINER_SET_DATA);
|
registerContainerSetData(ClientboundPackets1_21.CONTAINER_SET_DATA);
|
||||||
registerLevelParticles1_20_5(ClientboundPackets1_21.LEVEL_PARTICLES);
|
registerLevelParticles1_20_5(ClientboundPackets1_21.LEVEL_PARTICLES);
|
||||||
registerExplosion(ClientboundPackets1_21.EXPLODE);
|
registerExplosion1_21_2(ClientboundPackets1_21.EXPLODE);
|
||||||
|
|
||||||
new RecipeRewriter1_20_3<>(protocol).register1_20_5(ClientboundPackets1_21.UPDATE_RECIPES);
|
new RecipeRewriter1_21_2<>(protocol).register1_20_5(ClientboundPackets1_21.UPDATE_RECIPES);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -66,6 +66,7 @@ final class EntityPacketRewriter1_99 extends EntityRewriter<ClientboundPacket1_2
|
|||||||
map(Types.VAR_INT); // Dimension key
|
map(Types.VAR_INT); // Dimension key
|
||||||
map(Types.STRING); // World
|
map(Types.STRING); // World
|
||||||
handler(worldDataTrackerHandlerByKey1_20_5(3)); // Tracks world height and name for chunk data and entity (un)tracking
|
handler(worldDataTrackerHandlerByKey1_20_5(3)); // Tracks world height and name for chunk data and entity (un)tracking
|
||||||
|
handler(playerTrackerHandler());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -74,10 +74,10 @@ final class Protocol1_98To1_99 extends BackwardsProtocol<ClientboundPacket1_21,
|
|||||||
soundRewriter.registerStopSound(ClientboundPackets1_21.STOP_SOUND);
|
soundRewriter.registerStopSound(ClientboundPackets1_21.STOP_SOUND);
|
||||||
|
|
||||||
new StatisticsRewriter<>(this).register(ClientboundPackets1_21.AWARD_STATS);
|
new StatisticsRewriter<>(this).register(ClientboundPackets1_21.AWARD_STATS);
|
||||||
//new AttributeRewriter<>(this).register1_21(ClientboundPackets1_21.ENTITY_PROPERTIES);
|
//new AttributeRewriter<>(this).register1_21(ClientboundPackets1_21.UPDATE_ATTRIBUTES);
|
||||||
|
|
||||||
// Registers translatable mappings (missing a whole bunch still)
|
// Registers translatable mappings (missing a whole bunch still)
|
||||||
//translatableRewriter.registerOpenWindow(ClientboundPackets1_21.OPEN_WINDOW); // Handled by registerOpenWindow in item rewriters
|
//translatableRewriter.registerOpenScreen(ClientboundPackets1_21.OPEN_SCREEN); // Handled by registerOpenScreen in item rewriters
|
||||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21.SET_ACTION_BAR_TEXT);
|
translatableRewriter.registerComponentPacket(ClientboundPackets1_21.SET_ACTION_BAR_TEXT);
|
||||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21.SET_TITLE_TEXT);
|
translatableRewriter.registerComponentPacket(ClientboundPackets1_21.SET_TITLE_TEXT);
|
||||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21.SET_SUBTITLE_TEXT);
|
translatableRewriter.registerComponentPacket(ClientboundPackets1_21.SET_SUBTITLE_TEXT);
|
||||||
|
@ -0,0 +1,146 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
|
||||||
|
* Copyright (C) 2016-2024 ViaVersion and contributors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.viaversion.viabackwards.protocol.v1_21_2to1_21;
|
||||||
|
|
||||||
|
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||||
|
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
|
||||||
|
import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
|
||||||
|
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||||
|
import com.viaversion.viabackwards.protocol.v1_21_2to1_21.rewriter.BlockItemPacketRewriter1_21_2;
|
||||||
|
import com.viaversion.viabackwards.protocol.v1_21_2to1_21.rewriter.EntityPacketRewriter1_21_2;
|
||||||
|
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||||
|
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_20_5;
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.provider.PacketTypesProvider;
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.provider.SimplePacketTypesProvider;
|
||||||
|
import com.viaversion.viaversion.api.type.Types;
|
||||||
|
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||||
|
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ServerboundConfigurationPackets1_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.packet.ServerboundPackets1_20_5;
|
||||||
|
import com.viaversion.viaversion.protocols.v1_20_5to1_21.packet.ClientboundConfigurationPackets1_21;
|
||||||
|
import com.viaversion.viaversion.protocols.v1_20_5to1_21.packet.ClientboundPacket1_21;
|
||||||
|
import com.viaversion.viaversion.protocols.v1_21to1_21_2.Protocol1_21To1_21_2;
|
||||||
|
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPacket1_21_2;
|
||||||
|
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPackets1_21_2;
|
||||||
|
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ServerboundPacket1_21_2;
|
||||||
|
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ServerboundPackets1_21_2;
|
||||||
|
import com.viaversion.viaversion.rewriter.AttributeRewriter;
|
||||||
|
import com.viaversion.viaversion.rewriter.ComponentRewriter.ReadType;
|
||||||
|
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
||||||
|
import com.viaversion.viaversion.rewriter.TagRewriter;
|
||||||
|
|
||||||
|
import static com.viaversion.viaversion.util.ProtocolUtil.packetTypeMap;
|
||||||
|
|
||||||
|
public final class Protocol1_21_2To1_21 extends BackwardsProtocol<ClientboundPacket1_21_2, ClientboundPacket1_21, ServerboundPacket1_21_2, ServerboundPacket1_20_5> {
|
||||||
|
|
||||||
|
public static final BackwardsMappingData MAPPINGS = new BackwardsMappingData("1.21.2", "1.21", Protocol1_21To1_21_2.class);
|
||||||
|
private final EntityPacketRewriter1_21_2 entityRewriter = new EntityPacketRewriter1_21_2(this);
|
||||||
|
private final BlockItemPacketRewriter1_21_2 itemRewriter = new BlockItemPacketRewriter1_21_2(this);
|
||||||
|
private final TranslatableRewriter<ClientboundPacket1_21_2> translatableRewriter = new TranslatableRewriter<>(this, ReadType.NBT);
|
||||||
|
private final TagRewriter<ClientboundPacket1_21_2> tagRewriter = new TagRewriter<>(this);
|
||||||
|
|
||||||
|
public Protocol1_21_2To1_21() {
|
||||||
|
super(ClientboundPacket1_21_2.class, ClientboundPacket1_21.class, ServerboundPacket1_21_2.class, ServerboundPacket1_20_5.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void registerPackets() {
|
||||||
|
super.registerPackets();
|
||||||
|
|
||||||
|
tagRewriter.registerGeneric(ClientboundPackets1_21_2.UPDATE_TAGS);
|
||||||
|
tagRewriter.registerGeneric(ClientboundConfigurationPackets1_21.UPDATE_TAGS);
|
||||||
|
|
||||||
|
final SoundRewriter<ClientboundPacket1_21_2> soundRewriter = new SoundRewriter<>(this);
|
||||||
|
soundRewriter.registerSound1_19_3(ClientboundPackets1_21_2.SOUND);
|
||||||
|
soundRewriter.registerSound1_19_3(ClientboundPackets1_21_2.SOUND_ENTITY);
|
||||||
|
soundRewriter.registerStopSound(ClientboundPackets1_21_2.STOP_SOUND);
|
||||||
|
|
||||||
|
new StatisticsRewriter<>(this).register(ClientboundPackets1_21_2.AWARD_STATS);
|
||||||
|
new AttributeRewriter<>(this).register1_21(ClientboundPackets1_21_2.UPDATE_ATTRIBUTES);
|
||||||
|
|
||||||
|
translatableRewriter.registerOpenScreen(ClientboundPackets1_21_2.OPEN_SCREEN);
|
||||||
|
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_2.SET_ACTION_BAR_TEXT);
|
||||||
|
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_2.SET_TITLE_TEXT);
|
||||||
|
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_2.SET_SUBTITLE_TEXT);
|
||||||
|
translatableRewriter.registerBossEvent(ClientboundPackets1_21_2.BOSS_EVENT);
|
||||||
|
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_2.DISCONNECT);
|
||||||
|
translatableRewriter.registerTabList(ClientboundPackets1_21_2.TAB_LIST);
|
||||||
|
translatableRewriter.registerPlayerCombatKill1_20(ClientboundPackets1_21_2.PLAYER_COMBAT_KILL);
|
||||||
|
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_2.SYSTEM_CHAT);
|
||||||
|
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_2.DISGUISED_CHAT);
|
||||||
|
translatableRewriter.registerPing();
|
||||||
|
|
||||||
|
registerServerbound(ServerboundPackets1_20_5.CLIENT_INFORMATION, this::clientInformation);
|
||||||
|
registerServerbound(ServerboundConfigurationPackets1_20_5.CLIENT_INFORMATION, this::clientInformation);
|
||||||
|
|
||||||
|
cancelClientbound(ClientboundPackets1_21_2.MOVE_MINECART_ALONG_TRACK); // TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
private void clientInformation(final PacketWrapper wrapper) {
|
||||||
|
wrapper.passthrough(Types.STRING); // Locale
|
||||||
|
wrapper.passthrough(Types.BYTE); // View distance
|
||||||
|
wrapper.passthrough(Types.VAR_INT); // Chat visibility
|
||||||
|
wrapper.passthrough(Types.BOOLEAN); // Chat colors
|
||||||
|
wrapper.passthrough(Types.BYTE); // Skin parts
|
||||||
|
wrapper.passthrough(Types.VAR_INT); // Main hand
|
||||||
|
wrapper.passthrough(Types.BOOLEAN); // Text filtering enabled
|
||||||
|
wrapper.passthrough(Types.BOOLEAN); // Allow listing
|
||||||
|
wrapper.write(Types.VAR_INT, 0); // Particle status, assume 'all'
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(final UserConnection user) {
|
||||||
|
addEntityTracker(user, new EntityTrackerBase(user, EntityTypes1_20_5.PLAYER));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BackwardsMappingData getMappingData() {
|
||||||
|
return MAPPINGS;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EntityPacketRewriter1_21_2 getEntityRewriter() {
|
||||||
|
return entityRewriter;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockItemPacketRewriter1_21_2 getItemRewriter() {
|
||||||
|
return itemRewriter;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TranslatableRewriter<ClientboundPacket1_21_2> getComponentRewriter() {
|
||||||
|
return translatableRewriter;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TagRewriter<ClientboundPacket1_21_2> getTagRewriter() {
|
||||||
|
return tagRewriter;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected PacketTypesProvider<ClientboundPacket1_21_2, ClientboundPacket1_21, ServerboundPacket1_21_2, ServerboundPacket1_20_5> createPacketTypesProvider() {
|
||||||
|
return new SimplePacketTypesProvider<>(
|
||||||
|
packetTypeMap(unmappedClientboundPacketType, ClientboundPackets1_21_2.class, ClientboundConfigurationPackets1_21.class),
|
||||||
|
packetTypeMap(mappedClientboundPacketType, ClientboundPacket1_21.class, ClientboundConfigurationPackets1_21.class),
|
||||||
|
packetTypeMap(mappedServerboundPacketType, ServerboundPackets1_21_2.class, ServerboundConfigurationPackets1_20_5.class),
|
||||||
|
packetTypeMap(unmappedServerboundPacketType, ServerboundPackets1_20_5.class, ServerboundConfigurationPackets1_20_5.class)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,136 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
|
||||||
|
* Copyright (C) 2016-2024 ViaVersion and contributors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.viaversion.viabackwards.protocol.v1_21_2to1_21.rewriter;
|
||||||
|
|
||||||
|
import com.viaversion.viabackwards.api.rewriters.BackwardsStructuredItemRewriter;
|
||||||
|
import com.viaversion.viabackwards.protocol.v1_21_2to1_21.Protocol1_21_2To1_21;
|
||||||
|
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||||
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
|
import com.viaversion.viaversion.api.type.Types;
|
||||||
|
import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_20_2;
|
||||||
|
import com.viaversion.viaversion.api.type.types.version.Types1_21;
|
||||||
|
import com.viaversion.viaversion.api.type.types.version.Types1_21_2;
|
||||||
|
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ServerboundPacket1_20_5;
|
||||||
|
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ServerboundPackets1_20_5;
|
||||||
|
import com.viaversion.viaversion.protocols.v1_20_5to1_21.packet.ClientboundPackets1_21;
|
||||||
|
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPacket1_21_2;
|
||||||
|
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPackets1_21_2;
|
||||||
|
import com.viaversion.viaversion.rewriter.BlockRewriter;
|
||||||
|
|
||||||
|
import static com.viaversion.viaversion.protocols.v1_21to1_21_2.rewriter.BlockItemPacketRewriter1_21_2.downgradeItemData;
|
||||||
|
import static com.viaversion.viaversion.protocols.v1_21to1_21_2.rewriter.BlockItemPacketRewriter1_21_2.updateItemData;
|
||||||
|
|
||||||
|
public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItemRewriter<ClientboundPacket1_21_2, ServerboundPacket1_20_5, Protocol1_21_2To1_21> {
|
||||||
|
|
||||||
|
public BlockItemPacketRewriter1_21_2(final Protocol1_21_2To1_21 protocol) {
|
||||||
|
super(protocol,
|
||||||
|
Types1_21_2.ITEM, Types1_21_2.ITEM_ARRAY, Types1_21.ITEM, Types1_21.ITEM_ARRAY,
|
||||||
|
Types1_21_2.ITEM_COST, Types1_21_2.OPTIONAL_ITEM_COST, Types1_21.ITEM_COST, Types1_21.OPTIONAL_ITEM_COST,
|
||||||
|
Types1_21_2.PARTICLE, Types1_21.PARTICLE
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerPackets() {
|
||||||
|
final BlockRewriter<ClientboundPacket1_21_2> blockRewriter = BlockRewriter.for1_20_2(protocol);
|
||||||
|
blockRewriter.registerBlockEvent(ClientboundPackets1_21_2.BLOCK_EVENT);
|
||||||
|
blockRewriter.registerBlockUpdate(ClientboundPackets1_21_2.BLOCK_UPDATE);
|
||||||
|
blockRewriter.registerSectionBlocksUpdate1_20(ClientboundPackets1_21_2.SECTION_BLOCKS_UPDATE);
|
||||||
|
blockRewriter.registerLevelEvent1_21(ClientboundPackets1_21_2.LEVEL_EVENT, 2001);
|
||||||
|
blockRewriter.registerLevelChunk1_19(ClientboundPackets1_21_2.LEVEL_CHUNK_WITH_LIGHT, ChunkType1_20_2::new);
|
||||||
|
blockRewriter.registerBlockEntityData(ClientboundPackets1_21_2.BLOCK_ENTITY_DATA);
|
||||||
|
|
||||||
|
registerCooldown(ClientboundPackets1_21_2.COOLDOWN);
|
||||||
|
registerAdvancements1_20_3(ClientboundPackets1_21_2.UPDATE_ADVANCEMENTS);
|
||||||
|
registerSetEquipment(ClientboundPackets1_21_2.SET_EQUIPMENT);
|
||||||
|
registerMerchantOffers1_20_5(ClientboundPackets1_21_2.MERCHANT_OFFERS);
|
||||||
|
registerSetCreativeModeSlot(ServerboundPackets1_20_5.SET_CREATIVE_MODE_SLOT);
|
||||||
|
registerLevelParticles1_20_5(ClientboundPackets1_21_2.LEVEL_PARTICLES);
|
||||||
|
registerExplosion1_21_2(ClientboundPackets1_21_2.EXPLODE);
|
||||||
|
|
||||||
|
protocol.registerClientbound(ClientboundPackets1_21_2.CONTAINER_SET_CONTENT, wrapper -> {
|
||||||
|
updateContainerId(wrapper);
|
||||||
|
wrapper.passthrough(Types.VAR_INT); // State id
|
||||||
|
Item[] items = wrapper.read(itemArrayType());
|
||||||
|
wrapper.write(mappedItemArrayType(), items);
|
||||||
|
for (int i = 0; i < items.length; i++) {
|
||||||
|
items[i] = handleItemToClient(wrapper.user(), items[i]);
|
||||||
|
}
|
||||||
|
passthroughClientboundItem(wrapper);
|
||||||
|
});
|
||||||
|
protocol.registerClientbound(ClientboundPackets1_21_2.CONTAINER_SET_SLOT, wrapper -> {
|
||||||
|
updateContainerId(wrapper);
|
||||||
|
wrapper.passthrough(Types.VAR_INT); // State id
|
||||||
|
wrapper.passthrough(Types.SHORT); // Slot id
|
||||||
|
passthroughClientboundItem(wrapper);
|
||||||
|
});
|
||||||
|
protocol.registerClientbound(ClientboundPackets1_21_2.SET_HELD_SLOT, ClientboundPackets1_21.SET_CARRIED_ITEM);
|
||||||
|
protocol.registerClientbound(ClientboundPackets1_21_2.CONTAINER_CLOSE, this::updateContainerId);
|
||||||
|
protocol.registerClientbound(ClientboundPackets1_21_2.CONTAINER_SET_DATA, this::updateContainerId);
|
||||||
|
protocol.registerClientbound(ClientboundPackets1_21_2.HORSE_SCREEN_OPEN, this::updateContainerId);
|
||||||
|
protocol.registerClientbound(ClientboundPackets1_21_2.PLACE_GHOST_RECIPE, this::updateContainerId);
|
||||||
|
protocol.registerServerbound(ServerboundPackets1_20_5.CONTAINER_CLOSE, this::updateContainerIdServerbound);
|
||||||
|
protocol.registerServerbound(ServerboundPackets1_20_5.PLACE_RECIPE, this::updateContainerIdServerbound);
|
||||||
|
protocol.registerServerbound(ServerboundPackets1_20_5.CONTAINER_CLICK, wrapper -> {
|
||||||
|
updateContainerIdServerbound(wrapper);
|
||||||
|
wrapper.passthrough(Types.VAR_INT); // State id
|
||||||
|
wrapper.passthrough(Types.SHORT); // Slot
|
||||||
|
wrapper.passthrough(Types.BYTE); // Button
|
||||||
|
wrapper.passthrough(Types.VAR_INT); // Mode
|
||||||
|
final int length = wrapper.passthrough(Types.VAR_INT);
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
wrapper.passthrough(Types.SHORT); // Slot
|
||||||
|
passthroughServerboundItem(wrapper);
|
||||||
|
}
|
||||||
|
passthroughServerboundItem(wrapper);
|
||||||
|
});
|
||||||
|
|
||||||
|
protocol.registerClientbound(ClientboundPackets1_21_2.SET_PLAYER_INVENTORY, ClientboundPackets1_21.CONTAINER_SET_SLOT, wrapper -> {
|
||||||
|
wrapper.write(Types.BYTE, (byte) -2); // Player inventory
|
||||||
|
wrapper.write(Types.VAR_INT, 0); // 0 state id
|
||||||
|
final int slot = wrapper.read(Types.VAR_INT);
|
||||||
|
wrapper.write(Types.SHORT, (short) slot);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateContainerId(final PacketWrapper wrapper) {
|
||||||
|
final int containerId = wrapper.read(Types.VAR_INT);
|
||||||
|
wrapper.write(Types.UNSIGNED_BYTE, (short) containerId);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateContainerIdServerbound(final PacketWrapper wrapper) {
|
||||||
|
final short containerId = wrapper.read(Types.UNSIGNED_BYTE);
|
||||||
|
final int intId = (byte) containerId;
|
||||||
|
wrapper.write(Types.VAR_INT, intId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Item handleItemToClient(final UserConnection connection, final Item item) {
|
||||||
|
super.handleItemToClient(connection, item);
|
||||||
|
downgradeItemData(item);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Item handleItemToServer(final UserConnection connection, final Item item) {
|
||||||
|
super.handleItemToServer(connection, item);
|
||||||
|
updateItemData(item);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,150 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
|
||||||
|
* Copyright (C) 2016-2024 ViaVersion and contributors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.viaversion.viabackwards.protocol.v1_21_2to1_21.rewriter;
|
||||||
|
|
||||||
|
import com.viaversion.viabackwards.api.rewriters.EntityRewriter;
|
||||||
|
import com.viaversion.viabackwards.protocol.v1_21_2to1_21.Protocol1_21_2To1_21;
|
||||||
|
import com.viaversion.viaversion.api.minecraft.RegistryEntry;
|
||||||
|
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
||||||
|
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_20_5;
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
|
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||||
|
import com.viaversion.viaversion.api.type.Types;
|
||||||
|
import com.viaversion.viaversion.api.type.types.version.Types1_21;
|
||||||
|
import com.viaversion.viaversion.api.type.types.version.Types1_21_2;
|
||||||
|
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ServerboundPackets1_20_5;
|
||||||
|
import com.viaversion.viaversion.protocols.v1_20_5to1_21.packet.ClientboundConfigurationPackets1_21;
|
||||||
|
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPacket1_21_2;
|
||||||
|
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPackets1_21_2;
|
||||||
|
import com.viaversion.viaversion.util.Key;
|
||||||
|
|
||||||
|
import static com.viaversion.viaversion.protocols.v1_21to1_21_2.rewriter.EntityPacketRewriter1_21_2.updateEnchantmentAttributes;
|
||||||
|
|
||||||
|
public final class EntityPacketRewriter1_21_2 extends EntityRewriter<ClientboundPacket1_21_2, Protocol1_21_2To1_21> {
|
||||||
|
|
||||||
|
public EntityPacketRewriter1_21_2(final Protocol1_21_2To1_21 protocol) {
|
||||||
|
super(protocol, Types1_21.ENTITY_DATA_TYPES.optionalComponentType, Types1_21.ENTITY_DATA_TYPES.booleanType);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerPackets() {
|
||||||
|
registerTrackerWithData1_19(ClientboundPackets1_21_2.ADD_ENTITY, EntityTypes1_20_5.FALLING_BLOCK);
|
||||||
|
registerSetEntityData(ClientboundPackets1_21_2.SET_ENTITY_DATA, Types1_21_2.ENTITY_DATA_LIST, Types1_21.ENTITY_DATA_LIST);
|
||||||
|
registerRemoveEntities(ClientboundPackets1_21_2.REMOVE_ENTITIES);
|
||||||
|
|
||||||
|
protocol.registerClientbound(ClientboundConfigurationPackets1_21.REGISTRY_DATA, wrapper -> {
|
||||||
|
final String registryKey = Key.stripMinecraftNamespace(wrapper.passthrough(Types.STRING));
|
||||||
|
final RegistryEntry[] entries = wrapper.passthrough(Types.REGISTRY_ENTRY_ARRAY);
|
||||||
|
if (registryKey.equals("enchantment")) {
|
||||||
|
updateEnchantmentAttributes(entries, protocol.getMappingData().getAttributeMappings());
|
||||||
|
}
|
||||||
|
|
||||||
|
handleRegistryData1_20_5(wrapper.user(), registryKey, entries);
|
||||||
|
});
|
||||||
|
|
||||||
|
protocol.registerClientbound(ClientboundPackets1_21_2.LOGIN, new PacketHandlers() {
|
||||||
|
@Override
|
||||||
|
public void register() {
|
||||||
|
map(Types.INT); // Entity id
|
||||||
|
map(Types.BOOLEAN); // Hardcore
|
||||||
|
map(Types.STRING_ARRAY); // World List
|
||||||
|
map(Types.VAR_INT); // Max players
|
||||||
|
map(Types.VAR_INT); // View distance
|
||||||
|
map(Types.VAR_INT); // Simulation distance
|
||||||
|
map(Types.BOOLEAN); // Reduced debug info
|
||||||
|
map(Types.BOOLEAN); // Show death screen
|
||||||
|
map(Types.BOOLEAN); // Limited crafting
|
||||||
|
map(Types.VAR_INT); // Dimension key
|
||||||
|
map(Types.STRING); // World
|
||||||
|
map(Types.LONG); // Seed
|
||||||
|
map(Types.BYTE); // Gamemode
|
||||||
|
map(Types.BYTE); // Previous gamemode
|
||||||
|
map(Types.BOOLEAN); // Debug
|
||||||
|
map(Types.BOOLEAN); // Flat
|
||||||
|
map(Types.OPTIONAL_GLOBAL_POSITION); // Last death location
|
||||||
|
map(Types.VAR_INT); // Portal cooldown
|
||||||
|
handler(worldDataTrackerHandlerByKey1_20_5(3));
|
||||||
|
handler(playerTrackerHandler());
|
||||||
|
read(Types.VAR_INT); // Sea level
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
protocol.registerClientbound(ClientboundPackets1_21_2.RESPAWN, wrapper -> {
|
||||||
|
final int dimensionId = wrapper.passthrough(Types.VAR_INT);
|
||||||
|
final String world = wrapper.passthrough(Types.STRING);
|
||||||
|
wrapper.passthrough(Types.LONG); // Seed
|
||||||
|
wrapper.passthrough(Types.BYTE); // Gamemode
|
||||||
|
wrapper.passthrough(Types.BYTE); // Previous gamemode
|
||||||
|
wrapper.passthrough(Types.BOOLEAN); // Debug
|
||||||
|
wrapper.passthrough(Types.BOOLEAN); // Flat
|
||||||
|
wrapper.passthrough(Types.OPTIONAL_GLOBAL_POSITION); // Last death location
|
||||||
|
wrapper.passthrough(Types.VAR_INT); // Portal cooldown
|
||||||
|
|
||||||
|
wrapper.read(Types.VAR_INT); // Sea level
|
||||||
|
trackWorldDataByKey1_20_5(wrapper.user(), dimensionId, world);
|
||||||
|
});
|
||||||
|
|
||||||
|
protocol.appendServerbound(ServerboundPackets1_20_5.MOVE_PLAYER_POS, wrapper -> {
|
||||||
|
wrapper.passthrough(Types.DOUBLE); // X
|
||||||
|
wrapper.passthrough(Types.DOUBLE); // Y
|
||||||
|
wrapper.passthrough(Types.DOUBLE); // Z
|
||||||
|
fixOnGround(wrapper);
|
||||||
|
});
|
||||||
|
protocol.appendServerbound(ServerboundPackets1_20_5.MOVE_PLAYER_POS_ROT, wrapper -> {
|
||||||
|
wrapper.passthrough(Types.DOUBLE); // X
|
||||||
|
wrapper.passthrough(Types.DOUBLE); // Y
|
||||||
|
wrapper.passthrough(Types.DOUBLE); // Z
|
||||||
|
wrapper.passthrough(Types.FLOAT); // Yaw
|
||||||
|
wrapper.passthrough(Types.FLOAT); // Pitch
|
||||||
|
fixOnGround(wrapper);
|
||||||
|
});
|
||||||
|
protocol.appendServerbound(ServerboundPackets1_20_5.MOVE_PLAYER_ROT, wrapper -> {
|
||||||
|
wrapper.passthrough(Types.FLOAT); // Yaw
|
||||||
|
wrapper.passthrough(Types.FLOAT); // Pitch
|
||||||
|
fixOnGround(wrapper);
|
||||||
|
});
|
||||||
|
protocol.appendServerbound(ServerboundPackets1_20_5.MOVE_PLAYER_STATUS_ONLY, this::fixOnGround);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fixOnGround(final PacketWrapper wrapper) {
|
||||||
|
final boolean data = wrapper.read(Types.BOOLEAN);
|
||||||
|
wrapper.write(Types.UNSIGNED_BYTE, data ? (short) 1 : 0); // Carries more data now
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void registerRewrites() {
|
||||||
|
filter().mapDataType(Types1_21.ENTITY_DATA_TYPES::byId);
|
||||||
|
registerEntityDataTypeHandler1_20_3(
|
||||||
|
Types1_21.ENTITY_DATA_TYPES.itemType,
|
||||||
|
Types1_21.ENTITY_DATA_TYPES.blockStateType,
|
||||||
|
Types1_21.ENTITY_DATA_TYPES.optionalBlockStateType,
|
||||||
|
Types1_21.ENTITY_DATA_TYPES.particleType,
|
||||||
|
Types1_21.ENTITY_DATA_TYPES.particlesType,
|
||||||
|
Types1_21.ENTITY_DATA_TYPES.componentType,
|
||||||
|
Types1_21.ENTITY_DATA_TYPES.optionalComponentType
|
||||||
|
);
|
||||||
|
registerBlockStateHandler(EntityTypes1_20_5.ABSTRACT_MINECART, 11);
|
||||||
|
|
||||||
|
filter().type(EntityTypes1_20_5.SALMON).removeIndex(17); // Data type
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EntityType typeFromId(final int type) {
|
||||||
|
return EntityTypes1_20_5.getTypeFromId(type);
|
||||||
|
}
|
||||||
|
}
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren