geforkt von Mirrors/Paper
4104545b11
"It was from a different time before books were as jank as they are now. As time has gone on they've only proven to be worse and worse."
90 Zeilen
5.1 KiB
Diff
90 Zeilen
5.1 KiB
Diff
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 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);
|
|
}
|
|
|