mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-11 01:12:47 +01:00
bc127ea819
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: eec4aab0 SPIGOT-6657: Add getPlayer to SheepDyeWoolEvent 205213c6 SPIGOT-6656: CauldronLevelChangeEvent is not fired correctly when dripstone fills the cauldron CraftBukkit Changes: b8c522d5 SPIGOT-6657: Add getPlayer to SheepDyeWoolEvent f04a77dc SPIGOT-6656: CauldronLevelChangeEvent is not fired correctly when dripstone fills the cauldron d1dbcebc SPIGOT-6653: Canceling snow bucket placement removes snow from bucket 4f34a67b #891: Fix scheduler task ID overflow and duplication issues Spigot Changes: d03d7f12 BUILDTOOLS-604: Rebuild patches
54 lines
3.2 KiB
Diff
54 lines
3.2 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Lucavon <lucavonlp@gmail.com>
|
|
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
|
|
nabled, 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/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
index baf33659b021c89cbd02560cbfd9b0ddf205f0e2..4c177a383b277debe8a7c02a70d029d862e6b048 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
@@ -411,5 +411,10 @@ public class PaperWorldConfig {
|
|
log("Using improved mob spawn limits (Only Natural Spawns impact spawn limits for more natural spawns)");
|
|
}
|
|
}
|
|
+
|
|
+ public boolean disableRelativeProjectileVelocity;
|
|
+ private void disableRelativeProjectileVelocity() {
|
|
+ disableRelativeProjectileVelocity = getBoolean("game-mechanics.disable-relative-projectile-velocity", false);
|
|
+ }
|
|
}
|
|
|
|
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 21ce4be0d8d0147a92f87e17bb5078a211419984..37356b36f0ae12d55150f399318581fa77c30cee 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
|
|
@@ -161,7 +161,7 @@ public abstract class Projectile extends Entity {
|
|
this.shoot((double) f5, (double) f6, (double) f7, modifierZ, modifierXYZ);
|
|
Vec3 vec3d = user.getDeltaMovement();
|
|
|
|
- this.setDeltaMovement(this.getDeltaMovement().add(vec3d.x, user.isOnGround() ? 0.0D : vec3d.y, vec3d.z));
|
|
+ if (!user.level.paperConfig.disableRelativeProjectileVelocity) this.setDeltaMovement(this.getDeltaMovement().add(vec3d.x, user.isOnGround() ? 0.0D : vec3d.y, vec3d.z)); // Paper - allow disabling relative velocity
|
|
}
|
|
|
|
// CraftBukkit start - call projectile hit event
|