Skip to content

Instantly share code, notes, and snippets.

@NeatMonster
Created October 4, 2015 16:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save NeatMonster/2293fb2df86b92072a3e to your computer and use it in GitHub Desktop.
Save NeatMonster/2293fb2df86b92072a3e to your computer and use it in GitHub Desktop.
package fr.neatmonster.plugin;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import java.util.UUID;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Scoreboard;
public class Plugin extends JavaPlugin implements Listener {
private static <K, V extends Comparable<V>> Map<K, V> sortByValues(final Map<K, V> kMap) {
final Map<K, V> vMap = new TreeMap<>(new Comparator<K>() {
@Override
public int compare(final K k1, final K k2) {
final int k = kMap.get(k1).compareTo(kMap.get(k2));
return k == 0 ? 1 : k;
}
});
vMap.putAll(kMap);
return vMap;
}
private final Map<UUID, Integer> kills = new HashMap<>();
@Override
public void onEnable() {
getServer().getPluginManager().registerEvents(this, this);
getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
Scoreboard board;
@Override
public void run() {
if (board == null)
board = getServer().getScoreboardManager().getNewScoreboard();
for (final String entry : board.getEntries())
board.resetScores(entry);
Objective obj = board.getObjective("kills");
if (obj == null) {
obj = board.registerNewObjective("kills", "dummy");
obj.setDisplayName(ChatColor.GOLD + "Kills");
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
}
for (final Entry<UUID, Integer> entry : new LinkedList<>(
sortByValues(kills).entrySet()).subList(0, 3))
obj.getScore(getServer().getPlayer(entry.getKey())
.getPlayerListName()).setScore(entry.getValue());
for (final Player player : getServer().getOnlinePlayers())
player.setScoreboard(board);
}
}, 0L, 20L);
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerDeath(final PlayerDeathEvent event) {
if (event.getEntity().getKiller() == null)
return;
final UUID killer = event.getEntity().getKiller().getUniqueId();
if (!kills.containsKey(killer))
kills.put(killer, 0);
kills.put(killer, kills.get(killer) + 1);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment