[NÁVOD] Vytvoření vlastního pluginu

Message
Autor
Uživatelský avatar
siOnzee
Příspěvky: 810
Věk: 22
Registrován: 30 lis 2011, 21:40
Reputation: 5
Bydliště: siOnzee.cz
Kontaktovat uživatele:

[NÁVOD] Vytvoření vlastního pluginu

#1 Příspěvekod siOnzee » 18 kvě 2013, 11:21

Návod jak si vytvořit vlastní plugin

Aktualizováno ke dni 4.9.2017 4:41

Obsah


Úvod
V tomto návodě si ukážeme jaké editory jsou k dispozici, na které dávám já a proč.
Dále se zde seznámíme s používáním Bukkit API, vysvětlíme si co to je, k čemu to je dobré.
Postupně se prokopeme do části kde vytvoříme svůj vlastní plugin, který bude umět vykonat základní příkazy a odposlouchávat základní eventy.

Zvolení IDE aplikace
IDE je Integrated Development Environment. Pro nás to je jednoduše řečeno editor ale pozor. Mezi editorem a IDE je zásadní rozdíl, editor je taktéž poznámkový blok anebo Word.
Co tedy přesně IDE obnáší? Usnadňuje práci programátorům a to tak, že již má v sobě zabudovanou programovou logiku. Díky které dokáže rozeznat jestli kód je správně napsaný a kde je chyba.
To by bylo v krátkosti co to znamená, více si o tom můžete přečíst na Wikipedii pokud Vás to zajímá.

Hned ze začátku se nám nabízí spousty editorů, pokusím se tu vypsat takové ty známější, které lidé co znám používají.
Intellij Idea, Netbeans, Eclipse, Sublime

A však já pro tento návod jsem se rozhodl použít Intellij Idea, používám ho už dlouhou dobu a z těchto editorů mi sedl nejlépe.
A to hlavní je, že je zdarma!

Seznámení se s SpigotAPI (BukkitAPI)
Asi mě budete mít za blázna, ale řeknu Vám, že se budete učit BukkitAPI, nikoliv SpigotAPI.
Máme zde různý implementace serverů, z nynějších používaných je Spigot a ten je založený na CraftBukkit.
Popřípadě PaperSpigot který je založený na Spigotu.

Bukkit je tedy API, které umožňuje programátorům vytvořit pluginy pro CraftBukkit server.
API - Application Programming Interface, Lajsky řečeno: Jedná se o knihovnu z které čerpají všechny pluginy a potom server samotný.
Pomocí této knihovny se potom dokáže spojit s každým pluginem a dát ho dostavu načetlého anebo vlastně rovnou ho načíst.
Zapamatujte si: BukkitAPI nemůže být voláno z vedlejších vláken, pouze jen z hlavního!

Více o tom co je to CraftBukkit, Bukkit, Spigot, apod... najdete zde (Anglicky).
Nyní víme co je to Bukkit a proto se můžeme vrhnout na jeho poznání!

Vytvoření projektu
Po spuštění Intellij Idea, uvidíme následující tabulku:

Obrázek

Napravo tedy zvolíme 'Create New Project', kde poté v levé nabídce nalezneme Maven a klepneme na Next.
Nyní zde nalezneme nastavení Manevu, což je GroupId, ArtifactId a Version.

    Groupid
    Označuje skupinu, která zadaný projekt vytváří.
    Vždy se píše malými písmeny a odděluje tečky.
    Dnešním zvykem je vždy první uvést organizaci skupiny (já udávám CZ jako, že jsem Czech a moje webovky končí .cz)
    Jako druhé se pak uvádí jméno autora popř. název skupiny a jako třetí se dává název projektu.

    ArtifactId
    Označuje název projektu, již může obsahovat jakékoliv znaky. (Aspoň tedy doufám že může, nikdy nepoužívám jiné znaky než alfanumerické)

    Version
    Označuje verzi našeho projektu

Obrázek

Po klepnutí na Next uvidíme tabulku o názvu projektu a umístění projektu. To už je na Vás jak uznáte za vhodné, já jsem tedy nechal výchozí hodnoty a potvrdil klepnutím na Finish.
Nyní před sebou uvidíme nově vytvořený projekt, kde se nám automaticky otevře pom.xml projektu (ukazuje se jako název projektu, ne jako pom.xml) ale v souborech to je pom.xml.

