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.
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));
}