Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-12-26 08:10:11 +01:00
Fix: Only shutdown/close handlers in onDisable if they're nonnull (#4882)
Dieser Commit ist enthalten in:
Ursprung
8fd99e1e1a
Commit
f62cef7acb
@ -55,7 +55,11 @@ import org.geysermc.geyser.api.GeyserApi;
|
|||||||
import org.geysermc.geyser.api.command.CommandSource;
|
import org.geysermc.geyser.api.command.CommandSource;
|
||||||
import org.geysermc.geyser.api.event.EventBus;
|
import org.geysermc.geyser.api.event.EventBus;
|
||||||
import org.geysermc.geyser.api.event.EventRegistrar;
|
import org.geysermc.geyser.api.event.EventRegistrar;
|
||||||
import org.geysermc.geyser.api.event.lifecycle.*;
|
import org.geysermc.geyser.api.event.lifecycle.GeyserPostInitializeEvent;
|
||||||
|
import org.geysermc.geyser.api.event.lifecycle.GeyserPostReloadEvent;
|
||||||
|
import org.geysermc.geyser.api.event.lifecycle.GeyserPreInitializeEvent;
|
||||||
|
import org.geysermc.geyser.api.event.lifecycle.GeyserPreReloadEvent;
|
||||||
|
import org.geysermc.geyser.api.event.lifecycle.GeyserShutdownEvent;
|
||||||
import org.geysermc.geyser.api.network.AuthType;
|
import org.geysermc.geyser.api.network.AuthType;
|
||||||
import org.geysermc.geyser.api.network.BedrockListener;
|
import org.geysermc.geyser.api.network.BedrockListener;
|
||||||
import org.geysermc.geyser.api.network.RemoteServer;
|
import org.geysermc.geyser.api.network.RemoteServer;
|
||||||
@ -85,7 +89,13 @@ import org.geysermc.geyser.skin.SkinProvider;
|
|||||||
import org.geysermc.geyser.text.GeyserLocale;
|
import org.geysermc.geyser.text.GeyserLocale;
|
||||||
import org.geysermc.geyser.text.MinecraftLocale;
|
import org.geysermc.geyser.text.MinecraftLocale;
|
||||||
import org.geysermc.geyser.translator.text.MessageTranslator;
|
import org.geysermc.geyser.translator.text.MessageTranslator;
|
||||||
import org.geysermc.geyser.util.*;
|
import org.geysermc.geyser.util.AssetUtils;
|
||||||
|
import org.geysermc.geyser.util.CooldownUtils;
|
||||||
|
import org.geysermc.geyser.util.DimensionUtils;
|
||||||
|
import org.geysermc.geyser.util.Metrics;
|
||||||
|
import org.geysermc.geyser.util.NewsHandler;
|
||||||
|
import org.geysermc.geyser.util.VersionCheckUtils;
|
||||||
|
import org.geysermc.geyser.util.WebUtils;
|
||||||
import org.geysermc.mcprotocollib.network.tcp.TcpSession;
|
import org.geysermc.mcprotocollib.network.tcp.TcpSession;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@ -97,11 +107,19 @@ import java.net.UnknownHostException;
|
|||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.security.Key;
|
import java.security.Key;
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.UUID;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
import java.util.function.Consumer;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
@ -645,16 +663,11 @@ public class GeyserImpl implements GeyserApi {
|
|||||||
bootstrap.getGeyserLogger().info(GeyserLocale.getLocaleStringLog("geyser.core.shutdown.kick.done"));
|
bootstrap.getGeyserLogger().info(GeyserLocale.getLocaleStringLog("geyser.core.shutdown.kick.done"));
|
||||||
}
|
}
|
||||||
|
|
||||||
scheduledThread.shutdown();
|
runIfNonNull(scheduledThread, ScheduledExecutorService::shutdown);
|
||||||
geyserServer.shutdown();
|
runIfNonNull(geyserServer, GeyserServer::shutdown);
|
||||||
if (skinUploader != null) {
|
runIfNonNull(skinUploader, FloodgateSkinUploader::close);
|
||||||
skinUploader.close();
|
runIfNonNull(newsHandler, NewsHandler::shutdown);
|
||||||
}
|
runIfNonNull(erosionUnixListener, UnixSocketClientListener::close);
|
||||||
newsHandler.shutdown();
|
|
||||||
|
|
||||||
if (this.erosionUnixListener != null) {
|
|
||||||
this.erosionUnixListener.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
Registries.RESOURCE_PACKS.get().clear();
|
Registries.RESOURCE_PACKS.get().clear();
|
||||||
|
|
||||||
@ -833,6 +846,12 @@ public class GeyserImpl implements GeyserApi {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private <T> void runIfNonNull(T nullable, Consumer<T> consumer) {
|
||||||
|
if (nullable != null) {
|
||||||
|
consumer.accept(nullable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void scheduleRefreshTokensWrite() {
|
private void scheduleRefreshTokensWrite() {
|
||||||
scheduledThread.execute(() -> {
|
scheduledThread.execute(() -> {
|
||||||
// Ensure all writes are handled on the same thread
|
// Ensure all writes are handled on the same thread
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren