Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-12-27 00:23:03 +01:00
Merge branch 'master' of https://github.com/GeyserMC/Geyser into scoreboard-changes
Dieser Commit ist enthalten in:
Commit
cbe2bf7480
@ -18,7 +18,7 @@ The ultimate goal of this project is to allow Minecraft: Bedrock Edition users t
|
|||||||
|
|
||||||
Special thanks to the DragonProxy project for being a trailblazer in protocol translation and for all the team members who have now joined us here!
|
Special thanks to the DragonProxy project for being a trailblazer in protocol translation and for all the team members who have now joined us here!
|
||||||
|
|
||||||
### Currently supporting Minecraft Bedrock v1.16.100 - v1.16.201 and Minecraft Java v1.16.4.
|
### Currently supporting Minecraft Bedrock v1.16.100 - v1.16.201 and Minecraft Java v1.16.4 - v1.16.5.
|
||||||
|
|
||||||
## Setting Up
|
## Setting Up
|
||||||
Take a look [here](https://github.com/GeyserMC/Geyser/wiki#Setup) for how to set up Geyser.
|
Take a look [here](https://github.com/GeyserMC/Geyser/wiki#Setup) for how to set up Geyser.
|
||||||
|
@ -30,7 +30,9 @@ import net.md_5.bungee.api.CommandSender;
|
|||||||
import net.md_5.bungee.api.plugin.Command;
|
import net.md_5.bungee.api.plugin.Command;
|
||||||
import net.md_5.bungee.api.plugin.TabExecutor;
|
import net.md_5.bungee.api.plugin.TabExecutor;
|
||||||
import org.geysermc.connector.GeyserConnector;
|
import org.geysermc.connector.GeyserConnector;
|
||||||
|
import org.geysermc.connector.command.CommandExecutor;
|
||||||
import org.geysermc.connector.command.GeyserCommand;
|
import org.geysermc.connector.command.GeyserCommand;
|
||||||
|
import org.geysermc.connector.network.session.GeyserSession;
|
||||||
import org.geysermc.connector.utils.LanguageUtils;
|
import org.geysermc.connector.utils.LanguageUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -38,29 +40,42 @@ import java.util.Arrays;
|
|||||||
|
|
||||||
public class GeyserBungeeCommandExecutor extends Command implements TabExecutor {
|
public class GeyserBungeeCommandExecutor extends Command implements TabExecutor {
|
||||||
|
|
||||||
|
private final CommandExecutor commandExecutor;
|
||||||
private final GeyserConnector connector;
|
private final GeyserConnector connector;
|
||||||
|
|
||||||
public GeyserBungeeCommandExecutor(GeyserConnector connector) {
|
public GeyserBungeeCommandExecutor(GeyserConnector connector) {
|
||||||
super("geyser");
|
super("geyser");
|
||||||
|
|
||||||
|
this.commandExecutor = new CommandExecutor(connector);
|
||||||
this.connector = connector;
|
this.connector = connector;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(CommandSender sender, String[] args) {
|
public void execute(CommandSender sender, String[] args) {
|
||||||
if (args.length > 0) {
|
if (args.length > 0) {
|
||||||
if (getCommand(args[0]) != null) {
|
GeyserCommand command = this.commandExecutor.getCommand(args[0]);
|
||||||
if (!sender.hasPermission(getCommand(args[0]).getPermission())) {
|
if (command != null) {
|
||||||
BungeeCommandSender commandSender = new BungeeCommandSender(sender);
|
BungeeCommandSender commandSender = new BungeeCommandSender(sender);
|
||||||
|
if (!sender.hasPermission(command.getPermission())) {
|
||||||
String message = LanguageUtils.getPlayerLocaleString("geyser.bootstrap.command.permission_fail", commandSender.getLocale());
|
String message = LanguageUtils.getPlayerLocaleString("geyser.bootstrap.command.permission_fail", commandSender.getLocale());
|
||||||
|
|
||||||
commandSender.sendMessage(ChatColor.RED + message);
|
commandSender.sendMessage(ChatColor.RED + message);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
getCommand(args[0]).execute(new BungeeCommandSender(sender), args.length > 1 ? Arrays.copyOfRange(args, 1, args.length) : new String[0]);
|
GeyserSession session = null;
|
||||||
|
if (command.isBedrockOnly()) {
|
||||||
|
session = this.commandExecutor.getGeyserSession(commandSender);
|
||||||
|
if (session == null) {
|
||||||
|
String message = LanguageUtils.getPlayerLocaleString("geyser.bootstrap.command.bedrock_only", commandSender.getLocale());
|
||||||
|
|
||||||
|
commandSender.sendMessage(ChatColor.RED + message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
command.execute(session, commandSender, args.length > 1 ? Arrays.copyOfRange(args, 1, args.length) : new String[0]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
getCommand("help").execute(new BungeeCommandSender(sender), new String[0]);
|
this.commandExecutor.getCommand("help").execute(null, new BungeeCommandSender(sender), new String[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,8 +86,4 @@ public class GeyserBungeeCommandExecutor extends Command implements TabExecutor
|
|||||||
}
|
}
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private GeyserCommand getCommand(String label) {
|
|
||||||
return connector.getCommandManager().getCommands().get(label);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -25,40 +25,51 @@
|
|||||||
|
|
||||||
package org.geysermc.platform.spigot.command;
|
package org.geysermc.platform.spigot.command;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.command.TabExecutor;
|
import org.bukkit.command.TabExecutor;
|
||||||
import org.geysermc.connector.GeyserConnector;
|
import org.geysermc.connector.GeyserConnector;
|
||||||
|
import org.geysermc.connector.command.CommandExecutor;
|
||||||
import org.geysermc.connector.command.GeyserCommand;
|
import org.geysermc.connector.command.GeyserCommand;
|
||||||
|
import org.geysermc.connector.network.session.GeyserSession;
|
||||||
import org.geysermc.connector.utils.LanguageUtils;
|
import org.geysermc.connector.utils.LanguageUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@AllArgsConstructor
|
public class GeyserSpigotCommandExecutor extends CommandExecutor implements TabExecutor {
|
||||||
public class GeyserSpigotCommandExecutor implements TabExecutor {
|
|
||||||
|
|
||||||
private final GeyserConnector connector;
|
public GeyserSpigotCommandExecutor(GeyserConnector connector) {
|
||||||
|
super(connector);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
if (args.length > 0) {
|
if (args.length > 0) {
|
||||||
if (getCommand(args[0]) != null) {
|
GeyserCommand geyserCommand = getCommand(args[0]);
|
||||||
if (!sender.hasPermission(getCommand(args[0]).getPermission())) {
|
if (geyserCommand != null) {
|
||||||
SpigotCommandSender commandSender = new SpigotCommandSender(sender);
|
SpigotCommandSender commandSender = new SpigotCommandSender(sender);
|
||||||
String message = LanguageUtils.getPlayerLocaleString("geyser.bootstrap.command.permission_fail", commandSender.getLocale());;
|
if (!sender.hasPermission(geyserCommand.getPermission())) {
|
||||||
|
String message = LanguageUtils.getPlayerLocaleString("geyser.bootstrap.command.permission_fail", commandSender.getLocale());
|
||||||
|
|
||||||
commandSender.sendMessage(ChatColor.RED + message);
|
commandSender.sendMessage(ChatColor.RED + message);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
getCommand(args[0]).execute(new SpigotCommandSender(sender), args.length > 1 ? Arrays.copyOfRange(args, 1, args.length) : new String[0]);
|
GeyserSession session = null;
|
||||||
|
if (geyserCommand.isBedrockOnly()) {
|
||||||
|
session = getGeyserSession(commandSender);
|
||||||
|
if (session == null) {
|
||||||
|
sender.sendMessage(ChatColor.RED + LanguageUtils.getPlayerLocaleString("geyser.bootstrap.command.bedrock_only", commandSender.getLocale()));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
geyserCommand.execute(session, commandSender, args.length > 1 ? Arrays.copyOfRange(args, 1, args.length) : new String[0]);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
getCommand("help").execute(new SpigotCommandSender(sender), new String[0]);
|
getCommand("help").execute(null, new SpigotCommandSender(sender), new String[0]);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -71,8 +82,4 @@ public class GeyserSpigotCommandExecutor implements TabExecutor {
|
|||||||
}
|
}
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private GeyserCommand getCommand(String label) {
|
|
||||||
return connector.getCommandManager().getCommands().get(label);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -25,10 +25,12 @@
|
|||||||
|
|
||||||
package org.geysermc.platform.sponge.command;
|
package org.geysermc.platform.sponge.command;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import org.geysermc.connector.GeyserConnector;
|
import org.geysermc.connector.GeyserConnector;
|
||||||
import org.geysermc.connector.common.ChatColor;
|
import org.geysermc.connector.command.CommandExecutor;
|
||||||
|
import org.geysermc.connector.command.CommandSender;
|
||||||
import org.geysermc.connector.command.GeyserCommand;
|
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.connector.utils.LanguageUtils;
|
||||||
import org.spongepowered.api.command.CommandCallable;
|
import org.spongepowered.api.command.CommandCallable;
|
||||||
import org.spongepowered.api.command.CommandException;
|
import org.spongepowered.api.command.CommandException;
|
||||||
@ -44,25 +46,36 @@ import java.util.Arrays;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@AllArgsConstructor
|
public class GeyserSpongeCommandExecutor extends CommandExecutor implements CommandCallable {
|
||||||
public class GeyserSpongeCommandExecutor implements CommandCallable {
|
|
||||||
|
|
||||||
private GeyserConnector connector;
|
public GeyserSpongeCommandExecutor(GeyserConnector connector) {
|
||||||
|
super(connector);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandResult process(CommandSource source, String arguments) throws CommandException {
|
public CommandResult process(CommandSource source, String arguments) {
|
||||||
String[] args = arguments.split(" ");
|
String[] args = arguments.split(" ");
|
||||||
if (args.length > 0) {
|
if (args.length > 0) {
|
||||||
if (getCommand(args[0]) != null) {
|
GeyserCommand command = getCommand(args[0]);
|
||||||
if (!source.hasPermission(getCommand(args[0]).getPermission())) {
|
if (command != null) {
|
||||||
|
CommandSender commandSender = new SpongeCommandSender(source);
|
||||||
|
if (!source.hasPermission(command.getPermission())) {
|
||||||
// Not ideal to use log here but we dont get a session
|
// Not ideal to use log here but we dont get a session
|
||||||
source.sendMessage(Text.of(ChatColor.RED + LanguageUtils.getLocaleStringLog("geyser.bootstrap.command.permission_fail")));
|
source.sendMessage(Text.of(ChatColor.RED + LanguageUtils.getLocaleStringLog("geyser.bootstrap.command.permission_fail")));
|
||||||
return CommandResult.success();
|
return CommandResult.success();
|
||||||
}
|
}
|
||||||
getCommand(args[0]).execute(new SpongeCommandSender(source), args.length > 1 ? Arrays.copyOfRange(args, 1, args.length) : new String[0]);
|
GeyserSession session = null;
|
||||||
|
if (command.isBedrockOnly()) {
|
||||||
|
session = getGeyserSession(commandSender);
|
||||||
|
if (session == null) {
|
||||||
|
source.sendMessage(Text.of(ChatColor.RED + LanguageUtils.getLocaleStringLog("geyser.bootstrap.command.bedrock_only")));
|
||||||
|
return CommandResult.success();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getCommand(args[0]).execute(session, commandSender, args.length > 1 ? Arrays.copyOfRange(args, 1, args.length) : new String[0]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
getCommand("help").execute(new SpongeCommandSender(source), new String[0]);
|
getCommand("help").execute(null, new SpongeCommandSender(source), new String[0]);
|
||||||
}
|
}
|
||||||
return CommandResult.success();
|
return CommandResult.success();
|
||||||
}
|
}
|
||||||
@ -94,8 +107,4 @@ public class GeyserSpongeCommandExecutor implements CommandCallable {
|
|||||||
public Text getUsage(CommandSource source) {
|
public Text getUsage(CommandSource source) {
|
||||||
return Text.of("/geyser help");
|
return Text.of("/geyser help");
|
||||||
}
|
}
|
||||||
|
|
||||||
private GeyserCommand getCommand(String label) {
|
|
||||||
return connector.getCommandManager().getCommands().get(label);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -271,17 +271,17 @@ public class GeyserStandaloneGUI {
|
|||||||
JMenuItem commandButton = hasSubCommands ? new JMenu(command.getValue().getName()) : new JMenuItem(command.getValue().getName());
|
JMenuItem commandButton = hasSubCommands ? new JMenu(command.getValue().getName()) : new JMenuItem(command.getValue().getName());
|
||||||
commandButton.getAccessibleContext().setAccessibleDescription(command.getValue().getDescription());
|
commandButton.getAccessibleContext().setAccessibleDescription(command.getValue().getDescription());
|
||||||
if (!hasSubCommands) {
|
if (!hasSubCommands) {
|
||||||
commandButton.addActionListener(e -> command.getValue().execute(geyserStandaloneLogger, new String[]{ }));
|
commandButton.addActionListener(e -> command.getValue().execute(null, geyserStandaloneLogger, new String[]{ }));
|
||||||
} else {
|
} else {
|
||||||
// Add a submenu that's the same name as the menu can't be pressed
|
// Add a submenu that's the same name as the menu can't be pressed
|
||||||
JMenuItem otherCommandButton = new JMenuItem(command.getValue().getName());
|
JMenuItem otherCommandButton = new JMenuItem(command.getValue().getName());
|
||||||
otherCommandButton.getAccessibleContext().setAccessibleDescription(command.getValue().getDescription());
|
otherCommandButton.getAccessibleContext().setAccessibleDescription(command.getValue().getDescription());
|
||||||
otherCommandButton.addActionListener(e -> command.getValue().execute(geyserStandaloneLogger, new String[]{ }));
|
otherCommandButton.addActionListener(e -> command.getValue().execute(null, geyserStandaloneLogger, new String[]{ }));
|
||||||
commandButton.add(otherCommandButton);
|
commandButton.add(otherCommandButton);
|
||||||
// Add a menu option for all possible subcommands
|
// Add a menu option for all possible subcommands
|
||||||
for (String subCommandName : command.getValue().getSubCommands()) {
|
for (String subCommandName : command.getValue().getSubCommands()) {
|
||||||
JMenuItem item = new JMenuItem(subCommandName);
|
JMenuItem item = new JMenuItem(subCommandName);
|
||||||
item.addActionListener(e -> command.getValue().execute(geyserStandaloneLogger, new String[]{subCommandName}));
|
item.addActionListener(e -> command.getValue().execute(null, geyserStandaloneLogger, new String[]{subCommandName}));
|
||||||
commandButton.add(item);
|
commandButton.add(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -82,8 +82,8 @@
|
|||||||
<shadedPattern>org.geysermc.platform.velocity.shaded.dom4j</shadedPattern>
|
<shadedPattern>org.geysermc.platform.velocity.shaded.dom4j</shadedPattern>
|
||||||
</relocation>
|
</relocation>
|
||||||
<relocation>
|
<relocation>
|
||||||
<pattern>net.kyori</pattern>
|
<pattern>net.kyori.adventure.text.serializer.gson.legacyimpl</pattern>
|
||||||
<shadedPattern>org.geysermc.platform.velocity.shaded.kyori</shadedPattern>
|
<shadedPattern>org.geysermc.platform.velocity.shaded.kyori.legacyimpl</shadedPattern>
|
||||||
</relocation>
|
</relocation>
|
||||||
</relocations>
|
</relocations>
|
||||||
</configuration>
|
</configuration>
|
||||||
@ -105,6 +105,13 @@
|
|||||||
<exclude>io.netty:netty-codec:*</exclude>
|
<exclude>io.netty:netty-codec:*</exclude>
|
||||||
<exclude>org.slf4j:*</exclude>
|
<exclude>org.slf4j:*</exclude>
|
||||||
<exclude>org.ow2.asm:*</exclude>
|
<exclude>org.ow2.asm:*</exclude>
|
||||||
|
<!-- Exclude all Kyori dependencies except the legacy NBT serializer -->
|
||||||
|
<exclude>net.kyori:adventure-api:*</exclude>
|
||||||
|
<exclude>net.kyori:examination-api:*</exclude>
|
||||||
|
<exclude>net.kyori:examination-string:*</exclude>
|
||||||
|
<exclude>net.kyori:adventure-text-serializer-gson:*</exclude>
|
||||||
|
<exclude>net.kyori:adventure-text-serializer-legacy:*</exclude>
|
||||||
|
<exclude>net.kyori:adventure-nbt:*</exclude>
|
||||||
</excludes>
|
</excludes>
|
||||||
</artifactSet>
|
</artifactSet>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
@ -31,11 +31,10 @@ import com.velocitypowered.api.proxy.InboundConnection;
|
|||||||
import com.velocitypowered.api.proxy.ProxyServer;
|
import com.velocitypowered.api.proxy.ProxyServer;
|
||||||
import com.velocitypowered.api.proxy.server.ServerPing;
|
import com.velocitypowered.api.proxy.server.ServerPing;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import net.kyori.text.serializer.legacy.LegacyComponentSerializer;
|
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||||
import org.geysermc.connector.common.ping.GeyserPingInfo;
|
import org.geysermc.connector.common.ping.GeyserPingInfo;
|
||||||
import org.geysermc.connector.ping.IGeyserPingPassthrough;
|
import org.geysermc.connector.ping.IGeyserPingPassthrough;
|
||||||
|
|
||||||
import java.net.Inet4Address;
|
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
@ -50,13 +49,13 @@ public class GeyserVelocityPingPassthrough implements IGeyserPingPassthrough {
|
|||||||
ProxyPingEvent event;
|
ProxyPingEvent event;
|
||||||
try {
|
try {
|
||||||
event = server.getEventManager().fire(new ProxyPingEvent(new GeyserInboundConnection(inetSocketAddress), ServerPing.builder()
|
event = server.getEventManager().fire(new ProxyPingEvent(new GeyserInboundConnection(inetSocketAddress), ServerPing.builder()
|
||||||
.description(server.getConfiguration().getMotdComponent()).onlinePlayers(server.getPlayerCount())
|
.description(server.getConfiguration().getMotd()).onlinePlayers(server.getPlayerCount())
|
||||||
.maximumPlayers(server.getConfiguration().getShowMaxPlayers()).build())).get();
|
.maximumPlayers(server.getConfiguration().getShowMaxPlayers()).build())).get();
|
||||||
} catch (ExecutionException | InterruptedException e) {
|
} catch (ExecutionException | InterruptedException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
GeyserPingInfo geyserPingInfo = new GeyserPingInfo(
|
GeyserPingInfo geyserPingInfo = new GeyserPingInfo(
|
||||||
LegacyComponentSerializer.legacy().serialize(event.getPing().getDescription(), '§'),
|
LegacyComponentSerializer.legacy('§').serialize(event.getPing().getDescriptionComponent()),
|
||||||
new GeyserPingInfo.Players(
|
new GeyserPingInfo.Players(
|
||||||
event.getPing().getPlayers().orElseThrow(IllegalStateException::new).getMax(),
|
event.getPing().getPlayers().orElseThrow(IllegalStateException::new).getMax(),
|
||||||
event.getPing().getPlayers().orElseThrow(IllegalStateException::new).getOnline()
|
event.getPing().getPlayers().orElseThrow(IllegalStateException::new).getOnline()
|
||||||
|
@ -25,37 +25,47 @@
|
|||||||
|
|
||||||
package org.geysermc.platform.velocity.command;
|
package org.geysermc.platform.velocity.command;
|
||||||
|
|
||||||
import com.velocitypowered.api.command.CommandSource;
|
|
||||||
import com.velocitypowered.api.command.SimpleCommand;
|
import com.velocitypowered.api.command.SimpleCommand;
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import org.geysermc.connector.GeyserConnector;
|
import org.geysermc.connector.GeyserConnector;
|
||||||
|
import org.geysermc.connector.command.CommandExecutor;
|
||||||
import org.geysermc.connector.command.CommandSender;
|
import org.geysermc.connector.command.CommandSender;
|
||||||
import org.geysermc.connector.command.GeyserCommand;
|
import org.geysermc.connector.command.GeyserCommand;
|
||||||
import org.geysermc.connector.common.ChatColor;
|
import org.geysermc.connector.common.ChatColor;
|
||||||
|
import org.geysermc.connector.network.session.GeyserSession;
|
||||||
import org.geysermc.connector.utils.LanguageUtils;
|
import org.geysermc.connector.utils.LanguageUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@AllArgsConstructor
|
public class GeyserVelocityCommandExecutor extends CommandExecutor implements SimpleCommand {
|
||||||
public class GeyserVelocityCommandExecutor implements SimpleCommand {
|
|
||||||
|
|
||||||
private final GeyserConnector connector;
|
public GeyserVelocityCommandExecutor(GeyserConnector connector) {
|
||||||
|
super(connector);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(Invocation invocation) {
|
public void execute(Invocation invocation) {
|
||||||
if (invocation.arguments().length > 0) {
|
if (invocation.arguments().length > 0) {
|
||||||
if (getCommand(invocation.arguments()[0]) != null) {
|
GeyserCommand command = getCommand(invocation.arguments()[0]);
|
||||||
|
if (command != null) {
|
||||||
|
CommandSender sender = new VelocityCommandSender(invocation.source());
|
||||||
if (!invocation.source().hasPermission(getCommand(invocation.arguments()[0]).getPermission())) {
|
if (!invocation.source().hasPermission(getCommand(invocation.arguments()[0]).getPermission())) {
|
||||||
CommandSender sender = new VelocityCommandSender(invocation.source());
|
|
||||||
sender.sendMessage(ChatColor.RED + LanguageUtils.getPlayerLocaleString("geyser.bootstrap.command.permission_fail", sender.getLocale()));
|
sender.sendMessage(ChatColor.RED + LanguageUtils.getPlayerLocaleString("geyser.bootstrap.command.permission_fail", sender.getLocale()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
getCommand(invocation.arguments()[0]).execute(new VelocityCommandSender(invocation.source()), invocation.arguments().length > 1 ? Arrays.copyOfRange(invocation.arguments(), 1, invocation.arguments().length) : 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
command.execute(session, sender, invocation.arguments().length > 1 ? Arrays.copyOfRange(invocation.arguments(), 1, invocation.arguments().length) : new String[0]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
getCommand("help").execute(new VelocityCommandSender(invocation.source()), new String[0]);
|
getCommand("help").execute(null, new VelocityCommandSender(invocation.source()), new String[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,8 +76,4 @@ public class GeyserVelocityCommandExecutor implements SimpleCommand {
|
|||||||
}
|
}
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private GeyserCommand getCommand(String label) {
|
|
||||||
return connector.getCommandManager().getCommands().get(label);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -86,6 +86,7 @@ public class GeyserConnector {
|
|||||||
public static final String NAME = "Geyser";
|
public static final String NAME = "Geyser";
|
||||||
public static final String GIT_VERSION = "DEV"; // A fallback for running in IDEs
|
public static final String GIT_VERSION = "DEV"; // A fallback for running in IDEs
|
||||||
public static final String VERSION = "DEV"; // A fallback for running in IDEs
|
public static final String VERSION = "DEV"; // A fallback for running in IDEs
|
||||||
|
public static final String MINECRAFT_VERSION = "1.16.4 - 1.16.5";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Oauth client ID for Microsoft authentication
|
* Oauth client ID for Microsoft authentication
|
||||||
|
@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019-2021 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.connector.command;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import org.geysermc.connector.GeyserConnector;
|
||||||
|
import org.geysermc.connector.network.session.GeyserSession;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents helper functions for listening to {@code /geyser} commands.
|
||||||
|
*/
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class CommandExecutor {
|
||||||
|
|
||||||
|
protected final GeyserConnector connector;
|
||||||
|
|
||||||
|
public GeyserCommand getCommand(String label) {
|
||||||
|
return connector.getCommandManager().getCommands().get(label);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GeyserSession getGeyserSession(CommandSender sender) {
|
||||||
|
if (sender.isConsole()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (GeyserSession session : connector.getPlayers()) {
|
||||||
|
if (sender.getName().equals(session.getPlayerEntity().getUsername())) {
|
||||||
|
return session;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -29,6 +29,7 @@ import lombok.Getter;
|
|||||||
|
|
||||||
import org.geysermc.connector.GeyserConnector;
|
import org.geysermc.connector.GeyserConnector;
|
||||||
import org.geysermc.connector.command.defaults.*;
|
import org.geysermc.connector.command.defaults.*;
|
||||||
|
import org.geysermc.connector.network.session.GeyserSession;
|
||||||
import org.geysermc.connector.utils.LanguageUtils;
|
import org.geysermc.connector.utils.LanguageUtils;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -89,7 +90,15 @@ public abstract class CommandManager {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.execute(sender, args);
|
if (sender instanceof GeyserSession) {
|
||||||
|
cmd.execute((GeyserSession) sender, sender, args);
|
||||||
|
} else {
|
||||||
|
if (!cmd.isBedrockOnly()) {
|
||||||
|
cmd.execute(null, sender, args);
|
||||||
|
} else {
|
||||||
|
connector.getLogger().error(LanguageUtils.getLocaleStringLog("geyser.bootstrap.command.bedrock_only"));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -28,7 +28,9 @@ package org.geysermc.connector.command;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
import org.geysermc.connector.network.session.GeyserSession;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -47,7 +49,7 @@ public abstract class GeyserCommand {
|
|||||||
@Setter
|
@Setter
|
||||||
private List<String> aliases = new ArrayList<>();
|
private List<String> aliases = new ArrayList<>();
|
||||||
|
|
||||||
public abstract void execute(CommandSender sender, String[] args);
|
public abstract void execute(@Nullable GeyserSession session, CommandSender sender, String[] args);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If false, hides the command from being shown on the Geyser Standalone GUI.
|
* If false, hides the command from being shown on the Geyser Standalone GUI.
|
||||||
@ -75,4 +77,13 @@ public abstract class GeyserCommand {
|
|||||||
public boolean hasSubCommands() {
|
public boolean hasSubCommands() {
|
||||||
return !getSubCommands().isEmpty();
|
return !getSubCommands().isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to send a deny message to Java players if this command can only be used by Bedrock players.
|
||||||
|
*
|
||||||
|
* @return true if this command can only be used by Bedrock players.
|
||||||
|
*/
|
||||||
|
public boolean isBedrockOnly() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
@ -34,33 +34,12 @@ import org.geysermc.connector.network.session.cache.AdvancementsCache;
|
|||||||
|
|
||||||
public class AdvancementsCommand extends GeyserCommand {
|
public class AdvancementsCommand extends GeyserCommand {
|
||||||
|
|
||||||
private final GeyserConnector connector;
|
|
||||||
|
|
||||||
public AdvancementsCommand(GeyserConnector connector, String name, String description, String permission) {
|
public AdvancementsCommand(GeyserConnector connector, String name, String description, String permission) {
|
||||||
super(name, description, permission);
|
super(name, description, permission);
|
||||||
|
|
||||||
this.connector = connector;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(CommandSender sender, String[] args) {
|
public void execute(GeyserSession session, CommandSender sender, String[] args) {
|
||||||
if (sender.isConsole()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure the sender is a Bedrock edition client
|
|
||||||
GeyserSession session = null;
|
|
||||||
if (sender instanceof GeyserSession) {
|
|
||||||
session = (GeyserSession) sender;
|
|
||||||
} else {
|
|
||||||
// Needed for Spigot - sender is not an instance of GeyserSession
|
|
||||||
for (GeyserSession otherSession : connector.getPlayers()) {
|
|
||||||
if (sender.getName().equals(otherSession.getPlayerEntity().getUsername())) {
|
|
||||||
session = otherSession;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (session == null) return;
|
if (session == null) return;
|
||||||
|
|
||||||
SimpleFormWindow window = session.getAdvancementsCache().buildMenuForm();
|
SimpleFormWindow window = session.getAdvancementsCache().buildMenuForm();
|
||||||
@ -71,4 +50,9 @@ public class AdvancementsCommand extends GeyserCommand {
|
|||||||
public boolean isExecutableOnConsole() {
|
public boolean isExecutableOnConsole() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isBedrockOnly() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@ import org.geysermc.connector.command.GeyserCommand;
|
|||||||
import org.geysermc.connector.common.ChatColor;
|
import org.geysermc.connector.common.ChatColor;
|
||||||
import org.geysermc.connector.common.serializer.AsteriskSerializer;
|
import org.geysermc.connector.common.serializer.AsteriskSerializer;
|
||||||
import org.geysermc.connector.dump.DumpInfo;
|
import org.geysermc.connector.dump.DumpInfo;
|
||||||
|
import org.geysermc.connector.network.session.GeyserSession;
|
||||||
import org.geysermc.connector.utils.LanguageUtils;
|
import org.geysermc.connector.utils.LanguageUtils;
|
||||||
import org.geysermc.connector.utils.WebUtils;
|
import org.geysermc.connector.utils.WebUtils;
|
||||||
|
|
||||||
@ -54,7 +55,7 @@ public class DumpCommand extends GeyserCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(CommandSender sender, String[] args) {
|
public void execute(GeyserSession session, CommandSender sender, String[] args) {
|
||||||
boolean showSensitive = false;
|
boolean showSensitive = false;
|
||||||
boolean offlineDump = false;
|
boolean offlineDump = false;
|
||||||
if (args.length >= 1) {
|
if (args.length >= 1) {
|
||||||
|
@ -29,6 +29,7 @@ import org.geysermc.connector.GeyserConnector;
|
|||||||
import org.geysermc.connector.command.CommandSender;
|
import org.geysermc.connector.command.CommandSender;
|
||||||
import org.geysermc.connector.command.GeyserCommand;
|
import org.geysermc.connector.command.GeyserCommand;
|
||||||
import org.geysermc.connector.common.ChatColor;
|
import org.geysermc.connector.common.ChatColor;
|
||||||
|
import org.geysermc.connector.network.session.GeyserSession;
|
||||||
import org.geysermc.connector.utils.LanguageUtils;
|
import org.geysermc.connector.utils.LanguageUtils;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@ -48,7 +49,7 @@ public class HelpCommand extends GeyserCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(CommandSender sender, String[] args) {
|
public void execute(GeyserSession session, CommandSender sender, String[] args) {
|
||||||
int page = 1;
|
int page = 1;
|
||||||
int maxPage = 1;
|
int maxPage = 1;
|
||||||
String header = LanguageUtils.getPlayerLocaleString("geyser.commands.help.header", sender.getLocale(), page, maxPage);
|
String header = LanguageUtils.getPlayerLocaleString("geyser.commands.help.header", sender.getLocale(), page, maxPage);
|
||||||
|
@ -44,7 +44,7 @@ public class ListCommand extends GeyserCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(CommandSender sender, String[] args) {
|
public void execute(GeyserSession session, CommandSender sender, String[] args) {
|
||||||
String message = "";
|
String message = "";
|
||||||
message = LanguageUtils.getPlayerLocaleString("geyser.commands.list.message", sender.getLocale(),
|
message = LanguageUtils.getPlayerLocaleString("geyser.commands.list.message", sender.getLocale(),
|
||||||
connector.getPlayers().size(),
|
connector.getPlayers().size(),
|
||||||
|
@ -45,32 +45,23 @@ public class OffhandCommand extends GeyserCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(CommandSender sender, String[] args) {
|
public void execute(GeyserSession session, CommandSender sender, String[] args) {
|
||||||
if (sender.isConsole()) {
|
if (session == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure the sender is a Bedrock edition client
|
ClientPlayerActionPacket releaseItemPacket = new ClientPlayerActionPacket(PlayerAction.SWAP_HANDS, new Position(0,0,0),
|
||||||
if (sender instanceof GeyserSession) {
|
BlockFace.DOWN);
|
||||||
GeyserSession session = (GeyserSession) sender;
|
session.sendDownstreamPacket(releaseItemPacket);
|
||||||
ClientPlayerActionPacket releaseItemPacket = new ClientPlayerActionPacket(PlayerAction.SWAP_HANDS, new Position(0,0,0),
|
|
||||||
BlockFace.DOWN);
|
|
||||||
session.sendDownstreamPacket(releaseItemPacket);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Needed for Spigot - sender is not an instance of GeyserSession
|
|
||||||
for (GeyserSession session : connector.getPlayers()) {
|
|
||||||
if (sender.getName().equals(session.getPlayerEntity().getUsername())) {
|
|
||||||
ClientPlayerActionPacket releaseItemPacket = new ClientPlayerActionPacket(PlayerAction.SWAP_HANDS, new Position(0,0,0),
|
|
||||||
BlockFace.DOWN);
|
|
||||||
session.sendDownstreamPacket(releaseItemPacket);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isExecutableOnConsole() {
|
public boolean isExecutableOnConsole() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isBedrockOnly() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ import org.geysermc.connector.utils.LanguageUtils;
|
|||||||
|
|
||||||
public class ReloadCommand extends GeyserCommand {
|
public class ReloadCommand extends GeyserCommand {
|
||||||
|
|
||||||
private GeyserConnector connector;
|
private final GeyserConnector connector;
|
||||||
|
|
||||||
public ReloadCommand(GeyserConnector connector, String name, String description, String permission) {
|
public ReloadCommand(GeyserConnector connector, String name, String description, String permission) {
|
||||||
super(name, description, permission);
|
super(name, description, permission);
|
||||||
@ -42,7 +42,7 @@ public class ReloadCommand extends GeyserCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(CommandSender sender, String[] args) {
|
public void execute(GeyserSession session, CommandSender sender, String[] args) {
|
||||||
if (!sender.isConsole() && connector.getPlatformType() == PlatformType.STANDALONE) {
|
if (!sender.isConsole() && connector.getPlatformType() == PlatformType.STANDALONE) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -51,8 +51,8 @@ public class ReloadCommand extends GeyserCommand {
|
|||||||
|
|
||||||
sender.sendMessage(message);
|
sender.sendMessage(message);
|
||||||
|
|
||||||
for (GeyserSession session : connector.getPlayers()) {
|
for (GeyserSession otherSession : connector.getPlayers()) {
|
||||||
session.disconnect(LanguageUtils.getPlayerLocaleString("geyser.commands.reload.kick", session.getLocale()));
|
otherSession.disconnect(LanguageUtils.getPlayerLocaleString("geyser.commands.reload.kick", session.getLocale()));
|
||||||
}
|
}
|
||||||
connector.reload();
|
connector.reload();
|
||||||
}
|
}
|
||||||
|
@ -33,30 +33,14 @@ import org.geysermc.connector.utils.SettingsUtils;
|
|||||||
|
|
||||||
public class SettingsCommand extends GeyserCommand {
|
public class SettingsCommand extends GeyserCommand {
|
||||||
|
|
||||||
private final GeyserConnector connector;
|
|
||||||
|
|
||||||
public SettingsCommand(GeyserConnector connector, String name, String description, String permission) {
|
public SettingsCommand(GeyserConnector connector, String name, String description, String permission) {
|
||||||
super(name, description, permission);
|
super(name, description, permission);
|
||||||
|
|
||||||
this.connector = connector;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(CommandSender sender, String[] args) {
|
public void execute(GeyserSession session, CommandSender sender, String[] args) {
|
||||||
// Make sure the sender is a Bedrock edition client
|
|
||||||
GeyserSession session = null;
|
|
||||||
if (sender instanceof GeyserSession) {
|
|
||||||
session = (GeyserSession) sender;
|
|
||||||
} else {
|
|
||||||
// Needed for Spigot - sender is not an instance of GeyserSession
|
|
||||||
for (GeyserSession otherSession : connector.getPlayers()) {
|
|
||||||
if (sender.getName().equals(otherSession.getPlayerEntity().getUsername())) {
|
|
||||||
session = otherSession;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (session == null) return;
|
if (session == null) return;
|
||||||
|
|
||||||
SettingsUtils.buildForm(session);
|
SettingsUtils.buildForm(session);
|
||||||
session.sendForm(session.getSettingsForm(), SettingsUtils.SETTINGS_FORM_ID);
|
session.sendForm(session.getSettingsForm(), SettingsUtils.SETTINGS_FORM_ID);
|
||||||
}
|
}
|
||||||
@ -65,4 +49,9 @@ public class SettingsCommand extends GeyserCommand {
|
|||||||
public boolean isExecutableOnConsole() {
|
public boolean isExecutableOnConsole() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isBedrockOnly() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,34 +34,14 @@ import org.geysermc.connector.network.session.GeyserSession;
|
|||||||
|
|
||||||
public class StatisticsCommand extends GeyserCommand {
|
public class StatisticsCommand extends GeyserCommand {
|
||||||
|
|
||||||
private final GeyserConnector connector;
|
|
||||||
|
|
||||||
public StatisticsCommand(GeyserConnector connector, String name, String description, String permission) {
|
public StatisticsCommand(GeyserConnector connector, String name, String description, String permission) {
|
||||||
super(name, description, permission);
|
super(name, description, permission);
|
||||||
|
|
||||||
this.connector = connector;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(CommandSender sender, String[] args) {
|
public void execute(GeyserSession session, CommandSender sender, String[] args) {
|
||||||
if (sender.isConsole()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure the sender is a Bedrock edition client
|
|
||||||
GeyserSession session = null;
|
|
||||||
if (sender instanceof GeyserSession) {
|
|
||||||
session = (GeyserSession) sender;
|
|
||||||
} else {
|
|
||||||
// Needed for Spigot - sender is not an instance of GeyserSession
|
|
||||||
for (GeyserSession otherSession : connector.getPlayers()) {
|
|
||||||
if (sender.getName().equals(otherSession.getPlayerEntity().getUsername())) {
|
|
||||||
session = otherSession;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (session == null) return;
|
if (session == null) return;
|
||||||
|
|
||||||
session.setWaitingForStatistics(true);
|
session.setWaitingForStatistics(true);
|
||||||
ClientRequestPacket clientRequestPacket = new ClientRequestPacket(ClientRequest.STATS);
|
ClientRequestPacket clientRequestPacket = new ClientRequestPacket(ClientRequest.STATS);
|
||||||
session.sendDownstreamPacket(clientRequestPacket);
|
session.sendDownstreamPacket(clientRequestPacket);
|
||||||
@ -71,4 +51,9 @@ public class StatisticsCommand extends GeyserCommand {
|
|||||||
public boolean isExecutableOnConsole() {
|
public boolean isExecutableOnConsole() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isBedrockOnly() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,12 +29,13 @@ import org.geysermc.common.PlatformType;
|
|||||||
import org.geysermc.connector.GeyserConnector;
|
import org.geysermc.connector.GeyserConnector;
|
||||||
import org.geysermc.connector.command.CommandSender;
|
import org.geysermc.connector.command.CommandSender;
|
||||||
import org.geysermc.connector.command.GeyserCommand;
|
import org.geysermc.connector.command.GeyserCommand;
|
||||||
|
import org.geysermc.connector.network.session.GeyserSession;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
||||||
public class StopCommand extends GeyserCommand {
|
public class StopCommand extends GeyserCommand {
|
||||||
|
|
||||||
private GeyserConnector connector;
|
private final GeyserConnector connector;
|
||||||
|
|
||||||
public StopCommand(GeyserConnector connector, String name, String description, String permission) {
|
public StopCommand(GeyserConnector connector, String name, String description, String permission) {
|
||||||
super(name, description, permission);
|
super(name, description, permission);
|
||||||
@ -44,7 +45,7 @@ public class StopCommand extends GeyserCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(CommandSender sender, String[] args) {
|
public void execute(GeyserSession session, CommandSender sender, String[] args) {
|
||||||
if (!sender.isConsole() && connector.getPlatformType() == PlatformType.STANDALONE) {
|
if (!sender.isConsole() && connector.getPlatformType() == PlatformType.STANDALONE) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,7 @@ import org.geysermc.connector.command.CommandSender;
|
|||||||
import org.geysermc.connector.command.GeyserCommand;
|
import org.geysermc.connector.command.GeyserCommand;
|
||||||
import org.geysermc.connector.common.ChatColor;
|
import org.geysermc.connector.common.ChatColor;
|
||||||
import org.geysermc.connector.network.BedrockProtocol;
|
import org.geysermc.connector.network.BedrockProtocol;
|
||||||
|
import org.geysermc.connector.network.session.GeyserSession;
|
||||||
import org.geysermc.connector.utils.FileUtils;
|
import org.geysermc.connector.utils.FileUtils;
|
||||||
import org.geysermc.connector.utils.LanguageUtils;
|
import org.geysermc.connector.utils.LanguageUtils;
|
||||||
import org.geysermc.connector.utils.WebUtils;
|
import org.geysermc.connector.utils.WebUtils;
|
||||||
@ -44,15 +45,12 @@ import java.util.Properties;
|
|||||||
|
|
||||||
public class VersionCommand extends GeyserCommand {
|
public class VersionCommand extends GeyserCommand {
|
||||||
|
|
||||||
public GeyserConnector connector;
|
|
||||||
|
|
||||||
public VersionCommand(GeyserConnector connector, String name, String description, String permission) {
|
public VersionCommand(GeyserConnector connector, String name, String description, String permission) {
|
||||||
super(name, description, permission);
|
super(name, description, permission);
|
||||||
this.connector = connector;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(CommandSender sender, String[] args) {
|
public void execute(GeyserSession session, CommandSender sender, String[] args) {
|
||||||
String bedrockVersions;
|
String bedrockVersions;
|
||||||
List<BedrockPacketCodec> supportedCodecs = BedrockProtocol.SUPPORTED_BEDROCK_CODECS;
|
List<BedrockPacketCodec> supportedCodecs = BedrockProtocol.SUPPORTED_BEDROCK_CODECS;
|
||||||
if (supportedCodecs.size() > 1) {
|
if (supportedCodecs.size() > 1) {
|
||||||
@ -61,7 +59,7 @@ public class VersionCommand extends GeyserCommand {
|
|||||||
bedrockVersions = BedrockProtocol.DEFAULT_BEDROCK_CODEC.getMinecraftVersion();
|
bedrockVersions = BedrockProtocol.DEFAULT_BEDROCK_CODEC.getMinecraftVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
sender.sendMessage(LanguageUtils.getPlayerLocaleString("geyser.commands.version.version", sender.getLocale(), GeyserConnector.NAME, GeyserConnector.VERSION, MinecraftConstants.GAME_VERSION, bedrockVersions));
|
sender.sendMessage(LanguageUtils.getPlayerLocaleString("geyser.commands.version.version", sender.getLocale(), GeyserConnector.NAME, GeyserConnector.VERSION, GeyserConnector.MINECRAFT_VERSION, bedrockVersions));
|
||||||
|
|
||||||
// Disable update checking in dev mode
|
// Disable update checking in dev mode
|
||||||
//noinspection ConstantConditions - changes in production
|
//noinspection ConstantConditions - changes in production
|
||||||
|
@ -43,7 +43,7 @@ public class BedrockCommandRequestTranslator extends PacketTranslator<CommandReq
|
|||||||
public void translate(CommandRequestPacket packet, GeyserSession session) {
|
public void translate(CommandRequestPacket packet, GeyserSession session) {
|
||||||
String command = packet.getCommand().replace("/", "");
|
String command = packet.getCommand().replace("/", "");
|
||||||
CommandManager commandManager = GeyserConnector.getInstance().getCommandManager();
|
CommandManager commandManager = GeyserConnector.getInstance().getCommandManager();
|
||||||
if (session.getConnector().getPlatformType() == PlatformType.STANDALONE && command.startsWith("geyser ") && commandManager.getCommands().containsKey(command.split(" ")[1])) {
|
if (session.getConnector().getPlatformType() == PlatformType.STANDALONE && command.trim().startsWith("geyser ") && commandManager.getCommands().containsKey(command.split(" ")[1])) {
|
||||||
commandManager.runCommand(session, command);
|
commandManager.runCommand(session, command);
|
||||||
} else {
|
} else {
|
||||||
String message = packet.getCommand().trim();
|
String message = packet.getCommand().trim();
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 8141bc6aed878a95ed9ee3ca83a2381f9906c4b4
|
Subproject commit bffb5617c1ecdacc10031c6ec36988a5f04cb5c6
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren