Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing CraftBukkit Changes: 6b8cd9a7 SPIGOT-6207: forcibly drop the items of a converted zombie villager
123 lines
5.6 KiB
Diff
123 lines
5.6 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 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();
|