Mirror von
https://github.com/ViaVersion/ViaVersion.git
synchronisiert 2024-11-10 18:15:36 +01:00
24w03a (maybe, and it's a bit ugly)
Dieser Commit ist enthalten in:
Ursprung
0946c72bdc
Commit
5d5c98acc6
@ -113,5 +113,7 @@ public interface MappingData {
|
|||||||
|
|
||||||
@Nullable FullMappings getArgumentTypeMappings();
|
@Nullable FullMappings getArgumentTypeMappings();
|
||||||
|
|
||||||
|
@Nullable FullMappings getRecipeSerializerMappings();
|
||||||
|
|
||||||
@Nullable Mappings getPaintingMappings();
|
@Nullable Mappings getPaintingMappings();
|
||||||
}
|
}
|
||||||
|
@ -44,6 +44,7 @@ public class MappingDataBase implements MappingData {
|
|||||||
protected BiMappings itemMappings;
|
protected BiMappings itemMappings;
|
||||||
protected FullMappings argumentTypeMappings;
|
protected FullMappings argumentTypeMappings;
|
||||||
protected FullMappings entityMappings;
|
protected FullMappings entityMappings;
|
||||||
|
protected FullMappings recipeSerializerMappings;
|
||||||
protected ParticleMappings particleMappings;
|
protected ParticleMappings particleMappings;
|
||||||
protected Mappings blockMappings;
|
protected Mappings blockMappings;
|
||||||
protected Mappings blockStateMappings;
|
protected Mappings blockStateMappings;
|
||||||
@ -84,6 +85,7 @@ public class MappingDataBase implements MappingData {
|
|||||||
if (unmappedIdentifierData != null && mappedIdentifierData != null) {
|
if (unmappedIdentifierData != null && mappedIdentifierData != null) {
|
||||||
entityMappings = loadFullMappings(data, unmappedIdentifierData, mappedIdentifierData, "entities");
|
entityMappings = loadFullMappings(data, unmappedIdentifierData, mappedIdentifierData, "entities");
|
||||||
argumentTypeMappings = loadFullMappings(data, unmappedIdentifierData, mappedIdentifierData, "argumenttypes");
|
argumentTypeMappings = loadFullMappings(data, unmappedIdentifierData, mappedIdentifierData, "argumenttypes");
|
||||||
|
recipeSerializerMappings = loadFullMappings(data, unmappedIdentifierData, mappedIdentifierData, "recipe_serializers");
|
||||||
|
|
||||||
final ListTag unmappedParticles = unmappedIdentifierData.get("particles");
|
final ListTag unmappedParticles = unmappedIdentifierData.get("particles");
|
||||||
final ListTag mappedParticles = mappedIdentifierData.get("particles");
|
final ListTag mappedParticles = mappedIdentifierData.get("particles");
|
||||||
@ -241,6 +243,11 @@ public class MappingDataBase implements MappingData {
|
|||||||
return paintingMappings;
|
return paintingMappings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable FullMappings getRecipeSerializerMappings() {
|
||||||
|
return recipeSerializerMappings;
|
||||||
|
}
|
||||||
|
|
||||||
protected Logger getLogger() {
|
protected Logger getLogger() {
|
||||||
return Via.getPlatform().getLogger();
|
return Via.getPlatform().getLogger();
|
||||||
}
|
}
|
||||||
|
@ -136,13 +136,31 @@ public abstract class AbstractProtocol<CU extends ClientboundPacketType, CM exte
|
|||||||
final ServerboundPacketType finishConfigurationPacket = serverboundFinishConfigurationPacket();
|
final ServerboundPacketType finishConfigurationPacket = serverboundFinishConfigurationPacket();
|
||||||
if (finishConfigurationPacket != null) {
|
if (finishConfigurationPacket != null) {
|
||||||
final int id = finishConfigurationPacket.getId();
|
final int id = finishConfigurationPacket.getId();
|
||||||
registerServerbound(State.CONFIGURATION, id, id, setClientStateHandler(State.PLAY));
|
final PacketMapping mapping = serverboundMappings.mappedPacket(State.CONFIGURATION, id); // Use existing handler if present
|
||||||
|
registerServerbound(State.CONFIGURATION, id, id, wrapper -> {
|
||||||
|
if (mapping != null) {
|
||||||
|
mapping.applyType(wrapper);
|
||||||
|
if (mapping.handler() != null) {
|
||||||
|
mapping.handler().handle(wrapper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setClientStateHandler(State.PLAY).handle(wrapper);
|
||||||
|
}, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
final ClientboundPacketType clientboundFinishConfigurationPacket = clientboundFinishConfigurationPacket();
|
final ClientboundPacketType clientboundFinishConfigurationPacket = clientboundFinishConfigurationPacket();
|
||||||
if (clientboundFinishConfigurationPacket != null) {
|
if (clientboundFinishConfigurationPacket != null) {
|
||||||
final int id = clientboundFinishConfigurationPacket.getId();
|
final int id = clientboundFinishConfigurationPacket.getId();
|
||||||
registerClientbound(State.CONFIGURATION, id, id, setServerStateHandler(State.PLAY));
|
final PacketMapping mapping = clientboundMappings.mappedPacket(State.CONFIGURATION, id); // Use existing handler if present
|
||||||
|
registerClientbound(State.CONFIGURATION, id, id, wrapper -> {
|
||||||
|
if (mapping != null) {
|
||||||
|
mapping.applyType(wrapper);
|
||||||
|
if (mapping.handler() != null) {
|
||||||
|
mapping.handler().handle(wrapper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setServerStateHandler(State.PLAY).handle(wrapper);
|
||||||
|
}, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,23 +172,62 @@ public abstract class AbstractProtocol<CU extends ClientboundPacketType, CM exte
|
|||||||
) {
|
) {
|
||||||
for (Map.Entry<State, PacketTypeMap<M>> entry : mappedPacketTypes.entrySet()) {
|
for (Map.Entry<State, PacketTypeMap<M>> entry : mappedPacketTypes.entrySet()) {
|
||||||
PacketTypeMap<M> mappedTypes = entry.getValue();
|
PacketTypeMap<M> mappedTypes = entry.getValue();
|
||||||
for (U unmappedType : unmappedPacketTypes.get(entry.getKey()).types()) {
|
PacketTypeMap<U> unmappedTypes = unmappedPacketTypes.get(entry.getKey());
|
||||||
M mappedType = mappedTypes.typeByName(unmappedType.getName());
|
registerPacketIdChanges(unmappedTypes, mappedTypes, registeredPredicate, registerConsumer, true);
|
||||||
if (mappedType == null) {
|
}
|
||||||
// No mapped packet of the same name exists
|
}
|
||||||
Preconditions.checkArgument(registeredPredicate.test(unmappedType),
|
|
||||||
"Packet %s in %s has no mapping - it needs to be manually cancelled or remapped", unmappedType, getClass());
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Register if no custom handler exists and ids are different
|
protected <U extends PacketType, M extends PacketType> void registerPacketIdChanges(PacketTypeMap<U> unmappedTypes, PacketTypeMap<M> mappedTypes, Predicate<U> registeredPredicate, BiConsumer<U, M> registerConsumer, boolean errorOnMissing) {
|
||||||
if (unmappedType.getId() != mappedType.getId() && !registeredPredicate.test(unmappedType)) {
|
for (U unmappedType : unmappedTypes.types()) {
|
||||||
registerConsumer.accept(unmappedType, mappedType);
|
M mappedType = mappedTypes.typeByName(unmappedType.getName());
|
||||||
}
|
if (mappedType == null) {
|
||||||
|
// No mapped packet of the same name exists
|
||||||
|
Preconditions.checkArgument(registeredPredicate.test(unmappedType) || !errorOnMissing,
|
||||||
|
"Packet %s in %s has no mapping - it needs to be manually cancelled or remapped", unmappedType, getClass());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Register if no custom handler exists and ids are different
|
||||||
|
if (unmappedType.getId() != mappedType.getId() && !registeredPredicate.test(unmappedType)) {
|
||||||
|
registerConsumer.accept(unmappedType, mappedType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated // TODO Should instead be done automatically/properly via the packet types provider
|
||||||
|
protected void registerClientboundPacketIdChanges(State state, Class<? extends ClientboundPacketType> unmappedPacketTypesClass, Class<? extends ClientboundPacketType> mappedPacketTypesClass) {
|
||||||
|
registerPacketIdChanges(
|
||||||
|
PacketTypeMap.of(unmappedPacketTypesClass),
|
||||||
|
PacketTypeMap.of(mappedPacketTypesClass),
|
||||||
|
type -> false,
|
||||||
|
(unmappedType, mappedType) -> {
|
||||||
|
final PacketMapping mapping = clientboundMappings.mappedPacket(state, unmappedType.getId());
|
||||||
|
this.registerClientbound(state, unmappedType.getId(), mappedType.getId(), wrapper -> {
|
||||||
|
if (mapping != null && mapping.handler() != null) {
|
||||||
|
mapping.handler().handle(wrapper);
|
||||||
|
}
|
||||||
|
}, true);
|
||||||
|
}, false
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated // TODO Should instead be done automatically/properly via the packet types provider
|
||||||
|
protected void registerServerboundPacketIdChanges(State state, Class<? extends ServerboundPacketType> unmappedPacketTypesClass, Class<? extends ServerboundPacketType> mappedPacketTypesClass) {
|
||||||
|
registerPacketIdChanges(
|
||||||
|
PacketTypeMap.of(unmappedPacketTypesClass),
|
||||||
|
PacketTypeMap.of(mappedPacketTypesClass),
|
||||||
|
type -> false,
|
||||||
|
(unmappedType, mappedType) -> {
|
||||||
|
final PacketMapping mapping = serverboundMappings.mappedPacket(state, unmappedType.getId());
|
||||||
|
this.registerServerbound(state, unmappedType.getId(), mappedType.getId(), wrapper -> {
|
||||||
|
if (mapping != null && mapping.handler() != null) {
|
||||||
|
mapping.handler().handle(wrapper);
|
||||||
|
}
|
||||||
|
}, true);
|
||||||
|
}, false
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void loadMappingData() {
|
public final void loadMappingData() {
|
||||||
getMappingData().load();
|
getMappingData().load();
|
||||||
@ -228,7 +285,7 @@ public abstract class AbstractProtocol<CU extends ClientboundPacketType, CM exte
|
|||||||
return PacketMappings.arrayMappings();
|
return PacketMappings.arrayMappings();
|
||||||
}
|
}
|
||||||
|
|
||||||
private <P extends PacketType> Map<State, PacketTypeMap<P>> packetTypeMap(Class<P> packetTypeClass) {
|
protected <P extends PacketType> Map<State, PacketTypeMap<P>> packetTypeMap(@Nullable Class<P> packetTypeClass) {
|
||||||
if (packetTypeClass != null) {
|
if (packetTypeClass != null) {
|
||||||
Map<State, PacketTypeMap<P>> map = new EnumMap<>(State.class);
|
Map<State, PacketTypeMap<P>> map = new EnumMap<>(State.class);
|
||||||
map.put(State.PLAY, PacketTypeMap.of(packetTypeClass));
|
map.put(State.PLAY, PacketTypeMap.of(packetTypeClass));
|
||||||
|
@ -86,7 +86,7 @@ public class ProtocolVersion {
|
|||||||
public static final ProtocolVersion v1_20 = register(763, "1.20/1.20.1", new VersionRange("1.20", 0, 1));
|
public static final ProtocolVersion v1_20 = register(763, "1.20/1.20.1", new VersionRange("1.20", 0, 1));
|
||||||
public static final ProtocolVersion v1_20_2 = register(764, "1.20.2");
|
public static final ProtocolVersion v1_20_2 = register(764, "1.20.2");
|
||||||
public static final ProtocolVersion v1_20_3 = register(765, "1.20.3/1.20.4", new VersionRange("1.20", 3, 4));
|
public static final ProtocolVersion v1_20_3 = register(765, "1.20.3/1.20.4", new VersionRange("1.20", 3, 4));
|
||||||
public static final ProtocolVersion v1_20_5 = register(766, 170, "1.20.5");
|
public static final ProtocolVersion v1_20_5 = register(766, 171, "1.20.5");
|
||||||
public static final ProtocolVersion unknown = register(-1, "UNKNOWN");
|
public static final ProtocolVersion unknown = register(-1, "UNKNOWN");
|
||||||
|
|
||||||
public static ProtocolVersion register(int version, String name) {
|
public static ProtocolVersion register(int version, String name) {
|
||||||
|
@ -24,10 +24,10 @@ package com.viaversion.viaversion.api.type.types.misc;
|
|||||||
|
|
||||||
import com.viaversion.viaversion.api.Via;
|
import com.viaversion.viaversion.api.Via;
|
||||||
import com.viaversion.viaversion.api.data.ParticleMappings;
|
import com.viaversion.viaversion.api.data.ParticleMappings;
|
||||||
|
import com.viaversion.viaversion.api.minecraft.Particle;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
import com.viaversion.viaversion.api.protocol.Protocol;
|
import com.viaversion.viaversion.api.protocol.Protocol;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.minecraft.Particle;
|
|
||||||
import com.viaversion.viaversion.util.Key;
|
import com.viaversion.viaversion.util.Key;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap;
|
||||||
@ -66,12 +66,15 @@ public class ParticleType extends Type<Particle> {
|
|||||||
public Particle read(final ByteBuf buffer) throws Exception {
|
public Particle read(final ByteBuf buffer) throws Exception {
|
||||||
final int type = Type.VAR_INT.readPrimitive(buffer);
|
final int type = Type.VAR_INT.readPrimitive(buffer);
|
||||||
final Particle particle = new Particle(type);
|
final Particle particle = new Particle(type);
|
||||||
|
readData(buffer, particle);
|
||||||
|
return particle;
|
||||||
|
}
|
||||||
|
|
||||||
final ParticleReader reader = readers.get(type);
|
public void readData(final ByteBuf buffer, final Particle particle) throws Exception {
|
||||||
|
final ParticleReader reader = readers.get(particle.getId());
|
||||||
if (reader != null) {
|
if (reader != null) {
|
||||||
reader.read(buffer, particle);
|
reader.read(buffer, particle);
|
||||||
}
|
}
|
||||||
return particle;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ParticleReader itemHandler(final Type<Item> itemType) {
|
public static ParticleReader itemHandler(final Type<Item> itemType) {
|
||||||
|
@ -25,7 +25,8 @@ public enum ClientboundLoginPackets implements ClientboundPacketType {
|
|||||||
HELLO, // 0x01
|
HELLO, // 0x01
|
||||||
GAME_PROFILE, // 0x02
|
GAME_PROFILE, // 0x02
|
||||||
LOGIN_COMPRESSION, // 0x03
|
LOGIN_COMPRESSION, // 0x03
|
||||||
CUSTOM_QUERY; // 0x04
|
CUSTOM_QUERY, // 0x04
|
||||||
|
COOKIE_REQUEST; // 0x05
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final int getId() {
|
public final int getId() {
|
||||||
|
@ -24,7 +24,8 @@ public enum ServerboundLoginPackets implements ServerboundPacketType {
|
|||||||
HELLO, // 0x00
|
HELLO, // 0x00
|
||||||
ENCRYPTION_KEY, // 0x01
|
ENCRYPTION_KEY, // 0x01
|
||||||
CUSTOM_QUERY_ANSWER, // 0x02
|
CUSTOM_QUERY_ANSWER, // 0x02
|
||||||
LOGIN_ACKNOWLEDGED; // 0x03
|
LOGIN_ACKNOWLEDGED, // 0x03
|
||||||
|
COOKIE_RESPONSE; // 0x04
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final int getId() {
|
public final int getId() {
|
||||||
|
@ -42,6 +42,7 @@ import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.Clientb
|
|||||||
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ServerboundPackets1_20_3;
|
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ServerboundPackets1_20_3;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.rewriter.BlockItemPacketRewriter1_20_3;
|
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.rewriter.BlockItemPacketRewriter1_20_3;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.rewriter.EntityPacketRewriter1_20_3;
|
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.rewriter.EntityPacketRewriter1_20_3;
|
||||||
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.packet.ClientboundConfigurationPackets1_20_5;
|
||||||
import com.viaversion.viaversion.rewriter.SoundRewriter;
|
import com.viaversion.viaversion.rewriter.SoundRewriter;
|
||||||
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
||||||
import com.viaversion.viaversion.rewriter.TagRewriter;
|
import com.viaversion.viaversion.rewriter.TagRewriter;
|
||||||
@ -297,9 +298,8 @@ public final class Protocol1_20_3To1_20_2 extends AbstractProtocol<ClientboundPa
|
|||||||
|
|
||||||
registerServerbound(State.CONFIGURATION, ServerboundConfigurationPackets1_20_2.RESOURCE_PACK, resourcePackStatusHandler());
|
registerServerbound(State.CONFIGURATION, ServerboundConfigurationPackets1_20_2.RESOURCE_PACK, resourcePackStatusHandler());
|
||||||
registerClientbound(State.CONFIGURATION, ClientboundConfigurationPackets1_20_2.RESOURCE_PACK.getId(), ClientboundConfigurationPackets1_20_3.RESOURCE_PACK_PUSH.getId(), resourcePackHandler(ClientboundConfigurationPackets1_20_3.RESOURCE_PACK_POP));
|
registerClientbound(State.CONFIGURATION, ClientboundConfigurationPackets1_20_2.RESOURCE_PACK.getId(), ClientboundConfigurationPackets1_20_3.RESOURCE_PACK_PUSH.getId(), resourcePackHandler(ClientboundConfigurationPackets1_20_3.RESOURCE_PACK_POP));
|
||||||
// TODO Auto map via packet types provider
|
|
||||||
registerClientbound(State.CONFIGURATION, ClientboundConfigurationPackets1_20_2.UPDATE_ENABLED_FEATURES.getId(), ClientboundConfigurationPackets1_20_3.UPDATE_ENABLED_FEATURES.getId());
|
|
||||||
registerClientbound(State.CONFIGURATION, ClientboundConfigurationPackets1_20_2.UPDATE_TAGS.getId(), ClientboundConfigurationPackets1_20_3.UPDATE_TAGS.getId(), tagRewriter.getGenericHandler());
|
registerClientbound(State.CONFIGURATION, ClientboundConfigurationPackets1_20_2.UPDATE_TAGS.getId(), ClientboundConfigurationPackets1_20_3.UPDATE_TAGS.getId(), tagRewriter.getGenericHandler());
|
||||||
|
registerClientboundPacketIdChanges(State.CONFIGURATION, ClientboundConfigurationPackets1_20_2.class, ClientboundConfigurationPackets1_20_3.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
private PacketHandler resourcePackStatusHandler() {
|
private PacketHandler resourcePackStatusHandler() {
|
||||||
|
@ -25,25 +25,32 @@ import com.viaversion.viaversion.api.protocol.AbstractProtocol;
|
|||||||
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType;
|
import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State;
|
import com.viaversion.viaversion.api.protocol.packet.State;
|
||||||
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||||
|
import com.viaversion.viaversion.protocols.base.ClientboundLoginPackets;
|
||||||
|
import com.viaversion.viaversion.protocols.base.ServerboundLoginPackets;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.packet.ServerboundConfigurationPackets1_20_2;
|
import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.packet.ServerboundConfigurationPackets1_20_2;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ClientboundConfigurationPackets1_20_3;
|
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ClientboundConfigurationPackets1_20_3;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ClientboundPackets1_20_3;
|
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ClientboundPackets1_20_3;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ServerboundPackets1_20_3;
|
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ServerboundPackets1_20_3;
|
||||||
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.packet.ClientboundConfigurationPackets1_20_5;
|
||||||
|
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.ServerboundConfigurationPackets1_20_5;
|
||||||
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.packet.ServerboundPackets1_20_5;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.rewriter.BlockItemPacketRewriter1_20_5;
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.rewriter.BlockItemPacketRewriter1_20_5;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.rewriter.EntityPacketRewriter1_20_5;
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.rewriter.EntityPacketRewriter1_20_5;
|
||||||
import com.viaversion.viaversion.rewriter.SoundRewriter;
|
import com.viaversion.viaversion.rewriter.SoundRewriter;
|
||||||
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
||||||
import com.viaversion.viaversion.rewriter.TagRewriter;
|
import com.viaversion.viaversion.rewriter.TagRewriter;
|
||||||
|
|
||||||
public final class Protocol1_20_5To1_20_3 extends AbstractProtocol<ClientboundPackets1_20_3, ClientboundPackets1_20_3, ServerboundPackets1_20_3, ServerboundPackets1_20_3> {
|
public final class Protocol1_20_5To1_20_3 extends AbstractProtocol<ClientboundPackets1_20_3, ClientboundPackets1_20_5, ServerboundPackets1_20_3, ServerboundPackets1_20_5> {
|
||||||
|
|
||||||
public static final MappingData MAPPINGS = new MappingDataBase("1.20.3", "1.20.5");
|
public static final MappingData MAPPINGS = new MappingDataBase("1.20.3", "1.20.5");
|
||||||
private final EntityPacketRewriter1_20_5 entityRewriter = new EntityPacketRewriter1_20_5(this);
|
private final EntityPacketRewriter1_20_5 entityRewriter = new EntityPacketRewriter1_20_5(this);
|
||||||
private final BlockItemPacketRewriter1_20_5 itemRewriter = new BlockItemPacketRewriter1_20_5(this);
|
private final BlockItemPacketRewriter1_20_5 itemRewriter = new BlockItemPacketRewriter1_20_5(this);
|
||||||
|
|
||||||
public Protocol1_20_5To1_20_3() {
|
public Protocol1_20_5To1_20_3() {
|
||||||
super(ClientboundPackets1_20_3.class, ClientboundPackets1_20_3.class, ServerboundPackets1_20_3.class, ServerboundPackets1_20_3.class);
|
super(ClientboundPackets1_20_3.class, ClientboundPackets1_20_5.class, ServerboundPackets1_20_3.class, ServerboundPackets1_20_5.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -56,9 +63,33 @@ public final class Protocol1_20_5To1_20_3 extends AbstractProtocol<ClientboundPa
|
|||||||
|
|
||||||
final SoundRewriter<ClientboundPackets1_20_3> soundRewriter = new SoundRewriter<>(this);
|
final SoundRewriter<ClientboundPackets1_20_3> soundRewriter = new SoundRewriter<>(this);
|
||||||
soundRewriter.register1_19_3Sound(ClientboundPackets1_20_3.SOUND);
|
soundRewriter.register1_19_3Sound(ClientboundPackets1_20_3.SOUND);
|
||||||
soundRewriter.registerSound(ClientboundPackets1_20_3.ENTITY_SOUND);
|
registerClientbound(ClientboundPackets1_20_3.ENTITY_SOUND, wrapper -> {
|
||||||
|
// Now also written as a sound event with 0 marking a following resource location string
|
||||||
|
final int soundId = wrapper.read(Type.VAR_INT);
|
||||||
|
wrapper.write(Type.VAR_INT, MAPPINGS.getSoundMappings().getNewId(soundId) + 1);
|
||||||
|
});
|
||||||
|
|
||||||
new StatisticsRewriter<>(this).register(ClientboundPackets1_20_3.STATISTICS);
|
new StatisticsRewriter<>(this).register(ClientboundPackets1_20_3.STATISTICS);
|
||||||
|
|
||||||
|
registerClientbound(State.LOGIN, ClientboundLoginPackets.HELLO, wrapper -> {
|
||||||
|
wrapper.passthrough(Type.STRING); // Server ID
|
||||||
|
wrapper.passthrough(Type.BYTE_ARRAY_PRIMITIVE); // Public key
|
||||||
|
wrapper.passthrough(Type.BYTE_ARRAY_PRIMITIVE); // Challenge
|
||||||
|
wrapper.write(Type.BOOLEAN, true); // Authenticate
|
||||||
|
});
|
||||||
|
|
||||||
|
registerClientbound(ClientboundPackets1_20_3.SERVER_DATA, wrapper -> {
|
||||||
|
wrapper.passthrough(Type.TAG); // MOTD
|
||||||
|
wrapper.passthrough(Type.OPTIONAL_BYTE_ARRAY_PRIMITIVE); // Icon
|
||||||
|
wrapper.read(Type.BOOLEAN); // Enforces secure chat - moved to join game
|
||||||
|
});
|
||||||
|
|
||||||
|
cancelServerbound(State.LOGIN, ServerboundLoginPackets.COOKIE_RESPONSE.getId());
|
||||||
|
cancelServerbound(State.CONFIGURATION, ServerboundConfigurationPackets1_20_5.COOKIE_RESPONSE.getId());
|
||||||
|
cancelServerbound(ServerboundPackets1_20_5.COOKIE_RESPONSE);
|
||||||
|
|
||||||
|
registerClientboundPacketIdChanges(State.CONFIGURATION, ClientboundConfigurationPackets1_20_3.class, ClientboundConfigurationPackets1_20_5.class);
|
||||||
|
registerServerboundPacketIdChanges(State.CONFIGURATION, ServerboundConfigurationPackets1_20_5.class, ServerboundConfigurationPackets1_20_2.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -95,6 +126,6 @@ public final class Protocol1_20_5To1_20_3 extends AbstractProtocol<ClientboundPa
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ServerboundPacketType serverboundFinishConfigurationPacket() {
|
protected ServerboundPacketType serverboundFinishConfigurationPacket() {
|
||||||
return ServerboundConfigurationPackets1_20_2.FINISH_CONFIGURATION;
|
return ServerboundConfigurationPackets1_20_5.FINISH_CONFIGURATION;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
|
||||||
|
* 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.viaversion.protocols.protocol1_20_5to1_20_3.packet;
|
||||||
|
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.State;
|
||||||
|
|
||||||
|
public enum ClientboundConfigurationPackets1_20_5 implements ClientboundPacketType {
|
||||||
|
|
||||||
|
COOKIE_REQUEST, // 0x00
|
||||||
|
CUSTOM_PAYLOAD, // 0x01
|
||||||
|
DISCONNECT, // 0x02
|
||||||
|
FINISH_CONFIGURATION, // 0x03
|
||||||
|
KEEP_ALIVE, // 0x04
|
||||||
|
PING, // 0x05
|
||||||
|
REGISTRY_DATA, // 0x06
|
||||||
|
RESOURCE_PACK_POP, // 0x07
|
||||||
|
RESOURCE_PACK_PUSH, // 0x08
|
||||||
|
STORE_COOKIE, // 0x09
|
||||||
|
TRANSFER, // 0x0A
|
||||||
|
UPDATE_ENABLED_FEATURES, // 0x0B
|
||||||
|
UPDATE_TAGS; // 0x0C
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getId() {
|
||||||
|
return ordinal();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return name();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public State state() {
|
||||||
|
return State.CONFIGURATION;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,154 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
|
||||||
|
* 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.viaversion.protocols.protocol1_20_5to1_20_3.packet;
|
||||||
|
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
||||||
|
|
||||||
|
public enum ClientboundPackets1_20_5 implements ClientboundPacketType {
|
||||||
|
|
||||||
|
BUNDLE, // 0x00
|
||||||
|
SPAWN_ENTITY, // 0x01
|
||||||
|
SPAWN_EXPERIENCE_ORB, // 0x02
|
||||||
|
ENTITY_ANIMATION, // 0x03
|
||||||
|
STATISTICS, // 0x04
|
||||||
|
BLOCK_CHANGED_ACK, // 0x05
|
||||||
|
BLOCK_BREAK_ANIMATION, // 0x06
|
||||||
|
BLOCK_ENTITY_DATA, // 0x07
|
||||||
|
BLOCK_ACTION, // 0x08
|
||||||
|
BLOCK_CHANGE, // 0x09
|
||||||
|
BOSSBAR, // 0x0A
|
||||||
|
SERVER_DIFFICULTY, // 0x0B
|
||||||
|
CHUNK_BATCH_FINISHED, // 0x0C
|
||||||
|
CHUNK_BATCH_START, // 0x0D
|
||||||
|
CHUNK_BIOMES, // 0x0E
|
||||||
|
CLEAR_TITLES, // 0x0F
|
||||||
|
TAB_COMPLETE, // 0x10
|
||||||
|
DECLARE_COMMANDS, // 0x11
|
||||||
|
CLOSE_WINDOW, // 0x12
|
||||||
|
WINDOW_ITEMS, // 0x13
|
||||||
|
WINDOW_PROPERTY, // 0x14
|
||||||
|
SET_SLOT, // 0x15
|
||||||
|
COOKIE_REQUEST, // 0x16
|
||||||
|
COOLDOWN, // 0x17
|
||||||
|
CUSTOM_CHAT_COMPLETIONS, // 0x18
|
||||||
|
PLUGIN_MESSAGE, // 0x19
|
||||||
|
DAMAGE_EVENT, // 0x1A
|
||||||
|
DELETE_CHAT_MESSAGE, // 0x1B
|
||||||
|
DISCONNECT, // 0x1C
|
||||||
|
DISGUISED_CHAT, // 0x1D
|
||||||
|
ENTITY_STATUS, // 0x1E
|
||||||
|
EXPLOSION, // 0x1F
|
||||||
|
UNLOAD_CHUNK, // 0x20
|
||||||
|
GAME_EVENT, // 0x21
|
||||||
|
OPEN_HORSE_WINDOW, // 0x22
|
||||||
|
HIT_ANIMATION, // 0x23
|
||||||
|
WORLD_BORDER_INIT, // 0x24
|
||||||
|
KEEP_ALIVE, // 0x25
|
||||||
|
CHUNK_DATA, // 0x26
|
||||||
|
EFFECT, // 0x27
|
||||||
|
SPAWN_PARTICLE, // 0x28
|
||||||
|
UPDATE_LIGHT, // 0x29
|
||||||
|
JOIN_GAME, // 0x2A
|
||||||
|
MAP_DATA, // 0x2B
|
||||||
|
TRADE_LIST, // 0x2C
|
||||||
|
ENTITY_POSITION, // 0x2D
|
||||||
|
ENTITY_POSITION_AND_ROTATION, // 0x2E
|
||||||
|
ENTITY_ROTATION, // 0x2F
|
||||||
|
VEHICLE_MOVE, // 0x30
|
||||||
|
OPEN_BOOK, // 0x31
|
||||||
|
OPEN_WINDOW, // 0x32
|
||||||
|
OPEN_SIGN_EDITOR, // 0x33
|
||||||
|
PING, // 0x34
|
||||||
|
PONG_RESPONSE, // 0x35
|
||||||
|
CRAFT_RECIPE_RESPONSE, // 0x36
|
||||||
|
PLAYER_ABILITIES, // 0x37
|
||||||
|
PLAYER_CHAT, // 0x38
|
||||||
|
COMBAT_END, // 0x39
|
||||||
|
COMBAT_ENTER, // 0x3A
|
||||||
|
COMBAT_KILL, // 0x3B
|
||||||
|
PLAYER_INFO_REMOVE, // 0x3C
|
||||||
|
PLAYER_INFO_UPDATE, // 0x3D
|
||||||
|
FACE_PLAYER, // 0x3E
|
||||||
|
PLAYER_POSITION, // 0x3F
|
||||||
|
UNLOCK_RECIPES, // 0x40
|
||||||
|
REMOVE_ENTITIES, // 0x41
|
||||||
|
REMOVE_ENTITY_EFFECT, // 0x42
|
||||||
|
RESET_SCORE, // 0x43
|
||||||
|
RESOURCE_PACK_POP, // 0x44
|
||||||
|
RESOURCE_PACK_PUSH, // 0x45
|
||||||
|
RESPAWN, // 0x46
|
||||||
|
ENTITY_HEAD_LOOK, // 0x47
|
||||||
|
MULTI_BLOCK_CHANGE, // 0x48
|
||||||
|
SELECT_ADVANCEMENTS_TAB, // 0x49
|
||||||
|
SERVER_DATA, // 0x4A
|
||||||
|
ACTIONBAR, // 0x4B
|
||||||
|
WORLD_BORDER_CENTER, // 0x4C
|
||||||
|
WORLD_BORDER_LERP_SIZE, // 0x4D
|
||||||
|
WORLD_BORDER_SIZE, // 0x4E
|
||||||
|
WORLD_BORDER_WARNING_DELAY, // 0x4F
|
||||||
|
WORLD_BORDER_WARNING_DISTANCE, // 0x50
|
||||||
|
CAMERA, // 0x51
|
||||||
|
HELD_ITEM_CHANGE, // 0x52
|
||||||
|
UPDATE_VIEW_POSITION, // 0x53
|
||||||
|
UPDATE_VIEW_DISTANCE, // 0x54
|
||||||
|
SPAWN_POSITION, // 0x55
|
||||||
|
DISPLAY_SCOREBOARD, // 0x56
|
||||||
|
ENTITY_METADATA, // 0x57
|
||||||
|
ATTACH_ENTITY, // 0x58
|
||||||
|
ENTITY_VELOCITY, // 0x59
|
||||||
|
ENTITY_EQUIPMENT, // 0x5A
|
||||||
|
SET_EXPERIENCE, // 0x5B
|
||||||
|
UPDATE_HEALTH, // 0x5C
|
||||||
|
SCOREBOARD_OBJECTIVE, // 0x5D
|
||||||
|
SET_PASSENGERS, // 0x5E
|
||||||
|
TEAMS, // 0x5F
|
||||||
|
UPDATE_SCORE, // 0x60
|
||||||
|
SET_SIMULATION_DISTANCE, // 0x61
|
||||||
|
TITLE_SUBTITLE, // 0x62
|
||||||
|
TIME_UPDATE, // 0x63
|
||||||
|
TITLE_TEXT, // 0x64
|
||||||
|
TITLE_TIMES, // 0x65
|
||||||
|
ENTITY_SOUND, // 0x66
|
||||||
|
SOUND, // 0x67
|
||||||
|
START_CONFIGURATION, // 0x68
|
||||||
|
STOP_SOUND, // 0x69
|
||||||
|
STORE_COOKIE, // 0x6A
|
||||||
|
SYSTEM_CHAT, // 0x6B
|
||||||
|
TAB_LIST, // 0x6C
|
||||||
|
NBT_QUERY, // 0x6D
|
||||||
|
COLLECT_ITEM, // 0x6E
|
||||||
|
ENTITY_TELEPORT, // 0x6F
|
||||||
|
TICKING_STATE, // 0x70
|
||||||
|
TICKING_STEP, // 0x71
|
||||||
|
TRANSFER, // 0x72
|
||||||
|
ADVANCEMENTS, // 0x73
|
||||||
|
ENTITY_PROPERTIES, // 0x74
|
||||||
|
ENTITY_EFFECT, // 0x75
|
||||||
|
DECLARE_RECIPES, // 0x76
|
||||||
|
TAGS; // 0x77
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getId() {
|
||||||
|
return ordinal();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return name();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
|
||||||
|
* 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.viaversion.protocols.protocol1_20_5to1_20_3.packet;
|
||||||
|
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType;
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.State;
|
||||||
|
|
||||||
|
public enum ServerboundConfigurationPackets1_20_5 implements ServerboundPacketType {
|
||||||
|
|
||||||
|
CLIENT_INFORMATION, // 0x00
|
||||||
|
COOKIE_RESPONSE, // 0x01
|
||||||
|
CUSTOM_PAYLOAD, // 0x02
|
||||||
|
FINISH_CONFIGURATION, // 0x03
|
||||||
|
KEEP_ALIVE, // 0x04
|
||||||
|
PONG, // 0x05
|
||||||
|
RESOURCE_PACK; // 0x06
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getId() {
|
||||||
|
return ordinal();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return name();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public State state() {
|
||||||
|
return State.CONFIGURATION;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,90 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
|
||||||
|
* 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.viaversion.protocols.protocol1_20_5to1_20_3.packet;
|
||||||
|
|
||||||
|
import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType;
|
||||||
|
|
||||||
|
public enum ServerboundPackets1_20_5 implements ServerboundPacketType {
|
||||||
|
|
||||||
|
TELEPORT_CONFIRM, // 0x00
|
||||||
|
QUERY_BLOCK_NBT, // 0x01
|
||||||
|
SET_DIFFICULTY, // 0x02
|
||||||
|
CHAT_ACK, // 0x03
|
||||||
|
CHAT_COMMAND, // 0x04
|
||||||
|
CHAT_MESSAGE, // 0x05
|
||||||
|
CHAT_SESSION_UPDATE, // 0x06
|
||||||
|
CHUNK_BATCH_RECEIVED, // 0x07
|
||||||
|
CLIENT_STATUS, // 0x08
|
||||||
|
CLIENT_SETTINGS, // 0x09
|
||||||
|
TAB_COMPLETE, // 0x0A
|
||||||
|
CONFIGURATION_ACKNOWLEDGED, // 0x0B
|
||||||
|
CLICK_WINDOW_BUTTON, // 0x0C
|
||||||
|
CLICK_WINDOW, // 0x0D
|
||||||
|
CLOSE_WINDOW, // 0x0E
|
||||||
|
CONTAINER_SLOT_STATE_CHANGED, // 0x0F
|
||||||
|
COOKIE_RESPONSE, // 0x10
|
||||||
|
PLUGIN_MESSAGE, // 0x11
|
||||||
|
EDIT_BOOK, // 0x12
|
||||||
|
ENTITY_NBT_REQUEST, // 0x13
|
||||||
|
INTERACT_ENTITY, // 0x14
|
||||||
|
GENERATE_JIGSAW, // 0x15
|
||||||
|
KEEP_ALIVE, // 0x16
|
||||||
|
LOCK_DIFFICULTY, // 0x17
|
||||||
|
PLAYER_POSITION, // 0x18
|
||||||
|
PLAYER_POSITION_AND_ROTATION, // 0x19
|
||||||
|
PLAYER_ROTATION, // 0x1A
|
||||||
|
PLAYER_MOVEMENT, // 0x1B
|
||||||
|
VEHICLE_MOVE, // 0x1C
|
||||||
|
STEER_BOAT, // 0x1D
|
||||||
|
PICK_ITEM, // 0x1E
|
||||||
|
PING_REQUEST, // 0x1F
|
||||||
|
CRAFT_RECIPE_REQUEST, // 0x20
|
||||||
|
PLAYER_ABILITIES, // 0x21
|
||||||
|
PLAYER_DIGGING, // 0x22
|
||||||
|
ENTITY_ACTION, // 0x23
|
||||||
|
STEER_VEHICLE, // 0x24
|
||||||
|
PONG, // 0x25
|
||||||
|
RECIPE_BOOK_DATA, // 0x26
|
||||||
|
SEEN_RECIPE, // 0x27
|
||||||
|
RENAME_ITEM, // 0x28
|
||||||
|
RESOURCE_PACK_STATUS, // 0x29
|
||||||
|
ADVANCEMENT_TAB, // 0x2A
|
||||||
|
SELECT_TRADE, // 0x2B
|
||||||
|
SET_BEACON_EFFECT, // 0x2C
|
||||||
|
HELD_ITEM_CHANGE, // 0x2D
|
||||||
|
UPDATE_COMMAND_BLOCK, // 0x2E
|
||||||
|
UPDATE_COMMAND_BLOCK_MINECART, // 0x2F
|
||||||
|
CREATIVE_INVENTORY_ACTION, // 0x30
|
||||||
|
UPDATE_JIGSAW_BLOCK, // 0x31
|
||||||
|
UPDATE_STRUCTURE_BLOCK, // 0x32
|
||||||
|
UPDATE_SIGN, // 0x33
|
||||||
|
ANIMATION, // 0x34
|
||||||
|
SPECTATE, // 0x35
|
||||||
|
PLAYER_BLOCK_PLACEMENT, // 0x36
|
||||||
|
USE_ITEM; // 0x37
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getId() {
|
||||||
|
return ordinal();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return name();
|
||||||
|
}
|
||||||
|
}
|
@ -17,16 +17,20 @@
|
|||||||
*/
|
*/
|
||||||
package com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.rewriter;
|
package com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.rewriter;
|
||||||
|
|
||||||
|
import com.viaversion.viaversion.api.minecraft.Particle;
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
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_20_3;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ClientboundPackets1_20_3;
|
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ClientboundPackets1_20_3;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ServerboundPackets1_20_3;
|
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.rewriter.RecipeRewriter1_20_3;
|
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.rewriter.RecipeRewriter1_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.Protocol1_20_5To1_20_3;
|
||||||
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.packet.ServerboundPackets1_20_5;
|
||||||
import com.viaversion.viaversion.rewriter.BlockRewriter;
|
import com.viaversion.viaversion.rewriter.BlockRewriter;
|
||||||
import com.viaversion.viaversion.rewriter.ItemRewriter;
|
import com.viaversion.viaversion.rewriter.ItemRewriter;
|
||||||
|
import com.viaversion.viaversion.util.Key;
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
|
||||||
public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter<ClientboundPackets1_20_3, ServerboundPackets1_20_3, Protocol1_20_5To1_20_3> {
|
public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter<ClientboundPackets1_20_3, ServerboundPackets1_20_5, Protocol1_20_5To1_20_3> {
|
||||||
|
|
||||||
public BlockItemPacketRewriter1_20_5(final Protocol1_20_5To1_20_3 protocol) {
|
public BlockItemPacketRewriter1_20_5(final Protocol1_20_5To1_20_3 protocol) {
|
||||||
super(protocol, Type.ITEM1_20_2, Type.ITEM1_20_2_ARRAY);
|
super(protocol, Type.ITEM1_20_2, Type.ITEM1_20_2_ARRAY);
|
||||||
@ -42,20 +46,113 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter<Clientboun
|
|||||||
blockRewriter.registerChunkData1_19(ClientboundPackets1_20_3.CHUNK_DATA, ChunkType1_20_2::new);
|
blockRewriter.registerChunkData1_19(ClientboundPackets1_20_3.CHUNK_DATA, ChunkType1_20_2::new);
|
||||||
blockRewriter.registerBlockEntityData(ClientboundPackets1_20_3.BLOCK_ENTITY_DATA);
|
blockRewriter.registerBlockEntityData(ClientboundPackets1_20_3.BLOCK_ENTITY_DATA);
|
||||||
|
|
||||||
// registerOpenWindow(ClientboundPackets1_20_3.OPEN_WINDOW);
|
|
||||||
registerSetCooldown(ClientboundPackets1_20_3.COOLDOWN);
|
registerSetCooldown(ClientboundPackets1_20_3.COOLDOWN);
|
||||||
registerWindowItems1_17_1(ClientboundPackets1_20_3.WINDOW_ITEMS);
|
registerWindowItems1_17_1(ClientboundPackets1_20_3.WINDOW_ITEMS);
|
||||||
registerSetSlot1_17_1(ClientboundPackets1_20_3.SET_SLOT);
|
registerSetSlot1_17_1(ClientboundPackets1_20_3.SET_SLOT);
|
||||||
registerAdvancements1_20_3(ClientboundPackets1_20_3.ADVANCEMENTS);
|
registerAdvancements1_20_3(ClientboundPackets1_20_3.ADVANCEMENTS);
|
||||||
registerEntityEquipmentArray(ClientboundPackets1_20_3.ENTITY_EQUIPMENT);
|
registerEntityEquipmentArray(ClientboundPackets1_20_3.ENTITY_EQUIPMENT);
|
||||||
registerClickWindow1_17_1(ServerboundPackets1_20_3.CLICK_WINDOW);
|
registerClickWindow1_17_1(ServerboundPackets1_20_5.CLICK_WINDOW);
|
||||||
registerTradeList1_19(ClientboundPackets1_20_3.TRADE_LIST);
|
registerCreativeInvAction(ServerboundPackets1_20_5.CREATIVE_INVENTORY_ACTION);
|
||||||
registerCreativeInvAction(ServerboundPackets1_20_3.CREATIVE_INVENTORY_ACTION);
|
|
||||||
registerWindowPropertyEnchantmentHandler(ClientboundPackets1_20_3.WINDOW_PROPERTY);
|
registerWindowPropertyEnchantmentHandler(ClientboundPackets1_20_3.WINDOW_PROPERTY);
|
||||||
registerSpawnParticle1_19(ClientboundPackets1_20_3.SPAWN_PARTICLE);
|
|
||||||
|
|
||||||
// TODO Explosion contains particles now
|
;
|
||||||
|
|
||||||
new RecipeRewriter1_20_3<>(protocol).register(ClientboundPackets1_20_3.DECLARE_RECIPES);
|
protocol.registerClientbound(ClientboundPackets1_20_3.SPAWN_PARTICLE, wrapper -> {
|
||||||
|
final int particleId = wrapper.read(Type.VAR_INT);
|
||||||
|
|
||||||
|
wrapper.passthrough(Type.BOOLEAN); // Long Distance
|
||||||
|
wrapper.passthrough(Type.DOUBLE); // X
|
||||||
|
wrapper.passthrough(Type.DOUBLE); // Y
|
||||||
|
wrapper.passthrough(Type.DOUBLE); // Z
|
||||||
|
wrapper.passthrough(Type.FLOAT); // Offset X
|
||||||
|
wrapper.passthrough(Type.FLOAT); // Offset Y
|
||||||
|
wrapper.passthrough(Type.FLOAT); // Offset Z
|
||||||
|
wrapper.passthrough(Type.FLOAT); // Particle Data
|
||||||
|
wrapper.passthrough(Type.INT); // Particle Count
|
||||||
|
|
||||||
|
final Particle particle = new Particle(particleId);
|
||||||
|
wrapper.read(new ParticleDataReader(particle));
|
||||||
|
|
||||||
|
rewriteParticle(particle);
|
||||||
|
wrapper.write(Types1_20_3.PARTICLE, particle);
|
||||||
|
});
|
||||||
|
|
||||||
|
protocol.registerClientbound(ClientboundPackets1_20_3.EXPLOSION, wrapper -> {
|
||||||
|
wrapper.passthrough(Type.DOUBLE); // X
|
||||||
|
wrapper.passthrough(Type.DOUBLE); // Y
|
||||||
|
wrapper.passthrough(Type.DOUBLE); // Z
|
||||||
|
wrapper.passthrough(Type.FLOAT); // Power
|
||||||
|
final int blocks = wrapper.passthrough(Type.VAR_INT);
|
||||||
|
for (int i = 0; i < blocks; i++) {
|
||||||
|
wrapper.passthrough(Type.BYTE); // Relative X
|
||||||
|
wrapper.passthrough(Type.BYTE); // Relative Y
|
||||||
|
wrapper.passthrough(Type.BYTE); // Relative Z
|
||||||
|
}
|
||||||
|
wrapper.passthrough(Type.FLOAT); // Knockback X
|
||||||
|
wrapper.passthrough(Type.FLOAT); // Knockback Y
|
||||||
|
wrapper.passthrough(Type.FLOAT); // Knockback Z
|
||||||
|
wrapper.passthrough(Type.VAR_INT); // Block interaction type
|
||||||
|
|
||||||
|
final Particle smallExplosionParticle = wrapper.passthrough(Types1_20_3.PARTICLE);
|
||||||
|
final Particle largeExplosionParticle = wrapper.passthrough(Types1_20_3.PARTICLE);
|
||||||
|
protocol.getEntityRewriter().rewriteParticle(smallExplosionParticle);
|
||||||
|
protocol.getEntityRewriter().rewriteParticle(largeExplosionParticle);
|
||||||
|
|
||||||
|
wrapper.write(Type.VAR_INT, 0); // "Empty" registry id to instead use the resource location that follows after
|
||||||
|
});
|
||||||
|
|
||||||
|
protocol.registerClientbound(ClientboundPackets1_20_3.TRADE_LIST, wrapper -> {
|
||||||
|
wrapper.passthrough(Type.VAR_INT); // Container id
|
||||||
|
final int size = wrapper.passthrough(Type.VAR_INT);
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
handleItemToClient(wrapper.passthrough(Type.ITEM1_20_2)); // Input
|
||||||
|
handleItemToClient(wrapper.passthrough(Type.ITEM1_20_2)); // Output
|
||||||
|
handleItemToClient(wrapper.passthrough(Type.ITEM1_20_2)); // Second Item
|
||||||
|
wrapper.passthrough(Type.BOOLEAN); // Trade disabled
|
||||||
|
wrapper.passthrough(Type.INT); // Number of tools uses
|
||||||
|
wrapper.passthrough(Type.INT); // Maximum number of trade uses
|
||||||
|
wrapper.passthrough(Type.INT); // XP
|
||||||
|
wrapper.passthrough(Type.INT); // Special price
|
||||||
|
wrapper.passthrough(Type.FLOAT); // Price multiplier
|
||||||
|
wrapper.passthrough(Type.INT); // Demand
|
||||||
|
|
||||||
|
wrapper.write(Type.BOOLEAN, false); // Ignore tags
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
final RecipeRewriter1_20_3<ClientboundPackets1_20_3> recipeRewriter = new RecipeRewriter1_20_3<>(protocol);
|
||||||
|
protocol.registerClientbound(ClientboundPackets1_20_3.DECLARE_RECIPES, wrapper -> {
|
||||||
|
final int size = wrapper.passthrough(Type.VAR_INT);
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
// Change order and write the type as an int
|
||||||
|
final String type = wrapper.read(Type.STRING);
|
||||||
|
wrapper.passthrough(Type.STRING); // Recipe Identifier
|
||||||
|
|
||||||
|
wrapper.write(Type.VAR_INT, protocol.getMappingData().getRecipeSerializerMappings().mappedId(type));
|
||||||
|
recipeRewriter.handleRecipeType(wrapper, Key.stripMinecraftNamespace(type));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final class ParticleDataReader extends Type<Void> {
|
||||||
|
|
||||||
|
private final Particle particle;
|
||||||
|
|
||||||
|
private ParticleDataReader(Particle particle) {
|
||||||
|
super(Void.class);
|
||||||
|
this.particle = particle;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(final ByteBuf buffer, final Void value) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void read(final ByteBuf buffer) throws Exception {
|
||||||
|
// Extract the particle data to put into a particle
|
||||||
|
Types1_20_3.PARTICLE.readData(buffer, particle);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -66,6 +66,13 @@ public final class EntityPacketRewriter1_20_5 extends EntityRewriter<Clientbound
|
|||||||
map(Type.BOOLEAN); // Limited crafting
|
map(Type.BOOLEAN); // Limited crafting
|
||||||
map(Type.STRING); // Dimension key
|
map(Type.STRING); // Dimension key
|
||||||
map(Type.STRING); // World
|
map(Type.STRING); // World
|
||||||
|
map(Type.LONG); // Seed
|
||||||
|
map(Type.BYTE); // Gamemode
|
||||||
|
map(Type.BYTE); // Previous gamemode
|
||||||
|
map(Type.BOOLEAN); // Debug
|
||||||
|
map(Type.BOOLEAN); // Flat
|
||||||
|
map(Type.OPTIONAL_GLOBAL_POSITION); // Last death location
|
||||||
|
create(Type.BOOLEAN, false); // Enforces secure chat - moved from server data (which is unfortunately sent a while after this)
|
||||||
handler(worldDataTrackerHandlerByKey()); // Tracks world height and name for chunk data and entity (un)tracking
|
handler(worldDataTrackerHandlerByKey()); // Tracks world height and name for chunk data and entity (un)tracking
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -536,7 +536,7 @@ public abstract class EntityRewriter<C extends ClientboundPacketType, T extends
|
|||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
protected void rewriteParticle(Particle particle) {
|
public void rewriteParticle(Particle particle) {
|
||||||
ParticleMappings mappings = protocol.getMappingData().getParticleMappings();
|
ParticleMappings mappings = protocol.getMappingData().getParticleMappings();
|
||||||
int id = particle.getId();
|
int id = particle.getId();
|
||||||
if (mappings.isBlockParticle(id)) {
|
if (mappings.isBlockParticle(id)) {
|
||||||
|
@ -19,6 +19,7 @@ package com.viaversion.viaversion.rewriter;
|
|||||||
|
|
||||||
import com.viaversion.viaversion.api.data.Mappings;
|
import com.viaversion.viaversion.api.data.Mappings;
|
||||||
import com.viaversion.viaversion.api.data.ParticleMappings;
|
import com.viaversion.viaversion.api.data.ParticleMappings;
|
||||||
|
import com.viaversion.viaversion.api.minecraft.Particle;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
import com.viaversion.viaversion.api.protocol.Protocol;
|
import com.viaversion.viaversion.api.protocol.Protocol;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
||||||
@ -281,6 +282,28 @@ public class ItemRewriter<C extends ClientboundPacketType, S extends Serverbound
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void registerTradeList1_20_5(C packetType) {
|
||||||
|
protocol.registerClientbound(packetType, wrapper -> {
|
||||||
|
wrapper.passthrough(Type.VAR_INT); // Container id
|
||||||
|
int size = wrapper.passthrough(Type.VAR_INT);
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
handleItemToClient(wrapper.passthrough(itemType)); // Input
|
||||||
|
handleItemToClient(wrapper.passthrough(itemType)); // Output
|
||||||
|
handleItemToClient(wrapper.passthrough(itemType)); // Second Item
|
||||||
|
|
||||||
|
wrapper.passthrough(Type.BOOLEAN); // Trade disabled
|
||||||
|
wrapper.passthrough(Type.INT); // Number of tools uses
|
||||||
|
wrapper.passthrough(Type.INT); // Maximum number of trade uses
|
||||||
|
|
||||||
|
wrapper.passthrough(Type.INT); // XP
|
||||||
|
wrapper.passthrough(Type.INT); // Special price
|
||||||
|
wrapper.passthrough(Type.FLOAT); // Price multiplier
|
||||||
|
wrapper.passthrough(Type.INT); // Demand
|
||||||
|
wrapper.passthrough(Type.BOOLEAN); // Ignore tags
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public void registerAdvancements(C packetType, Type<Item> type) {
|
public void registerAdvancements(C packetType, Type<Item> type) {
|
||||||
protocol.registerClientbound(packetType, wrapper -> {
|
protocol.registerClientbound(packetType, wrapper -> {
|
||||||
wrapper.passthrough(Type.BOOLEAN); // Reset/clear
|
wrapper.passthrough(Type.BOOLEAN); // Reset/clear
|
||||||
@ -420,6 +443,57 @@ public class ItemRewriter<C extends ClientboundPacketType, S extends Serverbound
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void registerSpawnParticle1_20_5(C packetType, Type<Particle> unmappedParticleType, Type<Particle> mappedParticleType) {
|
||||||
|
protocol.registerClientbound(packetType, new PacketHandlers() {
|
||||||
|
@Override
|
||||||
|
public void register() {
|
||||||
|
map(Type.BOOLEAN); // Long Distance
|
||||||
|
map(Type.DOUBLE); // X
|
||||||
|
map(Type.DOUBLE); // Y
|
||||||
|
map(Type.DOUBLE); // Z
|
||||||
|
map(Type.FLOAT); // Offset X
|
||||||
|
map(Type.FLOAT); // Offset Y
|
||||||
|
map(Type.FLOAT); // Offset Z
|
||||||
|
map(Type.FLOAT); // Particle Data
|
||||||
|
map(Type.INT); // Particle Count
|
||||||
|
handler(wrapper -> {
|
||||||
|
final Particle particle = wrapper.read(unmappedParticleType);
|
||||||
|
rewriteParticle(particle);
|
||||||
|
wrapper.write(mappedParticleType, particle);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerExplosion(C packetType, Type<Particle> unmappedParticleType, Type<Particle> mappedParticleType) {
|
||||||
|
final SoundRewriter<C> cSoundRewriter = new SoundRewriter<>(protocol);
|
||||||
|
protocol.registerClientbound(packetType, wrapper -> {
|
||||||
|
wrapper.passthrough(Type.DOUBLE); // X
|
||||||
|
wrapper.passthrough(Type.DOUBLE); // Y
|
||||||
|
wrapper.passthrough(Type.DOUBLE); // Z
|
||||||
|
wrapper.passthrough(Type.FLOAT); // Power
|
||||||
|
final int blocks = wrapper.passthrough(Type.VAR_INT);
|
||||||
|
for (int i = 0; i < blocks; i++) {
|
||||||
|
wrapper.passthrough(Type.BYTE); // Relative X
|
||||||
|
wrapper.passthrough(Type.BYTE); // Relative Y
|
||||||
|
wrapper.passthrough(Type.BYTE); // Relative Z
|
||||||
|
}
|
||||||
|
wrapper.passthrough(Type.FLOAT); // Knockback X
|
||||||
|
wrapper.passthrough(Type.FLOAT); // Knockback Y
|
||||||
|
wrapper.passthrough(Type.FLOAT); // Knockback Z
|
||||||
|
wrapper.passthrough(Type.VAR_INT); // Block interaction type
|
||||||
|
|
||||||
|
final Particle smallExplosionParticle = wrapper.read(unmappedParticleType);
|
||||||
|
final Particle largeExplosionParticle = wrapper.read(unmappedParticleType);
|
||||||
|
wrapper.write(mappedParticleType, smallExplosionParticle);
|
||||||
|
wrapper.write(mappedParticleType, largeExplosionParticle);
|
||||||
|
rewriteParticle(smallExplosionParticle);
|
||||||
|
rewriteParticle(largeExplosionParticle);
|
||||||
|
|
||||||
|
cSoundRewriter.soundHolderHandler().handle(wrapper);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public PacketHandler getSpawnParticleHandler() {
|
public PacketHandler getSpawnParticleHandler() {
|
||||||
return getSpawnParticleHandler(Type.INT);
|
return getSpawnParticleHandler(Type.INT);
|
||||||
}
|
}
|
||||||
@ -462,4 +536,20 @@ public class ItemRewriter<C extends ClientboundPacketType, S extends Serverbound
|
|||||||
public PacketHandler itemToServerHandler(Type<Item> type) {
|
public PacketHandler itemToServerHandler(Type<Item> type) {
|
||||||
return wrapper -> handleItemToServer(wrapper.get(type, 0));
|
return wrapper -> handleItemToServer(wrapper.get(type, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void rewriteParticle(Particle particle) {
|
||||||
|
ParticleMappings mappings = protocol.getMappingData().getParticleMappings();
|
||||||
|
int id = particle.getId();
|
||||||
|
if (mappings.isBlockParticle(id)) {
|
||||||
|
Particle.ParticleData<Integer> data = particle.getArgument(0);
|
||||||
|
data.setValue(protocol.getMappingData().getNewBlockStateId(data.getValue()));
|
||||||
|
} else if (mappings.isItemParticle(id)) {
|
||||||
|
Particle.ParticleData<Item> data = particle.getArgument(0);
|
||||||
|
Item item = data.getValue();
|
||||||
|
handleItemToClient(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
particle.setId(protocol.getMappingData().getNewParticleId(id));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -76,6 +76,19 @@ public class RecipeRewriter<C extends ClientboundPacketType> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void register1_20_5(C packetType) {
|
||||||
|
protocol.registerClientbound(packetType, wrapper -> {
|
||||||
|
int size = wrapper.passthrough(Type.VAR_INT);
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
wrapper.passthrough(Type.STRING);// Recipe Identifier
|
||||||
|
|
||||||
|
final int typeId = wrapper.passthrough(Type.VAR_INT);
|
||||||
|
final String type = protocol.getMappingData().getRecipeSerializerMappings().identifier(typeId);
|
||||||
|
handleRecipeType(wrapper, type);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public void handleCraftingShaped(PacketWrapper wrapper) throws Exception {
|
public void handleCraftingShaped(PacketWrapper wrapper) throws Exception {
|
||||||
int ingredientsNo = wrapper.passthrough(Type.VAR_INT) * wrapper.passthrough(Type.VAR_INT);
|
int ingredientsNo = wrapper.passthrough(Type.VAR_INT) * wrapper.passthrough(Type.VAR_INT);
|
||||||
wrapper.passthrough(Type.STRING); // Group
|
wrapper.passthrough(Type.STRING); // Group
|
||||||
|
@ -51,9 +51,13 @@ public class SoundRewriter<C extends ClientboundPacketType> {
|
|||||||
this.registerSound(packetType);
|
this.registerSound(packetType);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Not for entity sounds
|
// Also for entity sounds starting with 1.20.5
|
||||||
public void register1_19_3Sound(C packetType) {
|
public void register1_19_3Sound(C packetType) {
|
||||||
protocol.registerClientbound(packetType, wrapper -> {
|
protocol.registerClientbound(packetType, soundHolderHandler());
|
||||||
|
}
|
||||||
|
|
||||||
|
public PacketHandler soundHolderHandler() {
|
||||||
|
return wrapper -> {
|
||||||
final int soundId = wrapper.read(Type.VAR_INT);
|
final int soundId = wrapper.read(Type.VAR_INT);
|
||||||
if (soundId == 0) {
|
if (soundId == 0) {
|
||||||
// Is followed by the resource loation
|
// Is followed by the resource loation
|
||||||
@ -68,7 +72,7 @@ public class SoundRewriter<C extends ClientboundPacketType> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
wrapper.write(Type.VAR_INT, mappedId + 1);
|
wrapper.write(Type.VAR_INT, mappedId + 1);
|
||||||
});
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public PacketHandler getSoundHandler() {
|
public PacketHandler getSoundHandler() {
|
||||||
|
Binäre Datei nicht angezeigt.
Binäre Datei nicht angezeigt.
@ -1,5 +1,5 @@
|
|||||||
# Project properties - we put these here so they can be modified without causing a recompile of the build scripts
|
# Project properties - we put these here so they can be modified without causing a recompile of the build scripts
|
||||||
projectVersion=4.10.0-23w51b-SNAPSHOT
|
projectVersion=4.10.0-24w03a-SNAPSHOT
|
||||||
|
|
||||||
# Smile emoji
|
# Smile emoji
|
||||||
mcVersions=1.20.4, 1.20.3, 1.20.2, 1.20.1, 1.20, 1.19.4, 1.19.3, 1.19.2, 1.19.1, 1.19, 1.18.2, 1.18.1, 1.18, 1.17.1, 1.17, 1.16.5, 1.16.4, 1.16.3, 1.16.2, 1.16.1, 1.16, 1.15.2, 1.15.1, 1.15, 1.14.4, 1.14.3, 1.14.2, 1.14.1, 1.14, 1.13.2, 1.13.1, 1.13, 1.12.2, 1.12.1, 1.12, 1.11.2, 1.11.1, 1.11, 1.10.2, 1.10.1, 1.10, 1.9.4, 1.9.3, 1.9.2, 1.9.1, 1.9, 1.8.9
|
mcVersions=1.20.4, 1.20.3, 1.20.2, 1.20.1, 1.20, 1.19.4, 1.19.3, 1.19.2, 1.19.1, 1.19, 1.18.2, 1.18.1, 1.18, 1.17.1, 1.17, 1.16.5, 1.16.4, 1.16.3, 1.16.2, 1.16.1, 1.16, 1.15.2, 1.15.1, 1.15, 1.14.4, 1.14.3, 1.14.2, 1.14.1, 1.14, 1.13.2, 1.13.1, 1.13, 1.12.2, 1.12.1, 1.12, 1.11.2, 1.11.1, 1.11, 1.10.2, 1.10.1, 1.10, 1.9.4, 1.9.3, 1.9.2, 1.9.1, 1.9, 1.8.9
|
||||||
|
@ -26,10 +26,11 @@ import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
|||||||
import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType;
|
import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State;
|
import com.viaversion.viaversion.api.protocol.packet.State;
|
||||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.packet.ServerboundConfigurationPackets1_20_2;
|
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ClientboundConfigurationPackets1_20_3;
|
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ClientboundConfigurationPackets1_20_3;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ClientboundPackets1_20_3;
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.packet.ClientboundConfigurationPackets1_20_5;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ServerboundPackets1_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.packet.ServerboundConfigurationPackets1_20_5;
|
||||||
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.packet.ServerboundPackets1_20_5;
|
||||||
import com.viaversion.viaversion.rewriter.SoundRewriter;
|
import com.viaversion.viaversion.rewriter.SoundRewriter;
|
||||||
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
||||||
import com.viaversion.viaversion.rewriter.TagRewriter;
|
import com.viaversion.viaversion.rewriter.TagRewriter;
|
||||||
@ -38,13 +39,13 @@ import com.viaversion.viaversion.template.protocols.rewriter.EntityPacketRewrite
|
|||||||
|
|
||||||
// Placeholders to replace (in the entire package):
|
// Placeholders to replace (in the entire package):
|
||||||
// Protocol1_99To_98, EntityPacketRewriter1_99, BlockItemPacketRewriter1_99
|
// Protocol1_99To_98, EntityPacketRewriter1_99, BlockItemPacketRewriter1_99
|
||||||
// ClientboundPackets1_20_3
|
// ClientboundPackets1_20_5
|
||||||
// ServerboundPackets1_20_3
|
// ServerboundPackets1_20_5
|
||||||
// ClientboundConfigurationPackets1_20_3
|
// ClientboundConfigurationPackets1_20_3
|
||||||
// ServerboundConfigurationPackets1_20_2
|
// ServerboundConfigurationPackets1_20_2
|
||||||
// Entity1_19_4Types (MAPPED type)
|
// Entity1_19_4Types (MAPPED type)
|
||||||
// 1.99, 1.98
|
// 1.99, 1.98
|
||||||
public final class Protocol1_99To_98 extends AbstractProtocol<ClientboundPackets1_20_3, ClientboundPackets1_20_3, ServerboundPackets1_20_3, ServerboundPackets1_20_3> {
|
public final class Protocol1_99To_98 extends AbstractProtocol<ClientboundPackets1_20_5, ClientboundPackets1_20_5, ServerboundPackets1_20_5, ServerboundPackets1_20_5> {
|
||||||
|
|
||||||
public static final MappingData MAPPINGS = new MappingDataBase("1.98", "1.99");
|
public static final MappingData MAPPINGS = new MappingDataBase("1.98", "1.99");
|
||||||
private final EntityPacketRewriter1_99 entityRewriter = new EntityPacketRewriter1_99(this);
|
private final EntityPacketRewriter1_99 entityRewriter = new EntityPacketRewriter1_99(this);
|
||||||
@ -52,7 +53,7 @@ public final class Protocol1_99To_98 extends AbstractProtocol<ClientboundPackets
|
|||||||
|
|
||||||
public Protocol1_99To_98() {
|
public Protocol1_99To_98() {
|
||||||
// Passing the class types into the super constructor is needed for automatic packet type id remapping, but can otherwise be omitted
|
// Passing the class types into the super constructor is needed for automatic packet type id remapping, but can otherwise be omitted
|
||||||
super(ClientboundPackets1_20_3.class, ClientboundPackets1_20_3.class, ServerboundPackets1_20_3.class, ServerboundPackets1_20_3.class);
|
super(ClientboundPackets1_20_5.class, ClientboundPackets1_20_5.class, ServerboundPackets1_20_5.class, ServerboundPackets1_20_5.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -60,20 +61,20 @@ public final class Protocol1_99To_98 extends AbstractProtocol<ClientboundPackets
|
|||||||
super.registerPackets();
|
super.registerPackets();
|
||||||
|
|
||||||
// Registers renames etc. as well as registry type id changes
|
// Registers renames etc. as well as registry type id changes
|
||||||
final TagRewriter<ClientboundPackets1_20_3> tagRewriter = new TagRewriter<>(this);
|
final TagRewriter<ClientboundPackets1_20_5> tagRewriter = new TagRewriter<>(this);
|
||||||
tagRewriter.registerGeneric(ClientboundPackets1_20_3.TAGS);
|
tagRewriter.registerGeneric(ClientboundPackets1_20_5.TAGS);
|
||||||
tagRewriter.registerGeneric(State.CONFIGURATION, ClientboundConfigurationPackets1_20_3.UPDATE_TAGS);
|
tagRewriter.registerGeneric(State.CONFIGURATION, ClientboundConfigurationPackets1_20_3.UPDATE_TAGS);
|
||||||
|
|
||||||
// Registers sound id changes
|
// Registers sound id changes
|
||||||
final SoundRewriter<ClientboundPackets1_20_3> soundRewriter = new SoundRewriter<>(this);
|
final SoundRewriter<ClientboundPackets1_20_5> soundRewriter = new SoundRewriter<>(this);
|
||||||
soundRewriter.register1_19_3Sound(ClientboundPackets1_20_3.SOUND);
|
soundRewriter.register1_19_3Sound(ClientboundPackets1_20_5.SOUND);
|
||||||
soundRewriter.registerSound(ClientboundPackets1_20_3.ENTITY_SOUND);
|
soundRewriter.register1_19_3Sound(ClientboundPackets1_20_5.ENTITY_SOUND);
|
||||||
|
|
||||||
// Registers registry type id changes as well as stat id changes if also included in the json mappings
|
// Registers registry type id changes as well as stat id changes if also included in the json mappings
|
||||||
new StatisticsRewriter<>(this).register(ClientboundPackets1_20_3.STATISTICS);
|
new StatisticsRewriter<>(this).register(ClientboundPackets1_20_5.STATISTICS);
|
||||||
|
|
||||||
// Uncomment if an existing type changed serialization format. Mappings for argument type keys can also be defined in mapping files
|
// Uncomment if an existing type changed serialization format. Mappings for argument type keys can also be defined in mapping files
|
||||||
/*final CommandRewriter1_19_4<ClientboundPackets1_20_3> commandRewriter = new CommandRewriter1_19_4<ClientboundPackets1_20_3>(this) {
|
/*final CommandRewriter1_19_4<ClientboundPackets1_20_5> commandRewriter = new CommandRewriter1_19_4<ClientboundPackets1_20_5>(this) {
|
||||||
@Override
|
@Override
|
||||||
public void handleArgument(final PacketWrapper wrapper, final String argumentType) throws Exception {
|
public void handleArgument(final PacketWrapper wrapper, final String argumentType) throws Exception {
|
||||||
if (argumentType.equals("minecraft:abc")) {
|
if (argumentType.equals("minecraft:abc")) {
|
||||||
@ -83,7 +84,7 @@ public final class Protocol1_99To_98 extends AbstractProtocol<ClientboundPackets
|
|||||||
super.handleArgument(wrapper, argumentType);
|
super.handleArgument(wrapper, argumentType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.registerDeclareCommands1_19(ClientboundPackets1_20_3.DECLARE_COMMANDS);*/
|
}.registerDeclareCommands1_19(ClientboundPackets1_20_5.DECLARE_COMMANDS);*/
|
||||||
|
|
||||||
// TODO Attributes
|
// TODO Attributes
|
||||||
}
|
}
|
||||||
@ -132,11 +133,11 @@ public final class Protocol1_99To_98 extends AbstractProtocol<ClientboundPackets
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ClientboundPacketType clientboundFinishConfigurationPacket() {
|
protected ClientboundPacketType clientboundFinishConfigurationPacket() {
|
||||||
return ClientboundConfigurationPackets1_20_3.FINISH_CONFIGURATION;
|
return ClientboundConfigurationPackets1_20_5.FINISH_CONFIGURATION;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ServerboundPacketType serverboundFinishConfigurationPacket() {
|
protected ServerboundPacketType serverboundFinishConfigurationPacket() {
|
||||||
return ServerboundConfigurationPackets1_20_2.FINISH_CONFIGURATION;
|
return ServerboundConfigurationPackets1_20_5.FINISH_CONFIGURATION;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -19,9 +19,10 @@ package com.viaversion.viaversion.template.protocols.rewriter;
|
|||||||
|
|
||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
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.protocols.protocol1_20_3to1_20_2.packet.ClientboundPackets1_20_3;
|
import com.viaversion.viaversion.api.type.types.version.Types1_20_3;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ServerboundPackets1_20_3;
|
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.rewriter.RecipeRewriter1_20_3;
|
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.rewriter.RecipeRewriter1_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.packet.ServerboundPackets1_20_5;
|
||||||
import com.viaversion.viaversion.rewriter.BlockRewriter;
|
import com.viaversion.viaversion.rewriter.BlockRewriter;
|
||||||
import com.viaversion.viaversion.rewriter.ItemRewriter;
|
import com.viaversion.viaversion.rewriter.ItemRewriter;
|
||||||
import com.viaversion.viaversion.template.protocols.Protocol1_99To_98;
|
import com.viaversion.viaversion.template.protocols.Protocol1_99To_98;
|
||||||
@ -29,7 +30,7 @@ import com.viaversion.viaversion.template.protocols.Protocol1_99To_98;
|
|||||||
// To replace if needed:
|
// To replace if needed:
|
||||||
// ChunkType1_20_2
|
// ChunkType1_20_2
|
||||||
// RecipeRewriter1_20_3
|
// RecipeRewriter1_20_3
|
||||||
public final class BlockItemPacketRewriter1_99 extends ItemRewriter<ClientboundPackets1_20_3, ServerboundPackets1_20_3, Protocol1_99To_98> {
|
public final class BlockItemPacketRewriter1_99 extends ItemRewriter<ClientboundPackets1_20_5, ServerboundPackets1_20_5, Protocol1_99To_98> {
|
||||||
|
|
||||||
public BlockItemPacketRewriter1_99(final Protocol1_99To_98 protocol) {
|
public BlockItemPacketRewriter1_99(final Protocol1_99To_98 protocol) {
|
||||||
super(protocol, Type.ITEM1_20_2, Type.ITEM1_20_2_ARRAY);
|
super(protocol, Type.ITEM1_20_2, Type.ITEM1_20_2_ARRAY);
|
||||||
@ -40,33 +41,32 @@ public final class BlockItemPacketRewriter1_99 extends ItemRewriter<ClientboundP
|
|||||||
// Register block and block state id changes
|
// Register block and block state id changes
|
||||||
// Other places using block state id mappings: Spawn particle, entity metadata, entity spawn (falling blocks)
|
// Other places using block state id mappings: Spawn particle, entity metadata, entity spawn (falling blocks)
|
||||||
// Tags and statistics use block (!) ids
|
// Tags and statistics use block (!) ids
|
||||||
final BlockRewriter<ClientboundPackets1_20_3> blockRewriter = BlockRewriter.for1_20_2(protocol);
|
final BlockRewriter<ClientboundPackets1_20_5> blockRewriter = BlockRewriter.for1_20_2(protocol);
|
||||||
blockRewriter.registerBlockAction(ClientboundPackets1_20_3.BLOCK_ACTION);
|
blockRewriter.registerBlockAction(ClientboundPackets1_20_5.BLOCK_ACTION);
|
||||||
blockRewriter.registerBlockChange(ClientboundPackets1_20_3.BLOCK_CHANGE);
|
blockRewriter.registerBlockChange(ClientboundPackets1_20_5.BLOCK_CHANGE);
|
||||||
blockRewriter.registerVarLongMultiBlockChange1_20(ClientboundPackets1_20_3.MULTI_BLOCK_CHANGE);
|
blockRewriter.registerVarLongMultiBlockChange1_20(ClientboundPackets1_20_5.MULTI_BLOCK_CHANGE);
|
||||||
blockRewriter.registerEffect(ClientboundPackets1_20_3.EFFECT, 1010, 2001);
|
blockRewriter.registerEffect(ClientboundPackets1_20_5.EFFECT, 1010, 2001);
|
||||||
blockRewriter.registerChunkData1_19(ClientboundPackets1_20_3.CHUNK_DATA, ChunkType1_20_2::new);
|
blockRewriter.registerChunkData1_19(ClientboundPackets1_20_5.CHUNK_DATA, ChunkType1_20_2::new);
|
||||||
blockRewriter.registerBlockEntityData(ClientboundPackets1_20_3.BLOCK_ENTITY_DATA);
|
blockRewriter.registerBlockEntityData(ClientboundPackets1_20_5.BLOCK_ENTITY_DATA);
|
||||||
|
|
||||||
// Registers item id changes
|
// Registers item id changes
|
||||||
// Other places using item ids are: Entity metadata, tags, statistics, effect
|
// Other places using item ids are: Entity metadata, tags, statistics, effect
|
||||||
// registerOpenWindow(ClientboundPackets1_20_3.OPEN_WINDOW); - If a new container type was added
|
// registerOpenWindow(ClientboundPackets1_20_5.OPEN_WINDOW); - If a new container type was added
|
||||||
registerSetCooldown(ClientboundPackets1_20_3.COOLDOWN);
|
registerSetCooldown(ClientboundPackets1_20_5.COOLDOWN);
|
||||||
registerWindowItems1_17_1(ClientboundPackets1_20_3.WINDOW_ITEMS);
|
registerWindowItems1_17_1(ClientboundPackets1_20_5.WINDOW_ITEMS);
|
||||||
registerSetSlot1_17_1(ClientboundPackets1_20_3.SET_SLOT);
|
registerSetSlot1_17_1(ClientboundPackets1_20_5.SET_SLOT);
|
||||||
registerAdvancements1_20_3(ClientboundPackets1_20_3.ADVANCEMENTS);
|
registerAdvancements1_20_3(ClientboundPackets1_20_5.ADVANCEMENTS);
|
||||||
registerEntityEquipmentArray(ClientboundPackets1_20_3.ENTITY_EQUIPMENT);
|
registerEntityEquipmentArray(ClientboundPackets1_20_5.ENTITY_EQUIPMENT);
|
||||||
registerClickWindow1_17_1(ServerboundPackets1_20_3.CLICK_WINDOW);
|
registerClickWindow1_17_1(ServerboundPackets1_20_5.CLICK_WINDOW);
|
||||||
registerTradeList1_19(ClientboundPackets1_20_3.TRADE_LIST);
|
registerTradeList1_20_5(ClientboundPackets1_20_5.TRADE_LIST);
|
||||||
registerCreativeInvAction(ServerboundPackets1_20_3.CREATIVE_INVENTORY_ACTION);
|
registerCreativeInvAction(ServerboundPackets1_20_5.CREATIVE_INVENTORY_ACTION);
|
||||||
registerWindowPropertyEnchantmentHandler(ClientboundPackets1_20_3.WINDOW_PROPERTY);
|
registerWindowPropertyEnchantmentHandler(ClientboundPackets1_20_5.WINDOW_PROPERTY);
|
||||||
registerSpawnParticle1_19(ClientboundPackets1_20_3.SPAWN_PARTICLE);
|
registerSpawnParticle1_20_5(ClientboundPackets1_20_5.SPAWN_PARTICLE, Types1_20_3.PARTICLE, Types1_20_3.PARTICLE);
|
||||||
|
registerExplosion(ClientboundPackets1_20_5.EXPLOSION, Types1_20_3.PARTICLE, Types1_20_3.PARTICLE); // Rewrites the included sound and particles
|
||||||
|
|
||||||
// TODO Explosion contains particles now
|
new RecipeRewriter1_20_3<>(protocol).register(ClientboundPackets1_20_5.DECLARE_RECIPES);
|
||||||
|
|
||||||
new RecipeRewriter1_20_3<>(protocol).register(ClientboundPackets1_20_3.DECLARE_RECIPES);
|
|
||||||
// OR do this if serialization of recipes changed and override the relevant method
|
// OR do this if serialization of recipes changed and override the relevant method
|
||||||
// Add new serializers to RecipeRewriter, or extend the last one for changes
|
// Add new serializers to RecipeRewriter, or extend the last one for changes
|
||||||
// new RecipeRewriter1_20_3<ClientboundPackets1_20_3>(this) {}.register(ClientboundPackets1_20_3.DECLARE_RECIPES);
|
// new RecipeRewriter1_20_3<ClientboundPackets1_20_5>(this) {}.register1_20_5(ClientboundPackets1_20_5.DECLARE_RECIPES);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -24,14 +24,14 @@ import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
|||||||
import com.viaversion.viaversion.api.type.Type;
|
import com.viaversion.viaversion.api.type.Type;
|
||||||
import com.viaversion.viaversion.api.type.types.version.Types1_20_5;
|
import com.viaversion.viaversion.api.type.types.version.Types1_20_5;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ClientboundConfigurationPackets1_20_3;
|
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ClientboundConfigurationPackets1_20_3;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ClientboundPackets1_20_3;
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.packet.ClientboundPackets1_20_5;
|
||||||
import com.viaversion.viaversion.rewriter.EntityRewriter;
|
import com.viaversion.viaversion.rewriter.EntityRewriter;
|
||||||
import com.viaversion.viaversion.template.protocols.Protocol1_99To_98;
|
import com.viaversion.viaversion.template.protocols.Protocol1_99To_98;
|
||||||
|
|
||||||
// Replace if needed
|
// Replace if needed
|
||||||
// Types1_OLD
|
// Types1_OLD
|
||||||
// Types1_20_5
|
// Types1_20_5
|
||||||
public final class EntityPacketRewriter1_99 extends EntityRewriter<ClientboundPackets1_20_3, Protocol1_99To_98> {
|
public final class EntityPacketRewriter1_99 extends EntityRewriter<ClientboundPackets1_20_5, Protocol1_99To_98> {
|
||||||
|
|
||||||
public EntityPacketRewriter1_99(final Protocol1_99To_98 protocol) {
|
public EntityPacketRewriter1_99(final Protocol1_99To_98 protocol) {
|
||||||
super(protocol);
|
super(protocol);
|
||||||
@ -40,9 +40,9 @@ public final class EntityPacketRewriter1_99 extends EntityRewriter<ClientboundPa
|
|||||||
@Override
|
@Override
|
||||||
public void registerPackets() {
|
public void registerPackets() {
|
||||||
// Tracks entities, applies metadata rewrites registered below, untracks entities
|
// Tracks entities, applies metadata rewrites registered below, untracks entities
|
||||||
registerTrackerWithData1_19(ClientboundPackets1_20_3.SPAWN_ENTITY, EntityTypes1_20_5.FALLING_BLOCK);
|
registerTrackerWithData1_19(ClientboundPackets1_20_5.SPAWN_ENTITY, EntityTypes1_20_5.FALLING_BLOCK);
|
||||||
registerMetadataRewriter(ClientboundPackets1_20_3.ENTITY_METADATA, /*Types1_OLD.METADATA_LIST, */Types1_20_5.METADATA_LIST); // Specify old and new metadata list if changed
|
registerMetadataRewriter(ClientboundPackets1_20_5.ENTITY_METADATA, /*Types1_OLD.METADATA_LIST, */Types1_20_5.METADATA_LIST); // Specify old and new metadata list if changed
|
||||||
registerRemoveEntities(ClientboundPackets1_20_3.REMOVE_ENTITIES);
|
registerRemoveEntities(ClientboundPackets1_20_5.REMOVE_ENTITIES);
|
||||||
|
|
||||||
protocol.registerClientbound(State.CONFIGURATION, ClientboundConfigurationPackets1_20_3.REGISTRY_DATA, new PacketHandlers() {
|
protocol.registerClientbound(State.CONFIGURATION, ClientboundConfigurationPackets1_20_3.REGISTRY_DATA, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
@ -53,7 +53,7 @@ public final class EntityPacketRewriter1_99 extends EntityRewriter<ClientboundPa
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_20_3.JOIN_GAME, new PacketHandlers() {
|
protocol.registerClientbound(ClientboundPackets1_20_5.JOIN_GAME, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void register() {
|
public void register() {
|
||||||
map(Type.INT); // Entity id
|
map(Type.INT); // Entity id
|
||||||
@ -71,7 +71,7 @@ public final class EntityPacketRewriter1_99 extends EntityRewriter<ClientboundPa
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_20_3.RESPAWN, new PacketHandlers() {
|
protocol.registerClientbound(ClientboundPackets1_20_5.RESPAWN, new PacketHandlers() {
|
||||||
@Override
|
@Override
|
||||||
public void register() {
|
public void register() {
|
||||||
map(Type.STRING); // Dimension
|
map(Type.STRING); // Dimension
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren