diff --git a/bootstrap/fabric/src/main/java/org/geysermc/platform/fabric/GeyserFabricMod.java b/bootstrap/fabric/src/main/java/org/geysermc/platform/fabric/GeyserFabricMod.java index 4f1eed1c9..32d383017 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/platform/fabric/GeyserFabricMod.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/platform/fabric/GeyserFabricMod.java @@ -149,11 +149,12 @@ public class GeyserFabricMod implements ModInitializer, GeyserBootstrap { // Start command building // Set just "geyser" as the help command LiteralArgumentBuilder builder = net.minecraft.server.command.CommandManager.literal("geyser") - .executes(new GeyserFabricCommandExecutor(connector, "help", !playerCommands.contains("help"))); + .executes(new GeyserFabricCommandExecutor(connector, connector.getCommandManager().getCommands().get("help"), + !playerCommands.contains("help"))); for (Map.Entry command : connector.getCommandManager().getCommands().entrySet()) { // Register all subcommands as valid builder.then(net.minecraft.server.command.CommandManager.literal( - command.getKey()).executes(new GeyserFabricCommandExecutor(connector, command.getKey(), + command.getKey()).executes(new GeyserFabricCommandExecutor(connector, command.getValue(), !playerCommands.contains(command.getKey())))); } server.getCommandManager().getDispatcher().register(builder); diff --git a/bootstrap/fabric/src/main/java/org/geysermc/platform/fabric/command/FabricCommandSender.java b/bootstrap/fabric/src/main/java/org/geysermc/platform/fabric/command/FabricCommandSender.java index 3ec548143..d49a07625 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/platform/fabric/command/FabricCommandSender.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/platform/fabric/command/FabricCommandSender.java @@ -25,8 +25,8 @@ package org.geysermc.platform.fabric.command; -import com.mojang.brigadier.exceptions.CommandSyntaxException; import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.LiteralText; import org.geysermc.connector.GeyserConnector; import org.geysermc.connector.command.CommandSender; @@ -47,20 +47,15 @@ public class FabricCommandSender implements CommandSender { @Override public void sendMessage(String message) { - try { - source.getPlayer().sendMessage(new LiteralText(message), false); - } catch (CommandSyntaxException e) { // why + if (source.getEntity() instanceof ServerPlayerEntity) { + ((ServerPlayerEntity) source.getEntity()).sendMessage(new LiteralText(message), false); + } else { GeyserConnector.getInstance().getLogger().info(ChatColor.toANSI(message + ChatColor.RESET)); } } @Override public boolean isConsole() { - try { - source.getPlayer(); - return false; - } catch (CommandSyntaxException e) { - return true; - } + return !(source.getEntity() instanceof ServerPlayerEntity); } } diff --git a/bootstrap/fabric/src/main/java/org/geysermc/platform/fabric/command/GeyserFabricCommandExecutor.java b/bootstrap/fabric/src/main/java/org/geysermc/platform/fabric/command/GeyserFabricCommandExecutor.java index 706ef9502..a8469364f 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/platform/fabric/command/GeyserFabricCommandExecutor.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/platform/fabric/command/GeyserFabricCommandExecutor.java @@ -29,22 +29,24 @@ import com.mojang.brigadier.Command; import com.mojang.brigadier.context.CommandContext; import net.minecraft.server.command.ServerCommandSource; import org.geysermc.connector.GeyserConnector; +import org.geysermc.connector.command.CommandExecutor; import org.geysermc.connector.command.GeyserCommand; +import org.geysermc.connector.common.ChatColor; +import org.geysermc.connector.network.session.GeyserSession; import org.geysermc.connector.utils.LanguageUtils; import org.geysermc.platform.fabric.GeyserFabricMod; -public class GeyserFabricCommandExecutor implements Command { +public class GeyserFabricCommandExecutor extends CommandExecutor implements Command { - private final String commandName; - private final GeyserConnector connector; + private final GeyserCommand command; /** * Whether the command requires an OP permission level of 2 or greater */ private final boolean requiresPermission; - public GeyserFabricCommandExecutor(GeyserConnector connector, String commandName, boolean requiresPermission) { - this.commandName = commandName; - this.connector = connector; + public GeyserFabricCommandExecutor(GeyserConnector connector, GeyserCommand command, boolean requiresPermission) { + super(connector); + this.command = command; this.requiresPermission = requiresPermission; } @@ -56,14 +58,19 @@ public class GeyserFabricCommandExecutor implements Command sender.sendMessage(LanguageUtils.getLocaleStringLog("geyser.bootstrap.command.permission_fail")); return 0; } - if (this.commandName.equals("reload")) { + if (this.command.getName().equals("reload")) { GeyserFabricMod.getInstance().setReloading(true); } - getCommand(commandName).execute(sender, new String[0]); + + GeyserSession session = null; + if (command.isBedrockOnly()) { + session = getGeyserSession(sender); + if (session == null) { + sender.sendMessage(ChatColor.RED + LanguageUtils.getPlayerLocaleString("geyser.bootstrap.command.bedrock_only", sender.getLocale())); + return 0; + } + } + command.execute(session, sender, new String[0]); return 0; } - - private GeyserCommand getCommand(String label) { - return connector.getCommandManager().getCommands().get(label); - } }