Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-11-14 20:10:05 +01:00
661839e033
It was returning ticking chunk count instead of the intended full chunk count. We can also directly use the size of the fullChunks collection instead of iterating all chunks.
94 Zeilen
4.7 KiB
Diff
94 Zeilen
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 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 99c98a91fe7471791fca8233acf6eeba516b10ed..4836b01323abb125289982ef3ceca09d6a9cfc3b 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 0437eee2b34b2ad5799892390726ff79635b6baf..30dc6ac6c7da7397a113da2994b16ef375b067fa 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
|
|
@@ -267,6 +302,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
|