package ca.thetechrobo.smp; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import org.bukkit.BanList.Type; import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeInstance; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; import org.bukkit.scoreboard.DisplaySlot; import org.bukkit.scoreboard.Objective; import org.bukkit.scoreboard.Score; import org.bukkit.scoreboard.Scoreboard; import org.bukkit.scoreboard.ScoreboardManager; public class ScoreboardWrapper { private ScoreboardManager manager; private HashMap boards; private LifestealPlugin plugin; public void initialise (LifestealPlugin pl) { this.manager = Bukkit.getScoreboardManager(); this.boards = new HashMap<>(); this.plugin = pl; } public void save(Player p, Integer i, String keystr) { NamespacedKey key = new NamespacedKey(this.plugin, keystr); p.getPersistentDataContainer().set(key, PersistentDataType.INTEGER, i); } public ItemMeta save(ItemMeta im, Integer i, String keystr) { NamespacedKey key = new NamespacedKey(this.plugin, keystr); im.getPersistentDataContainer().set(key, PersistentDataType.INTEGER, i); return im; } public int load(ItemStack is, String keystr, Integer def) { NamespacedKey key = new NamespacedKey(this.plugin, keystr); PersistentDataContainer c = is.getItemMeta().getPersistentDataContainer(); if (c.has(key, PersistentDataType.INTEGER)) { Integer i = c.get(key, PersistentDataType.INTEGER); return i; } return def; } public int load(Player p, String keystr, Integer def) { NamespacedKey key = new NamespacedKey(this.plugin, keystr); PersistentDataContainer c = p.getPersistentDataContainer(); if (c.has(key, PersistentDataType.INTEGER)) { Integer i = c.get(key, PersistentDataType.INTEGER); if (i < 1) { return def; } return i; } return def; } public void addPlayerToScoreboard(Player p) { Scoreboard temp = this.manager.getNewScoreboard(); Objective lives = temp.registerNewObjective("lives", "dummy", "Lives"); lives.setDisplaySlot(DisplaySlot.SIDEBAR); Score score = lives.getScore(p.getName()); this.boards.put(p.getName(), temp); Bukkit.broadcastMessage("It Works!"); score.setScore(load(p, "lives", 2)); p.setScoreboard(this.boards.get(p.getName())); } public double dieHearts(Player p, double dec) { AttributeInstance access = p.getAttribute(Attribute.GENERIC_MAX_HEALTH); Double health = access.getBaseValue(); Double neww = health - dec; if (neww <= 0) { neww = 4.0; die(p, 1); } access.setBaseValue(neww); return neww; } public int die(Player p, int dec) { Objective lives = this.boards.get(p.getName()) .getObjective("lives"); Score score = lives.getScore(p.getName()); int curscore = score.getScore() - dec; score.setScore(curscore); save(p, curscore, "lives"); if (curscore == 0) { Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.add(Calendar.DAY_OF_YEAR, 5); Date date = calendar.getTime(); Bukkit.getBanList(Type.NAME).addBan(p.getName(), "Ran out of lives.", date, null); p.kickPlayer("Ran out of lives. Come back later."); } return curscore; } }