136 lines
4.8 KiB
Java
136 lines
4.8 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, 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, true));
|
|
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);
|
|
}
|
|
return setHearts(p, neww);
|
|
}
|
|
public double setHearts(Player p, double neww) {
|
|
AttributeInstance access = p.getAttribute(Attribute.GENERIC_MAX_HEALTH);
|
|
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);
|
|
setHearts(p, 16.0);
|
|
save(p, 1, "bannedByLSPLUGIN");
|
|
Component kickmsg = Component.text("Ran out of lives. Come back later.");
|
|
p.kick(kickmsg);
|
|
}
|
|
return curscore;
|
|
}
|
|
}
|