Archived
0

удален InMemoryPlayerManager

This commit is contained in:
2018-09-16 18:14:22 +03:00
parent 41c2e4933d
commit 384ae13ecf
2 changed files with 0 additions and 169 deletions

View File

@@ -1,113 +0,0 @@
/*
* DmitriyMX <dimon550@gmail.com>
* 2018-04-15
*/
package mc.core.player;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import mc.core.Config;
import mc.core.EntityLocation;
import mc.core.network.BroadcastNetChannel;
import mc.core.network.NetChannel;
import mc.core.world.World;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
public class InMemoryPlayerManager implements PlayerManager, Runnable {
private static final Random rand = new Random();
private List<Player> players;
private final Object lock = new Object();
@Setter
private int keepAliveInterval = 1;
@Autowired
public InMemoryPlayerManager(Config config) {
final int c = config.getMaxPlayers() > 50 ? 50 : config.getMaxPlayers();
players = Collections.synchronizedList(new ArrayList<>(c));
(new Thread(this, "KeepAlive")).start();
}
@Override
public Player createPlayer(String name, EntityLocation location, World world) {
SimplePlayer player = new SimplePlayer();
player.setId(rand.nextInt(10000));
player.setUUID(UUID.nameUUIDFromBytes(name.getBytes()));
player.setName(name);
player.getLocation().set(location);
player.setWorld(world);
player.setSettings(new PlayerSettings());
synchronized (lock) {
players.add(player);
lock.notify();
}
return player;
}
@Override
public void joinServer(Player player) {
((SimplePlayer) player).setOnline(true);
}
@Override
public void leftServer(Player player) {
((SimplePlayer) player).setOnline(false);
}
@Override
public Player getPlayer(final String name) {
return players.stream()
.filter(player -> player.getName().equalsIgnoreCase(name))
.findFirst().get();
}
@Override
public List<Player> getPlayers() {
return players.stream().filter(Player::isOnline).collect(Collectors.toList());
}
@Override
public int getCountPlayers() {
return (int) players.stream().filter(Player::isOnline).count();
}
@Override
public NetChannel getBroadcastChannel() {
return new BroadcastNetChannel(players.stream().filter(Player::isOnline));
}
@Override
public Player getOfflinePlayer(String name) {
return players.stream()
.filter(player -> player.getName().equals(name))
.filter(player -> !player.isOnline())
.findFirst().orElse(null);
}
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
synchronized (lock) {
while (players.size() == 0) {
try {
lock.wait();
} catch (InterruptedException e) {
return;
}
}
}
getBroadcastChannel().sendKeepAlive();
try {
Thread.sleep(keepAliveInterval);
} catch (InterruptedException e) {
return;
}
}
}
}

View File

@@ -1,56 +0,0 @@
/*
* DmitriyMX <dimon550@gmail.com>
* 2018-04-23
*/
package mc.core.player;
import lombok.Data;
import mc.core.EntityLocation;
import mc.core.exception.ResourceUnloadedException;
import mc.core.network.NetChannel;
import mc.core.world.World;
import java.lang.ref.Reference;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@Data
public class SimplePlayer implements Player {
private int id;
private UUID uuid;
private String name;
private boolean online = false;
private NetChannel channel;
private EntityLocation location = EntityLocation.ZERO();
private Reference<World> $refWorld;
private boolean flying = false;
private PlayerSettings settings;
private List<Integer> loadedChunks = new ArrayList<>();
@Override
public UUID getUuid() {
return uuid;
}
@Override
public World getWorld() {
if ($refWorld == null) {
return null;
} else if ($refWorld.get() == null) {
throw new ResourceUnloadedException("You're trying to get unloaded world");
} else {
return $refWorld.get();
}
}
@Override
public void setWorld(World world) {
this.$refWorld = new WeakReference<>(world);
}
public void setUUID(UUID uuid) {
this.uuid = uuid;
}
}