CommandManager (server-wide, dispatches commands)
└── CommandRegistry (per-plugin, auto-cleanup)
└── AbstractCommand (command tree with subcommands/variants)
├── RequiredArg<T> — positional arguments
├── OptionalArg<T> — --named arguments
├── DefaultArg<T> — --named with default value
└── FlagArg — --boolean flags
Package: com.hypixel.hytale.server.core.command.system
protected AbstractCommand(@Nullable String name, @Nullable String description);
protected AbstractCommand(@Nullable String name, @Nullable String description, boolean requiresConfirmation);
protected AbstractCommand(@Nullable String description); // Variant (no name)@Nullable
protected abstract CompletableFuture<Void> execute(@Nonnull CommandContext ctx);public void addSubCommand(@Nonnull AbstractCommand command);
public void addUsageVariant(@Nonnull AbstractCommand command); // Different arg count variants
public void addAliases(String... aliases);// Required (positional) arguments
<D> RequiredArg<D> withRequiredArg(String name, String description, ArgumentType<D> argType);
<D> RequiredArg<List<D>> withListRequiredArg(String name, String description, ArgumentType<D> argType);
// Optional (--named) arguments
<D> OptionalArg<D> withOptionalArg(String name, String description, ArgumentType<D> argType);
<D> OptionalArg<List<D>> withListOptionalArg(String name, String description, ArgumentType<D> argType);
// Default (--named with fallback) arguments
<D> DefaultArg<D> withDefaultArg(String name, String description, ArgumentType<D> argType,
@Nullable D defaultValue, String defaultValueDescription);
// Flag (--boolean) arguments
FlagArg withFlagArg(String name, String description);public void requirePermission(@Nonnull String permission); // Set explicit permission
@Nullable public String getPermission(); // Get permission string
public boolean hasPermission(@Nonnull CommandSender sender); // Check sender permission
protected void setPermissionGroups(String... groups); // Associate with game mode groups
protected void setPermissionGroup(@Nullable GameMode gameMode); // Associate with game modeIf no explicit permission is set, one is generated:
- Root commands:
{plugin.basePermission}.command.{commandName} - Subcommands:
{parent.permission}.{subcommandName} - System commands:
hytale.system.command.{commandName}
public void setAllowsExtraArguments(boolean allowsExtraArguments);
protected void setUnavailableInSingleplayer(boolean unavailable);
@Nullable public String getFullyQualifiedName(); // e.g., "hp group set"public final class CommandContext {
@Nonnull public CommandSender sender();
@Nonnull public String getInputString();
// Get parsed argument values
<D> D getArg(RequiredArg<D> arg);
<D> D getArg(OptionalArg<D> arg); // Returns null if not provided
<D> D getArg(DefaultArg<D> arg); // Returns default if not provided
boolean getArg(FlagArg arg); // Returns true/false
// Player-specific
@Nonnull Player requirePlayer() throws SenderTypeException;
@Nonnull PlayerRef requirePlayerRef() throws SenderTypeException;
}public interface CommandSender extends IMessageReceiver, PermissionHolder {
String getDisplayName();
UUID getUuid();
}Extends:
IMessageReceiver—void sendMessage(Message message)PermissionHolder—boolean hasPermission(String permission)
public class CommandRegistry {
public void registerCommand(AbstractCommand command);
}Obtained via getCommandRegistry() on PluginBase.
Package: com.hypixel.hytale.server.core.command.system.arguments.types
| Field | Type | Examples |
|---|---|---|
ArgTypes.BOOLEAN |
Boolean |
true, false |
ArgTypes.INTEGER |
Integer |
-1, 0, 56346 |
ArgTypes.FLOAT |
Float |
3.14, -2.5 |
ArgTypes.DOUBLE |
Double |
-3.14, 0.0 |
ArgTypes.STRING |
String |
"quoted text" |
ArgTypes.UUID |
UUID |
UUID strings |
| Field | Type | Description |
|---|---|---|
ArgTypes.PLAYER_UUID |
UUID |
Player UUID or username lookup |
ArgTypes.PLAYER_REF |
PlayerRef |
Online player reference |
ArgTypes.GAME_PROFILE_LOOKUP |
PublicGameProfile |
Profile lookup (sync) |
ArgTypes.GAME_PROFILE_LOOKUP_ASYNC |
CompletableFuture<PublicGameProfile> |
Profile lookup (async) |
ArgTypes.ENTITY_ID |
ArgWrapper<EntityWrappedArg, UUID> |
Entity UUID wrapper |
| Field | Type | Description |
|---|---|---|
ArgTypes.RELATIVE_DOUBLE_COORD |
Coord |
Single relative double (e.g., ~5.0) |
ArgTypes.RELATIVE_INT_COORD |
IntCoord |
Single relative int (e.g., ~-2) |
ArgTypes.RELATIVE_BLOCK_POSITION |
RelativeIntPosition |
3D block pos (e.g., ~5 ~ ~-3) |
ArgTypes.RELATIVE_POSITION |
RelativeDoublePosition |
3D double pos |
ArgTypes.RELATIVE_CHUNK_POSITION |
RelativeChunkPosition |
2D chunk pos |
ArgTypes.VECTOR3I |
Vector3i |
3D integer vector |
ArgTypes.VECTOR2I |
Vector2i |
2D integer vector |
ArgTypes.RELATIVE_VECTOR3I |
RelativeVector3i |
3D relative vector |
| Field | Type | Description |
|---|---|---|
ArgTypes.WORLD |
World |
World by name |
ArgTypes.MODEL_ASSET |
ModelAsset |
Model asset reference |
ArgTypes.WEATHER_ASSET |
Weather |
Weather asset |
ArgTypes.ITEM_ASSET |
Item |
Item asset |
ArgTypes.BLOCK_TYPE_ASSET |
BlockType |
Block type asset |
ArgTypes.EFFECT_ASSET |
EntityEffect |
Entity effect asset |
ArgTypes.SOUND_EVENT_ASSET |
SoundEvent |
Sound event asset |
ArgTypes.PARTICLE_SYSTEM |
ParticleSystem |
Particle system asset |
ArgTypes.INTERACTION_ASSET |
Interaction |
Interaction asset |
| Field | Type | Description |
|---|---|---|
ArgTypes.RELATIVE_INTEGER |
RelativeInteger |
Optionally relative int |
ArgTypes.RELATIVE_FLOAT |
RelativeFloat |
Optionally relative float |
ArgTypes.INT_RANGE |
Pair<Integer, Integer> |
Min/max range |
ArgTypes.RELATIVE_INT_RANGE |
RelativeIntegerRange |
Relative range |
ArgTypes.INTEGER_COMPARISON_OPERATOR |
IntegerComparisonOperator |
>, <, >=, <=, =, != |
ArgTypes.INTEGER_OPERATION |
IntegerOperation |
+, -, *, /, %, = |
// Create custom enum argument type:
ArgTypes.forEnum(String name, Class<E> enumClass);
// Example: ArgTypes.SOUND_CATEGORY (SoundCategory enum)ArgTypes.GameModeArgumentType // Parses "Adventure" or "Creative"public class HyperPermsCommand extends AbstractCommand {
public HyperPermsCommand(HyperPerms hyperPerms) {
super("hp", "HyperPerms management command");
addSubCommand(new HelpSubCommand());
addSubCommand(new GroupSubCommand(hyperPerms));
addAliases("hyperperms", "perms");
}
@Override
protected CompletableFuture<Void> execute(CommandContext ctx) {
ctx.sender().sendMessage(buildHelpMessage());
return CompletableFuture.completedFuture(null);
}
}- Input tokenized by
Tokenizer - Subcommands matched by name/alias
- Required args parsed positionally
- Optional args parsed by
--name valuesyntax - Permissions checked at each level
execute(CommandContext)called with parsed values