aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches-Unmapped/0685-Add-worldborder-events.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Spigot-Server-Patches-Unmapped/0685-Add-worldborder-events.patch')
-rw-r--r--Spigot-Server-Patches-Unmapped/0685-Add-worldborder-events.patch122
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();