Hilfe bei Programmierung von Plugin

Dieses Thema im Forum "Programmierung" wurde erstellt von Fackel2907, 8. August 2013.

  1. Fackel2907
    Offline

    Fackel2907

    Registriert seit:
    8. August 2013
    Beiträge:
    5
    Hallo, ich bin gerade dabei, für meinen neuen Server ein Lobby Plugin zu coden. Soweit funktioniert auch alles. Nur hätte ich zwei Fragen:

    1. Broadcast bzw. Rundruf Befehl

    Soweit habe ich es hinbekommen, das beim Kommando /rundruf [Nachricht], die Nachricht + das erste Argument kommt:

    Also, wie hier http://pastebin.com/fchFj9d7

    Was muss ich also schreiben, um mehr als ein Argument nach /rundruf schreiben zu können und was muss ich machen um den Rundruf auch noch Farbig zu machen? Also zum Beispiel /rundruf &4Hallo &eihr &6Geilen >> [MeXxCraft] Hallo ihr Geilen

    2. Effekte Befehl

    Ich möchte gerne, sobald man /Effekte eingibt, das man anschließend SPEED mit unendlichkeit und "Stufe 3", sowie INVISIBILITY mit undendlichkeit und "Stufe 1" bekommt. Ich habe das auch soweit wie hier (http://pastebin.com/tJJd5bf0) gemacht, jedoch kommt sobald ich /effekte eingebe, nichts im Chat und ich bekomme auch keine Effekte, so wie Fehlermeldungen im Chat oder in der Konsole.

    3. Ich hätte da noch eine Frage, und zwar möchte ich gerne, das man mit einem Kommand alle anderen Spieler unsichtbar und mit dem gleichen Kommand, alle Spieler wieder sichtbar machen kann, ich denke das ist keine große Aufgabe, aber ich komme einfach nicht dahinter.


    Bitte helft mir schnell, und erklärt es gut, ich programmiere erst seit einer Woche :confused:
     
    #1
  2. games6471
    Online

    games6471

    #2
  3. Chrisliebaer
    Online

    Chrisliebaer

    Zu 1:

    Du musst die einzelnen Elemente in dem Array wieder zusammensetzten. Ein StringBuilder und eine Schleife sollten da ausreichen. Ansonsten geht das natürlich auch mit Libraries, wäre aber hier overkill: http://stackoverflow.com/questions/...-elements-with-a-separator-the-oposite-of-spl

    Zu 2:
    Pack Log-Ausgaben in deinen Code, das macht es auch später leichter, dass ganze zu verfolgen, wenn man ein komplexerer Fehler auftritt:
    http://wiki.bukkit.org/Plugin_Tutorial#Logging_a_message

    Zu 3:
    Im Endeffekt frägst du hier, wie du programmierst. Das ist bereits eine Sache, die doch schwerer ist. Du kannst natürlich problemlos einfach alle Spieler anfragen und unsichtbar machen, aber wenn ein neuer Spieler joint, muss dieser auch unsichtbar gemacht werden.
     
    #3
  4. Galliar12
    Offline

    Galliar12

    Registriert seit:
    16. Juli 2011
    Beiträge:
    85
    Minecraft:
    Galliar12
    Zu deiner Frage mit den Argumenten: Man könnte das auch umständlicher mit einem int i, String textderausdenargsbesteht und einer for schleife welche mithilfe des int i alle args die du benötigst rausbekommt :)
     
    #4
  5. MrFlieder
    Offline

    MrFlieder

    Registriert seit:
    30. Dezember 2011
    Beiträge:
    333
    Ort:
    Österreich
    Minecraft:
    MrFlieder
    Zu 1: (lässt sich mit grundlegensten Java-Kenntnissen lösen...)
    Code (Text):
    1. String broadcast = "";
    2. for(String s : args)
    3. {
    4.     broadcast = broadcast + s + " ";
    5. }
    6. Bukkit.broadcastMessage(broadcast);
    Zu 3:

    Befehl
    Code (Text):
    1.  
    2. //Spieler verstecken
    3. for(Player p : Bukkit.getOnlinePlayers())
    4. {
    5.     for(Player p2 : Bukkit.getOnlinePlayers())
    6.     {
    7.         if(!p.getName().equals(p2.getName()))
    8.         {
    9.             p.hidePlayer(p2);
    10.         }
    11.     }
    12. }
    13.  
    14. //Spieler zeigen:
    15. for(Player p : Bukkit.getOnlinePlayers())
    16. {
    17.         for(Player p2 : Bukkit.getOnlinePlayers())
    18.     {
    19.         if(!p.getName().equals(p2.getName()))
    20.         {
    21.             p.showPlayer(p2);
    22.         }
    23.     }
    24. }
    25.  
    JoinListener
    Code (Text):
    1. event.getPlayer().hidePlayer(event.getPlayer());
     
    #5
  6. Cabraca
    Online

    Cabraca

    Code (Text):
    1. StringBuilder sb = new StringBuilder();
    2. for(String s : args)
    3.     sb.append(s).append(" ");
    4. Bukkit.broadcastMessage(sb.toString());
    so wohl eher besser ;)
     
    #6
  7. ScaryHutman
    Offline

    ScaryHutman

    Registriert seit:
    1. Januar 2013
    Beiträge:
    205
    Ort:
    NRW
    Minecraft:
    Scary_Hutman
    Wieso versteckst du den Spieler p vor sich selbst oder habe ich da etwas übersehen?

    Scary_Hutman
     
    #7
  8. Fackel2907
    Offline

    Fackel2907

    Registriert seit:
    8. August 2013
    Beiträge:
    5

    Danke erstmal soweit, ja ich habe den Command in die plugin.yml eingetragen!

    - - - Aktualisiert - - -


    Danke auch an dich, nur soll ich das Spieler zeigen und Spieler verstecken einfach in einen Command einbauen oder kann ich das auch mit dem "Interact_AIR" und dem "interact_block" event oder wie das heißt einfach auf ein Item Legen?
     
    #8
  9. Galliar12
    Offline

    Galliar12

    Registriert seit:
    16. Juli 2011
    Beiträge:
    85
    Minecraft:
    Galliar12
    das kannst du auch auf ein Item legen, solltest aber darauf achten dass du für alle "Online-Player" den Spieler p hidest, bzw anders rum und nicht wie in dem Beispiel alle OnlineSpieler vor sich selbst
     
    #9
  10. Fackel2907
    Offline

    Fackel2907

    Registriert seit:
    8. August 2013
    Beiträge:
    5
    Ich bin einfach zu dumm! ;)

    Also, ich weiß nicht ob das so richtig ist, aber ich hab das jetzt mal so gemacht:
    Code (Text):
    1. package me.Fackel2907.Lobby;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.ChatColor;
    5. import org.bukkit.command.Command;
    6. import org.bukkit.command.CommandSender;
    7. import org.bukkit.entity.Player;
    8. import org.bukkit.event.player.PlayerRespawnEvent;
    9. import org.bukkit.plugin.PluginDescriptionFile;
    10. import org.bukkit.plugin.java.JavaPlugin;
    11. import org.bukkit.potion.PotionEffect;
    12. import org.bukkit.potion.PotionEffectType;
    13.  
    14. public class Lobby extends JavaPlugin {
    15.  
    16.    
    17.     @Override
    18.     public void onDisable() {
    19.     System.out.println("[Lobby] Das Lobby Plugin wurde gestoppt.");
    20.     }
    21.  
    22.     @Override
    23.     public void onEnable() {
    24.  
    25.        
    26.        
    27.     PluginDescriptionFile descFile = this.getDescription();
    28.     System.out.println("[Lobby] Version " + descFile.getVersion());
    29.     System.out.println("[Lobby] Plugin von  " + descFile.getAuthors());
    30.     System.out.println("[Lobby] Das Lobby Plugin wurde geladen.");
    31. }
    32.    
    33.  
    34.    
    35.     public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, String [] args) {
    36.        
    37.        
    38.         Player p = (Player)sender;
    39.         //Kommando Troll
    40.         if(cmd.getName().equalsIgnoreCase("Troll")){
    41.             if(args.length == 0){
    42.                 p.sendMessage(ChatColor.BLUE + "[" + ChatColor.YELLOW + "MeXxCraft" + ChatColor.BLUE + ChatColor.BOLD + "]" + ChatColor.DARK_GREEN +  " Miau. " + ChatColor.DARK_BLUE + "Du hast " + args[0] + ChatColor.DARK_BLUE +  " getrollt.");
    43.                
    44.                
    45.                 return false;
    46.             }
    47.            
    48.         }
    49.         //Rundruf Test
    50.         if(cmd.getName().equalsIgnoreCase("Rundruf")){
    51.             if(args.length == 0){
    52.                 p.sendMessage(ChatColor.BLUE + "[" + ChatColor.YELLOW + "MeXxCraft" + ChatColor.BLUE + ChatColor.BOLD + "]" + ChatColor.DARK_RED + " Fehler beim Senden!" + ChatColor.RED + " Du musst eine Nachricht angeben.");
    53.                
    54.                 return false;
    55.             }
    56.            
    57.             if(args.length > 1){
    58.                 this.getServer().broadcastMessage(ChatColor.BLUE + "[" + ChatColor.YELLOW + "MeXxCraft" + ChatColor.BLUE + "] " + ChatColor.DARK_RED + args[0]);
    59.                 p.sendMessage(ChatColor.BLUE + "[" + ChatColor.YELLOW + "MeXxCraft" + ChatColor.BLUE + "]" + ChatColor.AQUA + " Rundruf erfolgreich abgesendet.");
    60.                
    61.                 return true;
    62.             }
    63.            
    64.            
    65.             if(args.length ==  1){
    66.                 this.getServer().broadcastMessage(ChatColor.BLUE + "[" + ChatColor.YELLOW + "MeXxCraft" + ChatColor.BLUE + "] " + ChatColor.DARK_RED + args[0] + "");
    67.                 p.sendMessage(ChatColor.BLUE + "[" + ChatColor.YELLOW + "MeXxCraft" + ChatColor.BLUE + "]" + ChatColor.AQUA + " Rundruf erfolgreich abgesendet.");
    68.                
    69.                 return true;
    70.             }
    71.         //Effekte  
    72.             if(cmd.getName().equalsIgnoreCase("Effekte")){
    73.                 if(args.length == 0){
    74.                 p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 50000000, 3));
    75.                 p.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 50000000, 3));
    76.                 p.sendMessage(ChatColor.BLUE + "[" + ChatColor.YELLOW + "MeXxCraft" + ChatColor.BLUE + "]" + ChatColor.DARK_RED + "Du hast dir selbst Effekte gegeben.");
    77.                
    78.                 return true;
    79.                
    80.             }
    81.                
    82.             }
    83.            
    84.            
    85.             //Unsichtbar mit Umschalten
    86.                 //Spieler verstecken
    87.             if(cmd.getName().equalsIgnoreCase("Unsichtbar")){
    88.                 p.sendMessage(ChatColor.GOLD + "Du hast alle Spieler Unsichtbar gemacht");
    89.                 for(Player p : Bukkit.getOnlinePlayers())
    90.                 {
    91.                     for(Player p2 : Bukkit.getOnlinePlayers())
    92.                     {
    93.                         p.hidePlayer(p2);
    94.                     }
    95.                   //Spieler zeigen:
    96.                     for(Player p : Bukkit.getOnlinePlayers())
    97.                     {
    98.                         p.showPlayer(p);
    99.                     }    
    100.                 }
    101.                
    102.                
    103.             }
    104.            
    105.            
    106.            
    107.            
    108.            
    109.            
    110.         }
    111.                
    112.         return true;
    113.     }
    114.    
    115.    
    116. }
    Sagt mir doch was ich falsch mache, ich checke selbst nicht mehr durch... :/ :(
     
    #10
  11. MrFlieder
    Offline

    MrFlieder

    Registriert seit:
    30. Dezember 2011
    Beiträge:
    333
    Ort:
    Österreich
    Minecraft:
    MrFlieder
    Code (Text):
    1.  
    2. if(cmd.getName().equalsIgnoreCase("verstecken"))
    3. {
    4.     for(Player p2 : Bukkit.getOnlinePlayers())
    5.     {
    6.         if(!p.getName().equals(p2.getName()))
    7.         {
    8.             p.hidePlayer(p2);
    9.         }
    10.     }
    11. }
    12.  
    13. if(cmd.getName().equalsIgnoreCase("zeigen"))
    14. {
    15.     for(Player p2 : Bukkit.getOnlinePlayers())
    16.     {
    17.         if(!p.getName().equals(p2.getName()))
    18.         {
    19.             p.showPlayer(p2);
    20.         }
    21.     }
    22. }
    23.  
     
    #11
  12. Fackel2907
    Offline

    Fackel2907

    Registriert seit:
    8. August 2013
    Beiträge:
    5


    Dann kommt aber im Log das es die variable p schon gibt und dadurch kann ich gar keinen Befehl mehr ausführen?

    - - - Aktualisiert - - -

    Zwischenstand: Rundruf Befehl funktioniert jetzt auch mit mehreren Argumenten, jedoch funktioniert das verstecken noch nicht. Es kommt nun KEINE FEHLERMELDUNG mehr bei den jeweiligen "Versteck"-Kommandos, sondern einfach keine Message im Chat und in der Konsole steht "Fackel2907 issued command: /verstecken" aber es passiert einfach nichts?
     
    #12
  13. Mrcookie008
    Offline

    Mrcookie008

    Registriert seit:
    15. Dezember 2011
    Beiträge:
    380
    Ort:
    /home
    Minecraft:
    xCookieZz oder Mrcookie008 (Beides Premium)

    Er gibt dir sogar schon den Gesammten Code und du bekommst es immer noch nicht auf die Reihe?

    Lern bitte erstmal Java..

    LG.
     
    #13
  14. MrDr4g0n
    Offline

    MrDr4g0n

    Registriert seit:
    16. Februar 2013
    Beiträge:
    15
    Wenn es die Variable p schon gibt, wie wäre es dann mal sie umzubennen? Und ich kann Mrcookie008 nur zustimmen.
     
    #14
  15. ThunderFlo
    Offline

    ThunderFlo

    Registriert seit:
    22. September 2013
    Beiträge:
    53
    Mach eine neue Klasse auf wo immer du möchtest und dann kannste diesen Code hier einfügen und dann kannst du sogar mit einem Blaze Rod wie bei Gomme Hd's Server Leute verstecken und wieder sichtbar machen. Du musst halt nur das package namen ändern und denn Klassen namen von meinem Code:

    Code (Text):
    1. package DeinPackageName;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.Material;
    5. import org.bukkit.Sound;
    6. import org.bukkit.entity.Player;
    7. import org.bukkit.event.EventHandler;
    8. import org.bukkit.event.Listener;
    9. import org.bukkit.event.block.Action;
    10. import org.bukkit.event.player.PlayerInteractEvent;
    11.  
    12. public class DeinKlassenName implements Listener {
    13.    
    14.     @EventHandler
    15.     public void onHide(PlayerInteractEvent e) {
    16.         Player p = e.getPlayer();
    17.        
    18.         if (e.getMaterial() == Material.BLAZE_ROD) {
    19.             if (e.getAction() == Action.RIGHT_CLICK_AIR) {
    20.                 for (Player hide : Bukkit.getOnlinePlayers()) {
    21.                     p.hidePlayer(hide);
    22.                     p.playSound(p.getLocation(), Sound.LEVEL_UP, 1F, 1F);
    23.                 }
    24.             }
    25.         }
    26.        
    27.         if (e.getMaterial() == Material.BLAZE_ROD) {
    28.             if (e.getAction() == Action.RIGHT_CLICK_BLOCK) {
    29.                 for (Player hide : Bukkit.getOnlinePlayers()) {
    30.                     p.hidePlayer(hide);
    31.                     p.playSound(p.getLocation(), Sound.LEVEL_UP, 1F, 1F);
    32.                 }
    33.             }
    34.         }
    35.        
    36.         if (e.getMaterial() == Material.BLAZE_ROD) {
    37.             if (e.getAction() == Action.LEFT_CLICK_AIR) {
    38.                 for (Player hide : Bukkit.getOnlinePlayers()) {
    39.                     p.showPlayer(hide);
    40.                     p.playSound(p.getLocation(), Sound.LEVEL_UP, 1F, 1F);
    41.                 }
    42.             }
    43.         }
    44.        
    45.         if (e.getMaterial() == Material.BLAZE_ROD) {
    46.             if (e.getAction() == Action.LEFT_CLICK_BLOCK) {
    47.                 for (Player hide : Bukkit.getOnlinePlayers()) {
    48.                     p.showPlayer(hide);
    49.                     p.playSound(p.getLocation(), Sound.LEVEL_UP, 1F, 1F);
    50.                 }
    51.             }
    52.         }
    53.     }
    54. }
    55.  
    Wenn du das jetzt nicht verstanden hast was du machen musst sehe ich keine Hoffnung für dich ;-D

    //EDIT

    Code auch hier überarbeitet.
     
    #15
  16. games6471
    Online

    games6471


    Dein Ernst?
     
    #16
  17. ThunderFlo
    Offline

    ThunderFlo

    Registriert seit:
    22. September 2013
    Beiträge:
    53
    Ja das war mein ernst wenn man Müde ist :-D Ich überarbeite es jetzt :-D

    //EDIT

    Code (Text):
    1. package DeinPackageName;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.Material;
    5. import org.bukkit.Sound;
    6. import org.bukkit.entity.Player;
    7. import org.bukkit.event.EventHandler;
    8. import org.bukkit.event.Listener;
    9. import org.bukkit.event.block.Action;
    10. import org.bukkit.event.player.PlayerInteractEvent;
    11.  
    12. public class DeinKlassenName implements Listener {
    13.    
    14.     @EventHandler
    15.     public void onHide(PlayerInteractEvent e) {
    16.         Player p = e.getPlayer();
    17.        
    18.         if (e.getMaterial() == Material.BLAZE_ROD) {
    19.             if (e.getAction() == Action.RIGHT_CLICK_AIR) {
    20.                 for (Player hide : Bukkit.getOnlinePlayers()) {
    21.                     p.hidePlayer(hide);
    22.                     p.playSound(p.getLocation(), Sound.LEVEL_UP, 1F, 1F);
    23.                 }
    24.             }
    25.         }
    26.        
    27.         if (e.getMaterial() == Material.BLAZE_ROD) {
    28.             if (e.getAction() == Action.RIGHT_CLICK_BLOCK) {
    29.                 for (Player hide : Bukkit.getOnlinePlayers()) {
    30.                     p.hidePlayer(hide);
    31.                     p.playSound(p.getLocation(), Sound.LEVEL_UP, 1F, 1F);
    32.                 }
    33.             }
    34.         }
    35.        
    36.         if (e.getMaterial() == Material.BLAZE_ROD) {
    37.             if (e.getAction() == Action.LEFT_CLICK_AIR) {
    38.                 for (Player hide : Bukkit.getOnlinePlayers()) {
    39.                     p.showPlayer(hide);
    40.                     p.playSound(p.getLocation(), Sound.LEVEL_UP, 1F, 1F);
    41.                 }
    42.             }
    43.         }
    44.        
    45.         if (e.getMaterial() == Material.BLAZE_ROD) {
    46.             if (e.getAction() == Action.LEFT_CLICK_BLOCK) {
    47.                 for (Player hide : Bukkit.getOnlinePlayers()) {
    48.                     p.showPlayer(hide);
    49.                     p.playSound(p.getLocation(), Sound.LEVEL_UP, 1F, 1F);
    50.                 }
    51.             }
    52.         }
    53.     }
    54. }
     
    #17
  18. MrDr4g0n
    Offline

    MrDr4g0n

    Registriert seit:
    16. Februar 2013
    Beiträge:
    15
    Warum nicht einfach:

    if((e.getAction() == Action.LEFT_CLICK_BLOCK) || (e.getAction() == Action.RIGTH_CLICK_BLOCK)) usw
     
    #18
  19. ThunderFlo
    Offline

    ThunderFlo

    Registriert seit:
    22. September 2013
    Beiträge:
    53
    Wenn du das ohne if (e.getMaterial == Material.BLAZE_ROD) { machst dann verschwinden die Spieler wenn du nichts in der Hand hast und zeigen sich wieder. Ich hab das halt sogemacht das wenn man einen Lohnenrute in der Hand hat das die verschwinden und wieder angezeigt werden können. Kannst du dir aussuchen wie du das machst :)
     
    #19