diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeLogger.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeLogger.java index e9b18acca59..cabb5d94a1e 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeLogger.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeLogger.java @@ -76,6 +76,13 @@ public void debug(String message) { } } + @Override + public void debug(String message, Throwable t) { + if (debug) { + logger.log(Level.INFO, message, t); + } + } + @Override public void debug(String message, Object... arguments) { if (debug) { diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java index 17c402037db..f366b164dc1 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java @@ -39,6 +39,7 @@ import net.md_5.bungee.protocol.ProtocolConstants; import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.ping.GeyserPingInfo; import org.geysermc.geyser.ping.IGeyserPingPassthrough; @@ -70,7 +71,7 @@ public GeyserPingInfo getPingInformation(InetSocketAddress inetSocketAddress) { event = future.get(100, TimeUnit.MILLISECONDS); } catch (Throwable cause) { String address = GeyserImpl.getInstance().config().logPlayerIpAddresses() ? inetSocketAddress.toString() : ""; - GeyserImpl.getInstance().getLogger().error("Failed to get ping information for " + address, cause); + GeyserLogger.get().error("Failed to get ping information for " + address, cause); return null; } diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java index 44fbcfdbe2c..1bf56782a85 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java @@ -310,10 +310,7 @@ public MetricsPlatform createMetricsPlatform() { try { return new BungeeMetrics(this); } catch (IOException e) { - this.geyserLogger.debug("Integrated bStats support failed to load."); - if (this.config().debugMode()) { - e.printStackTrace(); - } + this.geyserLogger.debug("Integrated bStats support failed to load.", e); return null; } } diff --git a/bootstrap/mod/gametest/src/main/java/org/geysermc/geyser/gametest/tests/ComponentHashTestInstance.java b/bootstrap/mod/gametest/src/main/java/org/geysermc/geyser/gametest/tests/ComponentHashTestInstance.java index 2954d5e1a49..9a72ae72872 100644 --- a/bootstrap/mod/gametest/src/main/java/org/geysermc/geyser/gametest/tests/ComponentHashTestInstance.java +++ b/bootstrap/mod/gametest/src/main/java/org/geysermc/geyser/gametest/tests/ComponentHashTestInstance.java @@ -43,6 +43,7 @@ import net.minecraft.util.ExtraCodecs; import net.minecraft.util.HashOps; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.gametest.registries.GameTestJavaRegistryProvider; import org.geysermc.geyser.item.hashing.DataComponentHashers; import org.geysermc.geyser.item.hashing.MapHasher; @@ -114,11 +115,11 @@ public void run(GameTestHelper helper) { try { helper.assertValueEqual(expected, geyser, "hash for component " + encodedJavaValue); } catch (GameTestAssertException assertException) { - GeyserImpl.getInstance().getLogger().warning("Hash failed for component " + testCase.type() + " (" + testCase.value() + "), printing values of MapHasher"); + GeyserLogger.get().warning("Hash failed for component " + testCase.type() + " (" + testCase.value() + "), printing values of MapHasher"); MapHasher.debug = true; DataComponentHashers.hash(registries, mcplComponent); MapHasher.debug = false; - GeyserImpl.getInstance().getLogger().warning("The Mojang encoded/expected value is printed in the exception message"); + GeyserLogger.get().warning("The Mojang encoded/expected value is printed in the exception message"); throw assertException; } } diff --git a/bootstrap/mod/gametest/src/main/java/org/geysermc/geyser/gametest/tests/EntityMetadataTest.java b/bootstrap/mod/gametest/src/main/java/org/geysermc/geyser/gametest/tests/EntityMetadataTest.java index 50e5068fb0e..a226a94d372 100644 --- a/bootstrap/mod/gametest/src/main/java/org/geysermc/geyser/gametest/tests/EntityMetadataTest.java +++ b/bootstrap/mod/gametest/src/main/java/org/geysermc/geyser/gametest/tests/EntityMetadataTest.java @@ -42,6 +42,7 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.GameType; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.gametest.mixin.SynchedEntityDataAccessor; import org.geysermc.geyser.gametest.util.SynchedEntityDataDebugger; @@ -101,7 +102,7 @@ public void run(GameTestHelper helper) { + SynchedEntityDataDebugger.findNameOfSerializer(dataItems[i].getAccessor().serializer()) + ")"); } } catch (GameTestAssertException exception) { - GeyserImpl.getInstance().getLogger().warning("Metadata for entity type " + entityType + " are as follows:\n" + SynchedEntityDataDebugger.prettyPrintEntityDataAccessors(javaEntity.getClass(), dataItems)); + GeyserLogger.get().warning("Metadata for entity type " + entityType + " are as follows:\n" + SynchedEntityDataDebugger.prettyPrintEntityDataAccessors(javaEntity.getClass(), dataItems)); throw exception; } finally { javaEntity.discard(); diff --git a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/GeyserModInjector.java b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/GeyserModInjector.java index c8ac2111622..84114dca854 100644 --- a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/GeyserModInjector.java +++ b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/GeyserModInjector.java @@ -38,6 +38,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.network.netty.GeyserInjector; import org.geysermc.geyser.network.netty.LocalServerChannelWrapper; import org.geysermc.geyser.platform.mod.platform.GeyserModPlatform; @@ -125,10 +126,7 @@ private ChannelInitializer getChildHandler(GeyserBootstrap bootstrap, C childHandler = (ChannelInitializer) childHandlerField.get(handler); break; } catch (Exception e) { - if (bootstrap.config().debugMode()) { - bootstrap.getGeyserLogger().debug("The handler " + name + " isn't a ChannelInitializer. THIS ERROR IS SAFE TO IGNORE!"); - e.printStackTrace(); - } + bootstrap.getGeyserLogger().debug("The handler " + name + " isn't a ChannelInitializer. THIS ERROR IS SAFE TO IGNORE!", e); } } if (childHandler == null) { @@ -149,8 +147,7 @@ public void shutdown() { eventLoopGroup.shutdownGracefully().sync(); eventLoopGroup = null; } catch (Exception e) { - GeyserImpl.getInstance().getLogger().error("Unable to shut down injector! " + e.getMessage()); - e.printStackTrace(); + GeyserLogger.get().error("Unable to shut down injector!", e); } } diff --git a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/GeyserModLogger.java b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/GeyserModLogger.java index da66b32c337..1e73f30de4e 100644 --- a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/GeyserModLogger.java +++ b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/GeyserModLogger.java @@ -84,6 +84,13 @@ public void debug(String message) { } } + @Override + public void debug(String message, Throwable t) { + if (debug) { + logger.info(message, t); + } + } + @Override public void debug(String message, Object... arguments) { if (debug) { diff --git a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/command/ModCommandSource.java b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/command/ModCommandSource.java index ae49ce7381b..29035aae5f4 100644 --- a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/command/ModCommandSource.java +++ b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/command/ModCommandSource.java @@ -36,6 +36,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.command.GeyserCommandSource; import org.geysermc.geyser.text.ChatColor; @@ -60,7 +61,7 @@ public void sendMessage(@NonNull String message) { if (source.getEntity() instanceof ServerPlayer) { ((ServerPlayer) source.getEntity()).sendSystemMessage(Component.literal(message), false); } else { - GeyserImpl.getInstance().getLogger().info(ChatColor.toANSI(message + ChatColor.RESET)); + GeyserLogger.get().info(ChatColor.toANSI(message + ChatColor.RESET)); } } diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotCompressionDisabler.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotCompressionDisabler.java index f0fa71ab261..ff976ef314d 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotCompressionDisabler.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotCompressionDisabler.java @@ -30,6 +30,7 @@ import io.netty.channel.ChannelPromise; import org.bukkit.Bukkit; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; /** * Disables the compression packet (and the compression handlers from being added to the pipeline) for Geyser clients @@ -56,7 +57,7 @@ public class GeyserSpigotCompressionDisabler extends ChannelOutboundHandlerAdapt loginSuccessPacketClass = findLoginSuccessPacket(); enabled = true; } catch (Exception e) { - GeyserImpl.getInstance().getLogger().error("Could not initialize compression disabler!", e); + GeyserLogger.get().error("Could not initialize compression disabler!", e); } COMPRESSION_PACKET_CLASS = compressionPacketClass; LOGIN_SUCCESS_PACKET_CLASS = loginSuccessPacketClass; diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotInjector.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotInjector.java index 152aa6afa55..48da4dea8de 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotInjector.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotInjector.java @@ -162,10 +162,7 @@ private ChannelInitializer getChildHandler(GeyserBootstrap bootstrap, C } break; } catch (Exception e) { - if (bootstrap.config().debugMode()) { - bootstrap.getGeyserLogger().debug("The handler " + name + " isn't a ChannelInitializer. THIS ERROR IS SAFE TO IGNORE!"); - e.printStackTrace(); - } + bootstrap.getGeyserLogger().debug("The handler " + name + " isn't a ChannelInitializer. THIS ERROR IS SAFE TO IGNORE!", e); } } if (childHandler == null) { diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotLogger.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotLogger.java index 231255fec94..6f86bb3dccf 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotLogger.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotLogger.java @@ -76,6 +76,13 @@ public void debug(String message) { } } + @Override + public void debug(String message, Throwable t) { + if (debug) { + logger.log(Level.INFO, message, t); + } + } + @Override public void debug(String message, Object... arguments) { if (debug) { diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java index ce1894538e8..550c9ac9880 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java @@ -288,10 +288,7 @@ public void onGeyserEnable() { } geyserLogger.debug("Using world manager of type: " + this.geyserWorldManager.getClass().getSimpleName()); } catch (Throwable e) { - if (geyserConfig.debugMode()) { - geyserLogger.debug("Error while attempting to find NMS adapter. Most likely, this can be safely ignored. :)"); - e.printStackTrace(); - } + geyserLogger.debug("Error while attempting to find NMS adapter. Most likely, this can be safely ignored. :)", e); } } else { geyserLogger.debug("Not using NMS adapter as it is disabled via system property."); diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/PaperAdventure.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/PaperAdventure.java index fa7555ac623..86d9282cba5 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/PaperAdventure.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/PaperAdventure.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.platform.spigot; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.mcprotocollib.protocol.data.DefaultComponentSerializer; import net.kyori.adventure.text.Component; import org.bukkit.command.CommandSender; @@ -79,7 +80,7 @@ public final class PaperAdventure { nativeGsonComponentSerializerDeserializeMethodBound = nativeGsonComponentSerializerDeserializeMethod .bindTo(nativeGsonComponentSerializerGsonGetter.invoke()); } catch (final Throwable throwable) { - GeyserImpl.getInstance().getLogger().error("Failed to access native GsonComponentSerializer", throwable); + GeyserLogger.get().error("Failed to access native GsonComponentSerializer", throwable); } } } @@ -94,9 +95,7 @@ public final class PaperAdventure { try { playerComponentSendMessage = CommandSender.class.getMethod("sendMessage", nativeComponentClass); } catch (final NoSuchMethodException e) { - if (GeyserImpl.getInstance().getLogger().isDebug()) { - e.printStackTrace(); - } + GeyserLogger.get().debug("No Paper Adventure component method was found.", e); } } SEND_MESSAGE_COMPONENT = playerComponentSendMessage; @@ -104,21 +103,21 @@ public final class PaperAdventure { public static @Nullable Object toNativeComponent(final Component component) { if (NATIVE_GSON_COMPONENT_SERIALIZER_DESERIALIZE_METHOD_BOUND == null) { - GeyserImpl.getInstance().getLogger().error("Illegal state where Component serialization was called when it wasn't available!"); + GeyserLogger.get().error("Illegal state where Component serialization was called when it wasn't available!"); return null; } try { return NATIVE_GSON_COMPONENT_SERIALIZER_DESERIALIZE_METHOD_BOUND.invoke(DefaultComponentSerializer.get().serialize(component)); } catch (final Throwable throwable) { - GeyserImpl.getInstance().getLogger().error("Failed to create native Component message", throwable); + GeyserLogger.get().error("Failed to create native Component message", throwable); return null; } } public static void sendMessage(final CommandSender sender, final Component component) { if (SEND_MESSAGE_COMPONENT == null) { - GeyserImpl.getInstance().getLogger().error("Illegal state where Component sendMessage was called when it wasn't available!"); + GeyserLogger.get().error("Illegal state where Component sendMessage was called when it wasn't available!"); return; } @@ -127,7 +126,7 @@ public static void sendMessage(final CommandSender sender, final Component compo try { SEND_MESSAGE_COMPONENT.invoke(sender, nativeComponent); } catch (final InvocationTargetException | IllegalAccessException e) { - GeyserImpl.getInstance().getLogger().error("Failed to send native Component message", e); + GeyserLogger.get().error("Failed to send native Component message", e); } } } diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/SpigotCommandRegistry.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/SpigotCommandRegistry.java index 39496d2c686..ff3bbae66c5 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/SpigotCommandRegistry.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/SpigotCommandRegistry.java @@ -31,6 +31,7 @@ import org.bukkit.command.CommandMap; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.command.CommandRegistry; import org.geysermc.geyser.command.GeyserCommandSource; import org.incendo.cloud.CommandManager; @@ -55,7 +56,7 @@ public SpigotCommandRegistry(GeyserImpl geyser, CommandManager cl registerBuiltInCommand(new CustomOptionsCommand("options", "geyser.commands.options.desc", "geyser.command.options")); registerBuiltInCommand(new QuickActionsCommand("quickactions", "geyser.commands.quickactions.desc", "geyser.command.quickactions")); registerBuiltInCommand(new GameruleCommand("gamerules", "geyser.commands.gamerules.desc", "geyser.command.gamerules")); + registerBuiltInCommand(new DebugCommand(geyser, "debug", "geyser.commands.debug.desc", "geyser.command.debug")); if (this.geyser.platformType() == PlatformType.STANDALONE) { registerBuiltInCommand(new StopCommand(geyser, "stop", "geyser.commands.stop.desc", "geyser.command.stop")); @@ -246,7 +249,7 @@ protected void register(GeyserCommand command, Map comman command.register(cloud); commands.put(name, command); - geyser.getLogger().debug(GeyserLocale.getLocaleStringLog("geyser.commands.registered", root + " " + name)); + GeyserLogger.get().debug(GeyserLocale.getLocaleStringLog("geyser.commands.registered", root + " " + name)); for (String alias : command.aliases()) { commands.put(alias, command); @@ -259,7 +262,7 @@ protected void register(GeyserCommand command, Map comman TriState existingDefault = permissionDefaults.get(permission); // Extensions might be using the same permission for two different commands if (existingDefault != null && existingDefault != defaultValue) { - geyser.getLogger().debug("Overriding permission default %s:%s with %s".formatted(permission, existingDefault, defaultValue)); + GeyserLogger.get().debug("Overriding permission default %s:%s with %s".formatted(permission, existingDefault, defaultValue)); } permissionDefaults.put(permission, defaultValue); diff --git a/core/src/main/java/org/geysermc/geyser/command/CommandSourceConverter.java b/core/src/main/java/org/geysermc/geyser/command/CommandSourceConverter.java index 1fa5871e09e..e6aa59f7002 100644 --- a/core/src/main/java/org/geysermc/geyser/command/CommandSourceConverter.java +++ b/core/src/main/java/org/geysermc/geyser/command/CommandSourceConverter.java @@ -95,9 +95,8 @@ public static CommandSourceConverter layered(Class senderType, } if (!(source instanceof GeyserSession)) { - GeyserLogger logger = GeyserImpl.getInstance().getLogger(); - if (logger.isDebug()) { - logger.debug("Falling back to UUID for command sender lookup for a command source that is not a GeyserSession: " + source); + if (GeyserLogger.get().isDebug()) { + GeyserLogger.get().debug("Falling back to UUID for command sender lookup for a command source that is not a GeyserSession: " + source); Thread.dumpStack(); } } diff --git a/core/src/main/java/org/geysermc/geyser/command/ExceptionHandlers.java b/core/src/main/java/org/geysermc/geyser/command/ExceptionHandlers.java index 444057709cc..95c07a10df7 100644 --- a/core/src/main/java/org/geysermc/geyser/command/ExceptionHandlers.java +++ b/core/src/main/java/org/geysermc/geyser/command/ExceptionHandlers.java @@ -129,10 +129,7 @@ private static void handleNoPermission(CommandContext conte return; } } else { - GeyserLogger logger = GeyserImpl.getInstance().getLogger(); - if (logger.isDebug()) { - logger.debug("Expected a GeyserPermission.Result for %s but instead got %s from %s".formatted(exception.currentChain(), exception.permissionResult(), exception.missingPermission())); - } + GeyserLogger.get().debug("Expected a GeyserPermission.Result for %s but instead got %s from %s".formatted(exception.currentChain(), exception.permissionResult(), exception.missingPermission())); } // Result.NO_PERMISSION or generic permission failure @@ -141,6 +138,6 @@ private static void handleNoPermission(CommandContext conte private static void handleUnexpectedThrowable(GeyserCommandSource source, Throwable throwable) { source.sendMessage(MinecraftLocale.getLocaleString("command.failed", source.locale())); // java edition translation key - GeyserImpl.getInstance().getLogger().error("Exception while executing command handler", throwable); + GeyserLogger.get().error("Exception while executing command handler", throwable); } } diff --git a/core/src/main/java/org/geysermc/geyser/command/GeyserPermission.java b/core/src/main/java/org/geysermc/geyser/command/GeyserPermission.java index 1ee677e9768..e0fcbd9df06 100644 --- a/core/src/main/java/org/geysermc/geyser/command/GeyserPermission.java +++ b/core/src/main/java/org/geysermc/geyser/command/GeyserPermission.java @@ -27,6 +27,7 @@ import lombok.AllArgsConstructor; import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.GeyserLogger; import org.incendo.cloud.CommandManager; import org.incendo.cloud.key.CloudKey; import org.incendo.cloud.permission.Permission; diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java index 175c95bfc57..2f5759d238e 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java @@ -28,6 +28,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.util.TriState; import org.geysermc.geyser.command.GeyserCommand; import org.geysermc.geyser.command.GeyserCommandSource; @@ -211,7 +212,7 @@ public void execute(CommandContext context) { sendLinks(source); } catch (Exception e) { source.sendMessage("An error occurred while trying to check your connection! Check the console for more information."); - geyser.getLogger().error("Error while trying to check your connection!", e); + GeyserLogger.get().error("Error while trying to check your connection!", e); } }); } diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/DebugCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/DebugCommand.java new file mode 100644 index 00000000000..5810d8c6cdd --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/DebugCommand.java @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2026 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.command.defaults; + +import com.sun.management.HotSpotDiagnosticMXBean; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; +import org.geysermc.geyser.api.util.TriState; +import org.geysermc.geyser.command.GeyserCommand; +import org.geysermc.geyser.command.GeyserCommandSource; +import org.geysermc.geyser.debug.SessionDebugOption; +import org.geysermc.geyser.session.GeyserSession; +import org.incendo.cloud.CommandManager; +import org.incendo.cloud.context.CommandContext; + +import javax.management.MBeanServer; + +import java.io.IOException; +import java.lang.management.ManagementFactory; +import java.nio.file.Files; +import java.nio.file.Path; + +import static org.incendo.cloud.parser.standard.BooleanParser.booleanParser; +import static org.incendo.cloud.parser.standard.EnumParser.enumParser; +import static org.incendo.cloud.parser.standard.LongParser.longParser; + +public class DebugCommand extends GeyserCommand { + private final GeyserImpl geyser; + + public DebugCommand(GeyserImpl geyser, String name, String description, String permission) { + super(name, description, permission, TriState.NOT_SET, false, false); + this.geyser = geyser; + } + + @Override + public void register(CommandManager manager) { + manager.command(baseBuilder(manager) + .literal("player") + .literal("options") + .required("option", enumParser(SessionDebugOption.class)) + .required("xuid", longParser(0)) + .handler(this::execute)); + + manager.command(baseBuilder(manager) + .literal("logging") + .required("enabled", booleanParser()) + .handler(this::executeLogging)); + + manager.command(baseBuilder(manager) + .literal("heapdump") + .optional("live", booleanParser()) + .handler(this::executeHeapDump)); + } + + @Override + public void execute(CommandContext context) { + long xuid = context.get("xuid"); + SessionDebugOption option = context.get("option"); + + boolean newVal = this.geyser.getDebugSessionMap().toggleDebugOption(xuid, option); + + GeyserSession session = this.geyser.connectionByXuid(String.valueOf(xuid)); + if (session != null) { + if (session.getDebugOptions().contains(option)) session.getDebugOptions().remove(option); + else session.getDebugOptions().add(option); + + if (newVal) { + context.sender().sendMessage("Applied debug option, the player may need to relog in order for the option to apply."); + } else { + context.sender().sendMessage("Remove debug option, the player may need to relog in order for the option to apply."); + } + + return; + } + + if (newVal) { + context.sender().sendMessage("Applied debug option, the option will apply when the player logs on."); + } else { + context.sender().sendMessage("Remove debug option, the option will apply when the player logs on."); + } + } + + private void executeLogging(CommandContext context) { + GeyserLogger.get().warning("e"); + boolean enabled = context.get("enabled"); + GeyserLogger.get().setDebug(enabled); + + for (GeyserSession session : this.geyser.onlineConnections()) { + session.getUpstream().getSession().setLogging(enabled); + } + } + + private void executeHeapDump(CommandContext context) { + try { + Path path = this.geyser.configDirectory().resolve("debug_heapdump.hprof"); + Files.deleteIfExists(path); + MBeanServer server = ManagementFactory.getPlatformMBeanServer(); + HotSpotDiagnosticMXBean mxBean = ManagementFactory.newPlatformMXBeanProxy( + server, "com.sun.management:type=HotSpotDiagnostic", HotSpotDiagnosticMXBean.class); + mxBean.dumpHeap(path.toString(), (Boolean) context.optional("live").orElse(true)); + } catch (IOException e) { + GeyserLogger.get().error("Failed to create heapdump!", e); + context.sender().sendMessage("Failed to create heapdump."); + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/DumpCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/DumpCommand.java index 10eb5578cee..d7aa95ce781 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/DumpCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/DumpCommand.java @@ -34,6 +34,7 @@ import java.util.ArrayList; import java.util.List; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.util.TriState; import org.geysermc.geyser.command.GeyserCommand; import org.geysermc.geyser.command.GeyserCommandSource; @@ -118,7 +119,7 @@ public void execute(CommandContext context) { dumpData = gson.toJson(dump); } catch (Exception e) { source.sendMessage(ChatColor.RED + GeyserLocale.getPlayerLocaleString("geyser.commands.dump.collect_error", source.locale())); - geyser.getLogger().error(GeyserLocale.getLocaleStringLog("geyser.commands.dump.collect_error_short"), e); + GeyserLogger.get().error(GeyserLocale.getLocaleStringLog("geyser.commands.dump.collect_error_short"), e); return; } @@ -133,7 +134,7 @@ public void execute(CommandContext context) { outputStream.close(); } catch (IOException e) { source.sendMessage(ChatColor.RED + GeyserLocale.getPlayerLocaleString("geyser.commands.dump.write_error", source.locale())); - geyser.getLogger().error(GeyserLocale.getLocaleStringLog("geyser.commands.dump.write_error_short"), e); + GeyserLogger.get().error(GeyserLocale.getLocaleStringLog("geyser.commands.dump.write_error_short"), e); return; } @@ -148,9 +149,9 @@ public void execute(CommandContext context) { responseNode = JsonUtils.parseJson(response); } catch (Throwable e) { source.sendMessage(ChatColor.RED + GeyserLocale.getPlayerLocaleString("geyser.commands.dump.upload_error", source.locale())); - geyser.getLogger().error(GeyserLocale.getLocaleStringLog("geyser.commands.dump.upload_error_short"), e); + GeyserLogger.get().error(GeyserLocale.getLocaleStringLog("geyser.commands.dump.upload_error_short"), e); if (e instanceof JsonParseException && response != null) { - geyser.getLogger().error("Failed to parse dump response! got: " + response); + GeyserLogger.get().error("Failed to parse dump response! got: " + response); } return; } @@ -165,7 +166,7 @@ public void execute(CommandContext context) { source.sendMessage(GeyserLocale.getPlayerLocaleString("geyser.commands.dump.message", source.locale()) + " " + ChatColor.DARK_AQUA + uploadedDumpUrl); if (!source.isConsole()) { - geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.commands.dump.created", source.name(), uploadedDumpUrl)); + GeyserLogger.get().info(GeyserLocale.getLocaleStringLog("geyser.commands.dump.created", source.name(), uploadedDumpUrl)); } } } diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/VersionCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/VersionCommand.java index 7de94eaba50..48399523def 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/VersionCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/VersionCommand.java @@ -27,6 +27,7 @@ import com.google.gson.JsonObject; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.util.MinecraftVersion; import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.api.util.TriState; @@ -102,7 +103,7 @@ public void execute(CommandContext context) { source.locale(), (latestBuildNumber - buildNumber), "https://geysermc.org/download" )); } catch (IOException e) { - GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.commands.version.failed"), e); + GeyserLogger.get().error(GeyserLocale.getLocaleStringLog("geyser.commands.version.failed"), e); source.sendMessage(ChatColor.RED + GeyserLocale.getPlayerLocaleString("geyser.commands.version.failed", source.locale())); } } diff --git a/core/src/main/java/org/geysermc/geyser/command/standalone/StandaloneCloudCommandManager.java b/core/src/main/java/org/geysermc/geyser/command/standalone/StandaloneCloudCommandManager.java index 87aab80452d..b58c4a36849 100644 --- a/core/src/main/java/org/geysermc/geyser/command/standalone/StandaloneCloudCommandManager.java +++ b/core/src/main/java/org/geysermc/geyser/command/standalone/StandaloneCloudCommandManager.java @@ -28,6 +28,7 @@ import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.event.lifecycle.GeyserRegisterPermissionCheckersEvent; import org.geysermc.geyser.api.event.lifecycle.GeyserRegisterPermissionsEvent; import org.geysermc.geyser.api.permission.PermissionChecker; @@ -81,7 +82,7 @@ public StandaloneCloudCommandManager(GeyserImpl geyser) { basePermissions.addAll(config.getDefaultPermissions()); baseDeniedPermissions.addAll(config.getDefaultDeniedPermissions()); } catch (Exception e) { - geyser.getLogger().error("Failed to load permissions.yml - proceeding without it", e); + GeyserLogger.get().error("Failed to load permissions.yml - proceeding without it", e); } } @@ -98,7 +99,7 @@ public void fireRegisterPermissionsEvent() { return; } - GeyserImpl.getInstance().getLogger().debug("Registering permission %s with permission default %s", permission, def); + GeyserLogger.get().debug("Registering permission %s with permission default %s", permission, def); if (def == TriState.TRUE) { // The last caller gets to override earlier set defaults diff --git a/core/src/main/java/org/geysermc/geyser/configuration/ConfigLoader.java b/core/src/main/java/org/geysermc/geyser/configuration/ConfigLoader.java index af147952d20..79ca0c7edff 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/ConfigLoader.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/ConfigLoader.java @@ -30,6 +30,7 @@ import org.checkerframework.common.returnsreceiver.qual.This; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.text.GeyserLocale; import org.spongepowered.configurate.CommentedConfigurationNode; @@ -95,7 +96,7 @@ public ConfigLoader createFolder() { Path dataFolder = this.bootstrap.getConfigFolder(); if (!dataFolder.toFile().exists()) { if (!dataFolder.toFile().mkdir()) { - GeyserImpl.getInstance().getLogger().warning("Failed to create config folder: " + dataFolder); + GeyserLogger.get().warning("Failed to create config folder: " + dataFolder); } } return this; diff --git a/core/src/main/java/org/geysermc/geyser/debug/GeyserDebugSessionMap.java b/core/src/main/java/org/geysermc/geyser/debug/GeyserDebugSessionMap.java new file mode 100644 index 00000000000..881d1781c05 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/debug/GeyserDebugSessionMap.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2026 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.debug; + +import org.geysermc.geyser.session.GeyserSession; + +import java.util.EnumSet; +import java.util.HashMap; +import java.util.Map; + +public class GeyserDebugSessionMap { + private final Map> debugOptionsHolder = new HashMap<>(); + + public boolean toggleDebugOption(long xuid, SessionDebugOption option) { + if (debugOptionsHolder.containsKey(xuid)) { + EnumSet set = debugOptionsHolder.get(xuid); + if (set.contains(option)) { + set.remove(option); + return false; + } else { + set.add(option); + return true; + } + } else { + debugOptionsHolder.put(xuid, EnumSet.of(option)); + return true; + } + } + + public void setFor(GeyserSession session) { + session.setDebugOptions(debugOptionsHolder.getOrDefault(Long.parseLong(session.xuid()), EnumSet.noneOf(SessionDebugOption.class))); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/debug/SessionDebugOption.java b/core/src/main/java/org/geysermc/geyser/debug/SessionDebugOption.java new file mode 100644 index 00000000000..bd9e50bdbef --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/debug/SessionDebugOption.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2026 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.debug; + +public enum SessionDebugOption { + // Pack + FORCE_OPTIONAL_PACKS, + FORCE_DISABLE_PACKS, + FORCE_VIBRANT_VISUALS +} diff --git a/core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java b/core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java index 3dcb1e13bba..eaa3d379b41 100644 --- a/core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java +++ b/core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java @@ -41,6 +41,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.floodgate.util.DeviceOs; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.GeyserApi; import org.geysermc.geyser.api.extension.Extension; import org.geysermc.geyser.api.util.MinecraftVersion; @@ -117,10 +118,7 @@ public DumpInfo(GeyserImpl geyser, boolean addLog) { configNode.set(geyser.config()); this.config = toGson(configNode); } catch (SerializationException e) { - e.printStackTrace(); - if (geyser.config().debugMode()) { - e.printStackTrace(); - } + GeyserLogger.get().error("Error serializing config. Dump will contain null config.", e); } String sha256Hash = "unknown"; @@ -131,9 +129,7 @@ public DumpInfo(GeyserImpl geyser, boolean addLog) { //noinspection UnstableApiUsage sha256Hash = byteSource.hash(Hashing.sha256()).toString(); } catch (Exception e) { - if (geyser.config().debugMode()) { - e.printStackTrace(); - } + GeyserLogger.get().debug("Error obtaining JAR SHA256 hash.", e); } this.hash = sha256Hash; diff --git a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java index 64ed99ef96d..9530e1c1abe 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java @@ -28,7 +28,7 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; import lombok.Setter; import lombok.experimental.Accessors; -import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.factory.EntityFactory; import org.geysermc.geyser.entity.properties.GeyserEntityProperties; import org.geysermc.geyser.entity.properties.type.PropertyType; @@ -71,10 +71,8 @@ public void translateMetadata(T entity, EntityMetadata 1000000) { // https://learn.microsoft.com/en-us/minecraft/creator/documents/introductiontoentityproperties?view=minecraft-bedrock-stable#a-note-on-large-integer-entity-property-values - GeyserImpl.getInstance().getLogger().warning("Using int entity properties with min / max values larger than +- 1 million is not recommended!"); + GeyserLogger.get().warning("Using int entity properties with min / max values larger than +- 1 million is not recommended!"); } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java b/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java index dd198930ffa..e3a9cf2de6c 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java @@ -43,6 +43,7 @@ import org.cloudburstmc.protocol.bedrock.packet.MoveEntityDeltaPacket; import org.cloudburstmc.protocol.bedrock.packet.RemoveEntityPacket; import org.cloudburstmc.protocol.bedrock.packet.SetEntityDataPacket; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.entity.property.BatchPropertyUpdater; import org.geysermc.geyser.api.entity.property.GeyserEntityProperty; import org.geysermc.geyser.api.entity.type.GeyserEntity; @@ -227,10 +228,10 @@ public void spawnEntity() { flagsDirty = false; - if (session.getGeyser().config().debugMode() && PRINT_ENTITY_SPAWN_DEBUG) { + if (GeyserLogger.get().isDebug() && PRINT_ENTITY_SPAWN_DEBUG) { EntityType type = definition.entityType(); String name = type != null ? type.name() : getClass().getSimpleName(); - session.getGeyser().getLogger().debug("Spawned entity " + name + " at location " + position + " with id " + geyserId + " (java id " + entityId + ")"); + GeyserLogger.get().debug("Spawned entity " + name + " at location " + position + " with id " + geyserId + " (java id " + entityId + ")"); } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java index 94b51420ec0..fb94110d2e9 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java @@ -33,6 +33,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.packet.BlockEntityDataPacket; import org.cloudburstmc.protocol.bedrock.packet.UpdateBlockPacket; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.spawn.EntitySpawnContext; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.ItemTranslator; @@ -94,7 +95,7 @@ protected void initializeMetadata() { @Override public void spawnEntity() { updateBlock(true); - session.getGeyser().getLogger().debug("Spawned item frame at location " + bedrockPosition + " with java id " + entityId); + GeyserLogger.get().debug("Spawned item frame at location " + bedrockPosition + " with java id " + entityId); valid = true; } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/LivingEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/LivingEntity.java index 8fbea9933f8..cf8a8f4479f 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/LivingEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/LivingEntity.java @@ -42,6 +42,7 @@ import org.cloudburstmc.protocol.bedrock.packet.MoveEntityDeltaPacket; import org.cloudburstmc.protocol.bedrock.packet.UpdateAttributesPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.attribute.GeyserAttributeType; import org.geysermc.geyser.entity.spawn.EntitySpawnContext; import org.geysermc.geyser.entity.type.living.animal.HappyGhastEntity; @@ -295,7 +296,7 @@ public void setParticles(ObjectEntityMetadata> entityMetadata) { // If we couldn't map it, skip it if (effectType == null) { - GeyserImpl.getInstance().getLogger().debug("Could not map particle " + particle.getType() + " to an effect for entity " + this.entityId); + GeyserLogger.get().debug("Could not map particle " + particle.getType() + " to an effect for entity " + this.entityId); continue; } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/PaintingEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/PaintingEntity.java index f3e9e5fd744..833735e4cf6 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/PaintingEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/PaintingEntity.java @@ -27,6 +27,7 @@ import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.packet.AddPaintingPacket; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.spawn.EntitySpawnContext; import org.geysermc.geyser.level.PaintingType; import org.geysermc.geyser.session.cache.registry.JavaRegistries; @@ -92,7 +93,7 @@ private void updatePainting() { valid = true; - session.getGeyser().getLogger().debug("Spawned painting on " + position); + GeyserLogger.get().debug("Spawned painting on " + position); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ThrownPotionEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ThrownPotionEntity.java index 41c7d9e50ca..9bd427893e6 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ThrownPotionEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ThrownPotionEntity.java @@ -28,6 +28,7 @@ import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.spawn.EntitySpawnContext; import org.geysermc.geyser.inventory.item.Potion; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; @@ -65,7 +66,7 @@ public void setItem(EntityMetadata entityMetadata) { setFlag(EntityFlag.ENCHANTED, !NON_ENCHANTED_POTIONS.contains(potion)); } else { dirtyMetadata.put(EntityDataTypes.AUX_VALUE_DATA, (short) 0); - GeyserImpl.getInstance().getLogger().debug("Unknown java potion: " + potionContents.getPotionId()); + GeyserLogger.get().debug("Unknown java potion: " + potionContents.getPotionId()); } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/player/AvatarEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/player/AvatarEntity.java index 11afa724fde..dbcddfa6d83 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/player/AvatarEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/player/AvatarEntity.java @@ -41,6 +41,7 @@ import org.cloudburstmc.protocol.bedrock.packet.AddPlayerPacket; import org.cloudburstmc.protocol.bedrock.packet.MovePlayerPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.skin.SkinData; import org.geysermc.geyser.entity.spawn.EntitySpawnContext; import org.geysermc.geyser.entity.type.LivingEntity; @@ -212,7 +213,7 @@ public void setSkin(GameProfile profile, @Nullable Runnable after) { try { textures = profile.getTextures(false); } catch (IllegalStateException e) { - GeyserImpl.getInstance().getLogger().debug("Error loading textures for profile (%s)! Got: %s", profile, e); + GeyserLogger.get().debug("Error loading textures for profile (%s)! Got: %s", profile, e); textures = null; } setSkin(textures, after); diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java index 0992d3405f7..a497debbb48 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java @@ -36,6 +36,7 @@ import org.cloudburstmc.protocol.bedrock.packet.SetEntityLinkPacket; import org.cloudburstmc.protocol.bedrock.packet.UpdateAttributesPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.entity.type.player.GeyserPlayerEntity; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.attribute.GeyserAttributeType; @@ -80,7 +81,7 @@ public PlayerEntity(EntitySpawnContext context, GameProfile profile) { try { this.textures = profile.getTextures(true); } catch (Exception e) { - GeyserImpl.getInstance().getLogger().debug("Error loading textures for player!" + profile, e); + GeyserLogger.get().debug("Error loading textures for player!" + profile, e); this.textures = null; } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/vehicle/VehicleComponent.java b/core/src/main/java/org/geysermc/geyser/entity/vehicle/VehicleComponent.java index c395a95c829..fe862b572f3 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/vehicle/VehicleComponent.java +++ b/core/src/main/java/org/geysermc/geyser/entity/vehicle/VehicleComponent.java @@ -37,6 +37,7 @@ import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.cloudburstmc.protocol.bedrock.packet.MoveEntityDeltaPacket; import org.geysermc.erosion.util.BlockPositionIterator; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.LivingEntity; import org.geysermc.geyser.level.block.BlockStateValues; @@ -1005,7 +1006,7 @@ protected Vector3i supportingBlockPos() { protected int getBlockId(int x, int y, int z) { int index = this.blockIter.getIndex(x, y, z); if (index == -1) { - vehicle.getSession().getGeyser().getLogger().debug("[client-vehicle] Block cache miss"); + GeyserLogger.get().debug("[client-vehicle] Block cache miss"); return vehicle.getSession().getGeyser().getWorldManager().getBlockAt(vehicle.getSession(), x, y, z); } diff --git a/core/src/main/java/org/geysermc/geyser/erosion/AbstractGeyserboundPacketHandler.java b/core/src/main/java/org/geysermc/geyser/erosion/AbstractGeyserboundPacketHandler.java index b8363efc96b..2912862e8b4 100644 --- a/core/src/main/java/org/geysermc/geyser/erosion/AbstractGeyserboundPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/erosion/AbstractGeyserboundPacketHandler.java @@ -27,6 +27,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.erosion.packet.geyserbound.*; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.session.GeyserSession; public abstract class AbstractGeyserboundPacketHandler implements GeyserboundPacketHandler { @@ -83,6 +84,6 @@ public void close() { } protected final void illegalPacket(GeyserboundPacket packet) { - session.getGeyser().getLogger().warning("Illegal packet sent from backend server! " + packet); + GeyserLogger.get().warning("Illegal packet sent from backend server! " + packet); } } diff --git a/core/src/main/java/org/geysermc/geyser/erosion/GeyserboundPacketHandlerImpl.java b/core/src/main/java/org/geysermc/geyser/erosion/GeyserboundPacketHandlerImpl.java index a2bd5779980..ebe0fe154a5 100644 --- a/core/src/main/java/org/geysermc/geyser/erosion/GeyserboundPacketHandlerImpl.java +++ b/core/src/main/java/org/geysermc/geyser/erosion/GeyserboundPacketHandlerImpl.java @@ -43,6 +43,7 @@ import org.geysermc.erosion.packet.backendbound.BackendboundInitializePacket; import org.geysermc.erosion.packet.backendbound.BackendboundPacket; import org.geysermc.erosion.packet.geyserbound.*; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.level.block.BlockStateValues; import org.geysermc.geyser.level.block.property.Properties; import org.geysermc.geyser.level.block.type.Block; @@ -81,7 +82,7 @@ public void handleBatchBlockId(GeyserboundBatchBlockIdPacket packet) { if (this.pendingBatchLookup != null) { this.pendingBatchLookup.complete(packet.getBlocks()); } else { - session.getGeyser().getLogger().warning("Batch block ID packet received with no future to complete."); + GeyserLogger.get().warning("Batch block ID packet received with no future to complete."); } } @@ -104,7 +105,7 @@ public void handleBlockId(GeyserboundBlockIdPacket packet) { future.complete(packet.getBlockId()); return; } - session.getGeyser().getLogger().warning("Block ID packet received with no future to complete."); + GeyserLogger.get().warning("Block ID packet received with no future to complete."); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCustomItemsEventImpl.java b/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCustomItemsEventImpl.java index 3f3561b4f2f..1f78903954f 100644 --- a/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCustomItemsEventImpl.java +++ b/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCustomItemsEventImpl.java @@ -29,6 +29,7 @@ import com.google.common.collect.MultimapBuilder; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCustomItemsEvent; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.NonVanillaCustomItemData; @@ -89,7 +90,7 @@ public boolean register(@NonNull String identifier, @NonNull CustomItemData cust deprecatedCustomItems.put(identifier, customItemData); return true; } catch (CustomItemDefinitionRegisterException exception) { - GeyserImpl.getInstance().getLogger().error("Not registering deprecated custom item: " + customItemData, exception); + GeyserLogger.get().error("Not registering deprecated custom item: " + customItemData, exception); return false; } } @@ -102,7 +103,7 @@ public boolean register(@NonNull NonVanillaCustomItemData customItemData) { deprecatedNonVanillaCustomItems.add(customItemData); return true; } catch (CustomItemDefinitionRegisterException exception) { - GeyserImpl.getInstance().getLogger().error("Not registering deprecated non-vanilla custom item: " + customItemData, exception); + GeyserLogger.get().error("Not registering deprecated non-vanilla custom item: " + customItemData, exception); return false; } } diff --git a/core/src/main/java/org/geysermc/geyser/event/type/SessionLoadResourcePacksEventImpl.java b/core/src/main/java/org/geysermc/geyser/event/type/SessionLoadResourcePacksEventImpl.java index 6ec158a0d8e..3441f15b4c7 100644 --- a/core/src/main/java/org/geysermc/geyser/event/type/SessionLoadResourcePacksEventImpl.java +++ b/core/src/main/java/org/geysermc/geyser/event/type/SessionLoadResourcePacksEventImpl.java @@ -33,6 +33,7 @@ import org.cloudburstmc.protocol.bedrock.packet.ResourcePackStackPacket; import org.cloudburstmc.protocol.bedrock.packet.ResourcePacksInfoPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.event.bedrock.SessionLoadResourcePacksEvent; import org.geysermc.geyser.api.pack.ResourcePack; import org.geysermc.geyser.api.pack.ResourcePackManifest; @@ -91,7 +92,7 @@ public boolean register(@NonNull ResourcePack resourcePack) { try { register(resourcePack, PriorityOption.NORMAL); } catch (ResourcePackException e) { - GeyserImpl.getInstance().getLogger().error("An exception occurred while registering resource pack: " + e.getMessage(), e); + GeyserLogger.get().error("An exception occurred while registering resource pack: " + e.getMessage(), e); return false; } return true; @@ -219,7 +220,7 @@ public List infoPacketEntries() { for (ResourcePackHolder holder : packs.values()) { if (!warned && anyCdn && !(holder.codec() instanceof UrlPackCodec)) { - GeyserImpl.getInstance().getLogger().warning("Mixing pack codecs will result in all UrlPackCodec delivered packs to fall back to non-cdn delivery!"); + GeyserLogger.get().warning("Mixing pack codecs will result in all UrlPackCodec delivered packs to fall back to non-cdn delivery!"); warned = true; } GeyserResourcePack pack = holder.pack(); @@ -233,6 +234,13 @@ public List infoPacketEntries() { return entries; } + // Helper method for debugging + + public void unregisterAll() { + this.packs.clear(); + this.sessionPackOptionOverrides.clear(); + } + // Helper methods to get the options for a ResourcePack public T value(UUID uuid, ResourcePackOption.Type type, T defaultValue) { diff --git a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionClassLoader.java b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionClassLoader.java index a8f5c558431..30ef2953ab4 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionClassLoader.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionClassLoader.java @@ -28,6 +28,7 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.extension.Extension; import org.geysermc.geyser.api.extension.ExtensionDescription; import org.geysermc.geyser.api.extension.exception.InvalidExtensionException; @@ -90,7 +91,7 @@ protected Class findClass(String name, boolean checkGlobal) throws ClassNotFo // This is used for classes that are not in the extension, but are in other extensions if (checkGlobal) { if (!warnedForExternalClassAccess && this.description.dependencies().isEmpty()) { // Don't warn when the extension has dependencies, it is probably using it's dependencies! - GeyserImpl.getInstance().getLogger().warning("Extension " + this.description.name() + " loads class " + name + " from an external source. " + + GeyserLogger.get().warning("Extension " + this.description.name() + " loads class " + name + " from an external source. " + "This can change at any time and break the extension, additionally to potentially causing unexpected behaviour!"); warnedForExternalClassAccess = true; } diff --git a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java index 2be6d2f8fba..fe97e2e23fc 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java @@ -122,7 +122,7 @@ public GeyserExtensionContainer loadExtension(Path path, GeyserExtensionDescript } private GeyserExtensionContainer setup(Extension extension, GeyserExtensionDescription description, Path dataFolder, ExtensionEventBus eventBus) { - GeyserExtensionLogger logger = new GeyserExtensionLogger(GeyserImpl.getInstance().getLogger(), description.id()); + GeyserExtensionLogger logger = new GeyserExtensionLogger(GeyserLogger.get(), description.id()); return new GeyserExtensionContainer(extension, dataFolder, description, this, logger, eventBus); } @@ -164,7 +164,7 @@ void setClass(String name, final Class clazz) { @Override protected void loadAllExtensions(@NonNull ExtensionManager extensionManager) { - GeyserLogger logger = GeyserImpl.getInstance().getLogger(); + GeyserLogger logger = GeyserLogger.get(); try { if (Files.notExists(extensionsDirectory)) { Files.createDirectory(extensionsDirectory); diff --git a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionManager.java b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionManager.java index 3c41c4329cb..2c819b2de5d 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionManager.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionManager.java @@ -28,6 +28,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.extension.Extension; import org.geysermc.geyser.api.extension.ExtensionLoader; import org.geysermc.geyser.api.extension.ExtensionManager; @@ -43,12 +44,12 @@ public class GeyserExtensionManager extends ExtensionManager { private final Map extensions = new LinkedHashMap<>(); public void init() { - GeyserImpl.getInstance().getLogger().info(GeyserLocale.getLocaleStringLog("geyser.extensions.load.loading")); + GeyserLogger.get().info(GeyserLocale.getLocaleStringLog("geyser.extensions.load.loading")); loadAllExtensions(this.extensionLoader); enableExtensions(); - GeyserImpl.getInstance().getLogger().info(GeyserLocale.getLocaleStringLog("geyser.extensions.load.done", this.extensions.size())); + GeyserLogger.get().info(GeyserLocale.getLocaleStringLog("geyser.extensions.load.done", this.extensions.size())); } @Override @@ -62,7 +63,7 @@ public void enable(@NonNull Extension extension) { try { this.enableExtension(extension); } catch (Exception e) { - GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.extensions.enable.failed", extension.name()), e); + GeyserLogger.get().error(GeyserLocale.getLocaleStringLog("geyser.extensions.enable.failed", extension.name()), e); this.disable(extension); } } @@ -74,7 +75,7 @@ public void disable(@NonNull Extension extension) { try { this.disableExtension(extension); } catch (Exception e) { - GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.extensions.disable.failed", extension.name()), e); + GeyserLogger.get().error(GeyserLocale.getLocaleStringLog("geyser.extensions.disable.failed", extension.name()), e); } } } @@ -83,7 +84,7 @@ public void enableExtension(Extension extension) { if (!extension.isEnabled()) { extension.setEnabled(true); GeyserImpl.getInstance().eventBus().register(extension, extension); - GeyserImpl.getInstance().getLogger().info(GeyserLocale.getLocaleStringLog("geyser.extensions.enable.success", extension.name())); + GeyserLogger.get().info(GeyserLocale.getLocaleStringLog("geyser.extensions.enable.success", extension.name())); } } @@ -98,7 +99,7 @@ private void disableExtension(@NonNull Extension extension) { GeyserImpl.getInstance().eventBus().unregisterAll(extension); extension.setEnabled(false); - GeyserImpl.getInstance().getLogger().info(GeyserLocale.getLocaleStringLog("geyser.extensions.disable.success", extension.name())); + GeyserLogger.get().info(GeyserLocale.getLocaleStringLog("geyser.extensions.disable.success", extension.name())); } } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/CrafterContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/CrafterContainer.java index 664788b11e3..b6103a019d1 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/CrafterContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/CrafterContainer.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.inventory; import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.inventory.CrafterInventoryTranslator; import org.geysermc.geyser.translator.inventory.InventoryTranslator; @@ -82,7 +83,7 @@ public void setItem(int slot, @NonNull GeyserItemStack newItem, GeyserSession se public void setSlot(int slot, boolean enabled) { if (!isCraftingGrid(slot)) { - GeyserImpl.getInstance().getLogger().warning("Crafter slot out of bounds: " + slot); + GeyserLogger.get().warning("Crafter slot out of bounds: " + slot); return; } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java index 8138ce79597..4536ab62667 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java @@ -35,6 +35,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.item.DyeColor; import org.geysermc.geyser.inventory.item.Potion; import org.geysermc.geyser.item.Items; @@ -151,7 +152,7 @@ case WithAnyPotionSlotDisplay(SlotDisplay display) -> { yield stack; } default -> { - GeyserImpl.getInstance().getLogger().warning("Unsure how to convert to ItemStack: " + slotDisplay); + GeyserLogger.get().warning("Unsure how to convert to ItemStack: " + slotDisplay); yield GeyserItemStack.EMPTY; } }; diff --git a/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java b/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java index f841c99abb7..4c20dee0280 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java @@ -33,6 +33,7 @@ import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.click.ClickPlan; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.session.GeyserSession; @@ -131,7 +132,7 @@ protected Inventory(GeyserSession session, String title, int javaId, int size, @ public GeyserItemStack getItem(int slot) { if (slot > this.size) { - GeyserImpl.getInstance().getLogger().debug("Tried to get an item out of bounds! " + this); + GeyserLogger.get().debug("Tried to get an item out of bounds! " + this); return GeyserItemStack.EMPTY; } return items[slot]; @@ -141,7 +142,7 @@ public GeyserItemStack getItem(int slot) { public void setItem(int slot, @NonNull GeyserItemStack newItem, GeyserSession session) { if (slot < 0 || slot >= this.size) { - session.getGeyser().getLogger().debug("Tried to set an item out of bounds (slot was " + slot + ")! " + this); + GeyserLogger.get().debug("Tried to set an item out of bounds (slot was " + slot + ")! " + this); return; } GeyserItemStack oldItem = items[slot]; diff --git a/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java b/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java index d3a6d02cdd3..5fe89166005 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java @@ -30,6 +30,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.type.player.PlayerEntity; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.type.Item; @@ -86,7 +87,7 @@ public GeyserItemStack getItemInHand(@NonNull Hand hand) { public GeyserItemStack getItemInHand() { if (36 + heldItemSlot > this.size) { - GeyserImpl.getInstance().getLogger().debug("Held item slot was larger than expected!"); + GeyserLogger.get().debug("Held item slot was larger than expected!"); return GeyserItemStack.EMPTY; } return items[36 + heldItemSlot]; @@ -106,7 +107,7 @@ EquipmentSlot.MAIN_HAND, getItemInHand(), public void setItemInHand(@NonNull GeyserItemStack item) { if (36 + heldItemSlot > this.size) { - GeyserImpl.getInstance().getLogger().debug("Held item slot was larger than expected!"); + GeyserLogger.get().debug("Held item slot was larger than expected!"); return; } items[36 + heldItemSlot] = item; diff --git a/core/src/main/java/org/geysermc/geyser/inventory/click/ClickPlan.java b/core/src/main/java/org/geysermc/geyser/inventory/click/ClickPlan.java index 3a7f3a37ba4..edf8a1d0369 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/click/ClickPlan.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/click/ClickPlan.java @@ -29,6 +29,7 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntSet; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.SlotType; @@ -493,9 +494,7 @@ private int stateIdHack(ClickAction action) { } else if (action.click.actionType == ContainerActionType.MOVE_TO_HOTBAR_SLOT) { stateIdIncrements = 1; } else { - if (session.getGeyser().config().debugMode()) { - session.getGeyser().getLogger().debug("Not sure how to handle state ID hack in crafting table: " + plan); - } + GeyserLogger.get().debug("Not sure how to handle state ID hack in crafting table: " + plan); stateIdIncrements = 1; } inventory.incrementStateId(stateIdIncrements); diff --git a/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java b/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java index abd9466e9af..365a4a212cc 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java @@ -34,6 +34,7 @@ import org.cloudburstmc.protocol.bedrock.packet.ContainerOpenPacket; import org.cloudburstmc.protocol.bedrock.packet.UpdateBlockPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.Container; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.LecternContainer; @@ -102,7 +103,7 @@ public boolean canReuseContainer(GeyserSession session, Container container, Con if (Objects.equals(position, previous.getHolderPosition())) { return true; } else { - GeyserImpl.getInstance().getLogger().debug(session, "Not reusing inventory due to virtual block holder changing (%s -> %s)!", + GeyserLogger.get().debug(session, "Not reusing inventory due to virtual block holder changing (%s -> %s)!", previous.getHolderPosition(), position); return false; } @@ -196,7 +197,7 @@ public void openInventory(GeyserSession session, Container container) { containerOpenPacket.setUniqueEntityId(container.getHolderId()); session.sendUpstreamPacket(containerOpenPacket); - GeyserImpl.getInstance().getLogger().debug(session, containerOpenPacket.toString()); + GeyserLogger.get().debug(session, containerOpenPacket.toString()); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/inventory/recipe/RecipeUtil.java b/core/src/main/java/org/geysermc/geyser/inventory/recipe/RecipeUtil.java index 135b3da81dd..f8d184fb6b0 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/recipe/RecipeUtil.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/recipe/RecipeUtil.java @@ -39,6 +39,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.DefaultDescriptor; import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemDescriptorWithCount; import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemTagDescriptor; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.item.Potion; import org.geysermc.geyser.item.Items; @@ -193,7 +194,7 @@ public static List translateToInput(GeyserSession sessi } return Collections.unmodifiableList(itemDescriptors); } - session.getGeyser().getLogger().warning("Unimplemented slot display type for input: " + slotDisplay); + GeyserLogger.get().warning("Unimplemented slot display type for input: " + slotDisplay); return null; } @@ -212,7 +213,7 @@ public static List translateToInput(GeyserSession sessi GeyserItemStack stack = GeyserItemStack.from(session, slotDisplay); return stack.isEmpty() ? null : Pair.of(stack.asItem(), ItemTranslator.translateToBedrock(session, stack)); } - session.getGeyser().getLogger().warning("Unimplemented slot display type for output: " + slotDisplay); + GeyserLogger.get().warning("Unimplemented slot display type for output: " + slotDisplay); return null; } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/recipe/TrimRecipe.java b/core/src/main/java/org/geysermc/geyser/inventory/recipe/TrimRecipe.java index 51b56c2ead0..abff7a77a8b 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/recipe/TrimRecipe.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/recipe/TrimRecipe.java @@ -31,6 +31,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemDescriptorWithCount; import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemTagDescriptor; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.ItemMapping; @@ -74,7 +75,7 @@ public static TrimMaterial readTrimMaterial(RegistryEntryContext context) { if (javaItem != null) { trimItem = context.session().get().getItemMappings().getMapping(javaItem); } else { - GeyserImpl.getInstance().getLogger().debug("Could not find trim material provider! Network: %s, Provider: %s".formatted(context.id(), provider)); + GeyserLogger.get().debug("Could not find trim material provider! Network: %s, Provider: %s".formatted(context.id(), provider)); } break; } @@ -83,7 +84,7 @@ public static TrimMaterial readTrimMaterial(RegistryEntryContext context) { if (trimItem == null) { // This happens in testing and for custom trim materials, not sure what to do for the latter. - GeyserImpl.getInstance().getLogger().debug("Unable to found trim material item for material " + context.id()); + GeyserLogger.get().debug("Unable to found trim material item for material " + context.id()); trimItem = ItemMapping.AIR; } @@ -101,7 +102,7 @@ public static TrimPattern readTrimPattern(RegistryEntryContext context) { itemMapping = context.session().get().getItemMappings().getMapping(identifier); if (itemMapping == null) { // This should never happen so not sure what to do here. - GeyserImpl.getInstance().getLogger().debug("Unable to found trim pattern item for pattern " + context.id()); + GeyserLogger.get().debug("Unable to found trim pattern item for pattern " + context.id()); itemMapping = ItemMapping.AIR; } } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java index 89af5842bc5..a4b46d10f66 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java @@ -34,6 +34,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.AnvilContainer; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.Inventory; @@ -377,7 +378,7 @@ private Object2IntMap getEnchantments(GeyserSession session, Geyser for (Map.Entry entry : enchantmentComponent.getEnchantments().entrySet()) { Enchantment enchantment = session.getRegistryCache().registry(JavaRegistries.ENCHANTMENT).byId(entry.getKey()); if (enchantment == null) { - GeyserImpl.getInstance().getLogger().debug("Unknown Java enchantment in anvil: " + entry.getKey()); + GeyserLogger.get().debug("Unknown Java enchantment in anvil: " + entry.getKey()); continue; } enchantments.put(enchantment, entry.getValue().intValue()); diff --git a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemData.java b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemData.java index 82f5f6f0454..79edd7ec137 100644 --- a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemData.java +++ b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemData.java @@ -30,6 +30,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomItemOptions; import org.geysermc.geyser.api.item.custom.CustomRenderOffsets; @@ -276,12 +277,12 @@ public CustomItemData build() { } if (textureSize != 16) { - GeyserImpl.getInstance().getLogger().warning("The custom item %s is using a non-standard texture size! ".formatted(name) + + GeyserLogger.get().warning("The custom item %s is using a non-standard texture size! ".formatted(name) + "This feature is deprecated and will be removed in a future version! Please migrate to attachables for texture resizing."); } if (renderOffsets != null) { - GeyserImpl.getInstance().getLogger().warning("The custom item %s is using render offsets! ".formatted(name) + + GeyserLogger.get().warning("The custom item %s is using render offsets! ".formatted(name) + "These are deprecated and will be removed in a future version! Please migrate to attachables."); } diff --git a/core/src/main/java/org/geysermc/geyser/item/hashing/DataComponentHashers.java b/core/src/main/java/org/geysermc/geyser/item/hashing/DataComponentHashers.java index 92522981914..06553d19246 100644 --- a/core/src/main/java/org/geysermc/geyser/item/hashing/DataComponentHashers.java +++ b/core/src/main/java/org/geysermc/geyser/item/hashing/DataComponentHashers.java @@ -27,6 +27,7 @@ import com.google.common.hash.HashCode; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.registry.JavaRegistryProvider; import org.geysermc.mcprotocollib.protocol.data.game.Holder; @@ -329,8 +330,8 @@ public static HashCode hash(JavaRegistryProvider registries, DataComponentTy try { return hasher(component).hash(value, new MinecraftHashEncoder(registries)); } catch (Exception exception) { - GeyserImpl.getInstance().getLogger().error("Failed to hash item data component " + component.getKey() + " with value " + value + "!"); - GeyserImpl.getInstance().getLogger().error("This is a Geyser bug, please report this!"); + GeyserLogger.get().error("Failed to hash item data component " + component.getKey() + " with value " + value + "!"); + GeyserLogger.get().error("This is a Geyser bug, please report this!"); throw exception; } } @@ -353,7 +354,7 @@ public static HashedStack hashStack(GeyserSession session, ItemStack stack) { Set> removals = new HashSet<>(); for (Map.Entry, DataComponent> component : components.entrySet()) { if (NOT_HASHED.contains(component.getKey())) { - GeyserImpl.getInstance().getLogger().debug("Not hashing component " + component.getKey() + " on stack " + stack); + GeyserLogger.get().debug("Not hashing component " + component.getKey() + " on stack " + stack); } else if (component.getValue().getValue() == null) { removals.add(component.getKey()); } else { diff --git a/core/src/main/java/org/geysermc/geyser/item/hashing/MapHasher.java b/core/src/main/java/org/geysermc/geyser/item/hashing/MapHasher.java index 99c1565258d..748e00cdd11 100644 --- a/core/src/main/java/org/geysermc/geyser/item/hashing/MapHasher.java +++ b/core/src/main/java/org/geysermc/geyser/item/hashing/MapHasher.java @@ -27,6 +27,7 @@ import com.google.common.hash.HashCode; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.jetbrains.annotations.VisibleForTesting; import java.util.HashMap; @@ -249,7 +250,7 @@ public MapHasher optionalList(String key, MinecraftHasher v public HashCode build() { if (debug) { - GeyserImpl.getInstance().getLogger().info("Building MapHasher with unhashed map: " + unhashed); + GeyserLogger.get().info("Building MapHasher with unhashed map: " + unhashed); } return encoder.map(map); } diff --git a/core/src/main/java/org/geysermc/geyser/item/parser/ItemStackParser.java b/core/src/main/java/org/geysermc/geyser/item/parser/ItemStackParser.java index 808d1ceaaf8..226ed077ccd 100644 --- a/core/src/main/java/org/geysermc/geyser/item/parser/ItemStackParser.java +++ b/core/src/main/java/org/geysermc/geyser/item/parser/ItemStackParser.java @@ -35,6 +35,7 @@ import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.item.DyeColor; import org.geysermc.geyser.inventory.item.Potion; import org.geysermc.geyser.item.Items; @@ -100,7 +101,7 @@ private static int javaItemIdentifierToNetworkId(String identifier) { Item item = Registries.JAVA_ITEM_IDENTIFIERS.get(identifier); if (item == null) { - GeyserImpl.getInstance().getLogger().warning("Received unknown item ID " + identifier + " whilst parsing NBT item stack!"); + GeyserLogger.get().warning("Received unknown item ID " + identifier + " whilst parsing NBT item stack!"); return Items.AIR_ID; } return item.javaId(); @@ -191,9 +192,9 @@ private static void parseDataComponent(GeyserSession session, Data try { patch.put((DataComponentType) type, parser.parse(session, (Raw) raw)); } catch (ClassCastException exception) { - GeyserImpl.getInstance().getLogger().debug("Received incorrect object type for component " + type + "! Exception: %s", exception); + GeyserLogger.get().debug("Received incorrect object type for component " + type + "! Exception: %s", exception); } catch (Exception exception) { - GeyserImpl.getInstance().getLogger().debug("Failed to parse component" + type + " from " + raw + "! Exception: %s", exception); + GeyserLogger.get().debug("Failed to parse component" + type + " from " + raw + "! Exception: %s", exception); } } @@ -214,7 +215,7 @@ private static void parseDataComponent(GeyserSession session, Data DataComponentType type = DataComponentTypes.fromKey(MinecraftKey.key(rawType)); if (type == null) { - GeyserImpl.getInstance().getLogger().warning("Received unknown data component " + rawType + " in NBT data component patch: " + map); + GeyserLogger.get().warning("Received unknown data component " + rawType + " in NBT data component patch: " + map); } else if (removal) { // Removals are easy, we don't have to parse anything patch.put(type, null); @@ -223,12 +224,12 @@ private static void parseDataComponent(GeyserSession session, Data if (parser != null) { parseDataComponent(session, patch, type, parser, patchEntry.getValue()); } else { - GeyserImpl.getInstance().getLogger().debug("Ignoring data component " + type + " whilst parsing NBT patch because there is no parser registered for it"); + GeyserLogger.get().debug("Ignoring data component " + type + " whilst parsing NBT patch because there is no parser registered for it"); } } } } catch (Exception exception) { - GeyserImpl.getInstance().getLogger().error("Failed to parse data component patch from NBT data!", exception); + GeyserLogger.get().error("Failed to parse data component patch from NBT data!", exception); } return patch; @@ -245,7 +246,7 @@ public static ItemStack parseItemStack(GeyserSession session, @Nullable NbtMap m DataComponents patch = parseDataComponentPatch(session, map.getCompound("components")); return new ItemStack(id, count, patch); } catch (Exception exception) { - GeyserImpl.getInstance().getLogger().error("Failed to parse item stack from NBT data!", exception); + GeyserLogger.get().error("Failed to parse item stack from NBT data!", exception); } return new ItemStack(Items.AIR_ID); } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java b/core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java index 64cc399ea9c..57cff8bb479 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java @@ -31,6 +31,7 @@ import org.cloudburstmc.protocol.bedrock.data.TrimMaterial; import org.cloudburstmc.protocol.bedrock.data.TrimPattern; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.item.TooltipOptions; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.registry.JavaRegistries; @@ -56,7 +57,7 @@ public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNul if (trim.material().isId()) { material = session.getRegistryCache().registry(JavaRegistries.TRIM_MATERIAL).byId(trim.material().id()); } else { - GeyserImpl.getInstance().getLogger().debug("Unable to translate non-id trim material: " + trim); + GeyserLogger.get().debug("Unable to translate non-id trim material: " + trim); return; } @@ -64,7 +65,7 @@ public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNul if (trim.pattern().isId()) { pattern = session.getRegistryCache().registry(JavaRegistries.TRIM_PATTERN).byId(trim.pattern().id()); } else { - GeyserImpl.getInstance().getLogger().debug("Unable to translate non-id trim pattern: " + trim); + GeyserLogger.get().debug("Unable to translate non-id trim pattern: " + trim); return; } @@ -85,7 +86,7 @@ public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNul trimBuilder.put("Pattern", patternId); builder.putCompound("Trim", trimBuilder.build()); } else { - GeyserImpl.getInstance().getLogger().debug("Unknown trim material/pattern: ", trim); + GeyserLogger.get().debug("Unknown trim material/pattern: ", trim); } } } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/EnchantedBookItem.java b/core/src/main/java/org/geysermc/geyser/item/type/EnchantedBookItem.java index fbf4a1daaaa..ee5be9ac808 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/EnchantedBookItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/EnchantedBookItem.java @@ -31,6 +31,7 @@ import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtType; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.item.BedrockEnchantment; import org.geysermc.geyser.item.TooltipOptions; import org.geysermc.geyser.item.enchantment.Enchantment; @@ -92,7 +93,7 @@ public void translateNbtToJava(@NonNull GeyserSession session, @NonNull NbtMap b } } } else { - GeyserImpl.getInstance().getLogger().debug("Unknown bedrock enchantment: " + bedrockId); + GeyserLogger.get().debug("Unknown bedrock enchantment: " + bedrockId); } } if (!javaEnchantments.isEmpty()) { diff --git a/core/src/main/java/org/geysermc/geyser/item/type/Item.java b/core/src/main/java/org/geysermc/geyser/item/type/Item.java index 5c92fb3461b..e61f0ff8f3e 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/Item.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/Item.java @@ -34,6 +34,7 @@ import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.item.BedrockEnchantment; import org.geysermc.geyser.item.Items; @@ -264,7 +265,7 @@ public void translateNbtToJava(GeyserSession session, @NonNull NbtMap bedrockTag protected final @Nullable NbtMap remapEnchantment(GeyserSession session, int enchantId, int level, BedrockItemBuilder builder) { Enchantment enchantment = session.getRegistryCache().registry(JavaRegistries.ENCHANTMENT).byId(enchantId); if (enchantment == null) { - GeyserImpl.getInstance().getLogger().debug("Unknown Java enchantment while NBT item translating: " + enchantId); + GeyserLogger.get().debug("Unknown Java enchantment while NBT item translating: " + enchantId); return null; } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/NonVanillaItem.java b/core/src/main/java/org/geysermc/geyser/item/type/NonVanillaItem.java index f359cde144d..ef6c250df2c 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/NonVanillaItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/NonVanillaItem.java @@ -30,6 +30,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.item.components.resolvable.ResolvableComponent; import org.geysermc.geyser.session.cache.ComponentCache; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; @@ -61,7 +62,7 @@ public DataComponents gatherComponents(@Nullable ComponentCache componentCache, if (resolvableComponents.isEmpty()) { return super.gatherComponents(componentCache, others); } else if (componentCache == null) { - GeyserImpl.getInstance().getLogger().debug("Unable to resolve components for non-vanilla item because componentCache is null"); + GeyserLogger.get().debug("Unable to resolve components for non-vanilla item because componentCache is null"); return super.gatherComponents(null, others); } DataComponents resolvedAndOthers = componentCache.getResolvedComponents(this).clone(); @@ -75,7 +76,7 @@ public DataComponents gatherComponents(@Nullable ComponentCache componentCache, public @Nullable T getComponent(@Nullable ComponentCache componentCache, @NonNull DataComponentType type) { if (resolvableComponentTypes.contains(type)) { if (componentCache == null) { - GeyserImpl.getInstance().getLogger().debug("Unable to resolve components for non-vanilla item because componentCache is null"); + GeyserLogger.get().debug("Unable to resolve components for non-vanilla item because componentCache is null"); return super.getComponent(null, type); } return componentCache.getResolvedComponents(this).get(type); diff --git a/core/src/main/java/org/geysermc/geyser/item/type/PotionItem.java b/core/src/main/java/org/geysermc/geyser/item/type/PotionItem.java index f671ac474cc..5bd3b9ee408 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/PotionItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/PotionItem.java @@ -29,6 +29,7 @@ import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.item.Potion; import org.geysermc.geyser.registry.type.ItemMapping; @@ -58,7 +59,7 @@ public ItemData.Builder translateToBedrock(GeyserSession session, int count, Dat .damage(potion.getBedrockId()) .count(Math.min(count, BEDROCK_MAX_STACK_SIZE)); } - GeyserImpl.getInstance().getLogger().debug("Unknown Java potion: " + potionContents.getPotionId()); + GeyserLogger.get().debug("Unknown Java potion: " + potionContents.getPotionId()); } else { return ItemData.builder() .definition(customItemDefinition) diff --git a/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java b/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java index c0dbb3f407e..e193c7e285b 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java @@ -27,6 +27,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.item.Potion; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; @@ -52,7 +53,7 @@ public ItemData.Builder translateToBedrock(GeyserSession session, int count, Dat .damage(potion.tippedArrowId()) .count(Math.min(count, BEDROCK_MAX_STACK_SIZE)); } - GeyserImpl.getInstance().getLogger().debug("Unknown Java potion (tipped arrow): " + potionContents.getPotionId()); + GeyserLogger.get().debug("Unknown Java potion (tipped arrow): " + potionContents.getPotionId()); } } return super.translateToBedrock(session, count, components, mapping, mappings); diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index 49b72cd69c8..7d6a3d0f87e 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -31,6 +31,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.Constants; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; import org.geysermc.geyser.api.block.custom.CustomBlockState; @@ -71,7 +72,7 @@ public class GeyserCustomBlockData implements CustomBlockData { Object2ObjectMap defaultProperties = new Object2ObjectOpenHashMap<>(this.properties.size()); for (CustomBlockProperty property : properties.values()) { if (property.values().size() > 16) { - GeyserImpl.getInstance().getLogger().warning(property.name() + " contains more than 16 values, but BDS specifies it should not. This may break in future versions."); + GeyserLogger.get().warning(property.name() + " contains more than 16 values, but BDS specifies it should not. This may break in future versions."); } if (property.values().stream().distinct().count() != property.values().size()) { throw new IllegalStateException(property.name() + " has duplicate values."); diff --git a/core/src/main/java/org/geysermc/geyser/level/gamerule/GameRuleHandler.java b/core/src/main/java/org/geysermc/geyser/level/gamerule/GameRuleHandler.java index 02c016b74e5..70975a214ed 100644 --- a/core/src/main/java/org/geysermc/geyser/level/gamerule/GameRuleHandler.java +++ b/core/src/main/java/org/geysermc/geyser/level/gamerule/GameRuleHandler.java @@ -31,6 +31,7 @@ import net.kyori.adventure.text.Component; import org.geysermc.cumulus.form.CustomForm; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.MinecraftLocale; @@ -75,7 +76,7 @@ public void onGamerulesReceived(ClientboundGameRuleValuesPacket packet) { for (Map.Entry entry : packet.getValues().entrySet()) { GameRule gameRule = Registries.GAME_RULES.get(entry.getKey()); if (gameRule == null) { - GeyserImpl.getInstance().getLogger().debug("Unknown gamerule: " + entry.getKey()); + GeyserLogger.get().debug("Unknown gamerule: " + entry.getKey()); continue; } values.computeIfAbsent(gameRule.category(), (category) -> new Object2ObjectArrayMap<>()).put(gameRule, entry.getValue()); @@ -138,12 +139,12 @@ public void handleUpdate(GameRule gameRule, String previous, Object newVa try { value = gameRule.adapter().parser().apply(newValue); } catch (Throwable e) { - GeyserImpl.getInstance().getLogger().debug("Failed to parse value for gamerule %s (old value: %s, new value: %s)", gameRule.key(), previous, newValue); + GeyserLogger.get().debug("Failed to parse value for gamerule %s (old value: %s, new value: %s)", gameRule.key(), previous, newValue); return; } if (!gameRule.validate(value)) { - GeyserImpl.getInstance().getLogger().debug("Got invalid value for gamerule %s (old value: %s, new value: %s)", gameRule.key(), previous, newValue); + GeyserLogger.get().debug("Got invalid value for gamerule %s (old value: %s, new value: %s)", gameRule.key(), previous, newValue); return; } diff --git a/core/src/main/java/org/geysermc/geyser/level/physics/Direction.java b/core/src/main/java/org/geysermc/geyser/level/physics/Direction.java index 47eaeba7664..625ecc97c81 100644 --- a/core/src/main/java/org/geysermc/geyser/level/physics/Direction.java +++ b/core/src/main/java/org/geysermc/geyser/level/physics/Direction.java @@ -30,6 +30,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3i; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import java.util.function.ToIntFunction; @@ -104,7 +105,7 @@ public Direction counterClockWise() { public static Direction getUntrusted(T source, ToIntFunction idExtractor) { int id = idExtractor.applyAsInt(source); if (id < 0 || id >= VALUES.length) { - GeyserImpl.getInstance().getLogger().warning("Received invalid direction from " + source + " (ID was " + id + ")"); + GeyserLogger.get().warning("Received invalid direction from " + source + " (ID was " + id + ")"); return DOWN; // Default to DOWN when receiving an invalid ID } return Direction.VALUES[id]; diff --git a/core/src/main/java/org/geysermc/geyser/network/GeyserServerInitializer.java b/core/src/main/java/org/geysermc/geyser/network/GeyserServerInitializer.java index 7ccab594f4c..4e8f9a2f036 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GeyserServerInitializer.java +++ b/core/src/main/java/org/geysermc/geyser/network/GeyserServerInitializer.java @@ -36,6 +36,7 @@ import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec; import org.cloudburstmc.protocol.bedrock.netty.initializer.BedrockServerInitializer; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.session.GeyserSession; public class GeyserServerInitializer extends BedrockServerInitializer { @@ -61,7 +62,7 @@ protected void preInitChannel(Channel channel) throws Exception { @Override public void initSession(@NonNull BedrockServerSession bedrockServerSession) { try { - bedrockServerSession.setLogging(this.geyser.config().debugMode()); + bedrockServerSession.setLogging(GeyserLogger.get().isDebug()); GeyserSession session = new GeyserSession(this.geyser, bedrockServerSession, this.eventLoopGroup.next()); if (!bedrockServerSession.isSubClient()) { @@ -72,7 +73,7 @@ public void initSession(@NonNull BedrockServerSession bedrockServerSession) { bedrockServerSession.setPacketHandler(new UpstreamPacketHandler(this.geyser, session)); } catch (Throwable e) { // Error must be caught or it will be swallowed - this.geyser.getLogger().error("Error occurred while initializing player!", e); + GeyserLogger.get().error("Error occurred while initializing player!", e); bedrockServerSession.disconnect(e.getMessage()); } } diff --git a/core/src/main/java/org/geysermc/geyser/network/InvalidPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/InvalidPacketHandler.java index 6f34b6d4345..9f9ee3aa073 100644 --- a/core/src/main/java/org/geysermc/geyser/network/InvalidPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/InvalidPacketHandler.java @@ -47,7 +47,7 @@ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws E .findFirst() .orElse(cause); - GeyserLogger logger = GeyserImpl.getInstance().getLogger(); + GeyserLogger logger = GeyserLogger.get(); if (!(rootCause instanceof IllegalArgumentException)) { // Kick users that cause exceptions diff --git a/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java index 28a5a562f09..a14251dcfa5 100644 --- a/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java @@ -28,6 +28,7 @@ import org.cloudburstmc.protocol.bedrock.packet.*; import org.cloudburstmc.protocol.common.PacketSignal; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.session.GeyserSession; /** @@ -46,7 +47,7 @@ public class LoggingPacketHandler implements BedrockPacketHandler { } PacketSignal defaultHandler(BedrockPacket packet) { - geyser.getLogger().debug("Handled packet: " + packet.getClass().getSimpleName()); + GeyserLogger.get().debug("Handled packet: " + packet.getClass().getSimpleName()); return PacketSignal.HANDLED; } diff --git a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java index 35cc66f3ee8..b809c7636c4 100644 --- a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java @@ -54,12 +54,14 @@ import org.geysermc.api.util.BedrockPlatform; import org.geysermc.geyser.Constants; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.event.bedrock.SessionInitializeEvent; import org.geysermc.geyser.api.network.AuthType; import org.geysermc.geyser.api.pack.PackCodec; import org.geysermc.geyser.api.pack.ResourcePack; import org.geysermc.geyser.api.pack.ResourcePackManifest; import org.geysermc.geyser.api.pack.option.ResourcePackOption; +import org.geysermc.geyser.debug.SessionDebugOption; import org.geysermc.geyser.event.type.SessionLoadResourcePacksEventImpl; import org.geysermc.geyser.pack.GeyserResourcePack; import org.geysermc.geyser.pack.ResourcePackHolder; @@ -80,8 +82,11 @@ import java.util.ArrayDeque; import java.util.Arrays; import java.util.Deque; +import java.util.HashSet; +import java.util.List; import java.util.OptionalInt; import java.util.Queue; +import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.TimeUnit; @@ -232,14 +237,21 @@ public PacketSignal handle(LoginPacket loginPacket) { // Can happen if an error occurs in the resource pack event; that'll disconnect the player return PacketSignal.HANDLED; } + if (session.getDebugOptions().contains(SessionDebugOption.FORCE_DISABLE_PACKS)) { + this.resourcePackLoadEvent.unregisterAll(); + } session.integratedPackActive(resourcePackLoadEvent.isIntegratedPackActive()); ResourcePacksInfoPacket resourcePacksInfo = new ResourcePacksInfoPacket(); resourcePacksInfo.getResourcePackInfos().addAll(this.resourcePackLoadEvent.infoPacketEntries()); - resourcePacksInfo.setVibrantVisualsForceDisabled(!session.isAllowVibrantVisuals()); + if (!session.getDebugOptions().contains(SessionDebugOption.FORCE_VIBRANT_VISUALS)) { + resourcePacksInfo.setVibrantVisualsForceDisabled(!session.isAllowVibrantVisuals()); + } - resourcePacksInfo.setForcedToAccept(GeyserImpl.getInstance().config().gameplay().forceResourcePacks() || - resourcePackLoadEvent.isIntegratedPackActive()); + if (!session.getDebugOptions().contains(SessionDebugOption.FORCE_OPTIONAL_PACKS)) { + resourcePacksInfo.setForcedToAccept(GeyserImpl.getInstance().config().gameplay().forceResourcePacks() || + resourcePackLoadEvent.isIntegratedPackActive()); + } resourcePacksInfo.setWorldTemplateId(UUID.randomUUID()); resourcePacksInfo.setWorldTemplateVersion("*"); @@ -269,7 +281,7 @@ public PacketSignal handle(ResourcePackClientResponsePacket packet) { // We must spawn the white world session.connect(); } - geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.network.connect", session.getAuthData().name() + + GeyserLogger.get().info(GeyserLocale.getLocaleStringLog("geyser.network.connect", session.getAuthData().name() + " (" + session.protocolVersion() + ")")); } case SEND_PACKS -> { @@ -291,7 +303,7 @@ public PacketSignal handle(ResourcePackClientResponsePacket packet) { } case REFUSED -> session.disconnect("disconnectionScreen.resourcePack"); default -> { - GeyserImpl.getInstance().getLogger().debug("received unknown status packet: " + packet); + GeyserLogger.get().debug("received unknown status packet: " + packet); session.disconnect("disconnectionScreen.resourcePack"); } } @@ -312,7 +324,7 @@ private boolean couldLoginUserByName(String bedrockUsername) { if (geyser.config().savedUserLogins().contains(bedrockUsername)) { String authChain = geyser.authChainFor(bedrockUsername); if (authChain != null) { - geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.auth.stored_credentials", session.getAuthData().name())); + GeyserLogger.get().info(GeyserLocale.getLocaleStringLog("geyser.auth.stored_credentials", session.getAuthData().name())); session.authenticateWithAuthChain(authChain); return true; } @@ -365,7 +377,7 @@ public void processNextChunk() { ResourcePackHolder holder = this.resourcePackLoadEvent.getPacks().get(packet.getPackId()); if (holder == null) { - GeyserImpl.getInstance().getLogger().debug("Client %s tried to request pack id %s not sent to it!", + GeyserLogger.get().debug("Client %s tried to request pack id %s not sent to it!", session.bedrockUsername(), packet.getPackId()); chunkRequestQueue.clear(); session.disconnect("disconnectionScreen.resourcePack"); @@ -382,7 +394,7 @@ public void processNextChunk() { return; } } else if (finishedResourcePackSending) { - GeyserImpl.getInstance().getLogger().warning("Received resource pack chunk packet after stage completed! " + packet); + GeyserLogger.get().warning("Received resource pack chunk packet after stage completed! " + packet); session.disconnect("Duplicate resource pack packet received!"); chunkRequestQueue.clear(); return; @@ -424,7 +436,7 @@ private void sendPackDataInfo(String id) { String[] packID = id.split("_"); if (packID.length < 2) { - GeyserImpl.getInstance().getLogger().debug("Client %s tried to request invalid pack id %s!", + GeyserLogger.get().debug("Client %s tried to request invalid pack id %s!", session.bedrockUsername(), Arrays.toString(packID)); session.disconnect("disconnectionScreen.resourcePack"); return; @@ -434,7 +446,7 @@ private void sendPackDataInfo(String id) { try { packId = UUID.fromString(packID[0]); } catch (IllegalArgumentException e) { - GeyserImpl.getInstance().getLogger().debug("Client %s tried to request pack with an invalid id %s)", + GeyserLogger.get().debug("Client %s tried to request pack with an invalid id %s)", session.bedrockUsername(), id); session.disconnect("disconnectionScreen.resourcePack"); return; @@ -442,7 +454,7 @@ private void sendPackDataInfo(String id) { ResourcePackHolder holder = this.resourcePackLoadEvent.getPacks().get(packId); if (holder == null) { - GeyserImpl.getInstance().getLogger().debug("Client %s tried to request pack id %s not sent to it!", + GeyserLogger.get().debug("Client %s tried to request pack id %s not sent to it!", session.bedrockUsername(), id); session.disconnect("disconnectionScreen.resourcePack"); return; diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/Bootstraps.java b/core/src/main/java/org/geysermc/geyser/network/netty/Bootstraps.java index 9f055275bb3..ca50420ca08 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/Bootstraps.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/Bootstraps.java @@ -33,6 +33,7 @@ import io.netty.channel.unix.UnixChannelOption; import lombok.experimental.UtilityClass; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.mcprotocollib.network.helper.TransportHelper; import java.net.StandardSocketOptions; @@ -53,9 +54,9 @@ public final class Bootstraps { String kernelVersion; try { kernelVersion = Native.KERNEL_VERSION; - GeyserImpl.getInstance().getLogger().debug("Kernel version: " + kernelVersion); + GeyserLogger.get().debug("Kernel version: " + kernelVersion); } catch (Throwable e) { - GeyserImpl.getInstance().getLogger().debug("Could not determine kernel version! " + e.getMessage()); + GeyserLogger.get().debug("Could not determine kernel version! " + e.getMessage()); kernelVersion = null; } @@ -77,13 +78,13 @@ public static boolean setupBootstrap(AbstractBootstrap bootstrap, TransportHelpe try { ChannelFuture future = bootstrap.register(); if (!future.awaitUninterruptibly(3, TimeUnit.SECONDS)) { - GeyserImpl.getInstance().getLogger().debug("Not able to test so_reuseport availability within 3 seconds."); + GeyserLogger.get().debug("Not able to test so_reuseport availability within 3 seconds."); future.cancel(true); return false; } if (!future.isSuccess()) { - GeyserImpl.getInstance().getLogger().warning("Could not register bootstrap channel for so_reuseport test: " + future.cause()); + GeyserLogger.get().warning("Could not register bootstrap channel for so_reuseport test: " + future.cause()); return false; } @@ -93,7 +94,7 @@ public static boolean setupBootstrap(AbstractBootstrap bootstrap, TransportHelpe if (channel.config().setOption(NioChannelOption.of(StandardSocketOptions.SO_REUSEPORT), true)) { bootstrap.option(NioChannelOption.of(StandardSocketOptions.SO_REUSEPORT), true); } else { - GeyserImpl.getInstance().getLogger().debug("NIO SO_REUSEPORT not supported"); + GeyserLogger.get().debug("NIO SO_REUSEPORT not supported"); success = false; } } else { @@ -101,7 +102,7 @@ public static boolean setupBootstrap(AbstractBootstrap bootstrap, TransportHelpe bootstrap.option(UnixChannelOption.SO_REUSEPORT, true); } else { // If this occurs, we guessed wrong and reuseport is not available - GeyserImpl.getInstance().getLogger().debug("so_reuseport is not available despite version being " + Native.KERNEL_VERSION); + GeyserLogger.get().debug("so_reuseport is not available despite version being " + Native.KERNEL_VERSION); success = false; } } @@ -110,7 +111,7 @@ public static boolean setupBootstrap(AbstractBootstrap bootstrap, TransportHelpe channel.close().awaitUninterruptibly(3, TimeUnit.SECONDS); } } catch (Throwable e) { - GeyserImpl.getInstance().getLogger().debug("Could not set up reuseport check! %s", e); + GeyserLogger.get().debug("Could not set up reuseport check! %s", e); return false; } return success; diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java b/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java index 5604ad4aa52..9c5f51240eb 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java @@ -45,6 +45,7 @@ import org.cloudburstmc.netty.handler.codec.raknet.server.RakServerRateLimiter; import org.cloudburstmc.protocol.bedrock.BedrockPong; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.event.connection.ConnectionRequestEvent; import org.geysermc.geyser.command.defaults.ConnectionTestCommand; import org.geysermc.geyser.configuration.GeyserConfig; @@ -120,7 +121,7 @@ public final class GeyserServer { public GeyserServer(GeyserImpl geyser, int threadCount) { this.geyser = geyser; this.listenCount = Bootstraps.isReusePortAvailable() ? Integer.getInteger("Geyser.ListenCount", 1) : 1; - GeyserImpl.getInstance().getLogger().debug("Listen thread count: " + listenCount); + GeyserLogger.get().debug("Listen thread count: " + listenCount); this.group = TRANSPORT.eventLoopGroupFactory().apply(listenCount, new DefaultThreadFactory("GeyserServer", true)); this.childGroup = TRANSPORT.eventLoopGroupFactory().apply(threadCount, new DefaultThreadFactory("GeyserServerChild", true)); @@ -148,7 +149,7 @@ public CompletableFuture bind(InetSocketAddress address) { private void modifyHandlers(ChannelFuture future) { future.addListener((ChannelFutureListener) f -> { if (!f.isSuccess()) { - GeyserImpl.getInstance().getLogger().warning("Not modifying handlers due to exception: " + f.cause()); + GeyserLogger.get().warning("Not modifying handlers due to exception: " + f.cause()); return; } @@ -175,7 +176,7 @@ public void shutdown() { SkinProvider.shutdown(); } catch (InterruptedException e) { - GeyserImpl.getInstance().getLogger().severe("Exception in shutdown process", e); + GeyserLogger.get().severe("Exception in shutdown process", e); } for (ChannelFuture f : bootstrapFutures) { f.channel().closeFuture().syncUninterruptibly(); @@ -184,39 +185,37 @@ public void shutdown() { @SuppressWarnings("Convert2MethodRef") private ServerBootstrap createBootstrap() { - if (this.geyser.config().debugMode()) { - this.geyser.getLogger().debug("Transport type: " + TRANSPORT.method().name()); - if (TRANSPORT.datagramChannelClass() == NioDatagramChannel.class) { - if (System.getProperties().contains("disableNativeEventLoop")) { - this.geyser.getLogger().debug("EventLoop type is NIO because native event loops are disabled."); - } else { - // Use lambda here, not method reference, or else NoClassDefFoundError for Epoll/KQueue will not be caught - this.geyser.getLogger().debug("Reason for no Epoll: " + throwableOrCaught(() -> Epoll.unavailabilityCause())); - this.geyser.getLogger().debug("Reason for no KQueue: " + throwableOrCaught(() -> KQueue.unavailabilityCause())); - this.geyser.getLogger().debug("Reason for no IoUring: " + throwableOrCaught(() -> IoUring.unavailabilityCause())); - } + GeyserLogger.get().debug("Transport type: " + TRANSPORT.method().name()); + if (TRANSPORT.datagramChannelClass() == NioDatagramChannel.class) { + if (System.getProperties().contains("disableNativeEventLoop")) { + GeyserLogger.get().debug("EventLoop type is NIO because native event loops are disabled."); + } else { + // Use lambda here, not method reference, or else NoClassDefFoundError for Epoll/KQueue will not be caught + GeyserLogger.get().debug("Reason for no Epoll: " + throwableOrCaught(() -> Epoll.unavailabilityCause())); + GeyserLogger.get().debug("Reason for no KQueue: " + throwableOrCaught(() -> KQueue.unavailabilityCause())); + GeyserLogger.get().debug("Reason for no IoUring: " + throwableOrCaught(() -> IoUring.unavailabilityCause())); } } - this.geyser.getLogger().debug("Setting MTU to " + this.geyser.config().advanced().bedrock().mtu()); + GeyserLogger.get().debug("Setting MTU to " + this.geyser.config().advanced().bedrock().mtu()); int rakPacketLimit = positivePropOrDefault("Geyser.RakPacketLimit", DEFAULT_PACKET_LIMIT); - this.geyser.getLogger().debug("Setting RakNet packet limit to " + rakPacketLimit); + GeyserLogger.get().debug("Setting RakNet packet limit to " + rakPacketLimit); int rakGlobalPacketLimit = positivePropOrDefault("Geyser.RakGlobalPacketLimit", DEFAULT_GLOBAL_PACKET_LIMIT); - this.geyser.getLogger().debug("Setting RakNet global packet limit to " + rakGlobalPacketLimit); + GeyserLogger.get().debug("Setting RakNet global packet limit to " + rakGlobalPacketLimit); boolean rakSendCookie = Boolean.parseBoolean(System.getProperty("Geyser.RakSendCookie", "true")); - this.geyser.getLogger().debug("Setting RakNet send cookie to " + rakSendCookie); + GeyserLogger.get().debug("Setting RakNet send cookie to " + rakSendCookie); int maxConnectionsPerAddress = positivePropOrDefault("Geyser.MaxConnectionsPerAddress", 10); - this.geyser.getLogger().debug("Setting max connections per address to " + maxConnectionsPerAddress); + GeyserLogger.get().debug("Setting max connections per address to " + maxConnectionsPerAddress); boolean rakRateLimitingDisabled = Boolean.parseBoolean(System.getProperty( "Geyser.RakRateLimitingDisabled", Boolean.toString(this.geyser.config().advanced().bedrock().useWaterdogpeForwarding()) )); - this.geyser.getLogger().debug("Disabling RakNet rate limiting " + rakRateLimitingDisabled); + GeyserLogger.get().debug("Disabling RakNet rate limiting " + rakRateLimitingDisabled); GeyserServerInitializer serverInitializer = new GeyserServerInitializer(this.geyser, rakSendCookie); playerGroup = serverInitializer.getEventLoopGroup(); @@ -259,20 +258,20 @@ public boolean onConnectionRequest(InetSocketAddress inetSocketAddress, InetSock ); geyser.eventBus().fire(requestEvent); if (requestEvent.isCancelled()) { - geyser.getLogger().debug("Connection request from " + ip + " was cancelled using the API!"); + GeyserLogger.get().debug("Connection request from " + ip + " was cancelled using the API!"); connectionAttempts++; return false; } - geyser.getLogger().debug(GeyserLocale.getLocaleStringLog("geyser.network.attempt_connect", ip)); + GeyserLogger.get().debug(GeyserLocale.getLocaleStringLog("geyser.network.attempt_connect", ip)); connectionAttempts++; return true; } public BedrockPong onQuery(Channel channel, InetSocketAddress inetSocketAddress) { - if (geyser.config().debugMode() && PRINT_DEBUG_PINGS) { + if (GeyserLogger.get().isDebug() && PRINT_DEBUG_PINGS) { String ip = geyser.config().logPlayerIpAddresses() ? inetSocketAddress.toString() : ""; - geyser.getLogger().debug(GeyserLocale.getLocaleStringLog("geyser.network.pinged", ip)); + GeyserLogger.get().debug(GeyserLocale.getLocaleStringLog("geyser.network.pinged", ip)); } GeyserConfig config = geyser.config(); @@ -410,7 +409,7 @@ private static int positivePropOrDefault(String property, int defaultValue) { int parsed = value != null ? Integer.parseInt(value) : defaultValue; if (parsed < 1) { - GeyserImpl.getInstance().getLogger().warning( + GeyserLogger.get().warning( "Non-postive integer value for " + property + ": " + value + ". Using default value: " + defaultValue ); return defaultValue; @@ -418,7 +417,7 @@ private static int positivePropOrDefault(String property, int defaultValue) { return parsed; } catch (NumberFormatException e) { - GeyserImpl.getInstance().getLogger().warning( + GeyserLogger.get().warning( "Invalid integer value for " + property + ": " + value + ". Using default value: " + defaultValue ); return defaultValue; diff --git a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java index 936f4189918..79f70180357 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java +++ b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java @@ -30,6 +30,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.Constants; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.pack.ResourcePackManifest; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.type.CustomSkull; @@ -71,7 +72,7 @@ public class SkullResourcePackManager { try { Files.createDirectories(cachePath); } catch (IOException e) { - GeyserImpl.getInstance().getLogger().severe("Unable to create directories for player skull resource pack!", e); + GeyserLogger.get().severe("Unable to create directories for player skull resource pack!", e); return null; } cleanSkullSkinCache(); @@ -83,22 +84,22 @@ public class SkullResourcePackManager { return null; } if (packFile.exists() && canReusePack(packFile)) { - GeyserImpl.getInstance().getLogger().info("Reusing cached player skull resource pack."); + GeyserLogger.get().info("Reusing cached player skull resource pack."); return packPath; } // We need to create the resource pack from scratch - GeyserImpl.getInstance().getLogger().info("Creating skull resource pack."); + GeyserLogger.get().info("Creating skull resource pack."); packFile.delete(); try (ZipOutputStream zipOS = new ZipOutputStream(Files.newOutputStream(packPath, StandardOpenOption.WRITE, StandardOpenOption.CREATE))) { addBaseResources(zipOS); addSkinTextures(zipOS); addAttachables(zipOS); - GeyserImpl.getInstance().getLogger().info("Finished creating skull resource pack."); + GeyserLogger.get().info("Finished creating skull resource pack."); return packPath; } catch (IOException e) { - GeyserImpl.getInstance().getLogger().severe("Unable to create player skull resource pack!", e); - GeyserImpl.getInstance().getLogger().severe("Bedrock players will see dirt blocks instead of custom skull blocks."); + GeyserLogger.get().severe("Unable to create player skull resource pack!", e); + GeyserLogger.get().severe("Bedrock players will see dirt blocks instead of custom skull blocks."); packFile.delete(); } return null; @@ -138,7 +139,7 @@ public static void cacheSkullSkin(String skinHash) throws IOException { ImageIO.write(skullTexture, "png", skinPath.toFile()); SKULL_SKINS.put(skinHash, skinPath); - GeyserImpl.getInstance().getLogger().debug("Cached player skull to " + skinPath + " for " + skinHash); + GeyserLogger.get().debug("Cached player skull to " + skinPath + " for " + skinHash); } public static void cleanSkullSkinCache() { @@ -157,13 +158,10 @@ public static void cleanSkullSkinCache() { } } if (removeCount != 0) { - GeyserImpl.getInstance().getLogger().debug("Removed " + removeCount + " unnecessary skull skins."); + GeyserLogger.get().debug("Removed " + removeCount + " unnecessary skull skins."); } } catch (IOException e) { - GeyserImpl.getInstance().getLogger().debug("Unable to clean up skull skin cache."); - if (GeyserImpl.getInstance().config().debugMode()) { - e.printStackTrace(); - } + GeyserLogger.get().debug("Unable to clean up skull skin cache.", e); } } @@ -279,7 +277,7 @@ private static Pair generatePackUUIDs() { uuid1 = new UUID(skinHashes.getLong(), skinHashes.getLong()); uuid2 = new UUID(skinHashes.getLong(), skinHashes.getLong()); } catch (NoSuchAlgorithmException e) { - GeyserImpl.getInstance().getLogger().severe("Unable to get SHA-256 Message Digest instance! Bedrock players will have to re-downloaded the player skull resource pack after each server restart.", e); + GeyserLogger.get().severe("Unable to get SHA-256 Message Digest instance! Bedrock players will have to re-downloaded the player skull resource pack after each server restart.", e); } return Pair.of(uuid1, uuid2); @@ -303,7 +301,7 @@ private static boolean canReusePack(File packFile) { return resourceUUID.isPresent() && uuids.second().equals(resourceUUID.get()); } } catch (IOException e) { - GeyserImpl.getInstance().getLogger().debug("Cached player skull resource pack was invalid! The pack will be recreated."); + GeyserLogger.get().debug("Cached player skull resource pack was invalid! The pack will be recreated."); } return false; } diff --git a/core/src/main/java/org/geysermc/geyser/pack/path/GeyserPathPackCodec.java b/core/src/main/java/org/geysermc/geyser/pack/path/GeyserPathPackCodec.java index ea6f319f930..98dccd47ef3 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/path/GeyserPathPackCodec.java +++ b/core/src/main/java/org/geysermc/geyser/pack/path/GeyserPathPackCodec.java @@ -28,6 +28,7 @@ import lombok.RequiredArgsConstructor; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.pack.PathPackCodec; import org.geysermc.geyser.api.pack.ResourcePack; import org.geysermc.geyser.registry.loader.ResourcePackLoader; @@ -102,7 +103,7 @@ private void checkLastModified() { } if (lastModified.toInstant().isAfter(this.lastModified.toInstant())) { - GeyserImpl.getInstance().getLogger().warning("Detected a change in the resource pack " + path + ". This is likely to cause undefined behavior for new clients joining. It is suggested you restart Geyser."); + GeyserLogger.get().warning("Detected a change in the resource pack " + path + ". This is likely to cause undefined behavior for new clients joining. It is suggested you restart Geyser."); this.lastModified = lastModified; this.sha256 = null; this.size = -1; diff --git a/core/src/main/java/org/geysermc/geyser/pack/url/GeyserUrlPackCodec.java b/core/src/main/java/org/geysermc/geyser/pack/url/GeyserUrlPackCodec.java index 946861e0b6f..b585e187103 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/url/GeyserUrlPackCodec.java +++ b/core/src/main/java/org/geysermc/geyser/pack/url/GeyserUrlPackCodec.java @@ -31,6 +31,7 @@ import lombok.Getter; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.pack.PathPackCodec; import org.geysermc.geyser.api.pack.UrlPackCodec; import org.geysermc.geyser.pack.GeyserResourcePack; @@ -112,14 +113,14 @@ public void testForChanges(ResourcePackHolder holder) { var currentVersion = holder.version().toString(); var updatedVersion = updatedPack.manifest().header().version().toString(); if (currentVersion.equals(updatedVersion)) { - GeyserImpl.getInstance().getLogger().info("No version or pack change detected: Was the resource pack server down?"); + GeyserLogger.get().info("No version or pack change detected: Was the resource pack server down?"); return; } else { - GeyserImpl.getInstance().getLogger().info("Detected a new resource pack version (%s, old version %s) for pack at %s!" + GeyserLogger.get().info("Detected a new resource pack version (%s, old version %s) for pack at %s!" .formatted(currentVersion, updatedVersion, url)); } } else { - GeyserImpl.getInstance().getLogger().info("Detected a new resource pack at the url %s!".formatted(url)); + GeyserLogger.get().info("Detected a new resource pack at the url %s!".formatted(url)); Registries.RESOURCE_PACKS.get().remove(holder.uuid()); } @@ -131,7 +132,7 @@ public void testForChanges(ResourcePackHolder holder) { }) .whenComplete((result, throwable) -> { if (throwable != null) { - GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.resource_pack.broken", url), throwable); + GeyserLogger.get().error(GeyserLocale.getLocaleStringLog("geyser.resource_pack.broken", url), throwable); Registries.RESOURCE_PACKS.get().remove(holder.uuid()); } }); diff --git a/core/src/main/java/org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java b/core/src/main/java/org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java index aeae1d90142..feabee34896 100644 --- a/core/src/main/java/org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java +++ b/core/src/main/java/org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java @@ -32,6 +32,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.nbt.util.VarInts; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.util.JsonUtils; @@ -69,7 +70,7 @@ public GeyserLegacyPingPassthrough(GeyserImpl geyser, int interval) { if (geyser.config().motd().passthroughMotd() || geyser.config().motd().passthroughPlayerCounts()) { // Ensure delay is not zero int interval = (geyser.config().motd().pingPassthroughInterval() == 0) ? 1 : geyser.config().motd().pingPassthroughInterval(); - geyser.getLogger().debug("Scheduling ping passthrough at an interval of " + interval + " second(s)."); + GeyserLogger.get().debug("Scheduling ping passthrough at an interval of " + interval + " second(s)."); GeyserLegacyPingPassthrough pingPassthrough = new GeyserLegacyPingPassthrough(geyser, interval); pingPassthrough.setName("Geyser LegacyPingPassthrough Thread"); pingPassthrough.setDaemon(true); @@ -146,17 +147,17 @@ public void run() { this.pingInfo = JsonUtils.fromJson(buffer, GeyserPingInfo.class); } catch (SocketTimeoutException | ConnectException ex) { this.pingInfo = null; - this.geyser.getLogger().debug("Connection timeout for ping passthrough."); + GeyserLogger.get().debug("Connection timeout for ping passthrough."); } catch (JsonSyntaxException ex) { - this.geyser.getLogger().error("Failed to parse json when pinging server!", ex); + GeyserLogger.get().error("Failed to parse json when pinging server!", ex); } catch (EOFException e) { this.pingInfo = null; - this.geyser.getLogger().warning("Failed to ping the remote Java server! Is it online and configured in Geyser's config?"); + GeyserLogger.get().warning("Failed to ping the remote Java server! Is it online and configured in Geyser's config?"); } catch (UnknownHostException ex) { // Don't reset pingInfo, as we want to keep the last known value - this.geyser.getLogger().warning("Unable to resolve remote host! Is the remote server down or invalid?"); + GeyserLogger.get().warning("Unable to resolve remote host! Is the remote server down or invalid?"); } catch (IOException e) { - this.geyser.getLogger().error("IO error while trying to use legacy ping passthrough", e); + GeyserLogger.get().error("IO error while trying to use legacy ping passthrough", e); } try { diff --git a/core/src/main/java/org/geysermc/geyser/registry/PacketTranslatorRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/PacketTranslatorRegistry.java index ce713baa245..5f173d3ee01 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/PacketTranslatorRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/PacketTranslatorRegistry.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.registry; import org.cloudburstmc.protocol.bedrock.packet.ServerboundDiagnosticsPacket; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundDelimiterPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundTabListPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.level.ClientboundChunkBatchStartPacket; @@ -73,9 +74,9 @@ public

boolean translate(Class clazz, P packet, Geyse } return true; } else { - if (GeyserImpl.getInstance().config().debugMode()) { + if (GeyserLogger.get().isDebug()) { if (!IGNORED_PACKETS.contains(clazz)) { - GeyserImpl.getInstance().getLogger().debug("Could not find packet for " + (packet.toString().length() > 25 ? packet.getClass().getSimpleName() : packet)); + GeyserLogger.get().debug("Could not find packet for " + (packet.toString().length() > 25 ? packet.getClass().getSimpleName() : packet)); } } @@ -91,9 +92,9 @@ private

void translate0(GeyserSession session, PacketTranslator

try { translator.translate(session, packet); } catch (ErosionCancellationException ex) { - GeyserImpl.getInstance().getLogger().debug("Caught ErosionCancellationException"); + GeyserLogger.get().debug("Caught ErosionCancellationException"); } catch (Throwable ex) { - GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.network.translator.packet.failed", packet.getClass().getSimpleName()), ex); + GeyserLogger.get().error(GeyserLocale.getLocaleStringLog("geyser.network.translator.packet.failed", packet.getClass().getSimpleName()), ex); ex.printStackTrace(); } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/BlockShapeRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/BlockShapeRegistryLoader.java index a0b92a22808..13238f55d3a 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/BlockShapeRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/BlockShapeRegistryLoader.java @@ -31,6 +31,7 @@ import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.nbt.NbtUtils; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.level.physics.BoundingBox; import org.geysermc.geyser.registry.BlockRegistries; @@ -63,7 +64,7 @@ public List load(String input) { for (int i = 0; i < blockStates.size(); i++) { BlockState state = blockStates.get(i); if (state == null) { - GeyserImpl.getInstance().getLogger().warning("Missing block state for Java block " + i); + GeyserLogger.get().warning("Missing block state for Java block " + i); collisions.add(null); continue; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/CollisionRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/CollisionRegistryLoader.java index f91cb1a14a2..7ae234490ab 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/CollisionRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/CollisionRegistryLoader.java @@ -35,6 +35,7 @@ import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.nbt.NbtUtils; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.level.physics.BoundingBox; import org.geysermc.geyser.registry.BlockRegistries; @@ -62,7 +63,7 @@ public class CollisionRegistryLoader extends MultiResourceRegistryLoader load(Pair input) { Map, CollisionInfo> annotationMap = new IdentityHashMap<>(); for (Class clazz : AnnotationUtils.getGeneratedClassesForAnnotation(CollisionRemapper.class.getName())) { - GeyserImpl.getInstance().getLogger().debug("Found annotated collision translator: " + clazz.getCanonicalName()); + GeyserLogger.get().debug("Found annotated collision translator: " + clazz.getCanonicalName()); CollisionRemapper collisionRemapper = clazz.getAnnotation(CollisionRemapper.class); annotationMap.put(clazz, new CollisionInfo(collisionRemapper, Pattern.compile(collisionRemapper.regex()))); @@ -88,7 +89,7 @@ public List load(Pair input) { for (int i = 0; i < blockStates.size(); i++) { BlockState state = blockStates.get(i); if (state == null) { - GeyserImpl.getInstance().getLogger().warning("Missing block state for Java block " + i); + GeyserLogger.get().warning("Missing block state for Java block " + i); continue; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/ParticleTypesRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/ParticleTypesRegistryLoader.java index 42e34a2d59b..e4bfda6b2db 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/ParticleTypesRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/ParticleTypesRegistryLoader.java @@ -31,6 +31,7 @@ import org.cloudburstmc.protocol.bedrock.data.LevelEvent; import org.cloudburstmc.protocol.bedrock.data.LevelEventType; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.registry.type.ParticleMapping; import org.geysermc.mcprotocollib.protocol.data.game.level.particle.ParticleType; @@ -52,7 +53,7 @@ public Map load(String input) { JsonElement bedrockId = entry.getValue().getAsJsonObject().get("bedrockId"); JsonElement eventType = entry.getValue().getAsJsonObject().get("eventType"); if (eventType == null && bedrockId == null) { - GeyserImpl.getInstance().getLogger().debug("Skipping particle mapping " + key + " because no Bedrock equivalent exists."); + GeyserLogger.get().debug("Skipping particle mapping " + key + " because no Bedrock equivalent exists."); continue; } @@ -77,4 +78,4 @@ public Map load(String input) { } return particles; } -} \ No newline at end of file +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/ResourcePackLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/ResourcePackLoader.java index 6d29db9076c..c8cfe3cfea1 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/ResourcePackLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/ResourcePackLoader.java @@ -30,6 +30,7 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.event.lifecycle.GeyserLoadResourcePacksEvent; import org.geysermc.geyser.api.pack.PathPackCodec; import org.geysermc.geyser.api.pack.ResourcePack; @@ -97,7 +98,7 @@ public Map load(Path directory) { try { Files.createDirectory(directory); } catch (IOException e) { - GeyserImpl.getInstance().getLogger().error("Could not create packs directory", e); + GeyserLogger.get().error("Could not create packs directory", e); } } @@ -106,7 +107,7 @@ public Map load(Path directory) { resourcePacks = stream.filter(PACK_MATCHER::matches) .collect(Collectors.toCollection(ArrayList::new)); // toList() does not guarantee mutability } catch (Exception e) { - GeyserImpl.getInstance().getLogger().error("Could not list packs directory", e); + GeyserLogger.get().error("Could not list packs directory", e); // Ensure the event is fired even if there was an issue reading // from our own resource pack directory. External projects may have @@ -130,7 +131,7 @@ public Map load(Path directory) { try { defineEvent.register(readPack(path).build()); } catch (Exception e) { - GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.resource_pack.broken", path)); + GeyserLogger.get().error(GeyserLocale.getLocaleStringLog("geyser.resource_pack.broken", path)); e.printStackTrace(); } } @@ -167,7 +168,7 @@ public static GeyserResourcePack.Builder readPack(Path path) throws IllegalArgum Path keyFile = path.resolveSibling(path.getFileName().toString() + ".key"); contentKey = Files.exists(keyFile) ? Files.readString(keyFile, StandardCharsets.UTF_8) : ""; } catch (IOException e) { - GeyserImpl.getInstance().getLogger().error("Failed to read content key for resource pack " + path.getFileName(), e); + GeyserLogger.get().error("Failed to read content key for resource pack " + path.getFileName(), e); contentKey = ""; } @@ -196,7 +197,7 @@ private static ResourcePackManifest readManifest(Path path, String packLocation) stream.forEach(x -> { String name = x.getName(); if (SHOW_RESOURCE_PACK_LENGTH_WARNING && name.length() >= 80) { - GeyserImpl.getInstance().getLogger().warning("The resource pack " + packLocation + GeyserLogger.get().warning("The resource pack " + packLocation + " has a file in it that meets or exceeds 80 characters in its path (" + name + ", " + name.length() + " characters long). This will cause problems on some Bedrock platforms." + " Please rename it to be shorter, or reduce the amount of folders needed to get to the file."); @@ -233,7 +234,7 @@ private void loadRemotePacks(GeyserDefineResourcePacksEventImpl event) { try { Files.createDirectories(cachedDirectory); } catch (IOException e) { - instance.getLogger().error("Could not create remote pack cache directory", e); + GeyserLogger.get().error("Could not create remote pack cache directory", e); return; } } @@ -243,9 +244,9 @@ private void loadRemotePacks(GeyserDefineResourcePacksEventImpl event) { try { event.register(new GeyserUrlPackCodec(url).create()); } catch (Throwable e) { - instance.getLogger().error(GeyserLocale.getLocaleStringLog("geyser.resource_pack.broken", url)); - instance.getLogger().error(e.getMessage()); - if (instance.getLogger().isDebug()) { + GeyserLogger.get().error(GeyserLocale.getLocaleStringLog("geyser.resource_pack.broken", url)); + GeyserLogger.get().error(e.getMessage()); + if (GeyserLogger.get().isDebug()) { e.printStackTrace(); } } @@ -262,13 +263,13 @@ private void loadRemotePacks(GeyserDefineResourcePacksEventImpl event) { public static void testRemotePack(GeyserSession session, GeyserUrlPackCodec codec, ResourcePackHolder holder) { if (CACHED_FAILED_PACKS.getIfPresent(codec.url()) == null) { CACHED_FAILED_PACKS.put(codec.url(), codec); - GeyserImpl.getInstance().getLogger().warning( + GeyserLogger.get().warning( "Bedrock client (%s, playing on %s) was not able to download the resource pack at %s!" .formatted(session.bedrockUsername(), session.getClientData().getDeviceOs().name(), codec.url()) ); if (!Registries.RESOURCE_PACKS.get().containsKey(holder.uuid())) { - GeyserImpl.getInstance().getLogger().warning("Skipping remote resource pack check as pack is not present in global resource pack registry."); + GeyserLogger.get().warning("Skipping remote resource pack check as pack is not present in global resource pack registry."); return; } @@ -299,8 +300,8 @@ public static void testRemotePack(GeyserSession session, GeyserUrlPackCodec code // Check if a "manifest.json" or "pack_manifest.json" file is located directly in the zip... does not work otherwise. // (something like MyZip.zip/manifest.json) will not, but will if it's a subfolder (MyPack.zip/MyPack/manifest.json) if (zip.getEntry("manifest.json") != null || zip.getEntry("pack_manifest.json") != null) { - if (GeyserImpl.getInstance().getLogger().isDebug()) { - GeyserImpl.getInstance().getLogger().info("The remote resource pack from " + url + " contains a manifest.json file at the root of the zip file. " + + if (GeyserLogger.get().isDebug()) { + GeyserLogger.get().info("The remote resource pack from " + url + " contains a manifest.json file at the root of the zip file. " + "This may not work for remote packs, and could cause Bedrock clients to fall back to request the pack from the server. " + "Please put the pack file in a subfolder, and provide that zip in the URL."); } @@ -338,7 +339,7 @@ public static void cleanupRemotePacks() { } if (count > 0) { - GeyserImpl.getInstance().getLogger().debug(String.format("Removed %d cached resource pack files as they are no longer in use!", count)); + GeyserLogger.get().debug(String.format("Removed %d cached resource pack files as they are no longer in use!", count)); } } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/SoundEventsRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/SoundEventsRegistryLoader.java index 441a74f48aa..22ed6d8b94e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/SoundEventsRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/SoundEventsRegistryLoader.java @@ -30,6 +30,7 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.cloudburstmc.protocol.bedrock.data.LevelEventType; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.translator.level.event.LevelEventTranslator; import org.geysermc.geyser.translator.level.event.PlaySoundEventTranslator; import org.geysermc.geyser.translator.level.event.SoundEventEventTranslator; @@ -84,9 +85,9 @@ public Map load(String input) { soundEffects.put(javaEffect, transformer); } } catch (Exception e) { - GeyserImpl.getInstance().getLogger().warning("Failed to map sound effect " + entry.getKey() + " : " + e); + GeyserLogger.get().warning("Failed to map sound effect " + entry.getKey() + " : " + e); } } return soundEffects; } -} \ No newline at end of file +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java index 0d60c10fcd9..a271fdbe11a 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java @@ -31,6 +31,7 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.item.custom.v2.CustomItemDefinition; import org.geysermc.geyser.api.util.Identifier; import org.geysermc.geyser.registry.mappings.util.CustomBlockMapping; @@ -71,7 +72,7 @@ public boolean ensureMappingsDirectory(Path mappingsDirectory) { Files.createDirectories(mappingsDirectory); return true; } catch (IOException e) { - GeyserImpl.getInstance().getLogger().error("Failed to create mappings directory", e); + GeyserLogger.get().error("Failed to create mappings directory", e); return false; } } @@ -105,12 +106,12 @@ public void loadBlockMappingsFromJson(BiConsumer con try (FileReader reader = new FileReader(file.toFile())) { mappingsRoot = (JsonObject) new JsonParser().parse(reader); } catch (IOException e) { - GeyserImpl.getInstance().getLogger().error("Failed to read custom mapping file: " + file, e); + GeyserLogger.get().error("Failed to read custom mapping file: " + file, e); return null; } if (!mappingsRoot.has("format_version")) { - GeyserImpl.getInstance().getLogger().error("Mappings file " + file + " is missing the format version field!"); + GeyserLogger.get().error("Mappings file " + file + " is missing the format version field!"); return null; } @@ -120,7 +121,7 @@ public void loadBlockMappingsFromJson(BiConsumer con public int getFormatVersion(JsonObject mappingsRoot, Path file) { int formatVersion = mappingsRoot.get("format_version").getAsInt(); if (!this.mappingReaders.containsKey(formatVersion)) { - GeyserImpl.getInstance().getLogger().error("Mappings file " + file + " has an unknown format version: " + formatVersion); + GeyserLogger.get().error("Mappings file " + file + " has an unknown format version: " + formatVersion); return -1; } return formatVersion; diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 6d69467e0ca..1cb2f4ae271 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -33,6 +33,7 @@ import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; import org.geysermc.geyser.api.block.custom.CustomBlockState; @@ -115,7 +116,7 @@ public void readItemMappingsV1(Path file, JsonObject mappingsRoot, BiConsumer Long.compareUnsigned(fnv164(a.getString("name")), fnv164(b.getString("name")))); @@ -364,7 +365,7 @@ private static void registerBedrockBlocks() { for (Map.Entry entry : nonVanillaStateOverrides.entrySet()) { GeyserBedrockBlock bedrockDefinition = customBlockStateDefinitions.get(entry.getValue()); if (bedrockDefinition == null) { - GeyserImpl.getInstance().getLogger().warning("Unable to find custom block for " + entry.getValue()); + GeyserLogger.get().warning("Unable to find custom block for " + entry.getValue()); continue; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CreativeItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CreativeItemRegistryPopulator.java index df29349cffd..8265710a9a1 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CreativeItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CreativeItemRegistryPopulator.java @@ -39,6 +39,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.type.BlockMappings; import org.geysermc.geyser.registry.type.GeyserBedrockBlock; @@ -218,7 +219,7 @@ static void populate(ItemRegistryPopulator.PaletteVersion palette, Map entry : BLOCK_STATE_OVERRIDES_QUEUE.entrySet()) { int id = BlockRegistries.JAVA_BLOCK_STATE_IDENTIFIER_TO_ID.getOrDefault(entry.getKey(), -1); if (id == -1) { - GeyserImpl.getInstance().getLogger().warning("Custom block state override for Java Identifier: " + + GeyserLogger.get().warning("Custom block state override for Java Identifier: " + entry.getKey() + " could not be registered as it is not a valid block state."); continue; } CustomBlockState oldBlockState = blockStateOverrides.put(id, entry.getValue()); if (oldBlockState != null) { - GeyserImpl.getInstance().getLogger().warning("Duplicate block state override for Java Identifier: " + + GeyserLogger.get().warning("Duplicate block state override for Java Identifier: " + entry.getKey() + " Old override: " + oldBlockState.name() + " New override: " + entry.getValue().name()); } } @@ -209,12 +210,12 @@ private static void populateVanilla() { BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.set(blockStateOverrides); if (!blockStateOverrides.isEmpty()) { - GeyserImpl.getInstance().getLogger().info("Registered " + blockStateOverrides.size() + " custom block overrides."); + GeyserLogger.get().info("Registered " + blockStateOverrides.size() + " custom block overrides."); } BlockRegistries.CUSTOM_BLOCK_ITEM_OVERRIDES.set(CUSTOM_BLOCK_ITEM_OVERRIDES); if (!CUSTOM_BLOCK_ITEM_OVERRIDES.isEmpty()) { - GeyserImpl.getInstance().getLogger().info("Registered " + CUSTOM_BLOCK_ITEM_OVERRIDES.size() + " custom block item overrides."); + GeyserLogger.get().info("Registered " + CUSTOM_BLOCK_ITEM_OVERRIDES.size() + " custom block item overrides."); } } @@ -278,7 +279,7 @@ private static void populateNonVanilla() { BlockRegistries.BLOCK_STATES.freeze(); if (!NON_VANILLA_BLOCK_STATE_OVERRIDES.isEmpty()) { - GeyserImpl.getInstance().getLogger().info("Registered " + NON_VANILLA_BLOCK_STATE_OVERRIDES.size() + " non-vanilla block overrides."); + GeyserLogger.get().info("Registered " + NON_VANILLA_BLOCK_STATE_OVERRIDES.size() + " non-vanilla block overrides."); } } @@ -288,7 +289,7 @@ private static void populateNonVanilla() { private static void registration() { BlockRegistries.CUSTOM_BLOCKS.set(CUSTOM_BLOCKS.toArray(new CustomBlockData[0])); if (!CUSTOM_BLOCKS.isEmpty()) { - GeyserImpl.getInstance().getLogger().info("Registered " + CUSTOM_BLOCKS.size() + " custom blocks."); + GeyserLogger.get().info("Registered " + CUSTOM_BLOCKS.size() + " custom blocks."); } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java index 947e70c424f..d6d52cbed96 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java @@ -36,6 +36,7 @@ import org.cloudburstmc.protocol.bedrock.data.definitions.SimpleItemDefinition; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemVersion; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.item.custom.CustomRenderOffsets; import org.geysermc.geyser.api.item.custom.v2.CustomItemBedrockOptions; import org.geysermc.geyser.api.item.custom.v2.CustomItemDefinition; @@ -117,7 +118,7 @@ public static void populate(Map items, Multimap 0) { - GeyserImpl.getInstance().getLogger().info("Registered " + customItemCount + " custom items"); + GeyserLogger.get().info("Registered " + customItemCount + " custom items"); } } @@ -199,7 +200,7 @@ private static void validateVanillaOverride(Identifier vanillaIdentifier, Custom if (bedrockIdentifier.vanilla()) { throw new CustomItemDefinitionRegisterException("custom item bedrock identifier namespace can't be minecraft"); } else if (item.model().equals(vanillaIdentifier) && item.predicates().isEmpty()) { - GeyserImpl.getInstance().getLogger().warning("Custom item " + bedrockIdentifier + " overrides the vanilla item model " + vanillaIdentifier + " without additional predicates!"); + GeyserLogger.get().warning("Custom item " + bedrockIdentifier + " overrides the vanilla item model " + vanillaIdentifier + " without additional predicates!"); } for (Map.Entry entry : registered.entries()) { diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java index fbccd91e204..fd59897b1d1 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java @@ -32,6 +32,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCustomSkullsEvent; import org.geysermc.geyser.configuration.GeyserCustomSkullConfiguration; import org.geysermc.geyser.pack.SkullResourcePackManager; @@ -77,7 +78,7 @@ public static void populate() { File skullConfigFile = FileUtils.fileOrCopiedFromResource(skullConfigPath.toFile(), "custom-skulls.yml", Function.identity(), bootstrap); skullConfig = FileUtils.loadConfig(skullConfigFile, GeyserCustomSkullConfiguration.class); } catch (IOException e) { - GeyserImpl.getInstance().getLogger().severe(GeyserLocale.getLocaleStringLog("geyser.config.failed"), e); + GeyserLogger.get().severe(GeyserLocale.getLocaleStringLog("geyser.config.failed"), e); return; } @@ -129,7 +130,7 @@ public void register(@NonNull String texture, @NonNull SkullTextureType type) { skinHashes.forEach((skinHash) -> { if (!SKULL_HASH_PATTERN.matcher(skinHash).matches()) { - GeyserImpl.getInstance().getLogger().error("Skin hash " + skinHash + " does not match required format ^[a-fA-F0-9]+$ and will not be added as a custom block."); + GeyserLogger.get().error("Skin hash " + skinHash + " does not match required format ^[a-fA-F0-9]+$ and will not be added as a custom block."); return; } @@ -137,12 +138,12 @@ public void register(@NonNull String texture, @NonNull SkullTextureType type) { SkullResourcePackManager.cacheSkullSkin(skinHash); BlockRegistries.CUSTOM_SKULLS.register(skinHash, new CustomSkull(skinHash)); } catch (IOException e) { - GeyserImpl.getInstance().getLogger().error("Failed to cache skin for skull texture " + skinHash + " This skull will not be added as a custom block.", e); + GeyserLogger.get().error("Failed to cache skin for skull texture " + skinHash + " This skull will not be added as a custom block.", e); } }); if (!BlockRegistries.CUSTOM_SKULLS.get().isEmpty()) { - GeyserImpl.getInstance().getLogger().info("Registered " + BlockRegistries.CUSTOM_SKULLS.get().size() + " custom skulls as custom blocks."); + GeyserLogger.get().info("Registered " + BlockRegistries.CUSTOM_SKULLS.get().size() + " custom skulls as custom blocks."); } } @@ -154,7 +155,7 @@ public void register(@NonNull String texture, @NonNull SkullTextureType type) { private static @Nullable String getSkinHash(String profile) { String hash = loadHashFromJson(profile); if (hash == null) { - GeyserImpl.getInstance().getLogger().warning("Skull texture " + profile + " contained no valid skins and will not be added as a custom block."); + GeyserLogger.get().warning("Skull texture " + profile + " contained no valid skins and will not be added as a custom block."); return null; } return hash; @@ -169,7 +170,7 @@ public void register(@NonNull String texture, @NonNull SkullTextureType type) { try { return SkinProvider.requestTexturesFromUsername(username).get(); } catch (InterruptedException | ExecutionException e) { - GeyserImpl.getInstance().getLogger().error("Unable to request skull textures for " + username + " This skull will not be added as a custom block.", e); + GeyserLogger.get().error("Unable to request skull textures for " + username + " This skull will not be added as a custom block.", e); return null; } } @@ -184,10 +185,10 @@ public void register(@NonNull String texture, @NonNull SkullTextureType type) { UUID parsed = UUID.fromString(uuid); return SkinProvider.requestTexturesFromUUID(parsed).get(); } catch (InterruptedException | ExecutionException e) { - GeyserImpl.getInstance().getLogger().error("Unable to request skull textures for " + uuid + " This skull will not be added as a custom block.", e); + GeyserLogger.get().error("Unable to request skull textures for " + uuid + " This skull will not be added as a custom block.", e); return null; } catch (IllegalArgumentException e) { - GeyserImpl.getInstance().getLogger().error("Invalid skull uuid " + uuid + " This skull will not be added as a custom block."); + GeyserLogger.get().error("Invalid skull uuid " + uuid + " This skull will not be added as a custom block."); return null; } } @@ -200,7 +201,7 @@ public void register(@NonNull String texture, @NonNull SkullTextureType type) { try { skinObject = JsonUtils.parseJson(new String(Base64.getDecoder().decode(encodedJson), StandardCharsets.UTF_8)); } catch (IllegalArgumentException e) { - GeyserImpl.getInstance().getLogger().warning("Invalid base64 encoded profile!"); + GeyserLogger.get().warning("Invalid base64 encoded profile!"); return null; } @@ -208,7 +209,7 @@ public void register(@NonNull String texture, @NonNull SkullTextureType type) { try { result = GeyserImpl.GSON.fromJson(skinObject, MinimalTexturesPayload.class); } catch (Exception e) { - GeyserImpl.getInstance().getLogger().error("Could not decode texture payload!", e); + GeyserLogger.get().error("Could not decode texture payload!", e); return null; } @@ -218,13 +219,13 @@ public void register(@NonNull String texture, @NonNull SkullTextureType type) { continue; } - GeyserImpl.getInstance().getLogger().warning("Textures payload has been tampered with! (non-whitelisted domain)!"); + GeyserLogger.get().warning("Textures payload has been tampered with! (non-whitelisted domain)!"); return null; } Texture skin = result.textures.get(TextureType.SKIN); if (skin == null) { - GeyserImpl.getInstance().getLogger().warning("Textures payload contains no skin!"); + GeyserLogger.get().warning("Textures payload contains no skin!"); return null; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index 9b2583f091f..51d0359d39f 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -60,6 +60,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.ItemVersion; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockState; import org.geysermc.geyser.api.block.custom.NonVanillaCustomBlockData; @@ -510,7 +511,7 @@ public static void populate() { if (javaOnlyItems.contains(javaItem)) { // These items don't exist on Bedrock, so set up a variable that indicates they should have custom names mappingBuilder = mappingBuilder.translationString((javaItem instanceof BlockItem ? "block." : "item.") + entry.getKey().replace(":", ".")); - GeyserImpl.getInstance().getLogger().debug("Adding " + entry.getKey() + " as an item that needs to be translated."); + GeyserLogger.get().debug("Adding " + entry.getKey() + " as an item that needs to be translated."); } // Add the custom item properties, if applicable @@ -526,7 +527,7 @@ public static void populate() { Identifier customItemIdentifier = customItem.bedrockIdentifier(); if (!registeredCustomItems.add(customItemIdentifier)) { if (firstMappingsPass) { - GeyserImpl.getInstance().getLogger().error("Custom item '" + customItemIdentifier + "' already exists and was registered again! Skipping..."); + GeyserLogger.get().error("Custom item '" + customItemIdentifier + "' already exists and was registered again! Skipping..."); } continue; } @@ -563,7 +564,7 @@ public static void populate() { customIdMappings.put(customMapping.integerId(), customItemIdentifier.toString()); } catch (InvalidItemComponentsException exception) { if (firstMappingsPass) { - GeyserImpl.getInstance().getLogger().error("Not registering custom item (bedrock identifier=" + customItem.bedrockIdentifier() + ")!", exception); + GeyserLogger.get().error("Not registering custom item (bedrock identifier=" + customItem.bedrockIdentifier() + ")!", exception); } } } @@ -680,7 +681,7 @@ public static void populate() { creativeItems.add(creativeItemData); } } catch (InvalidItemComponentsException exception) { - GeyserImpl.getInstance().getLogger().error("Not registering non-vanilla custom item (identifier=" + customItem.identifier() + ")!", exception); + GeyserLogger.get().error("Not registering non-vanilla custom item (identifier=" + customItem.identifier() + ")!", exception); } } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/PacketRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/PacketRegistryPopulator.java index b1b1a0b7ddf..808793310fb 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/PacketRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/PacketRegistryPopulator.java @@ -27,6 +27,7 @@ import org.cloudburstmc.protocol.bedrock.packet.BedrockPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; @@ -40,7 +41,7 @@ public static void populate() { for (Class clazz : AnnotationUtils.getGeneratedClassesForAnnotation(Translator.class)) { Class packet = clazz.getAnnotation(Translator.class).packet(); - GeyserImpl.getInstance().getLogger().debug("Found annotated translator: " + clazz.getCanonicalName() + " : " + packet.getSimpleName()); + GeyserLogger.get().debug("Found annotated translator: " + clazz.getCanonicalName() + " : " + packet.getSimpleName()); try { if (Packet.class.isAssignableFrom(packet)) { @@ -54,10 +55,10 @@ public static void populate() { Registries.BEDROCK_PACKET_TRANSLATORS.register(targetPacket, translator); } else { - GeyserImpl.getInstance().getLogger().error("Class " + clazz.getCanonicalName() + " is annotated as a translator but has an invalid target packet."); + GeyserLogger.get().error("Class " + clazz.getCanonicalName() + " is annotated as a translator but has an invalid target packet."); } } catch (Exception e) { - GeyserImpl.getInstance().getLogger().error("Could not instantiate annotated translator " + clazz.getCanonicalName()); + GeyserLogger.get().error("Could not instantiate annotated translator " + clazz.getCanonicalName()); } } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/custom/CustomItemContext.java b/core/src/main/java/org/geysermc/geyser/registry/populator/custom/CustomItemContext.java index 791d15c77ae..0cd56334f75 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/custom/CustomItemContext.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/custom/CustomItemContext.java @@ -27,6 +27,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.item.custom.v2.CustomItemDefinition; import org.geysermc.geyser.api.item.custom.v2.NonVanillaCustomItemDefinition; import org.geysermc.geyser.item.components.resolvable.ResolvableComponent; @@ -103,10 +104,10 @@ private static DataComponents checkComponents(CustomItemDefinition definition, I Equippable equippable = components.get(DataComponentTypes.EQUIPPABLE); if (equippable != null && stackSize > 1 && firstPass) { - GeyserImpl.getInstance().getLogger().warning("Bedrock doesn't support stackable equippable items! Custom item %s with stack size %s and equippable component for slot %s will not work as expected!" + GeyserLogger.get().warning("Bedrock doesn't support stackable equippable items! Custom item %s with stack size %s and equippable component for slot %s will not work as expected!" .formatted(definition.bedrockIdentifier(), stackSize, equippable.slot())); } else if (stackSize > Item.BEDROCK_MAX_STACK_SIZE && firstPass) { - GeyserImpl.getInstance().getLogger().warning("Bedrock doesn't support stack sizes above %s! Custom item %s with stack size %s will be clamped to %1$s!" + GeyserLogger.get().warning("Bedrock doesn't support stack sizes above %s! Custom item %s with stack size %s will be clamped to %1$s!" .formatted(Item.BEDROCK_MAX_STACK_SIZE, definition.bedrockIdentifier(), stackSize)); } else if (stackSize > 1 && maxDamage > 0) { throw new InvalidItemComponentsException("Stack size must be 1 when max damage is above 0"); diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java b/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java index 170815bf398..0cb81ef703f 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java @@ -39,6 +39,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.common.DefinitionRegistry; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.item.StoredItemMappings; @@ -185,7 +186,7 @@ public ItemMapping getMapping(ItemData data) { } } - GeyserImpl.getInstance().getLogger().debug("Missing mapping for bedrock item " + data); + GeyserLogger.get().debug("Missing mapping for bedrock item " + data); return ItemMapping.AIR; } diff --git a/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java b/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java index 4f5678a5157..6f93d8a58bf 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java @@ -108,7 +108,7 @@ public final class Scoreboard { public Scoreboard(GeyserSession session) { this.session = session; - this.logger = GeyserImpl.getInstance().getLogger(); + this.logger = GeyserLogger.get(); } public void removeScoreboard() { diff --git a/core/src/main/java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java b/core/src/main/java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java index 19c5e64f0b8..0af00e5b46f 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java @@ -28,6 +28,7 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.configuration.GeyserConfig; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.WorldCache; @@ -43,12 +44,9 @@ public final class ScoreboardUpdater extends Thread { private static final int FIRST_MILLIS_BETWEEN_UPDATES = 250; // 4 updates per second private static final int SECOND_MILLIS_BETWEEN_UPDATES = 1000; // 1 update per second - private static final boolean DEBUG_ENABLED; - static { GeyserConfig config = GeyserImpl.getInstance().config(); FIRST_SCORE_PACKETS_PER_SECOND_THRESHOLD = Math.min(config.advanced().scoreboardPacketThreshold(), SECOND_SCORE_PACKETS_PER_SECOND_THRESHOLD); - DEBUG_ENABLED = config.debugMode(); } private final GeyserImpl geyser = GeyserImpl.getInstance(); @@ -112,12 +110,12 @@ public void run() { worldCache.getScoreboard().onUpdate(); scoreboardSession.lastUpdate = currentTime; - if (DEBUG_ENABLED && (currentTime - scoreboardSession.lastLog >= 60000)) { // one minute + if (GeyserLogger.get().isDebug() && (currentTime - scoreboardSession.lastLog >= 60000)) { // one minute int threshold = reachedSecondThreshold ? SECOND_SCORE_PACKETS_PER_SECOND_THRESHOLD : FIRST_SCORE_PACKETS_PER_SECOND_THRESHOLD; - geyser.getLogger().info( + GeyserLogger.get().info( GeyserLocale.getLocaleStringLog("geyser.scoreboard.updater.threshold_reached.log", session.bedrockUsername(), threshold, pps) + GeyserLocale.getLocaleStringLog("geyser.scoreboard.updater.threshold_reached", (millisBetweenUpdates / 1000.0)) ); @@ -129,10 +127,10 @@ public void run() { } } - if (DEBUG_ENABLED) { + if (GeyserLogger.get().isDebug()) { long timeSpent = System.currentTimeMillis() - currentTime; if (timeSpent > 0) { - geyser.getLogger().info(String.format( + GeyserLogger.get().info(String.format( "Scoreboard updater: took %s ms. Updated %s players", timeSpent, sessions.size() )); @@ -142,7 +140,7 @@ public void run() { long timeTillNextAction = getTimeTillNextAction(); sleepFor(timeTillNextAction); } catch (Throwable e) { - geyser.getLogger().error("Error while translating scoreboard information!", e); + GeyserLogger.get().error("Error while translating scoreboard information!", e); // Wait so we don't try to run the scoreboard immediately after this sleepFor(FIRST_MILLIS_BETWEEN_UPDATES); } diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index 80374864db8..5221eadac75 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -113,6 +113,7 @@ import org.geysermc.cumulus.form.Form; import org.geysermc.cumulus.form.util.FormBuilder; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.bedrock.camera.CameraData; import org.geysermc.geyser.api.bedrock.camera.CameraShake; import org.geysermc.geyser.api.connection.GeyserConnection; @@ -127,6 +128,7 @@ import org.geysermc.geyser.command.CommandRegistry; import org.geysermc.geyser.command.GeyserCommandSource; import org.geysermc.geyser.configuration.GeyserConfig; +import org.geysermc.geyser.debug.SessionDebugOption; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.GeyserEntityData; import org.geysermc.geyser.entity.attribute.GeyserAttributeType; @@ -210,6 +212,7 @@ import org.geysermc.mcprotocollib.protocol.ClientListener; import org.geysermc.mcprotocollib.protocol.MinecraftConstants; import org.geysermc.mcprotocollib.protocol.MinecraftProtocol; +import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; import org.geysermc.mcprotocollib.protocol.data.ProtocolState; import org.geysermc.mcprotocollib.protocol.data.game.ServerLink; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.Pose; @@ -290,6 +293,9 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Setter private RemoteServer remoteServer; + @Setter + private EnumSet debugOptions = EnumSet.noneOf(SessionDebugOption.class); + private final SessionPlayerEntity playerEntity; private final AdvancementsCache advancementsCache; @@ -905,7 +911,7 @@ public void connect() { if (isInOverworld) { this.bedrockDimension = this.bedrockOverworldDimension; } - geyser.getLogger().debug("Extending overworld dimension to " + minY + " - " + maxY); + GeyserLogger.get().debug("Extending overworld dimension to " + minY + " - " + maxY); DimensionDataPacket dimensionDataPacket = new DimensionDataPacket(); dimensionDataPacket.getDefinitions().add(new DimensionDefinition("minecraft:overworld", maxY, minY, 5, 3)); @@ -1002,7 +1008,7 @@ private void sendInitialGameRules() { public void authenticate(String username) { if (loggedIn) { - geyser.getLogger().severe(GeyserLocale.getLocaleStringLog("geyser.auth.already_loggedin", username)); + GeyserLogger.get().severe(GeyserLocale.getLocaleStringLog("geyser.auth.already_loggedin", username)); return; } @@ -1019,7 +1025,7 @@ public void authenticate(String username) { public void authenticateWithAuthChain(String authChain) { if (loggedIn) { - geyser.getLogger().severe(GeyserLocale.getLocaleStringLog("geyser.auth.already_loggedin", getAuthData().name())); + GeyserLogger.get().severe(GeyserLocale.getLocaleStringLog("geyser.auth.already_loggedin", getAuthData().name())); return; } @@ -1039,7 +1045,7 @@ public void authenticateWithAuthChain(String authChain) { mcProfile = authManager.getMinecraftProfile().getUpToDate(); mcToken = authManager.getMinecraftToken().getUpToDate(); } catch (Exception e) { - geyser.getLogger().error("Error while attempting to use auth chain for " + bedrockUsername() + "!", e); + GeyserLogger.get().error("Error while attempting to use auth chain for " + bedrockUsername() + "!", e); return Boolean.FALSE; } @@ -1078,7 +1084,7 @@ public void authenticateWithMicrosoftCode() { */ public void authenticateWithMicrosoftCode(boolean offlineAccess) { if (loggedIn) { - geyser.getLogger().severe(GeyserLocale.getLocaleStringLog("geyser.auth.already_loggedin", getAuthData().name())); + GeyserLogger.get().severe(GeyserLocale.getLocaleStringLog("geyser.auth.already_loggedin", getAuthData().name())); return; } @@ -1114,7 +1120,7 @@ public boolean onMicrosoftLoginComplete(PendingMicrosoftAuthentication.Authentic task.cleanup(); // player is online -> remove pending authentication immediately return task.getAuthentication().handle((result, ex) -> { if (ex != null) { - geyser.getLogger().error("Failed to log in with Microsoft code!", ex); + GeyserLogger.get().error("Failed to log in with Microsoft code!", ex); if (ex instanceof CompletionException ce && ce.getCause() instanceof MinecraftProfileNotFoundException) { // Player is trying to join with a Microsoft account that doesn't have Java Edition purchased disconnect(GeyserLocale.getPlayerLocaleString("geyser.network.remote.invalid_account", locale())); @@ -1238,7 +1244,7 @@ public void disconnect(Component reason) { // Downstream's disconnect will fire an event that prints a log message // Otherwise, we print a message here String address = geyser.config().logPlayerIpAddresses() ? upstream.getAddress().getAddress().toString() : ""; - geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.network.disconnect", address, MessageTranslator.convertMessage(reason))); + GeyserLogger.get().info(GeyserLocale.getLocaleStringLog("geyser.network.disconnect", address, MessageTranslator.convertMessage(reason))); } // Disconnect upstream if necessary @@ -1318,9 +1324,9 @@ private void executeRunnable(Runnable runnable) { try { runnable.run(); } catch (ErosionCancellationException e) { - geyser.getLogger().debug("Caught ErosionCancellationException"); + GeyserLogger.get().debug("Caught ErosionCancellationException"); } catch (Throwable e) { - geyser.getLogger().error("Error thrown in " + this.bedrockUsername() + "'s event loop!", e); + GeyserLogger.get().error("Error thrown in " + this.bedrockUsername() + "'s event loop!", e); } } @@ -2073,7 +2079,7 @@ public void confirmTeleport(Vector3f position) { unconfirmedTeleport.incrementUnconfirmedFor(); if (unconfirmedTeleport.shouldResend()) { unconfirmedTeleport.resetUnconfirmedFor(); - geyser.getLogger().debug("Resending teleport " + unconfirmedTeleport.getTeleportConfirmId()); + GeyserLogger.get().debug("Resending teleport " + unconfirmedTeleport.getTeleportConfirmId()); getPlayerEntity().moveAbsolute(unconfirmedTeleport.getPosition(), unconfirmedTeleport.getYaw(), unconfirmedTeleport.getPitch(), playerEntity.isOnGround(), true); @@ -2135,15 +2141,15 @@ public void sendDownstreamLoginPacket(Packet packet) { public void sendDownstreamPacket(Packet packet, ProtocolState intendedState) { // protocol can be null when we're not yet logged in (online auth) if (protocol == null) { - if (geyser.config().debugMode()) { - geyser.getLogger().debug("Tried to send downstream packet with no downstream session!"); + if (GeyserLogger.get().isDebug()) { + GeyserLogger.get().debug("Tried to send downstream packet with no downstream session!"); Thread.dumpStack(); } return; } if (protocol.getOutboundState() != intendedState) { - geyser.getLogger().debug("Tried to send " + packet.getClass().getSimpleName() + " packet while not in " + intendedState.name() + " outbound state. Current state: " + protocol.getOutboundState().name()); + GeyserLogger.get().debug("Tried to send " + packet.getClass().getSimpleName() + " packet while not in " + intendedState.name() + " outbound state. Current state: " + protocol.getOutboundState().name()); return; } @@ -2160,8 +2166,8 @@ public void sendDownstreamPacket(Packet packet) { Channel channel = this.downstream.getSession().getChannel(); if (channel == null) { // Channel is only null before the connection has initialized - geyser.getLogger().warning("Tried to send a packet to the Java server too early!"); - if (geyser.config().debugMode()) { + GeyserLogger.get().warning("Tried to send a packet to the Java server too early!"); + if (GeyserLogger.get().isDebug()) { Thread.dumpStack(); } return; @@ -2182,7 +2188,7 @@ private void sendDownstreamPacket0(Packet packet) { || packet.getClass() == ServerboundCookieResponsePacket.class) { downstream.sendPacket(packet); } else { - geyser.getLogger().debug("Tried to send downstream packet " + packet.getClass().getSimpleName() + " before connected to the server"); + GeyserLogger.get().debug("Tried to send downstream packet " + packet.getClass().getSimpleName() + " before connected to the server"); } } diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSessionAdapter.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSessionAdapter.java index a3cbf85f6e3..da8de2293b2 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSessionAdapter.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSessionAdapter.java @@ -29,6 +29,7 @@ import org.geysermc.floodgate.util.BedrockData; import org.geysermc.geyser.Constants; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.network.AuthType; import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.network.netty.LocalSession; @@ -99,7 +100,7 @@ public void packetSending(PacketSendingEvent event) { skinUploader == null ? null : skinUploader.getVerifyCode() ).toString()); } catch (Exception e) { - geyser.getLogger().error(GeyserLocale.getLocaleStringLog("geyser.auth.floodgate.encrypt_fail"), e); + GeyserLogger.get().error(GeyserLocale.getLocaleStringLog("geyser.auth.floodgate.encrypt_fail"), e); session.disconnect(GeyserLocale.getPlayerLocaleString("geyser.auth.floodgate.encrypt_fail", locale)); return; } @@ -127,11 +128,11 @@ public void connected(ConnectedEvent event) { if (session.getDownstream().getSession() instanceof LocalSession) { // Connected directly to the server - geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.network.remote.connect_internal", + GeyserLogger.get().info(GeyserLocale.getLocaleStringLog("geyser.network.remote.connect_internal", session.bedrockUsername(), session.getProtocol().getProfile().getName())); } else { // Connected to an IP address - geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.network.remote.connect", + GeyserLogger.get().info(GeyserLocale.getLocaleStringLog("geyser.network.remote.connect", session.bedrockUsername(), session.getProtocol().getProfile().getName(), session.remoteServer().address())); } @@ -171,7 +172,7 @@ public void disconnected(DisconnectedEvent event) { // Server expects online mode customDisconnectMessage = GeyserLocale.getPlayerLocaleString("geyser.network.remote.authentication_type_mismatch", locale); // Explain that they may be looking for Floodgate. - geyser.getLogger().warning(GeyserLocale.getLocaleStringLog( + GeyserLogger.get().warning(GeyserLocale.getLocaleStringLog( geyser.platformType() == PlatformType.STANDALONE ? "geyser.network.remote.floodgate_explanation_standalone" : "geyser.network.remote.floodgate_explanation_plugin", @@ -181,7 +182,7 @@ public void disconnected(DisconnectedEvent event) { // Likely that Floodgate is not configured correctly. customDisconnectMessage = GeyserLocale.getPlayerLocaleString("geyser.network.remote.floodgate_login_error", locale); if (geyser.platformType() == PlatformType.STANDALONE) { - geyser.getLogger().warning(GeyserLocale.getLocaleStringLog("geyser.network.remote.floodgate_login_error_standalone")); + GeyserLogger.get().warning(GeyserLocale.getLocaleStringLog("geyser.network.remote.floodgate_login_error_standalone")); } } } else if (cause instanceof ConnectException) { @@ -193,15 +194,15 @@ public void disconnected(DisconnectedEvent event) { disconnectMessage = customDisconnectMessage != null ? customDisconnectMessage : MessageTranslator.convertMessage(event.getReason());; if (session.getDownstream().getSession() instanceof LocalSession) { - geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.network.remote.disconnect_internal", session.bedrockUsername(), disconnectMessage)); + GeyserLogger.get().info(GeyserLocale.getLocaleStringLog("geyser.network.remote.disconnect_internal", session.bedrockUsername(), disconnectMessage)); } else { - geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.network.remote.disconnect", session.bedrockUsername(), session.remoteServer().address(), disconnectMessage)); + GeyserLogger.get().info(GeyserLocale.getLocaleStringLog("geyser.network.remote.disconnect", session.bedrockUsername(), session.remoteServer().address(), disconnectMessage)); } if (cause != null) { if (cause.getMessage() != null) { - GeyserImpl.getInstance().getLogger().error(cause.getMessage()); + GeyserLogger.get().error(cause.getMessage()); } else { - GeyserImpl.getInstance().getLogger().error("An exception occurred: ", cause); + GeyserLogger.get().error("An exception occurred: ", cause); } if (geyser.config().debugMode()) { cause.printStackTrace(); @@ -229,7 +230,7 @@ public void packetReceived(Session session, Packet packet) { @Override public void packetError(PacketErrorEvent event) { - geyser.getLogger().warning(GeyserLocale.getLocaleStringLog("geyser.network.downstream_error", + GeyserLogger.get().warning(GeyserLocale.getLocaleStringLog("geyser.network.downstream_error", (event.getPacketClass() != null ? "(" + event.getPacketClass().getSimpleName() + ") " : "") + event.getCause().getMessage()) ); diff --git a/core/src/main/java/org/geysermc/geyser/session/PendingMicrosoftAuthentication.java b/core/src/main/java/org/geysermc/geyser/session/PendingMicrosoftAuthentication.java index fbbc034d32a..b5c9e32a919 100644 --- a/core/src/main/java/org/geysermc/geyser/session/PendingMicrosoftAuthentication.java +++ b/core/src/main/java/org/geysermc/geyser/session/PendingMicrosoftAuthentication.java @@ -110,10 +110,7 @@ public void resetRunningFlow() { } public void cleanup() { - GeyserLogger logger = GeyserImpl.getInstance().getLogger(); - if (logger.isDebug()) { - logger.debug("Cleaning up authentication task for " + userKey); - } + GeyserLogger.get().debug("Cleaning up authentication task for " + userKey); authentications.invalidate(userKey); } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/BlockBreakHandler.java b/core/src/main/java/org/geysermc/geyser/session/cache/BlockBreakHandler.java index 48f7abaa68b..172bf381ad9 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/BlockBreakHandler.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/BlockBreakHandler.java @@ -42,6 +42,7 @@ import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.block.custom.CustomBlockState; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.ItemFrameEntity; @@ -272,7 +273,7 @@ protected void handleBlockBreakActions(PlayerAuthInputPacket packet) { boolean valid = currentBlockPos != null && Objects.equals(position, currentBlockPos); if (!canBreak(position, state, actionData.getAction()) || !valid) { if (!valid) { - GeyserImpl.getInstance().getLogger().warning("Player %s tried to break block at %s (%s), without starting to destroy it!" + GeyserLogger.get().warning("Player %s tried to break block at %s (%s), without starting to destroy it!" .formatted(session.bedrockUsername(), position, currentBlockPos)); handleAbortBreaking(currentBlockPos); } @@ -297,9 +298,9 @@ protected void handleBlockBreakActions(PlayerAuthInputPacket packet) { handleAbortBreaking(position); } default -> { - GeyserImpl.getInstance().getLogger().warning("Unknown block break action (%s) received! (origin: %s)!" + GeyserLogger.get().warning("Unknown block break action (%s) received! (origin: %s)!" .formatted(actionData.getAction(), session.getDebugInfo())); - GeyserImpl.getInstance().getLogger().debug("Odd packet: " + packet); + GeyserLogger.get().debug("Odd packet: " + packet); session.disconnect("Invalid block breaking action received!"); } } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/BundleCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/BundleCache.java index 3f145d53071..1fa9f7ddbbd 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/BundleCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/BundleCache.java @@ -34,6 +34,7 @@ import org.cloudburstmc.protocol.bedrock.packet.ContainerRegistryCleanupPacket; import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket; import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.PlayerInventory; @@ -67,10 +68,10 @@ public void initialize(GeyserItemStack itemStack) { // Now irrelevant, but keeping as-is for the time being. if (itemStack.is(session, ItemTag.BUNDLES)) { if (itemStack.getBundleData() != null) { - session.getGeyser().getLogger().warning("Stack has bundle data already! It should not!"); - if (session.getGeyser().getLogger().isDebug()) { - session.getGeyser().getLogger().debug("Player: " + session.javaUsername()); - session.getGeyser().getLogger().debug("Stack: " + itemStack); + GeyserLogger.get().warning("Stack has bundle data already! It should not!"); + if (GeyserLogger.get().isDebug()) { + GeyserLogger.get().debug("Player: " + session.javaUsername()); + GeyserLogger.get().debug("Stack: " + itemStack); } } @@ -113,7 +114,7 @@ public ItemData checkForBundle(GeyserItemStack itemStack, ItemData.Builder itemD int containerId = itemStack.getBundleId(); if (containerId == -1) { - session.getGeyser().getLogger().warning("Bundle ID should not be -1!"); + GeyserLogger.get().warning("Bundle ID should not be -1!"); } NbtMap nbt = itemData.build().getTag(); diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java index 07f53374960..0d691415ad4 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java @@ -37,6 +37,7 @@ import org.geysermc.cumulus.form.SimpleForm; import org.geysermc.cumulus.form.impl.FormDefinitions; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.attribute.GeyserAttributeType; import org.geysermc.geyser.session.GeyserSession; @@ -127,7 +128,7 @@ public void handleResponse(ModalFormResponsePacket response) { formDefinitions.definitionFor(form) .handleFormResponse(form, response.getFormData()); } catch (Exception e) { - GeyserImpl.getInstance().getLogger().error("Error while processing form response!", e); + GeyserLogger.get().error("Error while processing form response!", e); } } @@ -143,7 +144,7 @@ public void closeForms() { try { formDefinitions.definitionFor(form).handleFormResponse(form, ""); } catch (Exception e) { - GeyserImpl.getInstance().getLogger().error("Error while closing form!", e); + GeyserLogger.get().error("Error while closing form!", e); } } } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/PistonCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/PistonCache.java index fc1824ab1c4..8ca0aca22e3 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/PistonCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/PistonCache.java @@ -33,6 +33,7 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; import org.geysermc.geyser.entity.vehicle.ClientVehicle; @@ -102,9 +103,9 @@ public void tick() { pistons.entrySet().removeIf((entry) -> entry.getValue().canBeRemoved()); if (pistons.isEmpty() && !movingBlocksMap.isEmpty()) { - session.getGeyser().getLogger().error("The moving block map has de-synced!"); + GeyserLogger.get().error("The moving block map has de-synced!"); for (Map.Entry entry : movingBlocksMap.entrySet()) { - session.getGeyser().getLogger().error("Moving Block at " + entry.getKey() + " was previously owned by the piston at " + entry.getValue().getPosition()); + GeyserLogger.get().error("Moving Block at " + entry.getKey() + " was previously owned by the piston at " + entry.getValue().getPosition()); } } } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java index 31972355556..dfbcc7a1f84 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java @@ -33,6 +33,7 @@ import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtType; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.type.living.animal.FrogEntity; import org.geysermc.geyser.entity.type.living.animal.VariantHolder; import org.geysermc.geyser.entity.type.living.animal.TemperatureVariantAnimal; @@ -151,13 +152,13 @@ public void load(ClientboundRegistryDataPacket packet) { try { readRegistry(session, registryKey, registries.get(registryKey), reader, packet.getEntries()); } catch (Exception exception) { - GeyserImpl.getInstance().getLogger().error("Failed parsing registry entries for " + registryKey + "!", exception); + GeyserLogger.get().error("Failed parsing registry entries for " + registryKey + "!", exception); } } else { throw new IllegalStateException("Expected reader for registry " + registryKey); } } else { - GeyserImpl.getInstance().getLogger().debug("Ignoring registry of type " + packet.getRegistry()); + GeyserLogger.get().debug("Ignoring registry of type " + packet.getRegistry()); } } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java index 045d24b1030..8c0ff2b4abc 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java @@ -33,6 +33,7 @@ import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.block.custom.CustomBlockState; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.spawn.EntitySpawnContext; @@ -86,7 +87,7 @@ public SkullCache(GeyserSession session) { try { texture = resolved.getTexture(TextureType.SKIN, false); } catch (IllegalStateException e) { - session.getGeyser().getLogger().debug("Player skull with invalid skin found at " + position + " with texture payload " + resolved.getProperty("textures")); + GeyserLogger.get().debug("Player skull with invalid skin found at " + position + " with texture payload " + resolved.getProperty("textures")); return null; } if (texture != null) { diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java index 24f7ae26385..aca788d9bc4 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java @@ -71,7 +71,7 @@ public TagCache(GeyserSession session) { public void loadPacket(ClientboundUpdateTagsPacket packet) { Map> allTags = packet.getTags(); - GeyserLogger logger = session.getGeyser().getLogger(); + GeyserLogger logger = GeyserLogger.get(); this.tags.clear(); diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java b/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java index 2b9b421c98d..f4fd84a6ccd 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java @@ -32,6 +32,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.nbt.NbtMap; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.TagCache; import org.geysermc.geyser.session.cache.registry.JavaRegistryKey; @@ -207,7 +208,7 @@ public static GeyserHolderSet readHolderSet(JavaRegistryKey registry, String expected = reader == null ? "either a tag, a string ID, or a list of string IDs" : "either a tag, a string ID, an inline registry element, a list of string IDs, or a list of inline registry elements"; - GeyserImpl.getInstance().getLogger().warning("Failed parsing HolderSet for registry + " + registry + "! Expected " + expected + ", found " + holderSet); + GeyserLogger.get().warning("Failed parsing HolderSet for registry + " + registry + "! Expected " + expected + ", found " + holderSet); return new GeyserHolderSet<>(registry); } } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/waypoint/AzimuthWaypoint.java b/core/src/main/java/org/geysermc/geyser/session/cache/waypoint/AzimuthWaypoint.java index 38a2b488f5f..64e65fe4890 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/waypoint/AzimuthWaypoint.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/waypoint/AzimuthWaypoint.java @@ -27,6 +27,7 @@ import net.kyori.adventure.key.Key; import org.cloudburstmc.math.vector.Vector3f; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.data.game.level.waypoint.AzimuthWaypointData; @@ -55,7 +56,7 @@ public void setData(WaypointData data) { angle = azimuthAngle; updatePosition(); } else { - session.getGeyser().getLogger().warning("Received incorrect waypoint data " + data.getClass() + " for azimuth waypoint"); + GeyserLogger.get().warning("Received incorrect waypoint data " + data.getClass() + " for azimuth waypoint"); } } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/waypoint/ChunkWaypoint.java b/core/src/main/java/org/geysermc/geyser/session/cache/waypoint/ChunkWaypoint.java index dbcf665d4f4..4434b7f5baa 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/waypoint/ChunkWaypoint.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/waypoint/ChunkWaypoint.java @@ -27,6 +27,7 @@ import net.kyori.adventure.key.Key; import org.cloudburstmc.math.vector.Vector3f; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.data.game.level.waypoint.ChunkWaypointData; @@ -48,7 +49,7 @@ public void setData(WaypointData data) { // Set position in centre of chunk setPosition(Vector3f.from(chunkX * 16.0F + 8.0F, session.getPlayerEntity().position().getY(), chunkZ * 16.0F + 8.0F)); } else { - session.getGeyser().getLogger().warning("Received incorrect waypoint data " + data.getClass() + " for chunk waypoint"); + GeyserLogger.get().warning("Received incorrect waypoint data " + data.getClass() + " for chunk waypoint"); } } } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/waypoint/CoordinatesWaypoint.java b/core/src/main/java/org/geysermc/geyser/session/cache/waypoint/CoordinatesWaypoint.java index 8e24b35dc51..e8e73de9079 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/waypoint/CoordinatesWaypoint.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/waypoint/CoordinatesWaypoint.java @@ -27,6 +27,7 @@ import net.kyori.adventure.key.Key; import org.cloudburstmc.math.vector.Vector3i; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.data.game.level.waypoint.Vec3iWaypointData; @@ -47,7 +48,7 @@ public void setData(WaypointData data) { if (data instanceof Vec3iWaypointData(Vector3i vector)) { setPosition(vector.toFloat()); } else { - session.getGeyser().getLogger().warning("Received incorrect waypoint data " + data.getClass() + " for coordinates waypoint"); + GeyserLogger.get().warning("Received incorrect waypoint data " + data.getClass() + " for coordinates waypoint"); } } } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/waypoint/GeyserWaypoint.java b/core/src/main/java/org/geysermc/geyser/session/cache/waypoint/GeyserWaypoint.java index 147ec47d913..ec554e62aea 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/waypoint/GeyserWaypoint.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/waypoint/GeyserWaypoint.java @@ -35,6 +35,7 @@ import org.cloudburstmc.protocol.bedrock.packet.PlayerListPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayerLocationPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.player.PlayerEntity; import org.geysermc.geyser.network.GameProtocol; @@ -142,7 +143,7 @@ public void setEntity(Entity entity) { if (!(entity instanceof PlayerEntity)) { // 26.0 and below does not support non-player entities as waypoint target, // as such, this method should never be called with non-player entities - GeyserImpl.getInstance().getLogger().warning("GeyserWaypoint#setEntity called for non-player entity!"); + GeyserLogger.get().warning("GeyserWaypoint#setEntity called for non-player entity!"); entity = null; } diff --git a/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java b/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java index 07398d49e2a..2ad1de643cb 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java +++ b/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java @@ -34,6 +34,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.skin.Cape; import org.geysermc.geyser.api.skin.Skin; import org.geysermc.geyser.api.skin.SkinData; @@ -113,7 +114,7 @@ public static void setHead(GeyserSession session, AvatarEntity entity, @Nullable SkinManager.resolveProfile(profile).whenCompleteAsync((resolved, throwable) -> { if (throwable != null) { - GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.skin.fail", entity.uuid()), throwable); + GeyserLogger.get().error(GeyserLocale.getLocaleStringLog("geyser.skin.fail", entity.uuid()), throwable); return; } loadHeadFromProfile(session, entity, profile, resolved); @@ -129,7 +130,7 @@ private static void loadHeadFromProfile(GeyserSession session, AvatarEntity enti SkinData mergedSkinData = MERGED_SKINS_LOADING_CACHE.get(new FakeHeadEntry(entity.getSkinId(), skinTexture.getURL(), entity, session)); SkinManager.sendSkinPacket(session, entity, mergedSkinData); } catch (ExecutionException e) { - GeyserImpl.getInstance().getLogger().error("Couldn't merge skin of " + entity.getUsername() + " with head skin " + resolved, e); + GeyserLogger.get().error("Couldn't merge skin of " + entity.getUsername() + " with head skin " + resolved, e); } }); } @@ -146,7 +147,7 @@ public static void restoreOriginalSkin(GeyserSession session, LivingEntity livin SkinProvider.requestSkinData(entity, session).whenCompleteAsync((skinData, throwable) -> { if (throwable != null) { - GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.skin.fail", entity.uuid()), throwable); + GeyserLogger.get().error(GeyserLocale.getLocaleStringLog("geyser.skin.fail", entity.uuid()), throwable); return; } diff --git a/core/src/main/java/org/geysermc/geyser/skin/FloodgateSkinUploader.java b/core/src/main/java/org/geysermc/geyser/skin/FloodgateSkinUploader.java index 0cc6f894658..816595430a7 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/FloodgateSkinUploader.java +++ b/core/src/main/java/org/geysermc/geyser/skin/FloodgateSkinUploader.java @@ -73,7 +73,7 @@ public final class FloodgateSkinUploader { @Getter private int subscribersCount; public FloodgateSkinUploader(GeyserImpl geyser) { - this.logger = geyser.getLogger(); + this.logger = GeyserLogger.get(); this.client = new WebSocketClient(Constants.GLOBAL_API_WS_URI) { @Override public void onOpen(ServerHandshake handshake) { diff --git a/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java b/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java index 4b655506f83..3880e7494ae 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java +++ b/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java @@ -33,6 +33,7 @@ import org.cloudburstmc.protocol.bedrock.packet.PlayerListPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayerSkinPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.skin.Cape; import org.geysermc.geyser.api.skin.Skin; import org.geysermc.geyser.api.skin.SkinData; @@ -208,7 +209,7 @@ public static CompletableFuture resolveProfile(ResolvableProfile pr try { textures = profile.getTextures(false); } catch (IllegalStateException e) { - GeyserImpl.getInstance().getLogger().debug("Could not decode textures from game profile (%s)! Got: %s", profile, e); + GeyserLogger.get().debug("Could not decode textures from game profile (%s)! Got: %s", profile, e); return null; } @@ -232,8 +233,8 @@ public static void requestAndHandleSkinAndCape(AvatarEntity entity, GeyserSessio public static void handleBedrockSkin(AvatarEntity playerEntity, BedrockClientData clientData) { GeyserImpl geyser = GeyserImpl.getInstance(); - if (geyser.config().debugMode()) { - geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.skin.bedrock.register", playerEntity.getUsername(), playerEntity.uuid())); + if (GeyserLogger.get().isDebug()) { + GeyserLogger.get().debug(GeyserLocale.getLocaleStringLog("geyser.skin.bedrock.register", playerEntity.getUsername(), playerEntity.uuid())); } try { @@ -246,9 +247,9 @@ public static void handleBedrockSkin(AvatarEntity playerEntity, BedrockClientDat if (skinBytes.length <= (128 * 128 * 4) && !clientData.isPersonaSkin()) { SkinProvider.storeBedrockSkin(playerEntity.uuid(), clientData.getSkinId(), skinBytes); SkinProvider.storeBedrockGeometry(playerEntity.uuid(), geometryNameBytes, geometryBytes); - } else if (geyser.config().debugMode()) { - geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.skin.bedrock.fail", playerEntity.getUsername())); - geyser.getLogger().debug("The size of '" + playerEntity.getUsername() + "' skin is: " + clientData.getSkinImageWidth() + "x" + clientData.getSkinImageHeight()); + } else if (GeyserLogger.get().isDebug()) { + GeyserLogger.get().debug(GeyserLocale.getLocaleStringLog("geyser.skin.bedrock.fail", playerEntity.getUsername())); + GeyserLogger.get().debug("The size of '" + playerEntity.getUsername() + "' skin is: " + clientData.getSkinImageWidth() + "x" + clientData.getSkinImageHeight()); } if (!clientData.getCapeId().isEmpty()) { diff --git a/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java b/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java index 0a0998f9a9c..71926225025 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java +++ b/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java @@ -36,6 +36,7 @@ import org.cloudburstmc.protocol.bedrock.data.skin.ImageData; import org.cloudburstmc.protocol.bedrock.data.skin.SerializedSkin; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.event.bedrock.SessionSkinApplyEvent; import org.geysermc.geyser.api.network.AuthType; import org.geysermc.geyser.api.skin.Cape; @@ -188,7 +189,7 @@ public static void registerCacheImageTask(GeyserImpl geyser) { } if (count > 0) { - GeyserImpl.getInstance().getLogger().debug(String.format("Removed %d cached image files as they have expired", count)); + GeyserLogger.get().debug(String.format("Removed %d cached image files as they have expired", count)); } }, 10, 1, TimeUnit.DAYS); } @@ -309,7 +310,7 @@ public void geometry(@NonNull SkinGeometry newGeometry) { return eventSkinData.skinData(); } catch (Exception e) { - GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.skin.fail", entity.uuid()), e); + GeyserLogger.get().error(GeyserLocale.getLocaleStringLog("geyser.skin.fail", entity.uuid()), e); } return new SkinData(skinAndCape.skin(), skinAndCape.cape(), null); @@ -325,7 +326,7 @@ private static CompletableFuture requestSkinAndCape(UUID playerId, getOrDefault(requestCape(capeUrl, false), EMPTY_CAPE, 5) ); - GeyserImpl.getInstance().getLogger().debug("Took " + (System.currentTimeMillis() - time) + "ms for " + playerId); + GeyserLogger.get().debug("Took " + (System.currentTimeMillis() - time) + "ms for " + playerId); return skinAndCape; }, getExecutorService()); } @@ -436,7 +437,7 @@ public static BufferedImage requestImage(String imageUrl, boolean isCape) throws File imageFile = GeyserImpl.getInstance().getBootstrap().getConfigFolder().resolve("cache").resolve("images").resolve(UUID.nameUUIDFromBytes(imageUrl.getBytes()) + ".png").toFile(); if (imageFile.exists()) { try { - GeyserImpl.getInstance().getLogger().debug("Reading cached image from file " + imageFile.getPath() + " for " + imageUrl); + GeyserLogger.get().debug("Reading cached image from file " + imageFile.getPath() + " for " + imageUrl); imageFile.setLastModified(System.currentTimeMillis()); image = ImageIO.read(imageFile); } catch (IOException ignored) {} @@ -445,16 +446,16 @@ public static BufferedImage requestImage(String imageUrl, boolean isCape) throws // If no image we download it if (image == null) { image = downloadImage(imageUrl); - GeyserImpl.getInstance().getLogger().debug("Downloaded " + imageUrl); + GeyserLogger.get().debug("Downloaded " + imageUrl); // Write to cache if we are allowed if (GeyserImpl.getInstance().config().advanced().cacheImages() > 0) { imageFile.getParentFile().mkdirs(); try { ImageIO.write(image, "png", imageFile); - GeyserImpl.getInstance().getLogger().debug("Writing cached skin to file " + imageFile.getPath() + " for " + imageUrl); + GeyserLogger.get().debug("Writing cached skin to file " + imageFile.getPath() + " for " + imageUrl); } catch (IOException e) { - GeyserImpl.getInstance().getLogger().error("Failed to write cached skin to file " + imageFile.getPath() + " for " + imageUrl); + GeyserLogger.get().error("Failed to write cached skin to file " + imageFile.getPath() + " for " + imageUrl); } } } @@ -536,14 +537,12 @@ private static byte[] requestImageData(String imageUrl, boolean isCape) throws E JsonObject node = WebUtils.getJson("https://api.minecraftservices.com/minecraft/profile/lookup/" + shorthandUUID(uuid)); JsonElement name = node.get("name"); if (name == null) { - GeyserImpl.getInstance().getLogger().debug("No username found in Mojang response for " + uuid); + GeyserLogger.get().debug("No username found in Mojang response for " + uuid); return null; } return name.getAsString(); } catch (Exception e) { - if (GeyserImpl.getInstance().config().debugMode()) { - e.printStackTrace(); - } + GeyserLogger.get().debug("Unable to get username from UUID.", e); return null; } }, getExecutorService()); @@ -561,14 +560,12 @@ private static byte[] requestImageData(String imageUrl, boolean isCape) throws E JsonObject node = WebUtils.getJson("https://api.mojang.com/users/profiles/minecraft/" + username); JsonElement id = node.get("id"); if (id == null) { - GeyserImpl.getInstance().getLogger().debug("No UUID found in Mojang response for " + username); + GeyserLogger.get().debug("No UUID found in Mojang response for " + username); return null; } return expandUUID(id.getAsString()); } catch (Exception e) { - if (GeyserImpl.getInstance().config().debugMode()) { - e.printStackTrace(); - } + GeyserLogger.get().debug("Unable to get UUID from username.", e); return null; } }, getExecutorService()); @@ -586,15 +583,12 @@ private static byte[] requestImageData(String imageUrl, boolean isCape) throws E JsonObject node = WebUtils.getJson("https://sessionserver.mojang.com/session/minecraft/profile/" + shorthandUUID(uuid)); JsonArray properties = node.getAsJsonArray("properties"); if (properties == null) { - GeyserImpl.getInstance().getLogger().debug("No properties found in Mojang response for " + uuid); + GeyserLogger.get().debug("No properties found in Mojang response for " + uuid); return null; } return properties.get(0).getAsJsonObject().get("value").getAsString(); } catch (Exception e) { - GeyserImpl.getInstance().getLogger().debug("Unable to request textures for " + uuid); - if (GeyserImpl.getInstance().config().debugMode()) { - e.printStackTrace(); - } + GeyserLogger.get().debug("Unable to request textures for " + uuid, e); return null; } }, getExecutorService()); diff --git a/core/src/main/java/org/geysermc/geyser/text/GeyserLocale.java b/core/src/main/java/org/geysermc/geyser/text/GeyserLocale.java index 163c93e3ac4..f63f4fae58f 100644 --- a/core/src/main/java/org/geysermc/geyser/text/GeyserLocale.java +++ b/core/src/main/java/org/geysermc/geyser/text/GeyserLocale.java @@ -29,6 +29,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import java.io.*; import java.nio.charset.StandardCharsets; @@ -91,7 +92,7 @@ public static void finalizeDefaultLocale(GeyserImpl geyser) { // The config's locale is valid DEFAULT_LOCALE = loadedNewLocale; } else if (SYSTEM_LOCALE_INVALID) { - geyser.getLogger().warning(Locale.getDefault().toString() + " is not a valid Bedrock language."); + GeyserLogger.get().warning(Locale.getDefault().toString() + " is not a valid Bedrock language."); } } diff --git a/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java b/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java index 6f6da59287e..d96a8de1d47 100644 --- a/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java +++ b/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java @@ -29,6 +29,7 @@ import com.google.gson.JsonObject; import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.util.AssetUtils; import org.geysermc.geyser.util.FileUtils; import org.geysermc.geyser.util.JsonUtils; @@ -85,7 +86,7 @@ public static void downloadDeprecations() { stream -> AssetUtils.saveFile(DEPRECATED, stream), () -> { if (!loadDeprecations()) { - GeyserImpl.getInstance().getLogger().warning("Failed to load deprecated locale file: it doesn't exist?"); + GeyserLogger.get().warning("Failed to load deprecated locale file: it doesn't exist?"); } })); } @@ -100,7 +101,7 @@ public static void downloadAndLoadLocale(String locale) { locale = locale.toLowerCase(Locale.ROOT); if (isLocaleLoaded(locale)) { - GeyserImpl.getInstance().getLogger().debug("Locale already loaded: " + locale); + GeyserLogger.get().debug("Locale already loaded: " + locale); return; } @@ -112,18 +113,18 @@ public static void downloadAndLoadLocale(String locale) { // Check the locale isn't already loaded if (!AssetUtils.isAssetKnown("minecraft/lang/" + locale + ".json") && !locale.equals("en_us")) { if (loadLocale(locale)) { - GeyserImpl.getInstance().getLogger().debug("Loaded locale locally while not being in asset map: " + locale); + GeyserLogger.get().debug("Loaded locale locally while not being in asset map: " + locale); } else { - GeyserImpl.getInstance().getLogger().warning(GeyserLocale.getLocaleStringLog("geyser.locale.fail.invalid", locale)); + GeyserLogger.get().warning(GeyserLocale.getLocaleStringLog("geyser.locale.fail.invalid", locale)); } return; } - GeyserImpl.getInstance().getLogger().debug("Downloading and loading locale: " + locale); + GeyserLogger.get().debug("Downloading and loading locale: " + locale); downloadLocale(locale); if (!loadLocale(locale)) { - GeyserImpl.getInstance().getLogger().warning(GeyserLocale.getLocaleStringLog("geyser.locale.fail.missing", locale)); + GeyserLogger.get().warning(GeyserLocale.getLocaleStringLog("geyser.locale.fail.missing", locale)); } } @@ -145,9 +146,9 @@ private static void downloadLocale(String locale) { String targetHash = AssetUtils.getAsset("minecraft/lang/" + locale + ".json").getHash(); if (!curHash.equals(targetHash)) { - GeyserImpl.getInstance().getLogger().debug("Locale out of date; re-downloading: " + locale); + GeyserLogger.get().debug("Locale out of date; re-downloading: " + locale); } else { - GeyserImpl.getInstance().getLogger().debug("Locale already downloaded and up-to date: " + locale); + GeyserLogger.get().debug("Locale already downloaded and up-to date: " + locale); return; } } @@ -157,7 +158,7 @@ private static void downloadLocale(String locale) { String hash = AssetUtils.getAsset("minecraft/lang/" + locale + ".json").getHash(); WebUtils.downloadFile("https://resources.download.minecraft.net/" + hash.substring(0, 2) + "/" + hash, localeFile.toString()); } catch (Exception e) { - GeyserImpl.getInstance().getLogger().error("Unable to download locale file hash", e); + GeyserLogger.get().error("Unable to download locale file hash", e); } } @@ -269,7 +270,7 @@ public static String getLocaleString(String messageText, String locale) { String translated = getLocaleStringIfPresent(messageText, locale); if (translated == null) { // Don't cause a NPE if the string is missing - GeyserImpl.getInstance().getLogger().debug("MISSING JAVA TRANSLATION STRING: " + messageText); + GeyserLogger.get().debug("MISSING JAVA TRANSLATION STRING: " + messageText); return messageText; } return translated; diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java index 676794e3fa5..fec54be9574 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java @@ -55,6 +55,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponseStatus; import org.cloudburstmc.protocol.bedrock.packet.ItemStackResponsePacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.BedrockContainerSlot; import org.geysermc.geyser.inventory.CartographyContainer; import org.geysermc.geyser.inventory.GeyserItemStack; @@ -306,8 +307,8 @@ public ItemStackResponse translateRequest(GeyserSession session, Type inventory, case PLACE: { TransferItemStackRequestAction transferAction = (TransferItemStackRequestAction) action; if (!(checkNetId(session, inventory, transferAction.getSource()) && checkNetId(session, inventory, transferAction.getDestination()))) { - if (session.getGeyser().config().debugMode()) { - session.getGeyser().getLogger().error("DEBUG: About to reject TAKE/PLACE request made by " + session.bedrockUsername()); + if (GeyserLogger.get().isDebug()) { + GeyserLogger.get().error("DEBUG: About to reject TAKE/PLACE request made by " + session.bedrockUsername()); dumpStackRequestDetails(session, inventory, transferAction.getSource(), transferAction.getDestination()); } return rejectRequest(request); @@ -478,7 +479,7 @@ public ItemStackResponse translateRequest(GeyserSession session, Type inventory, if (!(checkNetId(session, inventory, source) && checkNetId(session, inventory, destination))) { if (session.getGeyser().config().debugMode()) { - session.getGeyser().getLogger().error("DEBUG: About to reject SWAP request made by " + session.bedrockUsername()); + GeyserLogger.get().error("DEBUG: About to reject SWAP request made by " + session.bedrockUsername()); dumpStackRequestDetails(session, inventory, source, destination); } return rejectRequest(request); @@ -984,7 +985,7 @@ protected static ItemStackResponse rejectRequest(ItemStackRequest request) { * as bad (false). */ protected static ItemStackResponse rejectRequest(ItemStackRequest request, boolean throwError) { - if (throwError && GeyserImpl.getInstance().config().debugMode()) { + if (throwError && GeyserLogger.get().isDebug()) { new Throwable("DEBUGGING: ItemStackRequest rejected " + request.toString()).printStackTrace(); } return new ItemStackResponse(ItemStackResponseStatus.ERROR, request.getRequestId(), Collections.emptyList()); @@ -994,10 +995,10 @@ protected static ItemStackResponse rejectRequest(ItemStackRequest request, boole * Print out the contents of an ItemStackRequest, should the net ID check fail. */ protected void dumpStackRequestDetails(GeyserSession session, Type inventory, ItemStackRequestSlotData source, ItemStackRequestSlotData destination) { - session.getGeyser().getLogger().error("Source: " + source.toString() + " Result: " + checkNetId(session, inventory, source)); - session.getGeyser().getLogger().error("Destination: " + destination.toString() + " Result: " + checkNetId(session, inventory, destination)); - session.getGeyser().getLogger().error("Geyser's record of source slot: " + inventory.getItem(bedrockSlotToJava(source))); - session.getGeyser().getLogger().error("Geyser's record of destination slot: " + inventory.getItem(bedrockSlotToJava(destination))); + GeyserLogger.get().error("Source: " + source.toString() + " Result: " + checkNetId(session, inventory, source)); + GeyserLogger.get().error("Destination: " + destination.toString() + " Result: " + checkNetId(session, inventory, destination)); + GeyserLogger.get().error("Geyser's record of source slot: " + inventory.getItem(bedrockSlotToJava(source))); + GeyserLogger.get().error("Geyser's record of destination slot: " + inventory.getItem(bedrockSlotToJava(destination))); } public boolean checkNetId(GeyserSession session, Type inventory, ItemStackRequestSlotData slotInfoData) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java index c645c0b5663..f02c5e522e3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java @@ -39,6 +39,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.ItemStackRequestActionType; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponse; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.BedrockContainerSlot; import org.geysermc.geyser.inventory.Container; import org.geysermc.geyser.inventory.GeyserItemStack; @@ -102,7 +103,7 @@ public ItemStackResponse translateSpecialRequest(GeyserSession session, Containe BannerPattern requestedPattern = BannerPattern.getByBedrockIdentifier(bedrockPattern); if (requestedPattern == null) { - GeyserImpl.getInstance().getLogger().warning("Unknown Bedrock pattern id: " + bedrockPattern); + GeyserLogger.get().warning("Unknown Bedrock pattern id: " + bedrockPattern); return rejectRequest(request); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java index 0dd896493e8..e867e8f0f07 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java @@ -48,6 +48,7 @@ import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket; import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; import org.cloudburstmc.protocol.bedrock.packet.UpdateBlockPacket; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.BedrockContainerSlot; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.Inventory; @@ -419,7 +420,7 @@ public ItemStackResponse translateRequest(GeyserSession session, PlayerInventory } } default -> { - session.getGeyser().getLogger().error("Unknown crafting state induced by " + session.bedrockUsername()); + GeyserLogger.get().error("Unknown crafting state induced by " + session.bedrockUsername()); return rejectRequest(request); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java index 3ac43eca8d6..4866154e558 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java @@ -36,6 +36,7 @@ import org.cloudburstmc.protocol.bedrock.packet.ContainerOpenPacket; import org.cloudburstmc.protocol.bedrock.packet.UpdateBlockPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.Container; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.holder.BlockInventoryHolder; @@ -92,7 +93,7 @@ public boolean canReuseInventory(GeyserSession session, @NonNull Inventory newIn if (Objects.equals(position, previous.getHolderPosition())) { return true; } else { - GeyserImpl.getInstance().getLogger().debug(session, "Not reusing inventory due to virtual block holder changing (%s -> %s)!", + GeyserLogger.get().debug(session, "Not reusing inventory due to virtual block holder changing (%s -> %s)!", previous.getHolderPosition(), position); return false; } @@ -166,7 +167,7 @@ public void openInventory(GeyserSession session, Container container) { containerOpenPacket.setUniqueEntityId(container.getHolderId()); session.sendUpstreamPacket(containerOpenPacket); - GeyserImpl.getInstance().getLogger().debug(session, containerOpenPacket.toString()); + GeyserLogger.get().debug(session, containerOpenPacket.toString()); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java index 1800ec7f361..f8aab95f361 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java @@ -38,6 +38,7 @@ import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.entity.attribute.GeyserAttributeType; import org.geysermc.geyser.inventory.GeyserItemStack; @@ -148,7 +149,7 @@ public static ItemStack translateToJava(GeyserSession session, ItemData data) { public static ItemData.@NonNull Builder translateToBedrock(GeyserSession session, int javaId, int count, DataComponents components) { ItemMapping bedrockItem = session.getItemMappings().getMapping(javaId); if (bedrockItem == ItemMapping.AIR) { - session.getGeyser().getLogger().debug("ItemMapping returned air: " + javaId); + GeyserLogger.get().debug("ItemMapping returned air: " + javaId); return ItemData.builder(); } return translateToBedrock(session, Registries.JAVA_ITEMS.get().get(javaId), bedrockItem, count, components); @@ -162,7 +163,7 @@ public static ItemData translateToBedrock(GeyserSession session, ItemStack stack ItemMapping bedrockItem = session.getItemMappings().getMapping(stack); if (bedrockItem == ItemMapping.AIR) { - session.getGeyser().getLogger().debug("ItemMapping returned air: " + stack); + GeyserLogger.get().debug("ItemMapping returned air: " + stack); return ItemData.AIR; } // Java item needs to be loaded separately. The mapping for tipped arrow would @@ -178,7 +179,7 @@ public static ItemData translateToBedrock(GeyserSession session, @NonNull Geyser ItemMapping bedrockItem = session.getItemMappings().getMapping(stack.getJavaId()); if (bedrockItem == ItemMapping.AIR) { - session.getGeyser().getLogger().debug("ItemMapping returned air: " + stack); + GeyserLogger.get().debug("ItemMapping returned air: " + stack); return ItemData.AIR; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java index 337e8c0c832..b1680de7eb6 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java @@ -33,6 +33,7 @@ import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.cloudburstmc.protocol.bedrock.packet.UpdateBlockPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.level.block.property.Properties; import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.session.GeyserSession; @@ -100,15 +101,12 @@ public static ResolvableProfile parseResolvableProfile(NbtMap profile) { try { SkullCache.Skull skull = session.getSkullCache().putSkull(blockPosition, resolvedFuture.get(), blockState); if (skull == null) { - session.getGeyser().getLogger().debug("Custom skull with invalid profile: " + blockPosition + " " + resolvedFuture.get()); + GeyserLogger.get().debug("Custom skull with invalid profile: " + blockPosition + " " + resolvedFuture.get()); return null; } return skull.getBlockDefinition(); } catch (InterruptedException | ExecutionException e) { - session.getGeyser().getLogger().debug("Failed to acquire textures for custom skull: " + blockPosition + " " + javaNbt); - if (GeyserImpl.getInstance().config().debugMode()) { - e.printStackTrace(); - } + GeyserLogger.get().debug("Failed to acquire textures for custom skull: " + blockPosition + " " + javaNbt, e); } return null; } @@ -116,10 +114,7 @@ public static ResolvableProfile parseResolvableProfile(NbtMap profile) { // profile contained a username, so we have to wait for it to be retrieved resolvedFuture.whenComplete((resolved, throwable) -> { if (throwable != null ) { - session.getGeyser().getLogger().debug("Failed resolving profile of player head at: " + blockPosition + " " + javaNbt); - if (GeyserImpl.getInstance().config().debugMode()) { - throwable.printStackTrace(); - } + GeyserLogger.get().debug("Failed resolving profile of player head at: " + blockPosition + " " + javaNbt, throwable); return; } session.ensureInEventLoop(() -> putSkull(session, blockPosition, resolved, blockState)); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBookEditTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBookEditTranslator.java index 252905660e8..dcd725059b7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBookEditTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBookEditTranslator.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.translator.protocol.bedrock; import org.cloudburstmc.protocol.bedrock.packet.BookEditPacket; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.type.WrittenBookItem; import org.geysermc.geyser.session.GeyserSession; @@ -50,7 +51,7 @@ public class BedrockBookEditTranslator extends PacketTranslator @Override public void translate(GeyserSession session, BookEditPacket packet) { if (packet.getText() != null && !packet.getText().isEmpty() && packet.getText().length() > WrittenBookItem.MAXIMUM_PAGE_EDIT_LENGTH) { - session.getGeyser().getLogger().warning("Page length greater than server allowed!"); + GeyserLogger.get().warning("Page length greater than server allowed!"); return; } @@ -69,7 +70,7 @@ public void translate(GeyserSession session, BookEditPacket packet) { int page = packet.getPageNumber(); if (page < 0 || WrittenBookItem.MAXIMUM_PAGE_COUNT <= page) { - session.getGeyser().getLogger().warning("Edited page is out of acceptable bounds!"); + GeyserLogger.get().warning("Edited page is out of acceptable bounds!"); return; } switch (packet.getAction()) { @@ -139,7 +140,7 @@ public void translate(GeyserSession session, BookEditPacket packet) { // Add title to packet so the server knows we're signing title = MessageTranslator.convertIncomingToPlainText(packet.getTitle()); if (title.length() > WrittenBookItem.MAXIMUM_TITLE_LENGTH) { - session.getGeyser().getLogger().warning("Book title larger than server allows!"); + GeyserLogger.get().warning("Book title larger than server allows!"); return; } } else { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockContainerCloseTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockContainerCloseTranslator.java index e3b2274f041..dffa0d1ef34 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockContainerCloseTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockContainerCloseTranslator.java @@ -28,6 +28,7 @@ import java.util.concurrent.TimeUnit; import org.cloudburstmc.protocol.bedrock.packet.ContainerClosePacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.InventoryHolder; import org.geysermc.geyser.session.GeyserSession; @@ -41,7 +42,7 @@ public class BedrockContainerCloseTranslator extends PacketTranslator { InventoryUtils.scheduleInventoryOpen(session); - GeyserImpl.getInstance().getLogger().debug(session, "Unable to open a virtual inventory, sent another latency packet!"); + GeyserLogger.get().debug(session, "Unable to open a virtual inventory, sent another latency packet!"); }, 150, TimeUnit.MILLISECONDS); return; } else { - GeyserImpl.getInstance().getLogger().warning(session.bedrockUsername() + " exceeded 7 attempts to open a virtual inventory!"); - GeyserImpl.getInstance().getLogger().debug(session, packet + " " + holder.inventory().getClass().getSimpleName()); + GeyserLogger.get().warning(session.bedrockUsername() + " exceeded 7 attempts to open a virtual inventory!"); + GeyserLogger.get().debug(session, packet + " " + holder.inventory().getClass().getSimpleName()); // Prevent inventory deadlocks by letting the code below close the inventory bedrockId = (byte) holder.bedrockId(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java index d7937805781..239f451bb7b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java @@ -43,6 +43,7 @@ import org.cloudburstmc.protocol.bedrock.packet.InventoryTransactionPacket; import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEventPacket; import org.cloudburstmc.protocol.bedrock.packet.PlaySoundPacket; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.ItemFrameEntity; @@ -576,8 +577,8 @@ private boolean isIncorrectHeldItem(GeyserSession session, InventoryTransactionP ItemDefinition heldItemId = packet.getItemInHand() == null ? ItemData.AIR.getDefinition() : packet.getItemInHand().getDefinition(); if (!expectedItem.equals(heldItemId)) { - session.getGeyser().getLogger().debug(session.bedrockUsername() + "'s held item has desynced! Expected: " + expectedItem + " Received: " + heldItemId); - session.getGeyser().getLogger().debug("Packet: " + packet); + GeyserLogger.get().debug(session.bedrockUsername() + "'s held item has desynced! Expected: " + expectedItem + " Received: " + heldItemId); + GeyserLogger.get().debug("Packet: " + packet); return true; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockLecternUpdateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockLecternUpdateTranslator.java index 11b7ea87b17..5e4522a8003 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockLecternUpdateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockLecternUpdateTranslator.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.translator.protocol.bedrock; import org.cloudburstmc.protocol.bedrock.packet.LecternUpdatePacket; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.InventoryHolder; import org.geysermc.geyser.inventory.LecternContainer; import org.geysermc.geyser.session.GeyserSession; @@ -46,7 +47,7 @@ public void translate(GeyserSession session, LecternUpdatePacket packet) { // Bedrock wants to either move a page or exit InventoryHolder holder = session.getInventoryHolder(); if (holder == null || !(holder.inventory() instanceof LecternContainer lecternContainer)) { - session.getGeyser().getLogger().debug("Expected lectern but it wasn't open!"); + GeyserLogger.get().debug("Expected lectern but it wasn't open!"); return; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockNetworkStackLatencyTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockNetworkStackLatencyTranslator.java index 0bb1d113bf1..704d1d90188 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockNetworkStackLatencyTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockNetworkStackLatencyTranslator.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.translator.protocol.bedrock; import org.cloudburstmc.protocol.bedrock.packet.NetworkStackLatencyPacket; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; @@ -41,7 +42,7 @@ public void translate(GeyserSession session, NetworkStackLatencyPacket packet) { // We should receive these packets in the same order they were sent final Runnable latencyPing = session.getLatencyPingCache().poll(); if (latencyPing == null) { - session.getGeyser().getLogger().debug("Received a latency packet that we don't have a ping for: " + packet); + GeyserLogger.get().debug("Received a latency packet that we don't have a ping for: " + packet); return; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPacketViolationWarningTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPacketViolationWarningTranslator.java index 242cf94af44..910eddf9d2f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPacketViolationWarningTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPacketViolationWarningTranslator.java @@ -37,7 +37,7 @@ public class BedrockPacketViolationWarningTranslator extends PacketTranslator 300) { - session.getGeyser().getLogger().debug(ChatColor.RED + session.bedrockUsername() + " moved too quickly." + + GeyserLogger.get().debug(ChatColor.RED + session.bedrockUsername() + " moved too quickly." + " current position: " + currentPosition + ", new position: " + newPosition); return false; diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java index c0ea51f0e04..f86e58f418b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java @@ -36,6 +36,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.transaction.ItemUseTransaction; import org.cloudburstmc.protocol.bedrock.packet.AnimatePacket; import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.type.BoatEntity; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.living.animal.horse.AbstractHorseEntity; @@ -230,9 +231,9 @@ private static void processItemUseTransaction(GeyserSession session, ItemUseTran session.setLastBlockPlaced(null); session.setLastBlockPlacePosition(null); } else { - session.getGeyser().getLogger().error("Unhandled item use transaction type!"); - if (session.getGeyser().getLogger().isDebug()) { - session.getGeyser().getLogger().debug(transaction); + GeyserLogger.get().error("Unhandled item use transaction type!"); + if (GeyserLogger.get().isDebug()) { + GeyserLogger.get().debug(transaction); } } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java index e52d0581c95..11d869dd798 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java @@ -40,6 +40,7 @@ import org.cloudburstmc.protocol.bedrock.data.command.*; import org.cloudburstmc.protocol.bedrock.packet.AvailableCommandsPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.event.java.ServerDefineCommandsEvent; import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.command.CommandRegistry; @@ -124,7 +125,7 @@ public boolean equals(BedrockCommandInfo a, BedrockCommandInfo b) { public void translate(GeyserSession session, ClientboundCommandsPacket packet) { // Don't send command suggestions if they are disabled if (!session.getGeyser().config().gameplay().commandSuggestions()) { - session.getGeyser().getLogger().debug("Not sending translated command suggestions as they are disabled."); + GeyserLogger.get().debug("Not sending translated command suggestions as they are disabled."); // Send a mostly empty packet so Bedrock doesn't override /help with its own, built-in help command. AvailableCommandsPacket emptyPacket = new AvailableCommandsPacket(); @@ -249,7 +250,7 @@ public void translate(GeyserSession session, ClientboundCommandsPacket packet) { AvailableCommandsPacket availableCommandsPacket = new AvailableCommandsPacket(); availableCommandsPacket.getCommands().addAll(commandData); - session.getGeyser().getLogger().debug("Sending command packet of " + commandData.size() + " commands"); + GeyserLogger.get().debug("Sending command packet of " + commandData.size() + " commands"); // Finally, send the commands to the client session.sendUpstreamPacket(availableCommandsPacket); @@ -267,7 +268,7 @@ private static CommandOverloadData[] getParams(GeyserSession session, CommandNod // Check if the command is an alias and redirect it if (commandNode.getRedirectIndex().isPresent()) { int redirectIndex = commandNode.getRedirectIndex().getAsInt(); - GeyserImpl.getInstance().getLogger().debug("Redirecting command " + commandNode.getName() + " to " + allNodes[redirectIndex].getName()); + GeyserLogger.get().debug("Redirecting command " + commandNode.getName() + " to " + allNodes[redirectIndex].getName()); commandNode = allNodes[redirectIndex]; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java index 0e74f35f572..a43453a5adc 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java @@ -51,7 +51,7 @@ @Translator(packet = ClientboundCustomPayloadPacket.class) public class JavaCustomPayloadTranslator extends PacketTranslator { - private final GeyserLogger logger = GeyserImpl.getInstance().getLogger(); + private final GeyserLogger logger = GeyserLogger.get(); @Override public void translate(GeyserSession session, ClientboundCustomPayloadPacket packet) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java index 08d50f0d3d7..b0b29ea2411 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java @@ -30,6 +30,7 @@ import org.cloudburstmc.protocol.bedrock.packet.CraftingDataPacket; import org.cloudburstmc.protocol.bedrock.packet.UnlockedRecipesPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.recipe.GeyserRecipe; import org.geysermc.geyser.inventory.recipe.GeyserShapedRecipe; import org.geysermc.geyser.inventory.recipe.GeyserShapelessRecipe; @@ -142,7 +143,7 @@ public void translate(GeyserSession session, ClientboundRecipeBookAddPacket pack netId += recipeData.size(); } default -> { - GeyserImpl.getInstance().getLogger().debug("Ignoring unknown recipe display type! " + entry); + GeyserLogger.get().debug("Ignoring unknown recipe display type! " + entry); } } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java index eaa5ad718d9..9084eeddc42 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java @@ -39,6 +39,7 @@ import org.cloudburstmc.protocol.bedrock.packet.CraftingDataPacket; import org.cloudburstmc.protocol.bedrock.packet.TrimDataPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.recipe.GeyserRecipe; import org.geysermc.geyser.inventory.recipe.GeyserSmithingRecipe; import org.geysermc.geyser.inventory.recipe.GeyserStonecutterData; @@ -145,7 +146,7 @@ public void translate(GeyserSession session, ClientboundUpdateRecipesPacket pack craftingDataPacket.getCraftingData().add(SmithingTrimRecipeData.of(TrimRecipe.ID, TrimRecipe.BASE, TrimRecipe.ADDITION, TrimRecipe.TEMPLATE, "smithing_table", netId++)); } - session.getGeyser().getLogger().debug("Using old smithing table workaround? " + oldSmithingTable); + GeyserLogger.get().debug("Using old smithing table workaround? " + oldSmithingTable); session.setOldSmithingTable(oldSmithingTable); Int2ObjectMap> rawStonecutterData = new Int2ObjectOpenHashMap<>(); @@ -154,7 +155,7 @@ public void translate(GeyserSession session, ClientboundUpdateRecipesPacket pack for (SelectableRecipe recipe : stonecutterRecipes) { // Hardcoding the heck out of this until we see different examples of how this works. if (!(recipe.recipe() instanceof ItemStackSlotDisplay)) { - session.getGeyser().getLogger().warning("Ignoring stonecutter recipe for weird output: " + recipe); + GeyserLogger.get().warning("Ignoring stonecutter recipe for weird output: " + recipe); continue; } @@ -213,7 +214,7 @@ private ItemDescriptorWithCount getDescriptorFromId(GeyserSession session, Strin if (bedrockDefinition != null) { return ItemDescriptorWithCount.fromItem(ItemData.builder().definition(bedrockDefinition).count(1).build()); } - GeyserImpl.getInstance().getLogger().debug("Unable to find item with identifier " + bedrockId); + GeyserLogger.get().debug("Unable to find item with identifier " + bedrockId); return ItemDescriptorWithCount.EMPTY; } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAddEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAddEntityTranslator.java index b1b20f6a801..fc584adee7c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAddEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAddEntityTranslator.java @@ -27,6 +27,7 @@ import org.cloudburstmc.math.vector.Vector3f; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.spawn.EntitySpawnContext; import org.geysermc.geyser.entity.type.Entity; @@ -58,7 +59,7 @@ public class JavaAddEntityTranslator extends PacketTranslator definition = Registries.ENTITY_DEFINITIONS.get(packet.getType()); if (definition == null) { - session.getGeyser().getLogger().debug("Could not find an entity definition with type " + packet.getType()); + GeyserLogger.get().debug("Could not find an entity definition with type " + packet.getType()); return; } @@ -83,7 +84,7 @@ public void translate(GeyserSession session, ClientboundAddEntityPacket packet) entity = session.getEntityCache().getPlayerEntity(packet.getUuid()); if (entity == null) { if (SHOW_PLAYER_LIST_LOGS) { - GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.entity.player.failed_list", packet.getUuid())); + GeyserLogger.get().error(GeyserLocale.getLocaleStringLog("geyser.entity.player.failed_list", packet.getUuid())); } return; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAnimateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAnimateTranslator.java index 4bb653a3c5e..0cd37be91df 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAnimateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAnimateTranslator.java @@ -31,6 +31,7 @@ import org.cloudburstmc.protocol.bedrock.packet.AnimatePacket; import org.cloudburstmc.protocol.bedrock.packet.EntityEventPacket; import org.cloudburstmc.protocol.bedrock.packet.SpawnParticleEffectPacket; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.LivingEntity; import org.geysermc.geyser.session.GeyserSession; @@ -110,7 +111,7 @@ public void translate(GeyserSession session, ClientboundAnimatePacket packet) { animatePacket.setAction(AnimatePacket.Action.WAKE_UP); } default -> { - session.getGeyser().getLogger().debug("Unhandled java animation: " + animation); + GeyserLogger.get().debug("Unhandled java animation: " + animation); return; } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java index 9521e11c6d5..75838eb1716 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java @@ -39,6 +39,7 @@ import org.cloudburstmc.protocol.bedrock.packet.SetEntityDataPacket; import org.cloudburstmc.protocol.bedrock.packet.SetEntityMotionPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.EvokerFangsEntity; @@ -267,7 +268,7 @@ public void translate(GeyserSession session, ClientboundEntityEventPacket packet livingEntity.updateMainHand(); livingEntity.updateOffHand(); } else { - session.getGeyser().getLogger().debug("Got status message to swap hands for a non-living entity."); + GeyserLogger.get().debug("Got status message to swap hands for a non-living entity."); } return; case GOAT_LOWERING_HEAD: @@ -311,7 +312,7 @@ public void translate(GeyserSession session, ClientboundEntityEventPacket packet // unused, but spams a bit break; default: - GeyserImpl.getInstance().getLogger().debug("unhandled entity event: " + packet); + GeyserLogger.get().debug("unhandled entity event: " + packet); } if (entityEventPacket.getType() != null) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityDataTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityDataTranslator.java index 44ab214aab4..841721980c5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityDataTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityDataTranslator.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.protocol.java.entity; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.session.GeyserSession; @@ -45,10 +46,10 @@ public void translate(GeyserSession session, ClientboundSetEntityDataPacket pack EntityDefinition definition = entity.getDefinition(); for (EntityMetadata metadata : packet.getMetadata()) { if (metadata.getId() >= definition.translators().size()) { - if (session.getGeyser().config().debugMode()) { + if (GeyserLogger.get().isDebug()) { // Minecraft client just ignores these - session.getGeyser().getLogger().warning("Metadata ID " + metadata.getId() + " is out of bounds of known entity metadata size " + definition.translators().size() + " for entity type " + entity.getDefinition().entityType()); - session.getGeyser().getLogger().debug(metadata.toString()); + GeyserLogger.get().warning("Metadata ID " + metadata.getId() + " is out of bounds of known entity metadata size " + definition.translators().size() + " for entity type " + entity.getDefinition().entityType()); + GeyserLogger.get().debug(metadata.toString()); } continue; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java index 0ac7a7ba327..ed9eef3c0af 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.protocol.java.entity; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.LivingEntity; import org.geysermc.geyser.entity.type.player.PlayerEntity; @@ -49,7 +50,7 @@ public void translate(GeyserSession session, ClientboundSetEquipmentPacket packe return; if (!(entity instanceof LivingEntity livingEntity)) { - session.getGeyser().getLogger().debug("Attempted to add armor to a non-living entity (" + + GeyserLogger.get().debug("Attempted to add armor to a non-living entity (" + entity.getDefinition().identifier() + ")."); return; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoUpdateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoUpdateTranslator.java index a92f616b651..a6b757d2250 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoUpdateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoUpdateTranslator.java @@ -27,6 +27,7 @@ import org.cloudburstmc.protocol.bedrock.packet.PlayerListPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.spawn.EntitySpawnContext; import org.geysermc.geyser.entity.type.player.PlayerEntity; @@ -59,7 +60,7 @@ public void translate(GeyserSession session, ClientboundPlayerInfoUpdatePacket p if (profile == null) { // Should never be null for the ADD_PLAYER case // 1.21.11 client NPEs here - GeyserImpl.getInstance().getLogger().debug("Received a null profile in a player info update packet!"); + GeyserLogger.get().debug("Received a null profile in a player info update packet!"); continue; } @@ -71,7 +72,7 @@ public void translate(GeyserSession session, ClientboundPlayerInfoUpdatePacket p // Entity is ourself! playerEntity = session.getPlayerEntity(); playerEntity.setUsername(profile.getName()); - playerEntity.setSkin(profile, () -> GeyserImpl.getInstance().getLogger().debug("Loaded Local Bedrock Java Skin Data for " + session.getClientData().getUsername())); + playerEntity.setSkin(profile, () -> GeyserLogger.get().debug("Loaded Local Bedrock Java Skin Data for " + session.getClientData().getUsername())); } else { // It's a new player playerEntity = new PlayerEntity(EntitySpawnContext.DUMMY_CONTEXT.apply(session, id, EntityDefinitions.PLAYER), profile); @@ -87,7 +88,7 @@ public void translate(GeyserSession session, ClientboundPlayerInfoUpdatePacket p for (PlayerListEntry entry : packet.getEntries()) { PlayerEntity entity = session.getEntityCache().getPlayerEntity(entry.getProfileId()); if (entity == null) { - session.getGeyser().getLogger().debug("Ignoring player info update for " + entry.getProfileId()); + GeyserLogger.get().debug("Ignoring player info update for " + entry.getProfileId()); continue; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java index 47729161619..137822b9bc1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java @@ -31,6 +31,7 @@ import org.cloudburstmc.protocol.bedrock.packet.MovePlayerPacket; import org.cloudburstmc.protocol.bedrock.packet.RespawnPacket; import org.cloudburstmc.protocol.bedrock.packet.SetEntityMotionPacket; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.TeleportCache; @@ -114,13 +115,11 @@ public void translate(GeyserSession session, ClientboundPlayerPositionPacket pac ChunkUtils.updateChunkPosition(session, entityPosition.toInt()); - if (session.getGeyser().config().debugMode()) { - session.getGeyser().getLogger().debug("Spawned player at " + packet.getPosition()); - } + GeyserLogger.get().debug("Spawned player at " + packet.getPosition()); return; } - session.getGeyser().getLogger().debug("Teleport (" + teleportId + ") from " + entity.position()); + GeyserLogger.get().debug("Teleport (" + teleportId + ") from " + entity.position()); Vector3f lastPlayerPosition = entity.position(); float lastPlayerPitch = entity.getPitch(); @@ -158,7 +157,7 @@ public void translate(GeyserSession session, ClientboundPlayerPositionPacket pac session.sendUpstreamPacket(entityMotionPacket); } - session.getGeyser().getLogger().debug("to " + entity.position()); + GeyserLogger.get().debug("to " + entity.position()); } private void acceptTeleport(GeyserSession session, Vector3d position, float yaw, float pitch, int id) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetContentTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetContentTranslator.java index 45aaf3d47ea..cba14d15f18 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetContentTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetContentTranslator.java @@ -50,7 +50,7 @@ public void translate(GeyserSession session, ClientboundContainerSetContentPacke int inventorySize = inventory.getSize(); for (int i = 0; i < packet.getItems().length; i++) { if (i >= inventorySize) { - GeyserLogger logger = session.getGeyser().getLogger(); + GeyserLogger logger = GeyserLogger.get(); logger.warning("ClientboundContainerSetContentPacket sent to " + session.bedrockUsername() + " that exceeds inventory size!"); if (logger.isDebug()) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java index 6d14e174514..16911e78e2d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java @@ -65,7 +65,7 @@ public void translate(GeyserSession session, ClientboundContainerSetSlotPacket p Inventory inventory = holder.inventory(); int slot = packet.getSlot(); if (slot < 0 || slot >= inventory.getSize()) { - GeyserLogger logger = session.getGeyser().getLogger(); + GeyserLogger logger = GeyserLogger.get(); logger.warning("Slot of ClientboundContainerSetSlotPacket sent to " + session.bedrockUsername() + " is out of bounds! Was: " + slot + " for container: " + packet.getContainerId()); if (logger.isDebug()) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaOpenScreenTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaOpenScreenTranslator.java index 69ae14b5581..0c435b61918 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaOpenScreenTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaOpenScreenTranslator.java @@ -27,6 +27,7 @@ import net.kyori.adventure.text.Component; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.InventoryHolder; import org.geysermc.geyser.session.GeyserSession; @@ -47,7 +48,7 @@ public class JavaOpenScreenTranslator extends PacketTranslator= session.getPlayerInventory().getSize()) { - GeyserLogger logger = session.getGeyser().getLogger(); + GeyserLogger logger = GeyserLogger.get(); logger.warning("ClientboundSetPlayerInventoryPacket sent to " + session.bedrockUsername() + " that exceeds inventory size!"); if (logger.isDebug()) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java index f1deb81c83a..a7f24e8923e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java @@ -31,6 +31,7 @@ import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.protocol.bedrock.packet.BlockEntityDataPacket; import org.cloudburstmc.protocol.bedrock.packet.BlockEventPacket; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.level.block.Blocks; import org.geysermc.geyser.level.block.property.Properties; @@ -63,7 +64,7 @@ public void translate(GeyserSession session, ClientboundBlockEventPacket packet) BlockValue value = packet.getValue(); if (value == null) { - session.getGeyser().getLogger().debug("Unable to handle packet %s - null value! ".formatted(packet.toString())); + GeyserLogger.get().debug("Unable to handle packet %s - null value! ".formatted(packet.toString())); return; } @@ -164,8 +165,8 @@ public void translate(GeyserSession session, ClientboundBlockEventPacket packet) blockEntityPacket.setData(builder.build()); session.sendUpstreamPacket(blockEntityPacket); }); - } else if (session.getGeyser().getLogger().isDebug()) { - session.getGeyser().getLogger().debug("Unhandled block event packet: " + packet); + } else if (GeyserLogger.get().isDebug()) { + GeyserLogger.get().debug("Unhandled block event packet: " + packet); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index 861c50deb9d..b88fbd6b896 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -39,6 +39,7 @@ import org.cloudburstmc.nbt.NbtUtils; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.cloudburstmc.protocol.bedrock.packet.LevelChunkPacket; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.type.ItemFrameEntity; import org.geysermc.geyser.level.BedrockDimension; import org.geysermc.geyser.level.block.type.Block; @@ -383,7 +384,7 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke levelChunkPacket.setDimension(session.getBedrockDimension().bedrockId()); session.sendUpstreamPacket(levelChunkPacket); } catch (IOException e) { - session.getGeyser().getLogger().error("IO error while encoding chunk", e); + GeyserLogger.get().error("IO error while encoding chunk", e); return; } finally { if (byteBuf != null) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java index 6c290a287d7..2862d43b2db 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java @@ -38,6 +38,7 @@ import org.cloudburstmc.protocol.bedrock.packet.StopSoundPacket; import org.cloudburstmc.protocol.bedrock.packet.TextPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.level.JukeboxSong; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.SoundMapping; @@ -446,7 +447,7 @@ public void translate(GeyserSession session, ClientboundLevelEventPacket packet) return; } default -> { - GeyserImpl.getInstance().getLogger().debug("Unhandled level event: " + packet.getEvent()); + GeyserLogger.get().debug("Unhandled level event: " + packet.getEvent()); return; } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelParticlesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelParticlesTranslator.java index 6ca6210abe8..3eb590a819a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelParticlesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelParticlesTranslator.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.protocol.java.level; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import org.geysermc.mcprotocollib.protocol.data.game.level.particle.BlockParticleData; import org.geysermc.mcprotocollib.protocol.data.game.level.particle.ColorParticleData; @@ -85,7 +86,7 @@ public void translate(GeyserSession session, ClientboundLevelParticlesPacket pac } } else { // Null is only returned when no particle of this type is found - session.getGeyser().getLogger().debug("Unhandled particle packet: " + packet); + GeyserLogger.get().debug("Unhandled particle packet: " + packet); } } @@ -153,11 +154,11 @@ public void translate(GeyserSession session, ClientboundLevelParticlesPacket pac if (entity != null) { target = entity.bedrockPosition().up(entityPositionSource.getYOffset()); } else { - session.getGeyser().getLogger().debug("Unable to find entity with Java Id: " + entityPositionSource.getEntityId() + " for vibration particle."); + GeyserLogger.get().debug("Unable to find entity with Java Id: " + entityPositionSource.getEntityId() + " for vibration particle."); return null; } } else { - session.getGeyser().getLogger().debug("Unknown position source " + data.getPositionSource() + " for vibration particle."); + GeyserLogger.get().debug("Unknown position source " + data.getPositionSource() + " for vibration particle."); return null; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaStopSoundTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaStopSoundTranslator.java index ee370d67927..23588220bcc 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaStopSoundTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaStopSoundTranslator.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.protocol.java.level; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundStopSoundPacket; import org.cloudburstmc.protocol.bedrock.packet.StopSoundPacket; import org.geysermc.geyser.session.GeyserSession; @@ -51,6 +52,6 @@ public void translate(GeyserSession session, ClientboundStopSoundPacket packet) stopSoundPacket.setStoppingAllSound(false); session.sendUpstreamPacket(stopSoundPacket); - session.getGeyser().getLogger().debug("[StopSound] Stopped " + packet.getSound() + " -> " + stopSoundPacket.getSoundName()); + GeyserLogger.get().debug("[StopSound] Stopped " + packet.getSound() + " -> " + stopSoundPacket.getSoundName()); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaResetScorePacket.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaResetScorePacket.java index 72dcd40621e..2cedbe63812 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaResetScorePacket.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaResetScorePacket.java @@ -40,7 +40,7 @@ public class JavaResetScorePacket extends PacketTranslator { private static final boolean SHOW_SCOREBOARD_LOGS = Boolean.parseBoolean(System.getProperty("Geyser.ShowScoreboardLogs", "true")); - private final GeyserLogger logger = GeyserImpl.getInstance().getLogger(); + private final GeyserLogger logger = GeyserLogger.get(); @Override public void translate(GeyserSession session, ClientboundResetScorePacket packet) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetPlayerTeamTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetPlayerTeamTranslator.java index 3a1ee63739d..4d1e9ffc43b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetPlayerTeamTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetPlayerTeamTranslator.java @@ -39,13 +39,11 @@ @Translator(packet = ClientboundSetPlayerTeamPacket.class) public class JavaSetPlayerTeamTranslator extends PacketTranslator { - private final GeyserLogger logger = GeyserImpl.getInstance().getLogger(); + private final GeyserLogger logger = GeyserLogger.get(); @Override public void translate(GeyserSession session, ClientboundSetPlayerTeamPacket packet) { - if (logger.isDebug()) { - logger.debug("Team packet " + packet.getTeamName() + " " + packet.getAction() + " " + Arrays.toString(packet.getPlayers())); - } + logger.debug("Team packet " + packet.getTeamName() + " " + packet.getAction() + " " + Arrays.toString(packet.getPlayers())); if ((packet.getAction() == TeamAction.ADD_PLAYER || packet.getAction() == TeamAction.REMOVE_PLAYER) && packet.getPlayers().length == 0) { return; diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetScoreTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetScoreTranslator.java index c7159041bea..0443b3535f0 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetScoreTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetScoreTranslator.java @@ -40,7 +40,7 @@ public class JavaSetScoreTranslator extends PacketTranslator { private static final boolean SHOW_SCOREBOARD_LOGS = Boolean.parseBoolean(System.getProperty("Geyser.ShowScoreboardLogs", "true")); - private final GeyserLogger logger = GeyserImpl.getInstance().getLogger(); + private final GeyserLogger logger = GeyserLogger.get(); @Override public void translate(GeyserSession session, ClientboundSetScorePacket packet) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/text/MessageTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/text/MessageTranslator.java index a01c6091619..58bd3b78740 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/text/MessageTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/text/MessageTranslator.java @@ -43,6 +43,7 @@ import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.protocol.bedrock.packet.TextPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.registry.JavaRegistries; import org.geysermc.geyser.text.ChatColor; @@ -277,8 +278,8 @@ private static String convertMessage(Component message, String locale, boolean a return finalLegacyString; } } catch (Exception e) { - GeyserImpl.getInstance().getLogger().debug(GSON_SERIALIZER.serialize(message)); - GeyserImpl.getInstance().getLogger().error("Failed to parse message", e); + GeyserLogger.get().debug(GSON_SERIALIZER.serialize(message)); + GeyserLogger.get().error("Failed to parse message", e); return ""; } @@ -449,8 +450,8 @@ public static void handleChatPacket(GeyserSession session, Component message, Ho withDecoration.arguments(args); textPacket.setMessage(MessageTranslator.convertMessage(withDecoration.build(), session.locale())); } else { - session.getGeyser().getLogger().debug("Likely illegal chat type detection found."); - if (session.getGeyser().config().debugMode()) { + GeyserLogger.get().debug("Likely illegal chat type detection found."); + if (GeyserLogger.get().isDebug()) { Thread.dumpStack(); } textPacket.setMessage(MessageTranslator.convertMessage(message, session.locale())); @@ -589,7 +590,7 @@ private static Component componentFromNbtTag(Object nbtTag, Style style) { } } - GeyserImpl.getInstance().getLogger().error("Expected tag to be a literal string, a list of components, or a component object with a text/translate key: " + nbtTag); + GeyserLogger.get().error("Expected tag to be a literal string, a list of components, or a component object with a text/translate key: " + nbtTag); return Component.empty(); } diff --git a/core/src/main/java/org/geysermc/geyser/util/AnnotationUtils.java b/core/src/main/java/org/geysermc/geyser/util/AnnotationUtils.java index 424e61458f1..94335ee9e56 100644 --- a/core/src/main/java/org/geysermc/geyser/util/AnnotationUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/AnnotationUtils.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.util; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import java.io.BufferedReader; import java.io.IOException; @@ -87,7 +88,7 @@ public static Set> getGeneratedClassesForAnnotation(String input) { try { return Class.forName(className); } catch (ClassNotFoundException ex) { - GeyserImpl.getInstance().getLogger().error("Failed to find class " + className, ex); + GeyserLogger.get().error("Failed to find class " + className, ex); throw new RuntimeException(ex); } }).collect(Collectors.toSet()); diff --git a/core/src/main/java/org/geysermc/geyser/util/AssetUtils.java b/core/src/main/java/org/geysermc/geyser/util/AssetUtils.java index 81f58a1a811..41098571278 100644 --- a/core/src/main/java/org/geysermc/geyser/util/AssetUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/AssetUtils.java @@ -31,6 +31,7 @@ import com.google.gson.annotations.SerializedName; import lombok.Getter; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.text.GeyserLocale; @@ -114,9 +115,9 @@ public static CompletableFuture generateAssetCache() { VersionInfo versionInfo = GeyserImpl.GSON.fromJson(WebUtils.getBody(latestInfoURL), VersionInfo.class); // Get the client jar for use when downloading the en_us locale - GeyserImpl.getInstance().getLogger().debug(versionInfo.getDownloads()); // Was previously a Jackson call for writeValueToString + GeyserLogger.get().debug(versionInfo.getDownloads()); // Was previously a Jackson call for writeValueToString CLIENT_JAR_INFO = versionInfo.getDownloads().get("client"); - GeyserImpl.getInstance().getLogger().debug(CLIENT_JAR_INFO); // Was previously a Jackson call for writeValueToString + GeyserLogger.get().debug(CLIENT_JAR_INFO); // Was previously a Jackson call for writeValueToString // Get the assets list JsonObject assets = ((JsonObject) new JsonParser().parse(WebUtils.getBody(versionInfo.getAssetIndex().getUrl()))).getAsJsonObject("objects"); @@ -133,7 +134,7 @@ public static CompletableFuture generateAssetCache() { } } catch (Exception e) { - GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.locale.fail.asset_cache", (!e.getMessage().isEmpty() ? e.getMessage() : e.getStackTrace()))); + GeyserLogger.get().error(GeyserLocale.getLocaleStringLog("geyser.locale.fail.asset_cache", (!e.getMessage().isEmpty() ? e.getMessage() : e.getStackTrace()))); } return null; }); @@ -142,7 +143,7 @@ public static CompletableFuture generateAssetCache() { public static void downloadAndRunClientJarTasks() { if (CLIENT_JAR_INFO == null) { // Likely failed to download - GeyserImpl.getInstance().getLogger().debug("Skipping en_US hash check as client jar is null."); + GeyserLogger.get().debug("Skipping en_US hash check as client jar is null."); return; } @@ -169,8 +170,8 @@ public static void downloadAndRunClientJarTasks() { try { // Let the user know we are downloading the JAR - GeyserImpl.getInstance().getLogger().info(GeyserLocale.getLocaleStringLog("geyser.locale.download.en_us")); - GeyserImpl.getInstance().getLogger().debug("Download URL: " + CLIENT_JAR_INFO.getUrl()); + GeyserLogger.get().info(GeyserLocale.getLocaleStringLog("geyser.locale.download.en_us")); + GeyserLogger.get().debug("Download URL: " + CLIENT_JAR_INFO.getUrl()); Path tmpFilePath = GeyserImpl.getInstance().getBootstrap().getConfigFolder().resolve("tmp_locale.jar"); WebUtils.downloadFile(CLIENT_JAR_INFO.getUrl(), tmpFilePath.toString()); @@ -194,9 +195,9 @@ public static void downloadAndRunClientJarTasks() { // Delete the nolonger needed client/server jar Files.delete(tmpFilePath); - GeyserImpl.getInstance().getLogger().info(GeyserLocale.getLocaleStringLog("geyser.locale.download.en_us.done")); + GeyserLogger.get().info(GeyserLocale.getLocaleStringLog("geyser.locale.download.en_us.done")); } catch (Exception e) { - GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.locale.fail.en_us"), e); + GeyserLogger.get().error(GeyserLocale.getLocaleStringLog("geyser.locale.fail.en_us"), e); } } diff --git a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java index 77458d5ee9a..54cc1ceab7b 100644 --- a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java @@ -35,6 +35,7 @@ import org.cloudburstmc.protocol.bedrock.packet.LevelChunkPacket; import org.cloudburstmc.protocol.bedrock.packet.NetworkChunkPublisherUpdatePacket; import org.cloudburstmc.protocol.bedrock.packet.UpdateBlockPacket; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.type.ItemFrameEntity; import org.geysermc.geyser.level.BedrockDimension; import org.geysermc.geyser.level.JavaDimension; @@ -223,7 +224,7 @@ public static void loadDimension(GeyserSession session) { // The constraints change depending on if the player is in the overworld or not, and if experimental height is enabled // (Ignore this for the Nether. We can't change that at the moment without the workaround. :/ ) if (SHOW_CHUNK_HEIGHT_WARNING_LOGS && (minY < bedrockDimension.minY() || (bedrockDimension.doUpperHeightWarn() && maxY > bedrockDimension.maxY()))) { - session.getGeyser().getLogger().warning(GeyserLocale.getLocaleStringLog("geyser.network.translator.chunk.out_of_bounds", + GeyserLogger.get().warning(GeyserLocale.getLocaleStringLog("geyser.network.translator.chunk.out_of_bounds", String.valueOf(bedrockDimension.minY()), String.valueOf(bedrockDimension.maxY()), session.getRegistryCache().registry(JavaRegistries.DIMENSION_TYPE).byValue(session.getDimensionType()))); diff --git a/core/src/main/java/org/geysermc/geyser/util/CodeOfConductManager.java b/core/src/main/java/org/geysermc/geyser/util/CodeOfConductManager.java index a22c6e3f4a2..1d18cb07f2d 100644 --- a/core/src/main/java/org/geysermc/geyser/util/CodeOfConductManager.java +++ b/core/src/main/java/org/geysermc/geyser/util/CodeOfConductManager.java @@ -31,6 +31,7 @@ import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.event.bedrock.SessionAcceptCodeOfConductEvent; import org.geysermc.geyser.api.event.java.ServerCodeOfConductEvent; import org.geysermc.geyser.session.GeyserSession; @@ -53,7 +54,7 @@ public class CodeOfConductManager { private CodeOfConductManager() { Path savePath = getSavePath(); if (Files.exists(savePath) && Files.isRegularFile(savePath)) { - GeyserImpl.getInstance().getLogger().debug("Loading codeofconducts.json"); + GeyserLogger.get().debug("Loading codeofconducts.json"); try (Reader reader = new FileReader(savePath.toFile())) { //noinspection deprecation - otherwise 1.16.5 doesn't work @@ -62,10 +63,10 @@ private CodeOfConductManager() { playerAcceptedCodeOfConducts.put(entry.getKey(), entry.getValue().getAsInt()); } } catch (IOException exception) { - GeyserImpl.getInstance().getLogger().error("Failed to read code of conduct cache!", exception); + GeyserLogger.get().error("Failed to read code of conduct cache!", exception); } } else { - GeyserImpl.getInstance().getLogger().debug("codeofconducts.json not found, not loading"); + GeyserLogger.get().debug("codeofconducts.json not found, not loading"); } // Save file now and every 5 minutes after @@ -97,7 +98,7 @@ public static void trySave() { public void save() { if (dirty) { - GeyserImpl.getInstance().getLogger().debug("Saving codeofconducts.json"); + GeyserLogger.get().debug("Saving codeofconducts.json"); JsonObject saved = new JsonObject(); playerAcceptedCodeOfConducts.forEach(saved::addProperty); @@ -105,7 +106,7 @@ public void save() { Files.writeString(getSavePath(), saved.toString()); dirty = false; } catch (IOException exception) { - GeyserImpl.getInstance().getLogger().error("Failed to write code of conduct cache!", exception); + GeyserLogger.get().error("Failed to write code of conduct cache!", exception); } } } diff --git a/core/src/main/java/org/geysermc/geyser/util/CpuUtils.java b/core/src/main/java/org/geysermc/geyser/util/CpuUtils.java index 2b263aa927e..6a55293a9ae 100644 --- a/core/src/main/java/org/geysermc/geyser/util/CpuUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/CpuUtils.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.util; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import java.io.File; import java.io.InputStream; @@ -47,11 +48,11 @@ public static String tryGetProcessorName() { } else if (osName.contains("mac")) { return getMacProcessorName(); } else { - GeyserImpl.getInstance().getLogger().warning("Couldn't determine OS to get processor name! The OS name is " + osName); + GeyserLogger.get().warning("Couldn't determine OS to get processor name! The OS name is " + osName); return "unknown"; } } catch (Exception e) { - GeyserImpl.getInstance().getLogger().warning("Couldn't get processor name! " + e.getMessage()); + GeyserLogger.get().warning("Couldn't get processor name! " + e.getMessage()); return "unknown"; } } @@ -69,7 +70,7 @@ private static String getLinuxProcessorName() throws Exception { return splitLine[1]; } } - GeyserImpl.getInstance().getLogger().warning("Couldn't parse processor name!"); + GeyserLogger.get().warning("Couldn't parse processor name!"); return "unknown"; } @@ -93,7 +94,7 @@ private static String getWindowsProcessorName() throws Exception { int p = result.indexOf(regstrToken); if (p == -1) { - GeyserImpl.getInstance().getLogger().warning("Couldn't parse processor name!"); + GeyserLogger.get().warning("Couldn't parse processor name!"); return "unknown"; } @@ -117,7 +118,7 @@ private static String getMacProcessorName() throws Exception { if (!result.isEmpty()) { return result; } else { - GeyserImpl.getInstance().getLogger().warning("Couldn't parse processor name!"); + GeyserLogger.get().warning("Couldn't parse processor name!"); return "unknown"; } } diff --git a/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java b/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java index cbb7a2c638a..42f87d65015 100644 --- a/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java @@ -34,6 +34,7 @@ import org.cloudburstmc.protocol.bedrock.packet.MobEffectPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayerActionPacket; import org.cloudburstmc.protocol.bedrock.packet.StopSoundPacket; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.level.EffectType; import org.geysermc.geyser.level.BedrockDimension; @@ -113,7 +114,7 @@ private static void changeDimension(GeyserSession session, int bedrockDimension) // The client locks up when switching dimensions, expecting more chunks than it's getting // To solve this, we cap at 32 unless we know that the render distance actually exceeds 32 // Also, as of 1.19: PS4 crashes with a ChunkRadiusUpdatedPacket too large - session.getGeyser().getLogger().debug("Applying dimension switching workaround for Bedrock render distance of " + GeyserLogger.get().debug("Applying dimension switching workaround for Bedrock render distance of " + session.getServerRenderDistance()); ChunkRadiusUpdatedPacket chunkRadiusUpdatedPacket = new ChunkRadiusUpdatedPacket(); chunkRadiusUpdatedPacket.setRadius(32); diff --git a/core/src/main/java/org/geysermc/geyser/util/GeyserIntegratedPackUtil.java b/core/src/main/java/org/geysermc/geyser/util/GeyserIntegratedPackUtil.java index b89a2d48a2d..5a650a01bed 100644 --- a/core/src/main/java/org/geysermc/geyser/util/GeyserIntegratedPackUtil.java +++ b/core/src/main/java/org/geysermc/geyser/util/GeyserIntegratedPackUtil.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.util; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.pack.PackCodec; import org.geysermc.geyser.api.pack.PathPackCodec; import org.geysermc.geyser.api.pack.ResourcePack; @@ -65,7 +66,7 @@ default void registerGeyserPack(GeyserDefineResourcePacksEventImpl event) { Files.copy(GeyserImpl.getInstance().getBootstrap().getResourceOrThrow("GeyserIntegratedPack.mcpack"), PACK_PATH, StandardCopyOption.REPLACE_EXISTING); } catch (Exception e) { - GeyserImpl.getInstance().getLogger().error("Could not copy over Geyser integrated resource pack!", e); + GeyserLogger.get().error("Could not copy over Geyser integrated resource pack!", e); PACK_ENABLED.set(false); return; } @@ -78,7 +79,7 @@ default void registerGeyserPack(GeyserDefineResourcePacksEventImpl event) { event.registerOptions(INTEGRATED_PACK_UUID, PriorityOption.LOW); PACK_ENABLED.set(true); } catch (Exception e) { - GeyserImpl.getInstance().getLogger().error("Could not register GeyserIntegratedPack!", e); + GeyserLogger.get().error("Could not register GeyserIntegratedPack!", e); PACK_ENABLED.set(false); } } @@ -107,9 +108,9 @@ default void handleDuplicateIntegratedPack(ResourcePack duplicate) { ResourcePackManifest.Version version = duplicate.manifest().header().version(); if (duplicate.codec() instanceof UrlPackCodec) { if (Objects.equals(version, INTEGRATED_PACK_VERSION.get())) { - GeyserImpl.getInstance().getLogger().debug("Found GeyserIntegratedPack sent via UrlPackCodec (version: %s)!".formatted(version)); + GeyserLogger.get().debug("Found GeyserIntegratedPack sent via UrlPackCodec (version: %s)!".formatted(version)); } else { - GeyserImpl.getInstance().getLogger().warning("Found GeyserIntegratedPack sent via UrlPackCodec, but the version differs! " + + GeyserLogger.get().warning("Found GeyserIntegratedPack sent via UrlPackCodec, but the version differs! " + "(found: %s, expected: %s). Skipping our own, but things may not work as expected!".formatted(duplicate, INTEGRATED_PACK_VERSION.get())); } unregisterIntegratedPack(); @@ -123,14 +124,14 @@ default void handleDuplicateIntegratedPack(ResourcePack duplicate) { default void handleOptionalPack(ResourcePack pack) { // Gracefully handle optional pack presence to avoid issues if (pack.codec() instanceof UrlPackCodec) { - GeyserImpl.getInstance().getLogger().warning("Detected GeyserOptionalPack sent via the UrlPackCodec! Please migrate to sending the " + + GeyserLogger.get().warning("Detected GeyserOptionalPack sent via the UrlPackCodec! Please migrate to sending the " + "GeyserIntegratedPack instead - it will be required in the future for advanced features to work correctly!"); } else { - GeyserImpl.getInstance().getLogger().warning("Detected GeyserOptionalPack! " + + GeyserLogger.get().warning("Detected GeyserOptionalPack! " + "It should be removed " + warnMessageLocation(pack.codec()) + ", as Geyser now includes an improved version of this resource pack by default!" ); } - GeyserImpl.getInstance().getLogger().warning("Disabling the integrated pack..."); + GeyserLogger.get().warning("Disabling the integrated pack..."); unregisterIntegratedPack(); PACK_ENABLED.set(false); } diff --git a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java index c98a69efe0d..5dc9dd8a30b 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -36,6 +36,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.InventoryHolder; @@ -109,7 +110,7 @@ public static void openInventory(InventoryHolder holder) { // Handled in BedrockContainerCloseTranslator // or - client hasn't yet loaded in; wait until inventory is shown holder.pending(true); - GeyserImpl.getInstance().getLogger().debug(holder.session(), "Inventory (%s) set pending: closing inv? %s, pending inv id? %s", + GeyserLogger.get().debug(holder.session(), "Inventory (%s) set pending: closing inv? %s, pending inv id? %s", debugInventory(holder), holder.session().isClosingInventory(), holder.session().getPendingOrCurrentBedrockInventoryId()); return; } @@ -125,7 +126,7 @@ public static void openPendingInventory(GeyserSession session) { InventoryHolder holder = session.getInventoryHolder(); if (holder == null) { session.setPendingOrCurrentBedrockInventoryId(-1); - GeyserImpl.getInstance().getLogger().debug(session, "No pending inventory, not opening an inventory! Current inventory: %s", debugInventory(holder)); + GeyserLogger.get().debug(session, "No pending inventory, not opening an inventory! Current inventory: %s", debugInventory(holder)); return; } @@ -133,16 +134,16 @@ public static void openPendingInventory(GeyserSession session) { if (holder.bedrockId() == session.getPendingOrCurrentBedrockInventoryId()) { // Don't re-open an inventory that is already open if (!holder.pending() && holder.inventory().isDisplayed()) { - GeyserImpl.getInstance().getLogger().debug("Container with id %s is not pending and already displayed!".formatted(holder.bedrockId())); + GeyserLogger.get().debug("Container with id %s is not pending and already displayed!".formatted(holder.bedrockId())); return; } - GeyserImpl.getInstance().getLogger().debug(session, "Attempting to open currently delayed inventory with matching bedrock id! " + holder.bedrockId()); + GeyserLogger.get().debug(session, "Attempting to open currently delayed inventory with matching bedrock id! " + holder.bedrockId()); openAndUpdateInventory(holder); return; } - GeyserImpl.getInstance().getLogger().debug(session, "Opening current pending inventory! " + debugInventory(holder)); + GeyserLogger.get().debug(session, "Opening current pending inventory! " + debugInventory(holder)); displayInventory(holder); if (holder.inventory() instanceof MerchantContainer merchantContainer && merchantContainer.getPendingOffersPacket() != null) { JavaMerchantOffersTranslator.openMerchant(session, merchantContainer.getPendingOffersPacket(), merchantContainer); @@ -159,7 +160,7 @@ public static void displayInventory(InventoryHolder holder) { if (holder.requiresOpeningDelay()) { holder.pending(true); scheduleInventoryOpen(holder.session()); - GeyserImpl.getInstance().getLogger().debug(holder.session(), "Queuing virtual inventory (%s)", debugInventory(holder)); + GeyserLogger.get().debug(holder.session(), "Queuing virtual inventory (%s)", debugInventory(holder)); } else { openAndUpdateInventory(holder); } @@ -200,7 +201,7 @@ public static void closeInventory(GeyserSession session, InventoryHolder hold } holder.closeInventory(confirm); session.getBundleCache().onInventoryClose(holder.inventory()); - GeyserImpl.getInstance().getLogger().debug(session, "Closed inventory: (java id: %s/bedrock id: %s), waiting on confirm? %s", holder.javaId(), holder.bedrockId(), session.isClosingInventory()); + GeyserLogger.get().debug(session, "Closed inventory: (java id: %s/bedrock id: %s), waiting on confirm? %s", holder.javaId(), holder.bedrockId(), session.isClosingInventory()); } session.setInventoryHolder(null); @@ -268,7 +269,7 @@ public static void updateCursor(GeyserSession session) { } public static boolean canStack(GeyserItemStack item1, GeyserItemStack item2) { - if (GeyserImpl.getInstance().config().debugMode()) + if (GeyserLogger.get().isDebug()) canStackDebug(item1, item2); if (item1.isEmpty() || item2.isEmpty()) return false; @@ -280,10 +281,10 @@ private static void canStackDebug(GeyserItemStack item1, GeyserItemStack item2) DataComponents components2 = item2.getComponents(); if (components1 != null && components2 != null) { if (components1.hashCode() == components2.hashCode() && !components1.equals(components2)) { - GeyserImpl.getInstance().getLogger().error("DEBUG: DataComponents hash collision"); - GeyserImpl.getInstance().getLogger().error("hash: " + components1.hashCode()); - GeyserImpl.getInstance().getLogger().error("components1: " + components1); - GeyserImpl.getInstance().getLogger().error("components2: " + components2); + GeyserLogger.get().error("DEBUG: DataComponents hash collision"); + GeyserLogger.get().error("hash: " + components1.hashCode()); + GeyserLogger.get().error("components1: " + components1); + GeyserLogger.get().error("components2: " + components2); } } } @@ -324,7 +325,7 @@ private static ItemDefinition getUnusableSpaceBlockDefinition(int protocolVersio ItemDefinition itemDefinition = mappings.getDefinition(unusableSpaceBlock); if (itemDefinition == null) { - GeyserImpl.getInstance().getLogger().error("Invalid value " + unusableSpaceBlock + ". Resorting to barrier block."); + GeyserLogger.get().error("Invalid value " + unusableSpaceBlock + ". Resorting to barrier block."); return mappings.getStoredItems().barrier().getBedrockDefinition(); } else { return itemDefinition; @@ -408,7 +409,7 @@ public static boolean acceptsAsInput(GeyserSession session, SlotDisplay slotDisp } return acceptsAsInput(session, display, itemStack); } - session.getGeyser().getLogger().warning("Unknown slot display type: " + slotDisplay); + GeyserLogger.get().warning("Unknown slot display type: " + slotDisplay); return false; } diff --git a/core/src/main/java/org/geysermc/geyser/util/LoginEncryptionUtils.java b/core/src/main/java/org/geysermc/geyser/util/LoginEncryptionUtils.java index 7675c509c7f..09feb71f41d 100644 --- a/core/src/main/java/org/geysermc/geyser/util/LoginEncryptionUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/LoginEncryptionUtils.java @@ -41,6 +41,7 @@ import org.geysermc.cumulus.response.result.FormResponseResult; import org.geysermc.cumulus.response.result.ValidFormResponseResult; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.auth.AuthData; import org.geysermc.geyser.session.auth.BedrockClientData; @@ -72,7 +73,7 @@ private static void encryptConnectionWithCert(GeyserSession session, AuthPayload ChainValidationResult result = EncryptionUtils.validatePayload(authPayload); - geyser.getLogger().debug(String.format("Is player data signed? %s", result.signed())); + GeyserLogger.get().debug(String.format("Is player data signed? %s", result.signed())); if (!result.signed() && session.getGeyser().config().advanced().bedrock().validateBedrockLogin()) { session.disconnect(GeyserLocale.getLocaleStringLog("geyser.network.remote.invalid_xbox_account")); return; @@ -87,7 +88,7 @@ private static void encryptConnectionWithCert(GeyserSession session, AuthPayload } else if (authPayload instanceof CertificateChainPayload certificateChainPayload) { session.setCertChainData(certificateChainPayload.getChain()); } else { - GeyserImpl.getInstance().getLogger().warning("Unknown auth payload! Skin uploading will not work"); + GeyserLogger.get().warning("Unknown auth payload! Skin uploading will not work"); } PublicKey identityPublicKey = result.identityClaims().parsedIdentityPublicKey(); @@ -115,14 +116,13 @@ private static void encryptConnectionWithCert(GeyserSession session, AuthPayload } } session.setAuthData(new AuthData(extraData.displayName, extraData.identity, xuid, issuedAt, extraData.minecraftId)); + session.getGeyser().getDebugSessionMap().setFor(session); try { startEncryptionHandshake(session, identityPublicKey); } catch (Throwable e) { // An error can be thrown on older Java 8 versions about an invalid key - if (geyser.config().debugMode()) { - e.printStackTrace(); - } + GeyserLogger.get().debug("Error while starting encryption handshake.", e); sendEncryptionFailedMessage(geyser); } @@ -146,8 +146,8 @@ private static void startEncryptionHandshake(GeyserSession session, PublicKey ke private static void sendEncryptionFailedMessage(GeyserImpl geyser) { if (!HAS_SENT_ENCRYPTION_MESSAGE) { - geyser.getLogger().warning(GeyserLocale.getLocaleStringLog("geyser.network.encryption.line_1")); - geyser.getLogger().warning(GeyserLocale.getLocaleStringLog("geyser.network.encryption.line_2", "https://geysermc.org/supported_java")); + GeyserLogger.get().warning(GeyserLocale.getLocaleStringLog("geyser.network.encryption.line_1")); + GeyserLogger.get().warning(GeyserLocale.getLocaleStringLog("geyser.network.encryption.line_2", "https://geysermc.org/supported_java")); HAS_SENT_ENCRYPTION_MESSAGE = true; } } diff --git a/core/src/main/java/org/geysermc/geyser/util/NewsHandler.java b/core/src/main/java/org/geysermc/geyser/util/NewsHandler.java index a2eda834d2b..f3f1740c0ff 100644 --- a/core/src/main/java/org/geysermc/geyser/util/NewsHandler.java +++ b/core/src/main/java/org/geysermc/geyser/util/NewsHandler.java @@ -48,7 +48,7 @@ public class NewsHandler { private final ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1); - private final GeyserLogger logger = GeyserImpl.getInstance().getLogger(); + private final GeyserLogger logger = GeyserLogger.get(); private final Gson gson = new Gson(); private final Map activeNewsItems = new HashMap<>(); diff --git a/core/src/main/java/org/geysermc/geyser/util/SoundUtils.java b/core/src/main/java/org/geysermc/geyser/util/SoundUtils.java index 898899760c5..e42808a6c8b 100644 --- a/core/src/main/java/org/geysermc/geyser/util/SoundUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/SoundUtils.java @@ -34,6 +34,7 @@ import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEventPacket; import org.cloudburstmc.protocol.bedrock.packet.PlaySoundPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.Registries; @@ -71,7 +72,7 @@ public static String translatePlaySound(String javaIdentifier) { SoundMapping soundMapping = Registries.SOUNDS.get(soundIdentifier); if (soundMapping == null || soundMapping.playsound() == null) { // no mapping - GeyserImpl.getInstance().getLogger().debug("[PlaySound] Defaulting to sound server gave us for " + javaIdentifier); + GeyserLogger.get().debug("[PlaySound] Defaulting to sound server gave us for " + javaIdentifier); return soundIdentifier; } return soundMapping.playsound(); @@ -107,7 +108,7 @@ public static void playSound(GeyserSession session, Sound javaSound, Vector3f po SoundMapping soundMapping = Registries.SOUNDS.get(soundIdentifier); if (soundMapping == null) { - session.getGeyser().getLogger().debug("[Builtin] Sound mapping for " + soundIdentifier + " not found; assuming custom."); + GeyserLogger.get().debug("[Builtin] Sound mapping for " + soundIdentifier + " not found; assuming custom."); playSound(session, soundIdentifier, position, volume, pitch); return; } @@ -133,7 +134,7 @@ public static void playSound(GeyserSession session, Sound javaSound, Vector3f po sound = SoundUtils.toSoundEvent(soundIdentifier); } if (sound == null) { - session.getGeyser().getLogger().debug("[Builtin] Sound for original '" + soundIdentifier + "' to mappings '" + soundMapping.bedrock() + GeyserLogger.get().debug("[Builtin] Sound for original '" + soundIdentifier + "' to mappings '" + soundMapping.bedrock() + "' was not a playable level sound, or has yet to be mapped to an enum in SoundEvent."); return; } @@ -151,7 +152,7 @@ public static void playSound(GeyserSession session, Sound javaSound, Vector3f po int javaId = BlockRegistries.JAVA_BLOCK_STATE_IDENTIFIER_TO_ID.get().getOrDefault(soundMapping.identifier(), Block.JAVA_AIR_ID); soundPacket.setExtraData(session.getBlockMappings().getBedrockBlockId(javaId)); } else { - session.getGeyser().getLogger().debug("PLACE sound mapping identifier was invalid! Please report: " + soundMapping); + GeyserLogger.get().debug("PLACE sound mapping identifier was invalid! Please report: " + soundMapping); } soundPacket.setIdentifier(":"); } else { @@ -172,7 +173,7 @@ public static String readSoundEvent(NbtMap data, String context) { soundEvent = string; } else { soundEvent = ""; - GeyserImpl.getInstance().getLogger().debug("Sound event for " + context + " was of an unexpected type! Expected string or NBT map, got " + soundEventObject); + GeyserLogger.get().debug("Sound event for " + context + " was of an unexpected type! Expected string or NBT map, got " + soundEventObject); } return soundEvent; } diff --git a/core/src/main/java/org/geysermc/geyser/util/VersionCheckUtils.java b/core/src/main/java/org/geysermc/geyser/util/VersionCheckUtils.java index 9404f659000..8c496f2e8cd 100644 --- a/core/src/main/java/org/geysermc/geyser/util/VersionCheckUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/VersionCheckUtils.java @@ -122,9 +122,9 @@ public static void checkForGeyserUpdate(Supplier recipient) .build(); sender.sendMessage(message); } catch (UnknownHostException e) { - GeyserImpl.getInstance().getLogger().error("Unable to resolve Geyser api! Cannot check for Geyser updates."); + GeyserLogger.get().error("Unable to resolve Geyser api! Cannot check for Geyser updates."); } catch (Exception e) { - GeyserImpl.getInstance().getLogger().error("Error whilst checking for Geyser update!", e); + GeyserLogger.get().error("Error whilst checking for Geyser update!", e); } }); } diff --git a/core/src/main/java/org/geysermc/geyser/util/WebUtils.java b/core/src/main/java/org/geysermc/geyser/util/WebUtils.java index 39938b00a0e..9bfb6ce9fce 100644 --- a/core/src/main/java/org/geysermc/geyser/util/WebUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/WebUtils.java @@ -142,7 +142,7 @@ public static void downloadFile(String reqURL, Path path) { */ @SuppressWarnings("ResultOfMethodCallIgnored") public static @NonNull Path downloadRemotePack(String url, boolean force) throws IOException { - GeyserLogger logger = GeyserImpl.getInstance().getLogger(); + GeyserLogger logger = GeyserLogger.get(); try { HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection(); @@ -197,7 +197,7 @@ public static void downloadFile(String reqURL, Path path) { Files.deleteIfExists(downloadLocation); } } catch (IOException e) { - GeyserImpl.getInstance().getLogger().error("Failed to read cached pack metadata! " + e); + logger.error("Failed to read cached pack metadata! " + e); packMetadata.toFile().deleteOnExit(); } } @@ -377,11 +377,9 @@ public static String postForm(String reqURL, Map fields) throws if (attr != null && attr.size() > 0) { return ((String) attr.get(0)).split(" "); } - } catch (Exception | NoClassDefFoundError ex) { // Check for a NoClassDefFoundError to prevent Android crashes - if (geyser.config().debugMode()) { - geyser.getLogger().debug("Exception while trying to find an SRV record for the remote host."); - ex.printStackTrace(); // Otherwise we can get a stack trace for any domain that doesn't have an SRV record - } + } catch (Exception ex) { + GeyserLogger.get().debug("Exception while trying to find an SRV record for the remote host.", ex); + ex.printStackTrace(); // Otherwise we can get a stack trace for any domain that doesn't have an SRV record } return null; } @@ -403,7 +401,7 @@ public static Stream getLineStream(String reqURL) { return connectionToString(con).lines(); } catch (Exception e) { - GeyserImpl.getInstance().getLogger().error("Error while trying to get a stream from " + reqURL, e); + GeyserLogger.get().error("Error while trying to get a stream from " + reqURL, e); return Stream.empty(); } } diff --git a/core/src/main/java/org/geysermc/geyser/util/metrics/ProvidedMetricsPlatform.java b/core/src/main/java/org/geysermc/geyser/util/metrics/ProvidedMetricsPlatform.java index fdafaf86b60..883d40b7b6a 100644 --- a/core/src/main/java/org/geysermc/geyser/util/metrics/ProvidedMetricsPlatform.java +++ b/core/src/main/java/org/geysermc/geyser/util/metrics/ProvidedMetricsPlatform.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.util.metrics; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; public final class ProvidedMetricsPlatform implements MetricsPlatform { @@ -41,16 +42,16 @@ public String serverUuid() { @Override public boolean logFailedRequests() { - return GeyserImpl.getInstance().config().debugMode(); + return GeyserLogger.get().isDebug(); } @Override public boolean logSentData() { - return GeyserImpl.getInstance().config().debugMode(); + return GeyserLogger.get().isDebug(); } @Override public boolean logResponseStatusText() { - return GeyserImpl.getInstance().config().debugMode(); + return GeyserLogger.get().isDebug(); } } diff --git a/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/EmptyGeyserLogger.java b/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/EmptyGeyserLogger.java index e033b7288cb..73da60a9e79 100644 --- a/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/EmptyGeyserLogger.java +++ b/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/EmptyGeyserLogger.java @@ -63,6 +63,11 @@ public void debug(String message) { } + @Override + public void debug(String message, Throwable t) { + + } + @Override public void debug(String message, Object... arguments) { diff --git a/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/GeyserMockContext.java b/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/GeyserMockContext.java index 4c646f0a7ad..e6610922df2 100644 --- a/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/GeyserMockContext.java +++ b/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/GeyserMockContext.java @@ -27,6 +27,7 @@ import org.cloudburstmc.protocol.bedrock.packet.BedrockPacket; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.configuration.GeyserConfig; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; @@ -56,10 +57,11 @@ public static void mockContext(Consumer geyserContext) { when(advancedConfig.scoreboardPacketThreshold()).thenReturn(1_000); var logger = context.storeObject(new EmptyGeyserLogger()); - when(geyserImpl.getLogger()).thenReturn(logger); - try (var geyserImplMock = mockStatic(GeyserImpl.class)) { + try (var geyserImplMock = mockStatic(GeyserImpl.class); + var geyserLoggerMock = mockStatic(GeyserLogger.class)) { geyserImplMock.when(GeyserImpl::getInstance).thenReturn(geyserImpl); + geyserLoggerMock.when(GeyserLogger::get).thenReturn(logger); geyserContext.accept(context); }