успешный логин
This commit is contained in:
@@ -51,6 +51,7 @@ public class PacketDecoder extends ByteToMessageDecoder {
|
||||
log.warn("Unknown packet: {}:{}", state.name(), packetId);
|
||||
in.skipBytes(packetSize - rb);
|
||||
} else {
|
||||
netStream.setDataSize(packetSize - rb);
|
||||
CSPacket packet = packetClass.newInstance();
|
||||
packet.readSelf(netStream);
|
||||
log.debug("Known packet: {}:{}", state.name(), packet.toString());
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
package mc.core.network.proto_1_12_2.netty;
|
||||
|
||||
import io.netty.channel.Channel;
|
||||
import io.netty.channel.ChannelFutureListener;
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.channel.SimpleChannelInboundHandler;
|
||||
import io.netty.util.AttributeKey;
|
||||
@@ -14,11 +15,12 @@ import mc.core.chat.ChatProcessor;
|
||||
import mc.core.network.CSPacket;
|
||||
import mc.core.network.proto_1_12_2.State;
|
||||
import mc.core.network.proto_1_12_2.packets.*;
|
||||
import mc.core.player.Look;
|
||||
import mc.core.player.Player;
|
||||
import mc.core.player.PlayerManager;
|
||||
import mc.core.player.PlayerMode;
|
||||
import mc.core.text.Text;
|
||||
import mc.core.text.TextColor;
|
||||
import mc.core.text.TextStyle;
|
||||
import mc.core.world.World;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
@@ -92,6 +94,56 @@ public class PacketHandler extends SimpleChannelInboundHandler<CSPacket> {
|
||||
|
||||
private void onLoginStart(Channel channel, LoginStartPacket packet) {
|
||||
if (!channel.attr(ATTR_STATE).get().equals(State.LOGIN)) return;
|
||||
channel.writeAndFlush(new DisconnectPacket(Text.of("Server is not ready :(", null, TextStyle.ITALIC)));
|
||||
|
||||
Optional<Player> optPlayer = playerManager.getPlayer(packet.getPlayerName());
|
||||
if (optPlayer.isPresent() && optPlayer.get().isOnline()) {
|
||||
channel.writeAndFlush(new DisconnectPacket(
|
||||
Text.builder("Player \"")
|
||||
.append(Text.of(packet.getPlayerName(), TextColor.YELLOW))
|
||||
.append(Text.of("\" is online", TextColor.WHITE))
|
||||
.build()))
|
||||
.addListener(ChannelFutureListener.CLOSE);
|
||||
} else {
|
||||
Player player = playerManager.getPlayer(packet.getPlayerName())
|
||||
.orElseGet(() -> playerManager.createPlayer(
|
||||
packet.getPlayerName(),
|
||||
world.getSpawn(),
|
||||
new Look(0f, 0f)));
|
||||
|
||||
channel.writeAndFlush(new LoginSuccessPacket(
|
||||
player.getUUID(),
|
||||
packet.getPlayerName()));
|
||||
channel.attr(ATTR_PLAYER).set(player);
|
||||
channel.attr(ATTR_STATE).set(State.PLAY);
|
||||
|
||||
// Join Game
|
||||
JoinGamePacket pkt1 = new JoinGamePacket();
|
||||
pkt1.setEntityId(player.getId());
|
||||
pkt1.setMode(PlayerMode.CREATIVE);
|
||||
pkt1.setDimension(0/*Overworld*/);
|
||||
pkt1.setDifficulty(0/*Peaceful*/);
|
||||
pkt1.setLevelType("flat");
|
||||
channel.write(pkt1);
|
||||
|
||||
// Spawn Position
|
||||
SpawnPositionPacket pkt2 = new SpawnPositionPacket();
|
||||
pkt2.setLocation(world.getSpawn());
|
||||
channel.write(pkt2);
|
||||
|
||||
// Player Abilities
|
||||
PlayerAbilitiesPacket pkt3 = new PlayerAbilitiesPacket();
|
||||
pkt3.setCanFly(true);
|
||||
pkt3.setFlying(true);
|
||||
pkt3.setGodMode(true);
|
||||
pkt3.setInstantDestroyBlocks(true);
|
||||
channel.write(pkt2);
|
||||
channel.flush();
|
||||
|
||||
// Player Position And Look
|
||||
PlayerPositionAndLookPacket pkt4 = new PlayerPositionAndLookPacket();
|
||||
pkt4.setLocation(player.getLocation());
|
||||
pkt4.setLook(player.getLook());
|
||||
channel.writeAndFlush(pkt4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,6 +74,11 @@ public class WrapperNetStream extends NetStream_p340 {
|
||||
byteBuf.writeByte(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeUnsignedByte(int value) {
|
||||
byteBuf.writeByte((byte)(value & 0xFF));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeBytes(byte[] buffer) {
|
||||
byteBuf.writeBytes(buffer);
|
||||
|
||||
Reference in New Issue
Block a user