mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-23 00:42:05 +01: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:
parent
66cea125d6
commit
667e7ba35e
1 changed files with 116 additions and 6 deletions
|
@ -9,21 +9,131 @@ 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 {
|
||||
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);
|
||||
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() {
|
||||
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) {
|
||||
this.cancel = cancel;
|
||||
setUseBed(cancel ? Result.DENY : useBed() == Result.DENY ? Result.DEFAULT : useBed());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Reference in a new issue