Event Streams

Processamento reativo de eventos em janelas de tempo

Event Streams permitem detectar padrões em eventos ao longo do tempo. Útil para detecção de spam, kill streaks, anti-cheat e mais.

Sintaxe

stream "nome":
    collect: tipos_de_evento
    group by: expressão
    window: período
    filter: condição
    trigger when: condição_de_agregação
    then: ação

Campos

CampoDescriçãoObrigatório
collectTipos de evento a coletarSim
group byAgrupamento (player, all)Não
windowJanela de tempoSim
filterFiltro adicionalNão
trigger whenCondição de disparoSim
thenAções ao dispararSim

Tipos de Evento

TipoDescrição
player_joinPlayer entra
player_quitPlayer sai
player_chatPlayer envia mensagem
player_deathPlayer morre
pvp_deathMorte por PvP
player_damagePlayer toma dano
player_attackPlayer ataca
block_breakBloco quebrado
block_placeBloco colocado

Condições de Trigger

# Contagem
trigger when: count >= 3

# Soma
trigger when: sum(damage) >= 100

# Média
trigger when: avg(damage) >= 25

# Min/Max
trigger when: max(damage) >= 50

# Distinct (únicos)
trigger when: distinct(player) >= 5

# Rate (por segundo)
trigger when: rate >= 2.0

# Sequência
trigger when: sequence(player_damage, player_damage, player_death)

Janelas de Tempo

# Fixa - reseta após o período
window: 30 seconds

# Deslizante - sempre olha os últimos X segundos
window: sliding 30 seconds

# Por contagem - dispara após N eventos
window: count 10

Exemplos

Detecção de Spam

stream "spam_detector":
    collect: player_chat
    group by: player
    window: 10 seconds
    trigger when: count >= 5
    then:
        mute player for 1 minute
        send "&cYou've been muted for spamming!" to player

Kill Streak

stream "kill_streak":
    collect: pvp_death
    group by: killer
    window: sliding 60 seconds
    trigger when: count >= 5
    then:
        broadcast "&6%killer% is on a 5 KILL STREAK!"
        apply strength 2 to killer for 30 seconds

Alerta de Dano

stream "damage_alert":
    collect: player_damage
    group by: player
    window: 30 seconds
    trigger when: sum(damage) >= 50
    then:
        send "&c⚠ You've taken a lot of damage!" to player
        apply regeneration 2 to player for 10 seconds

Anti-Cheat: Mining Rápido

stream "fast_miner":
    collect: block_break
    group by: player
    window: 5 seconds
    filter: block = "diamond_ore"
    trigger when: count >= 10
    then:
        execute console command "kick %player% Suspicious mining activity"
        log "[AntiCheat] %player% kicked for fast mining"

Movimento em Grupo

stream "group_activity":
    collect: player_join
    group by: all
    window: 1 minute
    trigger when: count >= 10
    then:
        broadcast "&a&lServer is getting busy! %count% players joined recently!"

Performance

Event Streams são processados de forma eficiente em background. Use janelas menores para detecção mais rápida, janelas maiores para padrões de longo prazo.

Configuração

Configure Event Streams no config.yml:

config.yml
streams:
  enabled: true
  tick_interval: 10        # Ticks entre processamentos
  max_window_size: 1000    # Máximo de eventos por janela