Pokud se Vám něco takového neukázalo a nalevo nevidíte ani hierarchii s projektem, tak podržte levý ALT a zmáčkněte '1' ale tu u Esc.
Pokud-li teda ještě nemáme otevřený pom.xml tak ho otevřeme.

Nad </project> nyní přidáme tento kus kódu:
  1. <repositories>
  2.         <repository>
  3.             <id>spigot-repo</id>
  4.             <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
  5.         </repository>
  6.     </repositories>
  7.     <dependencies>
  8.         <!--Spigot API-->
  9.         <dependency>
  10.             <groupId>org.spigotmc</groupId>
  11.             <artifactId>spigot-api</artifactId>
  12.             <version>1.12.1-R0.1-SNAPSHOT</version>
  13.             <scope>provided</scope>
  14.         </dependency>
  15.         <!--Bukkit API-->
  16.         <dependency>
  17.             <groupId>org.bukkit</groupId>
  18.             <artifactId>bukkit</artifactId>
  19.             <version>1.12.1-R0.1-SNAPSHOT</version>
  20.             <scope>provided</scope>
  21.         </dependency>
  22.     </dependencies>

Čerpáno z SpigotMC.org

Takže tedy budeme mít toto:
Obrázek

Tento kód za nás stáhne všechny potřebné knihovny k vývoji Bukkit pluginu.

V levé hierarchii si otevřeme (název projektu) > src > main > java
Obrázek

Klepneme pravým na java složku a najedeme do 'New > Java Class'
Obrázek

Nyní třídu pojmenujeme tak, že začátek bude stejný jako naše GroupID, které jsme zadali při vytváření projektu a lze ho nalézt v pom.xml.
S tím rozdílem za konec přidáme tečku a přidáme název třídy. Název třídy vždy začíná velkým písmenem, neobsahuje mezery a pouze alfanumberické znaky.

Tedy v mém případě: cz.sionzee.joinleft.JoinLeftPlugin

Pokud-li jste udělal správně, uvidíte vlevo podobně hierarchii jako já.
Obrázek

Automaticky se Vám otevře Vámi vytvořená třída s Vašim názvem. V mém připadě to je JoinLeftPlugin.
Teď jste ve fázi, kdy projekt máte vytvořený a prostředí připravené k programování.

Abyste mohli pokračovat dále, musíte mít znalosti jazyka Java.

Vytvoření prvního pluginu
Nyní necháme naší třídu na implementovat abstraktní třídu JavaPlugin a přetížíme onEnable metodu.
Obrázek

Ze začátku pro nás budou podstatné pouze tři metody, které budeme přetěžovat:
    onLoad() - Metoda, která se zavolá, když je plugin načten PluginLoaderem.
    onEnable() - Metoda, která se zavolá, když je plugin zapnut.
    onDisable() - Metoda, která se zavolá, když je plugin vypnut.

Přidejme si tedy do onEnable nějaký debug,
System.out.println("Tohle se ukaze v konzoli, kdyz se server zapne a zrovna nacte tento plugin.");

BukkitPluginLoader potřebuje každý plugin nějak identifikovat, najít jeho EntryPoint (hlavní spouštěcí třídu)
Proto musíme ve složce 'src > main > resources' vytvořit soubor 'plugin.yml', který bude mít následující náležitosti:
    name
    Název pluginu, který bude ukázán v /plugins /pl,

    version
    Verze pluginu

    main
    Entrypoint hlavní třídy, tzn. cesta k hlavní třídě a to v podobě: 'package.classname'

Pak jsou zde další věci jako Depend, SoftDepend, Website, Description, apod... Více zde (anglicky).

Já tam tedy budu mít
  1. name: JoinLeft
  2. version: 1.0
  3. main: cz.sionzee.joinleft.JoinLeftPlugin


Nyní musíme nastavit export pluginu do balíčku .jar.
Klepneme na 'File > Project Structure' (anebo zkratkou CTRL+ALT+SHIFT+S)
Vybereme v Project Settings > Artifacts
Klepneme na PLUS úplně nahoře a vybereme JAR > Empty

