Skip to content

Commit 5443aac

Browse files
Pablete1234twizmwazin
authored andcommitted
Fix join and leave commands
1 parent d54df07 commit 5443aac

File tree

5 files changed

+67
-39
lines changed

5 files changed

+67
-39
lines changed

src/main/java/in/twizmwaz/cardinal/command/CommandJoin.java

+20-3
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import ee.ellytr.command.argument.Optional;
3232
import in.twizmwaz.cardinal.Cardinal;
3333
import in.twizmwaz.cardinal.match.Match;
34+
import in.twizmwaz.cardinal.match.MatchThread;
3435
import in.twizmwaz.cardinal.module.team.SinglePlayerContainer;
3536
import in.twizmwaz.cardinal.module.team.Team;
3637
import in.twizmwaz.cardinal.playercontainer.Containers;
@@ -50,7 +51,8 @@ public class CommandJoin {
5051
@PlayerCommand
5152
public static void join(CommandContext cmd, @Optional Team team) {
5253
Player player = (Player) cmd.getSender();
53-
Match match = Cardinal.getMatch(player);
54+
MatchThread thread = Cardinal.getMatchThread(player);
55+
Match match = thread.getCurrentMatch();
5456
PlayingPlayerContainer playing = team;
5557
if (!match.isFfa()) {
5658
if (playing == null) {
@@ -59,9 +61,24 @@ public static void join(CommandContext cmd, @Optional Team team) {
5961
} else {
6062
playing = SinglePlayerContainer.of(player);
6163
}
62-
PlayerContainerData newData = new PlayerContainerData(match.getMatchThread(), match, playing);
64+
PlayerContainerData newData = new PlayerContainerData(thread, match, playing);
6365
PlayerContainerData oldData = PlayerContainerData.of(player);
6466
Containers.handleStateChangeEvent(player, oldData, newData);
6567
}
6668

67-
}
69+
/**
70+
* Leave the game.
71+
*
72+
* @param cmd The context of this command.
73+
*/
74+
@Command(aliases = "leave", description = "Leave the game")
75+
@PlayerCommand
76+
public static void leave(CommandContext cmd) {
77+
Player player = (Player) cmd.getSender();
78+
MatchThread thread = Cardinal.getMatchThread(player);
79+
PlayerContainerData newData = new PlayerContainerData(thread, null, null);
80+
PlayerContainerData oldData = PlayerContainerData.of(player);
81+
Containers.handleStateChangeEvent(player, oldData, newData);
82+
}
83+
84+
}

src/main/java/in/twizmwaz/cardinal/match/Match.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,8 @@ public void addPlayer(@NonNull Player player) {
135135

136136
@Override
137137
public void removePlayer(@NonNull Player player) {
138-
players.remove(player);
139138
PlayingPlayerContainer container = getPlayingContainer(player);
139+
players.remove(player);
140140
if (isFfa()) {
141141
playerContainers.remove(container);
142142
} else {

src/main/java/in/twizmwaz/cardinal/module/interact/InteractModule.java

+6-11
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,10 @@
2626
package in.twizmwaz.cardinal.module.interact;
2727

2828
import in.twizmwaz.cardinal.Cardinal;
29-
import in.twizmwaz.cardinal.match.Match;
3029
import in.twizmwaz.cardinal.match.MatchThread;
3130
import in.twizmwaz.cardinal.module.AbstractListenerModule;
3231
import in.twizmwaz.cardinal.module.ModuleEntry;
3332
import in.twizmwaz.cardinal.module.spawn.SpawnModule;
34-
import in.twizmwaz.cardinal.util.ListUtil;
3533
import lombok.NonNull;
3634
import org.bukkit.entity.Player;
3735
import org.bukkit.event.EventHandler;
@@ -68,12 +66,7 @@ private boolean canInteract(@NonNull Player player) {
6866
*/
6967
@EventHandler(ignoreCancelled = true)
7068
public void onPlayerMove(PlayerMoveEvent event) {
71-
Player player = event.getPlayer();
72-
if (!canInteract(player) && event.getTo().getY() < -64) {
73-
Match match = Cardinal.getMatch(player);
74-
event.setTo(ListUtil.getRandom(Cardinal.getModule(SpawnModule.class).getDefaultSpawn(match).getRegions())
75-
.getRandomPoint().toLocation(match.getWorld()));
76-
}
69+
handlePlayerMove(event);
7770
}
7871

7972
/**
@@ -83,11 +76,13 @@ public void onPlayerMove(PlayerMoveEvent event) {
8376
*/
8477
@EventHandler(ignoreCancelled = true)
8578
public void onPlayerTeleport(PlayerTeleportEvent event) {
79+
handlePlayerMove(event);
80+
}
81+
82+
private void handlePlayerMove(PlayerMoveEvent event) {
8683
Player player = event.getPlayer();
8784
if (!canInteract(player) && event.getTo().getY() < -64) {
88-
Match match = Cardinal.getMatch(player);
89-
event.setTo(ListUtil.getRandom(Cardinal.getModule(SpawnModule.class).getDefaultSpawn(match).getRegions())
90-
.getRandomPoint().toLocation(match.getWorld()));
85+
event.setTo(Cardinal.getModule(SpawnModule.class).getDefaultSpawnLocation(Cardinal.getMatch(player)));
9186
}
9287
}
9388

src/main/java/in/twizmwaz/cardinal/module/spawn/SpawnModule.java

+21-5
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import in.twizmwaz.cardinal.event.player.PlayerContainerChangeStateEvent;
3535
import in.twizmwaz.cardinal.match.Match;
3636
import in.twizmwaz.cardinal.match.MatchState;
37+
import in.twizmwaz.cardinal.match.MatchThread;
3738
import in.twizmwaz.cardinal.module.AbstractListenerModule;
3839
import in.twizmwaz.cardinal.module.ModuleEntry;
3940
import in.twizmwaz.cardinal.module.ModuleError;
@@ -49,6 +50,7 @@
4950
import in.twizmwaz.cardinal.util.Players;
5051
import lombok.NonNull;
5152
import org.bukkit.Bukkit;
53+
import org.bukkit.Location;
5254
import org.bukkit.entity.Player;
5355
import org.bukkit.event.EventHandler;
5456
import org.bukkit.event.EventPriority;
@@ -220,10 +222,15 @@ public void onPlayerJoin(PlayerJoinEvent event) {
220222
@EventHandler
221223
public void onPlayerChangeTeam(PlayerContainerChangeStateEvent event) {
222224
Player player = event.getPlayer();
223-
if (event.getNewData().getMatchThread().getCurrentMatch().isRunning()) {
224-
Match match = Cardinal.getMatch(event.getPlayer());
225-
Spawn spawn = ListUtil.getRandom(getSpawns(match, event.getNewData().getPlaying()));
226-
Bukkit.getPluginManager().callEvent(new CardinalRespawnEvent(player, spawn));
225+
MatchThread newThread = event.getNewData().getMatchThread();
226+
if (newThread != null && newThread.getCurrentMatch().isRunning()) {
227+
Match match = newThread.getCurrentMatch();
228+
if (event.getNewData().getPlaying() != null) {
229+
Spawn spawn = ListUtil.getRandom(getSpawns(match, event.getNewData().getPlaying()));
230+
Bukkit.getPluginManager().callEvent(new CardinalRespawnEvent(player, spawn));
231+
} else {
232+
Bukkit.getPluginManager().callEvent(new CardinalRespawnEvent(player, getDefaultSpawn(match)));
233+
}
227234
}
228235
}
229236

@@ -273,7 +280,7 @@ public void onCardinalRespawn(CardinalRespawnEvent event) {
273280
* @return The default spawn.
274281
*/
275282
@NonNull
276-
public Spawn getDefaultSpawn(@NonNull Match match) {
283+
private Spawn getDefaultSpawn(@NonNull Match match) {
277284
for (Spawn spawn : spawns.get(match)) {
278285
if (spawn.isDefaultSpawn()) {
279286
return spawn;
@@ -283,6 +290,15 @@ public Spawn getDefaultSpawn(@NonNull Match match) {
283290
return null;
284291
}
285292

293+
/**
294+
* Gets the location of the default spawn.
295+
* @param match The match.
296+
*/
297+
@NonNull
298+
public Location getDefaultSpawnLocation(@NonNull Match match) {
299+
return getDefaultSpawn(match).getSpawnPoint();
300+
}
301+
286302
/**
287303
* Gets a list of {@link Spawn} based on a team. If no spawn is found, spawns without a team will be returned.
288304
*

src/main/java/in/twizmwaz/cardinal/playercontainer/Containers.java

+19-19
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
package in.twizmwaz.cardinal.playercontainer;
2727

2828
import in.twizmwaz.cardinal.event.player.PlayerContainerChangeStateEvent;
29-
import in.twizmwaz.cardinal.module.team.Team;
29+
import in.twizmwaz.cardinal.module.team.SinglePlayerContainer;
3030
import lombok.AccessLevel;
3131
import lombok.NoArgsConstructor;
3232
import org.bukkit.Bukkit;
@@ -46,30 +46,30 @@ public static void handleStateChangeEvent(Player player, PlayerContainerData old
4646
PlayerContainerChangeStateEvent event = new PlayerContainerChangeStateEvent(player, oldData, newData);
4747
Bukkit.getPluginManager().callEvent(event);
4848
if (!event.isCancelled()) {
49-
if (isNonNullAndHasPlayer(oldData.getMatchThread(), player)) {
50-
oldData.getMatchThread().removePlayer(player);
51-
}
52-
if (isNonNullAndHasPlayer(oldData.getMatch(), player)) {
53-
oldData.getMatch().removePlayer(player);
54-
}
55-
if (isNonNullAndHasPlayer(oldData.getPlaying(), player) && oldData.getPlaying() instanceof Team) {
56-
oldData.getPlaying().removePlayer(player);
49+
switchPlayer(oldData.getMatchThread(), newData.getMatchThread(), player);
50+
switchPlayer(oldData.getMatch(), newData.getMatch(), player);
51+
if (oldData.getMatch() == newData.getMatch()) {
52+
switchPlayer(oldData.getPlaying(), newData.getPlaying(), player);
53+
} else {
54+
// If match is not the same, removing the player from the match already kicked the player from the team.
55+
addPlayer(newData.getPlaying(), player);
5756
}
57+
}
58+
}
5859

59-
if (newData.getMatchThread() != null) {
60-
newData.getMatchThread().addPlayer(player);
61-
}
62-
if (newData.getMatch() != null) {
63-
newData.getMatch().addPlayer(player);
64-
}
65-
if (newData.getPlaying() != null && newData.getPlaying() instanceof Team) {
66-
newData.getPlaying().addPlayer(player);
60+
private static void switchPlayer(PlayerContainer oldContainer, PlayerContainer newContainer, Player player) {
61+
if (oldContainer != newContainer) {
62+
if (oldContainer != null && oldContainer.hasPlayer(player)) {
63+
oldContainer.removePlayer(player);
6764
}
65+
addPlayer(newContainer, player);
6866
}
6967
}
7068

71-
private static boolean isNonNullAndHasPlayer(PlayerContainer container, Player player) {
72-
return container != null && container.hasPlayer(player);
69+
private static void addPlayer(PlayerContainer newContainer, Player player) {
70+
if (newContainer != null && !(newContainer instanceof SinglePlayerContainer)) {
71+
newContainer.addPlayer(player);
72+
}
7373
}
7474

7575
}

0 commit comments

Comments
 (0)