aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0303-Configurable-projectile-relative-velocity.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0303-Configurable-projectile-relative-velocity.patch')
-rw-r--r--patches/server/0303-Configurable-projectile-relative-velocity.patch39
1 files changed, 39 insertions, 0 deletions
diff --git a/patches/server/0303-Configurable-projectile-relative-velocity.patch b/patches/server/0303-Configurable-projectile-relative-velocity.patch
new file mode 100644
index 0000000000..5c75a20f54
--- /dev/null
+++ b/patches/server/0303-Configurable-projectile-relative-velocity.patch
@@ -0,0 +1,39 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Lucavon <[email protected]>
+Date: Tue, 23 Jul 2019 20:29:20 -0500
+Subject: [PATCH] Configurable projectile relative velocity
+
+This patch adds an option "disable relative projectile velocity", which, when
+enabled, will cause projectiles to ignore the shooter's current velocity,
+like they did in Minecraft 1.8 and prior.
+If a player is falling, for example, their shooting range will be drastically
+reduced, as a downwards velocity is applied to the projectile. This prevents
+players from saving themselves from falling off floating islands, for example,
+as a thrown ender pearl will not make it back to the island, while it would
+have in 1.8.
+
+While this could easily be done with plugins, too, there are multiple problems:
+P1) If multiple plugins cancel the velocity by subtracting the shooter's velocity
+from the projectile's velocity, the projectile's velocity would be different.
+As there's no way to detect whether the projectile's velocity has already been
+adjusted to ignore the player's velocity, plugins can't not do it if it's not
+necessary.
+P2) I've noticed some inconsistencies, e.g. weird velocity when shooting while
+using an elytra. Checking for those inconsistencies is possible, but not as
+efficient as just not applying the velocity in the first place.
+P3) Solutions for 1) and especially 2) might not be future-proof, while this
+server-internal fix makes this change future-proof.
+
+diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
+index 4ebc38d0666d01c67c2728355fbbef296a0672e3..20842ed5b730dda88efd0cda9292a37f879a4017 100644
+--- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
++++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
+@@ -173,7 +173,7 @@ public abstract class Projectile extends Entity implements TraceableEntity {
+ this.shoot((double) f5, (double) f6, (double) f7, speed, divergence);
+ Vec3 vec3d = shooter.getDeltaMovement();
+
+- this.setDeltaMovement(this.getDeltaMovement().add(vec3d.x, shooter.onGround() ? 0.0D : vec3d.y, vec3d.z));
++ if (!shooter.level().paperConfig().misc.disableRelativeProjectileVelocity) this.setDeltaMovement(this.getDeltaMovement().add(vec3d.x, shooter.onGround() ? 0.0D : vec3d.y, vec3d.z)); // Paper - allow disabling relative velocity
+ }
+
+ // CraftBukkit start - call projectile hit event