ServerPlugin ScoreboardManger: Teams

Dieses Thema im Forum "Programmierung" wurde erstellt von MrPyro13, 8. September 2014.

  1. MrPyro13
    Offline

    MrPyro13

    Registriert seit:
    29. April 2013
    Beiträge:
    829
    Minecraft:
    MrPyro13
    Hallo,

    was ist an diesem Code falsch? Er ist nur ein Test, funktioniert aber nicht:
    Ich möchte, dass man beim Joinen in das Team Rot gesetzt wird und mit dem /myteam Befehl wird geschaut, ob der Spieler im Team Rot bzw Blau ist.
    (Ich weiß es ist sinnlos, aber es ist nur ein Test)

    Code (Text):
    1.  
    2. package de.mrpyro13.bf_tdm;
    3.  
    4. import org.bukkit.command.Command;
    5. import org.bukkit.command.CommandExecutor;
    6. import org.bukkit.command.CommandSender;
    7. import org.bukkit.entity.Player;
    8.  
    9. public class MyTeam implements CommandExecutor {
    10.  
    11.     //MAIN IMPORT - CommandExecutor
    12.     private Main main;
    13.     public MyTeam(Main plugin){
    14.         this.main = plugin;
    15.     }
    16.  
    17.     @Override
    18.     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    19.         Player p = (Player) sender;
    20.      
    21.         if (main.RED.getPlayers().contains(p.getName())) {
    22.          
    23.             p.sendMessage("§cDu bist Team Rot");
    24.          
    25.         }
    26.      
    27.         if (main.BLUE.getPlayers().contains(p.getName())) {
    28.          
    29.             p.sendMessage("§9Du bist Team Blau");
    30.          
    31.         }
    32.      
    33.         return true;
    34.     }
    35.  
    36. }
    37.  

    Code (Text):
    1.  
    2. package de.mrpyro13.bf_tdm;
    3.  
    4. import java.io.File;
    5.  
    6. import org.bukkit.Bukkit;
    7. import org.bukkit.configuration.file.FileConfiguration;
    8. import org.bukkit.configuration.file.YamlConfiguration;
    9. import org.bukkit.inventory.Inventory;
    10. import org.bukkit.plugin.java.JavaPlugin;
    11. import org.bukkit.scoreboard.Scoreboard;
    12. import org.bukkit.scoreboard.ScoreboardManager;
    13. import org.bukkit.scoreboard.Team;
    14.  
    15. public class Main extends JavaPlugin {
    16.  
    17.     @Override
    18.     public void onDisable() {
    19.         System.out.println("[Battelfield - TDM] Plugin wurde beendet");
    20.     }
    21.  
    22.     @Override
    23.     public void onEnable() {
    24.         System.out.println("[Battelfield - TDM] Plugin wurde gestartet");
    25.      
    26.         //Config Laden
    27.         loadConfig();
    28.      
    29.         //Messages + Levels Laden
    30.      
    31.         //Command Imports
    32.         this.getCommand("myteam").setExecutor(new MyTeam(this));
    33.      
    34.         //Listener Imports
    35.         new Listener_DeathMessage(this);
    36.         new Listener_Join(this);
    37.         new Listener_Quit(this);
    38.      
    39.         //Extra
    40.         ScoreboardManager manager = Bukkit.getScoreboardManager();
    41.         Scoreboard board = manager.getNewScoreboard();
    42.      
    43.         RED = board.registerNewTeam("§4Rot");
    44.         BLUE = board.registerNewTeam("§9Blau");
    45.      
    46.     }
    47.  
    48.     //FILE IMPORT
    49.  
    50.     File data = new File("plugins/_Database_", "data.yml");
    51.     FileConfiguration data_cfg = YamlConfiguration.loadConfiguration(data);
    52.  
    53.     File levels = new File("plugins/_Database_", "levels.yml");
    54.     FileConfiguration lvl_cfg = YamlConfiguration.loadConfiguration(levels);
    55.  
    56.     File messages = new File("plugins/Battelfield-TDM", "messages.yml");
    57.     FileConfiguration msg_cfg = YamlConfiguration.loadConfiguration(messages);
    58.  
    59.     //Extra
    60.     public Inventory inv;
    61.  
    62.  
    63.     //\\ Public Voids //\\
    64.     public void loadConfig() {
    65.         getConfig().options().copyDefaults(true);
    66.         saveConfig();
    67.     }
    68.  
    69.     public Team RED;
    70.     public Team BLUE;
    71.  
    72. }
    73.  

    Code (Text):
    1.  
    2. package de.mrpyro13.bf_tdm;
    3.  
    4. import org.bukkit.entity.Player;
    5. import org.bukkit.event.EventHandler;
    6. import org.bukkit.event.Listener;
    7. import org.bukkit.event.player.PlayerJoinEvent;
    8.  
    9. public class Listener_Join implements Listener {
    10.    
    11.     //MAIN IMPORT - Listener
    12.     private Main main;
    13.     public Listener_Join(Main plugin) {
    14.         this.main = plugin;
    15.         plugin.getServer().getPluginManager().registerEvents(this, plugin);
    16.     }
    17.    
    18.     @EventHandler
    19.     public void onJoin(PlayerJoinEvent e) {
    20.         Player joiner = e.getPlayer();
    21.        
    22.         main.RED.addPlayer(joiner);
    23.    
    24.     }
    25.    
    26.     //\\ Public Voids //\\
    27.    
    28. }
    29.  
     
    #1
  2. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    Du musst uns den Joinlistener schon zeigen. Du hast nur Command und main gepostet.
     
    #2
  3. MrPyro13
    Offline

    MrPyro13

    Registriert seit:
    29. April 2013
    Beiträge:
    829
    Minecraft:
    MrPyro13
    So, ist mit drin
     
    #3
  4. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    Das sieht doch akzeptabel aus, zumindest auf meinem Handy. Was genau geht denn nicht ? (Befehl an sich, falsches Team...)
     
    #4
  5. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Ich weiß jetzt nicht genau, was dein Problem ist, da es nicht beschrieben wird, aber mir sind zwei Dinge aufgefallen:
    Vielleicht hilft das ganze ja trotzdem weiter.
     
    #5
  6. MrPyro13
    Offline

    MrPyro13

    Registriert seit:
    29. April 2013
    Beiträge:
    829
    Minecraft:
    MrPyro13
    Hallo,

    @xXSasukeXx
    Wenn ich /myteam eingebe kommt keine Nachricht.

    @MiCrJonas1997
    Ich programmiere das für meinen Server, nicht für Bukkit.
    Außerdem ist das nur eine Übergangslösung, da ich es demnächst MySQL fähig machen werde
     
    #6
  7. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Statt "if (main.RED.getPlayers().contains(p.getName())) {", einfach
    "if (main.RED.getPlayers().contains(p)) {", da Team#getPlayers() ein Set<OfflinePlayer> zurückgibt und kein Set<String>. Daher kann der Spielername auch nicht in diesem Set sein.
     
    #7
  8. MrPyro13
    Offline

    MrPyro13

    Registriert seit:
    29. April 2013
    Beiträge:
    829
    Minecraft:
    MrPyro13
    So, neuer Code, neuer Fehler:

    Laut Code sollte man eigentlich ausgeglichen in ein Team joinen. Wenn ich aber nun mit dem ersten Spieler joine, dann joint er jedesmal Team BLUE und joinen ich mit dem zweiten Spieler joint dieser auch Team BLUE, obwohl er eigentlich Team RED joinen soll.
    Warum kann man nur Team BLUE joinen und warum funktioniert das Random Team nicht?

    Code (Text):
    1.  
    2. package de.mrpyro13.bf_tdm;
    3.  
    4. import java.io.File;
    5.  
    6. import org.bukkit.Bukkit;
    7. import org.bukkit.configuration.file.FileConfiguration;
    8. import org.bukkit.configuration.file.YamlConfiguration;
    9. import org.bukkit.inventory.Inventory;
    10. import org.bukkit.plugin.java.JavaPlugin;
    11. import org.bukkit.scoreboard.Scoreboard;
    12. import org.bukkit.scoreboard.ScoreboardManager;
    13. import org.bukkit.scoreboard.Team;
    14.  
    15. public class Main extends JavaPlugin {
    16.  
    17.     @Override
    18.     public void onDisable() {
    19.         System.out.println("[Battelfield - TDM] Plugin wurde beendet");
    20.     }
    21.  
    22.     @Override
    23.     public void onEnable() {
    24.         System.out.println("[Battelfield - TDM] Plugin wurde gestartet");
    25.      
    26.         //Config Laden
    27.         loadConfig();
    28.      
    29.         //Messages + Levels Laden
    30.      
    31.         //Command Imports
    32.      
    33.         //Listener Imports
    34.         new Listener_DeathMessage(this);
    35.         new Listener_Join(this);
    36.         new Listener_Quit(this);
    37.      
    38.         //Extra
    39.         ScoreboardManager manager = Bukkit.getScoreboardManager();
    40.         Scoreboard board = manager.getNewScoreboard();
    41.      
    42.         RED = board.registerNewTeam("§4Rot");
    43.         BLUE = board.registerNewTeam("§9Blau");
    44.      
    45.     }
    46.  
    47.     //FILE IMPORT
    48.  
    49.     File data = new File("plugins/_Database_", "data.yml");
    50.     FileConfiguration data_cfg = YamlConfiguration.loadConfiguration(data);
    51.  
    52.     File levels = new File("plugins/_Database_", "levels.yml");
    53.     FileConfiguration lvl_cfg = YamlConfiguration.loadConfiguration(levels);
    54.  
    55.     File messages = new File("plugins/Battelfield-TDM", "messages.yml");
    56.     FileConfiguration msg_cfg = YamlConfiguration.loadConfiguration(messages);
    57.  
    58.     //Extra
    59.     public Inventory inv;
    60.  
    61.  
    62.     //\\ Public Voids //\\
    63.     public void loadConfig() {
    64.         getConfig().options().copyDefaults(true);
    65.         saveConfig();
    66.     }
    67.  
    68.     public Team RED;
    69.     public Team BLUE;
    70.  
    71. }
    72.  

    Code (Text):
    1.  
    2. package de.mrpyro13.bf_tdm;
    3.  
    4. import java.util.Random;
    5.  
    6. import org.bukkit.Color;
    7. import org.bukkit.Material;
    8. import org.bukkit.entity.Player;
    9. import org.bukkit.event.EventHandler;
    10. import org.bukkit.event.Listener;
    11. import org.bukkit.event.player.PlayerJoinEvent;
    12. import org.bukkit.inventory.ItemStack;
    13. import org.bukkit.inventory.meta.LeatherArmorMeta;
    14.  
    15. public class Listener_Join implements Listener {
    16.  
    17.     //MAIN IMPORT - Listener
    18.     private Main main;
    19.     public Listener_Join(Main plugin) {
    20.         this.main = plugin;
    21.         plugin.getServer().getPluginManager().registerEvents(this, plugin);
    22.     }
    23.  
    24.     @EventHandler
    25.     public void onJoin(PlayerJoinEvent e) {
    26.         Player joiner = e.getPlayer();
    27.         String prefix = main.msg_cfg.getString("messages.global.prefix");
    28.      
    29.         //Team Belegung - ANFANG
    30.         if (main.RED.getSize() <= main.BLUE.getSize()) {
    31.             main.RED.addPlayer(joiner);
    32.         }
    33.         if (main.BLUE.getSize() <= main.RED.getSize()) {
    34.             main.BLUE.addPlayer(joiner);
    35.         }
    36.         if (main.BLUE.getSize() == main.RED.getSize()) {
    37.  
    38.             Random r = new Random();
    39.             int zahl = r.nextInt(2);
    40.          
    41.             switch(zahl) {
    42.             case 0:
    43.                 main.RED.addPlayer(joiner);
    44.                 break;
    45.             case 1:
    46.                 main.BLUE.addPlayer(joiner);
    47.                 break;
    48.              
    49.             }
    50.         }
    51.         //Team Belegung - ENDE
    52.      
    53.         //Team Optionen
    54.         if (main.RED.hasPlayer(joiner)) {
    55.             String team_red_message = main.msg_cfg.getString("messages.system.team_red_message");
    56.             joiner.sendMessage(prefix + " " + team_red_message);
    57.          
    58.             //ITEM - Helm
    59.             ItemStack r_helm = new ItemStack(Material.LEATHER_HELMET);
    60.             LeatherArmorMeta meta_rhelm = (LeatherArmorMeta) r_helm.getItemMeta();
    61.             meta_rhelm.setColor(Color.RED);
    62.             meta_rhelm.setDisplayName("§4US-Schutzhelm");
    63.             r_helm.setItemMeta(meta_rhelm);
    64.             joiner.getInventory().setHelmet(r_helm);
    65.          
    66.             //ITEM - Brustpanzer
    67.             ItemStack r_bp = new ItemStack(Material.LEATHER_CHESTPLATE);
    68.             LeatherArmorMeta meta_rbp = (LeatherArmorMeta) r_bp.getItemMeta();
    69.             meta_rbp.setColor(Color.RED);
    70.             meta_rbp.setDisplayName("§4US-Brustschutz");
    71.             r_bp.setItemMeta(meta_rbp);
    72.             joiner.getInventory().setChestplate(r_bp);
    73.          
    74.             //ITEM - Hose
    75.             ItemStack r_hose = new ItemStack(Material.LEATHER_LEGGINGS);
    76.             LeatherArmorMeta meta_rhose = (LeatherArmorMeta) r_hose.getItemMeta();
    77.             meta_rhose.setColor(Color.RED);
    78.             meta_rhose.setDisplayName("§4US-Schutzhosen");
    79.             r_hose.setItemMeta(meta_rhose);
    80.             joiner.getInventory().setLeggings(r_hose);
    81.          
    82.             //ITEM - Stiefel
    83.             ItemStack r_stiefel = new ItemStack(Material.LEATHER_BOOTS);
    84.             LeatherArmorMeta meta_rstiefel = (LeatherArmorMeta) r_stiefel.getItemMeta();
    85.             meta_rstiefel.setColor(Color.RED);
    86.             meta_rstiefel.setDisplayName("§4US-Schutzstiefel");
    87.             r_stiefel.setItemMeta(meta_rstiefel);
    88.             joiner.getInventory().setBoots(r_stiefel);
    89.          
    90.         }
    91.         if (main.BLUE.hasPlayer(joiner)) {
    92.             String team_blue_message = main.msg_cfg.getString("messages.system.team_blue_message");
    93.             joiner.sendMessage(prefix + " " + team_blue_message);
    94.          
    95.             //ITEM - Helm
    96.             ItemStack b_helm = new ItemStack(Material.LEATHER_HELMET);
    97.             LeatherArmorMeta meta_rhelm = (LeatherArmorMeta) b_helm.getItemMeta();
    98.             meta_rhelm.setColor(Color.BLUE);
    99.             meta_rhelm.setDisplayName("§0RU-Schutzhelm");
    100.             b_helm.setItemMeta(meta_rhelm);
    101.             joiner.getInventory().setHelmet(b_helm);
    102.          
    103.             //ITEM - Brustpanzer
    104.             ItemStack b_bp = new ItemStack(Material.LEATHER_CHESTPLATE);
    105.             LeatherArmorMeta meta_bbp = (LeatherArmorMeta) b_bp.getItemMeta();
    106.             meta_bbp.setColor(Color.BLUE);
    107.             meta_bbp.setDisplayName("§0RU-Brustschutz");
    108.             b_bp.setItemMeta(meta_bbp);
    109.             joiner.getInventory().setChestplate(b_bp);
    110.          
    111.             //ITEM - Hose
    112.             ItemStack b_hose = new ItemStack(Material.LEATHER_LEGGINGS);
    113.             LeatherArmorMeta meta_bhose = (LeatherArmorMeta) b_hose.getItemMeta();
    114.             meta_bhose.setColor(Color.BLUE);
    115.             meta_bhose.setDisplayName("§0RU-Schutzhose");
    116.             b_hose.setItemMeta(meta_bhose);
    117.             joiner.getInventory().setLeggings(b_hose);
    118.          
    119.             //ITEM - Stiefel
    120.             ItemStack b_stiefel = new ItemStack(Material.LEATHER_BOOTS);
    121.             LeatherArmorMeta meta_bstiefel = (LeatherArmorMeta) b_stiefel.getItemMeta();
    122.             meta_bstiefel.setColor(Color.BLUE);
    123.             meta_bstiefel.setDisplayName("§0RU-Schutzstiefel");
    124.             b_stiefel.setItemMeta(meta_bstiefel);
    125.             joiner.getInventory().setBoots(b_stiefel);
    126.          
    127.         }
    128.      
    129.      
    130.     }
    131.  
    132.     //\\ Public Voids //\\
    133.  
    134. }
    135.  

    Code (Text):
    1.  
    2. package de.mrpyro13.bf_tdm;
    3.  
    4. import org.bukkit.entity.Player;
    5. import org.bukkit.event.EventHandler;
    6. import org.bukkit.event.Listener;
    7. import org.bukkit.event.player.PlayerQuitEvent;
    8.  
    9. public class Listener_Quit implements Listener {
    10.  
    11.     //MAIN IMPORT - Listener
    12.     private Main main;
    13.     public Listener_Quit(Main plugin) {
    14.         this.main = plugin;
    15.         plugin.getServer().getPluginManager().registerEvents(this, plugin);
    16.     }
    17.  
    18.     @EventHandler
    19.     public void onQuit(PlayerQuitEvent e) {
    20.         Player quiter = e.getPlayer();
    21.      
    22.         if (main.RED.hasPlayer(quiter)) {
    23.             main.RED.removePlayer(quiter);
    24.         }
    25.         if (main.BLUE.hasPlayer(quiter)) {
    26.             main.BLUE.removePlayer(quiter);
    27.         }
    28.      
    29.     }
    30. }
    31.  
     
    #8
  9. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Wenn in beiden Teams die selbe Anzahl an Spielern ist, wird der Spieler zu beiden Teams hinzugefügt... Versuch mal:
    Code (Text):
    1. if (main.RED.size() < main.BLUE.size())
    2.   main.RED.add(joiner);
    3. else if (main.RED.size() > main.BLUE.size())
    4.   main.BLUE.add(joiner);
    5. else if (Math.random() >= 0.5)
    6.   main.RED.add(joiner);
    7. else
    8.   main.BLUE.add(joiner);
     
    #9
    MrPyro13 gefällt das.
  10. MrPyro13
    Offline

    MrPyro13

    Registriert seit:
    29. April 2013
    Beiträge:
    829
    Minecraft:
    MrPyro13
    *facepalm*
    man ist aber auch bescheurt.....

    Der Random Teamjoin funktioniert jetzt. Doch irgendwie ist es jetzt so, dass man immernoch ohne Teamausgleich joinen kann? 2 Rot und 0 Blau (sh. oben das Problem)
     
    #10
  11. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Welchen Code verwendest du denn jetzt? Kannst du bitte deine aktuellen 3(4) Klassen posten.
     
    #11
  12. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    Der Code den Jonas da hat wuerde ich nicht nutzen. Das ist ziemlich verzwickt und man macht schnell einen Denkfehler.

    Ich handhabe das immer so, dass ich, wenn ich zwei Teams habe mit einem anfange.

    Pseudocode:

    Code (Text):
    1.  
    2. Jointeam = red;
    3.  
    4. onJoin:
    5. wenn(Jointeam = red)
    6.   Joiner.join(Jointeam);
    7.   Jointeam = blue;
    8. Else
    9.   //andersrum
    10. EndeWenn
    11.  
    Bei nem QuitEvent musstes natuerlich manuell aendern.
     
    #12
  13. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Dann musst du aber beim LeaveEvent checken, in welchem Team der Spieler war und wie viele Spieler in beiden Teams sind. Kommt also auf das selbe raus, außer, dass der Code, der Ähnliches macht an zwei verschiedenen Stellen steht, was Fehleranfälliger ist, weil man, wenn man einen Fehler macht, nicht weiß, wo man diesen gemacht hat.

    Das ist nun mal beim Programmieren so.
     
    #13
  14. MrPyro13
    Offline

    MrPyro13

    Registriert seit:
    29. April 2013
    Beiträge:
    829
    Minecraft:
    MrPyro13
    Funktioniert alles! Danke an alle, die mir geholfen haben!

    //CLOSED
     
    #14
    MiCrJonas gefällt das.