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:
Ursprung
5017d4bbb3
Commit
7cd5514b90
@ -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>
|
||||||
|
@ -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());
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -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);
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren