Mirror von
https://github.com/ViaVersion/ViaVersion.git
synchronisiert 2024-10-05 01:31:05 +02:00
Directly send pong, plugin message, and keep alive in 1.20.2->1.20
Dieser Commit ist enthalten in:
Ursprung
bc0bef2e07
Commit
45d08e9066
@ -29,7 +29,6 @@ import com.viaversion.viaversion.api.protocol.AbstractProtocol;
|
|||||||
import com.viaversion.viaversion.api.protocol.packet.Direction;
|
import com.viaversion.viaversion.api.protocol.packet.Direction;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.packet.State;
|
import com.viaversion.viaversion.api.protocol.packet.State;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
|
||||||
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
|
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
|
||||||
import com.viaversion.viaversion.api.rewriter.EntityRewriter;
|
import com.viaversion.viaversion.api.rewriter.EntityRewriter;
|
||||||
import com.viaversion.viaversion.api.rewriter.ItemRewriter;
|
import com.viaversion.viaversion.api.rewriter.ItemRewriter;
|
||||||
@ -52,9 +51,8 @@ import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.storage.LastReso
|
|||||||
import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.storage.LastTags;
|
import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.storage.LastTags;
|
||||||
import com.viaversion.viaversion.rewriter.SoundRewriter;
|
import com.viaversion.viaversion.rewriter.SoundRewriter;
|
||||||
import com.viaversion.viaversion.util.Key;
|
import com.viaversion.viaversion.util.Key;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
public final class Protocol1_20_2To1_20 extends AbstractProtocol<ClientboundPackets1_19_4, ClientboundPackets1_20_2, ServerboundPackets1_19_4, ServerboundPackets1_20_2> {
|
public final class Protocol1_20_2To1_20 extends AbstractProtocol<ClientboundPackets1_19_4, ClientboundPackets1_20_2, ServerboundPackets1_19_4, ServerboundPackets1_20_2> {
|
||||||
|
|
||||||
@ -75,20 +73,8 @@ public final class Protocol1_20_2To1_20 extends AbstractProtocol<ClientboundPack
|
|||||||
soundRewriter.register1_19_3Sound(ClientboundPackets1_19_4.SOUND);
|
soundRewriter.register1_19_3Sound(ClientboundPackets1_19_4.SOUND);
|
||||||
soundRewriter.registerEntitySound(ClientboundPackets1_19_4.ENTITY_SOUND);
|
soundRewriter.registerEntitySound(ClientboundPackets1_19_4.ENTITY_SOUND);
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_19_4.PLUGIN_MESSAGE, wrapper -> {
|
registerClientbound(ClientboundPackets1_19_4.PLUGIN_MESSAGE, this::sanitizeCustomPayload);
|
||||||
final String channel = Key.namespaced(wrapper.passthrough(Type.STRING));
|
registerServerbound(ServerboundPackets1_20_2.PLUGIN_MESSAGE, this::sanitizeCustomPayload);
|
||||||
if (channel.equals("minecraft:brand")) {
|
|
||||||
wrapper.passthrough(Type.STRING);
|
|
||||||
wrapper.clearInputBuffer();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
registerServerbound(ServerboundPackets1_20_2.PLUGIN_MESSAGE, wrapper -> {
|
|
||||||
final String channel = Key.namespaced(wrapper.passthrough(Type.STRING));
|
|
||||||
if (channel.equals("minecraft:brand")) {
|
|
||||||
wrapper.passthrough(Type.STRING);
|
|
||||||
wrapper.clearInputBuffer();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
registerClientbound(ClientboundPackets1_19_4.RESOURCE_PACK, wrapper -> {
|
registerClientbound(ClientboundPackets1_19_4.RESOURCE_PACK, wrapper -> {
|
||||||
final String url = wrapper.passthrough(Type.STRING);
|
final String url = wrapper.passthrough(Type.STRING);
|
||||||
@ -164,9 +150,12 @@ public final class Protocol1_20_2To1_20 extends AbstractProtocol<ClientboundPack
|
|||||||
configurationState.setClientInformation(clientInformation);
|
configurationState.setClientInformation(clientInformation);
|
||||||
wrapper.cancel();
|
wrapper.cancel();
|
||||||
});
|
});
|
||||||
registerServerbound(State.CONFIGURATION, ServerboundConfigurationPackets1_20_2.CUSTOM_PAYLOAD.getId(), -1, queueServerboundPacket(ServerboundPackets1_20_2.PLUGIN_MESSAGE));
|
registerServerbound(State.CONFIGURATION, ServerboundConfigurationPackets1_20_2.CUSTOM_PAYLOAD.getId(), -1, wrapper -> {
|
||||||
registerServerbound(State.CONFIGURATION, ServerboundConfigurationPackets1_20_2.KEEP_ALIVE.getId(), -1, queueServerboundPacket(ServerboundPackets1_20_2.KEEP_ALIVE));
|
wrapper.setPacketType(ServerboundPackets1_19_4.PLUGIN_MESSAGE);
|
||||||
registerServerbound(State.CONFIGURATION, ServerboundConfigurationPackets1_20_2.PONG.getId(), -1, queueServerboundPacket(ServerboundPackets1_20_2.PONG));
|
sanitizeCustomPayload(wrapper);
|
||||||
|
});
|
||||||
|
registerServerbound(State.CONFIGURATION, ServerboundConfigurationPackets1_20_2.KEEP_ALIVE.getId(), -1, wrapper -> wrapper.setPacketType(ServerboundPackets1_19_4.KEEP_ALIVE));
|
||||||
|
registerServerbound(State.CONFIGURATION, ServerboundConfigurationPackets1_20_2.PONG.getId(), -1, wrapper -> wrapper.setPacketType(ServerboundPackets1_19_4.PONG));
|
||||||
|
|
||||||
// Cancel this, as it will always just be the response to a re-sent pack from us
|
// Cancel this, as it will always just be the response to a re-sent pack from us
|
||||||
registerServerbound(State.CONFIGURATION, ServerboundConfigurationPackets1_20_2.RESOURCE_PACK.getId(), -1, PacketWrapper::cancel);
|
registerServerbound(State.CONFIGURATION, ServerboundConfigurationPackets1_20_2.RESOURCE_PACK.getId(), -1, PacketWrapper::cancel);
|
||||||
@ -199,14 +188,6 @@ public final class Protocol1_20_2To1_20 extends AbstractProtocol<ClientboundPack
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private PacketHandler queueServerboundPacket(final ServerboundPackets1_20_2 packetType) {
|
|
||||||
return wrapper -> {
|
|
||||||
wrapper.setPacketType(packetType);
|
|
||||||
wrapper.user().get(ConfigurationState.class).addPacketToQueue(wrapper, false);
|
|
||||||
wrapper.cancel();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void transform(final Direction direction, final State state, final PacketWrapper packetWrapper) throws Exception {
|
public void transform(final Direction direction, final State state, final PacketWrapper packetWrapper) throws Exception {
|
||||||
if (direction == Direction.SERVERBOUND) {
|
if (direction == Direction.SERVERBOUND) {
|
||||||
@ -321,6 +302,14 @@ public final class Protocol1_20_2To1_20 extends AbstractProtocol<ClientboundPack
|
|||||||
protocolInfo.setServerState(State.PLAY);
|
protocolInfo.setServerState(State.PLAY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void sanitizeCustomPayload(final PacketWrapper wrapper) throws Exception {
|
||||||
|
final String channel = Key.namespaced(wrapper.passthrough(Type.STRING));
|
||||||
|
if (channel.equals("minecraft:brand")) {
|
||||||
|
wrapper.passthrough(Type.STRING);
|
||||||
|
wrapper.clearInputBuffer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MappingData getMappingData() {
|
public MappingData getMappingData() {
|
||||||
return MAPPINGS;
|
return MAPPINGS;
|
||||||
|
@ -34,6 +34,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
|||||||
|
|
||||||
public class ConfigurationState implements StorableObject {
|
public class ConfigurationState implements StorableObject {
|
||||||
|
|
||||||
|
private static final QueuedPacket[] EMPTY_PACKET_ARRAY = new QueuedPacket[0];
|
||||||
private final List<QueuedPacket> packetQueue = new ArrayList<>();
|
private final List<QueuedPacket> packetQueue = new ArrayList<>();
|
||||||
private BridgePhase bridgePhase = BridgePhase.NONE;
|
private BridgePhase bridgePhase = BridgePhase.NONE;
|
||||||
private QueuedPacket joinGamePacket;
|
private QueuedPacket joinGamePacket;
|
||||||
@ -117,7 +118,7 @@ public class ConfigurationState implements StorableObject {
|
|||||||
packetQueue.add(hasJoinGamePacket ? 1 : 0, toQueuedPacket(clientInformationPacket, false, true));
|
packetQueue.add(hasJoinGamePacket ? 1 : 0, toQueuedPacket(clientInformationPacket, false, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
final ConfigurationState.QueuedPacket[] queuedPackets = packetQueue.toArray(new ConfigurationState.QueuedPacket[0]);
|
final ConfigurationState.QueuedPacket[] queuedPackets = packetQueue.toArray(EMPTY_PACKET_ARRAY);
|
||||||
packetQueue.clear();
|
packetQueue.clear();
|
||||||
|
|
||||||
for (final ConfigurationState.QueuedPacket packet : queuedPackets) {
|
for (final ConfigurationState.QueuedPacket packet : queuedPackets) {
|
||||||
|
@ -18,10 +18,12 @@
|
|||||||
package com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.rewriter;
|
package com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.rewriter;
|
||||||
|
|
||||||
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.protocol.packet.PacketWrapper;
|
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
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.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_2to1_20.packet.ClientboundPackets1_20_2;
|
import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.packet.ClientboundPackets1_20_2;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.rewriter.RecipeRewriter1_20_2;
|
import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.rewriter.RecipeRewriter1_20_2;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.Protocol1_20_3To1_20_2;
|
import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.Protocol1_20_3To1_20_2;
|
||||||
@ -117,8 +119,8 @@ public final class BlockItemPacketRewriter1_20_3 extends ItemRewriter<Clientboun
|
|||||||
wrapper.passthrough(Type.FLOAT); // Knockback Z
|
wrapper.passthrough(Type.FLOAT); // Knockback Z
|
||||||
|
|
||||||
wrapper.write(Type.VAR_INT, 1); // Block interaction type - Destroy
|
wrapper.write(Type.VAR_INT, 1); // Block interaction type - Destroy
|
||||||
wrapper.write(Type.VAR_INT, protocol.getMappingData().getParticleMappings().mappedId("explosion")); // Small explosion particle
|
wrapper.write(Types1_20_3.PARTICLE, new Particle(protocol.getMappingData().getParticleMappings().mappedId("explosion"))); // Small explosion particle
|
||||||
wrapper.write(Type.VAR_INT, protocol.getMappingData().getParticleMappings().mappedId("explosion_emitter")); // Large explosion particle
|
wrapper.write(Types1_20_3.PARTICLE, new Particle(protocol.getMappingData().getParticleMappings().mappedId("explosion_emitter"))); // Large explosion particle
|
||||||
wrapper.write(Type.STRING, "minecraft:entity.generic.explode"); // Explosion sound
|
wrapper.write(Type.STRING, "minecraft:entity.generic.explode"); // Explosion sound
|
||||||
wrapper.write(Type.OPTIONAL_FLOAT, null); // Sound range
|
wrapper.write(Type.OPTIONAL_FLOAT, null); // Sound range
|
||||||
});
|
});
|
||||||
|
@ -28,7 +28,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_2
|
// RecipeRewriter1_20_3
|
||||||
public final class BlockItemPacketRewriter1_99 extends ItemRewriter<ClientboundPackets1_20_2, ServerboundPackets1_20_3, Protocol1_99To_98> {
|
public final class BlockItemPacketRewriter1_99 extends ItemRewriter<ClientboundPackets1_20_2, ServerboundPackets1_20_3, Protocol1_99To_98> {
|
||||||
|
|
||||||
public BlockItemPacketRewriter1_99(final Protocol1_99To_98 protocol) {
|
public BlockItemPacketRewriter1_99(final Protocol1_99To_98 protocol) {
|
||||||
@ -62,9 +62,11 @@ public final class BlockItemPacketRewriter1_99 extends ItemRewriter<ClientboundP
|
|||||||
registerWindowPropertyEnchantmentHandler(ClientboundPackets1_20_2.WINDOW_PROPERTY);
|
registerWindowPropertyEnchantmentHandler(ClientboundPackets1_20_2.WINDOW_PROPERTY);
|
||||||
registerSpawnParticle1_19(ClientboundPackets1_20_2.SPAWN_PARTICLE);
|
registerSpawnParticle1_19(ClientboundPackets1_20_2.SPAWN_PARTICLE);
|
||||||
|
|
||||||
|
// TODO Explosion contains particles now
|
||||||
|
|
||||||
new RecipeRewriter1_20_3<>(protocol).register(ClientboundPackets1_20_2.DECLARE_RECIPES);
|
new RecipeRewriter1_20_3<>(protocol).register(ClientboundPackets1_20_2.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_2<ClientboundPackets1_20_2>(this) {}.register(ClientboundPackets1_20_2.DECLARE_RECIPES);
|
// new RecipeRewriter1_20_3<ClientboundPackets1_20_2>(this) {}.register(ClientboundPackets1_20_2.DECLARE_RECIPES);
|
||||||
}
|
}
|
||||||
}
|
}
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren