Discord
Wiki - Pluginy

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.

Czas czytania: ~7 min Platforma: Paper / Spigot / Purpur

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.

Tworzenie menu - podstawy YAML

Po zainstalowaniu pluginu w folderze plugins/DeluxeMenus/gui_menus/ tworzysz osobny plik .yml dla każdego menu. Nazwa pliku (bez rozszerzenia) to identyfikator menu używany w komendach.

Każde menu zaczyna się od kilku podstawowych pól:

  • menu_title - tytuł widoczny w oknie inwentarza (obsługuje kody kolorów &)
  • size - rozmiar inwentarza: 9, 18, 27, 36, 45 lub 54 (wielokrotności 9)
  • open_command - komenda, którą gracz wpisuje aby otworzyć menu
  • items - mapa wszystkich slotów i ich konfiguracja

Przykład podstawowego menu głównego serwera:

menu_title: "&6&lGlowne Menu"
size: 27
open_command: menu
items:
  sklep:
    material: EMERALD
    slot: 11
    display_name: "&a&lSklep"
    lore:
      - "&7Otworz sklep serwera"
      - "&eKliknij aby wejsc!"
    left_click_commands:
      - "[openguipage] sklep 1"
  profil:
    material: PLAYER_HEAD
    slot: 13
    display_name: "&b%player_name%"
    lore:
      - "&7Poziom: &e%statistic_current_exp%"
      - "&7Saldo: &a$%vault_eco_balance%"
    left_click_commands:
      - "[message] &aTwoj profil!"
  wyjscie:
    material: BARRIER
    slot: 15
    display_name: "&c&lWyjdz"
    left_click_commands:
      - "[close]"

Po zapisaniu pliku wpisz /dm reload w grze lub konsoli. Menu jest od razu dostępne pod komendą, którą zdefiniowałeś w open_command.

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 Vault
  • has item - sprawdza czy gracz posiada dany przedmiot w ekwipunku
  • has exp - sprawdza poziom doświadczenia gracza
  • javascript - dowolne wyrażenie JavaScript (dla zaawansowanych)
  • >=, <=, ==, != - porównania wartości placeholderów
  • string 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 slotu
  • update_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 warunek has money. Vault pośredniczy między DeluxeMenus a Twoim pluginem ekonomii (EssentialsX, CMI, itp.).
  • LuckPerms - warunki has permission sprawdzają 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.