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 ede4c1bc4..437b776a9 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
@@ -75,6 +75,33 @@ public interface GeyserConnection extends Connection, CommandSource {
*/
int protocolVersion();
+ /**
+ * Tries to open the {@code minecraft:pause_screen_additions} dialog tag. This method opens this tag the same way Java does, that is:
+ *
+ *
+ * - If there are multiple dialogs in the additions tag, the {@code minecraft:custom_options} dialog is opened to select a dialog.
+ * - If there is one dialog in the additions tag, that dialog is opened.
+ * - If there are no dialogs in the tag, but there are server links sent to the client, the {@code minecraft:server_links} dialog is opened.
+ * - If all of the above fails, no dialog is opened.
+ *
+ *
+ * This method returns {@code true} if a dialog was opened, and {@code false} otherwise.
+ */
+ boolean openPauseScreenAdditions();
+
+ /**
+ * Tries to open the {@code minecraft:quick_actions} dialog tag. This method opens this tag the same way Java does, that is:
+ *
+ *
+ * - If there are multiple dialogs in the actions tag, the {@code minecraft:quick_actions} dialog is opened to select a dialog.
+ * - If there is one dialog in the actions tag, that dialog is opened.
+ * - 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.
+ */
+ boolean openQuickActions();
+
/**
* @param javaId the Java entity ID to look up.
* @return a {@link GeyserEntity} if present in this connection's entity tracker.
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 dec837f55..057266ede 100644
--- a/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java
+++ b/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java
@@ -52,6 +52,7 @@ import org.geysermc.geyser.command.defaults.HelpCommand;
import org.geysermc.geyser.command.defaults.ListCommand;
import org.geysermc.geyser.command.defaults.OffhandCommand;
import org.geysermc.geyser.command.defaults.PingCommand;
+import org.geysermc.geyser.command.defaults.QuickActionsCommand;
import org.geysermc.geyser.command.defaults.ReloadCommand;
import org.geysermc.geyser.command.defaults.SettingsCommand;
import org.geysermc.geyser.command.defaults.StatisticsCommand;
@@ -165,6 +166,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", "Opens the custom options dialog provided by the server, if any", "geyser.command.options"));
+ registerBuiltInCommand(new QuickActionsCommand("quickactions", "Opens the quick actions dialog provided by the server, if any", "geyser.command.options"));
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 c434ac5c4..49fdd3898 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
@@ -29,13 +29,8 @@ 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;
-import org.geysermc.geyser.session.GeyserSession;
-import org.geysermc.geyser.session.cache.tags.DialogTag;
-import org.geysermc.geyser.session.dialog.BuiltInDialog;
-import org.geysermc.geyser.session.dialog.Dialog;
import org.incendo.cloud.context.CommandContext;
-import java.util.List;
import java.util.Objects;
public class CustomOptionsCommand extends GeyserCommand {
@@ -46,18 +41,8 @@ public class CustomOptionsCommand extends GeyserCommand {
@Override
public void execute(CommandContext context) {
- GeyserSession session = Objects.requireNonNull(context.sender().connection());
- List