aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0608-Add-worldborder-events.patch
blob: 26898cfba0988d7f5f51fb7c8105f6abd593a192 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
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 2442c287a7f26cfee10a19e9015558cdebdcf3ac..3063a45e5d124d4405e940daff24877866165d3f 100644
--- a/src/main/java/net/minecraft/world/level/border/WorldBorder.java
+++ b/src/main/java/net/minecraft/world/level/border/WorldBorder.java
@@ -123,15 +123,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
         }
 
     }
@@ -149,25 +153,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
         }
 
     }
@@ -472,6 +494,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);
         }