CreepiaBridge — Dokumentacja Pluginu
Pełna dokumentacja pluginu CreepiaBridge: architektura, komendy, konfiguracja, mechanizm dostawy i rozwiązywanie problemów.
CreepiaBridge to lekka wtyczka Minecraft łącząca serwer z platformą Creepia. Odbiera zakupy ze sklepu przez Redis i wykonuje komendy w grze — bez wpływu na TPS serwera.
Architektura
Creepia Cloud → Redis Queue → CreepiaBridge → Bukkit dispatchCommand
↓
ACK → Redis → BackendKluczowe elementy:
- Redis BLPOP listener — dedykowany wątek daemon nasłuchujący na kolejce, zero zużycia CPU w idle
- JedisPool — pula połączeń dla krótkotrwałych operacji (heartbeat, ACK)
- Deduplicator — in-memory cache (max 10k wpisów) zapobiegający podwójnemu wykonaniu
- PendingDeliveryStore — plik YAML z dostawami dla graczy offline, periodic flush co 60s
- HMAC-SHA256 — każda wiadomość jest podpisana, niepodpisane są odrzucane
Komendy
Wszystkie komendy wymagają uprawnienia creepia.admin (domyślnie: OP).
| Komenda | Opis |
|---|---|
/creepia auth <token> | Połącz serwer ze sklepem używając tokenu z panelu |
/creepia unlink | Odłącz serwer od sklepu i zatrzymaj usługi |
/creepia status | Pokaż status połączenia, Redis, liczbę oczekujących dostaw |
/creepia retry | Wymuś ponowną próbę dostawy dla wszystkich graczy online |
/creepia reload | Przeładuj konfigurację z pliku (bez restartu) |
Mechanizm dostawy
Gracz online
Gdy zakup dotyczy gracza, który jest online:
- Komenda jest walidowana (HMAC + blocklista)
- Placeholdery są zamieniane (
{player},{uuid}) - Komenda jest wykonywana na main thread przez
dispatchCommand - ACK
SUCCESSjest wysyłany do backendu
Gracz offline
Gdy gracz jest offline:
- Dostawa jest zapisywana do pamięci (i okresowo na dysk)
- ACK
QUEUEDjest wysyłany do backendu - Gdy gracz dołączy — po opóźnieniu
join-delay-ticks— plugin próbuje dostarczyć
Mechanizm retry
Retry następuje wyłącznie przy kolejnym dołączeniu gracza do serwera. Nie ma żadnego timera ani cyklicznego sprawdzania.
Scenariusz:
- Gracz dołącza → plugin próbuje dostarczyć
- Gracz rozłącza się zanim komenda się wykona →
retry_countrośnie o 1 - Gracz dołącza ponownie → kolejna próba
- Po
max-retriesnieudanych prób → dostawa jest usuwana z ACKFAILED
Administrator może wymusić ponowną próbę komendą /creepia retry — sprawdzi dostawy dla wszystkich graczy aktualnie online.
Staggered delivery
Gdy gracz ma wiele oczekujących dostaw, są one wykonywane z małym opóźnieniem między sobą (1-3.5s), żeby nie przeciążyć serwera jednoczesnym wykonaniem wielu komend.
Placeholdery
Komendy wysyłane z platformy mogą zawierać:
| Placeholder | Wartość |
|---|---|
{player} | Nick gracza |
{PLAYER} | Nick gracza |
{nick} | Nick gracza |
{uuid} | UUID gracza |
{UUID} | UUID gracza |
Przykład: give {player} diamond 64 → give Steve diamond 64
Komendy wewnętrzne
Platforma może wysyłać specjalne komendy (prefix _CREEPIA_):
| Komenda | Działanie |
|---|---|
_CREEPIA_FORCE_UNLINK_ | Wymusza odłączenie serwera |
_CREEPIA_PING_ | Health check — odpowiada ACK PONG |
_CREEPIA_CART_REMINDER_|nick|wiadomość | Wysyła wiadomość o porzuconym koszyku |
Heartbeat
Co 60 sekund plugin wysyła do Redis status serwera:
- Liczba graczy online / max
- Wersja serwera i pluginu
- TTL klucza: 90s (jeśli heartbeat nie przyjdzie przez 90s, backend uznaje serwer za offline)
Konfiguracja
Ustawienia administratora
security:
blocked-commands:
- "op"
- "deop"
- "stop"
# ... dodaj własneKomendy z tej listy nigdy nie zostaną wykonane, nawet jeśli platforma je wyśle. Plugin rozpoznaje prefiksy namespace (minecraft:op → op).
logging:
verbose: false # true = loguj wszystko (debug)
suppress-repeated-errors: true # ukryj powtarzające się błędy RedisUstawienia dostawy
delivery:
join-delay-ticks: 60 # 3s opóźnienia po join (20 ticks = 1s)
max-retries: 5 # po 5 nieudanych joinach → FAILED
pending-max-size: 500 # max oczekujących dostaw
pending-max-age-days: 30 # auto-usuwanie po 30 dniach
deduplication-hours: 48 # okno deduplikacji transakcji
save-interval-seconds: 60 # flush na dysk co 60s| Pole | Domyślnie | Opis |
|---|---|---|
join-delay-ticks | 60 | Opóźnienie po join zanim plugin dostarczy. Zapobiega problemom z niezaładowanym ekwipunkiem. |
max-retries | 5 | Liczba prób = liczba joinów gracza. Brak timera — retry tylko przy dołączeniu. |
pending-max-size | 500 | Limit pamięci. Po przekroczeniu nowe dostawy są odrzucane (backend ponowi). |
pending-max-age-days | 30 | Stare dostawy są automatycznie czyszczone. |
deduplication-hours | 48 | Jak długo pamiętać wykonane transakcje (max 10k w pamięci). |
save-interval-seconds | 60 | Częstotliwość zapisu na dysk. Zapis tylko gdy dane się zmieniły. |
Ustawienia techniczne
secret-key: "..." # HMAC key — ustawiany przez /creepia auth
env: "prod" # local/test/prod — określa adres Redis
queue: "UNREGISTERED" # kolejka Redis — NIE EDYTUJ
reconnect:
initial-delay: 5 # początkowy backoff (sekundy)
max-delay: 300 # max backoff (5 minut)
multiplier: 2.0 # 5s → 10s → 20s → ... → 300s
redis:
pool-size: 4 # połączenia w puli (bez BLPOP listenera)Wymagania
- Minecraft 1.13+ (Spigot, Paper, Purpur, Folia*)
- Java 8+
- Dostęp do portów wychodzących (Redis, port 6379)
*Folia: plugin używa runTask/runTaskAsynchronously — wymaga adaptera dla Folia scheduler.
Wpływ na wydajność
| Metryka | Wpływ |
|---|---|
| TPS | Zerowy — nic ciężkiego na main thread |
| RAM | ~1-2 MB (deduplicator + pending store) |
| CPU | Minimalny — BLPOP blokuje bez zużycia CPU |
| Dysk | 1 zapis co 60s (tylko gdy dane się zmieniły) |
| Sieć | Heartbeat co 60s + ACK per dostawa |
Jak Działa Creepia – Architektura Sklepu Minecraft
Jak działa CreepiaBridge i Creepia Cloud – asynchroniczne zakupy rang, brak lagów TPS i bezpieczeństwo sklepu Minecraft bez otwartych portów.
Discord Webhook dla Sklepu Minecraft – Powiadomienia
Integracja Discord z ItemShopem Minecraft w Creepia. Powiadomienia o zakupach rang i itemów na kanale Discord – konfiguracja krok po kroku.