diff --git a/paper-api/src/main/java/org/bukkit/WorldBorder.java b/paper-api/src/main/java/org/bukkit/WorldBorder.java index e777291b9dcd..970f9321c565 100644 --- a/paper-api/src/main/java/org/bukkit/WorldBorder.java +++ b/paper-api/src/main/java/org/bukkit/WorldBorder.java @@ -6,6 +6,7 @@ import io.papermc.paper.util.Tick; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Range; public interface WorldBorder { @@ -62,7 +63,7 @@ default void setSize(double newSize, long seconds) { * @throws IllegalArgumentException if newSize is less than 1.0D or greater than {@link #getMaxSize()} * @throws IllegalArgumentException if ticks are less than 0 */ - void changeSize(double newSize, long ticks); + void changeSize(double newSize, @Range(from = 0, to = Long.MAX_VALUE) long ticks); /** * Sets the border to a square region with the specified side length in blocks. diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftServer.java index 0004be40fb33..bd85bf135e21 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -1416,7 +1416,9 @@ public void addWorld(World world) { @Override public WorldBorder createWorldBorder() { - return new CraftWorldBorder(new net.minecraft.world.level.border.WorldBorder()); + CraftWorldBorder craftWorldBorder = new CraftWorldBorder(new net.minecraft.world.level.border.WorldBorder()); + craftWorldBorder.getHandle().applyInitialSettings(0L); // Like the ServerLevel#getWorldBorder we make sure the Settings are applied + return craftWorldBorder; } @Override diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftWorldBorder.java b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftWorldBorder.java index 693a6102cedf..317e474a42b9 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftWorldBorder.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftWorldBorder.java @@ -43,9 +43,11 @@ public void setSize(double newSize) { @Override public void changeSize(double newSize, long ticks) { - Preconditions.checkArgument(ticks >= 0, "ticks cannot be lower than 0"); + Preconditions.checkArgument(ticks >= 0, "cannot be lower than 0"); Preconditions.checkArgument(newSize >= 1.0D && newSize <= this.getMaxSize(), "newSize must be between 1.0D and %s", this.getMaxSize()); + ticks = Math.clamp(ticks, 0L, Long.MAX_VALUE); + if (ticks > 0L) { final long startTime = (this.getWorld() != null) ? this.getWorld().getGameTime() : 0; // Virtual Borders don't have a World this.handle.lerpSizeBetween(this.handle.getSize(), newSize, ticks, startTime);