geforkt von Mirrors/Paper
74f507f4e3
Upstream has released updates that appears 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: e461dcfe #555: Item - add getters/setters for owner/thrower CraftBukkit Changes: 055870c4 #758: Item - add getters/setters for owner/thrower
54 Zeilen
3.2 KiB
Diff
54 Zeilen
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 bdfaaa535a9339a8f6fb51d5fb7892becf617097..b83abceb55fd6cc6bde3e34da098e9916e3a497b 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
@@ -493,4 +493,9 @@ public class PaperWorldConfig {
|
|
}
|
|
log("Anti-Xray: " + (antiXray ? "enabled" : "disabled") + " / Engine Mode: " + engineMode.getDescription() + " / Up to " + ((maxChunkSectionIndex + 1) * 16) + " blocks / Update Radius: " + updateRadius);
|
|
}
|
|
+
|
|
+ public boolean disableRelativeProjectileVelocity;
|
|
+ private void disableRelativeProjectileVelocity() {
|
|
+ disableRelativeProjectileVelocity = getBoolean("game-mechanics.disable-relative-projectile-velocity", false);
|
|
+ }
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/IProjectile.java b/src/main/java/net/minecraft/server/IProjectile.java
|
|
index 8d26521bc414b3d34f496e966f0c918b023f4833..9f5ce64a60fe7c312399ee416b11b84213dd3bee 100644
|
|
--- a/src/main/java/net/minecraft/server/IProjectile.java
|
|
+++ b/src/main/java/net/minecraft/server/IProjectile.java
|
|
@@ -114,7 +114,7 @@ public abstract class IProjectile extends Entity {
|
|
this.shoot((double) f5, (double) f6, (double) f7, f3, f4);
|
|
Vec3D vec3d = entity.getMot();
|
|
|
|
- this.setMot(this.getMot().add(vec3d.x, entity.isOnGround() ? 0.0D : vec3d.y, vec3d.z));
|
|
+ if (!entity.world.paperConfig.disableRelativeProjectileVelocity) this.setMot(this.getMot().add(vec3d.x, entity.isOnGround() ? 0.0D : vec3d.y, vec3d.z)); // Paper - allow disabling relative velocity
|
|
}
|
|
|
|
protected void a(MovingObjectPosition movingobjectposition) {
|