A note about "Ghost Players"

Discussion in 'Resources' started by Jake0oo0, Jun 18, 2013.

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

    Jake0oo0

    tl;dr: Developers are having issues with Transparent Players with Scoreboard API, so friendlyFire MUST be set to true for that team.

    I've seen multiple threads about developers having issues with creating Ghost Players with the Scoreboard/Teams API.

    There was a bug in 1.5 that caused this not to work if friendlyFire was set to false for a team.

    That bug can be found here:
    https://mojang.atlassian.net/browse/MC-11385

    This of course was fixed in a snapshot leading up to the future 1.6, but must currently be worked around.

    This is the code I used to test this:
    http://pastebin.com/ArjsxLwG#
    Code:
    package net.ixios.mc;
     
    import org.bukkit.Bukkit;
    import org.bukkit.OfflinePlayer;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    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{
            public ScoreboardManager manager;
            public Scoreboard board;
            public Team redTeam;
            public Team blueTeam;
     
            public void onEnable(){
                    manager = Bukkit.getScoreboardManager();
                    board = manager.getNewScoreboard();
                    redTeam = board.registerNewTeam("red");
                    blueTeam = board.registerNewTeam("blue");
                    redTeam.setAllowFriendlyFire(true);
                    blueTeam.setAllowFriendlyFire(true);
                    redTeam.setCanSeeFriendlyInvisibles(true);
                    blueTeam.setCanSeeFriendlyInvisibles(true);
                    redTeam.setDisplayName("Red");
                    blueTeam.setDisplayName("Blue");
            }     
            public boolean onCommand(CommandSender sender, Command cmd, String label,
                            String[] args) {
                    if(cmd.getName().equalsIgnoreCase("add")){
                            Player p = (Player)sender;
                            p.setScoreboard(board);
                            redTeam.addPlayer(p);
                            for(OfflinePlayer op : redTeam.getPlayers()){
                                    String s = op.getName();
                                    p.sendMessage(s);
                            }
                    }
                    return false;
            }
    }
    Again the fix for this is that: For Transparent Players to work, friendlyFire MUST be set to true!
     
Thread Status:
Not open for further replies.

Share This Page