-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Configurable per-world void damage offset/damage(#11436)
- Loading branch information
Showing
4 changed files
with
165 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: Axionize <[email protected]> | ||
Date: Wed, 25 Sep 2024 04:43:26 -0400 | ||
Subject: [PATCH] Void damage configuration API | ||
|
||
|
||
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java | ||
index adcd8161846b06fd1a7895750f98b629204a8406..ef32a937e6faf1e8a5d6b1207986715bae5a246c 100644 | ||
--- a/src/main/java/org/bukkit/World.java | ||
+++ b/src/main/java/org/bukkit/World.java | ||
@@ -52,6 +52,54 @@ import org.jetbrains.annotations.Nullable; | ||
*/ | ||
public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient, Metadatable, PersistentDataHolder, Keyed, net.kyori.adventure.audience.ForwardingAudience { // Paper | ||
|
||
+ // Paper start - void damage configuration | ||
+ /** | ||
+ * Checks if void damage is enabled on this world. | ||
+ * | ||
+ * @return true if enabled | ||
+ */ | ||
+ boolean isVoidDamageEnabled(); | ||
+ | ||
+ /** | ||
+ * Sets whether void damage is enabled on this world. | ||
+ * | ||
+ * @param enabled true to enable void damage | ||
+ */ | ||
+ void setVoidDamageEnabled(boolean enabled); | ||
+ | ||
+ /** | ||
+ * Gets the damage applied to the player when they are in the void in this world. | ||
+ * Check {@link #isVoidDamageEnabled()} to see if void damage is enabled. | ||
+ * | ||
+ * @return amount of damage to apply | ||
+ * @see #isVoidDamageEnabled() | ||
+ */ | ||
+ float getVoidDamageAmount(); | ||
+ | ||
+ /** | ||
+ * Sets the damage applied to the player when they are in the void in this world. | ||
+ * Check {@link #isVoidDamageEnabled()} to see if void damage is enabled. | ||
+ * | ||
+ * @param voidDamageAmount amount of damage to apply | ||
+ */ | ||
+ void setVoidDamageAmount(float voidDamageAmount); | ||
+ | ||
+ /** | ||
+ * Gets the offset applied to {@link #getMinHeight()} to determine the height at which void damage starts to apply. | ||
+ * | ||
+ * @return offset from min build height | ||
+ * @see #isVoidDamageEnabled() | ||
+ */ | ||
+ double getVoidDamageMinBuildHeightOffset(); | ||
+ | ||
+ /** | ||
+ * Sets the offset applied to {@link #getMinHeight()} to determine the height at which void damage starts to apply. | ||
+ * | ||
+ * @param minBuildHeightOffset offset from min build height | ||
+ */ | ||
+ void setVoidDamageMinBuildHeightOffset(double minBuildHeightOffset); | ||
+ // Paper end - void damage configuration | ||
+ | ||
// Paper start | ||
/** | ||
* @return The amount of Entities in this world |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,7 +7,7 @@ Beyond calling the BlockFadeEvent in more places, this patch also aims | |
to pass the proper replacement state to the event, specifically for | ||
potentially waterlogged block states fading. | ||
|
||
Co-authored-by: Lulu13022002 <[email protected] | ||
Co-authored-by: Lulu13022002 <[email protected]> | ||
|
||
diff --git a/src/main/java/net/minecraft/world/level/block/FrogspawnBlock.java b/src/main/java/net/minecraft/world/level/block/FrogspawnBlock.java | ||
index 669234bca9fa50548447f77dc5f314df8d9dd7c9..f2d4264743b6070f36adb66d00a3de0a72b86846 100644 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
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 bc45c74987974b4828201e06fc8b1f3fbc0af8b4..4b54d0ea31062972e68ee8fafe3cfaf68f65a5cd 100644 | ||
--- a/src/main/java/net/minecraft/world/entity/Entity.java | ||
+++ b/src/main/java/net/minecraft/world/entity/Entity.java | ||
@@ -931,8 +931,10 @@ 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.getMinBuildHeight() - 64) || (this.level.getWorld().getEnvironment() == org.bukkit.World.Environment.NETHER | ||
+ if (this.getY() < (double) (this.level.getMinBuildHeight() + 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 30f4f1254fc295442d72d50479e8af635f2fe983..2aa6374cd4a96efd85899be8cd3172a8257bfe6b 100644 | ||
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java | ||
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java | ||
@@ -2625,7 +2625,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 38b046da5acac8633db8618a2957187d291f5e73..33e4818ba5a90d78d69baad9f6b1be1b1382e9f3 100644 | ||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java | ||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java | ||
@@ -163,6 +163,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 | ||
@@ -271,6 +306,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 |