SPIGOT-3829: Apply some speed limits to all entities

Dieser Commit ist enthalten in:
md_5 2018-02-19 09:52:00 +11:00
Ursprung bacaf9274b
Commit 1bb523c4e4

Datei anzeigen

@ -372,7 +372,7 @@
this.locX = nbttaglist.f(0);
this.locY = nbttaglist.f(1);
@@ -1397,6 +1619,58 @@
@@ -1397,6 +1619,57 @@
this.setPosition(this.locX, this.locY, this.locZ);
}
@ -388,20 +388,19 @@
+ }
+ // CraftBukkit end
+
+ // CraftBukkit start - Exempt Vehicles from notch's sanity check
+ if (!(getBukkitEntity() instanceof Vehicle)) {
+ if (Math.abs(this.motX) > 10.0D) {
+ // CraftBukkit start
+ double limit = getBukkitEntity() instanceof Vehicle ? 100.0D : 10.0D;
+ if (Math.abs(this.motX) > limit) {
+ this.motX = 0.0D;
+ }
+
+ if (Math.abs(this.motY) > 10.0D) {
+ if (Math.abs(this.motY) > limit) {
+ this.motY = 0.0D;
+ }
+
+ if (Math.abs(this.motZ) > 10.0D) {
+ if (Math.abs(this.motZ) > limit) {
+ this.motZ = 0.0D;
+ }
+ }
+ // CraftBukkit end
+
+ // CraftBukkit start - Reset world
@ -431,7 +430,7 @@
} catch (Throwable throwable) {
CrashReport crashreport = CrashReport.a(throwable, "Loading entity NBT");
CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Entity being loaded");
@@ -1464,6 +1738,12 @@
@@ -1464,6 +1737,12 @@
if (itemstack.isEmpty()) {
return null;
} else {
@ -444,7 +443,7 @@
EntityItem entityitem = new EntityItem(this.world, this.locX, this.locY + (double) f, this.locZ, itemstack);
entityitem.q();
@@ -1589,6 +1869,24 @@
@@ -1589,6 +1868,24 @@
if (entity.bJ() != this) {
throw new IllegalStateException("Use x.startRiding(y), not y.addPassenger(x)");
} else {
@ -469,7 +468,7 @@
if (!this.world.isClientSide && entity instanceof EntityHuman && !(this.bE() instanceof EntityHuman)) {
this.passengers.add(0, entity);
} else {
@@ -1602,6 +1900,22 @@
@@ -1602,6 +1899,22 @@
if (entity.bJ() == this) {
throw new IllegalStateException("Use x.stopRiding(y), not y.removePassenger(x)");
} else {
@ -492,7 +491,7 @@
this.passengers.remove(entity);
entity.j = 60;
}
@@ -1741,14 +2055,49 @@
@@ -1741,14 +2054,49 @@
}
public void setAirTicks(int i) {
@ -545,7 +544,7 @@
}
}
@@ -1893,19 +2242,76 @@
@@ -1893,19 +2241,76 @@
if (!this.world.isClientSide && !this.dead) {
this.world.methodProfiler.a("changeDimension");
MinecraftServer minecraftserver = this.C_();
@ -625,7 +624,7 @@
BlockPosition blockposition;
if (i == 1) {
@@ -1934,12 +2340,18 @@
@@ -1934,12 +2339,18 @@
blockposition = new BlockPosition(this);
}
@ -645,7 +644,7 @@
if (j == 1 && i == 1) {
BlockPosition blockposition1 = worldserver1.q(worldserver1.getSpawn());
@@ -1947,6 +2359,7 @@
@@ -1947,6 +2358,7 @@
} else {
entity.setPositionRotation(blockposition, entity.yaw, entity.pitch);
}
@ -653,7 +652,7 @@
boolean flag = entity.attachedToPlayer;
@@ -1954,13 +2367,21 @@
@@ -1954,13 +2366,21 @@
worldserver1.addEntity(entity);
entity.attachedToPlayer = flag;
worldserver1.entityJoinedWorld(entity, false);
@ -676,7 +675,7 @@
return entity;
} else {
return null;
@@ -2064,6 +2485,11 @@
@@ -2064,6 +2484,11 @@
}
public void setCustomName(String s) {
@ -688,7 +687,7 @@
this.datawatcher.set(Entity.aB, s);
}
@@ -2121,7 +2547,26 @@
@@ -2121,7 +2546,26 @@
}
public void a(AxisAlignedBB axisalignedbb) {
@ -716,7 +715,7 @@
}
public float getHeadHeight() {
@@ -2295,7 +2740,7 @@
@@ -2295,7 +2739,7 @@
for (Iterator iterator = this.bF().iterator(); iterator.hasNext(); entity.a(oclass, set)) {
entity = (Entity) iterator.next();
if (oclass.isAssignableFrom(entity.getClass())) {