Skip to content

Commit 8cc7515

Browse files
authored
Merge pull request #4 from CraptiCraft-Development/fix/spectator-arena-teleport-failure
Player Teleport Failover
2 parents c267e8c + 0df869a commit 8cc7515

File tree

3 files changed

+109
-8
lines changed

3 files changed

+109
-8
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>me.loving11ish</groupId>
88
<artifactId>RedLightGreenLight</artifactId>
9-
<version>2.6.1</version>
9+
<version>2.6.2</version>
1010
<packaging>jar</packaging>
1111

1212
<name>RedLightGreenLight</name>

src/main/java/me/loving11ish/redlightgreenlight/utils/GameManager.java

Lines changed: 107 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.bukkit.entity.Player;
99

1010
import java.util.*;
11+
import java.util.concurrent.CompletableFuture;
1112

1213
public class GameManager {
1314

@@ -85,19 +86,118 @@ public static void setGameRunning(Integer gamerunning) {
8586
}
8687

8788
public static void teleportToLobby(Player player) {
89+
if (player == null) {
90+
// Handle null player
91+
MessageUtils.sendConsole("error", "Method: teleportToLobby(Player player)");
92+
MessageUtils.sendConsole("error", "Player is null!");
93+
return;
94+
}
95+
8896
Location location = RedLightGreenLight.getPlugin().getConfigManager().getLobbyLocation();
89-
PaperLib.teleportAsync(player, location);
90-
player.setInvulnerable(RedLightGreenLight.getPlugin().getConfigManager().isLeavePlayerInvulnerable());
91-
if (!(player.hasPermission("redlight.bypass.gamemode") || player.hasPermission("redlight.*") || player.isOp())) {
92-
player.setGameMode(GameMode.SURVIVAL);
97+
if (location == null) {
98+
// Handle null location
99+
MessageUtils.sendConsole("error", "Method: teleportToLobby(Player player)");
100+
MessageUtils.sendConsole("error", "Lobby location is null!");
101+
return;
93102
}
103+
104+
CompletableFuture<Boolean> future = PaperLib.teleportAsync(player, location);
105+
future.thenAccept(result -> {
106+
if (result) {
107+
player.setInvulnerable(RedLightGreenLight.getPlugin().getConfigManager().isLeavePlayerInvulnerable());
108+
if (!(player.hasPermission("redlight.bypass.gamemode") || player.hasPermission("redlight.*") || player.isOp())) {
109+
player.setGameMode(GameMode.SURVIVAL);
110+
MessageUtils.sendDebugConsole("info", "Player " + player.getName() + " did not have bypass permission.");
111+
}
112+
MessageUtils.sendDebugConsole("info", "Player " + player.getName() + " teleported to lobby location.");
113+
} else {
114+
// Handle teleportation failure
115+
MessageUtils.sendConsole("error", "Method: teleportToLobby(Player player)");
116+
MessageUtils.sendConsole("error", "Failed to teleport player to lobby location!");
117+
MessageUtils.sendConsole("error", "Using PaperLib teleportAsync method.");
118+
MessageUtils.sendConsole("info", "Trying alternate FoliaLib AsyncTeleport method.");
119+
CompletableFuture<Boolean> foliaLibFuture = RedLightGreenLight.getPlugin().getFoliaLib().getScheduler().teleportAsync(player, location);
120+
foliaLibFuture.thenAccept(foliaLibResult -> {
121+
if (foliaLibResult) {
122+
player.setInvulnerable(RedLightGreenLight.getPlugin().getConfigManager().isLeavePlayerInvulnerable());
123+
if (!(player.hasPermission("redlight.bypass.gamemode") || player.hasPermission("redlight.*") || player.isOp())) {
124+
player.setGameMode(GameMode.SURVIVAL);
125+
}
126+
MessageUtils.sendDebugConsole("info", "Player " + player.getName() + " teleported to lobby location.");
127+
} else {
128+
// Handle fallback teleportation failure
129+
MessageUtils.sendConsole("error", "Method: teleportToLobby(Player player)");
130+
MessageUtils.sendConsole("error", "Failed to teleport player to lobby location!");
131+
MessageUtils.sendConsole("error", "Using FoliaLib AsyncTeleport method.");
132+
MessageUtils.sendConsole("severe", "<=============================================>");
133+
MessageUtils.sendConsole("severe", "Failed to teleport player to lobby location!");
134+
MessageUtils.sendConsole("severe", "Player: " + player.getName());
135+
MessageUtils.sendConsole("severe", "Location: " + location);
136+
MessageUtils.sendConsole("severe", "Attempted using PaperLib teleportAsync method.");
137+
MessageUtils.sendConsole("severe", "Attempted using backup FoliaLib AsyncTeleport method.");
138+
MessageUtils.sendConsole("severe", "Please check your lobby location in the config.");
139+
MessageUtils.sendConsole("severe", "Please check your server console for more information.");
140+
MessageUtils.sendConsole("severe", "Please send your server console log to the plugin developer.");
141+
MessageUtils.sendConsole("severe", "Discord: https://discord.gg/crapticraft");
142+
MessageUtils.sendConsole("severe", "<=============================================>");
143+
}
144+
});
145+
}
146+
});
94147
}
95148

96149
public static void spectatorTeleportToArena(Player player) {
150+
if (player == null) {
151+
// Handle null player
152+
MessageUtils.sendConsole("error", "Method: spectatorTeleportToArena(Player player)");
153+
MessageUtils.sendConsole("error", "Player is null!");
154+
return;
155+
}
156+
97157
Location location = RedLightGreenLight.getPlugin().getConfigManager().getSpectateLocation();
98-
PaperLib.teleportAsync(player, location);
99-
player.setGameMode(GameMode.SPECTATOR);
100-
GameManager.addToSpectating(player);
158+
if (location == null) {
159+
// Handle null location
160+
MessageUtils.sendConsole("error", "Method: spectatorTeleportToArena(Player player)");
161+
MessageUtils.sendConsole("error", "Spectate location is null!");
162+
return;
163+
}
164+
165+
CompletableFuture<Boolean> future = PaperLib.teleportAsync(player, location);
166+
future.thenAccept(result -> {
167+
if (result) {
168+
player.setGameMode(GameMode.SPECTATOR);
169+
MessageUtils.sendDebugConsole("info", "Player " + player.getName() + " teleported to spectate location.");
170+
} else {
171+
// Handle teleportation failure
172+
MessageUtils.sendConsole("error", "Method: spectatorTeleportToArena(Player player)");
173+
MessageUtils.sendConsole("error", "Failed to teleport player to spectate location!");
174+
MessageUtils.sendConsole("error", "Using PaperLib teleportAsync method.");
175+
MessageUtils.sendConsole("info", "Trying alternate FoliaLib AsyncTeleport method.");
176+
CompletableFuture<Boolean> foliaLibFuture = RedLightGreenLight.getPlugin().getFoliaLib().getScheduler().teleportAsync(player, location);
177+
foliaLibFuture.thenAccept(foliaLibResult -> {
178+
if (foliaLibResult) {
179+
player.setGameMode(GameMode.SPECTATOR);
180+
MessageUtils.sendDebugConsole("info", "Player " + player.getName() + " teleported to spectate location.");
181+
} else {
182+
// Handle fallback teleportation failure
183+
MessageUtils.sendConsole("error", "Method: spectatorTeleportToArena(Player player)");
184+
MessageUtils.sendConsole("error", "Failed to teleport player to spectate location!");
185+
MessageUtils.sendConsole("error", "Using FoliaLib AsyncTeleport method.");
186+
MessageUtils.sendConsole("severe", "<=============================================>");
187+
MessageUtils.sendConsole("severe", "Failed to teleport player to spectate location!");
188+
MessageUtils.sendConsole("severe", "Player: " + player.getName());
189+
MessageUtils.sendConsole("severe", "Location: " + location);
190+
MessageUtils.sendConsole("severe", "Attempted using PaperLib teleportAsync method.");
191+
MessageUtils.sendConsole("severe", "Attempted using backup FoliaLib AsyncTeleport method.");
192+
MessageUtils.sendConsole("severe", "Please check your spectate location in the config.");
193+
MessageUtils.sendConsole("severe", "Please check your server console for more information.");
194+
MessageUtils.sendConsole("severe", "Please send your server console log to the plugin developer.");
195+
MessageUtils.sendConsole("severe", "Discord: https://discord.gg/crapticraft");
196+
MessageUtils.sendConsole("severe", "<=============================================>");
197+
}
198+
});
199+
}
200+
});
101201
}
102202

103203
public static void startGameArena1(Player player) {

src/main/resources/plugin.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ main: me.loving11ish.redlightgreenlight.RedLightGreenLight
44
api-version: 1.13
55
folia-supported: true
66
load: POSTWORLD
7+
softdepend: [ Multiverse-Core ]
78
authors: [ Loving11ish ]
89
description: A Red Light, Green Light mini-game based off the Netflix series Squid Games.
910

0 commit comments

Comments
 (0)