summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsnowleo <snowleo@e251c2fe-e539-e718-e476-b85c1f46cddb>2011-04-04 01:26:45 +0000
committersnowleo <snowleo@e251c2fe-e539-e718-e476-b85c1f46cddb>2011-04-04 01:26:45 +0000
commit828cb46ca880b019ab0ca20acda68d39ff8ea889 (patch)
tree779a264023ec503dd8a1158ecba54f9eea896ae8
parent8081b665d08945d93fb11feb26db5b78f8f9058f (diff)
downloadEssentials-828cb46ca880b019ab0ca20acda68d39ff8ea889.tar
Essentials-828cb46ca880b019ab0ca20acda68d39ff8ea889.tar.gz
Essentials-828cb46ca880b019ab0ca20acda68d39ff8ea889.tar.lz
Essentials-828cb46ca880b019ab0ca20acda68d39ff8ea889.tar.xz
Essentials-828cb46ca880b019ab0ca20acda68d39ff8ea889.zip
[trunk] New /powertool command
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1112 e251c2fe-e539-e718-e476-b85c1f46cddb
-rw-r--r--Essentials/src/com/earth2me/essentials/Essentials.java1
-rw-r--r--Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java21
-rw-r--r--Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java26
-rw-r--r--Essentials/src/com/earth2me/essentials/User.java23
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandpowertool.java32
-rw-r--r--Essentials/src/plugin.yml3
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]