LOTS of changes

- Heart steal
- Marginally better code quality
- Drop player heads
- **Save heart count!!**
This commit is contained in:
TheTechRobo 2022-03-12 12:40:24 -05:00
parent bd483dc63e
commit 14f0fbe979
8 changed files with 123 additions and 53 deletions

View File

@ -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

View File

@ -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

View File

@ -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.");
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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();
}

View File

@ -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);
}
}

View File

@ -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) {