3
0
Mirror von https://github.com/IntellectualSites/FastAsyncWorldEdit.git synchronisiert 2024-10-03 20:21:05 +02:00

Throw exception if player is retired to ensure task always finishes

Dieser Commit ist enthalten in:
SirYwell 2023-03-09 11:29:31 +01:00 committet von Phillipp Glanz
Ursprung 002bb72e52
Commit 14a057e846

Datei anzeigen

@ -117,6 +117,7 @@ public class FoliaTaskManager extends TaskManager {
private static final MethodHandle EXECUTE_FOR_LOCATION; private static final MethodHandle EXECUTE_FOR_LOCATION;
private static final MethodHandle EXECUTE_FOR_PLAYER; private static final MethodHandle EXECUTE_FOR_PLAYER;
private static final Runnable THROW_IF_RETIRED = () -> throwRetired();
private static final MethodType LOCATION_EXECUTE_TYPE = methodType( private static final MethodType LOCATION_EXECUTE_TYPE = methodType(
void.class, void.class,
@ -160,7 +161,7 @@ public class FoliaTaskManager extends TaskManager {
// (ES, P, R, R, L)Z (ES, R, R, L)Z // (ES, P, R, R, L)Z (ES, R, R, L)Z
executeForPlayer = insertArguments(executeForPlayer, 1, pluginInstance); executeForPlayer = insertArguments(executeForPlayer, 1, pluginInstance);
// (ES, R1, R2, L)Z -> (ES, R1)Z // (ES, R1, R2, L)Z -> (ES, R1)Z
executeForPlayer = insertArguments(executeForPlayer, 2, null, 0); executeForPlayer = insertArguments(executeForPlayer, 2, THROW_IF_RETIRED, 0);
// (ES, R1)Z -> (ES, R1)V // (ES, R1)Z -> (ES, R1)V
executeForPlayer = dropReturn(executeForPlayer); executeForPlayer = dropReturn(executeForPlayer);
MethodHandle getScheduler = lookup.findVirtual( MethodHandle getScheduler = lookup.findVirtual(
@ -190,7 +191,6 @@ public class FoliaTaskManager extends TaskManager {
} }
} }
static void executeForEntity(Player player, Runnable task) { static void executeForEntity(Player player, Runnable task) {
// TODO task might not be run if player retires
try { try {
EXECUTE_FOR_PLAYER.invokeExact(BukkitAdapter.adapt(player), task); EXECUTE_FOR_PLAYER.invokeExact(BukkitAdapter.adapt(player), task);
} catch (Error | RuntimeException e) { } catch (Error | RuntimeException e) {
@ -200,6 +200,10 @@ public class FoliaTaskManager extends TaskManager {
} }
} }
private static void throwRetired() {
throw new RuntimeException("Player retired");
}
} }
} }