Hytale permite a los modders extender la experiencia de juego mediante comandos personalizados. Estos comandos se crean en el servidor mediante Java y se registran a través del sistema de plugins.
Este artículo explica cómo crear un comando desde cero usando la clase AbstractPlayerCommand.
La clase AbstractPlayerCommand
Para crear un comando personalizado, debes extender la clase AbstractPlayerCommand. Esto proporciona un marco asíncrono que no se ejecuta en el hilo principal del servidor, lo cual evita bloquear la ejecución del juego durante operaciones largas.
Constructor
Al extender AbstractPlayerCommand, debes proporcionar un constructor que llame al constructor de BaseCommand con los siguientes parámetros:
- Nombre del comando: el texto que los jugadores escribirán en el chat para ejecutar el comando.
- Descripción: una breve explicación de lo que hace el comando.
- Confirmación opcional: indica si el comando requiere que el jugador escriba
--confirmal ejecutarlo.
Método execute
El comportamiento del comando se implementa sobrescribiendo el método execute. Este método recibe los siguientes parámetros:
- CommandContext: siempre representa al jugador que ejecuta el comando.
- Store
: permite acceder a todos los componentes de las entidades. - Ref
: referencia de la entidad del jugador que ejecuta el comando. - PlayerRef: referencia directa al jugador.
- World: el mundo en el que se está ejecutando el comando.
Mediante el Store y el Ref, puedes acceder a cualquier componente de la entidad, como Player, UUIDComponent o TransformComponent.
Ejemplo de comando
public class ExampleCommand extends AbstractPlayerCommand {
public ExampleCommand() {
super("test", "Super test command!");
}
@Override
protected void execute(@Nonnull CommandContext commandContext, @Nonnull Store<EntityStore> store, @Nonnull Ref<EntityStore> ref, @Nonnull PlayerRef playerRef, @Nonnull World world) {
Player player = store.getComponent(ref, Player.getComponentType()); // también un componente
UUIDComponent component = store.getComponent(ref, UUIDComponent.getComponentType());
TransformComponent transform = store.getComponent(ref, TransformComponent.getComponentType());
player.sendMessage(Message.raw("Player#getUuid() : " + player.getUuid())); // retorna UUID desde UUIDComponent
player.sendMessage(Message.raw("UUIDComponent : " + component.getUuid()));
player.sendMessage(Message.raw("equal : " + player.getUuid().equals(component.getUuid()))); // ambos son iguales
player.sendMessage(Message.raw("Transform : " + transform.getPosition()));
}
}
En este ejemplo, el comando test permite al jugador verificar su UUID y la posición de su transformación en el mundo.
Registro del comando
Una vez creado el comando, debe registrarse en el plugin para que Hytale lo reconozca. Esto se hace dentro de la clase principal del plugin extendiendo JavaPlugin:
public class MyPlugin extends JavaPlugin {
@Override
public void setup() {
this.getCommandRegistry().registerCommand(new ExampleCommand());
}
}
Después de este registro, los jugadores podrán ejecutar el comando test en el chat del servidor y el método execute, se ejecutará automáticamente para cada jugador que lo invoque.
Conclusión
- Extiende
AbstractPlayerCommandpara crear un comando personalizado. - Define un constructor con nombre, descripción y confirmación opcional.
- Sobrescribe
executepara implementar la lógica del comando. - Accede a componentes del jugador mediante Store y Ref.
- Registra el comando en tu plugin usando
getCommandRegistry().registerCommand.
Este sistema combina facilidad de uso con potencia avanzada, permitiendo que cualquier modder manipule datos de jugadores, NPCs y entidades dentro del mundo de Hytale de manera segura y eficiente.
