diff --git a/paper-api/src/main/java/org/bukkit/block/Bell.java b/paper-api/src/main/java/org/bukkit/block/Bell.java index 6fee356a3f..ba2db68bb7 100644 --- a/paper-api/src/main/java/org/bukkit/block/Bell.java +++ b/paper-api/src/main/java/org/bukkit/block/Bell.java @@ -1,6 +1,89 @@ package org.bukkit.block; +import org.bukkit.entity.Entity; +import org.bukkit.event.block.BellRingEvent; +import org.jetbrains.annotations.Nullable; + /** * Represents a captured state of Bell. */ -public interface Bell extends TileState { } +public interface Bell extends TileState { + + /** + * Ring this bell. This will call a {@link BellRingEvent}. + * + * @param entity the entity ringing the bell + * @param direction the direction from which the bell was rung or null to + * ring in the direction that the bell is facing + * @return true if rung successfully, false if the event was cancelled + */ + public boolean ring(@Nullable Entity entity, @Nullable BlockFace direction); + + /** + * Ring this bell in the direction that the bell is facing. This will call a + * {@link BellRingEvent}. + * + * @param entity the entity ringing the bell + * @return true if rung successfully, false if the event was cancelled + */ + public boolean ring(@Nullable Entity entity); + + /** + * Ring this bell. This will call a {@link BellRingEvent}. + * + * @param direction the direction from which the bell was rung or null to + * ring in the direction that the bell is facing + * @return true if rung successfully, false if the event was cancelled + */ + public boolean ring(@Nullable BlockFace direction); + + /** + * Ring this bell in the direction that the bell is facing. This will call a + * {@link BellRingEvent}. + * + * @return true if rung successfully, false if the event was cancelled + */ + public boolean ring(); + + /** + * Check whether or not this bell is shaking. A bell is considered to be + * shaking if it was recently rung. + *
+ * A bell will typically shake for 50 ticks. + * + * @return true if shaking, false otherwise + */ + public boolean isShaking(); + + /** + * Get the amount of ticks since this bell has been shaking, or 0 if the + * bell is not currently shaking. + *
+ * A bell will typically shake for 50 ticks. + * + * @return the time in ticks since the bell was rung, or 0 if not shaking + */ + public int getShakingTicks(); + + /** + * Check whether or not this bell is resonating. A bell is considered to be + * resonating if {@link #isShaking() while shaking}, raiders were detected + * in the area and are ready to be highlighted to nearby players. + *
+ * A bell will typically resonate for 40 ticks. + * + * @return true if resonating, false otherwise + */ + public boolean isResonating(); + + /** + * Get the amount of ticks since this bell has been resonating, or 0 if the + * bell is not currently resonating. + *
+ * A bell will typically resonate for 40 ticks.
+ *
+ * @return the time in ticks since the bell has been resonating, or 0 if not
+ * resonating
+ */
+ public int getResonatingTicks();
+}
diff --git a/paper-api/src/main/java/org/bukkit/event/block/BellResonateEvent.java b/paper-api/src/main/java/org/bukkit/event/block/BellResonateEvent.java
new file mode 100644
index 0000000000..df76314cd4
--- /dev/null
+++ b/paper-api/src/main/java/org/bukkit/event/block/BellResonateEvent.java
@@ -0,0 +1,50 @@
+package org.bukkit.event.block;
+
+import java.util.List;
+import org.bukkit.block.Block;
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.event.HandlerList;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Called when a bell resonated after being rung and highlights nearby raiders.
+ * A bell will only resonate if raiders are in the vicinity of the bell.
+ */
+public class BellResonateEvent extends BlockEvent {
+
+ private static final HandlerList handlers = new HandlerList();
+ private final List
+ * While the highlighted entities will change, the particles that display
+ * over a resonated entity and their colors will not. This is handled by the
+ * client and cannot be controlled by the server.
+ *
+ * @return a list of resonated entities
+ */
+ @NotNull
+ public List