mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-25 12:05:53 +01:00
94 lines
4.7 KiB
Diff
94 lines
4.7 KiB
Diff
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 7784ff17216a25c6dbf26648831c04734300dad1..faa239dcb9b7b608911b464c3665c8b064ee6c41 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
|
@@ -853,8 +853,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 6db0613904c172fb6ae7e868f542f56aeaa63a5e..22b3d3d945cbddae25abfca7d900324c79d32293 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
|
@@ -2702,7 +2702,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 7d360620bd78f28f366815a019c57e5058d9f2a3..6dc3fc701d1e16a51d99f934ea3dc192363a6762 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
@@ -167,6 +167,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
|
|
@@ -275,6 +310,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
|