GrzybcioRynek

Architecture

Warstwy pluginu MarketPlace 1.0.3 i oddzielny mock Next.js — bez HTTP API.

Kompatybilne z: GrzybcioRynek 1.0.3Minecraft 26.2Web 0.1.0

Na podstawie kodu GrzybcioRynek 1.0.3 i web 0.1.0.

Tip

Administrator serwera: wystarczy wiedzieć, że plugin wymaga Paper 26.2 + Vault + ekonomię, a dane leżą w plugins/GrzybcioRynek/. Pełny graf klas: Developer → Architecture. Start na serwerze: Getting Started.

Plugin startuje w com.example.marketplace.MarketPlace. Najpierw sprawdza wersję serwera, potem Vault, potem resztę menedżerów. Strona WWW nie jest częścią tego łańcucha.

Start pluginu

java
@Override
public void onEnable() {
    if (!isSupportedServerVersion()) {
        getLogger().severe("GrzybcioRynek działa TYLKO na Paper 26.2!");
        Bukkit.getPluginManager().disablePlugin(this);
        return;
    }
    // ConfigManager, GuiConfigManager, MessageManager
    this.vaultHook = new VaultHook(this);
    if (!vaultHook.isEnabled()) {
        // ponowienie za 20 ticków (1 s) — Essentials / Vault late load
        Bukkit.getScheduler().runTaskLater(this, () -> { /* ... */ }, 20L);
        return;
    }
    finishEnable();
}

finishEnable() składa hooki custom itemów, magazyn, serwisy, komendy i timer wygasania (co 30 minut).

Graf zależności (rdzeń)

MarketPlace ├── ConfigManager config.yml (settings, fee, flagi) ├── GuiConfigManager gui.yml ├── MessageManager messages.* z config.yml ├── VaultHook ServicesManager Economy ├── NexoHook / OraxenHook refleksja API packów ├── CustomItemsHook klon ItemStack; rebuild tylko przy AIR ├── ExtendedDataStore market-data.yml ├── StorageManager listings.yml ├── AntiAbuseManager ├── MailboxService ├── AlertService ├── StatsManager ├── ListingQueryService ├── ChatInputManager cancel / anuluj ├── MarketManager oferty, zakup, rezerwacje ├── GUIManager otwarte GUI └── MarketAPI init(this)

Komendy: MarketCommand (/market), WystawCommand (/wystaw), AukcjeCommand (/aukcje). Listenerzy: GUIListener, PlayerJoinListener, ChatInputListener. PlaceholderAPI: PlaceholderHook (jeśli plugin jest obecny).

Warstwa rynku

MarketManager tworzy oferty, kupuje, usuwa, wygasza, refunduje. Trzyma zbiór reservedListings — oferta w trakcie zakupu. Reload jest blokowany, gdy ten zbiór nie jest pusty.

ListingQueryService filtruje i sortuje oferty do GUI (wyszukiwanie, kategorie).

StorageManager wczytuje / zapisuje listings.yml, robi backup, usuwa wygasłe oferty i przetwarza outbox wygaśnięć.

ExtendedDataStore trzyma dane rozszerzone w market-data.yml: historia, ulubione, skrzynka, alerty, oceny, statystyki gracza.

Warstwa GUI

GUIManager + GUIListener obsługują kliknięcia. Konkretne ekrany to m.in. MarketBrowseGUI, MarketDetailGUI, MarketConfirmGUI, MarketCategoryGUI, MyListingsGUI, FavoritesGUI, HistoryGUI, MailboxGUI, AlertsGUI, StatsGUI, SellerProfileGUI.

Note

Rozmiar przeglądarki: gui.ymlbrowse.size. Pasek akcji browse (sloty 45–53) jest stały w MarketBrowseGUI. settings.gui-rows jest wczytywane i nie steruje GUI.

Hooki

KlasaRola
VaultHookEconomy z ServicesManager; wpłaty po UUID; format()$X / $X.XX
NexoHookNexoItems.idFromItem / itemFromId + build()
OraxenHookOraxenItems.getIdByItem / exists / getItemById + build()
CustomItemsHookpreferuje sklonowany zapisany stack
PlaceholderHookidentifier grybciorynek, odświeżanie cache co 20 ticków

Essentials nie ma klasy hooka. Jest tylko softdepend w plugin.yml, żeby Vault Economy zdążyło się zarejestrować.

Dane na dysku

plugins/GrzybcioRynek/ ├── config.yml ├── gui.yml ├── listings.yml └── market-data.yml

Komunikaty są w config.yml pod messages.*. Osobnego messages.yml nie ma.

Web — poza pluginem

GrzybcioRynek-main/ ├── PLugin/ kod Paper 1.0.3 ├── Strona/ Next.js 16 — mock UI, brak połączenia └── Wiki/ ta dokumentacja
Danger

Nie ma warstwy HTTP. Strona/ nie czyta listings.yml i nie woła pluginu.

🚧 Planned

HTTP API nie jest zaimplementowane.