aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/unapplied/server/0290-Configurable-projectile-relative-velocity.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/unapplied/server/0290-Configurable-projectile-relative-velocity.patch')
-rw-r--r--patches/unapplied/server/0290-Configurable-projectile-relative-velocity.patch43
1 files changed, 43 insertions, 0 deletions
diff --git a/patches/unapplied/server/0290-Configurable-projectile-relative-velocity.patch b/patches/unapplied/server/0290-Configurable-projectile-relative-velocity.patch
new file mode 100644
index 0000000000..93e1cc2d7d
--- /dev/null
+++ b/patches/unapplied/server/0290-Configurable-projectile-relative-velocity.patch
@@ -0,0 +1,43 @@
+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 80637835a35dbfd7c7458b246ddee9d836e5101a..0e4ba92d97998937ccb83ebd60aaad3fb68f7546 100644
+--- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
++++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
+@@ -192,8 +192,11 @@ public abstract class Projectile extends Entity implements TraceableEntity {
+
+ this.shoot((double) f5, (double) f6, (double) f7, speed, divergence);
+ Vec3 vec3d = shooter.getKnownMovement();
+-
++ // Paper start - allow disabling relative velocity
++ if (!shooter.level().paperConfig().misc.disableRelativeProjectileVelocity) {
+ this.setDeltaMovement(this.getDeltaMovement().add(vec3d.x, shooter.onGround() ? 0.0D : vec3d.y, vec3d.z));
++ }
++ // Paper end - allow disabling relative velocity
+ }
+
+ public static <T extends Projectile> T spawnProjectileFromRotation(Projectile.ProjectileFactory<T> creator, ServerLevel world, ItemStack projectileStack, LivingEntity shooter, float roll, float power, float divergence) {