Add worldborder events

This commit is contained in:
Jake Potrebic 2021-01-04 22:40:26 -08:00
parent eb8dcb71a9
commit de918f498a
4 changed files with 280 additions and 0 deletions

View file

@ -0,0 +1,115 @@
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.jspecify.annotations.NullMarked;
/**
* Called when a world border changes its bounds, either over time, or instantly.
*/
@NullMarked
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(final World world, final WorldBorder worldBorder, final Type type, final double oldSize, final double newSize, final 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
*/
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(final 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(final 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(final boolean cancel) {
this.cancelled = cancel;
}
@Override
public HandlerList getHandlers() {
return HANDLER_LIST;
}
public static HandlerList getHandlerList() {
return HANDLER_LIST;
}
public enum Type {
STARTED_MOVE,
INSTANT_MOVE
}
}

View file

@ -0,0 +1,66 @@
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.jspecify.annotations.NullMarked;
/**
* Called when a moving world border has finished its move.
*/
@NullMarked
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(final World world, final WorldBorder worldBorder, final double oldSize, final double newSize, final 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;
}
@Override
public HandlerList getHandlers() {
return HANDLER_LIST;
}
public static HandlerList getHandlerList() {
return HANDLER_LIST;
}
}

View file

@ -0,0 +1,76 @@
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.jspecify.annotations.NullMarked;
/**
* Called when a world border's center is changed.
*/
@NullMarked
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(final World world, final WorldBorder worldBorder, final Location oldCenter, final Location newCenter) {
super(world, worldBorder);
this.oldCenter = oldCenter;
this.newCenter = newCenter;
}
/**
* Gets the original center location of the world border.
*
* @return the old center
*/
public Location getOldCenter() {
return this.oldCenter.clone();
}
/**
* Gets the new center location for the world border.
*
* @return the new center
*/
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(final Location newCenter) {
this.newCenter = newCenter;
}
@Override
public boolean isCancelled() {
return this.cancelled;
}
@Override
public void setCancelled(final boolean cancel) {
this.cancelled = cancel;
}
@Override
public HandlerList getHandlers() {
return HANDLER_LIST;
}
public static HandlerList getHandlerList() {
return HANDLER_LIST;
}
}

View file

@ -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.jspecify.annotations.NullMarked;
@NullMarked
public abstract class WorldBorderEvent extends WorldEvent {
protected final WorldBorder worldBorder;
@ApiStatus.Internal
protected WorldBorderEvent(final World world, final WorldBorder worldBorder) {
super(world);
this.worldBorder = worldBorder;
}
public WorldBorder getWorldBorder() {
return this.worldBorder;
}
}