Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-11-20 06:50:09 +01:00
Spigot: programmatically add Geyser permissions and fix reloading
Dieser Commit ist enthalten in:
Ursprung
05e98c3a10
Commit
f38c1fbc0f
@ -32,6 +32,8 @@ import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
|
|||||||
import me.lucko.commodore.CommodoreProvider;
|
import me.lucko.commodore.CommodoreProvider;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.PluginCommand;
|
import org.bukkit.command.PluginCommand;
|
||||||
|
import org.bukkit.permissions.Permission;
|
||||||
|
import org.bukkit.permissions.PermissionDefault;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.geysermc.common.PlatformType;
|
import org.geysermc.common.PlatformType;
|
||||||
import org.geysermc.geyser.Constants;
|
import org.geysermc.geyser.Constants;
|
||||||
@ -39,6 +41,7 @@ import org.geysermc.geyser.GeyserBootstrap;
|
|||||||
import org.geysermc.geyser.GeyserImpl;
|
import org.geysermc.geyser.GeyserImpl;
|
||||||
import org.geysermc.geyser.adapters.spigot.SpigotAdapters;
|
import org.geysermc.geyser.adapters.spigot.SpigotAdapters;
|
||||||
import org.geysermc.geyser.command.CommandManager;
|
import org.geysermc.geyser.command.CommandManager;
|
||||||
|
import org.geysermc.geyser.command.GeyserCommand;
|
||||||
import org.geysermc.geyser.configuration.GeyserConfiguration;
|
import org.geysermc.geyser.configuration.GeyserConfiguration;
|
||||||
import org.geysermc.geyser.dump.BootstrapDumpInfo;
|
import org.geysermc.geyser.dump.BootstrapDumpInfo;
|
||||||
import org.geysermc.geyser.level.WorldManager;
|
import org.geysermc.geyser.level.WorldManager;
|
||||||
@ -61,10 +64,16 @@ import java.io.IOException;
|
|||||||
import java.net.SocketAddress;
|
import java.net.SocketAddress;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap {
|
public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap {
|
||||||
|
/**
|
||||||
|
* Determines if the plugin has been ran once before, including before /geyser reload.
|
||||||
|
*/
|
||||||
|
private static boolean INITIALIZED = false;
|
||||||
|
|
||||||
private GeyserSpigotCommandManager geyserCommandManager;
|
private GeyserSpigotCommandManager geyserCommandManager;
|
||||||
private GeyserSpigotConfiguration geyserConfig;
|
private GeyserSpigotConfiguration geyserConfig;
|
||||||
private GeyserSpigotInjector geyserInjector;
|
private GeyserSpigotInjector geyserInjector;
|
||||||
@ -232,14 +241,32 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap {
|
|||||||
}
|
}
|
||||||
geyserLogger.debug("Using default world manager: " + this.geyserWorldManager.getClass());
|
geyserLogger.debug("Using default world manager: " + this.geyserWorldManager.getClass());
|
||||||
}
|
}
|
||||||
GeyserSpigotBlockPlaceListener blockPlaceListener = new GeyserSpigotBlockPlaceListener(geyser, this.geyserWorldManager);
|
|
||||||
Bukkit.getServer().getPluginManager().registerEvents(blockPlaceListener, this);
|
|
||||||
|
|
||||||
Bukkit.getServer().getPluginManager().registerEvents(new GeyserPistonListener(geyser, this.geyserWorldManager), this);
|
|
||||||
|
|
||||||
PluginCommand pluginCommand = this.getCommand("geyser");
|
PluginCommand pluginCommand = this.getCommand("geyser");
|
||||||
pluginCommand.setExecutor(new GeyserSpigotCommandExecutor(geyser));
|
pluginCommand.setExecutor(new GeyserSpigotCommandExecutor(geyser));
|
||||||
|
|
||||||
|
if (!INITIALIZED) {
|
||||||
|
// Register permissions so they appear in, for example, LuckPerms' UI
|
||||||
|
// Re-registering permissions throws an error
|
||||||
|
for (Map.Entry<String, GeyserCommand> entry : geyserCommandManager.getCommands().entrySet()) {
|
||||||
|
GeyserCommand command = entry.getValue();
|
||||||
|
if (command.getAliases().contains(entry.getKey())) {
|
||||||
|
// Don't register aliases
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Bukkit.getPluginManager().addPermission(new Permission(command.getPermission(),
|
||||||
|
GeyserLocale.getLocaleStringLog(command.getDescription()),
|
||||||
|
command.isSuggestedOpOnly() ? PermissionDefault.OP : PermissionDefault.TRUE));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Events cannot be unregistered - re-registering results in duplicate firings
|
||||||
|
GeyserSpigotBlockPlaceListener blockPlaceListener = new GeyserSpigotBlockPlaceListener(geyser, this.geyserWorldManager);
|
||||||
|
Bukkit.getServer().getPluginManager().registerEvents(blockPlaceListener, this);
|
||||||
|
|
||||||
|
Bukkit.getServer().getPluginManager().registerEvents(new GeyserPistonListener(geyser, this.geyserWorldManager), this);
|
||||||
|
}
|
||||||
|
|
||||||
boolean brigadierSupported = CommodoreProvider.isSupported();
|
boolean brigadierSupported = CommodoreProvider.isSupported();
|
||||||
geyserLogger.debug("Brigadier supported? " + brigadierSupported);
|
geyserLogger.debug("Brigadier supported? " + brigadierSupported);
|
||||||
if (brigadierSupported) {
|
if (brigadierSupported) {
|
||||||
@ -248,6 +275,8 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap {
|
|||||||
|
|
||||||
// Check to ensure the current setup can support the protocol version Geyser uses
|
// Check to ensure the current setup can support the protocol version Geyser uses
|
||||||
GeyserSpigotVersionChecker.checkForSupportedProtocol(geyserLogger, isViaVersion);
|
GeyserSpigotVersionChecker.checkForSupportedProtocol(geyserLogger, isViaVersion);
|
||||||
|
|
||||||
|
INITIALIZED = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -9,34 +9,3 @@ commands:
|
|||||||
geyser:
|
geyser:
|
||||||
description: The main command for Geyser.
|
description: The main command for Geyser.
|
||||||
usage: /geyser <subcommand>
|
usage: /geyser <subcommand>
|
||||||
permissions:
|
|
||||||
geyser.command.help:
|
|
||||||
description: Shows help for all registered commands.
|
|
||||||
default: true
|
|
||||||
geyser.command.offhand:
|
|
||||||
description: Puts an items in your offhand.
|
|
||||||
default: true
|
|
||||||
geyser.command.advancements:
|
|
||||||
description: Shows the advancements of the player on the server.
|
|
||||||
default: true
|
|
||||||
geyser.command.tooltips:
|
|
||||||
description: Toggles showing advanced tooltips on your items.
|
|
||||||
default: true
|
|
||||||
geyser.command.statistics:
|
|
||||||
description: Shows the statistics of the player on the server.
|
|
||||||
default: true
|
|
||||||
geyser.command.settings:
|
|
||||||
description: Modify user settings
|
|
||||||
default: true
|
|
||||||
geyser.command.list:
|
|
||||||
description: List all players connected through Geyser.
|
|
||||||
default: op
|
|
||||||
geyser.command.dump:
|
|
||||||
description: Dumps Geyser debug information for bug reports.
|
|
||||||
default: op
|
|
||||||
geyser.command.reload:
|
|
||||||
description: Reloads the Geyser configurations. Kicks all players when used!
|
|
||||||
default: false
|
|
||||||
geyser.command.version:
|
|
||||||
description: Shows the current Geyser version and checks for updates.
|
|
||||||
default: op
|
|
||||||
|
@ -86,4 +86,13 @@ public abstract class GeyserCommand {
|
|||||||
public boolean isBedrockOnly() {
|
public boolean isBedrockOnly() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used for permission defaults on server implementations.
|
||||||
|
*
|
||||||
|
* @return if this command is designated to be used only by server operators.
|
||||||
|
*/
|
||||||
|
public boolean isSuggestedOpOnly() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
@ -145,4 +145,9 @@ public class DumpCommand extends GeyserCommand {
|
|||||||
public List<String> getSubCommands() {
|
public List<String> getSubCommands() {
|
||||||
return Arrays.asList("offline", "full", "logs");
|
return Arrays.asList("offline", "full", "logs");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSuggestedOpOnly() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,4 +51,9 @@ public class ListCommand extends GeyserCommand {
|
|||||||
|
|
||||||
sender.sendMessage(message);
|
sender.sendMessage(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSuggestedOpOnly() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -54,4 +54,9 @@ public class ReloadCommand extends GeyserCommand {
|
|||||||
geyser.getSessionManager().disconnectAll("geyser.commands.reload.kick");
|
geyser.getSessionManager().disconnectAll("geyser.commands.reload.kick");
|
||||||
geyser.reload();
|
geyser.reload();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSuggestedOpOnly() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -54,4 +54,9 @@ public class StopCommand extends GeyserCommand {
|
|||||||
|
|
||||||
geyser.getBootstrap().onDisable();
|
geyser.getBootstrap().onDisable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSuggestedOpOnly() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
@ -100,4 +100,9 @@ public class VersionCommand extends GeyserCommand {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSuggestedOpOnly() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren