Need Help With Scoreboard Lives Left

Discussion in 'Plugin Development' started by cwhit0814, May 25, 2015.

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

    cwhit0814

    Hi I need help with this scoreboards lives i need it to subtract the one life from a team when someone on that team dies. I've colored the place where I tried to do it.


    Code :
    package me.colby.scoreboard;

    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.entity.Player;
    import org.bukkit.event.entity.PlayerDeathEvent;
    import org.bukkit.scoreboard.DisplaySlot;
    import org.bukkit.scoreboard.Objective;
    import org.bukkit.scoreboard.Score;
    import org.bukkit.scoreboard.ScoreboardManager;
    import org.bukkit.scoreboard.Team;

    import me.colby.Minigame;

    public class Scoreboards extends Minigame {

    public static int redSetScore = 60;
    public static int blueSetScore = 60;
    public static int greenSetScore = 60;
    public static int yellowSetScore = 60;

    public static String redName = "Red Team";
    public static String blueName = "Blue Team";
    public static String greenName = "Green Team";
    public static String yellowName = "Yellow Team";

    public static ScoreboardManager manager = Bukkit.getScoreboardManager();
    public static org.bukkit.scoreboard.Scoreboard board = manager.getNewScoreboard();

    public static Team redTeam = board.registerNewTeam(redName);
    public static Team blueTeam = board.registerNewTeam(blueName);
    public static Team greenTeam = board.registerNewTeam(greenName);
    public static Team yellowTeam = board.registerNewTeam(yellowName);

    public static Objective obj = board.registerNewObjective("lives", "dummy");

    public static Score redScore = obj.getScore(Bukkit.getOfflinePlayer(ChatColor.RED + "Red Lives Left: "));
    public static Score blueScore = obj.getScore(Bukkit.getOfflinePlayer(ChatColor.BLUE + "Blue Lives Left: "));
    public static Score greenScore = obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Green Lives Left: "));
    public static Score yellowScore = obj.getScore(Bukkit.getOfflinePlayer(ChatColor.YELLOW + "Yellow Lives Left: "));

    public static void registerScoreboard(Player p) {
    p.setScoreboard(board);
    obj.setDisplayName("Lives");
    obj.setDisplaySlot(DisplaySlot.SIDEBAR);
    redScore.setScore(redSetScore);
    blueScore.setScore(blueSetScore);
    greenScore.setScore(greenSetScore);
    yellowScore.setScore(yellowSetScore);
    }

    public void onDeath(PlayerDeathEvent e) {
    Player p = (Player) e.getEntity();

    if (redTeam.hasPlayer(p)) {
    redScore.setScore(redScore.getScore() - 1);
    Bukkit.broadcastMessage(ChatColor.RED + p.getName() +
    ChatColor.GOLD + " has been killed!");
    }
    if (blueTeam.hasPlayer(p)) {
    blueScore.setScore(blueScore.getScore() - 1);
    Bukkit.broadcastMessage(ChatColor.BLUE + p.getName() +
    ChatColor.GOLD + " has been killed!");
    }
    if (greenTeam.hasPlayer(p)) {
    greenScore.setScore(greenScore.getScore() - 1);
    Bukkit.broadcastMessage(ChatColor.GREEN + p.getName() +
    ChatColor.GOLD + " has been killed!");
    }
    if (yellowTeam.hasPlayer(p)) {
    yellowScore.setScore(yellowScore.getScore() - 1);
    Bukkit.broadcastMessage(ChatColor.YELLOW + p.getName() +
    ChatColor.GOLD + " has been killed!");
    }

    }
    }
     
  2. Please put your code in code/syntax tags:
    [code=Java] Your code in here [/code]
    or
    [syntax=Java] Your code in here [/code]
    The results will look like this:
    Code:
     Your code in here 
    and
    Code:java
    1. Your code in here
     
  3. @cwhit0814 Oh dear lord that's a lot of "public static"... Anyway:

    It's clear from your code that you are new to Java. Please learn the basics of Java before trying to make plugins, otherwise it doesn't work. Bukkit is made in Java, so learning it is compulsory. If you do not, you will always run into problems and will have no idea how to solve them. I recommend the Oracle tutorials or a good Java book.
     
    mine-care likes this.
  4. Offline

    cwhit0814

    I had two class files that was why I had public static
     
  5. Offline

    meguy26

    @cwhit0814
    No, that is not why. I have 10+ class files and not a single public static. Although static is not detrimental when used in plugins, it can be a bad coding practice when used incorrectly.

    Static:
    Static makes whatever you are modifying (variable, method) have only one instance. Classes in Java are invoked in instances, or objects, and each individual object contains its own "copy" of the code in the Class. Static makes it so every instance of the class shares the static variable/method. Although static is certainly usable and encouraged in certain cases, it is not generally encouraged in member variables.

    Additionally, I have taken the liberty of putting your code into the code brackets so others may be able to help:
    Code:
    package me.colby.scoreboard;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.entity.Player;
    import org.bukkit.event.entity.PlayerDeathEvent;
    import org.bukkit.scoreboard.DisplaySlot;
    import org.bukkit.scoreboard.Objective;
    import org.bukkit.scoreboard.Score;
    import org.bukkit.scoreboard.ScoreboardManager;
    import org.bukkit.scoreboard.Team;
    
    public class Scoreboards extends Minigame {
    
        public static int redSetScore = 60;
        public static int blueSetScore = 60;
        public static int greenSetScore = 60;
        public static int yellowSetScore = 60;
    
        public static String redName = "Red Team";
        public static String blueName = "Blue Team";
        public static String greenName = "Green Team";
        public static String yellowName = "Yellow Team";
    
        public static ScoreboardManager manager = Bukkit.getScoreboardManager();
        public static org.bukkit.scoreboard.Scoreboard board = manager
                .getNewScoreboard();
    
        public static Team redTeam = board.registerNewTeam(redName);
        public static Team blueTeam = board.registerNewTeam(blueName);
        public static Team greenTeam = board.registerNewTeam(greenName);
        public static Team yellowTeam = board.registerNewTeam(yellowName);
    
        public static Objective obj = board.registerNewObjective("lives", "dummy");
    
        public static Score redScore = obj.getScore(Bukkit
                .getOfflinePlayer(ChatColor.RED + "Red Lives Left: "));
        public static Score blueScore = obj.getScore(Bukkit
                .getOfflinePlayer(ChatColor.BLUE + "Blue Lives Left: "));
        public static Score greenScore = obj.getScore(Bukkit
                .getOfflinePlayer(ChatColor.GREEN + "Green Lives Left: "));
        public static Score yellowScore = obj.getScore(Bukkit
                .getOfflinePlayer(ChatColor.YELLOW + "Yellow Lives Left: "));
    
        public static void registerScoreboard(Player p) {
            p.setScoreboard(board);
            obj.setDisplayName("Lives");
            obj.setDisplaySlot(DisplaySlot.SIDEBAR);
            redScore.setScore(redSetScore);
            blueScore.setScore(blueSetScore);
            greenScore.setScore(greenSetScore);
            yellowScore.setScore(yellowSetScore);
        }
    
        public void onDeath(PlayerDeathEvent e) {
            Player p = (Player) e.getEntity();
    
            if (redTeam.hasPlayer(p)) {
                //Problem location
                redScore.setScore(redScore.getScore() - 1);
                Bukkit.broadcastMessage(ChatColor.RED + p.getName()
                        + ChatColor.GOLD + " has been killed!");
            }
            if (blueTeam.hasPlayer(p)) {
                //Problem location
                blueScore.setScore(blueScore.getScore() - 1);
                Bukkit.broadcastMessage(ChatColor.BLUE + p.getName()
                        + ChatColor.GOLD + " has been killed!");
            }
            if (greenTeam.hasPlayer(p)) {
                //Problem location
                greenScore.setScore(greenScore.getScore() - 1);
                Bukkit.broadcastMessage(ChatColor.GREEN + p.getName()
                        + ChatColor.GOLD + " has been killed!");
            }
            if (yellowTeam.hasPlayer(p)) {
                //Problem location
                yellowScore.setScore(yellowScore.getScore() - 1);
                Bukkit.broadcastMessage(ChatColor.YELLOW + p.getName()
                        + ChatColor.GOLD + " has been killed!");
            }
    
        }
    }

    EDIT:
    1. Added comments in spots where the OP had highlighted the text.
    2. Can we see your other classes? Are you even calling the event?
     
  6. Use a instance constructor instead of make all static please
     
  7. Offline

    cwhit0814

    I still need to know how to make the lives on scoreboard go down by one when someone dies plz.
     
  8. Offline

    Dirtcraft24

    First mistake, Code is super repetitive so please fix that and just take this spoonfed (somewhat psuedo) code mate!

    Havent read your code so this will be a for a CTF minigame, k? k.


    int greenteamdeaths = 60;

    @EventHandler
    public static void pDeath(PlayerDeathEvent e){
    Player p = e.getEntity();
    if(greenplayer.getKiller() instanceof Player && redteam.contains(greenplayer.getKiller())){
    greenteamdeaths--;
    }
     
  9. Offline

    cwhit0814


    Code:
    package me.colby;
    
    import me.colby.scoreboard.Scoreboards;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Monster;
    import org.bukkit.entity.Player;
    import org.bukkit.entity.Villager;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.EntityDeathEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Minigame extends JavaPlugin implements Listener {
       
        public void onEnable() {
           
            this.saveDefaultConfig();
           
            getServer().getPluginManager().registerEvents(this, this);
        }
       
       
       
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            //Red
            if (label.equalsIgnoreCase("red")) {
                Player p = (Player) sender;
                if (Scoreboards.blueTeam.hasPlayer(p) || Scoreboards.redTeam.hasPlayer(p) || 
                        Scoreboards.greenTeam.hasPlayer(p) || Scoreboards.yellowTeam.hasPlayer(p)) {
                    p.sendMessage(ChatColor.GOLD + "You are already on a Team!");
                } else if (p.hasPermission("mg.red")) {
                    Scoreboards.redTeam.addPlayer(p);
                   
                    Scoreboards.registerScoreboard(p);
                   
                    p.setDisplayName(ChatColor.RED + "[Red] " + 
                    ChatColor.RESET + p.getName());
                   
                    p.sendMessage(ChatColor.GRAY + "You have joined the " + 
                    ChatColor.RED + Scoreboards.redName + ChatColor.GRAY + "!");
                } else {
                    p.sendMessage(ChatColor.GOLD + "You do not have permission!");
                }
            }
            //Blue
            if (label.equalsIgnoreCase("blue")) {
                Player p = (Player) sender;
                if (Scoreboards.blueTeam.hasPlayer(p) || Scoreboards.redTeam.hasPlayer(p) || 
                        Scoreboards.greenTeam.hasPlayer(p) || Scoreboards.yellowTeam.hasPlayer(p)) {
                    p.sendMessage(ChatColor.GOLD + "You are already on a team!");
                } else if (p.hasPermission("mg.blue")) {
                    Scoreboards.blueTeam.addPlayer(p);
                   
                    Scoreboards.registerScoreboard(p);
                   
                    p.setDisplayName(ChatColor.BLUE + "[Blue] " + 
                    ChatColor.RESET + p.getName());
                   
                    p.sendMessage(ChatColor.GRAY + "You have joined the " + 
                    ChatColor.BLUE + Scoreboards.blueName + ChatColor.GRAY + "!");
                } else {
                    p.sendMessage(ChatColor.GOLD + "You do not have permission!");
                }
            }
            //Green
            if (label.equalsIgnoreCase("green")) {
                Player p = (Player) sender;
                if (Scoreboards.blueTeam.hasPlayer(p) || Scoreboards.redTeam.hasPlayer(p) || 
                        Scoreboards.greenTeam.hasPlayer(p) || Scoreboards.yellowTeam.hasPlayer(p)) {
                    p.sendMessage(ChatColor.GOLD + "You are already on a team!");
                } else if (p.hasPermission("mg.green")) {
                    Scoreboards.greenTeam.addPlayer(p);
                   
                    Scoreboards.registerScoreboard(p);
                   
                    p.setDisplayName(ChatColor.GREEN + "[Green] " + 
                    ChatColor.RESET + p.getName());
                   
                    p.sendMessage(ChatColor.GRAY + "You have joined the " + 
                    ChatColor.GREEN + Scoreboards.greenName + ChatColor.GRAY + "!");
                } else {
                    p.sendMessage(ChatColor.GOLD + "You do not have permission!");
                }
            }
            //Yellow
            if (label.equalsIgnoreCase("yellow")) {
                Player p = (Player) sender;
                if (Scoreboards.blueTeam.hasPlayer(p) || Scoreboards.redTeam.hasPlayer(p) || 
                        Scoreboards.greenTeam.hasPlayer(p) || Scoreboards.yellowTeam.hasPlayer(p)) {
                    p.sendMessage(ChatColor.GOLD + "You are already on a team!");
                } else if (p.hasPermission("mg.yellow")) {
                    Scoreboards.yellowTeam.addPlayer(p);
                   
                    Scoreboards.registerScoreboard(p);
                   
                    p.setDisplayName(ChatColor.YELLOW + "[Yellow] " + 
                    ChatColor.RESET + p.getName());
                   
                    p.sendMessage(ChatColor.GRAY + "You have joined the " + 
                    ChatColor.YELLOW + Scoreboards.yellowName + ChatColor.GRAY + "!");
                } else {
                    p.sendMessage(ChatColor.GOLD + "You do not hae permission!");
                }
            }
            //Leave
            if (label.equalsIgnoreCase("leave")) {
                Player p = (Player) sender;
                if (Scoreboards.blueTeam.hasPlayer(p) || Scoreboards.redTeam.hasPlayer(p) || 
                        Scoreboards.greenTeam.hasPlayer(p) || Scoreboards.yellowTeam.hasPlayer(p)) {
                    Scoreboards.redTeam.removePlayer(p);
                    Scoreboards.blueTeam.removePlayer(p);
                    Scoreboards.greenTeam.removePlayer(p);
                    Scoreboards.yellowTeam.removePlayer(p);
                    p.sendMessage(ChatColor.GOLD + "You have left your team!");
                    Bukkit.broadcastMessage(ChatColor.GRAY + p.getName() + 
                            ChatColor.GOLD + " has left the game");
                } else {
                    p.sendMessage(ChatColor.GOLD + "You are not on a team!");
                }
               
            }
    
            if (label.equalsIgnoreCase("money")) {
                Player p = (Player) sender;
               
                if (args.length == 0) {
                getAmmount(p);
                }
            }
           
           
           
           
           
           
           
            return false;
        }
       
        public void getAmmount(Player p) {
            if (getConfig().getInt(p.getName() + ".Coins") == 0) {
                p.sendMessage(ChatColor.GOLD + "You have " + ChatColor.GREEN + 
            "$" + getConfig().getInt(p.getName() + ".Coins") + ChatColor.GOLD + "!");
            } else {
                p.sendMessage(ChatColor.GOLD + "You have " + ChatColor.GREEN + 
                        "$0" + ChatColor.GOLD + "!");
            }
        }
    
                    @EventHandler
                    public void onJoin(PlayerJoinEvent e) {
                            Player p = e.getPlayer();
             
                            if (!getConfig().contains(p.getName())) {
                                    getConfig().set(p.getName() + ".Coins", 0);
                            }
                    }
             
                    @EventHandler
                    public void onKill(EntityDeathEvent e) {
             
                            if (e.getEntity() instanceof Monster) {
                                    Monster m = (Monster) e.getEntity();
                                    if (m.getKiller() instanceof Player) {
                                            Player p = m.getKiller();
             
                                            giveCoins(p, 200);
                                    }
                            }
             
                            if (e.getEntity() instanceof Villager) {
                                    Villager v = (Villager) e.getEntity();
                                    if (v.getKiller() instanceof Player) {
                                            Player p = v.getKiller();
                                            takeCoins(p, 200);
                                    }
                            }
                    }
             
                    public void giveCoins(Player p, int i) {
                            getConfig().set(p.getName() + ".Coins",
                                            getConfig().getInt(p.getName() + ".Coins", 0) + i);
                            saveConfig();
                            p.sendMessage(ChatColor.GOLD + "§l$" +
                            i + " coins received!");
                    }
             
                    public void takeCoins(Player p, int i) {
                            getConfig().set(p.getName() + ".Coins",
                                            getConfig().getInt(p.getName() + ".Coins", 0) - i);
                            saveConfig();
                            p.sendMessage(ChatColor.RED + "§l$" + i + " coins taken!");
                    }
    }

    Here is my other class if you can help me great but if you can't I don't know what I'm going to do.
     
Thread Status:
Not open for further replies.

Share This Page