Når vi først er i gang, her er en trinn-for-trinn fremgangsmåte som funker. Det er godt mulig det går an å gjøre det enklere med GitHub, i så fall må noen gjerne skrive om det.
0. Koden trenger JDK 1.7 for å fungere. Seriøst, jeg får det ikke til med 1.8. Vet du hvordan? Skriv i vei. Jeg må bruke 1.7.
1. Last ned og installer Eclipse fra
http://eclipse.org2. File -> New -> Java Project -> Gi den et navn (f.eks. "TipsPlugin")
3. Høyreklikk på prosjektet, Properties. Klikk på "Java Build Path", "Libraries". "Add External JARs...". For å lage en Bukkit/Spigot plugin må du henvise til bukkit-x.x.x-Rx.x.jar som du må laste ned fra nettet. Jo nyere versjon jo bedre. Dette er API'et til Bukkit/Spigot, dvs. den inneholder hver eneste metode du har tilgang til inne i Minecraft-serveren. Hvis dette ikke sier deg noe, slapp av, du vil se det etterhvert.
4. Høyreklikk på prosjektet, New -> File -> "plugin.yml". Bukkit/Spigot krever at alle plugins har denne filen. Kopier eksisterende eller Google for å se hva den må inneholde.
5. Høyreklikk på prosjektet, New -> Package -> f.eks. "no.atc.floyd.bukkit.tips". Dette navnet må være unikt fordi det danner ditt eget "namespace" i Java. Bruk gjerne "no.atc.DITTNAVN.blablabla", alle mine starter med "no.atc.floyd.blablabla".
6. For hver klasse (= java-fil), høyreklikk på "package" -> New -> Class -> Navn på klassen, f.eks. "TipsPlugin". Må matche navnet på java-filen, i dette tilfellet "TipsPlugin.java".
7. Alle java-klasser må ha en "constructor", denne må være "public", returnerer ingenting og inneholder alle attributter, metoder og funksjoner for klassen. En plugin til Bukkit/Spigot må dessuten ha en del andre egenskaper så her bør du ta utgangspunkt i eksisterende kode.
8. I prinsippet må en plugin ha følgende metoder:
- onEnable() som kalles opp når Bukkit/Spigot laster den inn
- onDisable() som kalles opp når Bukkit/Spigot avslutter
- @EventHandler metoder for å håndtere Events
9. Hvis du endrer "plugin.yml" må du trykke F5 for å refreshe prosjektet. Ikke spør meg hvorfor.
10. For å kompilere en JAR-fil, høyreklikk på prosjektet -> Export. Velg "JAR file", Next, angi filnavn.jar (NB! Pass på når du bytter mellom prosjekter!!!), kryss av for "Export generated class files" og "Export Java source files", Finish.
Alle event handlers merkes med @EventHandler, en makro definert i bukkit-*.jar som gjør den nødvendige magien for at pluginen skal fungere. Alle metoder med denne makroen må akseptere et objekt arvet fra klassen "org.bukkit.event.Event". Det er hundrevis av dem og du kan finne oversikter over dem på nettet. Ideen med event-klassen er at event-objektet inneholder alt du trenger å vite om eventen, f.eks. hvilken spiller eller blokk som er involvert. Dersom eventen kan kanselleres (f.eks. PlayerLoginEvent eller BlockPlaceEvent) så inneholder den også metoder for dette.
Resten dreier seg bare om å utforske API'et og skrive robust kode med skikkelig feilhåndtering. Ta høyde for at filer ikke finnes, navn er feil stavet, parametere mangler eller er av feil type osv.
Alle oppslag du gjør mot Bukkit/Spigot KAN returnere NULL, dvs. en ugyldig peker som vil få pluginen til å tryne hvis du forsøker å bruke den. Eksempel:
Player p = event.getPlayer();
Location loc = p.getLocation(); // <-- Hvis "event" ikke inneholder en gyldig spiller vil dette tryne
World w = loc.getWorld(); // <-- Hvis spilleren ikke er ferdig innlogget vil dette tryne
// gjør noe med w
Sammenlign med dette:
Player p = event.getPlayer();
if (p != null) {
Location loc = p.getLocation();
if (loc != null) {
World w = loc.getWorld();
// gjør noe med w
} else {
getLogger().info("Ugyldig lokasjon for spiller "+p.getName());
}
} else {
getLogger().info("Ugyldig spiller");
}