Archived
0

успешный логин

This commit is contained in:
2018-06-12 16:37:23 +03:00
parent 2a25253fae
commit dcef09c1d5
22 changed files with 425 additions and 13 deletions

View File

@@ -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());

View File

@@ -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);
}
}
}

View File

@@ -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);