Allow plugins to mutate available commands sent to the client.
This is the first unstable API being introduced and is primarily to get feedback on the system.
This commit is contained in:
@@ -26,6 +26,7 @@ dependencies {
|
||||
compile "org.slf4j:slf4j-api:${slf4jVersion}"
|
||||
compile 'com.google.inject:guice:4.2.2'
|
||||
compile "org.checkerframework:checker-qual:${checkerFrameworkVersion}"
|
||||
compile 'com.mojang:brigadier:1.0.17'
|
||||
|
||||
compile "org.spongepowered:configurate-hocon:${configurateVersion}"
|
||||
compile "org.spongepowered:configurate-yaml:${configurateVersion}"
|
||||
|
@@ -0,0 +1,37 @@
|
||||
package com.velocitypowered.api.event.command;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
import com.mojang.brigadier.tree.RootCommandNode;
|
||||
import com.velocitypowered.api.annotations.UnstableApi;
|
||||
import com.velocitypowered.api.proxy.Player;
|
||||
|
||||
/**
|
||||
* Allows plugins to modify the packet indicating commands available on the server to a
|
||||
* Minecraft 1.13+ client.
|
||||
*/
|
||||
@UnstableApi
|
||||
public class PlayerAvailableCommandsEvent {
|
||||
|
||||
private final Player player;
|
||||
private final RootCommandNode<?> rootNode;
|
||||
|
||||
/**
|
||||
* Constructs an available commands event.
|
||||
* @param player the targeted player
|
||||
* @param rootNode the Brigadier root node
|
||||
*/
|
||||
public PlayerAvailableCommandsEvent(Player player,
|
||||
RootCommandNode<?> rootNode) {
|
||||
this.player = checkNotNull(player, "player");
|
||||
this.rootNode = checkNotNull(rootNode, "rootNode");
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
public RootCommandNode<?> getRootNode() {
|
||||
return rootNode;
|
||||
}
|
||||
}
|
@@ -7,6 +7,7 @@ import com.mojang.brigadier.arguments.StringArgumentType;
|
||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||
import com.mojang.brigadier.builder.RequiredArgumentBuilder;
|
||||
import com.mojang.brigadier.tree.LiteralCommandNode;
|
||||
import com.velocitypowered.api.event.command.PlayerAvailableCommandsEvent;
|
||||
import com.velocitypowered.api.event.connection.PluginMessageEvent;
|
||||
import com.velocitypowered.api.proxy.messages.ChannelIdentifier;
|
||||
import com.velocitypowered.proxy.VelocityServer;
|
||||
@@ -175,7 +176,11 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
|
||||
.build();
|
||||
commands.getRootNode().addChild(root);
|
||||
}
|
||||
return false;
|
||||
|
||||
server.getEventManager().fire(
|
||||
new PlayerAvailableCommandsEvent(serverConn.getPlayer(), commands.getRootNode()))
|
||||
.thenAcceptAsync(event -> playerConnection.write(commands), playerConnection.eventLoop());
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Reference in New Issue
Block a user