aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/unapplied/server/1029-Void-damage-configuration-API.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/unapplied/server/1029-Void-damage-configuration-API.patch')
-rw-r--r--patches/unapplied/server/1029-Void-damage-configuration-API.patch93
1 files changed, 93 insertions, 0 deletions
diff --git a/patches/unapplied/server/1029-Void-damage-configuration-API.patch b/patches/unapplied/server/1029-Void-damage-configuration-API.patch
new file mode 100644
index 0000000000..5b445033c3
--- /dev/null
+++ b/patches/unapplied/server/1029-Void-damage-configuration-API.patch
@@ -0,0 +1,93 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Axionize <[email protected]>
+Date: Sun, 29 Sep 2024 14:20:42 -0700
+Subject: [PATCH] Void damage configuration API
+
+
+diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
+index 20fcfb7d7d2541731452454d78f6967215c4fcd7..5949cbccb569ab1d518508d200e69ad9d7d0ba9a 100644
+--- a/src/main/java/net/minecraft/world/entity/Entity.java
++++ b/src/main/java/net/minecraft/world/entity/Entity.java
+@@ -854,8 +854,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+ }
+
+ public void checkBelowWorld() {
++ if (!this.level.getWorld().isVoidDamageEnabled()) return; // Paper - check if void damage is enabled on the world
+ // Paper start - Configurable nether ceiling damage
+- if (this.getY() < (double) (this.level.getMinY() - 64) || (this.level.getWorld().getEnvironment() == org.bukkit.World.Environment.NETHER
++ if (this.getY() < (double) (this.level.getMinY() + this.level.getWorld().getVoidDamageMinBuildHeightOffset()) || (this.level.getWorld().getEnvironment() == org.bukkit.World.Environment.NETHER // Paper - use configured min build height offset
+ && this.level.paperConfig().environment.netherCeilingVoidDamageHeight.test(v -> this.getY() >= v)
+ && (!(this instanceof Player player) || !player.getAbilities().invulnerable))) {
+ // Paper end - Configurable nether ceiling damage
+diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
+index f2708479ccf994278ad1ab4665edc46672001e8a..59c992173fda6153c58722caae061b0e6bee86a1 100644
+--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
++++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
+@@ -2701,7 +2701,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
+
+ @Override
+ protected void onBelowWorld() {
+- this.hurt(this.damageSources().fellOutOfWorld(), 4.0F);
++ this.hurt(this.damageSources().fellOutOfWorld(), this.level().getWorld().getVoidDamageAmount()); // Paper - use configured void damage amount
+ }
+
+ protected void updateSwingTime() {
+diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+index 1a6f4621190c9f3859c1ef6588718a8a555e026d..ebee036527eaef5e940dd4fec8e3c5dab12fac76 100644
+--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
++++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+@@ -168,6 +168,41 @@ public class CraftWorld extends CraftRegionAccessor implements World {
+ private final Object2IntOpenHashMap<SpawnCategory> spawnCategoryLimit = new Object2IntOpenHashMap<>();
+ private final CraftPersistentDataContainer persistentDataContainer = new CraftPersistentDataContainer(CraftWorld.DATA_TYPE_REGISTRY);
+ private net.kyori.adventure.pointer.Pointers adventure$pointers; // Paper - implement pointers
++ // Paper start - void damage configuration
++ private boolean voidDamageEnabled;
++ private float voidDamageAmount;
++ private double voidDamageMinBuildHeightOffset;
++
++ @Override
++ public boolean isVoidDamageEnabled() {
++ return this.voidDamageEnabled;
++ }
++
++ @Override
++ public void setVoidDamageEnabled(final boolean enabled) {
++ this.voidDamageEnabled = enabled;
++ }
++
++ @Override
++ public float getVoidDamageAmount() {
++ return this.voidDamageAmount;
++ }
++
++ @Override
++ public void setVoidDamageAmount(float voidDamageAmount) {
++ this.voidDamageAmount = voidDamageAmount;
++ }
++
++ @Override
++ public double getVoidDamageMinBuildHeightOffset() {
++ return this.voidDamageMinBuildHeightOffset;
++ }
++
++ @Override
++ public void setVoidDamageMinBuildHeightOffset(double minBuildHeightOffset) {
++ this.voidDamageMinBuildHeightOffset = minBuildHeightOffset;
++ }
++ // Paper end - void damage configuration
+
+ // Paper start - Provide fast information methods
+ @Override
+@@ -268,6 +303,12 @@ public class CraftWorld extends CraftRegionAccessor implements World {
+ }
+ }
+ // Paper end - per world spawn limits
++
++ // Paper start - per world void damage height
++ this.voidDamageEnabled = this.world.paperConfig().environment.voidDamageAmount.enabled();
++ this.voidDamageMinBuildHeightOffset = this.world.paperConfig().environment.voidDamageMinBuildHeightOffset;
++ this.voidDamageAmount = (float) this.world.paperConfig().environment.voidDamageAmount.or(0);
++ // Paper end - per world void damage height
+ }
+
+ @Override