Guida [TUTORIAL] Come creare un plugin bukkit 3 - Configurazione e Permessi

Stato
Discussione chiusa ad ulteriori risposte.

AlessioDP

Sviluppatore
Amministratore
30 Gennaio 2012
4,899
216
966
1,801
Ultima modifica:
In questa guida vi spiegherò come implementare i permessi e la configurazione nel vostro plugin bukkit.
Questa guida è il continuo di http://www.inforge.net/community/mi...come-creare-un-plugin-bukkit-2-i-comandi.html.

Permissions
Continuando dai class della precedente guida, implementeremo dei permessi per il comando basta. Aggiungere il permesso è una cosa semplicissima basta aggiungere questo codice nel comando:
Codice:
if(sender.hasPermission("adp.basic")) {              
    sender.sendMessage("Basic!");
}else{
    sender.sendMessage("Non hai il permesso");
}
Ricordo che sender è colui che invia il comando, nel caso di un player controlla il permesso altrimenti se il comando è stato eseguito dalla console automaticamente bypassa il controllo permessi.
Nel codice vediamo un istruzione if, se il player ha il permesso adp.basic invia il messaggio "Basic!", Altrimenti (se non lo ha) invia il messaggio "Non hai il permesso". Per cambiare il nome del permesso basta rinominare "adp.basic".
Risultato finale:
Codice:
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    if(cmd.getName().equalsIgnoreCase("basic")){
        if(sender.hasPermission("adp.basic")) {
            sender.sendMessage("Basic!");
        }else{
            sender.sendMessage("Non hai il permesso");
        }
    }
    return true;
}

Per far funzionare il permesso necessitiamo di aggiungerlo al plugin.yml. Apriamolo e aggiungiamo:
Codice:
permissions:
  adp.basic:
    description: Access basic command.
    default: true
Nella voce default possiamo aggiungere:
true = Il permesso lo hanno tutti di base
false = Il permesso non lo ha nessuno
op = Il permesso lo ha solo l'operatore
not op = Il permesso lo hanno tutti tranne gli operatori

PS. Nel caso si aggiungesse il permesso ad un player, tramite gli appositi plugin, il comando comunque funziona. Il default serve solo nel caso non si usa un plugin Permission.

Configurazione
Creiamo un file nominato config.yml, cliccando col destro sul progetto eclipse New>File.
Questo sarà il nostro config. Come esempio aggiungeremo delle stringhe che poi richiameremo tramite dei comandi.
Aggiungiamo questo codice nel nostro config.yml
Codice:
no-permesso: "Non hai il permesso"
basic: "Basic!"
attiva-basic2: true
altri-basics:
  basic2: "Basic 2!"

Nel main class, sotto il void onEnable() scriviamo questo codice:
Codice:
public void onEnable(){
    getLogger().info("Plugin abilitato!");
    this.saveDefaultConfig();
}
Praticamente this.defaultconfig ci permette di salvare automaticamente il file di configurazione, se non esiste viene creato.
Nei nostri comandi aggiungeremo un paio di istruzioni che richiameranno le stringhe dal config.
Codice:
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
     if(cmd.getName().equalsIgnoreCase("basic")){
        if(cmd.getName().equalsIgnoreCase("basic")){
             if(sender.hasPermission("adp.basic")) {
                sender.sendMessage(this.getConfig().getString("basic"));
                if(this.getConfig().getBoolean("attiva-basic2") == true){
                    sender.sendMessage(this.getConfig().getString("altri-basics.basic2"));
                }
            }else{
                sender.sendMessage(this.getConfig().getString("no-permesso"));
            }
        }
        return true;
    }
Nella prima istruzione sendMessage abbiamo fatto in modo che va a prendere la stringa dal config ("this.getConfig().getString("basic")"), Quindi in pratica prende il config, poi cerca la stringa "basic".
Poco piu in basso vediamo un'istruzione if che controlla se nel config la voce attiva-basic2 è su true o false.
Se è su true invia il messaggio "basic2", che si trova in un gruppo (Per questo prima di basic2 troviamo "altri-basics.")

Con il getConfig() è possibile richiamare le seguenti variabili:
getString()
getBoolean()
getStringList()
getInt()
getList()

PS. è possibile prendere un sacco di variabili ho scritto solo quelle più usate (Troviamo anche: "getDouble", "getParent", "getDefaultSection")


Per settare tramite comando o comunque da altre funzioni del plugin, bisogna aggiungere questo codice:
Codice:
getConfig().set("basic", "Basic!");
Dove il primo basic è la voce del config, e Basic! è il risultato.

Per ricaricare il config:
Codice:
reloadConfig();

Per salvare il config:
Codice:
saveConfig();

Class Completi
Main.class
Codice:
package me.alessiodp;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;


public class Main extends JavaPlugin{

    public void onEnable(){
        getLogger().info("Plugin abilitato!");
                this.saveDefaultConfig();
    }

    public void onDisable(){
        getLogger().info("Plugin disabilitato!");
    }

    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if(cmd.getName().equalsIgnoreCase("basic")){
            if(sender.hasPermission("adp.basic")) {
                sender.sendMessage(this.getConfig().getString("basic"));
                if(this.getConfig().getBoolean("attiva-basic2") == true){
                    sender.sendMessage(this.getConfig().getString("altri-basics.basic2"));
                }
            }else{
                sender.sendMessage(this.getConfig().getString("no-permesso"));
            }
        }
        return true;
    }
}


Guida precedente: http://www.inforge.net/community/mi...come-creare-un-plugin-bukkit-2-i-comandi.html
Crediti: AlessioDP
Fonti: Bukkit wiki
Vietata la copia senza il mio permesso.
 
Potresti aggiungere come mettere nel config la possibilità di modificare stringhe di testo che escono dal sender.sendmessage e dal sender.broadcastmessage e se magari ci/mi riesci a spiegare come fare a scegliere il colore della stringa con i colori di base &1 - &2 - &3 ecc...
 
  • Mi piace
Reazioni: AlessioDP
Ciao, sapresti dirmi il codice per far si che venga incrementato o diminuito uno scoreboard di un player? Vorrei modificare un plugin che usa la fame come costo per determinate azioni. Io vorrei fare in modo che invece di modificare il livello di fame vada a modificare un determinato punteggio di un player creato con lo scoreboard vanilla di Minecraft.
 
[MENTION=69378]Alin92[/MENTION] Per manipolare la scoreboard di un player puoi utilizzare il codice:
Codice:
ScoreboardManager manager = Bukkit.getScoreboardManager();
Scoreboard board = manager.getNewScoreboard();
Objective objective = board.registerNewObjective("name", "dummy");

Score score = objective.getScore(player);
score.setScore(42);
Per modificare il titolo
Codice:
objective.setDisplayName("Titolo");
 
Stato
Discussione chiusa ad ulteriori risposte.