13
0
geforkt von Mirrors/Paper

SPIGOT-5562: Entering a boat triggers VehicleExitEvent

This patch prevents entities from riding a vehicle they're already riding on.
When trying to enter a boat the client will send up to two packets for each hand
causing the server to think they should enter the boat twice, despite the first
interaction being sufficient.

By: SydMontague <sydmontague@phoenix-staffel.de>
Dieser Commit ist enthalten in:
CraftBukkit/Spigot 2020-06-25 10:00:00 +10:00
Ursprung 50503fd516
Commit dc5ebfac9a

Datei anzeigen

@ -384,7 +384,13 @@
this.world.addEntity(entityitem); this.world.addEntity(entityitem);
return entityitem; return entityitem;
} }
@@ -1559,7 +1801,7 @@ @@ -1554,12 +1796,13 @@
return false;
} else {
if (this.isPassenger()) {
+ if (this.vehicle == entity) return true; // CraftBukkit - SPIGOT-5562: already riding
this.stopRiding();
}
this.setPose(EntityPose.STANDING); this.setPose(EntityPose.STANDING);
this.vehicle = entity; this.vehicle = entity;
@ -393,7 +399,7 @@
return true; return true;
} }
} }
@@ -1584,7 +1826,7 @@ @@ -1584,7 +1827,7 @@
Entity entity = this.vehicle; Entity entity = this.vehicle;
this.vehicle = null; this.vehicle = null;
@ -402,7 +408,7 @@
} }
} }
@@ -1593,10 +1835,31 @@ @@ -1593,10 +1836,31 @@
this.bb(); this.bb();
} }
@ -435,7 +441,7 @@
if (!this.world.isClientSide && entity instanceof EntityHuman && !(this.getRidingPassenger() instanceof EntityHuman)) { if (!this.world.isClientSide && entity instanceof EntityHuman && !(this.getRidingPassenger() instanceof EntityHuman)) {
this.passengers.add(0, entity); this.passengers.add(0, entity);
} else { } else {
@@ -1604,15 +1867,33 @@ @@ -1604,15 +1868,33 @@
} }
} }
@ -470,7 +476,7 @@
} }
protected boolean q(Entity entity) { protected boolean q(Entity entity) {
@@ -1665,7 +1946,13 @@ @@ -1665,7 +1947,13 @@
this.world.getMethodProfiler().enter("portal"); this.world.getMethodProfiler().enter("portal");
this.portalTicks = i; this.portalTicks = i;
this.portalCooldown = this.getDefaultPortalCooldown(); this.portalCooldown = this.getDefaultPortalCooldown();
@ -485,7 +491,7 @@
this.world.getMethodProfiler().exit(); this.world.getMethodProfiler().exit();
} }
@@ -1765,6 +2052,13 @@ @@ -1765,6 +2053,13 @@
} }
public void setSwimming(boolean flag) { public void setSwimming(boolean flag) {
@ -499,7 +505,7 @@
this.setFlag(4, flag); this.setFlag(4, flag);
} }
@@ -1825,16 +2119,56 @@ @@ -1825,16 +2120,56 @@
} }
public void setAirTicks(int i) { public void setAirTicks(int i) {
@ -559,7 +565,7 @@
} }
public void k(boolean flag) { public void k(boolean flag) {
@@ -1986,18 +2320,45 @@ @@ -1986,18 +2321,45 @@
@Nullable @Nullable
public Entity a(WorldServer worldserver) { public Entity a(WorldServer worldserver) {
@ -609,7 +615,7 @@
} else { } else {
double d0 = this.locX(); double d0 = this.locX();
double d1 = this.locZ(); double d1 = this.locZ();
@@ -2023,7 +2384,16 @@ @@ -2023,7 +2385,16 @@
Vec3D vec3d1 = this.getPortalOffset(); Vec3D vec3d1 = this.getPortalOffset();
blockposition = new BlockPosition(d0, this.locY(), d1); blockposition = new BlockPosition(d0, this.locY(), d1);
@ -627,7 +633,7 @@
if (shapedetector_shape == null) { if (shapedetector_shape == null) {
return null; return null;
@@ -2033,6 +2403,11 @@ @@ -2033,6 +2404,11 @@
vec3d = shapedetector_shape.velocity; vec3d = shapedetector_shape.velocity;
f = (float) shapedetector_shape.yaw; f = (float) shapedetector_shape.yaw;
} }
@ -639,7 +645,7 @@
this.world.getMethodProfiler().exitEnter("reloading"); this.world.getMethodProfiler().exitEnter("reloading");
Entity entity = this.getEntityType().a((World) worldserver); Entity entity = this.getEntityType().a((World) worldserver);
@@ -2043,8 +2418,16 @@ @@ -2043,8 +2419,16 @@
entity.setMot(vec3d); entity.setMot(vec3d);
worldserver.addEntityTeleport(entity); worldserver.addEntityTeleport(entity);
if (worldserver.getDimensionKey() == World.THE_END) { if (worldserver.getDimensionKey() == World.THE_END) {
@ -657,7 +663,7 @@
} }
this.bJ(); this.bJ();
@@ -2253,7 +2636,26 @@ @@ -2253,7 +2637,26 @@
} }
public void a(AxisAlignedBB axisalignedbb) { public void a(AxisAlignedBB axisalignedbb) {