Nahoře přejmenujeme z unnamed na název pluginu, který budou alfanumericky, bez háčku a čárek a mezer. Bude to název souboru který bude končit příponou .jar
V Output Layout napravo je Available Elements, uvidíme tam 'Váš název projektu' compile output.
Na tuto položku klepneme několikrát dokud se nepřesune do levé části.
Poté nahoře zaškrtneme 'Include in project build' a potvrdíme přes Apply a OK.

Nyní můžeme sestavit náš plugin a to tak, že nahoře v menu vybereme Build > Build Artifacts..., vybereme název našeho artifactu a klepneme na Build.
Nyní počkáme až se projekt sestaví (na spodní liště uprostřed uvídíme 'build') a kolečko které signalizuje načítání.
Jakmile to zmizí, můžeme se vydat do umístění projektu a tam najdeme složku 'out/artifacts/název artifactu/názevpluginu.jar'
TIP: Když klepnete na jakýkoliv soubor/složku pravým v hierarchii, tak tam máte možnost 'Show In Explorer', to Vás přesměruje o složku výš na složku na kterou jste to dali.
Tedy Vám to otevře umístění toho souboru.

Tento plugin teď můžete hodit do složky plugins a spustit server.
Měli byste vidět výpis, který jste zadali do onEnable().

No nebylo to jednoduché do začátku?

Nejlíp se to naučíte, když si otevřete nějaký open-source plugin a podíváte se jak to má dotyčná osoba udělané, z toho pochopíte nejvíce věcí.

Implementace příkazů do pluginu
Přetížíme metodu onCommand() a budeme odposlouchávat na zavolaný příkaz.
Obrázek
Pokud máte dobrou znalost angličtiny, dokážete vyvodit z toho obrázku, co k čemu slouží.
Pokud ne, tak v Bukkitu to pro Vás bude pruser, všechno tam je totiž pouze anglicky.

Na řádku 17 kontroluji jestli příkaz který byl zavolán je /prikaz a ne třeba /brumbal.
Na řádku 19 kontroluji jestli uživatel co zadává /prikaz má oprávnění JoinLeft.Commands.Prikaz a jestli ho nemá, tak řádek 23 ho o tom informuje.
Na řádku 20 posílám hráči co zadal /prikaz zprávu o tom že vykonal příkaz.
Na řádku 21 Tuto zprávu sděluji všem hráčům co jsou na serveru a v to zprávě zadávám jméno hráče co zadal /prikaz

Další parametry, který jsou zadány za příkazem např: /prikaz parametr1 parametr2 parametr3 parametrN
jsou uloženy v array 'args'. (args = {parametr1, parametr2, parametr3, parametrN})

Každý command musí být evidován v plugin.yml a to tak že tam musí být minimálně jeho jméno a description.
Obrázek

Implementace eventů do pluginu

Nyní si vytvoříme novou třídu (pravý klik na náš package > New > Java Class)
Obrázek

Pojmenujeme jí PlayerListener (třeba)
Tato třída bude implementovat Listener
a budou se do ní přidávat metody s event parametry, každá tato metoda musí obsahovat annotaci @EventHandler a jak již metodu pojmenujete je zcela na Vás.
Obrázek
Seznam těchto všech eventů naleznete zde (anglicky). (Bude jich tam dost chybět ale do začátku než se vyznáte v JavaDocs Vám to bude muset stačit)

Každá třída (cokoliv co implementuje ten Listener) musí být registrována v PluginManageru a k tomu potřebujeme přístup k naší hlavní třídě pluginu.
Proto tedy v onEnable můžeme napsat:
Bukkit.getPluginManager().registerEvents(new PlayerListener(), this);

A tím zaregistrujeme náš odposlouchávač na eventy, které jsme v té třídě určili. (PlayerJoinEvent, PlayerQuitEvent)
PlayerJoinEvent - Zavolá se když se připojí hráč.
PlayerQuitEvent - Zavolá se když se odpojí hráč.

Tipy a Triky
Dopíši v odpoledních hodinách.

Tento návod jsem psal poněkud v rychlosti a to z důvodu že jsem se nudil, dopisuji ho nyní v 4:40AM a až vstanu, určitě tady toho dost ještě upravím.

Stará verze tohoto návodu je zde:
Spoiler: zobrazit
Jak si vytvořit vlastní plugin,
1 Část,

Obsah
    Úvod
    Program
    Bukkit API
    Práce
    Příkazy
    Eventy

