3
0
Mirror von https://github.com/ViaVersion/ViaVersion.git synchronisiert 2024-12-27 08:30:09 +01:00

Add PacketWrapper#sendFutureRaw, cleanup login disconnect handling. (#4129)

Removes the special handling in Protocol1_8To1_9 and always send the correct/expected data by the client in ServerboundBaseProtocol1_7 itself. Also prevent sending the packet through the protocol pipeline since packet/format changes should also be handled inside the base protocol.
Dieser Commit ist enthalten in:
EnZaXD 2024-08-29 21:46:43 +02:00 committet von GitHub
Ursprung 5017d4bbb3
Commit 7cd5514b90
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: B5690EEEBB952194
4 geänderte Dateien mit 39 neuen und 11 gelöschten Zeilen

Datei anzeigen

@ -236,6 +236,14 @@ public interface PacketWrapper {
*/ */
void sendRaw() throws InformativeException; void sendRaw() throws InformativeException;
/**
* Sends this packet to the associated user, submitted to netty's event loop.
* <b>Unlike {@link #sendFuture(Class)}, this method does not handle the pipeline with packet id and data changes.</b>
*
* @throws InformativeException if it fails to write
*/
ChannelFuture sendFutureRaw() throws InformativeException;
/** /**
* Sends this packet to the associated user, submitted to netty's event loop. * Sends this packet to the associated user, submitted to netty's event loop.
* <b>Unlike {@link #send(Class)}, this method does not handle the pipeline with packet id and data changes.</b> * <b>Unlike {@link #send(Class)}, this method does not handle the pipeline with packet id and data changes.</b>

Datei anzeigen

@ -340,7 +340,7 @@ public class PacketWrapperImpl implements PacketWrapper {
} }
return user().sendRawPacketFuture(output); return user().sendRawPacketFuture(output);
} }
return user().getChannel().newFailedFuture(new RuntimeException("Tried to send cancelled packet")); return cancelledFuture();
} }
@Override @Override
@ -348,6 +348,21 @@ public class PacketWrapperImpl implements PacketWrapper {
sendRaw(true); sendRaw(true);
} }
@Override
public ChannelFuture sendFutureRaw() throws InformativeException {
if (isCancelled()) {
return cancelledFuture();
}
ByteBuf output = inputBuffer == null ? user().getChannel().alloc().buffer() : inputBuffer.alloc().buffer();
try {
writeToBuffer(output);
return user().sendRawPacketFuture(output.retain());
} finally {
output.release();
}
}
@Override @Override
public void scheduleSendRaw() throws InformativeException { public void scheduleSendRaw() throws InformativeException {
sendRaw(false); sendRaw(false);
@ -371,6 +386,10 @@ public class PacketWrapperImpl implements PacketWrapper {
} }
} }
private ChannelFuture cancelledFuture() {
return user().getChannel().newFailedFuture(new RuntimeException("Tried to send cancelled packet"));
}
@Override @Override
public PacketWrapperImpl create(int packetId) { public PacketWrapperImpl create(int packetId) {
return new PacketWrapperImpl(packetId, null, user()); return new PacketWrapperImpl(packetId, null, user());

Datei anzeigen

@ -17,6 +17,7 @@
*/ */
package com.viaversion.viaversion.protocols.base.v1_7; package com.viaversion.viaversion.protocols.base.v1_7;
import com.google.gson.JsonObject;
import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.connection.ProtocolInfo; import com.viaversion.viaversion.api.connection.ProtocolInfo;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
@ -31,6 +32,7 @@ import com.viaversion.viaversion.protocols.base.ServerboundLoginPackets;
import com.viaversion.viaversion.protocols.base.packet.BaseClientboundPacket; import com.viaversion.viaversion.protocols.base.packet.BaseClientboundPacket;
import com.viaversion.viaversion.protocols.base.packet.BasePacketTypesProvider; import com.viaversion.viaversion.protocols.base.packet.BasePacketTypesProvider;
import com.viaversion.viaversion.protocols.base.packet.BaseServerboundPacket; import com.viaversion.viaversion.protocols.base.packet.BaseServerboundPacket;
import com.viaversion.viaversion.protocols.v1_8to1_9.Protocol1_8To1_9;
import com.viaversion.viaversion.util.ChatColorUtil; import com.viaversion.viaversion.util.ChatColorUtil;
import com.viaversion.viaversion.util.ComponentUtil; import com.viaversion.viaversion.util.ComponentUtil;
import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFuture;
@ -62,10 +64,16 @@ public class ServerboundBaseProtocol1_7 extends AbstractProtocol<BaseClientbound
final String disconnectMessage = ChatColorUtil.translateAlternateColorCodes(Via.getConfig().getBlockedDisconnectMsg()); final String disconnectMessage = ChatColorUtil.translateAlternateColorCodes(Via.getConfig().getBlockedDisconnectMsg());
final PacketWrapper disconnectPacket = PacketWrapper.create(ClientboundLoginPackets.LOGIN_DISCONNECT, user); final PacketWrapper disconnectPacket = PacketWrapper.create(ClientboundLoginPackets.LOGIN_DISCONNECT, user);
disconnectPacket.write(Types.COMPONENT, ComponentUtil.plainToJson(disconnectMessage));
final JsonObject object = ComponentUtil.plainToJson(disconnectMessage);
if (protocol.olderThanOrEqualTo(ProtocolVersion.v1_8)) {
disconnectPacket.write(Types.STRING, object.toString());
} else {
disconnectPacket.write(Types.COMPONENT, object);
}
// Send and close // Send and close
final ChannelFuture future = disconnectPacket.sendFuture(null); final ChannelFuture future = disconnectPacket.sendFutureRaw();
future.addListener(f -> user.getChannel().close()); future.addListener(f -> user.getChannel().close());
} }
}); });

Datei anzeigen

@ -83,14 +83,7 @@ public class Protocol1_8To1_9 extends AbstractProtocol<ClientboundPackets1_8, Cl
protected void registerPackets() { protected void registerPackets() {
super.registerPackets(); super.registerPackets();
registerClientbound(State.LOGIN, ClientboundLoginPackets.LOGIN_DISCONNECT, wrapper -> { registerClientbound(State.LOGIN, ClientboundLoginPackets.LOGIN_DISCONNECT, wrapper -> STRING_TO_JSON.write(wrapper, wrapper.read(Types.STRING)));
if (wrapper.isReadable(Types.COMPONENT, 0)) {
// Already written as component in the base protocol
return;
}
STRING_TO_JSON.write(wrapper, wrapper.read(Types.STRING));
});
// Other Handlers // Other Handlers
SpawnPacketRewriter1_9.register(this); SpawnPacketRewriter1_9.register(this);