2019-05-27 09:13:41 +00:00
|
|
|
From 6b95712581e254062c8447b0a028beb99ff2bb0b Mon Sep 17 00:00:00 2001
|
2018-11-18 15:39:28 +00:00
|
|
|
From: Shane Freeder <theboyetronic@gmail.com>
|
|
|
|
Date: Sun, 18 Nov 2018 15:53:43 +0000
|
|
|
|
Subject: [PATCH] Support cancellation supression of EntityDismount/VehicleExit
|
|
|
|
events"
|
|
|
|
|
|
|
|
Entities must be dismounted before teleportation in order to avoid
|
|
|
|
multiple issues in the server with regards to teleportation, shamefully,
|
|
|
|
too many plugins rely on the events firing, which means that not firing
|
|
|
|
these events caues more issues than it solves;
|
|
|
|
|
|
|
|
In order to counteract this, Entity dismount/exit vehicle events have
|
|
|
|
been modified to supress cancellation (and has a method to allow plugins
|
|
|
|
to check if this has been set), noting that cancellation will be silently
|
|
|
|
surpressed given that plugins are not expecting this event to not be cancellable.
|
|
|
|
|
|
|
|
This is a far from ideal scenario, however: given the current state of this
|
|
|
|
event and other alternatives causing issues elsewhere, I believe that
|
|
|
|
this is going to be the best soultion all around.
|
|
|
|
|
|
|
|
Improvements/suggestions welcome!
|
|
|
|
|
|
|
|
diff --git a/src/main/java/org/bukkit/event/vehicle/VehicleExitEvent.java b/src/main/java/org/bukkit/event/vehicle/VehicleExitEvent.java
|
2019-05-06 02:58:04 +00:00
|
|
|
index 963b9ead..a976c32d 100644
|
2018-11-18 15:39:28 +00:00
|
|
|
--- a/src/main/java/org/bukkit/event/vehicle/VehicleExitEvent.java
|
|
|
|
+++ b/src/main/java/org/bukkit/event/vehicle/VehicleExitEvent.java
|
2019-03-20 00:28:15 +00:00
|
|
|
@@ -13,10 +13,18 @@ public class VehicleExitEvent extends VehicleEvent implements Cancellable {
|
2018-11-18 15:39:28 +00:00
|
|
|
private static final HandlerList handlers = new HandlerList();
|
|
|
|
private boolean cancelled;
|
|
|
|
private final LivingEntity exited;
|
|
|
|
+ private final boolean isCancellable; // Paper
|
|
|
|
|
2019-03-20 00:28:15 +00:00
|
|
|
- public VehicleExitEvent(@NotNull final Vehicle vehicle, @NotNull final LivingEntity exited) {
|
|
|
|
+ public VehicleExitEvent(@NotNull final Vehicle vehicle, @NotNull final LivingEntity exited, boolean isCancellable) { // Paper
|
2018-11-18 15:39:28 +00:00
|
|
|
super(vehicle);
|
|
|
|
this.exited = exited;
|
|
|
|
+ // Paper start
|
|
|
|
+ this.isCancellable = isCancellable;
|
|
|
|
+ }
|
|
|
|
+
|
2019-03-20 00:28:15 +00:00
|
|
|
+ public VehicleExitEvent(@NotNull final Vehicle vehicle, @NotNull final LivingEntity exited) {
|
2018-11-18 15:39:28 +00:00
|
|
|
+ this(vehicle, exited, true);
|
|
|
|
+ // Paper end
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2019-05-06 02:58:04 +00:00
|
|
|
@@ -36,9 +44,18 @@ public class VehicleExitEvent extends VehicleEvent implements Cancellable {
|
2018-11-18 15:39:28 +00:00
|
|
|
|
2019-05-06 02:58:04 +00:00
|
|
|
@Override
|
2018-11-18 15:39:28 +00:00
|
|
|
public void setCancelled(boolean cancel) {
|
|
|
|
+ // Paper start
|
|
|
|
+ if (cancel && !isCancellable) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
this.cancelled = cancel;
|
|
|
|
}
|
|
|
|
|
|
|
|
+ public boolean isCancellable() {
|
|
|
|
+ return isCancellable;
|
|
|
|
+ // paper end
|
|
|
|
+ }
|
|
|
|
+
|
2019-03-20 00:28:15 +00:00
|
|
|
@NotNull
|
2018-11-18 15:39:28 +00:00
|
|
|
@Override
|
|
|
|
public HandlerList getHandlers() {
|
|
|
|
diff --git a/src/main/java/org/spigotmc/event/entity/EntityDismountEvent.java b/src/main/java/org/spigotmc/event/entity/EntityDismountEvent.java
|
2019-03-24 17:16:59 +00:00
|
|
|
index a473b2c6..a5b4aed5 100644
|
2018-11-18 15:39:28 +00:00
|
|
|
--- a/src/main/java/org/spigotmc/event/entity/EntityDismountEvent.java
|
|
|
|
+++ b/src/main/java/org/spigotmc/event/entity/EntityDismountEvent.java
|
2019-03-20 00:28:15 +00:00
|
|
|
@@ -16,11 +16,20 @@ public class EntityDismountEvent extends EntityEvent implements Cancellable
|
2018-11-18 15:39:28 +00:00
|
|
|
private static final HandlerList handlers = new HandlerList();
|
|
|
|
private boolean cancelled;
|
|
|
|
private final Entity dismounted;
|
|
|
|
+ private final boolean isCancellable; // Paper
|
|
|
|
|
2019-03-20 00:28:15 +00:00
|
|
|
public EntityDismountEvent(@NotNull Entity what, @NotNull Entity dismounted)
|
2018-11-18 15:39:28 +00:00
|
|
|
{
|
|
|
|
+ // Paper start
|
|
|
|
+ this(what, dismounted, true);
|
|
|
|
+ }
|
|
|
|
+
|
2019-03-20 00:28:15 +00:00
|
|
|
+ public EntityDismountEvent(@NotNull Entity what, @NotNull Entity dismounted, boolean isCancellable)
|
2018-11-18 15:39:28 +00:00
|
|
|
+ {
|
|
|
|
+ // Paper end
|
|
|
|
super( what );
|
|
|
|
this.dismounted = dismounted;
|
|
|
|
+ this.isCancellable = isCancellable; // Paper
|
|
|
|
}
|
|
|
|
|
2019-03-20 00:28:15 +00:00
|
|
|
@NotNull
|
|
|
|
@@ -38,9 +47,18 @@ public class EntityDismountEvent extends EntityEvent implements Cancellable
|
2018-11-18 15:39:28 +00:00
|
|
|
@Override
|
|
|
|
public void setCancelled(boolean cancel)
|
|
|
|
{
|
|
|
|
+ // Paper start
|
|
|
|
+ if (cancel && !isCancellable) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
this.cancelled = cancel;
|
|
|
|
}
|
|
|
|
|
|
|
|
+ public boolean isCancellable() {
|
|
|
|
+ return isCancellable;
|
|
|
|
+ // Paper end
|
|
|
|
+ }
|
|
|
|
+
|
2019-03-20 00:28:15 +00:00
|
|
|
@NotNull
|
2018-11-18 15:39:28 +00:00
|
|
|
@Override
|
|
|
|
public HandlerList getHandlers()
|
|
|
|
--
|
2019-04-23 04:47:07 +00:00
|
|
|
2.21.0
|
2018-11-18 15:39:28 +00:00
|
|
|
|