PlaceholderAPI na serwerze Minecraft: konfiguracja, expansions, przyklady
PlaceholderAPI (zwykle skracane do PAPI) to plugin-most, przez który inne pluginy wymieniają się dynamicznymi danymi. Bez niego połowa nowoczesnych funkcji w TAB, scoreboardzie i czacie po prostu nie działa. Przejdziemy przez instalację, najważniejsze expansions i miejsca, w których PAPI naprawdę się przydaje.
Czym jest PlaceholderAPI i po co go używać
Sam PAPI nie robi nic. To plugin-API, który daje innym pluginom jeden wspólny format do podstawiania danych w stringi. Każdy plugin, który chce pokazać nazwę gracza, jego saldo, grupę LuckPerms albo aktualne TPS, wpisuje w configu %player_name% lub %vault_eco_balance%, a PAPI w locie zamienia to na prawdziwą wartość.
Największa zaleta to jeden format na wszystko. Wcześniej plugin TAB miał swoje placeholdery, plugin scoreboarda inne, czat trzecie. Z PAPI mamy uniwersalną składnię, a każdy plugin, który ją obsługuje, czyta dane z dowolnego źródła.
W praktyce PAPI działa na około 90% serwerów, od małych SMP po duże sieci minigame. Jeśli stawiasz serwer z TAB, scoreboardem, custom-czatem albo hologramami, niemal na pewno go potrzebujesz.
Instalacja PlaceholderAPI
Stabilną wersję pobierzesz ze Spigot. Wrzucasz .jar do plugins/, restartujesz serwer. Tyle.
Po pierwszym uruchomieniu PAPI tworzy folder plugins/PlaceholderAPI/ z podfolderem expansions/. Tam trafiają dodatki dostarczające konkretne placeholdery. Sam PAPI bez nich jest praktycznie bezużyteczny, więc kolejny krok jest ważniejszy niż sama instalacja.
Kompatybilność wersji: Paper i Spigot 1.16.5 do 1.21.x. Dla Folii istnieje osobny fork PAPI 2.11+. Zwykła wersja na Folii nie wystartuje przez różnice w schedulerze.
Zasada działania: provider i consumer
PAPI ma prosty model. Provider (expansion) to plugin lub moduł, który dostarcza dane. Consumer to plugin, który te dane wstawia we własne wiadomości.
Przykład. W configu pluginu TAB piszesz:
header: '&aOnline: %server_online%/%server_max_players%'
Plugin TAB widzi %server_online%, pyta PAPI, PAPI znajduje odpowiednią expansion (tutaj Server) i zwraca aktualną liczbę graczy. Plugin TAB nie musi wiedzieć, jak serwer liczy tę wartość, i o to chodzi.
Przydatne komendy
PAPI dostarcza kilka komend do debugowania i zarządzania:
/papi list
/papi info <expansion>
/papi parse <player> <text>
/papi parse me %player_name% has $%vault_eco_balance%
/papi reload
/papi ecloud download <expansion>
/papi parse me <text> to najważniejsze narzędzie do debugowania. Jeśli placeholder w TAB albo na czacie wyświetla się dosłownie (%player_name% zamiast nazwy), uruchom tę komendę. Jeżeli PAPI poprawnie go rozwiązuje, problem leży po stronie consumer-pluginu. Jeśli zwraca surowy tekst, expansion nie jest zainstalowana albo masz literówkę.
Instalacja expansions przez ecloud
Kiedyś expansions pobierało się ręcznie ze strony. Teraz jest wbudowany ecloud:
/papi ecloud download Player
/papi ecloud download Vault
/papi ecloud download Statistic
/papi ecloud download Server
/papi ecloud download Math
/papi reload
Po każdym pobraniu robisz /papi reload albo restart serwera. Bez tego expansion leży w folderze, ale jest nieaktywna.
Solidny zestaw startowy dla większości serwerów: Player, Server, Vault (jeśli masz ekonomię), LuckPerms (jeśli na nim ustawiasz uprawnienia), Statistic (do statystyk gry).
Najważniejsze expansions
Player - podstawowa, instalowana niemal zawsze. Daje %player_name%, %player_displayname%, %player_uuid%, %player_health%, %player_food_level%, %player_world%, %player_ping%, koordynaty, gamemode i dziesiątki innych pól.
Server - dane o serwerze. %server_online%, %server_max_players%, %server_unique_joins%, %server_tps_1%, %server_uptime%, %server_ram_used%. Placeholdery TPS są szczególnie cenne dla adminowych scoreboardów.
Vault - ekonomia i grupy przez Vault API. %vault_eco_balance%, %vault_eco_balance_formatted% (z separatorami tysięcy), %vault_prefix%, %vault_suffix%, %vault_group%. Działa z każdą ekonomią, która hookuje się w Vault: EssentialsX, CMI, TheNewEconomy.
LuckPerms - wybór, jeśli używasz LuckPerms (a większość używa). %luckperms_primary_group_name%, %luckperms_prefix%, %luckperms_suffix%, %luckperms_meta_<key>%. Lepszy od Vault dla prefix/suffix, bo nie gubi kolorów.
Statistic - statystyki gry z Bukkit API. %statistic_play_one_minute% (łączny czas gry), %statistic_mob_kills%, %statistic_deaths%, %statistic_blocks_broken%. Uwaga: niektóre pola to ciężkie zapytania, nie pakuj 20 takich do TAB na każdego gracza.
Math - matematyka w samym placeholderze. %math_0_{%player_health%}/2% zwróci połowę życia. Wygodne do obliczeń w scoreboardzie bez pisania skryptów.
Custom-placeholdery przez JavaScript
Do nietypowych przypadków jest JavaScript expansion. Pozwala napisać własny placeholder w JS bez kompilowania osobnego pluginu.
Przykład: chcesz %js_kdr% liczący stosunek k/d gracza. Tworzysz plugins/PlaceholderAPI/javascript_placeholders.yml:
kdr:
description: 'Kill / death ratio'
script_file: 'kdr.js'
I sam skrypt plugins/PlaceholderAPI/javascripts/kdr.js:
function kdr(player, args) {
var kills = parseInt(PlaceholderAPI.setPlaceholders(player, "%statistic_player_kills%"));
var deaths = parseInt(PlaceholderAPI.setPlaceholders(player, "%statistic_deaths%"));
if (deaths === 0) return kills.toFixed(2);
return (kills / deaths).toFixed(2);
}
Po /papi reload placeholder %javascript_kdr% działa wszędzie. Silnik Nashorn JS został usunięty w Java 11+, więc na nowoczesnych wersjach instalujesz GraalVM JS albo używasz forka PlaceholderAPI Javascript Expansion.
Gdzie używać PAPI na serwerze
TAB / Tablist (TAB plugin) - klasyk. Header, footer, nazwy graczy w liście, scoreboard z tego samego pluginu, wszystko przez PAPI.
Pluginy scoreboarda - FeatherBoard, AnimatedScoreboard, sam TAB. Dynamiczne tablice z saldem, rangą i czasem gry budują się w całości na PAPI.
Pluginy czatu - DeluxeChat, EssentialsXChat, VentureChat. Format wiadomości i hover/click events pisze się z placeholderami.
Hologramy - HolographicDisplays, DecentHolograms. Leaderboardy top-graczy, saldo nad bankomatem, aktualny licznik online.
ItemsAdder, Oraxen, MMOItems - format wyświetlanej nazwy i lore przedmiotów często używa PAPI do dynamicznych pól.
Skrypty Skript - wbudowane wsparcie przez parsed placeholder.
Praktyczny przykład: format TAB i czatu
Config pluginu TAB z placeholderami:
header:
- '&8&m-----&r &aMineGuard &8&m-----'
- '&7Online: &a%server_online%&7/&a%server_max_players%'
- '&7TPS: &a%server_tps_1%'
footer:
- '&7Balance: &6$%vault_eco_balance_formatted%'
- '&7Group: &b%luckperms_primary_group_name%'
- '&7Ping: &e%player_ping%ms'
Config DeluxeChat dla czatu:
formats:
default:
priority: 100
format: '%luckperms_prefix%%player_name%%luckperms_suffix% &8» &f{message}'
vip:
priority: 50
permission: 'group.vip'
format: '&6[VIP] %player_name% &8» &e{message}'
W EssentialsXChat placeholdery włącza się w essentials/config.yml:
chat:
format: '{DISPLAYNAME} &8» &f{MESSAGE}'
group-formats:
vip: '&6[VIP] {DISPLAYNAME} &8» &e{MESSAGE}'
EssentialsXChat wspiera PAPI od EssentialsX 2.19+. Wcześniej trzeba było mieć osobny plugin EssentialsXChat-PlaceholderAPI Hook.
Wydajność i cache
Sam PAPI jest szybki. Problemy zaczynają się przy ciężkich expansions, które na każde wywołanie placeholdera lecą do bazy. Przykład: %statistic_play_one_minute% dla wszystkich 100 graczy w TAB co 2 sekundy to 50 zapytań SQL na sekundę, a jeśli statystyki siedzą w bazie, to już zauważalne obciążenie.
Co robić:
- Nie pakuj więcej niż 5-10 placeholderów na gracza w jedną linię TAB. Statystyki per-gracz mnożą się przez online.
- Zwiększ interwał odświeżania w pluginie TAB. Domyślnie zwykle 1 sekunda, 5-10 sekund spokojnie wystarczy dla większości placeholderów.
- Relational placeholders tylko, gdy faktycznie trzeba. Są droższe, bo liczą się dla pary graczy, nie jednego.
- Profiluj przez timings.
/timings pastepokaże wtyczki zjadające czas i konkretna expansion może tam wyjść.
Gdy placeholder nie działa
Typowe sytuacje, w których %player_name% wyświetla się dosłownie:
- PAPI nie jest zainstalowane lub się nie załadowało - sprawdź
/plugins, wpis powinien być zielony. - Expansion nie pobrana -
/papi listpokazuje aktywne. Brakuje twojej, więc/papi ecloud download <name>. - Plugin nie używa PAPI - nie każdy plugin czyta placeholdery. Czyste Bukkit MOTD z server.properties ich nie parsuje, potrzebny osobny plugin MOTD z obsługą PAPI.
- Literówka w nazwie -
%player_health%działa,%player_hp%nie./papi listpokaże dokładne nazwy. - Hook PAPI w consumer-pluginie jest opcjonalny - niektóre configi mają flagę
placeholderapi: true, domyślnie wyłączoną.
/papi parse me <text> to twoje główne narzędzie. Jeśli rozwiązuje placeholder, a consumer-plugin nie, znaczy że consumer nie aktywował swojego hooka PAPI.
FAQ
Co jest lepsze, PlaceholderAPI czy MVdWPlaceholderAPI
PAPI to dziś standard branżowy. MVdWPlaceholderAPI był popularny na 1.8 i 1.12, ale autor od lat go nie wspiera. Większość nowoczesnych pluginów obsługuje oba przez plugin-mostek MVdWPlaceholderAPI Hook, ale jeśli stawiasz serwer od zera, bierzesz PAPI i nie oglądasz się za siebie.
Jak napisać własną expansion
Tworzysz plugin Java albo standalone .jar w folderze expansions/. Klasa dziedziczy po PlaceholderExpansion, nadpisujesz onPlaceholderRequest(Player p, String identifier) i zwracasz wartość. W getIdentifier() ustawiasz prefix (np. myplugin dla %myplugin_xxx%). Działające przykłady są na GitHub PAPI.
Czy można używać PAPI w nazwie przedmiotu
Tylko jeśli plugin renderujący przedmiot wspiera placeholdery. Czyste Bukkit ItemStack ich nie parsuje. ItemsAdder, Oraxen, MMOItems i DeluxeMenus to potrafią. Do własnych GUI zwykle używa się DeluxeMenus jako frontendu.
Czemu %vault_eco_balance% zwraca 0
Trzy powody. Pierwszy: Vault nie zainstalowany albo nie znalazł providera ekonomii (potrzebujesz EssentialsX, CMI lub innego pluginu z Vault hookiem). Drugi: gracz nie ma jeszcze konta w ekonomii (Essentials zakłada przy pierwszym wejściu po instalacji). Trzeci: używasz %vault_eco_balance_formatted% i wartość jest po prostu na tyle mała, że zaokrągla się do 0.
Czy dużo placeholderów w TAB mocno obciąża serwer
Zależy które. Player i Server są tanie, czytają z pamięci. Statistic, LuckPerms-meta i custom-placeholdery oparte o SQL są droższe. W praktyce 5-10 placeholderów na gracza w TAB z interwałem 5 sekund nie daje zauważalnego obciążenia nawet przy 200 online. Problemy zaczynają się od 50+ placeholderów odświeżanych co sekundę.
Co to są relational placeholders
Placeholdery o formie %rel_<expansion>_<id>%, liczone dla pary graczy (viewer i target). Używane głównie w TAB do kolorowania nazw zależnie od relacji (przeciwnik czerwony, sojusznik zielony). Droższe niż zwykłe, bo liczą się N×M razy zamiast N.
Co dalej
Zainstaluj zestaw bazowy - Player, Server, Vault, LuckPerms - i odpal /papi list, żeby zobaczyć, co masz dostępne. Potem dorzuć plugin TAB i zbuduj scoreboard. Gdy zechcesz czegoś niestandardowego, JavaScript expansion zamyka większość przypadków bez pisania osobnego pluginu.
Jeśli używasz PAPI intensywnie na dużym serwerze, raz w tygodniu odpalaj /timings paste i sprawdzaj, czy jakaś expansion nie wlazła na szczyt listy obciążenia. Najczęściej to Statistic albo własna expansion z ciężkimi zapytaniami.
Chroń swój serwer przed atakami DDoS
Darmowa ochrona z konfiguracją w 5 minut. 1 TB ruchu w zestawie.
Wypróbuj za darmoPowiązane artykuły
Jak przenieść serwer Minecraft na ochronę DDoS bez downtime
Poradnik krok po kroku przenoszenia serwera Minecraft pod ochronę DDoS przez DNS. Bez utraty graczy, bez przestoju, bez paniki.
Jak wybrać ochronę DDoS dla serwera Minecraft w 2026 roku
Pełny poradnik kupującego: czego szukać w ochronie DDoS dla Minecrafta, jakie są podejścia, jakich czerwonych flag nie przegapić i dlaczego ochrona specjalizowana pod MC bije uniwersalne rozwiązania.
Najlepsza ochrona DDoS dla Minecraft w 2026
Porównanie podejść do ochrony serwerów Minecraft przed DDoS w 2026: międzynarodowe CDN vs lokalna filtracja, self-hosted vs managed, darmowe vs płatne rozwiązania. Kryteria wyboru, omówienie technologii XDP/eBPF i dlaczego opóźnienie jest krytyczne dla PvP.