Úvod
Určitě chcete dokázat něco více než jen stahovat pluginy a upravovat konfigurační soubory.
Tento návod jsem založil z důvodu, aby jste si mohli zřídit vlastní plugin a mít v tom pořádek.
Budeme potřebovat znalosti Java:

Minimalně znát 8 těchto částí. (je jich 25)

Program
Na internetu existuje mnoho programů v kterých se dá pracovat s API a exportovat do jar.
Já vám ovšem doporučuji Eclipse 32-Bit | 64-Bit, protože jsem ani jiný program nezkoušel.

Bukkit API
Bez Bukkit API by jsme se s vývojem pluginu ani nepohnuli, je potřeba k správně funkčnosti pluginu.
Nejnovější Bukkit API.

Práce
I. Spustíme si Eclipse, poté zvolíme File > New > Java Project.
Obrázek
Pojmenujeme projekt jak chceme aby se náš plugin jmenoval. Poté potvrdíme.

II. Klikneme pravým na projekt a zvolíme Properties.
V levém seznamu vybereme Java Build Path a v záložkách Libraries.
Poté klikneme na Add External JARs..., najdeme soubor API a vložíme.
Obrázek
Dáme ok a tím pádem zavřeme Properties.

III. Klikneme pravým v projektu na src a zvolíme New > Package.
Obrázek
Package je něco jako doména, které by neměla v žádném pluginu chybět.
Můžeme použít například ' <jménoPluginu>(tečka)<jménoAuthora>(tečka)<CZ>(tečka)<main> '
Ve správné formátu tedy ' testplugin.siOnzee.cz.main ' (znovu zmíňuji že tam můžeme napsat cokoliv)
Nesmí to začínat
    org.bukkit
    net.bukkit
    com.bukkit
    net.minecraft
Protože tyto domény jsou již zabrány craftbukkitem.
Vyvarujte se používání háčků a čárek.

IV. Úspěšně jsme připravili program k práci s pluginama. Teď založíme hlavní třídu.
Klikneme pravým na náš package 'testplugin.siOnzee.cz.main' a vybereme New > Class.
Pojmenujeme hlavní třídu, já preferuji název 'Main'. Potvrdíme Finish.
Dávejte si pozor, v Java není Ahoj jako AhOj, má velkou citlivost na velikost písmen.

V. Před sebou by jsme měli vidět

Kód: Vybrat vše

package jménoPackage;

public class jménoTřídy{
   
}


tedy

Kód: Vybrat vše

package testplugin.siOnzee.cz.main;

public class Main {
   
}


Přepíšeme

Kód: Vybrat vše

