DeluxeMenus - niestandardowe GUI menu na serwerze Minecraft
DeluxeMenus to najpopularniejszy plugin do tworzenia własnych menu inwentarzowych bez pisania ani jednej linii kodu Java. Konfigurujesz wszystko przez pliki YAML: wygląd slotów, akcje kliknięć, warunki uprawnień i dynamiczne treści przez PlaceholderAPI. Działa na Paper, Spigot i Purpur od wersji 1.8 do 1.21.x.
Co to jest DeluxeMenus
DeluxeMenus to darmowy plugin serwerowy, który pozwala adminom tworzyć w pełni niestandardowe menu GUI oparte na oknie inwentarza Minecraft. Zamiast zlecać programiście napisanie dedykowanego pluginu w Javie, opisujesz całe menu w pliku YAML - jakie itemy mają być w slotach, co się dzieje po kliknięciu, komu pokazać dany przycisk i jakie dynamiczne wartości wyświetlić.
Plugin stworzył developer znany jako clip i opublikował na SpigotMC w 2016 roku. Od tamtego czasu DeluxeMenus stało się de facto standardem dla wszelkich GUI serwerowych - menu główne, sklepy, teleporty, profile graczy, rangi VIP, systemy nagród i setki innych zastosowań. Na SpigotMC plugin pobrało ponad milion razy.
Kluczowe cechy, które wyróżniają DeluxeMenus:
- Zero kodowania - całość konfiguracji w YAML, bez kompilowania czegokolwiek
- Pełna integracja z PlaceholderAPI - w każdej nazwie i opisie możesz użyć dowolnego placeholdera
- Bogaty system akcji - komendy gracza, komendy konsoli, wiadomości, dźwięki, otwieranie innych menu, a nawet połączenia z innymi serwerami BungeeCord
- System warunków - każdy slot może sprawdzić uprawnienia, saldo portfela, posiadanie przedmiotu lub dowolną wartość z placeholdera
- Animacje - zmiana wyglądu slotu w czasie rzeczywistym z konfigurowalnymi interwałami odświeżania
- Hot-reload - przeładowanie bez restartu serwera przez
/dm reload
Plugin pobierzesz bezpłatnie na SpigotMC (DeluxeMenus). Kod źródłowy dostępny jest na GitHub pod organizacją PlaceholderAPI.
Sloty i itemki
Każdy element sekcji items to osobny slot (lub zakres slotów). Sloty numerowane są od 0 (lewy górny róg) do rozmiar-1 (prawy dolny róg). W menu 27-slotowym ostatni slot ma numer 26.
Najważniejsze pola itemku:
| Pole | Opis | Przykład |
|---|---|---|
material | Typ przedmiotu (ID z Bukkit) | DIAMOND, EMERALD, PLAYER_HEAD |
slot | Numer slotu lub zakres | 13 lub 0-8 |
display_name | Nazwa wyświetlana z kolorami | &a&lSklep |
lore | Lista linii opisu | - "&7Opis item" |
amount | Liczba przedmiotów w slocie | 1-64 |
glow | Efekt enchant bez enchantmentu | true / false |
model_data | Custom Model Data dla resource packa | 10001 |
Zakres slotów (slot: 0-8) pozwala wypełnić kilka slotów tym samym itemem bez powtarzania konfiguracji - klasyczny sposób na dekoracyjne obramowanie menu szklanymi szybkami:
items:
wypelnienie:
material: BLACK_STAINED_GLASS_PANE
slot: 0-8
display_name: " "
akcja_prawy:
material: BOOK
slot: 4
display_name: "&6Encyklopedia"
left_click_commands:
- "[player] /wiki"
right_click_commands:
- "[message] &7Prawy przycisk: otwierasz poradnik"
middle_click_commands:
- "[close]" Dla głów graczy użyj material: PLAYER_HEAD razem z polem skull_owner: %player_name% - DeluxeMenus automatycznie pobiera skin aktualnie przeglądającego gracza.
Akcje kliknięć
Akcje to serce DeluxeMenus. Definiujesz je jako listę poleceń wykonywanych kolejno po kliknięciu w slot. Każda akcja opakowywana jest w nawiasy kwadratowe, które określają jej typ:
| Typ akcji | Co robi |
|---|---|
[player] | Wykonuje komendę jako gracz (jak wpisana w chacie) |
[console] | Wykonuje komendę z poziomu konsoli serwera (pełne uprawnienia) |
[message] | Wysyła wiadomość do gracza (obsługuje kody kolorów) |
[broadcast] | Wysyła wiadomość do wszystkich graczy na serwerze |
[sound] | Odtwarza dźwięk dla gracza (nazwy z Bukkit Sound enum) |
[broadcastsound] | Odtwarza dźwięk dla wszystkich graczy |
[openguimenu] | Otwiera inne menu DeluxeMenus |
[openguipage] | Otwiera konkretną stronę menu z paginacją |
[close] | Zamyka aktualne menu |
[connect] | Przenosi gracza na inny serwer BungeeCord/Velocity |
[commandevent] | Wywołuje zdarzenie komendy (inne pluginy mogą je przechwycić) |
[chat] | Wysyła tekst do chatu jako gracz (bez znaku /) |
[givemoney] | Daje graczowi pieniądze przez Vault |
[takemoney] | Zabiera graczowi pieniądze przez Vault |
Akcje możesz przypisać do różnych typów kliknięć: left_click_commands, right_click_commands, middle_click_commands, shift_left_click_commands, shift_right_click_commands. Przykład z kilkoma typami akcji:
left_click_commands:
- "[player] /spawn"
- "[console] eco give %player_name% 100"
- "[message] &aDostales 100 monet!"
- "[sound] ENTITY_EXPERIENCE_ORB_PICKUP"
- "[openguimenu] sklep"
- "[close]"
- "[connect] lobby"
- "[commandevent] /kit starter"
- "[broadcastsound] ENTITY_ENDER_DRAGON_DEATH" Akcje wykonują się jedna po drugiej. Możesz łączyć [console] (do komend wymagających uprawnień admina) z [message] (feedback dla gracza) i [sound] (efekt audio) w jednym kliknięciu.
Warunki i wymagania
System requirements pozwala kontrolować, czy gracz może kliknąć w dany slot. Jeśli warunek nie jest spełniony, wykonywane są deny_commands zamiast normalnych akcji. To kluczowa funkcja do budowania zamkniętych stref VIP, sklepów wymagających określonej liczby zasobów czy progów poziomowych.
Dostępne typy warunków:
has permission- sprawdza czy gracz ma dane uprawnienie (węzeł LuckPerms)has money- sprawdza saldo przez Vaulthas item- sprawdza czy gracz posiada dany przedmiot w ekwipunkuhas exp- sprawdza poziom doświadczenia graczajavascript- dowolne wyrażenie JavaScript (dla zaawansowanych)>=,<=,==,!=- porównania wartości placeholderówstring equals,string contains- porównania tekstowe placeholderów
requirements:
permission:
type: has permission
permission: server.vip
deny_commands:
- "[message] &cMusisz miec VIP aby to otworzyc!"
saldo:
type: '>='
input: "%vault_eco_balance%"
output: "1000"
deny_commands:
- "[message] &cMusisz miec co najmniej 1000$ na koncie!"
przedmiot:
type: has item
material: DIAMOND
amount: 5
deny_commands:
- "[message] &cPotrzebujesz 5 diamentow!" Możesz definiować kilka warunków jednocześnie. Domyślnie wszystkie muszą być spełnione (logiczne AND). Dzięki temu możesz wymagać zarówno odpowiedniej rangi, jak i odpowiedniego salda przed wykonaniem akcji.
Warunki możesz też przypisać do całego menu przez pole open_requirement na poziomie głównym pliku YAML - wtedy menu w ogóle się nie otworzy graczom niespełniającym kryteriów.
PlaceholderAPI w menu
Integracja z PlaceholderAPI to największa zaleta DeluxeMenus. Możesz użyć dowolnego placeholdera w nazwie wyświetlanej, opisie (lore), materiale, a nawet w warunkach. Menu staje się w pełni dynamiczne i pokazuje każdemu graczowi inne treści dopasowane do jego stanu.
Przykład slotu z profilem gracza opartym w całości na placeholderach:
display_name: "&b%player_name%"
lore:
- "&7Ranga: &e%luckperms_prefix%"
- "&7Saldo: &a$%vault_eco_balance_formatted%"
- "&7Zycia: &c%player_health%&7/&c%player_max_health%"
- "&7Ping: &e%player_ping%ms"
- "&7Poziom: &b%player_exp_to_level%"
- "&7Online: &a%server_online%" Najczęściej używane placeholdery w menu DeluxeMenus:
| Placeholder | Źródło | Co zwraca |
|---|---|---|
%player_name% | PlaceholderAPI | Nick gracza |
%vault_eco_balance_formatted% | Vault expansion | Saldo gracza (sformatowane) |
%luckperms_prefix% | LuckPerms expansion | Prefix rangi |
%player_health% | PlaceholderAPI | Aktualne życia |
%player_ping% | PlaceholderAPI | Ping gracza w ms |
%server_online% | PlaceholderAPI | Liczba graczy online |
%statistic_deaths% | Statistic expansion | Liczba zgonów gracza |
%player_world% | PlaceholderAPI | Aktualny świat gracza |
Placeholdery działają też w display_name komend otwierających menu - możesz pokazywać tytuł menu dynamicznie dla każdego gracza, np. menu_title: "&bMenu gracza %player_name%".
Dynamiczne nazwy i opisy
DeluxeMenus umożliwia automatyczne odświeżanie zawartości slotów w czasie rzeczywistym bez potrzeby ponownego otwierania menu przez gracza. Służą do tego dwa pola:
update: true- włącza cykliczne odświeżanie slotuupdate_interval- co ile ticków serwera odświeżać (20 ticków = 1 sekunda)
material: REDSTONE_TORCH
update: true
update_interval: 10
display_name: "&c&lCZERWONY"
lore:
- "&7Czas serwera: &e%server_time%"
- "&7Online: &a%server_online% graczy" Odświeżanie działa selektywnie - włączasz je tylko dla slotów, które rzeczywiście zmieniają wartości. Nie ustawiaj zbyt krótkiego interwału (poniżej 10 ticków) na wszystkich slotach jednocześnie, bo może to obciążyć serwer przy dużej liczbie graczy otwartych menu.
Dynamiczne sloty świetnie sprawdzają się w:
- Licznikach czasu do eventu (
%server_time%lub własne placeholdery) - Wyświetlaniu aktualnego salda i poziomu XP w profilu gracza
- Liście graczy online z ich aktualnymi statusami
- Wskaźniku pojemności skladu lub liczby wolnych miejsc na serwerze
Komendy otwierające menu
Główna komenda pluginu to /deluxemenus z aliasem /dm. Administracyjne komendy dostępne dla graczy z uprawnieniem deluxemenus.admin:
| Komenda | Co robi |
|---|---|
/dm reload | Przeładowuje wszystkie menu z plików YAML (bez restartu) |
/dm list | Wyświetla listę wszystkich załadowanych menu |
/dm open NazwaMenu | Otwiera menu dla siebie |
/dm open NazwaMenu NazwaGracza | Otwiera menu dla wskazanego gracza (zdalne, z konsoli) |
/dm execute NazwaMenu NazwaGracza | Wykonuje akcje slotu bez otwierania menu |
Pole open_command w pliku YAML rejestruje komendę bezpośrednio - po przeładowaniu gracz wpisuje /menu (lub cokolwiek ustawiłeś) i menu się otwiera bez potrzeby pisania pełnej komendy /dm open. Możesz też podać listę aliasów:
open_command:
- menu
- glowne
- m Komendy otwierające menu można też wywoływać z EssentialsX przez kity lub przez warp z komendą wykonywaną przy teleportacji. To pozwala budować w pełni zintegrowane doświadczenie nawigacyjne serwera.
Porady i animacje
Paginacja dla długich list - jeśli masz więcej elementów niż mieści się na jednej stronie (np. lista 50 warpów), użyj wbudowanego systemu paginacji DeluxeMenus. Dodaj sloty z akcjami [openguipage] nazwa_menu 2 i [openguipage] nazwa_menu 1 do nawigacji między stronami.
Zagnieżdżone menu - buduj hierarchie menu zamiast wkładać wszystko na jednej stronie. Menu główne otwiera kategorie (sklep, profil, warpy), każda kategoria to osobny plik YAML. Utrzymuje to konfigurację czytelną i pozwala dawać dostęp do konkretnych menu przez uprawnienia.
Templatki slotów - jeśli kilka menu używa tego samego obramowania z czarnych szybek, stwórz osobny "szablon" i otwieraj go pod spodem przez open_requirement. Alternatywnie duplikuj sekcję wypełnienia w każdym pliku - to 5 linii kodu.
Testowanie warunków - zanim wypuścisz menu na żywe serwery, zaloguj się na konto testowe bez uprawnień i sprawdź każdy slot. Najczęstszy błąd to literówka w nazwie uprawnienia - menu nie blokuje dostępu, bo warunek jest zawsze false.
Per-player content (unikalne treści) - dzięki PlaceholderAPI możesz pokazywać różnym graczom różne informacje na tym samym slocie. Kombinacja %player_name% w skull_owner z dynamicznym opisem opartym na %vault_eco_balance% daje spersonalizowany panel gracza bez żadnego kodowania.
Optymalizacja wydajności - domyślnie opcja update jest wyłączona. Włączaj ją tylko tam, gdzie naprawdę potrzebujesz odświeżania w czasie rzeczywistym. Ustaw update_interval na co najmniej 20 ticków (1 sekunda) dla slotów ze statystykami i na 40-60 dla mniej krytycznych elementów.
Organizacja plików - trzymaj menu w podfolderach według kategorii: gui_menus/admin/, gui_menus/sklep/, gui_menus/warpy/. DeluxeMenus automatycznie skanuje podfoldery przy ładowaniu.
Kompatybilność
DeluxeMenus integruje się z szerokim ekosystemem pluginów serwerowych:
- PlaceholderAPI - fundamentalna integracja; bez niej menu są statyczne. Wymagane do wyświetlania jakichkolwiek dynamicznych wartości.
- Vault - integracja ekonomii przez akcje
[givemoney]i[takemoney]oraz warunekhas money. Vault pośredniczy między DeluxeMenus a Twoim pluginem ekonomii (EssentialsX, CMI, itp.). - LuckPerms - warunki
has permissionsprawdzają węzły LuckPerms. Możesz też używać placeholderów LuckPerms (%luckperms_prefix%) do personalnych treści opartych na randze. - BungeeCord / Velocity - akcja
[connect]przenosi graczy na inne serwery sieciowe. Przydatne w menu nawigacyjnym sieci serwerów. - CMI, SuperVanish, Citizens - przez system
[console]możesz wywołać dowolną komendę tych pluginów jako część akcji kliknięcia. - Minecraft 1.8 - 1.21.x - plugin zachowuje kompatybilność wsteczną. Działa na Paper, Spigot, Purpur i ich forach.
Powiązane poradniki w katalogu pluginów: PlaceholderAPI (instalacja i ekspansje), Vault (ekonomia), katalog pluginów (wszystkie opisy).
Często zadawane pytania
Czy DeluxeMenus wymaga PlaceholderAPI?
PlaceholderAPI nie jest wymagane do uruchomienia DeluxeMenus, ale jest praktycznie niezbędne do stworzenia użytecznych menu. Bez niego nie wyświetlisz salda gracza, rangi, liczby żyć ani żadnej dynamicznej wartości. Zainstaluj PlaceholderAPI razem z DeluxeMenus od samego początku.
Jak otworzyć menu dla gracza komendą?
Każde menu ma przypisaną komendę otwierającą, którą definiujesz w pliku YAML w polu open_command. Po przeładowaniu pluginu (/dm reload) komenda jest aktywna. Możesz też otworzyć menu dla innego gracza przez /dm open NazwaMenu NazwaGracza - przydatne w skryptach i eventach.
Czy DeluxeMenus działa na Minecraft 1.20 i 1.21?
Tak, DeluxeMenus aktywnie wspiera aktualne wersje Minecraft. Plugin działa na Paper, Spigot i Purpur od wersji 1.8 do 1.21.x. Wersję kompatybilną znajdziesz zawsze na stronie SpigotMC w zakładce Updates.