удален InMemoryPlayerManager
This commit is contained in:
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user