public class jménoTřídy{


na

Kód: Vybrat vše

public class jménoTřídy extends JavaPlugin implements Listener{


tedy

Kód: Vybrat vše

public class Main extends JavaPlugin implements Listener{


JavaPlugin - Aby náš server soubor.jar zaznamenal jako plugin.
Listener - Poslouchání eventů které právě probíhají (zabijení, chození, připojování).

Pokuď nebudete kod kopírovat, JavaPlugin a Listener budete mít vlnkovaně červeně podrtrženě.
Najedeme na to myší a vybereme Import 'JavaPlugin' (....) to samé s Listener.
Zdali se vám po kliknutí nahoře ukáže

Kód: Vybrat vše

import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

Tak jste postupovali správně.

Klikneme pravým na náš projekt a zvolíme New > File.
Pojmenujeme ho 'plugin.yml' a dáme Finish.
Otevře nebo načte se v nějakým textovým editoru soubor plugin.yml
Zapíšeme do něj:

Kód: Vybrat vše

name: jménoPluginu
main: package.jménoTřídy
version: verze}

V mém případě to platí

Kód: Vybrat vše

name: testPlugin
main: testplugin.siOnzee.cz.main.Main
version: 1.0.0

Verzi můžete psát v jakém koliv číselném formátu,
    version: 1
    version: 1.0
    version: 1.0.0.0.0
Uložíme plugin.yml a zavřeme ho popřípadě v editoru překlepneme na Main.java (nahoře v liště).

Kód: Vybrat vše

@Override
public void onEnable() {
Tahle část se provede když se zapne plugin.
}

@Override
public void onDisable() {
A takhle když se vypne.
}


Chceme-li tedy aby plugin po zapnutí napsal do chatu Plugin blabla, byl spuštěn v verzi.... Zadáme tohle:
POZOR!: Nedáváme mezery, ale používáme tlačítko TAB!

Kód: Vybrat vše

@Override
public void onEnable() {
    Bukkit.broadcastMessage("Plugin [testPlugin] byl zapnut! v " + this.getDescription().getVersion() + ".");
}


Výsledně:

Kód: Vybrat vše

package testplugin.siOnzee.cz.main;

import org.bukkit.Bukkit;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener {
   @Override
   public void onEnable() {
      Bukkit.broadcastMessage("Plugin [testPlugin] byl zapnut! v " + this.getDescription().getVersion() + ".");
   }
}

Tedy po zapnutí pluginu se do chatu napíše
Plugin [testPlugin] byl zapnut! v 1.0.0.

Poté klikneme na náš projekt pravým a zvolíme Export > Java > JAR file
Zaškrtneme políčko s názvem našeho projektu tak aby tam byla fajfka a né obdelník.
Dole dáme Browse, uložíme třeba na plochu a pojmenujem tak jak jsme pojmenovali plugin v plugin.yml Name: tudíž, v mém případě: testPlugin.jar
Soubor.jar poté hodíme do složky plugins a spustíme server.

Myslím že tohle by mohlo být pro začátek všechno, postupně podle nálady sem budu doplňovat věci, v případě otázek se ptejte, velice rád odpovím. Poprosím o překontrolování mé gramatiky, přece jsem Čech, ale stejnak dělám spousty chyb, a špatně skloňuji.

Nejsem žádný profesionál, ale mam za to že tyto informace nejsou mylné a jsou pravdivé.

V případě že jste se z tohoto návodu něco pochytili, dejte karmu :) Chci se ujistit že to mělo cenu dělat.

Obrázky jsou z wikipedia. Text je vlastnoručně psaný, neporušuji tím žádná autorská práva.

Příkazy

Není povinností aby plugin měl příkazy, vždycky se bez nich může obejít.
Do hlavní třídy připíšeme

Kód: Vybrat vše

@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
    if(cmd.getName().equalsIgnoreCase("ahojky")) {
        if(sender.hasPermission("testPlugin.CMD.Ahojky")) {
            return true;
        } else {
            sender.sendMessage(ChatColor.RED + "Nemáte oprávnění."); 
        }
    }
    return false;
}


CommandSender - Kdo odeslal příkaz.
Command - Příkaz který bude vykonán.
label - Zkratka příkazu které byla použita.
args - Array, řada dalších argumentů.

Když hráč zadá do chatu /ahojky a nemá oprávnění 'testPlugin.CMD.Ahojky' vypíše mu to
Nemáte oprávnění. , zdali oprávnění má v chatu se nic nevypíše :) ale! nehodí to Unkown Command, pač příkaz existuje a navracuje ho return.

Pro správnou funkčnost je potřeba do plugin.yml připsat:

Kód: Vybrat vše

permissions:
    permissionProVsechnyOpravneni.*:
        description: "popis"
        children:
            opravneni: true
   opravneni:
      description: popis
      default: false
commands:
    příkaz:
      description: popis
      permission: oprávnění


Takže to bude:

Kód: Vybrat vše

permissions:
    testPlugin.*:
        description: "Veskera Prava"
        children:
            testPlugin.CMD.Ahojky: true
   testPlugin.CMD.Ahojky:
      description: FoE CMD
      default: false
commands:
    ahojky:
      description: testPlugin CMD
      permission: testPlugin.CMD.Ahojky

testPlugin.* - Je celkové oprávnění které jsou v Children.
Children - Zdě by jste měli správně napsat všechny oprávnění.
default: false/true - True = Pravdivá, ANO,,,, False = Lež, NE.
když default je true příkaz bude moc použít každý.
když false je potřeba oprávnění.

Výslední můj kod tedy prozatím vypadá takto.

Kód: Vybrat vše

