• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

ScoreboardManger: Teams

MrPyro13

Workaholic
Registriert
29 April 2013
Beiträge
826
Diamanten
300
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:
package de.mrpyro13.bf_tdm;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

public class MyTeam implements CommandExecutor {
  
    //MAIN IMPORT - CommandExecutor
    private Main main;
    public MyTeam(Main plugin){
        this.main = plugin;
    }

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        Player p = (Player) sender;
      
        if (main.RED.getPlayers().contains(p.getName())) {
          
            p.sendMessage("§cDu bist Team Rot");
          
        }
      
        if (main.BLUE.getPlayers().contains(p.getName())) {
          
            p.sendMessage("§9Du bist Team Blau");
          
        }
      
        return true;
    }

}

Code:
package de.mrpyro13.bf_tdm;

import java.io.File;

import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.inventory.Inventory;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.ScoreboardManager;
import org.bukkit.scoreboard.Team;

public class Main extends JavaPlugin {
  
    @Override
    public void onDisable() {
        System.out.println("[Battelfield - TDM] Plugin wurde beendet");
    }
  
    @Override
    public void onEnable() {
        System.out.println("[Battelfield - TDM] Plugin wurde gestartet");
      
        //Config Laden
        loadConfig();
      
        //Messages + Levels Laden
      
        //Command Imports
        this.getCommand("myteam").setExecutor(new MyTeam(this));
      
        //Listener Imports
        new Listener_DeathMessage(this);
        new Listener_Join(this);
        new Listener_Quit(this);
      
        //Extra
        ScoreboardManager manager = Bukkit.getScoreboardManager();
        Scoreboard board = manager.getNewScoreboard();
      
        RED = board.registerNewTeam("§4Rot");
        BLUE = board.registerNewTeam("§9Blau");
      
    }
  
    //FILE IMPORT
  
    File data = new File("plugins/_Database_", "data.yml");
    FileConfiguration data_cfg = YamlConfiguration.loadConfiguration(data);

    File levels = new File("plugins/_Database_", "levels.yml");
    FileConfiguration lvl_cfg = YamlConfiguration.loadConfiguration(levels);
  
    File messages = new File("plugins/Battelfield-TDM", "messages.yml");
    FileConfiguration msg_cfg = YamlConfiguration.loadConfiguration(messages);
  
    //Extra
    public Inventory inv;
  
  
    //\\ Public Voids //\\
    public void loadConfig() {
        getConfig().options().copyDefaults(true);
        saveConfig();
    }
  
    public Team RED;
    public Team BLUE;

}

Code:
package de.mrpyro13.bf_tdm;

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

public class Listener_Join implements Listener {
   
    //MAIN IMPORT - Listener
    private Main main;
    public Listener_Join(Main plugin) {
        this.main = plugin;
        plugin.getServer().getPluginManager().registerEvents(this, plugin);
    }
   
    @EventHandler
    public void onJoin(PlayerJoinEvent e) {
        Player joiner = e.getPlayer();
       
        main.RED.addPlayer(joiner);
   
    }
   
    //\\ Public Voids //\\
   
}
 
Zuletzt bearbeitet:

MiCrJonas

Threadripper
Registriert
29 Oktober 2012
Beiträge
1.064
Diamanten
0
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.
 

MiCrJonas

Threadripper
Registriert
29 Oktober 2012
Beiträge
1.064
Diamanten
0
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.
 

MrPyro13

Workaholic
Registriert
29 April 2013
Beiträge
826
Diamanten
300
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:
package de.mrpyro13.bf_tdm;

import java.io.File;

import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.inventory.Inventory;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.ScoreboardManager;
import org.bukkit.scoreboard.Team;

public class Main extends JavaPlugin {
  
    @Override
    public void onDisable() {
        System.out.println("[Battelfield - TDM] Plugin wurde beendet");
    }
  
    @Override
    public void onEnable() {
        System.out.println("[Battelfield - TDM] Plugin wurde gestartet");
      
        //Config Laden
        loadConfig();
      
        //Messages + Levels Laden
      
        //Command Imports
      
        //Listener Imports
        new Listener_DeathMessage(this);
        new Listener_Join(this);
        new Listener_Quit(this);
      
        //Extra
        ScoreboardManager manager = Bukkit.getScoreboardManager();
        Scoreboard board = manager.getNewScoreboard();
      
        RED = board.registerNewTeam("§4Rot");
        BLUE = board.registerNewTeam("§9Blau");
      
    }
  
    //FILE IMPORT
  
    File data = new File("plugins/_Database_", "data.yml");
    FileConfiguration data_cfg = YamlConfiguration.loadConfiguration(data);

    File levels = new File("plugins/_Database_", "levels.yml");
    FileConfiguration lvl_cfg = YamlConfiguration.loadConfiguration(levels);
  
    File messages = new File("plugins/Battelfield-TDM", "messages.yml");
    FileConfiguration msg_cfg = YamlConfiguration.loadConfiguration(messages);
  
    //Extra
    public Inventory inv;
  
  
    //\\ Public Voids //\\
    public void loadConfig() {
        getConfig().options().copyDefaults(true);
        saveConfig();
    }
  
    public Team RED;
    public Team BLUE;

}

Code:
package de.mrpyro13.bf_tdm;

import java.util.Random;

import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.LeatherArmorMeta;

public class Listener_Join implements Listener {
  
    //MAIN IMPORT - Listener
    private Main main;
    public Listener_Join(Main plugin) {
        this.main = plugin;
        plugin.getServer().getPluginManager().registerEvents(this, plugin);
    }
  
    @EventHandler
    public void onJoin(PlayerJoinEvent e) {
        Player joiner = e.getPlayer();
        String prefix = main.msg_cfg.getString("messages.global.prefix");
      
        //Team Belegung - ANFANG
        if (main.RED.getSize() <= main.BLUE.getSize()) {
            main.RED.addPlayer(joiner);
        }
        if (main.BLUE.getSize() <= main.RED.getSize()) {
            main.BLUE.addPlayer(joiner);
        }
        if (main.BLUE.getSize() == main.RED.getSize()) {

            Random r = new Random();
            int zahl = r.nextInt(2);
          
            switch(zahl) {
            case 0:
                main.RED.addPlayer(joiner);
                break;
            case 1:
                main.BLUE.addPlayer(joiner);
                break;
              
            }
        }
        //Team Belegung - ENDE
      
        //Team Optionen
        if (main.RED.hasPlayer(joiner)) {
            String team_red_message = main.msg_cfg.getString("messages.system.team_red_message");
            joiner.sendMessage(prefix + " " + team_red_message);
          
            //ITEM - Helm
            ItemStack r_helm = new ItemStack(Material.LEATHER_HELMET);
            LeatherArmorMeta meta_rhelm = (LeatherArmorMeta) r_helm.getItemMeta();
            meta_rhelm.setColor(Color.RED);
            meta_rhelm.setDisplayName("§4US-Schutzhelm");
            r_helm.setItemMeta(meta_rhelm);
            joiner.getInventory().setHelmet(r_helm);
          
            //ITEM - Brustpanzer
            ItemStack r_bp = new ItemStack(Material.LEATHER_CHESTPLATE);
            LeatherArmorMeta meta_rbp = (LeatherArmorMeta) r_bp.getItemMeta();
            meta_rbp.setColor(Color.RED);
            meta_rbp.setDisplayName("§4US-Brustschutz");
            r_bp.setItemMeta(meta_rbp);
            joiner.getInventory().setChestplate(r_bp);
          
            //ITEM - Hose
            ItemStack r_hose = new ItemStack(Material.LEATHER_LEGGINGS);
            LeatherArmorMeta meta_rhose = (LeatherArmorMeta) r_hose.getItemMeta();
            meta_rhose.setColor(Color.RED);
            meta_rhose.setDisplayName("§4US-Schutzhosen");
            r_hose.setItemMeta(meta_rhose);
            joiner.getInventory().setLeggings(r_hose);
          
            //ITEM - Stiefel
            ItemStack r_stiefel = new ItemStack(Material.LEATHER_BOOTS);
            LeatherArmorMeta meta_rstiefel = (LeatherArmorMeta) r_stiefel.getItemMeta();
            meta_rstiefel.setColor(Color.RED);
            meta_rstiefel.setDisplayName("§4US-Schutzstiefel");
            r_stiefel.setItemMeta(meta_rstiefel);
            joiner.getInventory().setBoots(r_stiefel);
          
        }
        if (main.BLUE.hasPlayer(joiner)) {
            String team_blue_message = main.msg_cfg.getString("messages.system.team_blue_message");
            joiner.sendMessage(prefix + " " + team_blue_message);
          
            //ITEM - Helm
            ItemStack b_helm = new ItemStack(Material.LEATHER_HELMET);
            LeatherArmorMeta meta_rhelm = (LeatherArmorMeta) b_helm.getItemMeta();
            meta_rhelm.setColor(Color.BLUE);
            meta_rhelm.setDisplayName("§0RU-Schutzhelm");
            b_helm.setItemMeta(meta_rhelm);
            joiner.getInventory().setHelmet(b_helm);
          
            //ITEM - Brustpanzer
            ItemStack b_bp = new ItemStack(Material.LEATHER_CHESTPLATE);
            LeatherArmorMeta meta_bbp = (LeatherArmorMeta) b_bp.getItemMeta();
            meta_bbp.setColor(Color.BLUE);
            meta_bbp.setDisplayName("§0RU-Brustschutz");
            b_bp.setItemMeta(meta_bbp);
            joiner.getInventory().setChestplate(b_bp);
          
            //ITEM - Hose
            ItemStack b_hose = new ItemStack(Material.LEATHER_LEGGINGS);
            LeatherArmorMeta meta_bhose = (LeatherArmorMeta) b_hose.getItemMeta();
            meta_bhose.setColor(Color.BLUE);
            meta_bhose.setDisplayName("§0RU-Schutzhose");
            b_hose.setItemMeta(meta_bhose);
            joiner.getInventory().setLeggings(b_hose);
          
            //ITEM - Stiefel
            ItemStack b_stiefel = new ItemStack(Material.LEATHER_BOOTS);
            LeatherArmorMeta meta_bstiefel = (LeatherArmorMeta) b_stiefel.getItemMeta();
            meta_bstiefel.setColor(Color.BLUE);
            meta_bstiefel.setDisplayName("§0RU-Schutzstiefel");
            b_stiefel.setItemMeta(meta_bstiefel);
            joiner.getInventory().setBoots(b_stiefel);
          
        }
      
      
    }
  
