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..126fe50b519a8d7cd158f799058cb235f9c4cbdb --- /dev/null +++ b/src/main/java/io/papermc/paper/event/world/border/WorldBorderBoundsChangeEvent.java @@ -0,0 +1,114 @@ +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.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; + + 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 type; + } + + /** + * Gets the old size or the world border. + * + * @return the old size + */ + public double getOldSize() { + return oldSize; + } + + /** + * Gets the new size of the world border. + * + * @return the new size + */ + public double getNewSize() { + return newSize; + } + + /** + * Sets the new size of the world border. + * + * @param newSize the new size + */ + public void setNewSize(double newSize) { + // PAIL: TODO: Magic Values + this.newSize = Math.min(6.0E7D, 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 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 && type == Type.INSTANT_MOVE) type = Type.STARTED_MOVE; + } + + @Override + public boolean isCancelled() { + return 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..60eabed056ee9b9cdd6f5d13307b9be38705330f --- /dev/null +++ b/src/main/java/io/papermc/paper/event/world/border/WorldBorderBoundsChangeFinishEvent.java @@ -0,0 +1,65 @@ +package io.papermc.paper.event.world.border; + +import org.bukkit.World; +import org.bukkit.WorldBorder; +import org.bukkit.event.HandlerList; +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; + + 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 oldSize; + } + + /** + * Gets the new size of the worldborder. + * + * @return the new size + */ + public double getNewSize() { + return newSize; + } + + /** + * Gets the duration this worldborder took to make the change. + *

+ * Can be 0 if handlers for {@link io.papermc.paper.event.world.border.WorldBorderCenterChangeEvent} set the duration to 0. + * + * @return the duration of the transition + */ + public double getDuration() { + return 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..4a10c773a8d05a596066e63306dead74c1363fd7 --- /dev/null +++ b/src/main/java/io/papermc/paper/event/world/border/WorldBorderCenterChangeEvent.java @@ -0,0 +1,77 @@ +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.bukkit.event.world.WorldEvent; +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; + + 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 oldCenter; + } + + /** + * Gets the new center location for the world border. + * + * @return the new center + */ + @NotNull + public Location getNewCenter() { + return 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 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..67bd469d3680c9554ce6c1d5493826a252682835 --- /dev/null +++ b/src/main/java/io/papermc/paper/event/world/border/WorldBorderEvent.java @@ -0,0 +1,22 @@ +package io.papermc.paper.event.world.border; + +import org.bukkit.World; +import org.bukkit.WorldBorder; +import org.bukkit.event.Cancellable; +import org.bukkit.event.world.WorldEvent; +import org.jetbrains.annotations.NotNull; + +public abstract class WorldBorderEvent extends WorldEvent { + + private final WorldBorder worldBorder; + + public WorldBorderEvent(@NotNull World world, @NotNull WorldBorder worldBorder) { + super(world); + this.worldBorder = worldBorder; + } + + @NotNull + public WorldBorder getWorldBorder() { + return worldBorder; + } +}