package testplugin.siOnzee.cz.main;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener {
   @Override
   public void onEnable() {
      Bukkit.broadcastMessage("Plugin [testPlugin] byl zapnut! v " + this.getDescription().getVersion() + ".");
   }
   
   @Override
   public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
      if (cmd.getName().equalsIgnoreCase("ahojky")) {
         if (sender.hasPermission("testPlugin.CMD.Ahojky")) {
            return true;
         } else {
            sender.sendMessage(ChatColor.RED + "Nemáte oprávnění.");
         }
      }
      return false;
   }
}


Plugin.yml

Kód: Vybrat vše

name: testPlugin
main: testplugin.siOnzee.cz.main.Main
version: 1.0
author: siOnzee
website: 'http://www.frelania.eu/'
permissions:
    testPlugin.*:
        description: "Vsechny Prava."
        children:
            testPlugin.CMD.Ahojky: true
    testPlugin.CMD.Ahojky:
      description: testPlugin CMD
      default: false
commands:
    Ahojky:
      description: testPlugin CMD
      permission: testPlugin.CMD.Ahojky


Příklad příkazu na Teleport:

Kód: Vybrat vše

@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
   if (cmd.getName().equalsIgnoreCase("tp")) {
      Player player = (Player) sender;
      Player target = Bukkit.getPlayer(args[0]);
      if (target != null) {
         player.teleport(target);
      } else {
         sender.sendMessage(args[0] + " není online.");
      }
      return true;
   }
   return false;
}


Player player = (Player) sender; - Přetypoval jsem sender na třídu Player, abych snim mohl pracovat.
Player target = Bukkit.getPlayer(args[0]); - Převezmeme z příkazu jméno hráče /tp zdeJeArgs[0] zdeJeArgs[1] zdeJeArgs[2] atd....
Každá mezera odděluje Argument.

Permission funguje na všechny pluginy. PermissionsEX, GroupManager.....


Eventy
DEVELOPMENT

Dostal jsem žádost abych udělal video, jak vytvářím nějakej plugin. Zkusim se nad tím zamyslet a uvidí se.
Naposledy upravil(a) siOnzee dne 04 zář 2017, 04:52, celkem upraveno 12 x.

Uživatelský avatar
majky249
Příspěvky: 55
Věk: 21
Registrován: 19 pro 2013, 16:00
Reputation: 0
Kontaktovat uživatele:

Re: [NÁVOD] Vytváříme plugin.

#2 Příspěvekod majky249 » 22 pro 2014, 22:48

Ahoj,
Mohl by si mi prosím poradit, jak udělat, aby když zadám nějaký příkaz, aby se vyvolal příkaz z jiného pluginu? Děkuji.
Obrázek

Uživatelský avatar
DenOwq
Příspěvky: 2704
Věk: 22
Registrován: 06 bře 2014, 21:26
Reputation: 2

Re: [NÁVOD] Vytváříme plugin.

#3 Příspěvekod DenOwq » 22 pro 2014, 23:01

Nemyslím si že siOnzee (autor) bude někdy v tomto návodu pokračovat, ale já ti to za něj napíšu.

Jednoduše jde použít

Kód: Vybrat vše

Bukkit.dispatchCommand(odesilatel, prikaz);

při použití v normální kodu se odesilatel používá konzole

Kód: Vybrat vše

Bukkit.dispatchCommand(Bukkit.getConsoleSender(), prikaz);

příkaz se udává jako v konzoli, takže bez / a musí byt uveden jako string.

nějaká ukázka:

    Kód: Vybrat vše

    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "ban " + hrac.getName() + " cheatovani");

    Kód: Vybrat vše

    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "broadcast " + hrac.getName() + " vyhral jackpot díky hrači DenOwq.");
Muhahha.

Uživatelský avatar
majky249
Příspěvky: 55
Věk: 21
Registrován: 19 pro 2013, 16:00
Reputation: 0
Kontaktovat uživatele:

Re: [NÁVOD] Vytváříme plugin.

#4 Příspěvekod majky249 » 22 pro 2014, 23:08

Děkuji, za pomoc, dávám k+. :)


//EDIT: Poslední příspěvky se necitují, příště si dej pozor - DO (DenOwq)

Uživatelský avatar
mannyvee
Příspěvky: 1074
Věk: 20
Registrován: 28 bře 2015, 13:49
Reputation: 0

Re: [NÁVOD] Vytváříme plugin.

#5 Příspěvekod mannyvee » 08 bře 2016, 23:50

Zdarec, chci se zeptat ohledně Eclipse: Po vytvoření názvu pluginu se mi nalevo pak neukáže taková ta tabulka jak je zde v bodě II:
"II. Klikneme pravým na projekt a zvolíme Properties.
V levém seznamu vybereme Java Build Path a v záložkách Libraries." - Má se to někde otevřít osamoceně nebo by se to mělo otevřít automaticky? Já s programováním začínám, tudíž to zatím ještě nevím :)
+ Neposlal by mi někdo stránku s Bukkit API pro nejnovější verze?

vojtamaniak
Příspěvky: 3512
Věk: 20
Registrován: 18 úno 2012, 21:02
Reputation: 11

Re: [NÁVOD] Vytváříme plugin.

#6 Příspěvekod vojtamaniak » 08 bře 2016, 23:56

@mannyvee, nějak nechápu co nechápeš :)

API pro bukkit snad už není, pokud se něco nezměnilo. Spigot api by mělo být zde: https://hub.spigotmc.org/javadocs/spigot/

Uživatelský avatar
Cernokneznik
Příspěvky: 855
Věk: 21
Registrován: 17 črc 2012, 20:23
Reputation: 1
Bydliště: Praha
Kontaktovat uživatele:

Re: [NÁVOD] Vytváříme plugin.

#7 Příspěvekod Cernokneznik » 09 bře 2016, 00:02

Když už jste toto téma opět oživily a jedná se o programování v Javě... Doporučí mi někdo kde najdu návody jak napsat android appku? Jen jednoduchá věc bez GUI. Konkrétně potřebuji udělat něco co mi "pošle" falešnou SMS od DPP s náhodně vygenerovaným kódem jízdenky a zároveň mi bude ukazovat objednávkovou zprávu v odeslaných bez toho aby se ve skutečnosti odeslala...
Poslední týden se rojí revizoři na každém Pražském rohu, dostal jsem dvě pokuty za poslední dva dny...
Díky!
Elkia.club - A gaming club with it's own vanilla survival Minecraft server!
Obrázek apply here

Uživatelský avatar
mannyvee
Příspěvky: 1074
Věk: 20
Registrován: 28 bře 2015, 13:49
Reputation: 0

Re: [NÁVOD] Vytváříme plugin.

#8 Příspěvekod mannyvee » 09 bře 2016, 00:11

@vojtamaniak: Díky za tu Apku :)
Spíše nevím jak na tu tabulku vlevo která je v bodě II kde si vybíráš z různých bodů
(Resource, Builders, Java Build Path, Java Code Style, Java Compiler, apod..)
Nevím jak to vysvětlit.. :D Prostě v bodě 2 jak je tabulka nalevo s těmito dalšími body k výběru, nevím kde bych ji měl najít :/

Uživatelský avatar
mjezek
Příspěvky: 3
Registrován: 22 srp 2016, 18:07
Reputation: 2
Bydliště: V České republice
Kontaktovat uživatele:

Re: [NÁVOD] Vytváříme plugin.

#9 Příspěvekod mjezek » 03 zář 2017, 14:17

Super!
Konečně nějaký návod, který je použitelný :)
Moc díky

Uživatelský avatar
siOnzee
Příspěvky: 810
Věk: 22
Registrován: 30 lis 2011, 21:40
Reputation: 5
Bydliště: siOnzee.cz
Kontaktovat uživatele:

Re: [NÁVOD] Vytváříme plugin.

#10 Příspěvekod siOnzee » 04 zář 2017, 02:10

Ahoj, tento návod je už poněkud zastaralý ale stále funkční.
Určitě tu chybí spousty věci jakož například, jak nastavit editor (ide), který zvolit apod...

Teď někdy v brzké době se pokusím tento návoz zrenovovat a dodat taky spousty tipů a triků, poukázat na pár svých vychytávek, které jsem za tu dobu udělal.
Když nebudu líný, tak i udělám návod na ty základy Javy (takový primitivní, ale příjde mi hloupost to dělat, když už je to tam tak hezky napsané). Vzal bych to akorát jen víc po lopatě.

Budu rád když napíšeš co jsi si z toho odnesl, co jsi nepochopil a co tu chybí. Při renovaci na to pomyslím a něco s tím udělám.

s pozdravem
siOnzee


Zpět na „Návody“

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host