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); }
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()); } } } } } } } } }
Code:java s = o.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GREEN + "Kills:")); Replace this line to: Code:java o.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GREEN + "Kills:")).setScore(*your score here*;
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.
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.