LightningSwordPlugin
Crea un plugin per Spigot 1.19 (compatibile con versioni successive) che permette ai giocatori di lanciare fulmini sul punto a cui stanno guardando premendo il tasto destro con una spada specifica. Il plugin deve includere le seguenti caratteristiche: 1. **Configurazione del plugin**: - Un file `config.yml` che permette la personalizzazione delle spade abilitate (es. Diamante, Oro). - Configurare la distanza massima in blocchi del lancio del fulmine (default: 50 blocchi). - Messaggi personalizzabili per feedback ai giocatori (es. "Fulmine lanciato!", "Distanza troppo lontana").
Read the full description
2. **Comportamento del plugin**: - Riconoscimento dei tasti: il plugin deve intercettare l'evento di click destro del giocatore su una spada. - Verifica dei requisiti: controllare che il giocatore stia guardando un punto all'interno della distanza permessa. - Generazione del fulmine: generare un fulmine nel punto bersaglio se i criteri sono soddisfatti. 3. **Permessi**: - Creare permessi per limitare l'uso di questa abilità a determinati gruppi o giocatori. Esempi di permessi: `lightning.sword.use` e `lightning.sword.admin` per gli amministratori che possono modificare le impostazioni. 4. **Comandi**: - `/lightningsword reload`: Ricarica il file di configurazione senza dover riavviare il server. - `/lightningsword give <giocatore> [tipo_spada]`: Assegna una spada abilitata a un giocatore specificato. Richiede permesso `lightning.sword.admin`. 5. **Database**: - Utilizzare un file SQLite per tracciare le statistiche dei lanci di fulmini (opzionale). Tabelle potrebbero includere: - `lightning_usage` con campi: `player_uuid`, `timestamp`, `location`. 6. **Messaggi e feedback**: - Mostrare messaggi di successo o errore al giocatore tramite il sistema di messaggi di Minecraft. - Inviarli come messaggi di chat o come titoli/sottotitoli sullo schermo secondo le personalizzazioni del file `config.yml`. 7. **Eccezioni e gestione errori**: - Assicurarsi che il plugin gestisca situazioni problematiche come un click fuori dallo spazio limitato o in un punto non bersagliabile. - Aggiungere un log dettagliato per gli amministratori per diagnosticare eventuali problemi di esecuzione del plugin. 8. **Integrazione con altre API**: - Considerare l'uso di Vault per abilitare il costo dell'uso della spada in valuta di gioco, se richiesto. - Compatibilità con PlaceholderAPI per mostrare statistiche personalizzate nei messaggi. Il plugin deve essere facile da usare e configurabile per i gestori del server, garantendo al contempo un’esperienza coinvolgente per i giocatori che utilizzano la spada speciale.
package eu.codexe.lightningsword;
import eu.codexe.lightningsword.commands.LightningSwordCommand;
import eu.codexe.lightningsword.config.PluginConfig;
import eu.codexe.lightningsword.listeners.PlayerInteractListener;
import eu.codexe.lightningsword.managers.CooldownManager;
import eu.codexe.lightningsword.managers.EconomyManager;
import eu.codexe.lightningsword.managers.LightningManager;
import eu.codexe.lightningsword.placeholders.LightningSwordExpansion;
import eu.codexe.lightningsword.storage.StorageManager;
import eu.codexe.lightningsword.storage.impl.MySQLStorage;
import eu.codexe.lightningsword.storage.impl.SQLiteStorage;
import eu.codexe.lightningsword.storage.impl.YamlStorage;
import eu.codexe.lightningsword.utils.MessageUtil;
import org.bstats.bukkit.Metrics;
import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.logging.Level;
public final class LightningSwordPlugin extends JavaPlugin {
private static LightningSwordPlugin instance;
private PluginConfig pluginConfig;
private MessageUtil messageUtil;
private StorageManager storageManager;
private CooldownManager cooldownManager;
private EconomyManager economyManager;
private LightningManager lightningManager;
@Override
public void onEnable() {
instance = this;
// Save default resource files on first run
saveDefaultConfig();
saveResource("messages.yml", false);
// Initialize configuration wrapper and message utility
pluginConfig = new PluginConfig(this);
messageUtil = new MessageUtil(this);
// Initialize storage backend; disable plugin on failure
if (!initStorage()) {
getLogger().severe("Failed to initialize storage backend! Disabling LightningSwordPlugin.");
Bukkit.getPluginManager().disablePlugin(this);
return;
}
// Initialize feature managers
cooldownManager = new CooldownManager(this);
economyManager = new EconomyManager(this);
lightningManager = new LightningManager(this);
// Register event listeners
getServer().getPluginManager().registerEvents(new PlayerInteractListener(this), this);
// Register commands
LightningSwordCommand commandHandler = new LightningSwordCommand(this);