    //\\ Public Voids //\\
  
}

Code:
package de.mrpyro13.bf_tdm;

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;

public class Listener_Quit implements Listener {
  
    //MAIN IMPORT - Listener
    private Main main;
    public Listener_Quit(Main plugin) {
        this.main = plugin;
        plugin.getServer().getPluginManager().registerEvents(this, plugin);
    }
  
    @EventHandler
    public void onQuit(PlayerQuitEvent e) {
        Player quiter = e.getPlayer();
      
        if (main.RED.hasPlayer(quiter)) {
            main.RED.removePlayer(quiter);
        }
        if (main.BLUE.hasPlayer(quiter)) {
            main.BLUE.removePlayer(quiter);
        }
      
    }
}
 

MiCrJonas

Threadripper
Registriert
29 Oktober 2012
Beiträge
1.064
Diamanten
0
Wenn in beiden Teams die selbe Anzahl an Spielern ist, wird der Spieler zu beiden Teams hinzugefügt... Versuch mal:
Code:
if (main.RED.size() < main.BLUE.size())
  main.RED.add(joiner);
else if (main.RED.size() > main.BLUE.size())
  main.BLUE.add(joiner);
else if (Math.random() >= 0.5)
  main.RED.add(joiner);
else
  main.BLUE.add(joiner);
 

MrPyro13

Workaholic
Registriert
29 April 2013
Beiträge
826
Diamanten
300
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)
 
Zuletzt bearbeitet:

FelixKlauke

Erzengel
Ehem. Teammitglied
Registriert
5 Januar 2014
Beiträge
1.038
Diamanten
299
Minecraft
FelixKlauke
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:
Jointeam = red;

onJoin:
wenn(Jointeam = red)
  Joiner.join(Jointeam);
  Jointeam = blue;
Else
  //andersrum
EndeWenn

Bei nem QuitEvent musstes natuerlich manuell aendern.
 

MiCrJonas

Threadripper
Registriert
29 Oktober 2012
Beiträge
1.064
Diamanten
0
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 ziemlich verzwickt und man macht schnell einen Denkfehler.
Das ist nun mal beim Programmieren so.
 
Oben