2021-06-11 14:02:28 +02:00
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Thu, 24 Dec 2020 12:27:49 -0800
Subject: [PATCH] Added PlayerBedFailEnterEvent
diff --git a/src/main/java/io/papermc/paper/event/player/PlayerBedFailEnterEvent.java b/src/main/java/io/papermc/paper/event/player/PlayerBedFailEnterEvent.java
new file mode 100644
2024-09-30 01:48:34 +02:00
index 0000000000000000000000000000000000000000..393d127463a6b396f6bd953f538828da23572f33
2021-06-11 14:02:28 +02:00
--- /dev/null
+++ b/src/main/java/io/papermc/paper/event/player/PlayerBedFailEnterEvent.java
2024-09-30 01:48:34 +02:00
@@ -0,0 +1,115 @@
2021-06-11 14:02:28 +02:00
+package io.papermc.paper.event.player;
+
+import net.kyori.adventure.text.Component;
+import org.bukkit.block.Block;
+import org.bukkit.entity.Player;
+import org.bukkit.event.Cancellable;
+import org.bukkit.event.HandlerList;
+import org.bukkit.event.player.PlayerEvent;
2024-02-01 10:15:57 +01:00
+import org.jetbrains.annotations.ApiStatus;
2024-09-30 01:48:34 +02:00
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
2021-06-11 14:02:28 +02:00
+
2024-09-30 01:48:34 +02:00
+@NullMarked
2021-06-11 14:02:28 +02:00
+public class PlayerBedFailEnterEvent extends PlayerEvent implements Cancellable {
+
+ private static final HandlerList HANDLER_LIST = new HandlerList();
+
+ private final FailReason failReason;
+ private final Block bed;
+ private boolean willExplode;
2024-09-30 01:48:34 +02:00
+ private @Nullable Component message;
2024-02-01 10:15:57 +01:00
+
2021-06-11 14:02:28 +02:00
+ private boolean cancelled;
+
2024-02-01 10:15:57 +01:00
+ @ApiStatus.Internal
2024-09-30 01:48:34 +02:00
+ public PlayerBedFailEnterEvent(final Player player, final FailReason failReason, final Block bed, final boolean willExplode, final @Nullable Component message) {
2021-06-11 14:02:28 +02:00
+ super(player);
+ this.failReason = failReason;
+ this.bed = bed;
+ this.willExplode = willExplode;
+ this.message = message;
+ }
+
+ public FailReason getFailReason() {
2024-02-01 10:15:57 +01:00
+ return this.failReason;
2021-06-11 14:02:28 +02:00
+ }
+
+ public Block getBed() {
2024-02-01 10:15:57 +01:00
+ return this.bed;
2021-06-11 14:02:28 +02:00
+ }
+
+ public boolean getWillExplode() {
2024-02-01 10:15:57 +01:00
+ return this.willExplode;
2021-06-11 14:02:28 +02:00
+ }
+
2024-09-30 01:48:34 +02:00
+ public void setWillExplode(final boolean willExplode) {
2021-06-11 14:02:28 +02:00
+ this.willExplode = willExplode;
+ }
+
2024-09-30 01:48:34 +02:00
+ public @Nullable Component getMessage() {
2024-02-01 10:15:57 +01:00
+ return this.message;
2021-06-11 14:02:28 +02:00
+ }
+
2024-09-30 01:48:34 +02:00
+ public void setMessage(final @Nullable Component message) {
2021-06-11 14:02:28 +02:00
+ this.message = message;
+ }
+
+ @Override
+ public boolean isCancelled() {
2024-02-01 10:15:57 +01:00
+ return this.cancelled;
2021-06-11 14:02:28 +02:00
+ }
+
+ /**
2024-02-01 10:15:57 +01:00
+ * {@inheritDoc}
2021-06-11 14:02:28 +02:00
+ * <p>
2024-02-01 10:15:57 +01:00
+ * <b>NOTE</b>: This does not cancel the player getting in the bed, but any messages/explosions
+ * that may occur because of the interaction.
2021-06-11 14:02:28 +02:00
+ */
+ @Override
2024-09-30 01:48:34 +02:00
+ public void setCancelled(final boolean cancel) {
2024-02-01 10:15:57 +01:00
+ this.cancelled = cancel;
2021-06-11 14:02:28 +02:00
+ }
+
+ @Override
+ public HandlerList getHandlers() {
+ return HANDLER_LIST;
+ }
+
+ public static HandlerList getHandlerList() {
+ return HANDLER_LIST;
+ }
+
2024-02-01 10:15:57 +01:00
+ public enum FailReason {
2021-06-11 14:02:28 +02:00
+ /**
+ * 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,
+ /**
+ * Bed is obstructed.
+ */
+ OBSTRUCTED,
+ /**
+ * Entering the bed is prevented due to there being some other problem.
+ */
+ OTHER_PROBLEM,
+ /**
+ * Entering the bed is prevented due to there being monsters nearby.
+ */
2024-02-01 10:15:57 +01:00
+ NOT_SAFE
2021-06-11 14:02:28 +02:00
+ }
+}