mirror of
https://github.com/PaperMC/Paper.git
synced 2025-08-13 19:25:49 -07:00
SPIGOT-4395: Additions to PlayerBedEnterEvent.
Contributions by blablubbabc as well - https://hub.spigotmc.org/stash/projects/SPIGOT/repos/bukkit/pull-requests/383/overview By: Ugleh <troti@ymail.com>
This commit is contained in:
@@ -9,21 +9,131 @@ import org.bukkit.event.HandlerList;
|
|||||||
* This event is fired when the player is almost about to enter the bed.
|
* This event is fired when the player is almost about to enter the bed.
|
||||||
*/
|
*/
|
||||||
public class PlayerBedEnterEvent extends PlayerEvent implements Cancellable {
|
public class PlayerBedEnterEvent extends PlayerEvent implements Cancellable {
|
||||||
private static final HandlerList handlers = new HandlerList();
|
|
||||||
private boolean cancel = false;
|
|
||||||
private final Block bed;
|
|
||||||
|
|
||||||
public PlayerBedEnterEvent(final Player who, final Block bed) {
|
/**
|
||||||
|
* 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.
|
||||||
|
* <p>
|
||||||
|
* 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);
|
super(who);
|
||||||
this.bed = bed;
|
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.
|
||||||
|
* <p>
|
||||||
|
* In case of {@link Result#DEFAULT}, the default outcome is described by
|
||||||
|
* {@link #getBedEnterResult()}.
|
||||||
|
*
|
||||||
|
* @return the action to take with the interacted bed
|
||||||
|
* @see #setUseBed(Result)
|
||||||
|
*/
|
||||||
|
public Result useBed() {
|
||||||
|
return useBed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the action to take with the interacted bed.
|
||||||
|
* <p>
|
||||||
|
* {@link Result#ALLOW} will result in the player sleeping, regardless of
|
||||||
|
* the default outcome described by {@link #getBedEnterResult()}.
|
||||||
|
* <br>
|
||||||
|
* {@link Result#DENY} will prevent the player from sleeping. This has the
|
||||||
|
* same effect as canceling the event via {@link #setCancelled(boolean)}.
|
||||||
|
* <br>
|
||||||
|
* {@link 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.
|
||||||
|
* <p>
|
||||||
|
* Canceling the event has the same effect as setting {@link #useBed()} to
|
||||||
|
* {@link Result#DENY}.
|
||||||
|
* <p>
|
||||||
|
* For backwards compatibility reasons this also returns true if
|
||||||
|
* {@link #useBed()} is {@link Result#DEFAULT} and the
|
||||||
|
* {@link #getBedEnterResult() default action} is to prevent bed entering.
|
||||||
|
*
|
||||||
|
* @return boolean cancellation state
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
public boolean isCancelled() {
|
public boolean isCancelled() {
|
||||||
return cancel;
|
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.
|
||||||
|
* <p>
|
||||||
|
* 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) {
|
public void setCancelled(boolean cancel) {
|
||||||
this.cancel = cancel;
|
setUseBed(cancel ? Result.DENY : useBed() == Result.DENY ? Result.DEFAULT : useBed());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user