Mirror von
https://github.com/ViaVersion/ViaBackwards.git
synchronisiert 2024-12-24 23:30:17 +01:00
Ursprung
0912e33358
Commit
65158455cc
@ -119,6 +119,14 @@ public final class Protocol1_20_2To1_20_3 extends BackwardsProtocol<ClientboundP
|
||||
}
|
||||
}
|
||||
});
|
||||
registerClientbound(ClientboundPackets1_20_2.BOSSBAR, wrapper -> {
|
||||
wrapper.passthrough(Type.UUID); // Id
|
||||
|
||||
final int action = wrapper.passthrough(Type.VAR_INT);
|
||||
if (action == 0 || action == 3) {
|
||||
convertComponent(wrapper);
|
||||
}
|
||||
});
|
||||
registerClientbound(ClientboundPackets1_20_2.PLAYER_CHAT, wrapper -> {
|
||||
wrapper.passthrough(Type.UUID); // Sender
|
||||
wrapper.passthrough(Type.VAR_INT); // Index
|
||||
|
@ -111,9 +111,26 @@ public final class Protocol1_20To1_20_2 extends BackwardsProtocol<ClientboundPac
|
||||
cancelClientbound(ClientboundPackets1_20_2.PONG_RESPONSE);
|
||||
|
||||
// Some can be directly remapped to play packets, others need to be queued
|
||||
registerClientbound(State.CONFIGURATION, ClientboundConfigurationPackets1_20_2.DISCONNECT.getId(), ClientboundPackets1_19_4.DISCONNECT.getId());
|
||||
registerClientbound(State.CONFIGURATION, ClientboundConfigurationPackets1_20_2.KEEP_ALIVE.getId(), ClientboundPackets1_19_4.KEEP_ALIVE.getId());
|
||||
registerClientbound(State.CONFIGURATION, ClientboundConfigurationPackets1_20_2.RESOURCE_PACK.getId(), ClientboundPackets1_19_4.RESOURCE_PACK.getId());
|
||||
// Set the packet type properly so the state on it is changed
|
||||
registerClientbound(State.CONFIGURATION, ClientboundConfigurationPackets1_20_2.DISCONNECT.getId(), -1, wrapper -> {
|
||||
wrapper.setPacketType(ClientboundPackets1_19_4.DISCONNECT);
|
||||
});
|
||||
registerClientbound(State.CONFIGURATION, ClientboundConfigurationPackets1_20_2.KEEP_ALIVE.getId(), -1, wrapper -> {
|
||||
wrapper.setPacketType(ClientboundPackets1_19_4.KEEP_ALIVE);
|
||||
});
|
||||
registerClientbound(State.CONFIGURATION, ClientboundConfigurationPackets1_20_2.RESOURCE_PACK.getId(), -1, wrapper -> {
|
||||
// Send after join. We have to pretend the client accepted, else the server won't continue...
|
||||
wrapper.user().get(ConfigurationPacketStorage.class).setResourcePack(wrapper);
|
||||
wrapper.cancel();
|
||||
|
||||
final PacketWrapper acceptedResponse = wrapper.create(ServerboundConfigurationPackets1_20_2.RESOURCE_PACK);
|
||||
acceptedResponse.write(Type.VAR_INT, 3);
|
||||
acceptedResponse.sendToServer(Protocol1_20To1_20_2.class);
|
||||
|
||||
final PacketWrapper downloadedResponse = wrapper.create(ServerboundConfigurationPackets1_20_2.RESOURCE_PACK);
|
||||
downloadedResponse.write(Type.VAR_INT, 0);
|
||||
downloadedResponse.sendToServer(Protocol1_20To1_20_2.class);
|
||||
});
|
||||
registerClientbound(State.CONFIGURATION, ClientboundConfigurationPackets1_20_2.REGISTRY_DATA.getId(), -1, wrapper -> {
|
||||
wrapper.cancel();
|
||||
|
||||
@ -123,18 +140,17 @@ public final class Protocol1_20To1_20_2 extends BackwardsProtocol<ClientboundPac
|
||||
wrapper.user().get(ConfigurationPacketStorage.class).setRegistry(registry);
|
||||
});
|
||||
registerClientbound(State.CONFIGURATION, ClientboundConfigurationPackets1_20_2.UPDATE_ENABLED_FEATURES.getId(), -1, wrapper -> {
|
||||
wrapper.cancel();
|
||||
|
||||
final String[] enabledFeatures = wrapper.read(Type.STRING_ARRAY);
|
||||
wrapper.user().get(ConfigurationPacketStorage.class).setEnabledFeatures(enabledFeatures);
|
||||
wrapper.cancel();
|
||||
});
|
||||
registerClientbound(State.CONFIGURATION, ClientboundConfigurationPackets1_20_2.UPDATE_TAGS.getId(), -1, wrapper -> {
|
||||
wrapper.cancel();
|
||||
wrapper.user().get(ConfigurationPacketStorage.class).addRawPacket(wrapper, ClientboundPackets1_19_4.TAGS);
|
||||
wrapper.cancel();
|
||||
});
|
||||
registerClientbound(State.CONFIGURATION, ClientboundConfigurationPackets1_20_2.CUSTOM_PAYLOAD.getId(), -1, wrapper -> {
|
||||
wrapper.cancel();
|
||||
wrapper.user().get(ConfigurationPacketStorage.class).addRawPacket(wrapper, ClientboundPackets1_19_4.PLUGIN_MESSAGE);
|
||||
wrapper.cancel();
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -24,6 +24,7 @@ import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.protocol.packet.PacketType;
|
||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||
import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
||||
import com.viaversion.viaversion.protocols.protocol1_19_4to1_19_3.ClientboundPackets1_19_4;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import java.util.ArrayList;
|
||||
@ -35,6 +36,11 @@ public final class ConfigurationPacketStorage implements StorableObject {
|
||||
private CompoundTag registry;
|
||||
private String[] enabledFeatures;
|
||||
private boolean finished;
|
||||
private QueuedPacket resourcePack;
|
||||
|
||||
public void setResourcePack(final PacketWrapper wrapper) throws Exception {
|
||||
resourcePack = toQueuedPacket(wrapper, ClientboundPackets1_19_4.RESOURCE_PACK);
|
||||
}
|
||||
|
||||
public CompoundTag registry() {
|
||||
Preconditions.checkNotNull(registry);
|
||||
@ -55,15 +61,27 @@ public final class ConfigurationPacketStorage implements StorableObject {
|
||||
}
|
||||
|
||||
public void addRawPacket(final PacketWrapper wrapper, final PacketType type) throws Exception {
|
||||
rawPackets.add(toQueuedPacket(wrapper, type));
|
||||
}
|
||||
|
||||
private QueuedPacket toQueuedPacket(final PacketWrapper wrapper, final PacketType type) throws Exception {
|
||||
Preconditions.checkArgument(!wrapper.isCancelled(), "Wrapper should be cancelled AFTER calling toQueuedPacket");
|
||||
|
||||
// It's easier to just copy it to a byte array buffer than to manually read the data
|
||||
final ByteBuf buf = Unpooled.buffer();
|
||||
//noinspection deprecation
|
||||
wrapper.setId(-1); // Don't write the packet id to the buffer
|
||||
wrapper.writeToBuffer(buf);
|
||||
rawPackets.add(new QueuedPacket(buf, type));
|
||||
return new QueuedPacket(buf, type);
|
||||
}
|
||||
|
||||
public void sendQueuedPackets(final UserConnection connection) throws Exception {
|
||||
// Send resource pack at the end
|
||||
if (resourcePack != null) {
|
||||
rawPackets.add(resourcePack);
|
||||
resourcePack = null;
|
||||
}
|
||||
|
||||
for (final QueuedPacket queuedPacket : rawPackets) {
|
||||
try {
|
||||
final PacketWrapper packet = PacketWrapper.create(queuedPacket.packetType(), queuedPacket.buf(), connection);
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren