aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0271-force-entity-dismount-during-teleportation.patch
diff options
context:
space:
mode:
authorRiley Park <[email protected]>2024-05-15 17:06:59 -0700
committerGitHub <[email protected]>2024-05-15 17:06:59 -0700
commitf17519338bc589c045e0b32bfc37e048b23544d5 (patch)
treee50182ec698b4a9de8f366f485ee089b1901bbd9 /patches/server/0271-force-entity-dismount-during-teleportation.patch
parent3fc93581bb876e8149b2ca423375a98f5ca12d27 (diff)
downloadPaper-f17519338bc589c045e0b32bfc37e048b23544d5.tar.gz
Paper-f17519338bc589c045e0b32bfc37e048b23544d5.zip
Expose server build information (#10729)
* Expose server build information * squash patches * final tweaks --------- Co-authored-by: Jake Potrebic <[email protected]> Co-authored-by: masmc05 <[email protected]>
Diffstat (limited to 'patches/server/0271-force-entity-dismount-during-teleportation.patch')
-rw-r--r--patches/server/0271-force-entity-dismount-during-teleportation.patch113
1 files changed, 113 insertions, 0 deletions
diff --git a/patches/server/0271-force-entity-dismount-during-teleportation.patch b/patches/server/0271-force-entity-dismount-during-teleportation.patch
new file mode 100644
index 0000000000..19d2dab5a9
--- /dev/null
+++ b/patches/server/0271-force-entity-dismount-during-teleportation.patch
@@ -0,0 +1,113 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Shane Freeder <[email protected]>
+Date: Thu, 15 Nov 2018 13:38:37 +0000
+Subject: [PATCH] force entity dismount during teleportation
+
+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/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
+index 50c5ad0eea45c1828b9a1c6c47727e4800940252..d372e2793948f532f473cd6eca578ebd3ff3fbfb 100644
+--- a/src/main/java/net/minecraft/world/entity/Entity.java
++++ b/src/main/java/net/minecraft/world/entity/Entity.java
+@@ -2601,11 +2601,16 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+ }
+
+ public void removeVehicle() {
++ // Paper start - Force entity dismount during teleportation
++ stopRiding(false);
++ }
++ public void stopRiding(boolean suppressCancellation) {
++ // Paper end - Force entity dismount during teleportation
+ if (this.vehicle != null) {
+ Entity entity = this.vehicle;
+
+ this.vehicle = null;
+- if (!entity.removePassenger(this)) this.vehicle = entity; // CraftBukkit
++ if (!entity.removePassenger(this, suppressCancellation)) this.vehicle = entity; // CraftBukkit // Paper - Force entity dismount during teleportation
+ }
+
+ }
+@@ -2636,7 +2641,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+ }
+ }
+
+- protected boolean removePassenger(Entity entity) { // CraftBukkit
++ // Paper start - Force entity dismount during teleportation
++ protected boolean removePassenger(Entity entity) { return removePassenger(entity, false);}
++ protected boolean removePassenger(Entity entity, boolean suppressCancellation) { // CraftBukkit
++ // Paper end - Force entity dismount during teleportation
+ if (entity.getVehicle() == this) {
+ throw new IllegalStateException("Use x.stopRiding(y), not y.removePassenger(x)");
+ } else {
+@@ -2646,7 +2654,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+ if (this.getBukkitEntity() instanceof Vehicle && entity.getBukkitEntity() instanceof LivingEntity) {
+ VehicleExitEvent event = new VehicleExitEvent(
+ (Vehicle) this.getBukkitEntity(),
+- (LivingEntity) entity.getBukkitEntity()
++ (LivingEntity) entity.getBukkitEntity(), !suppressCancellation // Paper - Force entity dismount during teleportation
+ );
+ // Suppress during worldgen
+ if (this.valid) {
+@@ -2659,7 +2667,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+ }
+ }
+
+- EntityDismountEvent event = new EntityDismountEvent(entity.getBukkitEntity(), this.getBukkitEntity());
++ EntityDismountEvent event = new EntityDismountEvent(entity.getBukkitEntity(), this.getBukkitEntity(), !suppressCancellation); // Paper - Force entity dismount during teleportation
+ // Suppress during worldgen
+ if (this.valid) {
+ Bukkit.getPluginManager().callEvent(event);
+diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
+index 9bb2b2baecfd4cfb9dbbf7cf5c8be939f1ecc4d6..47b1a4ec278cf9762c9eb9c1448cf78912b7d77a 100644
+--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
++++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
+@@ -3585,9 +3585,15 @@ public abstract class LivingEntity extends Entity implements Attackable {
+
+ @Override
+ public void stopRiding() {
++ // Paper start - Force entity dismount during teleportation
++ stopRiding(false);
++ }
++ @Override
++ public void stopRiding(boolean suppressCancellation) {
++ // Paper end - Force entity dismount during teleportation
+ Entity entity = this.getVehicle();
+
+- super.stopRiding();
++ super.stopRiding(suppressCancellation); // Paper - Force entity dismount during teleportation
+ if (entity != null && entity != this.getVehicle() && !this.level().isClientSide) {
+ this.dismountVehicle(entity);
+ }
+diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
+index b27a6719edd47f7ecb3f8c5560a36fc201efea36..bbafbeff99a7c1bd2d9e27982671a017071f829c 100644
+--- a/src/main/java/net/minecraft/world/entity/player/Player.java
++++ b/src/main/java/net/minecraft/world/entity/player/Player.java
+@@ -1150,7 +1150,13 @@ public abstract class Player extends LivingEntity {
+
+ @Override
+ public void removeVehicle() {
+- super.removeVehicle();
++ // Paper start - Force entity dismount during teleportation
++ stopRiding(false);
++ }
++ @Override
++ public void stopRiding(boolean suppressCancellation) {
++ super.stopRiding(suppressCancellation);
++ // Paper end - Force entity dismount during teleportation
+ this.boardingCooldown = 0;
+ }
+