Sobrescrita de Comandos

Interceptar, modificar ou substituir comandos existentes

O sistema de Sobrescrita de Comandos permite interceptar, modificar ou substituir completamente comandos existentes de outros plugins ou do PocketMine-MP.

Tipos de Override

1. Override Completo (Replace)

Substitui completamente um comando existente pela sua implementação:

override command /help:
    permission: lazuli.override.help
    send "&6Custom Help Menu" to sender
    send "&7- /spawn - Teleport to spawn" to sender
    send "&7- /kit - Get a starter kit" to sender
    send "&7- /shop - Open the shop" to sender

2. Before Hook

Executa código ANTES do comando original. Pode cancelar a execução do original:

before command /tp:
    # Log tentativas de teleporte
    log "&7[TP] %player% is trying to teleport"
    
    # Opcionalmente cancelar
    if player doesn't have permission "tp.allowed":
        send "&cYou cannot teleport!" to player
        cancel command

3. After Hook

Executa código DEPOIS do comando original completar:

after command /give:
    # Log de itens dados
    log "&7[GIVE] Command completed by %sender%"
    broadcast "&a%sender% just gave items!"

Efeitos Disponíveis

execute original command

Dentro de um override, executa a implementação original do comando:

override command /help:
    send "&6=== Custom Header ===" to sender
    execute original command
    send "&6=== Custom Footer ===" to sender

cancel command

Em um hook before, previne o comando original de executar:

before command /stop:
    if player doesn't have permission "admin.stop":
        send "&cOnly admins can stop the server!" to player
        cancel command

Variáveis de Contexto

Dentro de command overrides, você tem acesso a estas variáveis:

VariávelDescrição
%sender%Quem executou (player ou console)
%player%O player (se sender for player)
%player-name%Nome do player
%command%Nome do comando
%args%Array de todos os argumentos
%args-string%Todos argumentos como string
%arg-1%, %arg-2%Argumentos individuais
%arg-count%Número de argumentos

Prioridade

Before e after hooks podem especificar prioridade (maior = executa primeiro):

before command /spawn with priority 100:
    # Executa primeiro
    log "High priority hook"

before command /spawn with priority 10:
    # Executa depois
    log "Low priority hook"

Prioridade padrão é 50.

Exemplos Práticos

Sistema de Help Customizado

custom-help.lzl
override command /help:
    permission: lazuli.help
    
    send "&6&l=== Server Help ===" to sender
    send "" to sender
    send "&e/spawn &7- Teleport to spawn" to sender
    send "&e/home &7- Teleport to your home" to sender
    send "&e/shop &7- Open the shop menu" to sender
    send "&e/kit &7- Get a starter kit" to sender
    send "" to sender
    send "&6&l===================" to sender

Sistema de Cooldown

kit-cooldown.lzl
before command /kit:
    # Verificar cooldown
    if {kit_cooldown::%player-name%} is set:
        set {_remaining} to {kit_cooldown::%player-name%}
        if {_remaining} > now:
            send "&cPlease wait before using /kit again!" to player
            cancel command
    
    # Definir cooldown de 5 minutos
    set {kit_cooldown::%player-name%} to now + 5 minutes

after command /kit:
    log "&7[KIT] %player-name% used /kit"

Proteção de Comandos Admin

admin-protection.lzl
before command /stop:
    if sender is not op:
        send "&cThis command requires operator status!" to sender
        cancel command
    else:
        broadcast "&c&lServer shutting down in 10 seconds..."
        wait 10 seconds
        # Deixa o comando original executar

before command /ban:
    # Log todas tentativas de ban
    log "&c[BAN] %sender% is banning with args: %args-string%"

after command /ban:
    # Anunciar ban
    broadcast "&c%arg-1% has been banned!"

Wrapper com Original

override command /gamemode <mode>:
    permission: lazuli.gamemode
    
    send "&7Changing gamemode..." to player
    execute original command
    send "&aGamemode changed successfully!" to player

Autocomplete de Argumentos

Lazuli automaticamente fornece sugestões de autocomplete no cliente. Use type hints para melhor autocomplete:

command /heal <player:target> [amount:int]:
    trigger:
        heal %arg-1% by %arg-2% hearts

override command /warp <name:string>:
    send "Warping to %arg-1%..." to player

Type Hints Suportados

TipoDescriçãoDisplay no Cliente
target / playerSeletor de playerMostra nomes de players
int / numberInput inteiroTeclado numérico
float / decimalInput decimalNumérico com decimais
bool / booleanTrue/FalseMostra true/false
text / messageInput de textoCampo de texto
position / posCoordenadasSeletor de posição

Notas Importantes

  • Overrides aplicam a todos os comandos, incluindo de outros plugins
  • Múltiplos hooks before podem existir (ordenados por prioridade)
  • Múltiplos hooks after podem existir (ordenados por prioridade)
  • Apenas um override completo pode existir por comando
  • Use cancel command apenas em hooks before
  • Use execute original command apenas em overrides completos

Cuidado

Overrides de comandos críticos como /stop, /opdevem ser feitos com cuidado para não quebrar a funcionalidade do servidor.