Il forum è in modalità sola lettura dal 16 giugno 2019, ora siamo su Discord. Altre informazioni

[Guida] Creare un plugin Bukkit #1

Buongiorno a tutti, oggi vi vengo ad illustrare, su richiesta dell'utente @BaluMonster, come creare un plugin per Bukkit.
PASSO 1- ECLIPSE, JDK E TANTE NOIOSE COSE.
Per sviluppare in Java, linguaggio utilizzato da Bukkit, Minecraft e i plugin, abbiamo bisogno di in stallare Java Developement Kit (JDK). Scaricatelo e installatelo da qui
Ricordate: dovete scaricare la versione x64 nel caso abbiate un sistema OS a 64 bit, mentre x86 nel caso di un sistema a 32  bit(la maggior parte dei sistemi sono a 32).
Dopo aver installato Java DK(alias JDK), dobbiamo installare un editor per Java, ovvero Eclipse Classic, che potete trovare qui. Semplicemente estraete  il file zip, noterete che all'interno si trova un file Eclipse.exe.
Dovete ora scaricare un editor per i file .yml (codice YAML). Io utilizzerò Notepad++, che potete trovare qui.
PASSO 2-SETTARE IL WORKSPACE
Create una cartella vuota, chiamatela come volete, noi la chiameremo Testplugin.
Avviate Eclipse, noterete che dopo la splash screen si aprirà una finestra "Workspace Launcher". Vi viene richiesto un percorso, dove verranno creati i file, voi settate la cartella Testplugin(Es. se la nostra cartella si trova sul desktop, il precorso sarà: C:/nomeuntente/desktop/testplugin, ma potete selezionare la cartella dal tasto Sfoglia.)
Si aprirà la schermata principale di Eclipse.
PASSO 3-INIZIAMO IL PLUGIN, FINALMENTE? NO, NO, ALTRE NOIOSE COSE!
Nella schermata di Eclipse, chiudete la scheda Welcome, e andate su File>New>Java Project.
[Immagine: NewJavaProject.png]
Chiamate il plugin come volete, potete chiamarlo con il nome del plugin, se volete.
Ora dobbiamo mettere la Bukkit API. Fate click destro sul progetto, nel Package Explorer, e andate su Proprietes.
Scaricate l'ultima versione, al momento 1.6.2, della API Bukkit da qui. Nella finestra che si apre su Eclipse, andate su Java Build Path, e schiacciate su Add esternal JARs e selezionate il file appena scaricato
[Immagine: BuildPathPic.png]
Se avete un po di esperienza su Eclipse e Java, sapete che per i metodi occorre la documentazione sui metodi stessi.
Bene, anche Bukkit è dotato di documentazione, e indovinate? Dobbiamo inserire anche quella! Bravi!
Sempre in Proprietes, andate in Javadoc Location e in URL mettete la posizione dei  Javadoc di bukkit,  http://jd.bukkit.org/apidocs/.

[Immagine: Bukkitjavadocs.png]
Ok, ora siamo pronti.
PASSO 4-NON TI ADDORMENTARE, ORA INIZIAMO IL PLUGIN!
Ora dobbiamo creare un package per il plugin. Nel Package Explorer(o come si chiama! Tongue)
Fate click sul progetto e vedrete che compariranno delle cartelle e dei file. Fate click destro sulla cartella src e fate New>Package
[Immagine: MakePackage.png]
Ora, sul nome del pacchetto c'è un po di discorso da fare. Non potete dargli il nome che volete, ma dovete dargli come nome un "URL". Mi spiego meglio. Ora io uso il MIO sito web per esempio. Se il mio è www.acproducts.altervista.org, il pacchetto si chiamerà org.altervista.acproducts.nomeplugin.
oppure potete usare il vostro indirizzo e-mail(cosa che non vi consiglio!). Se il nostro indirizzo e-mail è <username>@gmail.com, il nome del pacchetto sarà com.gmail.<username>.nomeplugin. O, ancora, potete usare GitHub.
ATTENZIONE! 
Il vostro pacchetto NON DOVRA' MAI E POI MAI INIZIARE CON
  • org.bukkit
  • net.bukkit
  • com.bukkit
  • net.minecraft
Ora andiamo a creare la classe principale del plugin, quindi fate click destro sul pacchetto, New>Class, chiamatela Main.
La classe vi si presenterà così:
Codice:
package <Nomepcchetto>;
 
public class Main {
 
}
Dovete modificarla così
Codice:
package <Nomepacchetto>;
 
import org.bukkit.plugin.java.JavaPlugin;
 
