4d40e87b33
Had to drop some hunks modifying getEntities, as those methods were rewritten by Mojang in 1.17
89 lines
5.1 KiB
Diff
89 lines
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 4a61153eaf9cf4c8aa532f770c0e449325448107..a30cd5a649a3086b794f1cb03bc0e02846b2f558 100644
|
|
--- a/src/main/java/net/minecraft/world/level/border/WorldBorder.java
|
|
+++ b/src/main/java/net/minecraft/world/level/border/WorldBorder.java
|
|
@@ -110,15 +110,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
|
|
}
|
|
|
|
}
|
|
@@ -136,25 +140,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
|
|
}
|
|
|
|
}
|
|
@@ -459,6 +481,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);
|
|
}
|
|
|