diff options
Diffstat (limited to 'Spigot-Server-Patches-Unmapped/0685-Add-worldborder-events.patch')
-rw-r--r-- | Spigot-Server-Patches-Unmapped/0685-Add-worldborder-events.patch | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/Spigot-Server-Patches-Unmapped/0685-Add-worldborder-events.patch b/Spigot-Server-Patches-Unmapped/0685-Add-worldborder-events.patch new file mode 100644 index 0000000000..49bf0c1ca5 --- /dev/null +++ b/Spigot-Server-Patches-Unmapped/0685-Add-worldborder-events.patch @@ -0,0 +1,122 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jake Potrebic <[email protected]> +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 bedaa9dd6390e81df5872c2dd6e202a038367bf6..3c25021835d6d8fd112fc89636616bfd744e7f1a 100644 +--- a/src/main/java/net/minecraft/world/level/border/WorldBorder.java ++++ b/src/main/java/net/minecraft/world/level/border/WorldBorder.java +@@ -14,6 +14,9 @@ import net.minecraft.world.phys.AxisAlignedBB; + import net.minecraft.world.phys.shapes.OperatorBoolean; + import net.minecraft.world.phys.shapes.VoxelShape; + import net.minecraft.world.phys.shapes.VoxelShapes; ++import io.papermc.paper.event.world.border.WorldBorderBoundsChangeFinishEvent; // Paper ++import io.papermc.paper.event.world.border.WorldBorderCenterChangeEvent; // Paper ++import io.papermc.paper.event.world.border.WorldBorderBoundsChangeEvent; // Paper + + public class WorldBorder { + +@@ -102,15 +105,19 @@ public class WorldBorder { + } + + public void setCenter(double d0, double d1) { +- this.g = d0; +- this.h = d1; ++ // Paper start ++ WorldBorderCenterChangeEvent event = new WorldBorderCenterChangeEvent(world.getWorld(), world.getWorld().getWorldBorder(), new org.bukkit.Location(world.getWorld(), this.getCenterX(), 0, this.getCenterZ()), new org.bukkit.Location(world.getWorld(), d0, 0, d1)); ++ if (!event.callEvent()) return; ++ this.g = event.getNewCenter().getX(); ++ this.h = event.getNewCenter().getZ(); ++ // Paper end + this.j.k(); + Iterator iterator = this.l().iterator(); + + while (iterator.hasNext()) { + IWorldBorderListener iworldborderlistener = (IWorldBorderListener) iterator.next(); + +- iworldborderlistener.a(this, d0, d1); ++ iworldborderlistener.a(this, event.getNewCenter().getX(), event.getNewCenter().getZ()); // Paper + } + + } +@@ -128,25 +135,43 @@ public class WorldBorder { + } + + public void setSize(double d0) { +- this.j = new WorldBorder.d(d0); ++ // Paper start ++ WorldBorderBoundsChangeEvent event = new WorldBorderBoundsChangeEvent(world.getWorld(), world.getWorld().getWorldBorder(), WorldBorderBoundsChangeEvent.Type.INSTANT_MOVE, getSize(), d0, 0); ++ if (!event.callEvent()) return; ++ if (event.getType() == WorldBorderBoundsChangeEvent.Type.STARTED_MOVE && event.getDuration() > 0) { // If changed to a timed transition ++ transitionSizeBetween(event.getOldSize(), event.getNewSize(), event.getDuration()); ++ return; ++ } ++ this.j = new WorldBorder.d(event.getNewSize()); ++ // Paper end + Iterator iterator = this.l().iterator(); + + while (iterator.hasNext()) { + IWorldBorderListener iworldborderlistener = (IWorldBorderListener) iterator.next(); + +- iworldborderlistener.a(this, d0); ++ iworldborderlistener.a(this, event.getNewSize()); // Paper + } + + } + + public void transitionSizeBetween(double d0, double d1, long i) { +- this.j = (WorldBorder.a) (d0 == d1 ? new WorldBorder.d(d1) : new WorldBorder.b(d0, d1, i)); ++ // Paper start ++ WorldBorderBoundsChangeEvent.Type type; ++ if (d0 == d1) { // new size = old size ++ type = WorldBorderBoundsChangeEvent.Type.INSTANT_MOVE; // Use INSTANT_MOVE because below it creates a Static border if they are equal. ++ } else { ++ type = WorldBorderBoundsChangeEvent.Type.STARTED_MOVE; ++ } ++ WorldBorderBoundsChangeEvent event = new WorldBorderBoundsChangeEvent(world.getWorld(), world.getWorld().getWorldBorder(), type, d0, d1, i); ++ if (!event.callEvent()) return; ++ this.j = (WorldBorder.a) (d0 == event.getNewSize() ? new WorldBorder.d(event.getNewSize()) : new WorldBorder.b(d0, event.getNewSize(), event.getDuration())); ++ // Paper end + Iterator iterator = this.l().iterator(); + + while (iterator.hasNext()) { + IWorldBorderListener iworldborderlistener = (IWorldBorderListener) iterator.next(); + +- iworldborderlistener.a(this, d0, d1, i); ++ iworldborderlistener.a(this, d0, event.getNewSize(), event.getDuration()); // Paper + } + + } +@@ -434,11 +459,11 @@ public class WorldBorder { + + class b implements WorldBorder.a { + +- private final double b; +- private final double c; ++ private final double b; public final double getOldSize() { return this.b; } // Paper - OBFHELPER ++ private final double c; public final double getNewSize() { return this.c; } // Paper - OBFHELPER + private final long d; + private final long e; +- private final double f; ++ private final double f; public final double getDuration() { return this.f; } // Paper - OBFHELPER + + private b(double d0, double d1, long i) { + this.b = d0; +@@ -493,6 +518,7 @@ public class WorldBorder { + + @Override + public WorldBorder.a l() { ++ if (this.getLerpTimeRemaining() <= 0L) new WorldBorderBoundsChangeFinishEvent(world.getWorld(), world.getWorld().getWorldBorder(), getOldSize(), getNewSize(), getDuration()).callEvent(); // Paper + return (WorldBorder.a) (this.g() <= 0L ? WorldBorder.this.new d(this.c) : this); + } + +@@ -514,6 +540,7 @@ public class WorldBorder { + + double e(); + ++ default long getLerpTimeRemaining() { return g(); } // Paper - OBFHELPER + long g(); + + double h(); |