From 5c5a0d40b8c270793b4001950ceb511e32148be9 Mon Sep 17 00:00:00 2001 From: Brianna O'Keefe Date: Thu, 28 Feb 2019 14:06:37 -0500 Subject: [PATCH] Added revive command. --- .../UltimateModeration.java | 1 + .../command/CommandManager.java | 2 + .../command/commands/CommandRevive.java | 76 +++++++++++++++++++ .../listeners/DeathListener.java | 36 +++++++++ src/main/resources/en_US.lang | 6 +- src/main/resources/plugin.yml | 6 +- 6 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/songoda/ultimatemoderation/command/commands/CommandRevive.java create mode 100644 src/main/java/com/songoda/ultimatemoderation/listeners/DeathListener.java diff --git a/src/main/java/com/songoda/ultimatemoderation/UltimateModeration.java b/src/main/java/com/songoda/ultimatemoderation/UltimateModeration.java index 8c50b86..080defa 100644 --- a/src/main/java/com/songoda/ultimatemoderation/UltimateModeration.java +++ b/src/main/java/com/songoda/ultimatemoderation/UltimateModeration.java @@ -63,6 +63,7 @@ public class UltimateModeration extends JavaPlugin { this.commandManager = new CommandManager(this); // Register Listeners + Bukkit.getPluginManager().registerEvents(new DeathListener(this), this); Bukkit.getPluginManager().registerEvents(new MoveListener(this), this); Bukkit.getPluginManager().registerEvents(new DropListener(this), this); Bukkit.getPluginManager().registerEvents(new InventoryListener(this), this); diff --git a/src/main/java/com/songoda/ultimatemoderation/command/CommandManager.java b/src/main/java/com/songoda/ultimatemoderation/command/CommandManager.java index 66ce746..847e2bb 100644 --- a/src/main/java/com/songoda/ultimatemoderation/command/CommandManager.java +++ b/src/main/java/com/songoda/ultimatemoderation/command/CommandManager.java @@ -33,6 +33,7 @@ public class CommandManager implements CommandExecutor { instance.getCommand("ViewEnderChest").setExecutor(this); instance.getCommand("InvSee").setExecutor(this); instance.getCommand("Freeze").setExecutor(this); + instance.getCommand("Revive").setExecutor(this); AbstractCommand commandUltimateModeration = addCommand(new CommandUltimateModeration()); addCommand(new CommandClearChat()); @@ -42,6 +43,7 @@ public class CommandManager implements CommandExecutor { addCommand(new CommandViewEnderChest()); addCommand(new CommandInvSee()); addCommand(new CommandFreeze()); + addCommand(new CommandRevive()); addCommand(new CommandSettings(commandUltimateModeration)); addCommand(new CommandReload(commandUltimateModeration)); diff --git a/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandRevive.java b/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandRevive.java new file mode 100644 index 0000000..bd35760 --- /dev/null +++ b/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandRevive.java @@ -0,0 +1,76 @@ +package com.songoda.ultimatemoderation.command.commands; + +import com.songoda.ultimatemoderation.UltimateModeration; +import com.songoda.ultimatemoderation.command.AbstractCommand; +import com.songoda.ultimatemoderation.listeners.DeathListener; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.UUID; + +public class CommandRevive extends AbstractCommand { + + private static List frozen = new ArrayList<>(); + + public CommandRevive() { + super(true, true,"Revive"); + } + + @Override + protected ReturnType runCommand(UltimateModeration instance, CommandSender sender, String... args) { + if (args.length != 1) + return ReturnType.SYNTAX_ERROR; + + Player player = Bukkit.getPlayer(args[0]); + + if (player == null) { + sender.sendMessage(instance.getReferences().getPrefix() + "That player does not exist or is not online."); + return ReturnType.FAILURE; + } + + List drops = DeathListener.getLastDrop(player); + + if (drops == null) { + sender.sendMessage(instance.getReferences().getPrefix() + instance.getLocale().getMessage("command.revive.noloot")); + return ReturnType.FAILURE; + } + + ItemStack[] dropArr = new ItemStack[drops.size()]; + dropArr = drops.toArray(dropArr); + + HashMap leftOver = player.getInventory().addItem(dropArr); + + for (ItemStack item : leftOver.values()) { + player.getWorld().dropItemNaturally(player.getLocation(), item); + } + + player.sendMessage(instance.getReferences().getPrefix() + instance.getLocale().getMessage("command.revive.noloot")); + sender.sendMessage(instance.getReferences().getPrefix() + instance.getLocale().getMessage("command.revive.success", player.getName())); + return ReturnType.SUCCESS; + } + + @Override + protected List onTab(UltimateModeration instance, CommandSender sender, String... args) { + return null; + } + + @Override + public String getPermissionNode() { + return "um.revive"; + } + + @Override + public String getSyntax() { + return "/Revive "; + } + + @Override + public String getDescription() { + return "Allows you to revive a player."; + } +} diff --git a/src/main/java/com/songoda/ultimatemoderation/listeners/DeathListener.java b/src/main/java/com/songoda/ultimatemoderation/listeners/DeathListener.java new file mode 100644 index 0000000..acd4c7d --- /dev/null +++ b/src/main/java/com/songoda/ultimatemoderation/listeners/DeathListener.java @@ -0,0 +1,36 @@ +package com.songoda.ultimatemoderation.listeners; + +import com.songoda.ultimatemoderation.UltimateModeration; +import com.songoda.ultimatemoderation.command.commands.CommandFreeze; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +public class DeathListener implements Listener { + + private static Map> playerDrops = new HashMap<>(); + + private UltimateModeration instance; + + public DeathListener(UltimateModeration ultimateModeration) { + this.instance = ultimateModeration; + } + + @EventHandler + public void onDeath(PlayerDeathEvent event) { + Player player = event.getEntity(); + playerDrops.put(player.getUniqueId(), event.getDrops()); + } + + public static List getLastDrop(Player player) { + return playerDrops.get(player.getUniqueId()); + } +} diff --git a/src/main/resources/en_US.lang b/src/main/resources/en_US.lang index ae34a7c..3ae6cbf 100644 --- a/src/main/resources/en_US.lang +++ b/src/main/resources/en_US.lang @@ -17,4 +17,8 @@ command.freeze.add = "&7You have frozen &6%player%&7 successfully."; command.freeze.remove = "&7You have unfrozen &6%player%&7 successfully."; command.freeze.alertadd = "&7You have been frozen."; command.freeze.alertremove = "&7You have been unfrozen."; -command.freeze.nope = "&cYou cannot do that because you are currently frozen..."; \ No newline at end of file +command.freeze.nope = "&cYou cannot do that because you are currently frozen..."; + +command.revive.noloot = "&cNo loot could be found to revive the player with." +command.revive.success = "&7You have revived &6%player% &7successfully." +command.revive.revived = "&7You have been revived." \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 578cb20..a228288 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -43,4 +43,8 @@ commands: Freeze: description: Freeze default: false - usage: /freeze \ No newline at end of file + usage: /freeze + Revive: + description: Revive + default: false + usage: /revive \ No newline at end of file