From 894b5464dd3ec62127f65e186af3b58c6305dab5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Tue, 28 Nov 2023 10:28:49 +0100 Subject: [PATCH] Prevent api driven rooms from automatic ownership change --- .../minenet/minigames/instance/room/Room.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/room/Room.java b/src/main/java/eu/mhsl/minenet/minigames/instance/room/Room.java index 0060b62..b52dbb4 100644 --- a/src/main/java/eu/mhsl/minenet/minigames/instance/room/Room.java +++ b/src/main/java/eu/mhsl/minenet/minigames/instance/room/Room.java @@ -81,15 +81,18 @@ public class Room extends MineNetInstance implements Spawnable { private Player owner; public final UUID uuid = UUID.randomUUID(); + public final boolean apiDriven; private GameSelector gameSelector; private Room(Player owner) { super(Dimension.THE_END.DIMENSION); + this.apiDriven = false; construct(); setOwner(owner); } protected Room() { super(Dimension.THE_END.DIMENSION); + this.apiDriven = true; construct(); } @@ -112,19 +115,21 @@ public class Room extends MineNetInstance implements Spawnable { this.owner = newOwner; this.owner.eventNode().addListener(PlayerDisconnectEvent.class, playerDisconnectEvent -> { + if(this.apiDriven) return; // prevent giving ownership on apiDriven rooms + 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() .filter(player -> player != p) // exclude the current leaving owner - .findFirst() // find the first user meeting the requirement + .findFirst() .ifPresentOrElse( - this::setOwner, // set the new owner - () -> Room.getRoom(p).ifPresent(Room::deleteRoom) // or else delete the room (no players in the room) + this::setOwner, + () -> 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.SCIENCE).appendStatic(this.owner.getUsername()).appendStatic(" is the new Leader!").send(getAllMembers().stream().filter(player -> player != this.owner).collect(Collectors.toSet()));