Prevent api driven rooms from automatic ownership change
This commit is contained in:
parent
8b47eb1139
commit
894b5464dd
@ -81,15 +81,18 @@ public class Room extends MineNetInstance implements Spawnable {
|
|||||||
|
|
||||||
private Player owner;
|
private Player owner;
|
||||||
public final UUID uuid = UUID.randomUUID();
|
public final UUID uuid = UUID.randomUUID();
|
||||||
|
public final boolean apiDriven;
|
||||||
private GameSelector gameSelector;
|
private GameSelector gameSelector;
|
||||||
private Room(Player owner) {
|
private Room(Player owner) {
|
||||||
super(Dimension.THE_END.DIMENSION);
|
super(Dimension.THE_END.DIMENSION);
|
||||||
|
this.apiDriven = false;
|
||||||
construct();
|
construct();
|
||||||
setOwner(owner);
|
setOwner(owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Room() {
|
protected Room() {
|
||||||
super(Dimension.THE_END.DIMENSION);
|
super(Dimension.THE_END.DIMENSION);
|
||||||
|
this.apiDriven = true;
|
||||||
construct();
|
construct();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,19 +115,21 @@ public class Room extends MineNetInstance implements Spawnable {
|
|||||||
this.owner = newOwner;
|
this.owner = newOwner;
|
||||||
|
|
||||||
this.owner.eventNode().addListener(PlayerDisconnectEvent.class, playerDisconnectEvent -> {
|
this.owner.eventNode().addListener(PlayerDisconnectEvent.class, playerDisconnectEvent -> {
|
||||||
|
if(this.apiDriven) return; // prevent giving ownership on apiDriven rooms
|
||||||
|
|
||||||
Player p = playerDisconnectEvent.getPlayer();
|
Player p = playerDisconnectEvent.getPlayer();
|
||||||
|
|
||||||
if(p != this.owner) return; // return if the current handling player is really the current owner
|
if(p != this.owner) return;
|
||||||
|
|
||||||
getAllMembers().stream()
|
getAllMembers().stream()
|
||||||
.filter(player -> player != p) // exclude the current leaving owner
|
.filter(player -> player != p) // exclude the current leaving owner
|
||||||
.findFirst() // find the first user meeting the requirement
|
.findFirst()
|
||||||
.ifPresentOrElse(
|
.ifPresentOrElse(
|
||||||
this::setOwner, // set the new owner
|
this::setOwner,
|
||||||
() -> Room.getRoom(p).ifPresent(Room::deleteRoom) // or else delete the room (no players in the room)
|
() -> Room.getRoom(p).ifPresent(Room::deleteRoom) // delete room if no players are left
|
||||||
);
|
);
|
||||||
|
|
||||||
Room.unsetRoom(p); // remove the player itself from the room
|
Room.unsetRoom(p);
|
||||||
|
|
||||||
new ChatMessage(Icon.ERROR).appendStatic("The room leader left!").send(getAllMembers());
|
new ChatMessage(Icon.ERROR).appendStatic("The room leader left!").send(getAllMembers());
|
||||||
new ChatMessage(Icon.SCIENCE).appendStatic(this.owner.getUsername()).appendStatic(" is the new Leader!").send(getAllMembers().stream().filter(player -> player != this.owner).collect(Collectors.toSet()));
|
new ChatMessage(Icon.SCIENCE).appendStatic(this.owner.getUsername()).appendStatic(" is the new Leader!").send(getAllMembers().stream().filter(player -> player != this.owner).collect(Collectors.toSet()));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user