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
BetonQuest: konfiguracja questow na serwerze Minecraft (2026)
Pelny poradnik BetonQuest 2.x: instalacja, uklad pakietow, dialogi, objectives, conditions, eventy, dziennik, migracja z 1.x i waskie gardla TPS.
Skript: podstawy skryptowania dla adminów serwerów Minecraft (2026)
Skript pozwala pisać logikę serwera w niemal angielskim, bez Javy. Instalacja, składnia, eventy, komendy, zmienne, dodatki skBee i skript-yaml, typowe pułapki wydajnościowe.
Jobs Reborn: konfiguracja RPG-zawodow na serwerze Minecraft (2026)
Pelny przewodnik po Jobs Reborn 5.x w 2026: instalacja z Vault, konfig Minera i Woodcuttera, krzywe XP i wyplaty, ochrona przed placed-block, /jobs reward.