LOTS of changes
- Heart steal - Marginally better code quality - Drop player heads - **Save heart count!!**
This commit is contained in:
parent
bd483dc63e
commit
14f0fbe979
|
@ -1,14 +1,28 @@
|
|||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.builder.cleanOutputFolder=clean
|
||||
org.eclipse.jdt.core.builder.duplicateResourceTask=warning
|
||||
org.eclipse.jdt.core.builder.invalidClasspath=abort
|
||||
org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
|
||||
org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
|
||||
org.eclipse.jdt.core.circularClasspath=error
|
||||
org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
|
||||
org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
|
||||
org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
|
||||
org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
|
||||
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=1.5
|
||||
org.eclipse.jdt.core.compiler.compliance=17
|
||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
|
||||
org.eclipse.jdt.core.compiler.release=disabled
|
||||
org.eclipse.jdt.core.compiler.source=1.5
|
||||
org.eclipse.jdt.core.compiler.source=17
|
||||
org.eclipse.jdt.core.incompatibleJDKLevel=ignore
|
||||
org.eclipse.jdt.core.incompleteClasspath=error
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.launching.PREF_COMPILER_COMPLIANCE_DOES_NOT_MATCH_JRE=info
|
||||
org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=info
|
|
@ -1,52 +1,79 @@
|
|||
package ca.thetechrobo.smp;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import java.util.ArrayList;
|
||||
|
||||
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.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.inventory.meta.SkullMeta;
|
||||
|
||||
public class DeathListener implements Listener {
|
||||
private ScoreboardWrapper scores;
|
||||
private ArrayList<String> skulllore;
|
||||
@EventHandler
|
||||
public void onDeath(PlayerDeathEvent e) {
|
||||
Bukkit.broadcastMessage("It Works!");
|
||||
this.scores.die(e.getEntity(), e.getEntity().getKiller());
|
||||
this.scores.dieHearts(e.getEntity(), 4);
|
||||
ItemStack skull = new ItemStack(Material.PLAYER_HEAD);
|
||||
SkullMeta meta = (SkullMeta) skull.getItemMeta();
|
||||
meta.setOwningPlayer(e.getEntity());
|
||||
meta.setLore(this.skulllore);
|
||||
skull.setItemMeta(meta);
|
||||
e.getEntity().getWorld().dropItemNaturally(e.getEntity().getLocation(), skull);
|
||||
}
|
||||
@EventHandler
|
||||
public void onPlayerJoin(PlayerJoinEvent e) {
|
||||
this.scores.addPlayerToScoreboard(e);
|
||||
this.scores.addPlayerToScoreboard(e.getPlayer());
|
||||
}
|
||||
@EventHandler
|
||||
public void onPlayerUse(PlayerInteractEvent e) {
|
||||
Player p = e.getPlayer();
|
||||
ItemStack i = p.getInventory().getItemInMainHand();
|
||||
if (!(i.hasItemMeta())) return;
|
||||
Life d = new Life();
|
||||
d.create();
|
||||
ItemMeta dMeta = d.item.getItemMeta();
|
||||
if ((i.getType() == d.item.getType()) && (i.getItemMeta().getDisplayName().equals(dMeta.getDisplayName()))) {
|
||||
this.scores.add(p);
|
||||
|
||||
Boolean rightclickair = (e.getAction() == Action.RIGHT_CLICK_AIR);
|
||||
Boolean condition1a = (i.getItemMeta().getDisplayName().equals(d.dn));
|
||||
Boolean condition1b = (i.getType() == d.m);
|
||||
Boolean lifeblock = (condition1a && condition1b && rightclickair);
|
||||
Boolean heartblock = (i.getItemMeta().getLore().equals(this.skulllore) && rightclickair);
|
||||
if (lifeblock) {
|
||||
this.scores.die(p, -1);
|
||||
p.getInventory().removeItem(d.item);
|
||||
return;
|
||||
}
|
||||
if (heartblock) {
|
||||
this.scores.dieHearts(p, -4.0);
|
||||
ItemStack newi = i.clone();
|
||||
newi.setAmount(1);
|
||||
p.getInventory().removeItem(newi);
|
||||
return;
|
||||
}
|
||||
LifeExtractor f = new LifeExtractor();
|
||||
f.create();
|
||||
ItemMeta fMeta = f.item.getItemMeta();
|
||||
if ((i.getType() == f.item.getType()) && (i.getItemMeta().getDisplayName().equals(fMeta.getDisplayName()))) {
|
||||
if ((i.getType() == f.m) && (i.getItemMeta().getDisplayName().equals(f.dn))) {
|
||||
if (p.getInventory().firstEmpty() == (-1)) {
|
||||
Bukkit.broadcastMessage("Not enough room in your inventory.");
|
||||
p.sendMessage("§4Not enough room in your inventory.");
|
||||
return;
|
||||
}
|
||||
this.scores.die(p, null);
|
||||
if (this.scores.die(p, 0) == 1) {
|
||||
p.sendMessage("§4Performing this operation will cause you to get banned. Cancelled.");
|
||||
return;
|
||||
}
|
||||
this.scores.die(p, 1);
|
||||
d.add(p);
|
||||
}
|
||||
}
|
||||
public void initialise() {
|
||||
public void initialise(LifestealPlugin pl) {
|
||||
this.scores = new ScoreboardWrapper();
|
||||
this.scores.initialise();
|
||||
this.scores.initialise(pl);
|
||||
this.skulllore = new ArrayList<String>();
|
||||
this.skulllore.add("Can be used as a Life.");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,9 +6,11 @@ import org.bukkit.Material;
|
|||
|
||||
public class Life extends SuperLife {
|
||||
public void create() {
|
||||
ArrayList<String> lore = new ArrayList<String>();
|
||||
lore.add("Highly valuable.");
|
||||
lore.add("Right-click to gain (1) life.");
|
||||
supercreate(Material.NETHERITE_SCRAP, "§5LifeBlockTM", lore);
|
||||
this.lore = new ArrayList<String>();
|
||||
this.lore.add("Highly valuable.");
|
||||
this.lore.add("Right-click to gain (1) life.");
|
||||
this.m = Material.NETHERITE_SCRAP;
|
||||
this.dn = "§5LifeBlockTM";
|
||||
supercreate();
|
||||
}
|
||||
}
|
|
@ -6,10 +6,11 @@ import org.bukkit.Material;
|
|||
|
||||
public class LifeExtractor extends SuperLife {
|
||||
public void create() {
|
||||
ArrayList<String> lore = new ArrayList<String>();
|
||||
lore.add("Converts one of your lives into an item.");
|
||||
lore.add("WARNING: If your life count goes to 0");
|
||||
lore.add("it will count.");
|
||||
supercreate(Material.NETHERITE_HOE, "§5LifextractorTM", lore);
|
||||
this.lore = new ArrayList<String>();
|
||||
this.lore.add("Converts one of your lives into an item.");
|
||||
this.lore.add("Won't work if you only have 1 life.");
|
||||
this.m = Material.NETHERITE_HOE;
|
||||
this.dn = "§5LifextractorTM";
|
||||
supercreate();
|
||||
}
|
||||
}
|
|
@ -33,7 +33,7 @@ public class LifestealPlugin extends JavaPlugin {
|
|||
@Override
|
||||
public void onEnable() {
|
||||
DeathListener dl = new DeathListener();
|
||||
dl.initialise();
|
||||
dl.initialise(this);
|
||||
getServer().getPluginManager().registerEvents(dl, this);
|
||||
addRecipes();
|
||||
}
|
||||
|
|
|
@ -1,16 +1,17 @@
|
|||
package ca.thetechrobo.smp;
|
||||
|
||||
import org.bukkit.BanList.Type;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Objects;
|
||||
|
||||
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.event.player.PlayerJoinEvent;
|
||||
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;
|
||||
|
@ -20,46 +21,65 @@ import org.bukkit.scoreboard.ScoreboardManager;
|
|||
public class ScoreboardWrapper {
|
||||
private ScoreboardManager manager;
|
||||
private HashMap<String, Scoreboard> boards;
|
||||
private LifestealPlugin plugin;
|
||||
|
||||
public void initialise () {
|
||||
public void initialise (LifestealPlugin pl) {
|
||||
this.manager = Bukkit.getScoreboardManager();
|
||||
this.boards = new HashMap<String, Scoreboard>();
|
||||
this.boards = new HashMap<>();
|
||||
this.plugin = pl;
|
||||
}
|
||||
public void addPlayerToScoreboard(PlayerJoinEvent e) {
|
||||
Player p = e.getPlayer();
|
||||
public void save(Player p, Integer i, String keystr) {
|
||||
NamespacedKey key = new NamespacedKey(this.plugin, keystr);
|
||||
p.getPersistentDataContainer().set(key, PersistentDataType.INTEGER, i);
|
||||
}
|
||||
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(5);
|
||||
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 = 20.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);
|
||||
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.");
|
||||
p.kickPlayer("Ran out of lives. Come back later.");
|
||||
}
|
||||
return curscore;
|
||||
}
|
||||
public ArrayList<Integer> die(Player p, Player k) {
|
||||
ArrayList<Integer> array = new ArrayList<Integer>();
|
||||
array.add(die(p, 1));
|
||||
if (Objects.isNull(k)) array.add(-1);
|
||||
else array.add(add(k));
|
||||
return array;
|
||||
}
|
||||
public int add(Player p) {
|
||||
return die(p, -1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,13 +8,16 @@ import org.bukkit.inventory.ItemStack;
|
|||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
public class SuperLife {
|
||||
public Material m;
|
||||
public String dn;
|
||||
public ArrayList<String> lore;
|
||||
public ItemStack item;
|
||||
|
||||
public void supercreate(Material m, String dn, ArrayList<String> lore) { // https://www.spigotmc.org/threads/how-to-create-a-custom-item.134241/#post-1423546
|
||||
this.item = new ItemStack(m);
|
||||
public void supercreate() { // https://www.spigotmc.org/threads/how-to-create-a-custom-item.134241/#post-1423546
|
||||
this.item = new ItemStack(this.m);
|
||||
ItemMeta meta = this.item.getItemMeta();
|
||||
meta.setDisplayName(dn);
|
||||
meta.setLore(lore);
|
||||
meta.setDisplayName(this.dn);
|
||||
meta.setLore(this.lore);
|
||||
this.item.setItemMeta(meta);
|
||||
}
|
||||
public void add(Player p) {
|
||||
|
|
Loading…
Reference in New Issue