mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-22 23:29:32 +01:00
316 lines
9.2 KiB
Diff
316 lines
9.2 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
Date: Mon, 4 Jan 2021 22:40:26 -0800
|
|
Subject: [PATCH] Add worldborder events
|
|
|
|
|
|
diff --git a/src/main/java/io/papermc/paper/event/world/border/WorldBorderBoundsChangeEvent.java b/src/main/java/io/papermc/paper/event/world/border/WorldBorderBoundsChangeEvent.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..02ac479840c137ca5afcec149ef884e5a5d62928
|
|
--- /dev/null
|
|
+++ b/src/main/java/io/papermc/paper/event/world/border/WorldBorderBoundsChangeEvent.java
|
|
@@ -0,0 +1,117 @@
|
|
+package io.papermc.paper.event.world.border;
|
|
+
|
|
+import org.bukkit.World;
|
|
+import org.bukkit.WorldBorder;
|
|
+import org.bukkit.event.Cancellable;
|
|
+import org.bukkit.event.HandlerList;
|
|
+import org.jetbrains.annotations.ApiStatus;
|
|
+import org.jetbrains.annotations.NotNull;
|
|
+
|
|
+/**
|
|
+ * Called when a world border changes its bounds, either over time, or instantly.
|
|
+ */
|
|
+public class WorldBorderBoundsChangeEvent extends WorldBorderEvent implements Cancellable {
|
|
+
|
|
+ private static final HandlerList HANDLER_LIST = new HandlerList();
|
|
+
|
|
+ private Type type;
|
|
+ private final double oldSize;
|
|
+ private double newSize;
|
|
+ private long duration;
|
|
+ private boolean cancelled;
|
|
+
|
|
+ @ApiStatus.Internal
|
|
+ public WorldBorderBoundsChangeEvent(@NotNull World world, @NotNull WorldBorder worldBorder, @NotNull Type type, double oldSize, double newSize, long duration) {
|
|
+ super(world, worldBorder);
|
|
+ this.type = type;
|
|
+ this.oldSize = oldSize;
|
|
+ this.newSize = newSize;
|
|
+ this.duration = duration;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets if this change is an instant change or over-time change.
|
|
+ *
|
|
+ * @return the change type
|
|
+ */
|
|
+ @NotNull
|
|
+ public Type getType() {
|
|
+ return this.type;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets the old size or the world border.
|
|
+ *
|
|
+ * @return the old size
|
|
+ */
|
|
+ public double getOldSize() {
|
|
+ return this.oldSize;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets the new size of the world border.
|
|
+ *
|
|
+ * @return the new size
|
|
+ */
|
|
+ public double getNewSize() {
|
|
+ return this.newSize;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Sets the new size of the world border.
|
|
+ *
|
|
+ * @param newSize the new size
|
|
+ */
|
|
+ public void setNewSize(double newSize) {
|
|
+ this.newSize = Math.min(this.worldBorder.getMaxSize(), Math.max(1.0D, newSize));
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets the time in milliseconds for the change. Will be 0 if instant.
|
|
+ *
|
|
+ * @return the time in milliseconds for the change
|
|
+ */
|
|
+ public long getDuration() {
|
|
+ return this.duration;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Sets the time in milliseconds for the change. Will change {@link #getType()} to return
|
|
+ * {@link Type#STARTED_MOVE}.
|
|
+ *
|
|
+ * @param duration the time in milliseconds for the change
|
|
+ */
|
|
+ public void setDuration(long duration) {
|
|
+ // PAIL: TODO: Magic Values
|
|
+ this.duration = Math.min(9223372036854775L, Math.max(0L, duration));
|
|
+ if (duration >= 0 && this.type == Type.INSTANT_MOVE) {
|
|
+ this.type = Type.STARTED_MOVE;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean isCancelled() {
|
|
+ return this.cancelled;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setCancelled(boolean cancel) {
|
|
+ this.cancelled = cancel;
|
|
+ }
|
|
+
|
|
+ @NotNull
|
|
+ @Override
|
|
+ public HandlerList getHandlers() {
|
|
+ return HANDLER_LIST;
|
|
+ }
|
|
+
|
|
+ @NotNull
|
|
+ public static HandlerList getHandlerList() {
|
|
+ return HANDLER_LIST;
|
|
+ }
|
|
+
|
|
+ public enum Type {
|
|
+ STARTED_MOVE,
|
|
+ INSTANT_MOVE
|
|
+ }
|
|
+}
|
|
diff --git a/src/main/java/io/papermc/paper/event/world/border/WorldBorderBoundsChangeFinishEvent.java b/src/main/java/io/papermc/paper/event/world/border/WorldBorderBoundsChangeFinishEvent.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..a44964593b7f78c5086dc4928e75ad892e624671
|
|
--- /dev/null
|
|
+++ b/src/main/java/io/papermc/paper/event/world/border/WorldBorderBoundsChangeFinishEvent.java
|
|
@@ -0,0 +1,67 @@
|
|
+package io.papermc.paper.event.world.border;
|
|
+
|
|
+import org.bukkit.World;
|
|
+import org.bukkit.WorldBorder;
|
|
+import org.bukkit.event.HandlerList;
|
|
+import org.jetbrains.annotations.ApiStatus;
|
|
+import org.jetbrains.annotations.NotNull;
|
|
+
|
|
+/**
|
|
+ * Called when a moving world border has finished its move.
|
|
+ */
|
|
+public class WorldBorderBoundsChangeFinishEvent extends WorldBorderEvent {
|
|
+
|
|
+ private static final HandlerList HANDLER_LIST = new HandlerList();
|
|
+
|
|
+ private final double oldSize;
|
|
+ private final double newSize;
|
|
+ private final double duration;
|
|
+
|
|
+ @ApiStatus.Internal
|
|
+ public WorldBorderBoundsChangeFinishEvent(@NotNull World world, @NotNull WorldBorder worldBorder, double oldSize, double newSize, double duration) {
|
|
+ super(world, worldBorder);
|
|
+ this.oldSize = oldSize;
|
|
+ this.newSize = newSize;
|
|
+ this.duration = duration;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets the old size of the worldborder.
|
|
+ *
|
|
+ * @return the old size
|
|
+ */
|
|
+ public double getOldSize() {
|
|
+ return this.oldSize;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets the new size of the worldborder.
|
|
+ *
|
|
+ * @return the new size
|
|
+ */
|
|
+ public double getNewSize() {
|
|
+ return this.newSize;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets the duration this worldborder took to make the change.
|
|
+ * <p>
|
|
+ * Can be 0 if handlers for {@link WorldBorderCenterChangeEvent} set the duration to 0.
|
|
+ *
|
|
+ * @return the duration of the transition
|
|
+ */
|
|
+ public double getDuration() {
|
|
+ return this.duration;
|
|
+ }
|
|
+
|
|
+ @NotNull
|
|
+ @Override
|
|
+ public HandlerList getHandlers() {
|
|
+ return HANDLER_LIST;
|
|
+ }
|
|
+
|
|
+ @NotNull
|
|
+ public static HandlerList getHandlerList() {
|
|
+ return HANDLER_LIST;
|
|
+ }
|
|
+}
|
|
diff --git a/src/main/java/io/papermc/paper/event/world/border/WorldBorderCenterChangeEvent.java b/src/main/java/io/papermc/paper/event/world/border/WorldBorderCenterChangeEvent.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..dd96dcc0dd68d71bf27c758ed496153d434fb386
|
|
--- /dev/null
|
|
+++ b/src/main/java/io/papermc/paper/event/world/border/WorldBorderCenterChangeEvent.java
|
|
@@ -0,0 +1,79 @@
|
|
+package io.papermc.paper.event.world.border;
|
|
+
|
|
+import org.bukkit.Location;
|
|
+import org.bukkit.World;
|
|
+import org.bukkit.WorldBorder;
|
|
+import org.bukkit.event.Cancellable;
|
|
+import org.bukkit.event.HandlerList;
|
|
+import org.jetbrains.annotations.ApiStatus;
|
|
+import org.jetbrains.annotations.NotNull;
|
|
+
|
|
+/**
|
|
+ * Called when a world border's center is changed.
|
|
+ */
|
|
+public class WorldBorderCenterChangeEvent extends WorldBorderEvent implements Cancellable {
|
|
+
|
|
+ private static final HandlerList HANDLER_LIST = new HandlerList();
|
|
+
|
|
+ private final Location oldCenter;
|
|
+ private Location newCenter;
|
|
+
|
|
+ private boolean cancelled;
|
|
+
|
|
+ @ApiStatus.Internal
|
|
+ public WorldBorderCenterChangeEvent(@NotNull World world, @NotNull WorldBorder worldBorder, @NotNull Location oldCenter, @NotNull Location newCenter) {
|
|
+ super(world, worldBorder);
|
|
+ this.oldCenter = oldCenter;
|
|
+ this.newCenter = newCenter;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets the original center location of the world border.
|
|
+ *
|
|
+ * @return the old center
|
|
+ */
|
|
+ @NotNull
|
|
+ public Location getOldCenter() {
|
|
+ return this.oldCenter.clone();
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets the new center location for the world border.
|
|
+ *
|
|
+ * @return the new center
|
|
+ */
|
|
+ @NotNull
|
|
+ public Location getNewCenter() {
|
|
+ return this.newCenter;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Sets the new center location for the world border. Y coordinate is ignored.
|
|
+ *
|
|
+ * @param newCenter the new center
|
|
+ */
|
|
+ public void setNewCenter(@NotNull Location newCenter) {
|
|
+ this.newCenter = newCenter;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean isCancelled() {
|
|
+ return this.cancelled;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setCancelled(boolean cancel) {
|
|
+ this.cancelled = cancel;
|
|
+ }
|
|
+
|
|
+ @NotNull
|
|
+ @Override
|
|
+ public HandlerList getHandlers() {
|
|
+ return HANDLER_LIST;
|
|
+ }
|
|
+
|
|
+ @NotNull
|
|
+ public static HandlerList getHandlerList() {
|
|
+ return HANDLER_LIST;
|
|
+ }
|
|
+}
|
|
diff --git a/src/main/java/io/papermc/paper/event/world/border/WorldBorderEvent.java b/src/main/java/io/papermc/paper/event/world/border/WorldBorderEvent.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..adb244f9be35c43ff99dbc3a771e1fdfb21da68c
|
|
--- /dev/null
|
|
+++ b/src/main/java/io/papermc/paper/event/world/border/WorldBorderEvent.java
|
|
@@ -0,0 +1,23 @@
|
|
+package io.papermc.paper.event.world.border;
|
|
+
|
|
+import org.bukkit.World;
|
|
+import org.bukkit.WorldBorder;
|
|
+import org.bukkit.event.world.WorldEvent;
|
|
+import org.jetbrains.annotations.ApiStatus;
|
|
+import org.jetbrains.annotations.NotNull;
|
|
+
|
|
+public abstract class WorldBorderEvent extends WorldEvent {
|
|
+
|
|
+ protected final WorldBorder worldBorder;
|
|
+
|
|
+ @ApiStatus.Internal
|
|
+ protected WorldBorderEvent(@NotNull World world, @NotNull WorldBorder worldBorder) {
|
|
+ super(world);
|
|
+ this.worldBorder = worldBorder;
|
|
+ }
|
|
+
|
|
+ @NotNull
|
|
+ public WorldBorder getWorldBorder() {
|
|
+ return this.worldBorder;
|
|
+ }
|
|
+}
|