From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jake Potrebic 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. + *

+ * 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; + } +}