From bd5d86665a350843fd731474ad7b8d561dd9a9b8 Mon Sep 17 00:00:00 2001 From: Stephen Date: Mon, 11 Apr 2011 23:06:34 -0400 Subject: [PATCH] Added painting events (thanks verrier and tanelsuurhans) --- src/main/java/org/bukkit/event/Event.java | 25 ++++++- .../bukkit/event/entity/EntityListener.java | 10 ++- .../painting/PaintingBreakByEntityEvent.java | 23 +++++++ .../painting/PaintingBreakByWorldEvent.java | 15 +++++ .../event/painting/PaintingBreakEvent.java | 52 +++++++++++++++ .../bukkit/event/painting/PaintingEvent.java | 29 +++++++++ .../event/painting/PaintingPlaceEvent.java | 65 +++++++++++++++++++ .../bukkit/plugin/java/JavaPluginLoader.java | 15 +++++ 8 files changed, 232 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/bukkit/event/painting/PaintingBreakByEntityEvent.java create mode 100644 src/main/java/org/bukkit/event/painting/PaintingBreakByWorldEvent.java create mode 100644 src/main/java/org/bukkit/event/painting/PaintingBreakEvent.java create mode 100644 src/main/java/org/bukkit/event/painting/PaintingEvent.java create mode 100644 src/main/java/org/bukkit/event/painting/PaintingPlaceEvent.java diff --git a/src/main/java/org/bukkit/event/Event.java b/src/main/java/org/bukkit/event/Event.java index 3c4a6a34..25937b55 100644 --- a/src/main/java/org/bukkit/event/Event.java +++ b/src/main/java/org/bukkit/event/Event.java @@ -91,7 +91,12 @@ public abstract class Event implements Serializable { * @see Category.LIVING_ENTITY */ PLAYER, - + + /** + * Represents Entity-based events + */ + ENTITY, + /** * Represents Block-based events */ @@ -500,6 +505,24 @@ public abstract class Event implements Serializable { */ WORLD_LOAD (Category.WORLD), + /** + * ENTITY EVENTS + */ + + /** + * Called when a painting is placed by player + * + * @see org.bukkit.event.painting.PaintingCreateEvent + */ + PAINTING_PLACE (Category.ENTITY), + + /** + * Called when a painting is removed + * + * @see org.bukkit.event.painting.PaintingRemoveEvent + */ + PAINTING_BREAK (Category.ENTITY), + /** * LIVING_ENTITY EVENTS */ diff --git a/src/main/java/org/bukkit/event/entity/EntityListener.java b/src/main/java/org/bukkit/event/entity/EntityListener.java index 6e6dbf88..c0759aa9 100644 --- a/src/main/java/org/bukkit/event/entity/EntityListener.java +++ b/src/main/java/org/bukkit/event/entity/EntityListener.java @@ -1,6 +1,8 @@ package org.bukkit.event.entity; import org.bukkit.event.Listener; +import org.bukkit.event.painting.PaintingPlaceEvent; +import org.bukkit.event.painting.PaintingBreakEvent; /** * Handles all events fired in relation to entities @@ -29,7 +31,13 @@ public class EntityListener implements Listener { public void onEntityTarget(EntityTargetEvent event) { } - + public void onEntityInteract(EntityInteractEvent event) { } + + public void onPaintingPlace(PaintingPlaceEvent event){ + } + + public void onPaintingBreak(PaintingBreakEvent event){ + } } diff --git a/src/main/java/org/bukkit/event/painting/PaintingBreakByEntityEvent.java b/src/main/java/org/bukkit/event/painting/PaintingBreakByEntityEvent.java new file mode 100644 index 00000000..44022eb1 --- /dev/null +++ b/src/main/java/org/bukkit/event/painting/PaintingBreakByEntityEvent.java @@ -0,0 +1,23 @@ +package org.bukkit.event.painting; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.Painting; + +/** + * Triggered when a painting is removed by an entity + * + * @author Tanel Suurhans + */ + +public class PaintingBreakByEntityEvent extends PaintingBreakEvent { + private Entity remover; + + public PaintingBreakByEntityEvent(final Painting painting, final Entity remover) { + super(painting, RemoveCause.ENTITY); + this.remover = remover; + } + + public Entity getRemover() { + return remover; + } +} diff --git a/src/main/java/org/bukkit/event/painting/PaintingBreakByWorldEvent.java b/src/main/java/org/bukkit/event/painting/PaintingBreakByWorldEvent.java new file mode 100644 index 00000000..47c2738f --- /dev/null +++ b/src/main/java/org/bukkit/event/painting/PaintingBreakByWorldEvent.java @@ -0,0 +1,15 @@ +package org.bukkit.event.painting; + +import org.bukkit.entity.Painting; + +/** + * Triggered when a painting is removed by the world (water flowing over it, block damaged behind it) + * + * @author Tanel Suurhans + */ + +public class PaintingBreakByWorldEvent extends PaintingBreakEvent{ + public PaintingBreakByWorldEvent(final Painting painting) { + super(painting, RemoveCause.WORLD); + } +} diff --git a/src/main/java/org/bukkit/event/painting/PaintingBreakEvent.java b/src/main/java/org/bukkit/event/painting/PaintingBreakEvent.java new file mode 100644 index 00000000..941f2632 --- /dev/null +++ b/src/main/java/org/bukkit/event/painting/PaintingBreakEvent.java @@ -0,0 +1,52 @@ +package org.bukkit.event.painting; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.Painting; +import org.bukkit.event.Cancellable; + +/** + * Triggered when a painting is removed + * + * @author Tanel Suurhans + */ + +public class PaintingBreakEvent extends PaintingEvent implements Cancellable { + + private boolean cancelled; + private RemoveCause cause; + + public PaintingBreakEvent(final Painting painting, RemoveCause cause) { + super(Type.PAINTING_BREAK, painting); + this.cause = cause; + } + + public RemoveCause getCause(){ + return cause; + } + + public boolean isCancelled() { + return cancelled; + } + + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } + + /** + * An enum to specify the cause of the removal + */ + public enum RemoveCause { + + /** + * Removed by an entity + */ + ENTITY, + + /** + * Removed by the world - block destroyed behind, water flowing over etc + */ + WORLD + + } + +} \ No newline at end of file diff --git a/src/main/java/org/bukkit/event/painting/PaintingEvent.java b/src/main/java/org/bukkit/event/painting/PaintingEvent.java new file mode 100644 index 00000000..f6c6220d --- /dev/null +++ b/src/main/java/org/bukkit/event/painting/PaintingEvent.java @@ -0,0 +1,29 @@ +package org.bukkit.event.painting; + +import org.bukkit.entity.Painting; +import org.bukkit.event.Event; + +/** + * Represents a painting-related event. + * + * @author Tanel Suurhans + */ +public class PaintingEvent extends Event { + + protected Painting painting; + + protected PaintingEvent(final Type type, final Painting painting) { + super(type); + this.painting = painting; + } + + /** + * Get the painting. + * + * @return the painting + */ + public Painting getPainting() { + return painting; + } + +} diff --git a/src/main/java/org/bukkit/event/painting/PaintingPlaceEvent.java b/src/main/java/org/bukkit/event/painting/PaintingPlaceEvent.java new file mode 100644 index 00000000..f86be7cd --- /dev/null +++ b/src/main/java/org/bukkit/event/painting/PaintingPlaceEvent.java @@ -0,0 +1,65 @@ +package org.bukkit.event.painting; + +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Painting; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; + +/** + * Triggered when a painting is created in the world + * + * @author Tanel Suurhans + */ +public class PaintingPlaceEvent extends PaintingEvent implements Cancellable { + + private boolean cancelled; + + private Player player; + private Block block; + private BlockFace blockFace; + + public PaintingPlaceEvent(final Painting painting, final Player player, Block block, BlockFace blockFace) { + super(Event.Type.PAINTING_PLACE, painting); + this.player = player; + this.block = block; + this.blockFace = blockFace; + } + + /** + * Returns the player placing the painting + * + * @return Entity returns the player placing the painting + */ + public Player getPlayer() { + return player; + } + + /** + * Returns the block painting placed on + * + * @return Block returns the block painting placed on + */ + public Block getBlock() { + return block; + } + + /** + * Returns the face of the block that the painting was placed on + * + * @return BlockFace returns the face of the block the painting was placed on + */ + public BlockFace getBlockFace() { + return blockFace; + } + + public boolean isCancelled() { + return cancelled; + } + + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } +} diff --git a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java index 1fca4b1d..c7fc725a 100644 --- a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java +++ b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java @@ -19,6 +19,7 @@ import org.bukkit.event.CustomEventListener; import org.bukkit.event.Event; import org.bukkit.event.Listener; import org.bukkit.event.block.*; +import org.bukkit.event.painting.*; import org.bukkit.event.entity.*; import org.bukkit.event.player.*; import org.bukkit.event.server.*; @@ -451,6 +452,20 @@ public final class JavaPluginLoader implements PluginLoader { } }; + //Painting Events + case PAINTING_PLACE: + return new EventExecutor() { + public void execute(Listener listener, Event event) { + ((EntityListener) listener).onPaintingPlace((PaintingPlaceEvent) event); + } + }; + case PAINTING_BREAK: + return new EventExecutor() { + public void execute(Listener listener, Event event) { + ((EntityListener) listener).onPaintingBreak((PaintingBreakEvent) event); + } + }; + // Entity Events case ENTITY_DAMAGE: return new EventExecutor() {