summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authordurron597 <martin.jared@gmail.com>2011-01-07 05:11:16 -0500
committerdurron597 <martin.jared@gmail.com>2011-01-07 05:34:07 -0500
commit3fc85a5e829d685044c6c8fb8e886b409dd60400 (patch)
treeed3aef99bbb0a0cd4a532f3b8c93f736ec5a6d37 /src
parent038a05522d148d7d0b932061eff2818bab5e99f0 (diff)
downloadbukkit-3fc85a5e829d685044c6c8fb8e886b409dd60400.tar
bukkit-3fc85a5e829d685044c6c8fb8e886b409dd60400.tar.gz
bukkit-3fc85a5e829d685044c6c8fb8e886b409dd60400.tar.lz
bukkit-3fc85a5e829d685044c6c8fb8e886b409dd60400.tar.xz
bukkit-3fc85a5e829d685044c6c8fb8e886b409dd60400.zip
Implemented Item_Use events
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/bukkit/event/Event.java32
-rw-r--r--src/main/java/org/bukkit/event/player/PlayerBlockItemEvent.java79
-rw-r--r--src/main/java/org/bukkit/event/player/PlayerItemEvent.java67
-rw-r--r--src/main/java/org/bukkit/event/player/PlayerItemUseEvent.java40
4 files changed, 176 insertions, 42 deletions
diff --git a/src/main/java/org/bukkit/event/Event.java b/src/main/java/org/bukkit/event/Event.java
index 045da30e..f6bf4236 100644
--- a/src/main/java/org/bukkit/event/Event.java
+++ b/src/main/java/org/bukkit/event/Event.java
@@ -171,6 +171,33 @@ public abstract class Event {
PLAYER_ANIMATION (Category.PLAYER),
/**
+ * Always called when a player uses an item while pointing at a block
+ * Sometimes, cancelling this event doesn't do anything.
+ *
+ * This is the event that is called on block placement. Cancel this
+ * to prevent block placement. This will ALWAYS be called, even if
+ * universe physics prevents the block from being placed. This allows
+ * you to add functionality to rightclicking with block items even
+ * if the universe won't allow them to get placed. Use BLOCK_CANBUILD
+ * to override notch's block placement rules.
+ *
+ * Example: This event is also called, for example when redstone is
+ * placed, when a sign is placed, when minecarts are placed on a track,
+ * when boats are placed (in both water and air)
+ */
+ PLAYER_BLOCKITEM (Category.PLAYER),
+
+ /**
+ * Called when a player uses an item while pointing at the air
+ * This can also be additionally called while pointing at the ground
+ *
+ * Example: all food will also call this event while pointing at the
+ * ground, bows/snowballs/eggs will all call this while pointing at
+ * the ground, buckets call this event.
+ */
+ PLAYER_ITEM (Category.PLAYER),
+
+ /**
* Called when a player teleports from one position to another
*/
PLAYER_TELEPORT (Category.PLAYER),
@@ -185,7 +212,8 @@ public abstract class Event {
BLOCK_DAMAGED (Category.BLOCK),
/**
- * Called when a block is undergoing a check on whether it can be built
+ * Called when a block is undergoing a universe physics
+ * check on whether it can be built
*
* For example, cacti cannot be built on grass unless overridden here
*/
@@ -210,7 +238,7 @@ public abstract class Event {
* type
*/
BLOCK_PHYSICS (Category.BLOCK),
-
+
/**
* Called when a player is attempting to place a block
*/
diff --git a/src/main/java/org/bukkit/event/player/PlayerBlockItemEvent.java b/src/main/java/org/bukkit/event/player/PlayerBlockItemEvent.java
new file mode 100644
index 00000000..2af86624
--- /dev/null
+++ b/src/main/java/org/bukkit/event/player/PlayerBlockItemEvent.java
@@ -0,0 +1,79 @@
+package org.bukkit.event.player;
+
+import org.bukkit.Block;
+import org.bukkit.BlockFace;
+import org.bukkit.ItemStack;
+import org.bukkit.Player;
+import org.bukkit.event.Cancellable;
+
+/**
+ * Represents an event that a block was clicked with an item.
+ *
+ * Note: while this is the event that is thrown on block placement, there is no
+ * BlockPlaced associated with this event. This is because the event is thrown
+ * before the block is written to the universe, so the returned block would not
+ * be the new placed block. In hMod, BlockPlaced worked by UNDOING the block
+ * placement; in Bukkit, we catch the event before it even gets written to the
+ * universe, so the concept of a placed block is meaningless.
+ *
+ * To get the type of block that's being placed, use the method getItem (for
+ * the item in your hand).
+ *
+ * @author durron597
+ */
+public class PlayerBlockItemEvent extends PlayerItemEvent implements Cancellable {
+ protected Block blockClicked;
+ protected BlockFace direction;
+ protected boolean cancel;
+
+ public PlayerBlockItemEvent(Type type, Player who, ItemStack item, Block blockClicked, BlockFace direction) {
+ super(type, who, item);
+ this.blockClicked = blockClicked;
+ cancel = false;
+ }
+
+ /**
+ * Gets the cancellation state of this event. Set to true if you
+ * want to prevent buckets from placing water, from a block from being
+ * placed
+ *
+ * @return boolean cancellation state
+ */
+ public boolean isCancelled() {
+ return cancel;
+ }
+
+ public void setCancelled(boolean cancel) {
+ this.cancel = cancel;
+ }
+
+ /**
+ * Convenience method to inform the user whether this was a block placement
+ * event.
+ *
+ * @return boolean true if the item in hand was a block
+ */
+ public boolean isBlock() {
+ if (item == null) return false;
+
+ return item.getType().isBlock();
+ }
+
+ /**
+ * Returns the clicked block
+ *
+ * @return Block returns the block clicked with this item.
+ */
+ public Block getBlockClicked() {
+ return blockClicked;
+ }
+
+ /**
+ * Returns the face of the block that was clicked
+ *
+ * @return BlockFace returns the face of the block that was clicked
+ */
+ public BlockFace getBlockFace() {
+ return direction;
+ }
+}
diff --git a/src/main/java/org/bukkit/event/player/PlayerItemEvent.java b/src/main/java/org/bukkit/event/player/PlayerItemEvent.java
new file mode 100644
index 00000000..842a0eb0
--- /dev/null
+++ b/src/main/java/org/bukkit/event/player/PlayerItemEvent.java
@@ -0,0 +1,67 @@
+package org.bukkit.event.player;
+
+import org.bukkit.ItemStack;
+import org.bukkit.Material;
+import org.bukkit.Player;
+import org.bukkit.event.Cancellable;
+
+/**
+ *
+ * @author durron597
+ *
+ */
+public class PlayerItemEvent extends PlayerEvent implements Cancellable {
+ protected ItemStack item;
+ protected boolean cancel;
+
+ public PlayerItemEvent(Type type, Player who, ItemStack item) {
+ super(type, who);
+ this.item = item;
+ cancel = false;
+ }
+
+ /**
+ * Gets the cancellation state of this event. Set to true if you
+ * want to prevent buckets from placing water and so forth
+ *
+ * @return boolean cancellation state
+ */
+ public boolean isCancelled() {
+ return cancel;
+ }
+
+ /**
+ * Sets the cancellation state of this event. A cancelled event will not
+ * be executed in the server, but will still pass to other plugins
+ *
+ * Cancelling this event will prevent use of food (player won't lose the
+ * food item), prevent bows/snowballs/eggs from firing, etc. (player won't
+ * lose the ammo)
+ *
+ * @param cancel true if you wish to cancel this event
+ */
+ public void setCancelled(boolean cancel) {
+ this.cancel = cancel;
+ }
+
+ /**
+ * Returns the item in hand represented by this event
+ *
+ * @return ItemStack the item used
+ */
+ public ItemStack getItem() {
+ return this.item;
+ }
+
+ /**
+ * Convenience method. Returns the material of the item represented by this
+ * event
+ *
+ * @return Material the material of the item used
+ */
+ public Material getMaterial() {
+ if (this.item == null) return Material.Air;
+
+ return item.getType();
+ }
+}
diff --git a/src/main/java/org/bukkit/event/player/PlayerItemUseEvent.java b/src/main/java/org/bukkit/event/player/PlayerItemUseEvent.java
deleted file mode 100644
index 12646a4d..00000000
--- a/src/main/java/org/bukkit/event/player/PlayerItemUseEvent.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.bukkit.event.player;
-
-import org.bukkit.Block;
-import org.bukkit.ItemStack;
-import org.bukkit.Player;
-import org.bukkit.event.Cancellable;
-
-/**
- *
- * @author durron597
- *
- */
-public class PlayerItemUseEvent extends PlayerEvent implements Cancellable {
- protected ItemStack item;
- protected Block blockClicked;
- protected boolean cancel;
-
- public PlayerItemUseEvent(Type type, Player who, ItemStack item, Block blockClicked) {
- super(type, who);
- this.item = item;
- this.blockClicked = blockClicked;
- cancel = false;
- }
-
- /**
- * Gets the cancellation state of this event. Set to true if you
- * want to prevent buckets from placing water and so forth
- *
- * @return boolean cancellation state
- */
- @Override
- public boolean isCancelled() {
- return cancel;
- }
-
- @Override
- public void setCancelled(boolean cancel) {
- this.cancel = cancel;
- }
-}