forked from GeyserMC/Geyser
GUI Improvements (#1462)
- Added `GeyserCommand.isExecutableOnConsole()`. If this is set to false, the command will not appear as an option in the GUI. - Added `GeyserCommand.getSubCommands()`. If not empty, the subcommand options will now appear in the GUI.
This commit is contained in:
parent
04f0318bd0
commit
a2a7e99402
6 changed files with 68 additions and 8 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -243,3 +243,4 @@ public-key.pem
|
||||||
locales/
|
locales/
|
||||||
/cache/
|
/cache/
|
||||||
/packs/
|
/packs/
|
||||||
|
/dump.json
|
|
@ -261,14 +261,30 @@ public class GeyserStandaloneGUI {
|
||||||
|
|
||||||
for (Map.Entry<String, GeyserCommand> command : geyserCommandManager.getCommands().entrySet()) {
|
for (Map.Entry<String, GeyserCommand> command : geyserCommandManager.getCommands().entrySet()) {
|
||||||
// Remove the offhand command and any alias commands to prevent duplicates in the list
|
// Remove the offhand command and any alias commands to prevent duplicates in the list
|
||||||
if ("offhand".equals(command.getValue().getName()) || command.getValue().getAliases().contains(command.getKey())) {
|
if (!command.getValue().isExecutableOnConsole() || command.getValue().getAliases().contains(command.getKey())) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the button that runs the command
|
// Create the button that runs the command
|
||||||
JMenuItem commandButton = new JMenuItem(command.getValue().getName());
|
boolean hasSubCommands = command.getValue().hasSubCommands();
|
||||||
|
// Add an extra menu if there are more commands that can be run
|
||||||
|
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) {
|
||||||
commandButton.addActionListener(e -> command.getValue().execute(geyserStandaloneLogger, new String[]{ }));
|
commandButton.addActionListener(e -> command.getValue().execute(geyserStandaloneLogger, new String[]{ }));
|
||||||
|
} else {
|
||||||
|
// Add a submenu that's the same name as the menu can't be pressed
|
||||||
|
JMenuItem otherCommandButton = new JMenuItem(command.getValue().getName());
|
||||||
|
otherCommandButton.getAccessibleContext().setAccessibleDescription(command.getValue().getDescription());
|
||||||
|
otherCommandButton.addActionListener(e -> command.getValue().execute(geyserStandaloneLogger, new String[]{ }));
|
||||||
|
commandButton.add(otherCommandButton);
|
||||||
|
// Add a menu option for all possible subcommands
|
||||||
|
for (String subCommandName : command.getValue().getSubCommands()) {
|
||||||
|
JMenuItem item = new JMenuItem(subCommandName);
|
||||||
|
item.addActionListener(e -> command.getValue().execute(geyserStandaloneLogger, new String[]{subCommandName}));
|
||||||
|
commandButton.add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
commandsMenu.add(commandButton);
|
commandsMenu.add(commandButton);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -291,7 +307,7 @@ public class GeyserStandaloneGUI {
|
||||||
playerTableModel.getDataVector().removeAllElements();
|
playerTableModel.getDataVector().removeAllElements();
|
||||||
|
|
||||||
for (GeyserSession player : GeyserConnector.getInstance().getPlayers()) {
|
for (GeyserSession player : GeyserConnector.getInstance().getPlayers()) {
|
||||||
Vector row = new Vector();
|
Vector<String> row = new Vector<>();
|
||||||
row.add(player.getSocketAddress().getHostName());
|
row.add(player.getSocketAddress().getHostName());
|
||||||
row.add(player.getPlayerEntity().getUsername());
|
row.add(player.getPlayerEntity().getUsername());
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ import lombok.RequiredArgsConstructor;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
|
@ -44,4 +45,31 @@ public abstract class GeyserCommand {
|
||||||
private List<String> aliases = new ArrayList<>();
|
private List<String> aliases = new ArrayList<>();
|
||||||
|
|
||||||
public abstract void execute(CommandSender sender, String[] args);
|
public abstract void execute(CommandSender sender, String[] args);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If false, hides the command from being shown on the Geyser Standalone GUI.
|
||||||
|
*
|
||||||
|
* @return true if the command can be run on the server console
|
||||||
|
*/
|
||||||
|
public boolean isExecutableOnConsole() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used in the GUI to know what subcommands can be run
|
||||||
|
*
|
||||||
|
* @return a list of all possible subcommands, or empty if none.
|
||||||
|
*/
|
||||||
|
public List<String> getSubCommands() {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut to {@link #getSubCommands()}{@code .isEmpty()}.
|
||||||
|
*
|
||||||
|
* @return true if there are subcommand present for this command.
|
||||||
|
*/
|
||||||
|
public boolean hasSubCommands() {
|
||||||
|
return !getSubCommands().isEmpty();
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -27,12 +27,10 @@ package org.geysermc.connector.command.defaults;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
|
|
||||||
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
|
|
||||||
import org.geysermc.connector.common.ChatColor;
|
|
||||||
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.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.utils.LanguageUtils;
|
import org.geysermc.connector.utils.LanguageUtils;
|
||||||
|
@ -40,6 +38,8 @@ import org.geysermc.connector.utils.WebUtils;
|
||||||
|
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class DumpCommand extends GeyserCommand {
|
public class DumpCommand extends GeyserCommand {
|
||||||
|
|
||||||
|
@ -130,4 +130,9 @@ public class DumpCommand extends GeyserCommand {
|
||||||
connector.getLogger().info(LanguageUtils.getLocaleStringLog("geyser.commands.dump.created", sender.getName(), uploadedDumpUrl));
|
connector.getLogger().info(LanguageUtils.getLocaleStringLog("geyser.commands.dump.created", sender.getName(), uploadedDumpUrl));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getSubCommands() {
|
||||||
|
return Arrays.asList("offline", "full");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,4 +68,9 @@ public class OffhandCommand extends GeyserCommand {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isExecutableOnConsole() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,4 +66,9 @@ public class StatisticsCommand extends GeyserCommand {
|
||||||
ClientRequestPacket clientRequestPacket = new ClientRequestPacket(ClientRequest.STATS);
|
ClientRequestPacket clientRequestPacket = new ClientRequestPacket(ClientRequest.STATS);
|
||||||
session.sendDownstreamPacket(clientRequestPacket);
|
session.sendDownstreamPacket(clientRequestPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isExecutableOnConsole() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue