Programming a Plugin

Discussion in 'Plugin Development' started by Countdown2000, Sep 3, 2011.

Thread Status:
Not open for further replies.
  1. Offline

    Countdown2000

    I want to program a plugin and I know how to do it with the command input by a player, but what about regions or how to do that the volume

    ps.: my english is bad .... sorry :oops:


    ich möchte ein plugin programmieren und ich weis wie man das macht mit der befehl eingabe durch einen spieler aber was ist mit regionen oder volumen wie geht das den
     
  2. What do you mean with regions and volumes? WorldGuard regions? BananaRegion regions? any kind of area? ...
    Was meinst du mit Reguionen und Volumen? WorldGuard Regionen? BananaRegion regionen? Irgendeinen Bereich auf der Map?
     
  3. Offline

    Countdown2000

    regionen wie bei worldedit also man makiert einen punkt oder gib die koordinate ein und dann noch eine zweite und dazwischen das volumen wird definiert mit einem befehl zum z.b. heilungsbereich oder tot oder inventory löschen oder sonst was
     
  4. Dann finde einen Weg an die Koordinaten zweier Ecken zu kommen (z.B. onPlayerInteract()) und sobald ein Player sich dort rein bewegt (onPlayerMove() + etwas Mathe mit den Koordinaten) initiiere dein Event.

    So find a way to get the coords of two corners (for example onPlayerInteract()) and when a player gets's into that (onPlayerMove() + a bit math with the coordinates) initiate your event.
     
  5. Offline

    Countdown2000

    so meinste das oder wie ?
    public boolean onPlayerInteract() {

    boolean succeed = false;

    "und hier dann die ganze variablen abklappern" z.b. wenn ein spieler auf ein block mit einer feder schlägt makiere block position als erste position
    wenn er dann auf einen zweiten block schlägt als zweiten punkt und wenn er dann /xyungelöst eingibt soll das volumen definiert werden als todeszone oder so

    return succeed;


    seh ich das als neuling in java richtig ?

    oder kannst du mir einen beispiel script geben ? vielleicht :) ??
     
  6. In etwa siehst du das richtig, player nimmt tool X, klickt 2 blöcke an und... naja... nun hast du koordinaten mit denen du weiter arbeiten kannst. Ein beispiel bekommst du jetzt nicht, da ich heut einen höllentag hinter mir hab (hund weg, ...) und... sei froh das ich grad überhaupt antworte...
     
  7. I love how you guys are switching between German and English in your posts :p
     
    ArtemisTheSecond and Kierrow like this.
  8. Offline

    muCkk

    english:
    here is a little example of how it could be done. important sidenote: the PlayerMoveEvent is called very very often, so this could need alot of ressources and cause lag. a better way would be using the scheduler to check every 0.5 seconds or so

    german:
    hier mal ein kleines beispiel wie man es machen könnte. wichtig zu bermeken wäre noch, dass der PlayerMoveEvent sau oft auftritt und das plugin dadurch viele ressourcen verschlingen könnte, so dass der server laggt. alternativ kann man das scheduler system von bukkit benutzen um nur alle 0,5 sekunden oder so den check durchzuführen

    Code:
    Location loc1, loc2;
    
    public boolean onPlayerInteract() {
        // item you want to use for selecting the area
        // gegenstand mit dem der bereich ausgewählt werden soll
        if(player.getItemInHand().getTypeId() == 280) {
                if(event.getAction() == Action.LEFT_CLICK_BLOCK) {
                    loc1 = event.getClickedBlock().getLocation();
                    player.sendMessage("Position 1 set");
                }
                if(event.getAction() == Action.RIGHT_CLICK_BLOCK) {
                    loc2 = event.getClickedBlock().getLocation();
                    player.sendMessage("Position 2 set");
                }
            }
    }
    
    public void onPlayerMove(PlayerMoveEvent event) {
        int x = player.getLocation().getBlockX(),
            y = player.getLocation().getBlockY(),
            z = player.getLocation().getBlockZ();
    
        // check if the location of the player is inside that area, before that make sure loc1 is the location with the higher corrdinates
        // jetzt vergleicht man den standort vom spieler mit dem gespeicherten bereich, vorher musst du gucken, dass die loc1 die größeren korrdinaten hat
        if( x < loc1.getBlockX() && x > loc2.getBlockX()
            && y ...
            && z ... ) {
            //some code
        }
    }
     
  9. @muCkk: Nice. But would't it be less resource hungry if you only save the coordinates and not the whole location of the blocks?
     
  10. Offline

    Countdown2000

    @V10lator danke das du so stetig antwortest hilft mir alles sehrviel weiter (ich lerne noch)
    ps.: hoffe es ist alles in ordnung mit dem hund

    @muCkk danke für diese überaus ausführliche information ich hoffe echt das ich keinen umstände mache
    will halt verstehen lernen wie das alles da funktioniert danke nochmal

    ich hoffe die englischsprachigen forumbesucher nehmen mir das nicht grumm das ich bei deutsch bleibe auch wenn das hier ein englisches forum ist


    werd gleich mal alles ausprobieren und mal sehn an welchem punkt ich dann wieder hängenbleibe ;-)

    @muCkk

    if(event.getAction() == Action.LEFT_CLICK_BLOCK) {
    loc1 = event.getClickedBlock().getLocation();
    player.sendMessage("Position 1 set");
    }
    if(event.getAction() == Action.RIGHT_CLICK_BLOCK) {
    loc2 = event.getClickedBlock().getLocation();
    player.sendMessage("Position 2 set");

    mit dem event.getAction kommt das programmier programm nicht klar muss man dafür vorher was importieren oder sowas ?

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 19, 2016
  11. ;)
     
  12. Offline

    Countdown2000

    soweit sogut ... aber wenn ich das plugin laufen lasse gibt er mir nicht diese message raus und ich weis nicht warum

    also ich seh schon ich muss mal hier mein komplettes test plugin reinschreiben nicht das ich in der grundlage schon ein denkfehler hab ...
    wundert euch aber nicht über was das plugin macht hat nur testzwecke

    Code:
    package me.countdown2000.mostUses;
      
    import javax.tools.JavaFileManager.Location;
    
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class MostUses extends JavaPlugin {
    
        @Override
        public void onDisable() {
    
            System.out.println("das MostUses Plugin ist ausgeschaltet!");
    
        }
    
        @Override
        public void onEnable() {
    
            System.out.println("das MostUses Plugin ist eingeschaltet!");
    
        }
    
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)  {
    
            boolean succeed = false;
    
            if (sender instanceof Player) {
    
                Player player = (Player) sender;
    
                // Konsolenbefehl für Diamantruestung "/iamadmin"
                if (cmd.getName().equalsIgnoreCase("iamadmin"))  {
    
                    if (args.length == 0) {
    
                        player.getInventory().setHelmet(new ItemStack(310, 1));
                        player.getInventory().setChestplate(new ItemStack(311, 1));
                        player.getInventory().setLeggings(new ItemStack(312, 1));
                        player.getInventory().setBoots(new ItemStack(313, 1));
                        player.getInventory().addItem(new ItemStack(276, 1));
                        player.getInventory().addItem(new ItemStack(277, 1));
                        player.getInventory().addItem(new ItemStack(278, 1));
                        player.getInventory().addItem(new ItemStack (279, 1));
                        player.getInventory().addItem(new ItemStack (271, 1));
                        player.getInventory().addItem(new ItemStack (345, 1));
                        player.getInventory().addItem(new ItemStack (287, 1));
    
                        succeed = true;
    
                    } else {
                        player.sendMessage(ChatColor.RED + "Tipp den Befehl richtig ein!");
                        succeed = false;
                    }
                }
    
                // Konsolenbefehl für Heilung "/heilen"
                if (cmd.getName().equalsIgnoreCase("heilen"))  {
    
                    if (args.length == 0) {
    
                        player.setHealth(20);
    
                        succeed = true;
    
                    } else {
                        player.sendMessage(ChatColor.RED + "Tipp den Befehl richtig ein!");
                        succeed = false;
                    }
                }
     
            }
    
            return succeed;
    
        }
    
        Location loc1, loc2;
    
        public boolean onPlayerInteract(PlayerInteractEvent event) {
            Player player = event.getPlayer();
            boolean succeed = false;
    
            // ist der gegenstand ein stock id:280 dann ...
            if (player.getItemInHand().getTypeId() == 280) {
     
                //passiert eine aktion und diese aktion ist ein linksklick dann ...
                if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
                    player.sendMessage(ChatColor.GREEN + "Position 1 gesetzt.");
                    succeed = true;
                }
    
                if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
    
                    loc2 = (Location) event.getClickedBlock().getLocation();
                    player.sendMessage(ChatColor.GREEN + "Position 2 gesetzt.");
                    succeed = true;
                }
      
            }
    
            return succeed;
     
        }
       
    }
    
     
  13. Offline

    muCkk

    Yeah sure, I just wrote that spontaneously to give the idea how something like that can be done.

    @Countdown2000 Die Nachricht bei onEnable() sollte ausgegeben werden, wenn ich nicht grade was übersehe. Hast du denn auch eine plugin.yml datei erstellt und mit in die jar gepackt?
    Die onPlayerInteract Methode sollte in eine eigene Klasse geschrieben werden. Wie das genau funktioniert kannst du dir eigentlich bei jedem Plugin anschauen, im Wiki gibts dazu diese Anleitung und ein Beispiel Plugin mit einem PlayerListener.

    English: The message in the onEnable() method should work, if i didn't overlooked something. Did you create the plugin.yml file for the jar?
    The onPlayerInteract method belongs in a separated class. Examples can be found in any plugin or in Bukkits Docs, there is a tutorial with an example plugin using a PlayerListener
     
  14. Offline

    Countdown2000

    ja den nachrichten davon gehts gut das plugin funktioniert einwandfrei bis auf den abschnitt
    wo es darum geht ich mach linksklick mit dem stock in der hand und der soll mir schreiben
    "Position 1 gesetzt" und das tut er so nicht ! genauso mit rechtsklick für die 2. pos ...

    ja hab eine plugin.yml die sieht so aus:

    Code:
    name: MostUses
    version: 0.2
    description: CommandSammlung
    author: Countdown2000
    website:  http://www.bukkit.org/
    
    main: me.countdown2000.mostUses.MostUses
    
    commands:
      iamadmin:
        description: Diamantruestung geben.
        usage: /<command>
      heilen:
        description: Heilung.
        usage: /<command>
    
    
     
  15. Dann zeig uns doch mal den gesammten code... ;)
     
  16. Offline

    Pencil

    Hm, fuer nen cuboid (also wuerfelform) reichen aber nicht 2 ecken, du musst mit den 2 ecken durch alle punkte loopen sonst wird das nix :D Da du ja die gesamte flaeche brauchst :D
     
  17. i want to learn german language now...xD
     
  18. Offline

    Pencil

    Don't :p It's too complicated and weird. Trust me English is way better :D
     
  19. but...i think its awesome to have different languages...it makes you more smarter...xD...anyway...i just noticed your avatar...you play LOL?
     
  20. Offline

    Pencil

    Yeah, but there are way better languages to pick from :D. Try Chinese, it's probably a lot harder but you can show off to your friends with it :)

    Yeah I still play LOL sometimes :3
     
  21. i will start off in german first...then chinese...then jap...then alien...then i will create my own language...LOL
     
  22. Offline

    Pencil

    What about Na'vi ? http://www.learnnavi.org/
     
  23. Offline

    Pencil

    Look at theire forum, they are actually speaking Na'vi there D: Crazy!

    Anyways, lets stop this.... VERY offtopic :D
     
  24. yeah...lol...we took almost half of this thread
     
  25. Offline

    Countdown2000

    wollte keine sprachdiskusion anstifften .... lol
    ich für meinen teil wünschte ich könnte fließend englisch .. aber dazu brauch ich noch ein wenig ... ist aber in arbeit ... man lernt nie aus ...
    um nochmal zum thema zu kommen:

    ich weis das ich mehr als 2 punkte brauch aber zuersteinmal sollten diese zwei punkte funktionieren bevor man wild weiter programmiert erstrecht als anfänger unter den plugin programmierern ...

    den gesammten code ist das schon hab nix zu verbergen und auch kein plugin damit in der mache was nicht jeder andere 0815 plugin programmierer auch hin bekäm ...
     
  26. Wo ist der gesammte code? Ich sehe nirgends eine package deklaration, import statements, onEnable() und onDisable() ... ;)
     
  27. Offline

    Countdown2000

    hab ich gepostet weiter oben aber ok ... nochmal alles zusammen hier:

    mostuses.java:


    Code:
    package me.countdown2000.mostUses;
    
    import javax.tools.JavaFileManager.Location;
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.plugin.java.JavaPlugin;
    public class MostUses extends JavaPlugin {
        @Override
        public void onDisable() {
            System.out.println("das MostUses Plugin ist ausgeschaltet!");
        }
        @Override
        public void onEnable() {
            System.out.println("das MostUses Plugin ist eingeschaltet!");
        }
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)  {
            boolean succeed = false;
            if (sender instanceof Player) {
                Player player = (Player) sender;
                // Konsolenbefehl für Diamantruestung "/iamadmin"
                if (cmd.getName().equalsIgnoreCase("iamadmin"))  {
                    if (args.length == 0) {
                        player.getInventory().setHelmet(new ItemStack(310, 1));
                        player.getInventory().setChestplate(new ItemStack(311, 1));
                        player.getInventory().setLeggings(new ItemStack(312, 1));
                        player.getInventory().setBoots(new ItemStack(313, 1));
                        player.getInventory().addItem(new ItemStack(276, 1));
                        player.getInventory().addItem(new ItemStack(277, 1));
                        player.getInventory().addItem(new ItemStack(278, 1));
                        player.getInventory().addItem(new ItemStack (279, 1));
                        player.getInventory().addItem(new ItemStack (271, 1));
                        player.getInventory().addItem(new ItemStack (345, 1));
                        player.getInventory().addItem(new ItemStack (287, 1));
                        succeed = true;
                    } else {
                        player.sendMessage(ChatColor.RED + "Tipp den Befehl richtig ein!");
                        succeed = false;
                    }
                }
                // Konsolenbefehl für Heilung "/heilen"
                if (cmd.getName().equalsIgnoreCase("heilen"))  {
                    if (args.length == 0) {
                        player.setHealth(20);
                        succeed = true;
                    } else {
                        player.sendMessage(ChatColor.RED + "Tipp den Befehl richtig ein!");
                        succeed = false;
                    }
                }
    
            }
            return succeed;
        }
        Location loc1, loc2;
        public boolean onPlayerInteract(PlayerInteractEvent event) {
            Player player = event.getPlayer();
            boolean succeed = false;
            // ist der gegenstand ein stock id:280 dann ...
            if (player.getItemInHand().getTypeId() == 280) {
    
                //passiert eine aktion und diese aktion ist ein linksklick dann ...
                if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
                    player.sendMessage(ChatColor.GREEN + "Position 1 gesetzt.");
                    succeed = true;
                }
                if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
                    loc2 = (Location) event.getClickedBlock().getLocation();
                    player.sendMessage(ChatColor.GREEN + "Position 2 gesetzt.");
                    succeed = true;
                }
    
            }
            return succeed;
    
        }
    
    }

    und die plugin.yml


    Code:
    name: MostUses
    version: 0.2
    description: CommandSammlung
    author: Countdown2000
    website:  http://www.bukkit.org/
    
    main: me.countdown2000.mostUses.MostUses
    
    commands:
      iamadmin:
        description: Diamantruestung geben.
        usage: /<command>
      heilen:
        description: Heilung.
        usage: /<command>
     
  28.  
  29. Offline

    chernobyl360

    just use translate.google.com
     
Thread Status:
Not open for further replies.

Share This Page