diff options
6 files changed, 106 insertions, 0 deletions
diff --git a/Essentials/src/com/earth2me/essentials/Essentials.java b/Essentials/src/com/earth2me/essentials/Essentials.java index 1ea4c9f25..951e6dab8 100644 --- a/Essentials/src/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/com/earth2me/essentials/Essentials.java @@ -164,6 +164,7 @@ public class Essentials extends JavaPlugin pm.registerEvent(Type.PLAYER_INTERACT, playerListener, Priority.High, this); pm.registerEvent(Type.PLAYER_EGG_THROW, playerListener, Priority.High, this); pm.registerEvent(Type.PLAYER_BUCKET_EMPTY, playerListener, Priority.High, this); + pm.registerEvent(Type.PLAYER_ANIMATION, playerListener, Priority.High, this); blockListener = new EssentialsBlockListener(this); pm.registerEvent(Type.SIGN_CHANGE, blockListener, Priority.Low, this); diff --git a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java index 15355021a..7aa78703d 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java @@ -2,13 +2,16 @@ package com.earth2me.essentials; import org.bukkit.Server; import org.bukkit.craftbukkit.entity.CraftPlayer; +import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityCombustEvent; import org.bukkit.event.entity.EntityDamageByBlockEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageByProjectileEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.EntityListener; +import org.bukkit.inventory.ItemStack; public class EssentialsEntityListener extends EntityListener @@ -25,6 +28,24 @@ public class EssentialsEntityListener extends EntityListener @Override public void onEntityDamage(EntityDamageEvent event) { + if (event instanceof EntityDamageByEntityEvent) + { + EntityDamageByEntityEvent edEvent = (EntityDamageByEntityEvent)event; + Entity eAttack = edEvent.getDamager(); + Entity eDefend = edEvent.getEntity(); + if (eDefend instanceof Player && eAttack instanceof Player) + { + User defender = User.get(eDefend); + User attacker = User.get(eAttack); + ItemStack is = attacker.getItemInHand(); + String command = attacker.getPowertool(is); + if (command != null && !command.isEmpty()) { + attacker.getServer().dispatchCommand(attacker, command.replaceAll("\\{player\\}", defender.getName())); + event.setCancelled(true); + return; + } + } + } if (event instanceof EntityDamageEvent || event instanceof EntityDamageByBlockEvent || event instanceof EntityDamageByProjectileEvent) { diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index 731c89d83..a2b599ee5 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -1,6 +1,7 @@ package com.earth2me.essentials; import java.util.List; +import java.util.logging.Level; import java.util.logging.Logger; import net.minecraft.server.InventoryPlayer; import org.bukkit.*; @@ -429,4 +430,29 @@ public class EssentialsPlayerListener extends PlayerListener } } } + + @Override + public void onPlayerAnimation(PlayerAnimationEvent event) { + usePowertools(event); + } + + private void usePowertools(PlayerAnimationEvent event) { + if (event.getAnimationType() != PlayerAnimationType.ARM_SWING) { + return; + } + User user = User.get(event.getPlayer()); + ItemStack is = user.getItemInHand(); + if (is.getType() == Material.AIR) { + return; + } + String command = user.getPowertool(is); + if (command == null || command.isEmpty()) { + return; + } + if (command.matches(".*\\{player\\}.*")) { + user.sendMessage("Click a player to use this command"); + return; + } + user.getServer().dispatchCommand(user, command); + } } diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index ca586dc4f..d90ae7c73 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -722,4 +722,27 @@ public class User extends PlayerExtension implements Comparable<User> data.put("unlimited", items); flush(); } + + public String getPowertool(ItemStack stack) { + if (!data.containsKey("powertools")) { + return null; + } + @SuppressWarnings("unchecked") + Map<Integer, String> tools = (Map<Integer, String>)data.get("powertools"); + return tools.get(stack.getTypeId()); + } + + public void setPowertool(ItemStack stack, String command) { + Map<Integer, String> tools = new HashMap<Integer, String>(); + if (data.containsKey("powertools")) { + tools = (Map<Integer, String>)data.get("powertools"); + } + if (command == null || command.trim().isEmpty()) { + tools.remove(Integer.valueOf(stack.getTypeId())); + return; + } + tools.put(Integer.valueOf(stack.getTypeId()), command.trim()); + data.put("powertools", tools); + flush(); + } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java new file mode 100644 index 000000000..480097ca3 --- /dev/null +++ b/Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java @@ -0,0 +1,32 @@ +package com.earth2me.essentials.commands; + +import com.earth2me.essentials.Essentials; +import com.earth2me.essentials.User; +import org.bukkit.Material; +import org.bukkit.Server; +import org.bukkit.inventory.ItemStack; + +public class Commandpowertool extends EssentialsCommand { + + public Commandpowertool() { + super("powertool"); + } + + @Override + protected void run(Server server, Essentials parent, User user, String commandLabel, String[] args) throws Exception { + + ItemStack is = user.getItemInHand(); + if (is.getType() == Material.AIR) { + user.sendMessage("Command can't be attached to air."); + } + String command = getFinalArg(args, 0); + if (command != null && !command.isEmpty()) { + user.sendMessage("Command assigned to "+is.getType().toString().toLowerCase().replaceAll("_", " ")); + } else { + user.sendMessage("Command removed from "+is.getType().toString().toLowerCase().replaceAll("_", " ")); + } + user.setPowertool(is, command); + } + + +} diff --git a/Essentials/src/plugin.yml b/Essentials/src/plugin.yml index 8d5ade0cd..a273984e3 100644 --- a/Essentials/src/plugin.yml +++ b/Essentials/src/plugin.yml @@ -153,6 +153,9 @@ commands: plugin:
description: Enables, disables, or reloads a plugin.
usage: /<command> [enable|disable|reload] [plugin]
+ powertool:
+ description: Assigns a command to the item in hand, {player} will be replaced by the name of the player that you click.
+ usage: /<command> [command] <arguments>
r:
description: Quickly reply to the last player to message you.
usage: /<command> [message]
|