Spigot Plugin

ShardMarketPlugin

Stwórz plugin na Minecraft (Paper/Spigot) z systemem Odłamków. Autor pluginu: DunajBrutal System odłamków Po zabiciu gracza istnieje szansa na wypadnięcie 1 odłamka. Domyślna szansa wynosi 30%, ale musi być w pełni konfigurowalna w config.yml. Odłamek jest przedmiotem AMETHYST_SHARD. W config.yml ma być możliwość zmiany: materiału przedmiotu, nazwy, lore, CustomModelData (jeśli jest używane), enchantów (opcjonalnie), procentowej szansy na wypadnięcie. Sklep za odłamki Komenda /sklepzaodłamki otwiera GUI sklepu. GUI ma być w pełni konfigurowalne: tytuł, rozmiar, ramka, materiały ramek,

Read the full description

nazwy i lore elementów dekoracyjnych. GUI posiada fioletową obramówkę. W dolnym lewym rogu znajduje się przedmiot pokazujący aktualną liczbę posiadanych odłamków. Liczba odłamków ma być zliczana automatycznie z ekwipunku gracza. Wszystkie przedmioty będące odłamkami (AMETHYST_SHARD oznaczony przez PersistentDataContainer) mają być zliczane i wyświetlane jako aktualna ilość waluty. W dolnym prawym rogu znajduje się przedmiot informacyjny z napisem: Informacje Kliknij na przedmiot, aby go kupić. Po kliknięciu przedmiotu: sprawdzana jest liczba odłamków, jeśli gracz posiada odpowiednią ilość, odłamki są usuwane z ekwipunku, kupiony przedmiot trafia do ekwipunku gracza, GUI automatycznie się zamyka, jeśli gracz nie posiada wymaganej liczby odłamków, zakup nie zostaje wykonany. Zarządzanie sklepem /sklepzaodłamkidodaj administrator trzyma przedmiot w ręce, podaje slot GUI, podaje cenę w odłamkach, oferta zostaje zapisana i pojawia się w sklepie. /sklepzaodłamkiusuń administrator wybiera slot, oferta z wybranego slotu zostaje usunięta. /reload przeładowuje konfigurację pluginu bez konieczności restartowania serwera. Konfiguracja Wszystkie elementy pluginu mają być konfigurowalne: wygląd odłamka, nazwa, lore, procentowa szansa na wypadnięcie, GUI sklepu, ramka, tytuł, rozmiar, przedmioty informacyjne, wiadomości, dźwięki (opcjonalnie). Wymagania Wszystkie oferty sklepu zapisują się w plikach i nie znikają po restarcie serwera. GUI oraz wszystkie wiadomości są konfigurowalne. Plugin ma być zoptymalizowany i napisany zgodnie z dobrymi praktykami. Odłamki mają być identyfikowane za pomocą PersistentDataContainer (PDC), aby nie można było ich podrobić zwykłym AMETHYST_SHARD. Wszystkie komunikaty, nazwy, lore oraz ustawienia mają znajdować się w plikach konfiguracyjnych. Twórca pluginu: DunajBrutal.

src/main/java/eu/codexe/shardmarket/ShardMarketPlugin.java
package eu.codexe.shardmarket;

import eu.codexe.shardmarket.commands.AddOfferCommand;
import eu.codexe.shardmarket.commands.OpenShopCommand;
import eu.codexe.shardmarket.commands.ReloadCommand;
import eu.codexe.shardmarket.commands.RemoveOfferCommand;
import eu.codexe.shardmarket.listeners.PlayerDeathListener;
import eu.codexe.shardmarket.listeners.ShopInventoryListener;
import eu.codexe.shardmarket.managers.MessageManager;
import eu.codexe.shardmarket.managers.ShipmentManager;
import eu.codexe.shardmarket.managers.ShopManager;
import eu.codexe.shardmarket.managers.ShardManager;
import eu.codexe.shardmarket.storage.OfferStorage;
import eu.codexe.shardmarket.storage.YamlOfferStorage;
import eu.codexe.shardmarket.utils.ConfigManager;
import eu.codexe.shardmarket.utils.ItemFactory;
import org.bukkit.Bukkit;
import org.bukkit.command.PluginCommand;
import org.bukkit.plugin.java.JavaPlugin;

public final class ShardMarketPlugin extends JavaPlugin {

    private ConfigManager configManager;
    private MessageManager messageManager;
    private ShardManager shardManager;
    private OfferStorage offerStorage;
    private ShopManager shopManager;
    private ShipmentManager shipmentManager;

    @Override
    public void onEnable() {
        saveDefaultConfig();
        saveResource("offers.yml", false);

        this.configManager = new ConfigManager(this);
        this.messageManager = new MessageManager(this, configManager);
        this.shardManager = new ShardManager(this, configManager);
        this.offerStorage = new YamlOfferStorage(this);
        this.shopManager = new ShopManager(this, configManager, messageManager, shardManager, offerStorage);
        this.shipmentManager = new ShipmentManager(this, configManager, messageManager, shardManager, shopManager);

        registerCommands();
        registerListeners();

        shopManager.loadOffers();
    }

    @Override
    public void onDisable() {
        if (shopManager != null) {
            shopManager.saveOffers();
        }
    }

    private void registerCommands() {
        registerCommand("sklepzaodlamki", new OpenShopCommand(this, shopManager, messageManager, configManager));
        registerCommand("sklepzaodlamkidodaj", new AddOfferCommand(this, shopManager, messageManager, configManager));
        registerCommand("sklepzaodlamkiusun", new RemoveOfferCommand(this, shopManager, messageManager, configManager));
        registerCommand("reload", new ReloadCommand(this, configManager, messageManager, shardManager, shopManager));
    }