diff --git a/src/main/java/org/bukkit/entity/HumanEntity.java b/src/main/java/org/bukkit/entity/HumanEntity.java index 869d7ba4..60f7b345 100644 --- a/src/main/java/org/bukkit/entity/HumanEntity.java +++ b/src/main/java/org/bukkit/entity/HumanEntity.java @@ -45,4 +45,18 @@ public interface HumanEntity extends LivingEntity { * public void selectItemInHand( int index ); */ + + /** + * Returns whether this player is slumbering. + * + * @return slumber state + */ + public boolean isSleeping(); + + /** + * Get the sleep ticks of the player. This value may be capped. + * + * @return slumber ticks + */ + public int getSleepTicks(); } diff --git a/src/main/java/org/bukkit/event/Event.java b/src/main/java/org/bukkit/event/Event.java index c4dc0fc8..5476cc74 100644 --- a/src/main/java/org/bukkit/event/Event.java +++ b/src/main/java/org/bukkit/event/Event.java @@ -270,6 +270,21 @@ public abstract class Event implements Serializable { * @see org.bukkit.event.player.PlayerInventoryEvent */ PLAYER_INVENTORY(Category.PLAYER), + + /** + * Called when a player enter a bed + * + * @see org.bukkit.event.player.PlayerBedEnterEvent + */ + PLAYER_BED_ENTER(Category.PLAYER), + + /** + * Called when a player leaves a bed + * + * @see org.bukkit.event.player.PlayerBedEnterEvent + */ + PLAYER_BED_LEAVE(Category.PLAYER), + /** * BLOCK EVENTS */ diff --git a/src/main/java/org/bukkit/event/player/PlayerBedEnterEvent.java b/src/main/java/org/bukkit/event/player/PlayerBedEnterEvent.java new file mode 100644 index 00000000..93beec63 --- /dev/null +++ b/src/main/java/org/bukkit/event/player/PlayerBedEnterEvent.java @@ -0,0 +1,50 @@ +package org.bukkit.event.player; + +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; + +/** + * This event is fired when the player is almost about to enter the bed. + * It can be cancelled. + * + * @author sk89q + */ +public class PlayerBedEnterEvent extends PlayerEvent implements Cancellable { + + private boolean cancel = false; + private Block bed; + + public PlayerBedEnterEvent(Player who, Block bed) { + super(Type.PLAYER_BED_ENTER, who); + this.bed = bed; + } + + /** + * Gets the cancellation state of this event. + * + * @return true if this event is cancelled + */ + public boolean isCancelled() { + return cancel; + } + + /** + * Prevents the player from entering the bed. + * + * @param cancel true if you wish to cancel this event + */ + public void setCancelled(boolean cancel) { + this.cancel = cancel; + } + + /** + * Returns the bed block. + * + * @return + */ + public Block getBed() { + return bed; + } + +} diff --git a/src/main/java/org/bukkit/event/player/PlayerBedLeaveEvent.java b/src/main/java/org/bukkit/event/player/PlayerBedLeaveEvent.java new file mode 100644 index 00000000..22793345 --- /dev/null +++ b/src/main/java/org/bukkit/event/player/PlayerBedLeaveEvent.java @@ -0,0 +1,29 @@ +package org.bukkit.event.player; + +import org.bukkit.block.Block; +import org.bukkit.entity.Player; + +/** + * This event is fired when the player is leaving a bed. + * + * @author sk89q + */ +public class PlayerBedLeaveEvent extends PlayerEvent { + + private Block bed; + + public PlayerBedLeaveEvent(Player who, Block bed) { + super(Type.PLAYER_BED_LEAVE, who); + this.bed = bed; + } + + /** + * Returns the bed block. + * + * @return + */ + public Block getBed() { + return bed; + } + +} diff --git a/src/main/java/org/bukkit/event/player/PlayerListener.java b/src/main/java/org/bukkit/event/player/PlayerListener.java index 288f4eff..1aff9ed1 100644 --- a/src/main/java/org/bukkit/event/player/PlayerListener.java +++ b/src/main/java/org/bukkit/event/player/PlayerListener.java @@ -172,6 +172,22 @@ public class PlayerListener implements Listener { public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { } + /** + * Called when a player enters a bed + * + * @param event Relevant event details + */ + public void onPlayerBedEnter(PlayerBedEnterEvent event) { + } + + /** + * Called when a player leaves a bed + * + * @param event Relevant event details + */ + public void onPlayerBedLeave(PlayerBedLeaveEvent event) { + } + // TODO: Remove after RB @Deprecated public void onPlayerQuit(PlayerEvent event) {} @Deprecated public void onPlayerCommandPreprocess(PlayerChatEvent event) {} diff --git a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java index 55ff75ac..10eaaaa2 100644 --- a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java +++ b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java @@ -312,6 +312,18 @@ public final class JavaPluginLoader implements PluginLoader { ((PlayerListener) listener).onPlayerBucketFill((PlayerBucketFillEvent) event); } }; + case PLAYER_BED_ENTER: + return new EventExecutor() { + public void execute(Listener listener, Event event) { + ((PlayerListener) listener).onPlayerBedEnter((PlayerBedEnterEvent) event); + } + }; + case PLAYER_BED_LEAVE: + return new EventExecutor() { + public void execute(Listener listener, Event event) { + ((PlayerListener) listener).onPlayerBedLeave((PlayerBedLeaveEvent) event); + } + }; // Block Events case BLOCK_PHYSICS: