Scoreboards

Discussion in 'Plugin Development' started by Fhbgsdhkfbl, Apr 18, 2014.

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

    Fhbgsdhkfbl

    Hey bukkit forums, I'm a bit stumped about these scoreboards
    Also, I want it to display kills, deaths, killstreak they're on (resets when they die to zero), and the amount of money they have, so if you can help me, that'd be greatly appreciated!
    The scoreboard doesn't appear in the sidebar, no errors or anything in console
    Code:
    private Scoreboard board;
        private Objective o;
        private Score s;
     
    @Override
        public void onEnable(){
            registerCommands();
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
            setupEconomy();
            board = Bukkit.getServer().getScoreboardManager().getNewScoreboard();
         
            o = board.registerNewObjective("DemonKits", "dummy");
            o.setDisplayName(ChatColor.RED + "DemonKits");
            o.setDisplaySlot(DisplaySlot.SIDEBAR);
         
            s = o.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GREEN + "Kills:"));
        }
        @EventHandler
        public void onPlayerJoin(PlayerJoinEvent e) {
            Player p = e.getPlayer();
         
            p.setScoreboard(board);
        }
     
  2. Offline

    TGRHavoc

    Fhbgsdhkfbl You need to set the score for the offline player...
     
  3. Offline

    Fhbgsdhkfbl

    TGRHavoc
    I know that, but why isn't the scoreboard showing in the sidebar?
     
  4. Offline

    Heirteir

  5. Offline

    Fhbgsdhkfbl

    Heirteir
    Maybe if you added me back on skype it'd be easier...

    Whole class:
    Code:
    package me.Fhbgsdhkfbl;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import net.milkbowl.vault.economy.Economy;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.block.BlockBreakEvent;
    import org.bukkit.event.block.BlockPlaceEvent;
    import org.bukkit.event.entity.EntityDamageByEntityEvent;
    import org.bukkit.event.entity.EntityDeathEvent;
    import org.bukkit.event.entity.EntityRegainHealthEvent;
    import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
    import org.bukkit.event.entity.FoodLevelChangeEvent;
    import org.bukkit.event.entity.PlayerDeathEvent;
    import org.bukkit.event.player.AsyncPlayerChatEvent;
    import org.bukkit.event.player.PlayerDropItemEvent;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.event.player.PlayerKickEvent;
    import org.bukkit.event.player.PlayerMoveEvent;
    import org.bukkit.event.player.PlayerQuitEvent;
    import org.bukkit.event.server.ServerListPingEvent;
    import org.bukkit.inventory.PlayerInventory;
    import org.bukkit.plugin.RegisteredServiceProvider;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.potion.PotionEffect;
    import org.bukkit.potion.PotionEffectType;
    import org.bukkit.scoreboard.DisplaySlot;
    import org.bukkit.scoreboard.Objective;
    import org.bukkit.scoreboard.Score;
    import org.bukkit.scoreboard.Scoreboard;
    
    public class Main extends JavaPlugin implements Listener {
        
        public List<String> used = new ArrayList<String>();
        public List<String> pvp = new ArrayList<String>();
        public List<String> archer = new ArrayList<String>();
        public List<String> tank = new ArrayList<String>();
        public List<String> viking = new ArrayList<String>();
        public List<String> cheetah = new ArrayList<String>();
        public List<String> rogue = new ArrayList<String>();
        public List<String> shark = new ArrayList<String>();
        public List<String> eagle = new ArrayList<String>();
        List<String> NoLog = new ArrayList<String>();
        List<String> cd = new ArrayList<String>();
        private Map<String, Integer> vikingTasks = new HashMap<String, Integer>();
        
        @Override
        public void onEnable(){
            registerCommands();
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
            setupEconomy();
            board = Bukkit.getServer().getScoreboardManager().getNewScoreboard();
            
            o = board.registerNewObjective("kills", "dummy");
            o.setDisplayName(ChatColor.RED + "DemonKits");
            o.setDisplaySlot(DisplaySlot.SIDEBAR);
            
            s = o.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GREEN + "Kills:"));
        }
        @EventHandler
        public void onPlayerJoin(PlayerJoinEvent e) {
            Player p = e.getPlayer();
            
            p.setScoreboard(board);
        }
        
        public void clearP(Player p) {
            clearInv(p);
            clearPots(p);
            p.setMaxHealth(20D);
            p.setHealth(20D);
            p.setFoodLevel(20);
            p.setLevel(0);
            p.setFireTicks(0);
            p.setExp(0.0F);
        }
        private void clearPots(Player p) {
            for (PotionEffect pot : p.getActivePotionEffects())
                p.removePotionEffect(pot.getType());
        }
        
        private void clearInv(Player p) {
            PlayerInventory inv = p.getInventory();
            inv.clear();
            inv.setArmorContents(null);
        }
        public static Economy economy = null;
        private boolean setupEconomy() {
            RegisteredServiceProvider<Economy> economyProvider = getServer()
                    .getServicesManager().getRegistration(Economy.class);
            if (economyProvider != null) {
                economy = (Economy) economyProvider.getProvider();
            }
    
            return economy != null;
        }
        public static int randomBetween1(int min, int max) {
            int range = max - min;
            return min + (int) (Math.random() * (range));
        }
        
        public void registerCommands(){
            getCommand("pvp").setExecutor(new PvPKit(this));
            getCommand("cc").setExecutor(new Commands(this));
            getCommand("kits").setExecutor(new Commands(this));
            getCommand("clearchat").setExecutor(new Commands(this));
            getCommand("archer").setExecutor(new ArcherKit(this));
            getCommand("tank").setExecutor(new TankKit(this));
            getCommand("viking").setExecutor(new VikingKit(this));
            getCommand("cheetah").setExecutor(new CheetahKit(this));
            getCommand("rogue").setExecutor(new RogueKit(this));
            getCommand("shark").setExecutor(new SharkKit(this));
            getCommand("tp").setExecutor(new Commands(this));
        }
        
        private Scoreboard board;
        private Objective o;
        private Score s;
        
        
        @SuppressWarnings("deprecation")
        @EventHandler
        public void onPlayerInteract(PlayerInteractEvent e) {
            if (e.getAction().toString().toLowerCase().contains("right")) {
    
                if (e.getPlayer().getItemInHand().getTypeId() == 282
                        && e.getPlayer().getHealth() < 20F) {
                    Player p = e.getPlayer();
                    e.setCancelled(true);
                    if (p.getHealth() + 7 > p.getMaxHealth()) {
                        p.setHealth(20F);
                    } else {
                        p.setHealth(p.getHealth() + 7);
                    }
                    e.getPlayer().getItemInHand().setType(Material.BOWL);
                }
    
            }
        }
         @EventHandler
            public void onPlayerRegainHealth(EntityRegainHealthEvent event) {
                if(event.getRegainReason() == RegainReason.SATIATED || event.getRegainReason() == RegainReason.REGEN)
                    event.setCancelled(true);
            }
         @EventHandler
            public void OnPlayerJoin(PlayerJoinEvent e) {
                Player player = e.getPlayer();
                player.sendMessage(ChatColor.GRAY + "Welcome to" + ChatColor.RED + " DemonKits");
            }
        @EventHandler
        public void onFoodLevelChange(FoodLevelChangeEvent e) {
            e.setCancelled(true);
        }
        @EventHandler
        public void break1(BlockBreakEvent e){
            Player p = e.getPlayer();
            if(p.hasPermission("d.admin")){
                e.setCancelled(false);
            }else{
                e.setCancelled(true);
            }
        }
        @EventHandler
        public void place1(BlockPlaceEvent e){
            Player p = e.getPlayer();
            if(p.hasPermission("d.admin")){
                e.setCancelled(false);
            }else{
                e.setCancelled(true);
            }
        }
        @EventHandler
        public void onVikingInteract(PlayerInteractEvent event) {
            if (event.getAction() == Action.RIGHT_CLICK_AIR) {
                if (viking.contains(event.getPlayer().getName())) {
                    final Player player = event.getPlayer();
                    if (event.getItem() != null && event.getItem().getType() == Material.COMPASS) {
                        if (this.vikingTasks.containsKey(event.getPlayer().getName())) {
                            event.getPlayer().sendMessage(ChatColor.RED + "Please wait...");
                        } else {
                            player.addPotionEffect(new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 200, 1));
                            final String pName = player.getName();
                            this.vikingTasks.put(player.getName(), this.getServer().getScheduler().runTaskLater(this, new Runnable() {
                                public void run() {
                                    if (player != null) {
                                        player.sendMessage(ChatColor.RED + "Your potion effect has worn off.");
                                        player.removePotionEffect(PotionEffectType.INCREASE_DAMAGE);
                                        player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 800, 1));
                                    }
                                    vikingTasks.remove(pName);
                                }
                            }, 200L).getTaskId());
                        }
                    }
                }
            }
        }
        @EventHandler
        public void onVikingLeave(PlayerQuitEvent event) {
            this.resetPlayer(event.getPlayer());
        }
         
        @EventHandler
        public void onVikingKicked(PlayerKickEvent event) {
            this.resetPlayer(event.getPlayer());
        }
         
        public void resetPlayer(Player player) {
            if (this.vikingTasks.containsKey(player.getName())) {
                for (PotionEffect potionEffect : player.getActivePotionEffects()) {
                    player.removePotionEffect(potionEffect.getType());
                int vikingTaskID = this.vikingTasks.remove(player.getName());
                if (this.getServer().getScheduler().isQueued(vikingTaskID) || this.getServer().getScheduler().isCurrentlyRunning(vikingTaskID)) this.getServer().getScheduler().cancelTask(vikingTaskID);
            }
            }
        }
        @EventHandler
        public void Sugar(final PlayerInteractEvent e){
            if(!cd.contains(e.getPlayer().getName())){
                if(cheetah.contains(e.getPlayer().getName())){
                  if(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK){
                      if(e.getPlayer().getItemInHand().getType() == Material.SUGAR) {
                      e.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 100, 3));
                      cd.add(e.getPlayer().getName());
                      e.getPlayer().sendMessage(ChatColor.RED + "You are now on cooldown for 10 seconds");
                      this.getServer().getScheduler().runTaskLater(this, new Runnable(){
                          
                          @Override
                          public void run() {
                              cd.remove(e.getPlayer().getName());
                              e.getPlayer().sendMessage(ChatColor.GOLD + "You are no longer on cooldown");
                          }
                      }, 200);
                  }
                }
            }
        }
        }
        @EventHandler
        public void onEntityDamage(EntityDamageByEntityEvent e){
            if(e.getDamager() instanceof Player && e.getEntity() instanceof Player){
                final Player p =(Player)e.getEntity();
                final Player hitter= (Player)e.getDamager();
                if(NoLog.contains(p.getName()) || NoLog.contains(hitter.getName())){    
                }else{
                    p.sendMessage(ChatColor.RED + "You were hit by "  + hitter.getName());
                    NoLog.add(p.getName());
                    hitter.sendMessage(ChatColor.RED + "You hit: "  + p.getName());
                    NoLog.add(hitter.getName());
                    this.getServer().getScheduler().runTaskLater(this, new Runnable(){
                        public void run(){
                            NoLog.remove(p.getName());
                            NoLog.remove(hitter.getName());
                            p.sendMessage(ChatColor.RED + "You can now log off");
                            hitter.sendMessage(ChatColor.RED + "You can now log off");
                        }
                    }, 200);
                }
            }
        }
        @EventHandler
        public void onPlayerShark(PlayerMoveEvent e) {
            Player p = e.getPlayer();
            Material mat = e.getPlayer().getLocation().getBlock().getType();
            if(mat == Material.WATER || mat == Material.STATIONARY_WATER){
            if(shark.contains(p.getName())){
            p.addPotionEffect(new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 200, 0, true));
            p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 200, 0, true));
            p.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 200, 0, true));
            }
            if(mat != Material.WATER || mat != Material.STATIONARY_WATER){
            }
             
            }
            }
        @EventHandler
        public void onInteract(final PlayerInteractEvent e) {
            if(!cd.contains(e.getPlayer().getName())){
                if(eagle.contains(e.getPlayer().getName())){
                  if(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK){
                      if(e.getPlayer().getItemInHand().getType() == Material.QUARTZ) {
                      e.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.FAST_DIGGING, 100, 3));
                      cd.add(e.getPlayer().getName());
                      e.getPlayer().sendMessage(ChatColor.RED + "You are now on cooldown for 10 seconds");
                      this.getServer().getScheduler().runTaskLater(this, new Runnable(){
                          
                          @Override
                          public void run() {
                              cd.remove(e.getPlayer().getName());
                              e.getPlayer().sendMessage(ChatColor.GOLD + "You are no longer on cooldown");
                          }
                      }, 200);
                  }
                }
            }
        }
        }
        @EventHandler
        public void onPlayerExit(PlayerQuitEvent e){
            Player p =e.getPlayer();
            if(NoLog.contains(p.getName())){
                p.setHealth(0);
                Bukkit.broadcastMessage(ChatColor.GOLD +  p.getName() + ChatColor.RED + " Has Just Combat Logged!");
            }
        }
        public static HashMap<String, Integer> killstreak = new HashMap<String, Integer>();
        @EventHandler
        public void onDeath(EntityDeathEvent  e) {
        if (e.getEntity().getKiller() instanceof Player && e.getEntity() instanceof Player) {
        Player k = e.getEntity().getKiller();
        Player p = (Player) e.getEntity();
        
        if (killstreak.get(k.getName()) == null){
            killstreak.put(k.getName(), 0);
        }
        
        killstreak.put(k.getName(), killstreak.get(k.getName())+1);
        
        if (killstreak.get(p.getName()) == null){
            killstreak.put(p.getName(), 0);
        }
        int i = killstreak.get(k.getName());
        if(i%5==0||i==8){
        Bukkit.broadcastMessage(ChatColor.LIGHT_PURPLE + k.getName()+ ChatColor.GRAY +" has a killstreak of "+i+"!");
        }
        if (killstreak.get(p.getName()) > 5) {
        Bukkit.broadcastMessage(ChatColor.LIGHT_PURPLE + k.getName() + ChatColor.GRAY + " just ended" + p.getName() + " 's KillStreak");
        }
        }
        }
        @EventHandler
        
        public void nodrop(PlayerDropItemEvent e)
        {
            
            Player p = e.getPlayer();
            
            if(e.getItemDrop().getItemStack().getType() == Material.DIAMOND_SWORD ||e.getItemDrop().getItemStack().getType() == Material.MUSHROOM_SOUP ||e.getItemDrop().getItemStack().getType() == Material.SNOW_BALL || e.getItemDrop().getItemStack().getType() == Material.ENDER_PEARL || e.getItemDrop().getItemStack().getType() == Material.IRON_SWORD)
            {
                
                e.setCancelled(true);
                
                p.sendMessage(ChatColor.RED + p.getName() + " I think you might need this item...");
                
            } else
            {
                
                e.setCancelled(false);
            }
        }
        
        @EventHandler
        public void Motd(ServerListPingEvent e) {
            e.setMotd("§0[§4DemonKits§0] §6Work in Progress");
            e.setMaxPlayers(300);
        }
        
        @EventHandler
        public void onPLayerD(PlayerDeathEvent e) {
            Player p = e.getEntity();
            if (p.getKiller() instanceof Player) {
                Player killer = (Player) p.getKiller();
                int r = randomBetween1(1, 150);
                killer.sendMessage("§3You got §e$" + r + " §3for killing §4"
                        + p.getName() + "§3.");
                economy.depositPlayer(killer.getName(), r);
    
            }
    
        }
        @EventHandler
        public void onSpeak(AsyncPlayerChatEvent e) {
            Player p = e.getPlayer();
            e.setFormat(p.getDisplayName() +  ChatColor.DARK_GRAY + " >> " + ChatColor.GRAY +  e.getMessage());
        }
        
        @EventHandler
        public void onPlayerDeath(PlayerDeathEvent e) {
            Player p = (Player)e.getEntity();
            e.getDrops().clear();
            this.resetPlayer(e.getEntity().getPlayer());
            killstreak.remove(p.getName());
            if(used.contains(p.getName())) {
                used.remove(p.getName());
                if(pvp.contains(p.getName())) {
                    pvp.remove(p.getName());
                    if(archer.contains(p.getName())) {
                        archer.remove(p.getName());
                        if(tank.contains(p.getName())) {
                            tank.remove(p.getName());
                            if(viking.contains(p.getName())) {
                                viking.remove(p.getName());
                                if(cd.contains(p.getName())) {
                                    cd.remove(p.getName());
                                    if(shark.contains(p.getName())) {
                                        shark.remove(p.getName());
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    
    }
     
  6. Offline

    TigerHix

    Code:java
    1. s = o.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GREEN + "Kills:"));


    Replace this line to:

    Code:java
    1. o.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GREEN + "Kills:")).setScore(*your score here*;
     
  7. Offline

    Fhbgsdhkfbl

    TigerHix
    So how would I add kills to the scoreboard when they kill a person, same with deaths, and also save it when the server stops, or reloads or when they log off.
     
  8. Offline

    TigerHix

    Fhbgsdhkfbl to update the scoreboard, use the code I gave above. To save/load between server restarts, you need to work on this yourself - saving things and loading things to config is not that hard. Lots of examples in this forum.
     
  9. Offline

    Fhbgsdhkfbl

    TigerHix
    Can you link me some tutorials?
     
  10. Offline

    TigerHix

Thread Status:
Not open for further replies.

Share This Page