Refactored User room to be optional
This commit is contained in:
@@ -17,6 +17,7 @@ import net.minestom.server.entity.GameMode;
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.event.player.PlayerBlockBreakEvent;
|
||||
import net.minestom.server.event.player.PlayerDisconnectEvent;
|
||||
import net.minestom.server.event.player.PlayerEntityInteractEvent;
|
||||
import net.minestom.server.instance.AnvilLoader;
|
||||
|
||||
import java.util.*;
|
||||
@@ -30,22 +31,22 @@ public class Room extends MineNetInstance implements Spawnable {
|
||||
public static Room createRoom(Player owner) {
|
||||
logger.info("Creating room with owner " + owner.getUsername());
|
||||
setRoom(owner, new Room(owner));
|
||||
return getRoom(owner);
|
||||
return getRoom(owner).orElseThrow();
|
||||
}
|
||||
|
||||
public static void deleteRoom(Room room) {
|
||||
logger.info("Deleting room with owner " + room.owner.getUsername());
|
||||
logger.info("Deleting room " + room.uniqueId);
|
||||
rooms.values().removeAll(Collections.singleton(room)); // remove(room) would only remove the first one
|
||||
room.getAllMembers().forEach(player -> MoveInstance.move(player, Hub.INSTANCE));
|
||||
MoveInstance.forceCloseInstance(room);
|
||||
}
|
||||
|
||||
public static Room getRoom(Player p) {
|
||||
return rooms.get(p);
|
||||
public static Optional<Room> getRoom(Player p) {
|
||||
return Optional.ofNullable(rooms.get(p));
|
||||
}
|
||||
|
||||
public static void setOwnRoom(Player p) {
|
||||
setRoom(p, getRoom(p));
|
||||
setRoom(p, getRoom(p).orElseThrow());
|
||||
}
|
||||
|
||||
public static void setRoom(Player p, Room room) {
|
||||
@@ -68,11 +69,13 @@ public class Room extends MineNetInstance implements Spawnable {
|
||||
}
|
||||
|
||||
private Player owner;
|
||||
private GameSelector gameSelector;
|
||||
private Room(Player owner) {
|
||||
super(Dimension.THE_END.DIMENSION);
|
||||
construct();
|
||||
setOwner(owner);
|
||||
new GameSelector().setInstance(this, new Pos(0.5, 16, 9.5));
|
||||
this.gameSelector = new GameSelector();
|
||||
this.gameSelector.setInstance(this, new Pos(0.5, 16, 9.5));
|
||||
}
|
||||
|
||||
protected Room() {
|
||||
@@ -104,7 +107,7 @@ public class Room extends MineNetInstance implements Spawnable {
|
||||
.findFirst() // find the first user meeting the requirement
|
||||
.ifPresentOrElse(
|
||||
this::setOwner, // set the new owner
|
||||
() -> Room.deleteRoom(Room.getRoom(p)) // or else delete the room (no players in the room)
|
||||
() -> Room.getRoom(p).ifPresent(Room::deleteRoom) // or else delete the room (no players in the room)
|
||||
);
|
||||
|
||||
Room.unsetRoom(p); // remove the player itself from the room
|
||||
@@ -122,10 +125,16 @@ public class Room extends MineNetInstance implements Spawnable {
|
||||
|
||||
public Set<Player> getAllMembers() {
|
||||
return rooms.keySet().stream()
|
||||
.filter(player -> getRoom(player) == this)
|
||||
.filter(player -> getRoom(player).orElse(null) == this)
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean onPlayerJoin(Player p) {
|
||||
this.gameSelector.onInteract(new PlayerEntityInteractEvent(p, gameSelector, Player.Hand.MAIN, p.getPosition()));
|
||||
return super.onPlayerJoin(p);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pos getSpawn() {
|
||||
return new Pos(0.5, 16, 0.5);
|
||||
|
||||
Reference in New Issue
Block a user