diff --git a/api/src/main/java/org/geysermc/geyser/api/connection/GeyserConnection.java b/api/src/main/java/org/geysermc/geyser/api/connection/GeyserConnection.java index 437b776a9..aee0e5c17 100644 --- a/api/src/main/java/org/geysermc/geyser/api/connection/GeyserConnection.java +++ b/api/src/main/java/org/geysermc/geyser/api/connection/GeyserConnection.java @@ -65,6 +65,11 @@ public interface GeyserConnection extends Connection, CommandSource { */ int ping(); + /** + * @return {@code true} if the client currently has a form open. + */ + boolean hasFormOpen(); + /** * Closes the currently open form on the client. */ @@ -85,9 +90,9 @@ public interface GeyserConnection extends Connection, CommandSource { *
  • If all of the above fails, no dialog is opened.
  • * * - *

    This method returns {@code true} if a dialog was opened, and {@code false} otherwise.

    + *

    Use {@link GeyserConnection#hasFormOpen()} to check if a dialog was opened.

    */ - boolean openPauseScreenAdditions(); + void openPauseScreenAdditions(); /** * Tries to open the {@code minecraft:quick_actions} dialog tag. This method opens this tag the same way Java does, that is: @@ -98,9 +103,9 @@ public interface GeyserConnection extends Connection, CommandSource { *
  • If there are no dialogs in the tag, no dialog is opened.
  • * * - *

    This method returns {@code true} if a dialog was opened, and {@code false} otherwise.

    + *

    Use {@link GeyserConnection#hasFormOpen()} to check if a dialog was opened.

    */ - boolean openQuickActions(); + void openQuickActions(); /** * @param javaId the Java entity ID to look up. diff --git a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/ModPingPassthrough.java b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/ModPingPassthrough.java index 619bf8c97..2b2e3b736 100644 --- a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/ModPingPassthrough.java +++ b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/ModPingPassthrough.java @@ -94,7 +94,7 @@ public class ModPingPassthrough implements IGeyserPingPassthrough { } @Override - public void send(Packet packet, @org.jetbrains.annotations.Nullable ChannelFutureListener channelFutureListener, boolean bl) { + public void send(Packet packet, @Nullable ChannelFutureListener channelFutureListener, boolean bl) { if (packet instanceof ClientboundStatusResponsePacket statusResponse) { status = statusResponse.status(); } diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPingPassthrough.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPingPassthrough.java index f9cbf6a59..a61a65805 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPingPassthrough.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPingPassthrough.java @@ -107,7 +107,7 @@ public class GeyserVelocityPingPassthrough implements IGeyserPingPassthrough { @Override public HandshakeIntent getHandshakeIntent() { - return HandshakeIntent.LOGIN; + return HandshakeIntent.STATUS; } } diff --git a/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java b/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java index d91fb53ca..54fa70a5b 100644 --- a/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java @@ -169,7 +169,7 @@ public class CommandRegistry implements EventRegistrar { registerBuiltInCommand(new ConnectionTestCommand(geyser, "connectiontest", "geyser.commands.connectiontest.desc", "geyser.command.connectiontest")); registerBuiltInCommand(new PingCommand("ping", "geyser.commands.ping.desc", "geyser.command.ping")); registerBuiltInCommand(new CustomOptionsCommand("options", "geyser.commands.options.desc", "geyser.command.options")); - registerBuiltInCommand(new QuickActionsCommand("quickactions", "geyser.commands.quickactions.desc", "geyser.command.options")); + registerBuiltInCommand(new QuickActionsCommand("quickactions", "geyser.commands.quickactions.desc", "geyser.command.quickactions")); if (this.geyser.getPlatformType() == PlatformType.STANDALONE) { registerBuiltInCommand(new StopCommand(geyser, "stop", "geyser.commands.stop.desc", "geyser.command.stop")); diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/CustomOptionsCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/CustomOptionsCommand.java index eb09c7b2a..32d151da5 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/CustomOptionsCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/CustomOptionsCommand.java @@ -43,7 +43,8 @@ public class CustomOptionsCommand extends GeyserCommand { @Override public void execute(CommandContext context) { GeyserSession session = Objects.requireNonNull(context.sender().connection()); - if (!session.openPauseScreenAdditions()) { + session.openPauseScreenAdditions(); + if (!session.hasFormOpen()) { context.sender().sendMessage(GeyserLocale.getPlayerLocaleString("geyser.commands.options.fail", session.locale())); } } diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/QuickActionsCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/QuickActionsCommand.java index d4abc8a5b..07f76e62a 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/QuickActionsCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/QuickActionsCommand.java @@ -25,7 +25,6 @@ package org.geysermc.geyser.command.defaults; -import net.kyori.adventure.text.Component; import org.geysermc.geyser.api.util.TriState; import org.geysermc.geyser.command.GeyserCommand; import org.geysermc.geyser.command.GeyserCommandSource; @@ -44,7 +43,8 @@ public class QuickActionsCommand extends GeyserCommand { @Override public void execute(CommandContext context) { GeyserSession session = Objects.requireNonNull(context.sender().connection()); - if (!session.openQuickActions()) { + session.openQuickActions(); + if (!session.hasFormOpen()) { context.sender().sendMessage(GeyserLocale.getPlayerLocaleString("geyser.commands.quickactions.fail", session.locale())); } } 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 570408ca4..7c1be2619 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -1513,12 +1513,10 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { } @Override - public boolean openPauseScreenAdditions() { + public void openPauseScreenAdditions() { List additions = tagCache.get(DialogTag.PAUSE_SCREEN_ADDITIONS); if (additions.isEmpty()) { - if (serverLinks.isEmpty()) { - return false; - } else { + if (!serverLinks.isEmpty()) { dialogManager.openDialog(BuiltInDialog.SERVER_LINKS); } } else if (additions.size() == 1) { @@ -1526,20 +1524,18 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { } else { dialogManager.openDialog(BuiltInDialog.CUSTOM_OPTIONS); } - return true; } @Override - public boolean openQuickActions() { + public void openQuickActions() { List quickActions = tagCache.get(DialogTag.QUICK_ACTIONS); if (quickActions.isEmpty()) { - return false; + return; } else if (quickActions.size() == 1) { dialogManager.openDialog(quickActions.get(0)); } else { dialogManager.openDialog(BuiltInDialog.QUICK_ACTIONS); } - return true; } public void setClientRenderDistance(int clientRenderDistance) { @@ -2286,6 +2282,11 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { return upstream.getProtocolVersion(); } + @Override + public boolean hasFormOpen() { + return formCache.hasFormOpen(); + } + @Override public void closeForm() { sendUpstreamPacket(new ClientboundCloseFormPacket()); 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 4425357fe..3fadc01bd 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 @@ -64,6 +64,10 @@ public class FormCache { private final Int2ObjectMap
    forms = new Int2ObjectOpenHashMap<>(); private final GeyserSession session; + public boolean hasFormOpen() { + return !forms.isEmpty(); + } + public int addForm(Form form) { int formId = formIdCounter.getAndIncrement(); forms.put(formId, form);