Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-16 11:30:06 +01:00
113 Zeilen
4.0 KiB
Diff
113 Zeilen
4.0 KiB
Diff
|
From f1d6f2a88ce9419dcfc9ae177fd077c1e60c6eb6 Mon Sep 17 00:00:00 2001
|
||
|
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
|
||
|
index 364451b56..b3269db2e 100644
|
||
|
--- a/src/main/java/org/bukkit/event/vehicle/VehicleExitEvent.java
|
||
|
+++ b/src/main/java/org/bukkit/event/vehicle/VehicleExitEvent.java
|
||
|
@@ -12,10 +12,18 @@ public class VehicleExitEvent extends VehicleEvent implements Cancellable {
|
||
|
private static final HandlerList handlers = new HandlerList();
|
||
|
private boolean cancelled;
|
||
|
private final LivingEntity exited;
|
||
|
+ private final boolean isCancellable; // Paper
|
||
|
|
||
|
- public VehicleExitEvent(final Vehicle vehicle, final LivingEntity exited) {
|
||
|
+ public VehicleExitEvent(Vehicle vehicle, LivingEntity exited, boolean isCancellable) { // Paper
|
||
|
super(vehicle);
|
||
|
this.exited = exited;
|
||
|
+ // Paper start
|
||
|
+ this.isCancellable = isCancellable;
|
||
|
+ }
|
||
|
+
|
||
|
+ public VehicleExitEvent(final Vehicle vehicle, final LivingEntity exited) {
|
||
|
+ this(vehicle, exited, true);
|
||
|
+ // Paper end
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
@@ -32,9 +40,18 @@ public class VehicleExitEvent extends VehicleEvent implements Cancellable {
|
||
|
}
|
||
|
|
||
|
public void setCancelled(boolean cancel) {
|
||
|
+ // Paper start
|
||
|
+ if (cancel && !isCancellable) {
|
||
|
+ return;
|
||
|
+ }
|
||
|
this.cancelled = cancel;
|
||
|
}
|
||
|
|
||
|
+ public boolean isCancellable() {
|
||
|
+ return isCancellable;
|
||
|
+ // paper end
|
||
|
+ }
|
||
|
+
|
||
|
@Override
|
||
|
public HandlerList getHandlers() {
|
||
|
return handlers;
|
||
|
diff --git a/src/main/java/org/spigotmc/event/entity/EntityDismountEvent.java b/src/main/java/org/spigotmc/event/entity/EntityDismountEvent.java
|
||
|
index 4110d3bb2..555899efc 100644
|
||
|
--- a/src/main/java/org/spigotmc/event/entity/EntityDismountEvent.java
|
||
|
+++ b/src/main/java/org/spigotmc/event/entity/EntityDismountEvent.java
|
||
|
@@ -15,11 +15,20 @@ public class EntityDismountEvent extends EntityEvent implements Cancellable
|
||
|
private static final HandlerList handlers = new HandlerList();
|
||
|
private boolean cancelled;
|
||
|
private final Entity dismounted;
|
||
|
+ private final boolean isCancellable; // Paper
|
||
|
|
||
|
public EntityDismountEvent(Entity what, Entity dismounted)
|
||
|
{
|
||
|
+ // Paper start
|
||
|
+ this(what, dismounted, true);
|
||
|
+ }
|
||
|
+
|
||
|
+ public EntityDismountEvent(Entity what, Entity dismounted, boolean isCancellable)
|
||
|
+ {
|
||
|
+ // Paper end
|
||
|
super( what );
|
||
|
this.dismounted = dismounted;
|
||
|
+ this.isCancellable = isCancellable; // Paper
|
||
|
}
|
||
|
|
||
|
public Entity getDismounted()
|
||
|
@@ -36,9 +45,18 @@ public class EntityDismountEvent extends EntityEvent implements Cancellable
|
||
|
@Override
|
||
|
public void setCancelled(boolean cancel)
|
||
|
{
|
||
|
+ // Paper start
|
||
|
+ if (cancel && !isCancellable) {
|
||
|
+ return;
|
||
|
+ }
|
||
|
this.cancelled = cancel;
|
||
|
}
|
||
|
|
||
|
+ public boolean isCancellable() {
|
||
|
+ return isCancellable;
|
||
|
+ // Paper end
|
||
|
+ }
|
||
|
+
|
||
|
@Override
|
||
|
public HandlerList getHandlers()
|
||
|
{
|
||
|
--
|
||
|
2.19.1
|
||
|
|