geforkt von Mirrors/Velocity
Enough of the Login protocol to display a message upon connect
Dieser Commit ist enthalten in:
Ursprung
286be4987a
Commit
0c2ca969f7
@ -6,7 +6,7 @@ import io.netty.buffer.ByteBuf;
|
|||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
public enum ProtocolUtils { ;
|
public enum ProtocolUtils { ;
|
||||||
private static final int DEFAULT_MAX_STRING_SIZE = 1024 * 1024; // 1MB
|
private static final int DEFAULT_MAX_STRING_SIZE = 65536; // 64KiB
|
||||||
|
|
||||||
public static int readVarInt(ByteBuf buf) {
|
public static int readVarInt(ByteBuf buf) {
|
||||||
int numRead = 0;
|
int numRead = 0;
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
package io.minimum.minecraft.velocity.protocol;
|
package io.minimum.minecraft.velocity.protocol;
|
||||||
|
|
||||||
import io.minimum.minecraft.velocity.protocol.packets.Handshake;
|
import io.minimum.minecraft.velocity.protocol.packets.*;
|
||||||
import io.minimum.minecraft.velocity.protocol.packets.Ping;
|
|
||||||
import io.minimum.minecraft.velocity.protocol.packets.StatusRequest;
|
|
||||||
import io.minimum.minecraft.velocity.protocol.packets.StatusResponse;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -23,6 +20,15 @@ public enum StateRegistry {
|
|||||||
TO_CLIENT.register(0x00, StatusResponse.class, StatusResponse::new);
|
TO_CLIENT.register(0x00, StatusResponse.class, StatusResponse::new);
|
||||||
TO_CLIENT.register(0x01, Ping.class, Ping::new);
|
TO_CLIENT.register(0x01, Ping.class, Ping::new);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
PLAY {
|
||||||
|
|
||||||
|
},
|
||||||
|
LOGIN {
|
||||||
|
{
|
||||||
|
TO_SERVER.register(0x00, ServerLogin.class, ServerLogin::new);
|
||||||
|
TO_CLIENT.register(0x00, Disconnect.class, Disconnect::new);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public final ProtocolMappings TO_CLIENT = new ProtocolMappings(ProtocolConstants.Direction.TO_CLIENT, this);
|
public final ProtocolMappings TO_CLIENT = new ProtocolMappings(ProtocolConstants.Direction.TO_CLIENT, this);
|
||||||
|
@ -0,0 +1,35 @@
|
|||||||
|
package io.minimum.minecraft.velocity.protocol.packets;
|
||||||
|
|
||||||
|
import io.minimum.minecraft.velocity.protocol.MinecraftPacket;
|
||||||
|
import io.minimum.minecraft.velocity.protocol.ProtocolConstants;
|
||||||
|
import io.minimum.minecraft.velocity.protocol.ProtocolUtils;
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
|
||||||
|
public class Disconnect implements MinecraftPacket {
|
||||||
|
private String reason;
|
||||||
|
|
||||||
|
public String getReason() {
|
||||||
|
return reason;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReason(String reason) {
|
||||||
|
this.reason = reason;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Disconnect{" +
|
||||||
|
"reason='" + reason + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decode(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) {
|
||||||
|
reason = ProtocolUtils.readString(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void encode(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) {
|
||||||
|
ProtocolUtils.writeString(buf, reason);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
package io.minimum.minecraft.velocity.protocol.packets;
|
||||||
|
|
||||||
|
import io.minimum.minecraft.velocity.protocol.MinecraftPacket;
|
||||||
|
import io.minimum.minecraft.velocity.protocol.ProtocolConstants;
|
||||||
|
import io.minimum.minecraft.velocity.protocol.ProtocolUtils;
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
|
||||||
|
public class ServerLogin implements MinecraftPacket {
|
||||||
|
private String username;
|
||||||
|
|
||||||
|
public String getUsername() {
|
||||||
|
return username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUsername(String username) {
|
||||||
|
this.username = username;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "ServerLogin{" +
|
||||||
|
"username='" + username + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decode(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) {
|
||||||
|
username = ProtocolUtils.readString(buf, 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void encode(ByteBuf buf, ProtocolConstants.Direction direction, int protocolVersion) {
|
||||||
|
ProtocolUtils.writeString(buf, username);
|
||||||
|
}
|
||||||
|
}
|
@ -6,6 +6,7 @@ import io.minimum.minecraft.velocity.protocol.netty.MinecraftDecoder;
|
|||||||
import io.minimum.minecraft.velocity.protocol.netty.MinecraftEncoder;
|
import io.minimum.minecraft.velocity.protocol.netty.MinecraftEncoder;
|
||||||
import io.minimum.minecraft.velocity.protocol.packets.Handshake;
|
import io.minimum.minecraft.velocity.protocol.packets.Handshake;
|
||||||
import io.minimum.minecraft.velocity.proxy.handler.HandshakeSessionHandler;
|
import io.minimum.minecraft.velocity.proxy.handler.HandshakeSessionHandler;
|
||||||
|
import io.minimum.minecraft.velocity.proxy.handler.LoginSessionHandler;
|
||||||
import io.minimum.minecraft.velocity.proxy.handler.StatusSessionHandler;
|
import io.minimum.minecraft.velocity.proxy.handler.StatusSessionHandler;
|
||||||
import io.netty.channel.Channel;
|
import io.netty.channel.Channel;
|
||||||
import io.netty.channel.ChannelFuture;
|
import io.netty.channel.ChannelFuture;
|
||||||
@ -66,7 +67,9 @@ public class InboundMinecraftConnection {
|
|||||||
this.sessionHandler = new StatusSessionHandler(this);
|
this.sessionHandler = new StatusSessionHandler(this);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new UnsupportedOperationException("Unsupported next protocol state " + handshake.getNextStatus());
|
this.setStatus(StateRegistry.LOGIN);
|
||||||
|
this.sessionHandler = new LoginSessionHandler(this);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,6 +55,5 @@ public class MinecraftClientSessionHandler extends ChannelInboundHandlerAdapter
|
|||||||
@Override
|
@Override
|
||||||
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
|
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
|
||||||
cause.printStackTrace();
|
cause.printStackTrace();
|
||||||
ctx.close();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,28 @@
|
|||||||
|
package io.minimum.minecraft.velocity.proxy.handler;
|
||||||
|
|
||||||
|
import com.google.common.base.Preconditions;
|
||||||
|
import io.minimum.minecraft.velocity.protocol.MinecraftPacket;
|
||||||
|
import io.minimum.minecraft.velocity.protocol.packets.Disconnect;
|
||||||
|
import io.minimum.minecraft.velocity.protocol.packets.ServerLogin;
|
||||||
|
import io.minimum.minecraft.velocity.proxy.InboundMinecraftConnection;
|
||||||
|
import io.minimum.minecraft.velocity.proxy.MinecraftSessionHandler;
|
||||||
|
import net.kyori.text.TextComponent;
|
||||||
|
import net.kyori.text.serializer.ComponentSerializers;
|
||||||
|
|
||||||
|
public class LoginSessionHandler implements MinecraftSessionHandler {
|
||||||
|
private final InboundMinecraftConnection connection;
|
||||||
|
|
||||||
|
public LoginSessionHandler(InboundMinecraftConnection connection) {
|
||||||
|
this.connection = Preconditions.checkNotNull(connection, "connection");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handle(MinecraftPacket packet) {
|
||||||
|
Preconditions.checkArgument(packet instanceof ServerLogin, "Expected a ServerLogin packet, not " + packet.getClass().getName());
|
||||||
|
|
||||||
|
// Disconnect with test message
|
||||||
|
Disconnect disconnect = new Disconnect();
|
||||||
|
disconnect.setReason(ComponentSerializers.JSON.serialize(TextComponent.of("Hi there!")));
|
||||||
|
connection.closeWith(disconnect);
|
||||||
|
}
|
||||||
|
}
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren