package org.bukkit.event.player; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; import org.bukkit.event.HandlerList; /** * This event is fired when the player is almost about to enter the bed. */ public class PlayerBedEnterEvent extends PlayerEvent implements Cancellable { /** * Represents the default possible outcomes of this event. * @deprecated draft API */ @Deprecated public enum BedEnterResult { /** * The player will enter the bed. */ OK, /** * The world doesn't allow sleeping (ex. Nether or The End). Entering * the bed is prevented and the bed explodes. */ NOT_POSSIBLE_HERE, /** * Entering the bed is prevented due to it not being night nor * thundering currently. *

* If the event is forcefully allowed during daytime, the player will * enter the bed (and set its bed location), but might get immediately * thrown out again. */ NOT_POSSIBLE_NOW, /** * Entering the bed is prevented due to the player being too far away. */ TOO_FAR_AWAY, /** * Entering the bed is prevented due to there being monsters nearby. */ NOT_SAFE, /** * Entering the bed is prevented due to there being some other problem. */ OTHER_PROBLEM; } private static final HandlerList handlers = new HandlerList(); private final Block bed; private final BedEnterResult bedEnterResult; private Result useBed = Result.DEFAULT; public PlayerBedEnterEvent(Player who, Block bed, BedEnterResult bedEnterResult) { super(who); this.bed = bed; this.bedEnterResult = bedEnterResult; } @Deprecated public PlayerBedEnterEvent(Player who, Block bed) { this(who, bed, BedEnterResult.OK); } /** * This describes the default outcome of this event. * * @return the bed enter result representing the default outcome of this event */ public BedEnterResult getBedEnterResult() { return bedEnterResult; } /** * This controls the action to take with the bed that was clicked on. *

* In case of {@link org.bukkit.event.Event.Result#DEFAULT}, the default outcome is described by * {@link #getBedEnterResult()}. * * @return the action to take with the interacted bed * @see #setUseBed(org.bukkit.event.Event.Result) */ public Result useBed() { return useBed; } /** * Sets the action to take with the interacted bed. *

* {@link org.bukkit.event.Event.Result#ALLOW} will result in the player sleeping, regardless of * the default outcome described by {@link #getBedEnterResult()}. *
* {@link org.bukkit.event.Event.Result#DENY} will prevent the player from sleeping. This has the * same effect as canceling the event via {@link #setCancelled(boolean)}. *
* {@link org.bukkit.event.Event.Result#DEFAULT} will result in the outcome described by * {@link #getBedEnterResult()}. * * @param useBed the action to take with the interacted bed * @see #useBed() */ public void setUseBed(Result useBed) { this.useBed = useBed; } /** * Gets the cancellation state of this event. Set to true if you want to * prevent the player from sleeping. *

* Canceling the event has the same effect as setting {@link #useBed()} to * {@link org.bukkit.event.Event.Result#DENY}. *

* For backwards compatibility reasons this also returns true if * {@link #useBed()} is {@link org.bukkit.event.Event.Result#DEFAULT} and the * {@link #getBedEnterResult() default action} is to prevent bed entering. * * @return boolean cancellation state */ @Override public boolean isCancelled() { return (useBed == Result.DENY || useBed == Result.DEFAULT && bedEnterResult != BedEnterResult.OK); } /** * Sets the cancellation state of this event. A canceled event will not be * executed in the server, but will still pass to other plugins. *

* Canceling this event will prevent use of the bed. * * @param cancel true if you wish to cancel this event */ @Override public void setCancelled(boolean cancel) { setUseBed(cancel ? Result.DENY : useBed() == Result.DENY ? Result.DEFAULT : useBed()); } /** * Returns the bed block involved in this event. * * @return the bed block involved in this event */ public Block getBed() { return bed; } @Override public HandlerList getHandlers() { return handlers; } public static HandlerList getHandlerList() { return handlers; } }