mirror of
https://github.com/PaperMC/Paper.git
synced 2025-02-05 23:21:38 +01:00
Configurable per-world void damage offset/damage(#11436)
This commit is contained in:
parent
74e7902624
commit
6e485c3409
65
patches/api/Void-damage-configuration-API.patch
Normal file
65
patches/api/Void-damage-configuration-API.patch
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Axionize <154778082+Axionize@users.noreply.github.com>
|
||||||
|
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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/org/bukkit/World.java
|
||||||
|
+++ b/src/main/java/org/bukkit/World.java
|
||||||
|
@@ -0,0 +0,0 @@ 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
|
@ -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
|
to pass the proper replacement state to the event, specifically for
|
||||||
potentially waterlogged block states fading.
|
potentially waterlogged block states fading.
|
||||||
|
|
||||||
Co-authored-by: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com
|
Co-authored-by: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com>
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/world/level/block/FrogspawnBlock.java b/src/main/java/net/minecraft/world/level/block/FrogspawnBlock.java
|
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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
@ -1455,6 +1455,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+import java.util.IdentityHashMap;
|
+import java.util.IdentityHashMap;
|
||||||
+import java.util.List;
|
+import java.util.List;
|
||||||
+import java.util.Map;
|
+import java.util.Map;
|
||||||
|
+import java.util.OptionalDouble;
|
||||||
+import java.util.function.Function;
|
+import java.util.function.Function;
|
||||||
+import java.util.stream.Collectors;
|
+import java.util.stream.Collectors;
|
||||||
+import net.minecraft.Util;
|
+import net.minecraft.Util;
|
||||||
@ -1838,6 +1839,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+ public boolean disableExplosionKnockback = false;
|
+ public boolean disableExplosionKnockback = false;
|
||||||
+ public boolean generateFlatBedrock = false;
|
+ public boolean generateFlatBedrock = false;
|
||||||
+ public FrostedIce frostedIce;
|
+ public FrostedIce frostedIce;
|
||||||
|
+ public DoubleOr.Disabled voidDamageAmount = new DoubleOr.Disabled(OptionalDouble.of(4));
|
||||||
|
+ public double voidDamageMinBuildHeightOffset = -64.0;
|
||||||
+
|
+
|
||||||
+ public class FrostedIce extends ConfigurationPart {
|
+ public class FrostedIce extends ConfigurationPart {
|
||||||
+ public boolean enabled = true;
|
+ public boolean enabled = true;
|
||||||
|
94
patches/server/Void-damage-configuration-API.patch
Normal file
94
patches/server/Void-damage-configuration-API.patch
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Axionize <154778082+Axionize@users.noreply.github.com>
|
||||||
|
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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
||||||
|
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||||
|
@@ -0,0 +0,0 @@ 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||||
|
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||||
|
@@ -0,0 +0,0 @@ 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||||
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||||
|
@@ -0,0 +0,0 @@ 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
|
||||||
|
@@ -0,0 +0,0 @@ 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
|
Loading…
Reference in New Issue
Block a user