package net.CyanWool.management; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import net.CyanWool.CyanServer; import net.CyanWool.api.entity.player.Player; import net.CyanWool.api.world.Location; import net.CyanWool.api.world.World; import net.CyanWool.entity.player.CyanPlayer; import net.CyanWool.network.CyanPlayerNetwork; import org.spacehq.mc.auth.GameProfile; import org.spacehq.mc.protocol.ProtocolConstants; import org.spacehq.mc.protocol.data.game.Position; import org.spacehq.mc.protocol.data.game.values.setting.Difficulty; import org.spacehq.mc.protocol.data.game.values.world.WorldType; import org.spacehq.mc.protocol.packet.ingame.server.ServerDifficultyPacket; import org.spacehq.mc.protocol.packet.ingame.server.ServerJoinGamePacket; import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerPositionRotationPacket; import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerUpdateHealthPacket; import org.spacehq.mc.protocol.packet.ingame.server.world.ServerSpawnPositionPacket; import org.spacehq.packetlib.Session; import org.spacehq.packetlib.packet.Packet; public class PlayerManager { private CyanServer server; private List<Player> players; public PlayerManager(CyanServer server) { this.server = server; this.players = new CopyOnWriteArrayList<Player>(); } public synchronized Player loginPlayer(Session session) { GameProfile profile = session.getFlag(ProtocolConstants.PROFILE_KEY); World world = server.getWorldManager().getWorld("world"); Location location = world.getSpawnLocation(); CyanPlayer player = new CyanPlayer(server, profile, location); player.setPlayerNetwork(new CyanPlayerNetwork(server, session, player)); // world.getPlayerService().readPlayer(player); player.loadData(); // player.load(); ServerJoinGamePacket packet = new ServerJoinGamePacket(player.getEntityID(), world.isHardcore(), player.getGameMode(), world.getDimension().getId(), world.getDifficulty(), server.getMaxPlayers(), WorldType.DEFAULT, false); session.send(packet); players.add(player); // Send spawn packet ServerPlayerPositionRotationPacket ppacket = new ServerPlayerPositionRotationPacket(player.getLocation().getX(), player.getLocation().getY(), player.getLocation().getZ(), player.getLocation().getYaw(), player.getLocation().getPitch()); session.send(ppacket); Position position = new Position(player.getLocation().getBlockX(), player.getLocation().getBlockY(), player.getLocation().getBlockZ()); ServerSpawnPositionPacket spawnPacket = new ServerSpawnPositionPacket(position); session.send(spawnPacket); // set time player.setTime(0);// TODO // Send health ServerUpdateHealthPacket healthPacket = new ServerUpdateHealthPacket(20, 20, 1); session.send(healthPacket); // Send Difficulty ServerDifficultyPacket diffPacket = new ServerDifficultyPacket(Difficulty.NORMAL); session.send(diffPacket); world.getPlayerService().savePlayer(player); // Send packets for all players for (Packet packets : player.getSpawnPackets()) { server.getNetworkServer().sendPacketForAll(packets); } player.chat("Hello! This test message for CyanWool!"); player.setMoveable(true); // Test sounds player.damage(5); return player; } public synchronized void leavePlayer(Player player) { server.broadcastMessage(player.getName() + " left the Server!"); // ServerDestroyEntitiesPacket destroyEntitiesPacket = new // ServerDestroyEntitiesPacket(player.getEntityID()); // NetworkServer.sendPacketForAll(destroyEntitiesPacket); // player.getWorld().getPlayerService().savePlayer(player); player.saveData(); player.kill(); // Save and unload // player.save(); // player.getWorld().getEntityManager().unregister(player); players.remove(player); } public List<Player> getPlayers() { return players; } }