Add player data deleter; small bugfixes

This commit is contained in:
TheTechRobo 2022-03-12 15:15:27 -05:00
parent 14f0fbe979
commit aac5e10ba6
5 changed files with 100 additions and 4 deletions

View File

@ -1,4 +1,9 @@
name: Lifesteal
main: ca.thetechrobo.smp.LifestealPlugin
version: 1.0
api-version: 1.13
api-version: 1.18
commands:
deletemydata:
description: Deletes your amount of lives, then bans you.
usage: "Usage: Not the way you used it, that's for sure"

View File

@ -11,10 +11,11 @@ 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;
public ScoreboardWrapper scores;
private ArrayList<String> skulllore;
@EventHandler
public void onDeath(PlayerDeathEvent e) {
@ -23,7 +24,8 @@ public class DeathListener implements Listener {
SkullMeta meta = (SkullMeta) skull.getItemMeta();
meta.setOwningPlayer(e.getEntity());
meta.setLore(this.skulllore);
skull.setItemMeta(meta);
ItemMeta newmeta = this.scores.save(meta, 69, "IsDroppedSkull");
skull.setItemMeta(newmeta);
e.getEntity().getWorld().dropItemNaturally(e.getEntity().getLocation(), skull);
}
@EventHandler
@ -39,10 +41,13 @@ public class DeathListener implements Listener {
d.create();
Boolean rightclickair = (e.getAction() == Action.RIGHT_CLICK_AIR);
if (!rightclickair) {
return;
}
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);
Boolean heartblock = (this.scores.load(i, "IsDroppedSkull", 1) == 69 && rightclickair);
if (lifeblock) {
this.scores.die(p, -1);
p.getInventory().removeItem(d.item);

View File

@ -0,0 +1,67 @@
package ca.thetechrobo.smp;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Random;
import org.bukkit.Bukkit;
import org.bukkit.BanList.Type;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class DeleteMyData implements CommandExecutor {
private ScoreboardWrapper scores;
public void initialise(ScoreboardWrapper scores) {
this.scores = scores;
}
@Override
public boolean onCommand(CommandSender senderr, Command arg1, String arg2, String[] args) {
// TODO Auto-generated method stub
if (args.length != 1) {
return false;
}
Boolean number = true;
try {
Integer.parseInt(args[0]);
}
catch(NumberFormatException e) {
number = false;
}
if (number) {
Player sender = (Player) senderr;
if (args[0].equals(String.valueOf(this.scores.load(sender, "delete", null)))) {
Bukkit.getBanList(Type.NAME).addBan(sender.getName(), "Deleted data.", null, null);
sender.kickPlayer("Your server data has been irrecoverably deleted.");
String uuid = sender.getUniqueId().toString();
Path path = Paths.get("world/playerdata/" + uuid+".dat");
try {
Files.delete(path);
}
catch(IOException e) {
e.printStackTrace();
}
return true;
}
return false;
}
else {
if (!(senderr.isOp())) {
senderr.sendMessage("Sorry, You must be op");
return false;
}
Player sender = Bukkit.getPlayer(args[0]);
Random random = new Random();
Integer randumber = random.nextInt(69421);
this.scores.save(sender, randumber, "delete");
sender.sendMessage("§eIf you would like to delete all trace of you from the server, enter /deletemydata " + String.valueOf(randumber));
sender.sendMessage("NOTE! For security reasons, if you perform this operation, you will never be able to log in to the server with this account ever again.");
return true;
}
}
}

View File

@ -35,6 +35,9 @@ public class LifestealPlugin extends JavaPlugin {
DeathListener dl = new DeathListener();
dl.initialise(this);
getServer().getPluginManager().registerEvents(dl, this);
DeleteMyData dlmydata = new DeleteMyData();
dlmydata.initialise(dl.scores);
this.getCommand("deletemydata").setExecutor(dlmydata);
addRecipes();
}
@Override

View File

@ -10,6 +10,8 @@ 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;
@ -32,6 +34,20 @@ public class ScoreboardWrapper {
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();