From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Mon, 4 Jan 2021 22:40:34 -0800 Subject: [PATCH] Add worldborder events diff --git a/src/main/java/net/minecraft/world/level/border/WorldBorder.java b/src/main/java/net/minecraft/world/level/border/WorldBorder.java index dd49122fada9729a44fc040ffa1f57eb6ac5a124..6028e65c7e5afeea87f14edb16415defe89ebffa 100644 --- a/src/main/java/net/minecraft/world/level/border/WorldBorder.java +++ b/src/main/java/net/minecraft/world/level/border/WorldBorder.java @@ -109,15 +109,19 @@ public class WorldBorder { } public void setCenter(double x, double z) { - this.centerX = x; - this.centerZ = z; + // Paper start + io.papermc.paper.event.world.border.WorldBorderCenterChangeEvent event = new io.papermc.paper.event.world.border.WorldBorderCenterChangeEvent(world.getWorld(), world.getWorld().getWorldBorder(), new org.bukkit.Location(world.getWorld(), this.getCenterX(), 0, this.getCenterZ()), new org.bukkit.Location(world.getWorld(), x, 0, z)); + if (!event.callEvent()) return; + this.centerX = event.getNewCenter().getX(); + this.centerZ = event.getNewCenter().getZ(); + // Paper end this.extent.onCenterChange(); Iterator iterator = this.getListeners().iterator(); while (iterator.hasNext()) { BorderChangeListener iworldborderlistener = (BorderChangeListener) iterator.next(); - iworldborderlistener.onBorderCenterSet(this, x, z); + iworldborderlistener.onBorderCenterSet(this, event.getNewCenter().getX(), event.getNewCenter().getZ()); // Paper } } @@ -135,25 +139,43 @@ public class WorldBorder { } public void setSize(double size) { - this.extent = new WorldBorder.StaticBorderExtent(size); + // Paper start + io.papermc.paper.event.world.border.WorldBorderBoundsChangeEvent event = new io.papermc.paper.event.world.border.WorldBorderBoundsChangeEvent(world.getWorld(), world.getWorld().getWorldBorder(), io.papermc.paper.event.world.border.WorldBorderBoundsChangeEvent.Type.INSTANT_MOVE, getSize(), size, 0); + if (!event.callEvent()) return; + if (event.getType() == io.papermc.paper.event.world.border.WorldBorderBoundsChangeEvent.Type.STARTED_MOVE && event.getDuration() > 0) { // If changed to a timed transition + lerpSizeBetween(event.getOldSize(), event.getNewSize(), event.getDuration()); + return; + } + this.extent = new WorldBorder.StaticBorderExtent(event.getNewSize()); + // Paper end Iterator iterator = this.getListeners().iterator(); while (iterator.hasNext()) { BorderChangeListener iworldborderlistener = (BorderChangeListener) iterator.next(); - iworldborderlistener.onBorderSizeSet(this, size); + iworldborderlistener.onBorderSizeSet(this, event.getNewSize()); // Paper } } public void lerpSizeBetween(double fromSize, double toSize, long time) { - this.extent = (WorldBorder.BorderExtent) (fromSize == toSize ? new WorldBorder.StaticBorderExtent(toSize) : new WorldBorder.MovingBorderExtent(fromSize, toSize, time)); + // Paper start + io.papermc.paper.event.world.border.WorldBorderBoundsChangeEvent.Type type; + if (fromSize == toSize) { // new size = old size + type = io.papermc.paper.event.world.border.WorldBorderBoundsChangeEvent.Type.INSTANT_MOVE; // Use INSTANT_MOVE because below it creates a Static border if they are equal. + } else { + type = io.papermc.paper.event.world.border.WorldBorderBoundsChangeEvent.Type.STARTED_MOVE; + } + io.papermc.paper.event.world.border.WorldBorderBoundsChangeEvent event = new io.papermc.paper.event.world.border.WorldBorderBoundsChangeEvent(world.getWorld(), world.getWorld().getWorldBorder(), type, fromSize, toSize, time); + if (!event.callEvent()) return; + this.extent = (WorldBorder.BorderExtent) (fromSize == event.getNewSize() ? new WorldBorder.StaticBorderExtent(event.getNewSize()) : new WorldBorder.MovingBorderExtent(fromSize, event.getNewSize(), event.getDuration())); + // Paper end Iterator iterator = this.getListeners().iterator(); while (iterator.hasNext()) { BorderChangeListener iworldborderlistener = (BorderChangeListener) iterator.next(); - iworldborderlistener.onBorderSizeLerping(this, fromSize, toSize, time); + iworldborderlistener.onBorderSizeLerping(this, fromSize, event.getNewSize(), event.getDuration()); // Paper } } @@ -458,6 +480,7 @@ public class WorldBorder { @Override public WorldBorder.BorderExtent update() { + if (this.getLerpRemainingTime() <= 0L) new io.papermc.paper.event.world.border.WorldBorderBoundsChangeFinishEvent(world.getWorld(), world.getWorld().getWorldBorder(), this.from, this.to, this.lerpDuration).callEvent(); // Paper return (WorldBorder.BorderExtent) (this.getLerpRemainingTime() <= 0L ? WorldBorder.this.new StaticBorderExtent(this.to) : this); }