public final class Main extends JavaPlugin {
 
}
PASSO 5-IL PLUGIN.YML
Andiamo ora a vedere la parte più importante del plugin.
Click destro sul PROGETTO nel Package Explorer, New>File. Chiamatelo plugin.yml (SOLO COSI' LO DOVETE CHIAMARE).
Aprite il file CON NOTEPAD++ e metteteci:
Codice:
[ltr][font=monospace][size=x-small][color=green]name[/color][color=#a52a2a][b]: NomePlugin[/b][/color][color=green]
main[/color][color=#a52a2a][b]: Nomepacchetto[/b][/color].Main[color=green]
version[/color][color=#a52a2a][b]: Versione(1.0, 2.0...)[/b][/color][/size]
[/font][/ltr]
Salvate e chiudete Notepad++.
Nel package explorer, click destro sul file plugin.yml, e schiacciate su refresh.
PASSO 6-VOLEVATE IL PLUGIN?ORA DOVETE PROGRAMMARE!
Ora andiamo a configurare le varie azioni del plugin quando è abilitato (onEnable) e quando è disabilitato (onDisable)
Andiamo a modificare la calsse main:
Codice:
package pacchetto;
 
import org.bukkit.plugin.java.JavaPlugin;
 
public final class Main extends JavaPlugin {
 
@Override
public void onEnable(){
//QUI INSERIREMO LE AZIONI DI QUANDO E' ABILITATO
}
 
@Override
public void onDisable() {
//QUI INSERIREMO LE AZIONI DI QUANDO E' DISABILITATO
}
}
Ora vedremo la funzione più elementare di un plugin: il messaggio di log.
Modifichiamo come sempre la classe Main
Codice:
package pacchetto;
 
import org.bukkit.plugin.java.JavaPlugin;
 
public final class {$PluginName} extends JavaPlugin {
 
    public void onEnable(){
        getLogger().info("Bella zio! Testplugin è abilitato");
    }
 
    public void onDisable(){
        getLogger().info("Bella fra! Testplugin è disabilitato");
    }
}
PASSO 7-UN COMANDO!
Dentro onEnable, dopo getLogger, andiamo a inserire:
Codice:
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
    if(cmd.getName().equalsIgnoreCase("iamlagging")){ //se il player esegue il comando
        // fai qualchecosa
        return true;
    } //restituisci true
// se non viene dato il comando, restituisci false.
    return false;
}
Come fa notare @Masfik98 nei commenti, equalsIngoreCase serve a ignorare maiuscole e minuscole, per esempio:
se uno fa /IaMlAgGiNg o /iamlagging o /IAMLAGGING non cambia nulla, come invece succede nei comandi di default di Minecraft.
Fatto questo andiamo ad inserire il comando al plugin.yml. Inseriamo sotto le righe spiegate in precedenza:
Codice:
commands:
iamlagging:
   description: descrizione del comando
   usage: /comando
   permission: testplugin.basic
   permission-message: Non sei autorizzato ad usare il comando
Salviamo, chiudiamo Notepad++ e refreshiamo il file su eclipse
Ora stiamo facendo un semplice plugin per vedere se stiamo laggando, per vedere SE e QUANTO lagghiamo, se il player da il comando /iamlagging gli verrà mandato un messsaggio.
Inseriamo sotto If(cmd.getName...
Codice:
player.sendMessage("Sicuramente stai laggando, il nostro server fa schifo, infatti!");
Ok, ora oer questa prima guida abbiamo finito, vederemo le permissions, il config,l'inventory manipulation ed altro nelle prossime.
Ora dobbiamo esportare il plugin in formato .jar, così da poterlo usare.
Andiamo in File>Save All.
Poi in File>Export>, selezioniamo Java, poi JAR file e fra i file da esportare selezionate plugin.yml e la cartella src, come qui:
[Immagine: Exportwindow.png]
Selezionate il percorso di destinazione e il nome del file .jar e schiacciate su Finish. Dovrebbe esportare tutto senza problemi. Notate che in questa guida abbiamo utilizzato l'API e i JavaDoc della versione più recente, ovvero la 1.6.2.
Create un server e controllate che tutto sia funzionante!
Nelle prossime guide vedremo come mettere il plugin su BukkitDev.
Guida by Alberto01 alias ALCC01
Per favore, visto il mio impegno per questa guida, me lo date un +1?
Prossima guida su come creare un plugin per Bukkit

La guida è stata tratta dalla Wiki di Bukkit
Le immagini sono della suddetta wiki
Il codice è stato fatto interamente da me, per quanto non si possa per forza copiare dalla wiki.
Se avete dubbi, problemi od errori, non esitate a chiedere nei commenti, non per forza a me ma anche a @|24yN , che di plugin se ne intende forse più di me! (Modificato 16/07/2013, 07:23 da ALCC01.)
Non rispondo a richieste di supporto in privato!

Moderatore&Neswer
Sviluppatore

Big GrinBig GrinBig GrinBig GrinBig GrinBig GrinBig Grin
REP!
1 utente apprezza questo post
@BaluMonster Grazie Big Grin Smile
Non rispondo a richieste di supporto in privato!

Moderatore&Neswer
Sviluppatore

1 utente apprezza questo post
Il "messaggio di log" non è obbligatorio, infatti anche senza esso, Bukkit ti dice se è abilitato o meno.
Ah, aggiungo una cosa opzionale (però molto utile):
Se volete aggiungere un commento, o messaggio per ricordarvi qualcosa, procedete in questo modo:
Codice:
server.broadcastMessage(ChatColor.GOLD + "Ciao."); //Messaggio di broadcast a tutto il server.

/*In questo modo, invece,
Faremo un commento su
più righe*/



C'è una parte poco chiara:
Codice:
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
    if(cmd.getName().equalsIgnoreCase("iamlagging")){ //se il player esegue il comando
        // fai qualchecosa
        return true;
    } //Se succede, restituisci true
// se non succede, restituisci false
    return false;
}
Se succede cosa?

E poi dovresti spiegare anche i vari methods, ad esempio "equalsIgnoreCase", che ignora come è stato scritto il comando senza basarsi sulle maiuscole e minuscole.
Dovresti anche spiegare cosa fanno i costrutti (if, else, etc).

Se dovessi dare un parere su questa guida, la definirei incompleta, poco chiara e senza spiegazioni fondamentali per programmare un plugin.
Un utente poco esperto potrebbe non capirci nulla.

Nonostante tutto, hai fatto un buon lavoro, sono certo che migliorerai la guida piano piano.
Un bel REP +1 te lo meriti. (Modificato 28/12/2013, 16:40 da Masfik.)
[Immagine: 1aNQ28j]
2 utenti apprezzano questo post
@Masfik98 Grazie e correggo!
Non rispondo a richieste di supporto in privato!

Moderatore&Neswer
Sviluppatore

1 utente apprezza questo post
Eh ma che c'entra, scusa ma se uno non conosce java difficilmente si riuscirebbe a spiegare concetti come le istruzioni condizionali, i cicli, etc...

Giusto per farvelo sapere, semplificazione e traduzione di if, else:
se (condizione == vera) { eseguifunzione(); } altrimenti { eseguilasecondafunzione(); }
~ RoboticStaff 2.0 è arrivato! ~
Proteggi il tuo server dallo spam e rispondi automaticamente ai tuoi player!
1 utente apprezza questo post
@|24yN Fatto una altra parte di guida dove spiego i concetti di if ed else. Tongue
Non rispondo a richieste di supporto in privato!

Moderatore&Neswer
Sviluppatore

vedo molto dura, come dice @l24yN spiegare in 3 paragrafi i concetti della programmazione Big Grin diciamo che prima di questa guida c'è la guida base ai concetti di programmazione!

Prima lezione: cos'è una variabile? e una costante? e i tipi di ciclo?

seconda lezione: cosa vuol dire programmare xD
@andreaci  -  italian-minecraft.net
2 utenti apprezzano questo post
Seconda parte della guida.... Big Grin.
Non rispondo a richieste di supporto in privato!

Moderatore&Neswer
Sviluppatore

serve almeno 1 mese di studio di java, perlomeno la parte procedurale.

Tanto senza avere queste nozioni, colui che cercherà di imparare si blocchera al sendMessage e non andrà avanti
Ci sono cose che non si possono craftare, per tutto il resto c'è minecraft
@Creeper96 Non necessariamente: chiedimi di programmare qualcosa in Java Tongue. A parte semplici mod e plugin, non ti saprei programmare nulla!
Non rispondo a richieste di supporto in privato!

Moderatore&Neswer
Sviluppatore

+1 meritato grazie
@xCezco Prego! Wink Big Grin (Modificato 16/07/2013, 18:04 da ALCC01.)
Non rispondo a richieste di supporto in privato!

Moderatore&Neswer
Sviluppatore

@Creeper96_ Io veramente non sapendo un chez di java mi sono messo a fare un plugin, una mod (ancora non pubblica u_u) e un programmino asd

Sarà perchè conosco abbastanza php, peró anche php l'ho imparato a furia di scrivere codici Smile
~ RoboticStaff 2.0 è arrivato! ~
Proteggi il tuo server dallo spam e rispondi automaticamente ai tuoi player!
@|24yN In effetti, uno può studiare il codice sui libri e sulle guide, ma non potrà mai dire che lo conosce senza prima averne avuto VERAMENTE bisogno (tipica frase epica del Vecchio Saggio....)Tongue
Non rispondo a richieste di supporto in privato!

Moderatore&Neswer
Sviluppatore

Discussioni simili
Risposta di Delphy_Aura
25/04/2019, 11:29
 
[Problema] Plugin server
2 313
Risposta di FireMC34
14/04/2019, 13:01
 
[Domanda] Plugin TopDonatori
Risposta di LelloYT
09/04/2019, 14:01

Utente(i) che stanno guardando questa discussione: 1 Ospite(i)