lifesteal/src/ca/thetechrobo/smp/ScoreboardWrapper.java

133 lines
4.7 KiB
Java

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;
import net.kyori.adventure.text.Component;
public class ScoreboardWrapper {
private ScoreboardManager manager;
private HashMap<String, Scoreboard> 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 void saveLong(Player p, Long i, String keystr) {
NamespacedKey key = new NamespacedKey(this.plugin, keystr);
p.getPersistentDataContainer().set(key, PersistentDataType.LONG, 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) {
return load(p, keystr, def, true);
}
public int load(Player p, String keystr, Integer def, Boolean checkLowerThanOne) {
NamespacedKey key = new NamespacedKey(this.plugin, keystr);
PersistentDataContainer c = p.getPersistentDataContainer();
return load_internal_int(p, c, key, def, checkLowerThanOne);
}
public long loadLong(Player p, String keystr, Long def, Boolean checkLowerThanOne) {
NamespacedKey key = new NamespacedKey(this.plugin, keystr);
PersistentDataContainer c = p.getPersistentDataContainer();
return load_internal_long(p, c, key, def, checkLowerThanOne);
}
public long loadLong(Player p, String keystr, Long def) {
return loadLong(p, keystr, def, true);
}
private int load_internal_int(Player p, PersistentDataContainer c, NamespacedKey key, Integer def, Boolean checkLowerThanOne) {
if (c.has(key, PersistentDataType.INTEGER)) {
Integer i = c.get(key, PersistentDataType.INTEGER);
if (i < 1 && checkLowerThanOne) {
return def;
}
return i;
}
return def;
}
private long load_internal_long(Player p, PersistentDataContainer c, NamespacedKey key, Long def, Boolean checkLowerThanOne) {
if (c.has(key, PersistentDataType.LONG)) {
Long i = c.get(key, PersistentDataType.LONG);
if (i < 1 && checkLowerThanOne) {
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);
score.setScore(load(p, "lives", 2));
p.setScoreboard(this.boards.get(p.getName()));
}
public double dieHearts(Player p, double dec) {
// Limbo.tpPlayer(p, this);
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) { // life loss
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);
Component kickmsg = Component.text("Ran out of lives. Come back later.");
p.kick(kickmsg);
}
return curscore;
}
}