Compare commits

...

7 Commits

Author SHA1 Message Date
Bacteriawa 7b7eb911c9 Update Folia 2026-07-26 17:16:36 +08:00
Helvetica Volubi 0724ba3fa9 fix: bind packetListenerImpl to Connection when place new photographer (#160) 2026-07-26 01:38:29 +08:00
Helvetica Volubi e6d6562f4f update zh_cn.json 2026-07-26 00:45:33 +08:00
Helvetica Volubi 580201740e fix: update references and add additional launch parameters in documentation 2026-07-25 21:33:59 +08:00
Helvetica Volubi d54b248f27 fix: fix I18n in config comments 2026-07-25 19:45:01 +08:00
Helvetica Volubi 11b0b05a93 [ci skip]fix workflow & fix typo 2026-07-25 19:21:42 +08:00
Helvetica Volubi 7db058ef56 feat: add zh_cn config comment support & update en_us
Co-authored-by: flowingsun <rain_wyc@outlook.com>
2026-07-25 16:52:23 +08:00
56 changed files with 616 additions and 348 deletions
+13 -3
View File
@@ -29,6 +29,12 @@
- 🔬 **生电功能增强** - 在 Folia 上实现更多生电内容(完整生电请使用 Fabric)
- 🛠️ **更多实用功能** - 持续添加有用的服务器功能
### 额外启动参数
- morninggloryclip.useMojangSource 强制服务端使用mojang源下载文件
- morninggloryclip.enable.mixin 启用服务器插件的mixin支持
## 📥 下载
### 稳定版本
@@ -62,7 +68,11 @@ repositories {
}
dependencies {
compileOnly("fun.bm.lophine:lophine-api:$VERSION")
compileOnly("fun.bm.lophine:lophine-api:26.2.build.+")
}
java {
toolchain.languageVersion.set(JavaLanguageVersion.of(25))
}
```
@@ -79,8 +89,8 @@ dependencies {
<dependencies>
<dependency>
<groupId>fun.bm.lophine</groupId>
<artifactId>luminol-api</artifactId>
<version>$VERSION</version>
<artifactId>lophine-api</artifactId>
<version>[26.1.2.build,)</version>
</dependency>
</dependencies>
```
+12 -3
View File
@@ -29,6 +29,11 @@
- 🔬 **Redstone Enhancement** - More redstone functionality on Folia (use Fabric for complete redstone features)
- 🛠️ **More Useful Functions** - Continuously adding useful server features
### Additional Launch Parameters
- morninggloryclip.useMojangSource - Use Mojang's source for Minecraft Server
- morninggloryclip.enable.mixin - Enable mixin support for Leaves Plugin
## 📥 Download
### Stable Releases
@@ -62,7 +67,11 @@ repositories {
}
dependencies {
compileOnly("fun.bm.lophine:lophine-api:$VERSION")
compileOnly("fun.bm.lophine:lophine-api:26.2.build.+")
}
java {
toolchain.languageVersion.set(JavaLanguageVersion.of(25))
}
```
@@ -79,8 +88,8 @@ dependencies {
<dependencies>
<dependency>
<groupId>fun.bm.lophine</groupId>
<artifactId>luminol-api</artifactId>
<version>$VERSION</version>
<artifactId>lophine-api</artifactId>
<version>[26.1.2.build,)</version>
<scope>provided</scope>
</dependency>
</dependencies>
+64 -4
View File
@@ -1,5 +1,4 @@
import groovy.json.JsonSlurper
import groovy.json.JsonOutput
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.gradle.api.tasks.testing.logging.TestLogEvent
@@ -132,12 +131,73 @@ tasks.register("sortLangKeys") {
@Suppress("UNCHECKED_CAST")
val data = slurper.parse(file) as Map<String, Any?>
val sorted = data.toSortedMap()
val json = JsonOutput.toJson(sorted)
// Pretty print with 2-space indent
val pretty = JsonOutput.prettyPrint(json)
val pretty = formatJson(sorted)
file.writeText(pretty + "\n", charset = Charsets.UTF_8)
logger.lifecycle("Processed: ${file.name} (${sorted.size} keys)")
}
logger.lifecycle("Done.")
}
}
// --- Pure-Kotlin JSON serializer that preserves non-ASCII characters (e.g. CJK) ---
fun formatJson(value: Any?, indent: Int = 2): String {
val sb = StringBuilder()
appendJson(sb, value, indent, 0)
return sb.toString()
}
private fun appendJson(sb: StringBuilder, value: Any?, indent: Int, level: Int) {
when (value) {
null -> sb.append("null")
is Boolean -> sb.append(value)
is Number -> sb.append(value)
is String -> sb.append('"').append(escapeJsonString(value)).append('"')
is List<*> -> {
if (value.isEmpty()) { sb.append("[]"); return }
sb.append("[\n")
value.forEachIndexed { i, v ->
sb.append(" ".repeat(indent * (level + 1)))
appendJson(sb, v, indent, level + 1)
if (i < value.size - 1) sb.append(',')
sb.append('\n')
}
sb.append(" ".repeat(indent * level)).append(']')
}
is Map<*, *> -> {
if (value.isEmpty()) { sb.append("{}"); return }
sb.append("{\n")
val entries = value.entries.toList()
entries.forEachIndexed { i, (k, v) ->
sb.append(" ".repeat(indent * (level + 1)))
sb.append('"').append(escapeJsonString(k.toString())).append('"')
sb.append(": ")
appendJson(sb, v, indent, level + 1)
if (i < entries.size - 1) sb.append(',')
sb.append('\n')
}
sb.append(" ".repeat(indent * level)).append('}')
}
else -> sb.append('"').append(escapeJsonString(value.toString())).append('"')
}
}
private fun escapeJsonString(s: String): String {
val sb = StringBuilder(s.length)
for (c in s) {
when (c) {
'"' -> sb.append("\\\"")
'\\' -> sb.append("\\\\")
'\b' -> sb.append("\\b")
'\u000C' -> sb.append("\\f")
'\n' -> sb.append("\\n")
'\r' -> sb.append("\\r")
'\t' -> sb.append("\\t")
else -> if (c.code < 0x20) {
sb.append("\\u").append(String.format("%04x", c.code))
} else {
sb.append(c) // preserve CJK and all other printable chars as-is
}
}
}
return sb.toString()
}
+3 -3
View File
@@ -1,15 +1,15 @@
group=fun.bm.lophine
mcVersion=26.2
apiVersion=26.2
channel=STABLE
clipVersion=3.0.18
channel=BETA
clipVersion=1.0.0
weightVersion=2.0.15
# true for release, false for skip release, pre for pre-release
release=pre
# true for push to repo, false for skip push repo, auto for detect by release value
pushRepo=auto
foliaRef=602048cb815db2ded68cca8cd43f480b983185a1
foliaRef=e48800d446d2bdeb24a8d31d671554440687e846
org.gradle.configuration-cache=true
org.gradle.caching=true
+1 -1
View File
@@ -15,7 +15,7 @@
dependencies {
mache("io.papermc:mache:26.2+build.1")
- paperclip("io.papermc:paperclip:3.0.4")
+ hyacinthusclip("moe.luminolmc:hyacinthusclip:${providers.gradleProperty("clipVersion").get()}") // TODO Later - rebrand
+ hyacinthusclip("fun.bm:morninggloryclip:${providers.gradleProperty("clipVersion").get()}") // TODO Later - rebrand
}
paperweight {
@@ -5,10 +5,10 @@ Subject: [PATCH] Luminol Config System
diff --git a/net/minecraft/server/Main.java b/net/minecraft/server/Main.java
index a4d608d64b7d3477c9144d93547fd3b4f39a1b02..2a75f8fbd2e5f41ca138740319d34683915e3b5b 100644
index e2939cc39a8c103e4c4d7b01d39b5546486e4fbc..a557d488e4e289a61aeb9aed0cc133a0a7ce8f8c 100644
--- a/net/minecraft/server/Main.java
+++ b/net/minecraft/server/Main.java
@@ -107,6 +107,7 @@ public class Main {
@@ -110,6 +110,7 @@ public class Main {
JvmProfiler.INSTANCE.start(Environment.SERVER);
}
@@ -5,7 +5,7 @@ Subject: [PATCH] Correct player respawn place
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index fbe0ef19bfabfc42d9e0e08e17b08159321b3804..44b3dfbf529630d8cca9a4270ae2a7c94c5a077c 100644
index 57f93d978fe48fdf6e77b7bfb9f1de060e1a8524..924d5f3236d9ba9836f39fc844392099df9cd25c 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -511,8 +511,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -43,7 +43,7 @@ index fbe0ef19bfabfc42d9e0e08e17b08159321b3804..44b3dfbf529630d8cca9a4270ae2a7c9
if (inChunk == null) {
continue;
}
@@ -2018,7 +2030,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -1997,7 +2009,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
}
if (newLevel.dimension() == lastDimension) {
@@ -6,10 +6,10 @@ Subject: [PATCH] Do not enable any debug subscriptions
Really this would really crash the server by accident when the operators used F3 + J or toggled the debug synchronizer
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 44b3dfbf529630d8cca9a4270ae2a7c94c5a077c..34cc36f6bdf435593d16f2e7af280a27be048280 100644
index 924d5f3236d9ba9836f39fc844392099df9cd25c..fe34f2e648df9fd1174522baa5913976104b8d04 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -3504,7 +3504,8 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -3483,7 +3483,8 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
}
public Set<DebugSubscription<?>> debugSubscriptions() {
@@ -6,10 +6,10 @@ Subject: [PATCH] Fix riding statistics desync
Referred to: https://github.com/CraftCanvasMC/Canvas/commit/057175b0c10d5a4d1d9059fd9d077750c32633b2
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 34cc36f6bdf435593d16f2e7af280a27be048280..98d1ab3aa8dfbe571371d01544da2750339ce988 100644
index fe34f2e648df9fd1174522baa5913976104b8d04..fee4749c7938779f63155297bf9c7aeb0ca21709 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -2537,7 +2537,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -2516,7 +2516,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
}
}
@@ -19,7 +19,7 @@ index 34cc36f6bdf435593d16f2e7af280a27be048280..98d1ab3aa8dfbe571371d01544da2750
int distance = Math.round((float)Math.sqrt(dx * dx + dy * dy + dz * dz) * 100.0F);
Entity vehicle = this.getVehicle();
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index a2b57f62b745dd21e215f919d335f14f5cb1706f..2cf8bdf6c4ab04ab42829b7af5eb89e6bd509d7a 100644
index 07310ae30817fc88227355739074615969b48184..47eef926f57053ace7ea140261570c4970822062 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -4198,7 +4198,13 @@ public abstract class Entity
@@ -9,7 +9,7 @@ Almost the same bug as:
https://github.com/PaperMC/Folia/pull/418 and https://github.com/PaperMC/Folia/issues/393
diff --git a/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java b/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java
index 501a0e89cc7bcfce6793f059b080b38666e0fb64..ad35eafa457f706879ba8a9c92b3a34e620ee2d6 100644
index d0dba5cc351903fb762e231a95f302479794185f..fb00f70505a6c548cd1311d7ea55c6a501e814e3 100644
--- a/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java
+++ b/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java
@@ -264,7 +264,8 @@ public class ThrownEnderpearl extends ThrowableItemProjectile {
@@ -46,7 +46,7 @@ index c6434ff2e5c211887c2e98c8462a49e0e1cb5b21..534f103234eb92571c664cbcfea4ce4e
} else {entity.inactiveTick();} // Paper - EAR 2
profiler.pop();
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 2cf8bdf6c4ab04ab42829b7af5eb89e6bd509d7a..a52d5c0ba970d666fd57e075d14350ff07401bac 100644
index 47eef926f57053ace7ea140261570c4970822062..7953b7ece0b5e3f41e85252cdfd8e400fab212ae 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -387,6 +387,7 @@ public abstract class Entity
@@ -5,7 +5,7 @@ Subject: [PATCH] Fix player auto saving ignores interval
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 98d1ab3aa8dfbe571371d01544da2750339ce988..264de9099b19779f20ad23c41d0967670759ae12 100644
index fee4749c7938779f63155297bf9c7aeb0ca21709..5668906866917f7bb6088ae16146d917d2b840b0 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -208,7 +208,7 @@ import org.slf4j.Logger;
@@ -29,7 +29,7 @@ index c1faaf7d514c23d756aa626fa93aabd8bb503463..0c5fb17e7cce18eac68183cc3b5de6fc
// If the event is cancelled we move the player back to their old location.
if (event.isCancelled()) {
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index a52d5c0ba970d666fd57e075d14350ff07401bac..72f89eaba2ca8b66fa07a6378d93917dec83c688 100644
index 7953b7ece0b5e3f41e85252cdfd8e400fab212ae..343e4bb41acfab4e50729aa5dbe2a071dac376a3 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -4476,12 +4476,25 @@ public abstract class Entity
@@ -17,7 +17,7 @@ index b31b55f00e2ce1bd6c1011fe852bd1dbb37de524..75c36cbf86e56d4993169688a13f22cc
}
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 72f89eaba2ca8b66fa07a6378d93917dec83c688..6b7382f06a8c76b216b081e66789fe51466b1e29 100644
index 343e4bb41acfab4e50729aa5dbe2a071dac376a3..c04917f31585d9d670cc98cda8eb36187f4261d7 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -4460,6 +4460,7 @@ public abstract class Entity
@@ -8,7 +8,7 @@ On folia, entity usually cannot move out of the tickregion, but sometimes it act
Reference from : https://github.com/KaiijuMC/Kaiiju/blob/ver/1.20.1/patches/server/0040-Teleport-async-if-we-cannot-move-entity-off-main.patch
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 6b7382f06a8c76b216b081e66789fe51466b1e29..8c909108a0c468f353837787188c12f907369b9b 100644
index c04917f31585d9d670cc98cda8eb36187f4261d7..9270b887448023b6ace2e7fae6b632755ce90600 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -1163,6 +1163,19 @@ public abstract class Entity
@@ -33,7 +33,7 @@ index 13d7965fd4f99f0848b080349df41f8b1c31a19b..5b83f2edd6afe94c28bf491afab737e9
nmsEntity.stopRiding();
nmsEntity.teleportAsync(
diff --git a/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java b/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java
index ad35eafa457f706879ba8a9c92b3a34e620ee2d6..790c1bcf11150d31bf90c32345e4eb40de9a6a41 100644
index fb00f70505a6c548cd1311d7ea55c6a501e814e3..4df9a3356cfdee52761db47694e59779976840db 100644
--- a/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java
+++ b/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java
@@ -99,7 +99,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile {
@@ -275,10 +275,10 @@ index 534f103234eb92571c664cbcfea4ce4e990d3ea8..c4d9d890db784d376b876d70f0468df6
// CraftBukkit start
private final ResourceKey<LevelStem> typeKey;
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 264de9099b19779f20ad23c41d0967670759ae12..ab6229ee412cf2aa5affc87510230c587765080b 100644
index 5668906866917f7bb6088ae16146d917d2b840b0..4efbd0f840d74a3d96b28d38e48cba72d5c6fb9b 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -1705,7 +1705,30 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -1694,7 +1694,30 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
ServerLevel origin = this.level();
ServerPlayer.RespawnConfig respawnConfig = this.getRespawnConfig();
@@ -310,7 +310,7 @@ index 264de9099b19779f20ad23c41d0967670759ae12..ab6229ee412cf2aa5affc87510230c58
// modified based off PlayerList#respawn
@@ -1756,8 +1779,8 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -1745,8 +1768,8 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
// now the respawn logic is complete
// last, call the function callback
@@ -429,7 +429,7 @@ index 48f51b0f94df3e59c9410129489c63a4287bc0bc..2682f8702785b1e501748a308c5e394b
private final Vec2 spawnAngle;
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 8c909108a0c468f353837787188c12f907369b9b..1dd0ce3f8af52f5ba0da1d6617489a0de2c971b2 100644
index 9270b887448023b6ace2e7fae6b632755ce90600..66ddbdb130867a508ba161a570d101dbe6353246 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -392,6 +392,9 @@ public abstract class Entity
@@ -495,7 +495,7 @@ index 8c909108a0c468f353837787188c12f907369b9b..1dd0ce3f8af52f5ba0da1d6617489a0d
return true;
}
@@ -4864,6 +4886,13 @@ public abstract class Entity
@@ -4868,6 +4890,13 @@ public abstract class Entity
ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkX(initialPosition),
ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkZ(initialPosition)
);
@@ -509,7 +509,7 @@ index 8c909108a0c468f353837787188c12f907369b9b..1dd0ce3f8af52f5ba0da1d6617489a0d
// first, remove entity/passengers from world
EntityTreeNode passengerTree = this.detachPassengers();
@@ -4921,6 +4950,10 @@ public abstract class Entity
@@ -4925,6 +4954,10 @@ public abstract class Entity
if (info.postTeleportTransition() != null) {
info.postTeleportTransition().onTransition(teleported);
}
@@ -8,10 +8,10 @@ As part of: Kaiiju (https://github.com/KaiijuMC/Kaiiju/blob/c2b7aec8f7b418a39a2e
Licensed under: GPL-3.0 (https://github.com/KaiijuMC/Kaiiju/blob/c2b7aec8f7b418a39a2ec408e6411e6f752379da/LICENSE)
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 1dd0ce3f8af52f5ba0da1d6617489a0de2c971b2..cf70a8e2fe2fe70bcdf71f8112479031d80d8b75 100644
index 66ddbdb130867a508ba161a570d101dbe6353246..df82f900580ad1b71960eab890a7a6215f578421 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -4676,14 +4676,18 @@ public abstract class Entity
@@ -4676,15 +4676,19 @@ public abstract class Entity
targetPos, 16, // load 16 blocks to be safe from block physics
ca.spottedleaf.concurrentutil.util.Priority.HIGH,
(chunks) -> {
@@ -28,13 +28,14 @@ index 1dd0ce3f8af52f5ba0da1d6617489a0de2c971b2..cf70a8e2fe2fe70bcdf71f8112479031
portalInfoCompletable.complete(
new net.minecraft.world.level.portal.TeleportTransition(
- destination, Vec3.atBottomCenterOf(targetPos.below()), Vec3.ZERO, Direction.WEST.toYRot(), 0.0f,
- Relative.union(Relative.DELTA, Set.of(Relative.X_ROT)),
+ destination, finalPos, this.getDeltaMovement(), Direction.WEST.toYRot(), 0.0f, // Kaiiju - Vanilla end teleportation
false, false,
- Relative.union(Relative.DELTA, Set.of(Relative.X_ROT)),
+ /*Relative.union(Relative.DELTA, Set.of(Relative.X_ROT))*/Set.of(), // Kaiiju - Vanilla end teleportation
TeleportTransition.PLAY_PORTAL_SOUND.then(TeleportTransition.PLACE_PORTAL_TICKET),
org.bukkit.event.player.PlayerTeleportEvent.TeleportCause.END_PORTAL
)
@@ -4698,11 +4702,15 @@ public abstract class Entity
org.bukkit.event.player.PlayerTeleportEvent.TeleportCause.END_PORTAL,
TeleportTransition.PassengerTeleportationMode.POSITION_RIDER
@@ -4700,11 +4704,15 @@ public abstract class Entity
ca.spottedleaf.concurrentutil.util.Priority.HIGH,
(chunks) -> {
BlockPos adjustedSpawn = destination.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, spawnPos);
@@ -49,10 +50,10 @@ index 1dd0ce3f8af52f5ba0da1d6617489a0de2c971b2..cf70a8e2fe2fe70bcdf71f8112479031
new net.minecraft.world.level.portal.TeleportTransition(
- destination, Vec3.atBottomCenterOf(adjustedSpawn), Vec3.ZERO, 0.0f, 0.0f,
+ destination, finalPos, this.getDeltaMovement(), 0.0f, 0.0f, // Kaiiju - Vanilla end teleportation
false, false,
Relative.union(Relative.DELTA, Relative.ROTATION),
TeleportTransition.PLAY_PORTAL_SOUND.then(TeleportTransition.PLACE_PORTAL_TICKET),
org.bukkit.event.player.PlayerTeleportEvent.TeleportCause.END_PORTAL
@@ -4881,6 +4889,10 @@ public abstract class Entity
@@ -4885,6 +4893,10 @@ public abstract class Entity
return false;
}
@@ -63,7 +64,7 @@ index 1dd0ce3f8af52f5ba0da1d6617489a0de2c971b2..cf70a8e2fe2fe70bcdf71f8112479031
Vec3 initialPosition = this.position();
ChunkPos initialPositionChunk = new ChunkPos(
ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkX(initialPosition),
@@ -4955,9 +4967,14 @@ public abstract class Entity
@@ -4959,9 +4971,14 @@ public abstract class Entity
destination.levelUnloadStateLock.releaseRead();
// Luminol end
@@ -27,7 +27,7 @@ index 480b6b2405706fd4d7158d0e160adafd84099887..137389f7ee97fc3a15c8f5f87c058065
}
}
diff --git a/net/minecraft/world/level/block/EndPortalBlock.java b/net/minecraft/world/level/block/EndPortalBlock.java
index d42bb2a1721e4ab8c9956e18c3ca418b8d648c59..4f06daf619596d4116140b0710ea92c2c8552fc0 100644
index 123df098fa987030fe3789f36ff95aeee2979834..35b0632faf2709f65f731cd42e575ee967937254 100644
--- a/net/minecraft/world/level/block/EndPortalBlock.java
+++ b/net/minecraft/world/level/block/EndPortalBlock.java
@@ -76,6 +76,12 @@ public class EndPortalBlock extends BaseEntityBlock implements Portal {
@@ -5,7 +5,7 @@ Subject: [PATCH] Add config for vanilla random
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index cf70a8e2fe2fe70bcdf71f8112479031d80d8b75..17650e196f1e5b79765651bf302291873a4eb509 100644
index df82f900580ad1b71960eab890a7a6215f578421..39f2b44846c02796a3671a5dec75b7b34d8c488e 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -298,7 +298,7 @@ public abstract class Entity
@@ -5,7 +5,7 @@ Subject: [PATCH] Add force the data command to be enabled config
diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java
index bc9f6cc286536b87513de81855ad0b61cf787c84..afbaf2116930d72ebb0c77745d02115abab14dc4 100644
index 4ddb5e7ce3529466c3930caa9aa6b18158e9a63d..9b1dcfadd6d5ae868b087a18983d03e8bb86b56a 100644
--- a/net/minecraft/commands/Commands.java
+++ b/net/minecraft/commands/Commands.java
@@ -202,7 +202,9 @@ public class Commands {
@@ -6,7 +6,7 @@ Subject: [PATCH] Add back read-only datapack command & Fix datapack command
diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java
index afbaf2116930d72ebb0c77745d02115abab14dc4..6823c41c08ca1a1baf9257fc861ae97bbcbe3a50 100644
index 9b1dcfadd6d5ae868b087a18983d03e8bb86b56a..21f2b9866e1cf36421e10a945fb6fbaa251009ed 100644
--- a/net/minecraft/commands/Commands.java
+++ b/net/minecraft/commands/Commands.java
@@ -205,7 +205,7 @@ public class Commands {
@@ -106,7 +106,7 @@ index 0641b98ef3298eb682ceae83f60b730f3bf90103..cea4bc7036dfd8777c151a0dd811fc13
}
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index ab6229ee412cf2aa5affc87510230c587765080b..f0c574e039f80ff0227239356de8d61ef06a0936 100644
index 4efbd0f840d74a3d96b28d38e48cba72d5c6fb9b..8e4bbb224d036cf9f33667aec57bbc339c9e8377 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -441,7 +441,9 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -183,10 +183,10 @@ index f03fa06c0ba56f7f5e1e45bc1568a490751efde3..eee1c14249addbf4714df733870da974
+ // KioCG end
}
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 17650e196f1e5b79765651bf302291873a4eb509..f218b7f6ce32d7ac959255e59c620d6fd420bf8e 100644
index 39f2b44846c02796a3671a5dec75b7b34d8c488e..fe0208815dbf53855d47956925b817570f6ae5b0 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -6468,4 +6468,6 @@ public abstract class Entity
@@ -6479,4 +6479,6 @@ public abstract class Entity
return ((ServerLevel) this.level()).isPositionEntityTicking(this.blockPosition());
}
// Paper end
@@ -100,7 +100,7 @@ index 58e557923dfe6cee39ec45e7f5aa43a5ded9f107..57a35d7a801621fc461e896eb2bba533
this.scheduler.regionFailed(this, false, thr);
// regionFailed will schedule a shutdown, so we should avoid letting this region tick further
diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java
index 6823c41c08ca1a1baf9257fc861ae97bbcbe3a50..0fa14f60310b063f419620539fd40898627b46b9 100644
index 21f2b9866e1cf36421e10a945fb6fbaa251009ed..aa7931c9b6dc3bba2c8dfecff8df2db302ad905b 100644
--- a/net/minecraft/commands/Commands.java
+++ b/net/minecraft/commands/Commands.java
@@ -259,7 +259,11 @@ public class Commands {
@@ -5,10 +5,10 @@ Subject: [PATCH] Add missing teleportation event APIs for folia
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index f0c574e039f80ff0227239356de8d61ef06a0936..093c48e2379c01f45277b88f6c1b19b107a46326 100644
index 8e4bbb224d036cf9f33667aec57bbc339c9e8377..4397f77d0169a3eefd347d3097657de4f6d37ef8 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -1814,6 +1814,9 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -1803,6 +1803,9 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
if (finalRespawnCompleteCallback != null) { // Luminol - Level hot unload apis
finalRespawnCompleteCallback.accept(ServerPlayer.this); // Luminol - Level hot unload apis
}
@@ -19,7 +19,7 @@ index f0c574e039f80ff0227239356de8d61ef06a0936..093c48e2379c01f45277b88f6c1b19b1
);
});
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index f218b7f6ce32d7ac959255e59c620d6fd420bf8e..2ae0cf7c9a4febfa79a9eab2f0e9309a61a78f56 100644
index fe0208815dbf53855d47956925b817570f6ae5b0..90b5d7806af8913735c4105b6e347bfdb78094e0 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -4553,6 +4553,31 @@ public abstract class Entity
@@ -72,7 +72,7 @@ index f218b7f6ce32d7ac959255e59c620d6fd420bf8e..2ae0cf7c9a4febfa79a9eab2f0e9309a
// need to load chunks so we can create the platform
destination.moonrise$loadChunksAsync(
targetPos, 16, // load 16 blocks to be safe from block physics
@@ -4696,6 +4732,17 @@ public abstract class Entity
@@ -4698,6 +4734,17 @@ public abstract class Entity
);
} else {
BlockPos spawnPos = destination.getRespawnData().pos();
@@ -90,7 +90,7 @@ index f218b7f6ce32d7ac959255e59c620d6fd420bf8e..2ae0cf7c9a4febfa79a9eab2f0e9309a
// need to load chunk for heightmap
destination.moonrise$loadChunksAsync(
spawnPos, 0,
@@ -4751,7 +4798,17 @@ public abstract class Entity
@@ -4755,7 +4802,17 @@ public abstract class Entity
WorldBorder destinationBorder = destination.getWorldBorder();
double dimensionScale = net.minecraft.world.level.dimension.DimensionType.getTeleportationScale(origin.dimensionType(), destination.dimensionType());
BlockPos targetPos = destination.getWorldBorder().clampToBounds(this.getX() * dimensionScale, this.getY(), this.getZ() * dimensionScale);
@@ -108,7 +108,7 @@ index f218b7f6ce32d7ac959255e59c620d6fd420bf8e..2ae0cf7c9a4febfa79a9eab2f0e9309a
ca.spottedleaf.concurrentutil.completable.CallbackCompletable<BlockUtil.FoundRectangle> portalFound
= new ca.spottedleaf.concurrentutil.completable.CallbackCompletable<>();
@@ -4888,6 +4945,15 @@ public abstract class Entity
@@ -4892,6 +4949,15 @@ public abstract class Entity
if (!this.canPortalAsync(destination, takePassengers)) {
return false;
}
@@ -5,7 +5,7 @@ Subject: [PATCH] Add config for waypoint restoration
diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java
index 0fa14f60310b063f419620539fd40898627b46b9..9800ae1d3c49800b0c7342d43d696109b5b72cf4 100644
index aa7931c9b6dc3bba2c8dfecff8df2db302ad905b..c67ea715f02086e5a39cc5832ccdc0b32199db93 100644
--- a/net/minecraft/commands/Commands.java
+++ b/net/minecraft/commands/Commands.java
@@ -267,7 +267,7 @@ public class Commands {
@@ -47,7 +47,7 @@ index 402e2f01f2b3a8e9ce5c818f07581b4dab38fc26..a1c3f3e5c7c3f32e0bdead33ebd72c76
//this.updateSkyBrightness(); // Folia - region threading - delay until first tick
// Paper start - rewrite chunk system
diff --git a/net/minecraft/world/waypoints/WaypointTransmitter.java b/net/minecraft/world/waypoints/WaypointTransmitter.java
index 2866b750a28cc32c2913d3c1afee95f05956982c..f0b62f49382eb808dcd6b6b654b99b9f7763c342 100644
index 07af92310ee5c8bba04e6175b6faac629632e4de..79561456c3b0877974ae1519443ebf8bd07533da 100644
--- a/net/minecraft/world/waypoints/WaypointTransmitter.java
+++ b/net/minecraft/world/waypoints/WaypointTransmitter.java
@@ -76,7 +76,8 @@ public interface WaypointTransmitter extends Waypoint {
@@ -240,7 +240,7 @@ index 6e08d50794c4af4405f3e164a3fd46f376b3f78f..dd2d0940eece3e85078e574f66f71a4c
int getContainerSize();
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 2ae0cf7c9a4febfa79a9eab2f0e9309a61a78f56..6b3c691dcc9c9e4a8b2b43110aedd5d5131a9520 100644
index 90b5d7806af8913735c4105b6e347bfdb78094e0..0ba8f401c9cd0e15187b4faee78667c543fded92 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -324,7 +324,7 @@ public abstract class Entity
@@ -266,7 +266,7 @@ index 2ae0cf7c9a4febfa79a9eab2f0e9309a61a78f56..6b3c691dcc9c9e4a8b2b43110aedd5d5
if (copy instanceof net.minecraft.world.entity.boss.enderdragon.EnderDragon dragon) dragon.syncDragonPartsAfterTeleportTransform(); // Luminol - Sync dragon part when teleportation or firstly created
// vanilla code used to call remove _after_ copying, and some stuff is required to be after copy - so add hook here
// for example, clearing of inventory after switching dimensions
@@ -6140,8 +6142,29 @@ public abstract class Entity
@@ -6151,8 +6153,29 @@ public abstract class Entity
this.setBoundingBox(this.makeBoundingBox());
}
// Paper end - Block invalid positions and bounding box
@@ -10,7 +10,7 @@ VMP (https://github.com/RelativityMC/VMP-fabric)
Licensed under: MIT (https://opensource.org/licenses/MIT)
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 6b3c691dcc9c9e4a8b2b43110aedd5d5131a9520..d1298c499f6551d7a084f2d1ccd2a2b8b9a2475b 100644
index 0ba8f401c9cd0e15187b4faee78667c543fded92..ae0504263666103a588b6855cb27304582c38938 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -1155,8 +1155,14 @@ public abstract class Entity
@@ -28,7 +28,7 @@ index 6b3c691dcc9c9e4a8b2b43110aedd5d5131a9520..d1298c499f6551d7a084f2d1ccd2a2b8
final Vec3 originalMovement = delta; // Paper - Expose pre-collision velocity
// Paper start - detailed watchdog information
ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread("Cannot move an entity off-main");
@@ -5634,6 +5640,11 @@ public abstract class Entity
@@ -5645,6 +5651,11 @@ public abstract class Entity
}
public final void setBoundingBox(final AABB bb) {
@@ -20,7 +20,7 @@ As part of: Akarin (https://github.com/Akarin-project/Akarin)
Licensed under: GPL-3.0-only (https://www.gnu.org/licenses/gpl-3.0.html)
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index d1298c499f6551d7a084f2d1ccd2a2b8b9a2475b..1888210d014f9c00316059a7ccce086dfb0e3a0f 100644
index ae0504263666103a588b6855cb27304582c38938..92cb0b1722bd5bcf9996c3f6b9b62c980b70e229 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -2441,8 +2441,8 @@ public abstract class Entity
@@ -7,7 +7,7 @@ License: GPL-3.0-only (https://www.gnu.org/licenses/gpl-3.0.html)
Gale - https://github.com/GaleMC/Gale
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 1888210d014f9c00316059a7ccce086dfb0e3a0f..00bc928a19cb877698b34b7c039bee5fe8b5cda5 100644
index 92cb0b1722bd5bcf9996c3f6b9b62c980b70e229..43e07a3c98e80f874f55411beac39e215ffdc3cf 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -1302,8 +1302,17 @@ public abstract class Entity
@@ -137,7 +137,7 @@ index 2e71a1cbabf3405e3e4fd5349a1784d895e7e60c..42de919064680b1a464d813976ca5e69
if (!itemStack.isEmpty()) {
slots.add(Pair.of(slot, itemStack.copy()));
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 093c48e2379c01f45277b88f6c1b19b107a46326..b4d8cc8b520266abe1921b5e990c34fce3f1d982 100644
index 4397f77d0169a3eefd347d3097657de4f6d37ef8..42e09148519596f95fc9c9c63df9c87e6ece3102 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -1424,7 +1424,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -5,7 +5,7 @@ Subject: [PATCH] Server I18n
diff --git a/net/minecraft/locale/Language.java b/net/minecraft/locale/Language.java
index 47cd33bce908744e64356b585853d6a8ecf82443..9e6f89ac7cf730bfc3c15d5a4f648c550cf72e22 100644
index 47cd33bce908744e64356b585853d6a8ecf82443..bb4011d3c6a1d2a5aa66e68fe719cd5eea2c0dd2 100644
--- a/net/minecraft/locale/Language.java
+++ b/net/minecraft/locale/Language.java
@@ -37,6 +37,7 @@ public abstract class Language {
@@ -26,10 +26,10 @@ index 47cd33bce908744e64356b585853d6a8ecf82443..9e6f89ac7cf730bfc3c15d5a4f648c55
loadFromJson(stream, output);
} catch (IOException | JsonParseException e) {
diff --git a/net/minecraft/server/Main.java b/net/minecraft/server/Main.java
index 2a75f8fbd2e5f41ca138740319d34683915e3b5b..0cc56b19d68f34994c9dbae578609eca7b7343cb 100644
index a557d488e4e289a61aeb9aed0cc133a0a7ce8f8c..ca349619bcdd0682c9d66d54fc55cac268fc443b 100644
--- a/net/minecraft/server/Main.java
+++ b/net/minecraft/server/Main.java
@@ -158,6 +158,8 @@ public class Main {
@@ -167,6 +167,8 @@ public class Main {
return;
}
@@ -5,7 +5,7 @@ Subject: [PATCH] Add config to enable cross region damage trace
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index b4d8cc8b520266abe1921b5e990c34fce3f1d982..93c76c2faf75bf4901ecaba1e04d957d5ddddfca 100644
index 42e09148519596f95fc9c9c63df9c87e6ece3102..444753590d3bc96ce68e25a3834d7abb86e20f94 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -1448,6 +1448,13 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -31,7 +31,7 @@ index 97c514673a454b752ab86b944fd143725ca8090d..ba91d40d6d91588a4b39abfefcb17a36
private final Reference2ReferenceOpenHashMap<RegionizedData<?>, Object> regionizedData = new Reference2ReferenceOpenHashMap<>();
diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java
index 9800ae1d3c49800b0c7342d43d696109b5b72cf4..f9a8c79640ed6ca381e4482eaeab6b23db59419f 100644
index c67ea715f02086e5a39cc5832ccdc0b32199db93..946094713bdb294d7d8beb03967b2a2488f5359b 100644
--- a/net/minecraft/commands/Commands.java
+++ b/net/minecraft/commands/Commands.java
@@ -299,7 +299,11 @@ public class Commands {
@@ -5,7 +5,7 @@ Subject: [PATCH] Add config to enable function command
diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java
index f9a8c79640ed6ca381e4482eaeab6b23db59419f..1b2d3e2c23e8e03ae25e85a60b6ef0528e627f61 100644
index 946094713bdb294d7d8beb03967b2a2488f5359b..3d9e8c5ba567efd363e0ed54059f67fbfe25e361 100644
--- a/net/minecraft/commands/Commands.java
+++ b/net/minecraft/commands/Commands.java
@@ -217,7 +217,11 @@ public class Commands {
@@ -5,7 +5,7 @@ Subject: [PATCH] Add config to enable scoreboard command
diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java
index 1b2d3e2c23e8e03ae25e85a60b6ef0528e627f61..916b5c8d524ffd7ccb953fe0f1cf020a1ea8dafb 100644
index 3d9e8c5ba567efd363e0ed54059f67fbfe25e361..6642288dde528899d9bce7ccd8d92a199e8975c8 100644
--- a/net/minecraft/commands/Commands.java
+++ b/net/minecraft/commands/Commands.java
@@ -246,7 +246,11 @@ public class Commands {
@@ -5,7 +5,7 @@ Subject: [PATCH] Add config to enable trigger command
diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java
index 916b5c8d524ffd7ccb953fe0f1cf020a1ea8dafb..03f3fe221b14f0317947d74e25049bcce2ebeb66 100644
index 6642288dde528899d9bce7ccd8d92a199e8975c8..77d7d83cc781baf19593227d20b827bf0be6ed28 100644
--- a/net/minecraft/commands/Commands.java
+++ b/net/minecraft/commands/Commands.java
@@ -274,7 +274,11 @@ public class Commands {
@@ -18,7 +18,7 @@ index 163999d50213e0167eb09f0eae883388849f28fa..5196431f52e81608a5575f8a262cd5c8
double rangeY = level.paperConfig().entities.trackingRangeY.get(this.entity, -1);
if (rangeY != -1) {
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 00bc928a19cb877698b34b7c039bee5fe8b5cda5..db7281fcf1f4dc878a87ef9b8f24f2f9da12238a 100644
index 43e07a3c98e80f874f55411beac39e215ffdc3cf..cddf44f5da5cba5603dcff4913b4658dcfcc48db 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -164,7 +164,7 @@ public abstract class Entity
@@ -30,7 +30,7 @@ index 00bc928a19cb877698b34b7c039bee5fe8b5cda5..db7281fcf1f4dc878a87ef9b8f24f2f9
// CraftBukkit start
private static final int CURRENT_LEVEL = 2;
static boolean isLevelAtLeast(ValueInput input, int level) {
@@ -6579,4 +6579,48 @@ public abstract class Entity
@@ -6590,4 +6590,48 @@ public abstract class Entity
// Paper end
public boolean shouldTickHot() { return this.tickCount > 20 * 10 && this.isAlive(); } // KioCG
@@ -5,7 +5,7 @@ Subject: [PATCH] Spawn invulnerable time
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 93c76c2faf75bf4901ecaba1e04d957d5ddddfca..2985d5e2dde049a999a39f6edbb6696332f6d822 100644
index 444753590d3bc96ce68e25a3834d7abb86e20f94..e64db3045ebf08600283a47960005827c1920f94 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -245,6 +245,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -344,7 +344,7 @@ index cb11830c2f399c9706b20f8104686dc0d9b686f9..1c4c67410849f844946e4883585910fc
ServerLevel.this.updateSleepingPlayerList();
}
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 2985d5e2dde049a999a39f6edbb6696332f6d822..64943c193ae73795ddf8222a6f71ea5eb1705fe2 100644
index e64db3045ebf08600283a47960005827c1920f94..a3d3a602ab86e27ae0c6e6207384dc0043279d47 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -232,7 +232,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -377,7 +377,7 @@ index 2985d5e2dde049a999a39f6edbb6696332f6d822..64943c193ae73795ddf8222a6f71ea5e
AABB aabb = new AABB(this.blockPosition()).inflate(32.0, 10.0, 32.0);
this.level()
.getEntitiesOfClass(Mob.class, aabb, EntitySelector.NO_SPECTATORS)
@@ -2161,6 +2161,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -2140,6 +2140,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
this.lastSentHealth = -1.0F;
this.lastSentFood = -1;
this.teleportSpectators(transition, oldLevel);
@@ -542,7 +542,7 @@ index ca1e635b0fdf3d0d17447b43a558fe030536d297..ed50484ca24ef24b1e5bef9f6369dfa4
public @Nullable ServerPlayer getPlayer(final String playerName) {
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index db7281fcf1f4dc878a87ef9b8f24f2f9da12238a..b11637543c3ef8650ad5c65c2cab8a1cb6e95158 100644
index cddf44f5da5cba5603dcff4913b4658dcfcc48db..9eaed81a330a22e7fd6585cd286ec61371e97272 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -1263,7 +1263,7 @@ public abstract class Entity
@@ -311,7 +311,7 @@ index 1c4c67410849f844946e4883585910fc8fe97048..08a6fc0e58d61b1765e704c500b3aec6
}
// Leaves end - skip
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index ed50484ca24ef24b1e5bef9f6369dfa4b30c359c..64a87785048e103c10f6453e97a37f8501255adc 100644
index ed50484ca24ef24b1e5bef9f6369dfa4b30c359c..575b4eabcaac48ae87b69dd037493ebfe0a1212c 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -129,6 +129,7 @@ public abstract class PlayerList {
@@ -330,12 +330,12 @@ index ed50484ca24ef24b1e5bef9f6369dfa4b30c359c..64a87785048e103c10f6453e97a37f85
int count = this.usersCountedAgainstLimit.size();
if (count >= limit) {
return false;
@@ -221,6 +223,123 @@ public abstract class PlayerList {
@@ -221,6 +223,124 @@ public abstract class PlayerList {
abstract public void loadAndSaveFiles(); // Paper - fix converting txt to json file; moved from DedicatedPlayerList constructor
+ // Leaves start - replay mod api
+ public void placeNewPhotographer(Connection connection, org.leavesmc.leaves.replay.ServerPhotographer player, ServerLevel worldserver) {
+ public void placeNewPhotographer(org.leavesmc.leaves.replay.Recorder connection, org.leavesmc.leaves.replay.ServerPhotographer player, ServerLevel worldserver) {
+ player.isRealPlayer = true; // Paper
+ player.loginTime = System.currentTimeMillis(); // Paper
+
@@ -347,6 +347,7 @@ index ed50484ca24ef24b1e5bef9f6369dfa4b30c359c..64a87785048e103c10f6453e97a37f85
+ LevelData worlddata = worldserver1.getLevelData();
+
+ ServerGamePacketListenerImpl playerconnection = new ServerGamePacketListenerImpl(this.server, connection, player, CommonListenerCookie.createInitial(player.gameProfile, false));
+ connection.bind(playerconnection);
+ GameRules gamerules = worldserver1.getGameRules();
+ boolean flag = gamerules.get(GameRules.IMMEDIATE_RESPAWN);
+ boolean flag1 = gamerules.get(GameRules.REDUCED_DEBUG_INFO);
@@ -454,7 +455,7 @@ index ed50484ca24ef24b1e5bef9f6369dfa4b30c359c..64a87785048e103c10f6453e97a37f85
public void placeNewPlayer(final Connection connection, final ServerPlayer player, final CommonListenerCookie cookie) {
player.isRealPlayer = true; // Paper
player.loginTime = System.currentTimeMillis(); // Paper - Replace OfflinePlayer#getLastPlayed
@@ -295,6 +414,7 @@ public abstract class PlayerList {
@@ -295,6 +415,7 @@ public abstract class PlayerList {
// player.connection.send(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(this.players)); // CraftBukkit - replaced with loop below
this.players.add(player);
@@ -462,7 +463,7 @@ index ed50484ca24ef24b1e5bef9f6369dfa4b30c359c..64a87785048e103c10f6453e97a37f85
this.playersByName.put(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT), player); // Spigot
this.playersByUUID.put(player.getUUID(), player);
// this.broadcastAll(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(player))); // CraftBukkit - replaced with loop below
@@ -510,6 +630,7 @@ public abstract class PlayerList {
@@ -510,6 +631,7 @@ public abstract class PlayerList {
}
protected void save(final ServerPlayer player) {
@@ -470,7 +471,7 @@ index ed50484ca24ef24b1e5bef9f6369dfa4b30c359c..64a87785048e103c10f6453e97a37f85
if (!player.getBukkitEntity().isPersistent()) return; // CraftBukkit
player.lastSave = System.nanoTime(); // Folia - region threading - changed to nanoTime tracking
this.playerIo.save(player);
@@ -524,6 +645,48 @@ public abstract class PlayerList {
@@ -524,6 +646,48 @@ public abstract class PlayerList {
}
}
@@ -519,7 +520,7 @@ index ed50484ca24ef24b1e5bef9f6369dfa4b30c359c..64a87785048e103c10f6453e97a37f85
public net.kyori.adventure.text.@Nullable Component remove(final ServerPlayer player) { // CraftBukkit - return string // Paper - return Component
// Paper start - Fix kick event leave message not being sent
return this.remove(player, net.kyori.adventure.text.Component.translatable("multiplayer.player.left", net.kyori.adventure.text.format.NamedTextColor.YELLOW, io.papermc.paper.configuration.GlobalConfiguration.get().messages.useDisplayNameInQuitMessage ? player.getBukkitEntity().displayName() : io.papermc.paper.adventure.PaperAdventure.asAdventure(player.getDisplayName())));
@@ -597,6 +760,7 @@ public abstract class PlayerList {
@@ -597,6 +761,7 @@ public abstract class PlayerList {
player.getBukkitEntity().packetProcessor.close(); // Folia - region threading
player.getAdvancements().clearTriggers();
this.players.remove(player);
@@ -527,7 +528,7 @@ index ed50484ca24ef24b1e5bef9f6369dfa4b30c359c..64a87785048e103c10f6453e97a37f85
this.playersByName.remove(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT)); // Spigot
if (me.earthme.luminol.config.modules.misc.UsernameCheckConfig.allowOldPlayersJoin) this.playedPlayers.remove(player.getGameProfile().name()); // Leaf - Configurable vanilla username check
this.server.getCustomBossEvents().onPlayerDisconnect(player);
@@ -910,15 +1074,15 @@ public abstract class PlayerList {
@@ -910,15 +1075,15 @@ public abstract class PlayerList {
}
public String[] getPlayerNamesArray() {
@@ -98,7 +98,7 @@ index ae88e57974f631ff2494c35d6e02049ba5d38014..6b8073023833fc9e99684944802dc594
}
}
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 64943c193ae73795ddf8222a6f71ea5eb1705fe2..4034b4b9bd5e567b882169b5b1e17f75b64ba8db 100644
index a3d3a602ab86e27ae0c6e6207384dc0043279d47..70f7cb6b38a90ca337bd52c18fa7bfd4016b552c 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -1111,6 +1111,12 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -115,7 +115,7 @@ index 64943c193ae73795ddf8222a6f71ea5eb1705fe2..4034b4b9bd5e567b882169b5b1e17f75
CrashReport report = CrashReport.forThrowable(t, "Ticking player");
CrashReportCategory category = report.addCategory("Player being ticked");
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index b11637543c3ef8650ad5c65c2cab8a1cb6e95158..426e033e033147f5db6c2d9c96ab13af0fc553a8 100644
index 9eaed81a330a22e7fd6585cd286ec61371e97272..acc9caf8559cd341ea17d3b58f13cdac7de18564 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -1522,8 +1522,18 @@ public abstract class Entity
@@ -128,7 +128,7 @@ index 8cc4fe9feb57902a4b9a6a26e6175ac00a2cef65..9ab1a812e43145120859734075e2ac99
// Paper start - fix converting txt to json file; moved from constructor
}
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 4034b4b9bd5e567b882169b5b1e17f75b64ba8db..4c53b688ed6b26ca7231841f3235f9a824416bba 100644
index 70f7cb6b38a90ca337bd52c18fa7bfd4016b552c..9a6f18fd0eb7e2aef174b25d14cfd0f5a3ade6af 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -260,6 +260,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -139,7 +139,7 @@ index 4034b4b9bd5e567b882169b5b1e17f75b64ba8db..4c53b688ed6b26ca7231841f3235f9a8
private @Nullable Vec3 startingToFallPosition;
private @Nullable Vec3 enteredNetherPosition;
private @Nullable Vec3 enteredLavaOnVehiclePosition;
@@ -2168,7 +2169,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -2147,7 +2148,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
this.lastSentFood = -1;
this.teleportSpectators(transition, oldLevel);
// Leaves start - bot support
@@ -148,7 +148,7 @@ index 4034b4b9bd5e567b882169b5b1e17f75b64ba8db..4c53b688ed6b26ca7231841f3235f9a8
this.server.getBotList().bots.forEach(bot -> bot.sendFakeDataIfNeed(this, true)); // Leaves - render bot
}
// Leaves end - bot support
@@ -2805,6 +2806,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -2784,6 +2785,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
this.setShoulderEntityRight(oldPlayer.getShoulderEntityRight());
this.setLastDeathLocation(oldPlayer.getLastDeathLocation());
this.waypointIcon().copyFrom(oldPlayer.waypointIcon());
@@ -160,7 +160,7 @@ index 4034b4b9bd5e567b882169b5b1e17f75b64ba8db..4c53b688ed6b26ca7231841f3235f9a8
}
private void transferInventoryXpAndScore(final Player oldPlayer) {
@@ -3084,6 +3090,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -3063,6 +3069,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
this.particleStatus = information.particleStatus();
this.getEntityData().set(DATA_PLAYER_MODE_CUSTOMISATION, (byte)information.modelCustomisation());
this.getEntityData().set(DATA_PLAYER_MAIN_HAND, information.mainHand());
@@ -268,10 +268,10 @@ index 77b9cd3d14eddc735d9131597916405fde4230ec..b23a47380fb1178696dc49e35d2c3d7d
} else {
LOGGER.warn("Player {} was dropping items too fast in creative mode, ignoring.", this.player.getPlainTextName());
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index 64a87785048e103c10f6453e97a37f8501255adc..432a6dfff8e45eccea653b0d4cf04956edec6d98 100644
index 575b4eabcaac48ae87b69dd037493ebfe0a1212c..516561a25d28f2c7bcc3e71c5f2f9da99c2899c3 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -279,7 +279,7 @@ public abstract class PlayerList {
@@ -280,7 +280,7 @@ public abstract class PlayerList {
// org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePlayerJoin(player); // Leaves - protocol
// Leaves start - bot support
@@ -280,7 +280,7 @@ index 64a87785048e103c10f6453e97a37f8501255adc..432a6dfff8e45eccea653b0d4cf04956
org.leavesmc.leaves.bot.ServerBot bot = this.server.getBotList().getBotByName(player.getScoreboardName());
if (bot != null) {
this.server.getBotList().removeBot(bot, org.leavesmc.leaves.event.bot.BotRemoveEvent.RemoveReason.INTERNAL, player.getBukkitEntity(), false, false);
@@ -441,7 +441,7 @@ public abstract class PlayerList {
@@ -442,7 +442,7 @@ public abstract class PlayerList {
org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePlayerJoin(player); // Leaves - protocol
// Leaves start - bot support
@@ -289,7 +289,7 @@ index 64a87785048e103c10f6453e97a37f8501255adc..432a6dfff8e45eccea653b0d4cf04956
org.leavesmc.leaves.bot.ServerBot bot = this.server.getBotList().getBotByName(player.getScoreboardName());
if (bot != null) {
this.server.getBotList().removeBot(bot, org.leavesmc.leaves.event.bot.BotRemoveEvent.RemoveReason.INTERNAL, player.getBukkitEntity(), false, false);
@@ -969,7 +969,7 @@ public abstract class PlayerList {
@@ -970,7 +970,7 @@ public abstract class PlayerList {
).callEvent();
// Paper end
// Leaves start - bot support
@@ -40,7 +40,7 @@ index 57a35d7a801621fc461e896eb2bba533d9d5bc1b..ae424c8931a2f82c6c8d4ddd8422a2c1
}
// Luminol end - Add a config to enable tick command
diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java
index 03f3fe221b14f0317947d74e25049bcce2ebeb66..6882e85fb6413e5c346c189a82b69f3e408aafba 100644
index 77d7d83cc781baf19593227d20b827bf0be6ed28..82af03649c7537274aa54ed942e4aae589b97888 100644
--- a/net/minecraft/commands/Commands.java
+++ b/net/minecraft/commands/Commands.java
@@ -268,7 +268,7 @@ public class Commands {
@@ -21,10 +21,10 @@ index dd17339fe2f9d7660b20eed05b61d6231302aa82..d997e4f7ae6ee4e81f5fffe874f2895d
}
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 4c53b688ed6b26ca7231841f3235f9a824416bba..cef9c7887332b91e2466a97a5250db81f7af0dcf 100644
index 9a6f18fd0eb7e2aef174b25d14cfd0f5a3ade6af..b43bbe461500782a75a49c9238bd4d4d81448d09 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -2360,7 +2360,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -2339,7 +2339,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
public boolean isInvulnerableTo(final ServerLevel level, final DamageSource source) {
// Paper start - disable player cramming
return (super.isInvulnerableTo(level, source) || this.isChangingDimension() && !source.is(DamageTypes.ENDER_PEARL) || !this.connection.hasClientLoaded())
@@ -5,7 +5,7 @@ Subject: [PATCH] Restore vanilla ender pearl loading
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index cef9c7887332b91e2466a97a5250db81f7af0dcf..a17212c1910ce9490fe8df8c4ef507e25b89c545 100644
index b43bbe461500782a75a49c9238bd4d4d81448d09..68e36ad03325cd6348dc4bbab37409b70bee6023 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -277,7 +277,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -51,7 +51,7 @@ index cef9c7887332b91e2466a97a5250db81f7af0dcf..a17212c1910ce9490fe8df8c4ef507e2
}
}
@@ -3568,11 +3570,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -3547,11 +3549,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
}
public void registerEnderPearl(final ThrownEnderpearl enderPearl) {
@@ -66,10 +66,10 @@ index cef9c7887332b91e2466a97a5250db81f7af0dcf..a17212c1910ce9490fe8df8c4ef507e2
public Set<ThrownEnderpearl> getEnderPearls() {
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index 432a6dfff8e45eccea653b0d4cf04956edec6d98..835c13ff69592951261f917ad999d9a7689e802c 100644
index 516561a25d28f2c7bcc3e71c5f2f9da99c2899c3..eb652157ef25e83b897f52aff3c49c09c6f656c8 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -748,11 +748,13 @@ public abstract class PlayerList {
@@ -749,11 +749,13 @@ public abstract class PlayerList {
player.unRide();
for (ThrownEnderpearl enderpearl : player.getEnderPearls()) {
@@ -89,7 +89,7 @@ index 432a6dfff8e45eccea653b0d4cf04956edec6d98..835c13ff69592951261f917ad999d9a7
level.removePlayerImmediately(player, Entity.RemovalReason.UNLOADED_WITH_PLAYER);
diff --git a/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java b/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java
index 790c1bcf11150d31bf90c32345e4eb40de9a6a41..7409b452567608dbdb36ac686791e604a267fb6a 100644
index 4df9a3356cfdee52761db47694e59779976840db..3e6844a468d8e6c9cf3b0bd23e21a3cabc9b7f51 100644
--- a/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java
+++ b/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java
@@ -31,7 +31,11 @@ import net.minecraft.world.phys.Vec3;
@@ -148,10 +148,10 @@ index f5373786032b3f1db8e6c0c928c781998b2fe194..ca6be9faab3f93da7e91bf73997111b7
CraftParticle.createParticleParam(particle, data), // Particle
force,
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
index efcb8b97cd685e1243c770bf3e8daf03615abb1d..4722e027ed5869516adddf696ac030fd84df834d 100644
index 00749be3b16fd09c6b952c93631c808ff5657f20..0f6378ca80bea5d4d7f1cb7d788a57390bc27c59 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
@@ -128,6 +128,8 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
@@ -130,6 +130,8 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
return new CraftHumanEntity(server, (net.minecraft.world.entity.player.Player) entity);
}
@@ -54,10 +54,10 @@ index 7fd08dac549261c50cf5723ef380ba90ea0da56f..7cfa9a5a1629c3af1e1105b137cbfc4c
+ // Leaves end - replay mod api
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
index 4722e027ed5869516adddf696ac030fd84df834d..4d20f07ff4bf782e938ac990e2b9aaeb90b92db1 100644
index 0f6378ca80bea5d4d7f1cb7d788a57390bc27c59..610e19b82919f05b0ebf20854e0f9b4a77a2b063 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
@@ -129,6 +129,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
@@ -131,6 +131,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
}
if (entity instanceof org.leavesmc.leaves.bot.ServerBot bot) { return new org.leavesmc.leaves.entity.bot.CraftBot(server, bot); }
@@ -109,6 +109,11 @@ public class ServerI18nUtil {
}
Language.inject(createLangInstance());
logger.info("Successfully loaded language: {}", lang);
if (LanguageConfig.allowAutoResetComments) {
logger.info("Start trying to load localized comments.");
ConfigManager.reloadComments();
logger.info("Loaded all comments.");
}
} catch (Exception e) {
if (e instanceof MalformedJsonException malformedJson) {
malformedJson.clean();
@@ -271,7 +276,6 @@ public class ServerI18nUtil {
private static void loadLophineI18n(BiConsumer<String, String> bi) {
if (Language.class.getResource(lophineLangPath) != null) {
Language.parseTranslations(bi, lophineLangPath);
if (LanguageConfig.allowAutoResetComments) ConfigManager.reloadComments();
} else {
loadLophineI18nDefault(bi);
}
@@ -151,6 +151,7 @@ public class ConfigsInstance implements LuminolConfigsInstance {
// if the config load with exceptions but allowed, remove exceptions from the map
allInstanced.replaceAll((_, _) -> null);
setupLatch();
saveConfigs();
}
/**
@@ -257,28 +258,12 @@ public class ConfigsInstance implements LuminolConfigsInstance {
}
}
loadCategoryComments(); // load base key comment
allInstanced.putAll(stagedMap);
}
/**
* Load config category comments
*/
private void loadCategoryComments() {
for (EnumConfigCategory category : EnumConfigCategory.values()) {
String key = category.getBaseKeyName();
if (key == null) continue;
String comment = category.getKeyComment();
if (comment == null) continue;
if (!completeConfigPath(key).isEmpty()) {
String comment0 = configFileInstance.getComment(key);
if (comment0 == null) {
configFileInstance.setComment(key, comment);
}
}
}
}
/**
* Instantiate all configuration modules
@@ -304,7 +289,7 @@ public class ConfigsInstance implements LuminolConfigsInstance {
// Build configuration path and handle class comments
final List<String> category = buildConfigCategoryPath(configClassInfo);
final String fullConfigBasePath = String.join(".", category);
handleClassLevelComments(configClassInfo, fullConfigBasePath);
handleClassLevelComments(fullConfigBasePath, keepComments);
// Process each field in the module
Field[] fields = singleConfigModule.getClass().getDeclaredFields();
@@ -341,12 +326,18 @@ public class ConfigsInstance implements LuminolConfigsInstance {
/**
* Handle class-level comments for configuration
*/
private void handleClassLevelComments(ConfigClassInfo configClassInfo, String fullConfigBasePath) {
final String comment = configFileInstance.getComment(fullConfigBasePath);
if (comment == null || comment.isBlank()) {
String comments0 = ServerI18nUtil.getLocalizedComment(name + "." + fullConfigBasePath + ".comment");
if (!comments0.isBlank()) {
configFileInstance.setComment(fullConfigBasePath, comments0);
private void handleClassLevelComments(String fullConfigBasePath, boolean keepComments) {
final String existingComment = configFileInstance.getComment(fullConfigBasePath);
final String localizedComment = ServerI18nUtil.getLocalizedComment(name + "." + fullConfigBasePath + ".comment");
if (!keepComments) {
// Force reset to localized default
if (!localizedComment.isBlank()) {
configFileInstance.setComment(fullConfigBasePath, localizedComment);
}
} else if (existingComment == null || existingComment.isBlank()) {
// Only fill in when blank
if (!localizedComment.isBlank()) {
configFileInstance.setComment(fullConfigBasePath, localizedComment);
}
}
}
@@ -406,7 +397,7 @@ public class ConfigsInstance implements LuminolConfigsInstance {
private void handleMissingOrRemovedConfig(Field field, String fullConfigKeyName,
ConfigInfo configInfo, boolean removed) throws IllegalAccessException {
// Process transformed configurations
processTransformedConfigs(field, fullConfigKeyName, configInfo, removed);
processTransformedConfigs(field, fullConfigKeyName, removed);
// Handle removed configurations
if (removed) {
@@ -452,8 +443,7 @@ public class ConfigsInstance implements LuminolConfigsInstance {
/**
* Process transformed configurations
*/
private void processTransformedConfigs(Field field, String fullConfigKeyName,
ConfigInfo configInfo, boolean removed) {
private void processTransformedConfigs(Field field, String fullConfigKeyName, boolean removed) {
for (TransformedConfig transformedConfig : field.getAnnotationsByType(TransformedConfig.class)) {
final String oldConfigKeyName = String.join(".", transformedConfig.directory()) + "." + transformedConfig.name();
@@ -11,23 +11,12 @@ public enum EnumConfigCategory {
ROOT(null);
private final String baseKeyName;
private final String keyComment;
EnumConfigCategory(String baseKeyName, String keyComment) {
this.baseKeyName = baseKeyName;
this.keyComment = keyComment;
}
EnumConfigCategory(String baseKeyName) {
this.baseKeyName = baseKeyName;
this.keyComment = null;
}
public String getBaseKeyName() {
return this.baseKeyName;
}
public String getKeyComment() {
return this.keyComment;
}
}
@@ -163,7 +163,7 @@ public final class AutoUpdateHelper {
if (finalJarPath.equals(stagedJar)) {
LOGGER.info(
"Downloaded the latest Lophine jar to {} and refreshed auto_update/core.path for Hyacinthusclip. Please restart your server.",
"Downloaded the latest Lophine jar to {} and refreshed auto_update/core.path for Clip. Please restart your server.",
finalJarPath.toAbsolutePath()
);
} else {
@@ -14,7 +14,7 @@ public class ServerFeatureManager implements FeatureManager {
availableFeatures.add(FAKEPLAYER); // Lophine - fakeplayer support
availableFeatures.add(PHOTOGRAPHER); // Lophine - Replay Mod API support
availableFeatures.add(UPDATE_SUPPRESSION_EVENT); // Lophine - update suppression event support
if (Boolean.getBoolean("leavesclip.enable.mixin") || Boolean.getBoolean("hyacinthusclip.enable.mixin")) {
if (Boolean.getBoolean("morninggloryclip.enable.mixin")) {
availableFeatures.add(MIXIN);
}
}
@@ -41,6 +41,7 @@ import net.minecraft.network.protocol.game.*;
import net.minecraft.network.protocol.login.ClientboundLoginFinishedPacket;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.RegistryLayer;
import net.minecraft.server.network.ServerGamePacketListenerImpl;
import net.minecraft.server.packs.repository.KnownPack;
import net.minecraft.tags.TagNetworkSerialization;
import net.minecraft.world.entity.EntityTypes;
@@ -94,6 +95,11 @@ public class Recorder extends Connection {
this.channel = new LocalChannel();
}
public void bind(ServerGamePacketListenerImpl listener) {
this.packetListener = listener;
}
public void start() {
startTime = System.currentTimeMillis();
@@ -1,198 +1,198 @@
{
"lophine.experiment.command.function_command_enabled.comment": "Allow to use function command",
"lophine.experiment.command.save_all_command.enabled.comment": "Allow to use save-all command",
"lophine.experiment.command.save_all_command.log_all_process.comment": "Log all process of save-all command to console",
"lophine.experiment.command.save_all_command.save_all_command_timeout.comment": "Maximum seconds to save before the chunk report it is timeout.",
"lophine.experiment.command.scoreboard_command_enabled.comment": "Allow to use scoreboard command",
"lophine.experiment.command.trigger_command_enabled.comment": "Allow to use trigger command",
"lophine.experiment.entity_damage_source_trace.enabled.comment": "Allow trace damage source cross different Region Scheduler.",
"lophine.experiment.global_entities_counter.version.comment": "DISABLED\nDEFAULT_SYNC: Enable global entities counter origin version with sync counter module.\nDEFAULT_ASYNC: Enable global entities counter origin version with async counter module.\nPRECISE: Enable precise mob cap calculation with incremental counting. Replaces the periodic full-scan with event-driven real-time updates.\n\nYou need to set per-player-mob-spawns to false on paper-world-defaults.yml or paper-world.yml",
"lophine.fixes.update-suppression-crash-fix.enabled.comment": "Should crash caused by update suppression be prevented?",
"lophine.fixes.vanilla-like-experience.enabled.comment": "Restore a more vanilla-like technical gameplay experience by bypassing some Paper safety and behavior changes.",
"lophine.function.container_expansion.barrel_rows.comment": "range: 1~6",
"lophine.function.container_expansion.enderchest_rows.comment": "range: 1~6",
"lophine.function.container_expansion.shulker_box.shulker_stackable_count.comment": "range: 1~64",
"lophine.function.fakeplayer.always-send-data.comment": "Always send data for fakeplayers",
"lophine.function.fakeplayer.cache-skin.comment": "Use skin cache for fakeplayers",
"lophine.function.fakeplayer.enable-locator-bar.comment": "Enable locator bar for fakeplayers",
"lophine.function.fakeplayer.enabled.comment": "Enable fakeplayer functionality (/bot command)",
"lophine.function.fakeplayer.limit.comment": "Maximum number of fakeplayers allowed",
"lophine.function.fakeplayer.manual-save-and-load.comment": "Allow manual save and load of fakeplayers",
"lophine.function.fakeplayer.modify-config.comment": "Allow modifying fakeplayer config",
"lophine.function.fakeplayer.open-action-gui.comment": "Allow opening fakeplayer action gui,\nneed sneak to open if you enabled inventory open gui",
"lophine.function.fakeplayer.prefix.comment": "Prefix for fakeplayer names",
"lophine.function.fakeplayer.regen-amount.comment": "Regeneration amount for fakeplayers",
"lophine.function.fakeplayer.simulation-distance.comment": "Simulation distance for fakeplayers (-1 for default)",
"lophine.function.fakeplayer.skip-sleep-check.comment": "Skip sleep check for fakeplayers",
"lophine.function.fakeplayer.spawn-phantom.comment": "Allow phantoms to spawn for fakeplayers",
"lophine.function.fakeplayer.suffix.comment": "Suffix for fakeplayer names",
"lophine.function.fakeplayer.unable-fakeplayer-names.comment": "List of names that cannot be used for fakeplayers",
"lophine.function.fakeplayer.use-action.comment": "Allow fakeplayers to use actions",
"lophine.function.language.allow_auto_reset_comments.comment": "If the package contains the configuration file comment file for the corresponding language,\nautomatically reload the configuration file comments using the related content.\n\nWARNING: This will delete the original comments!",
"lophine.function.language.full_blocking_load.comment": "Whether to allow blocking server loading when loading localized language.\nIf you want only use your localized language to shown in your terminal, \nyou need to enable it.\n\nWARNING: This may slow down the startup speed!",
"lophine.function.language.lang.comment": "Please use the key from https://minecraft.wiki/w/Language\nSample of format: en_us zh_cn zh_hk zh_tw\nATTENTION: If you want to edit language for carpet system, \nplease edit it in carpet config file.",
"lophine.function.protocol.alternative_block_placement.enabled.comment": "Specify the precise placement protocol type\nNONE Disable precise placement protocol\nCARPET Precise placement protocol version 2\nCARPET_FIX Enhanced precise placement protocol version 2 (requires MasaGadget installed on client)\nLITEMATICA Precise placement protocol version 3",
"lophine.function.protocol.appleskin.enabled.comment": "Enable AppleSkin protocol support",
"lophine.function.protocol.appleskin.sync-tick-interval.comment": "Set AppleSkin Synchronization Frequency (Unit: Game Ticks)",
"lophine.function.protocol.bbor.enabled.comment": "Enable BBOR protocol support",
"lophine.function.protocol.jade.enabled.comment": "Enable Jade protocol support",
"lophine.function.protocol.pca.enabled.comment": "Enable PCA sync protocol support",
"lophine.function.protocol.pca.sync-player-entity.comment": "Controls which player entities can be watched through the PCA sync protocol.\nNOBODY: never sync player entities\nBOT: only sync Lophine fake players\nOPS: sync fake players and allow operators to sync real players\nOPS_AND_SELF: sync fake players, operators, and a player's own entity\nEVERYONE: allow all player entities",
"lophine.function.protocol.rei.enabled.comment": "Enable Roughly Enough Items protocol support",
"lophine.function.protocol.servux.litematics.litematics-print-max-delay-ticks.comment": "The max delay ticks for printing litematics, -1 to disable",
"lophine.function.protocol.syncmatica.enabled.comment": "Enable Syncmatica protocol support",
"lophine.function.protocol.syncmatica.quota-Limit.comment": "Maximum Projection File Size (in bytes)",
"lophine.function.protocol.syncmatica.useQuota.comment": "Is there a limit on the size of projection files?",
"lophine.function.protocol.xaero-map.enabled.comment": "Enable Xaero World Map Protocol Support",
"lophine.function.redstone.shears_rotate.comment": "Allows you to use the Shears to right-click to rotate the block.",
"lophine.function.replay-api.cache-photographer-size.comment": "Maximum size of cache photographer profile",
"lophine.function.replay-api.cache-photographer-time.comment": "Time to cache photographer profile(in seconds)",
"lophine.misc.disable-check.disable-op-fly-check.comment": "Disable the check for the operator's fly check",
"lophine.misc.disable-check.disable-op-move-check.comment": "Disable the check for the operator's move check",
"lophine.misc.item-entity.follow-tick-sequence-merge.comment": "Due to Paper's modification of the merge radius,\nwhen the merge radius is large and stacks containing many items get stuck in an unexpected position, \nindividual items may never reach their destination.\nThis configuration option is added to fix this behavior.",
"lophine_carpet.carpet.fakeplayer.commandPlayer.comment": "Enable /player command.(not remapped)\nIf you want to enable bot command, please see lophine global config.",
"lophine_carpet.carpet.fakeplayer.comment": "Carpet fakeplayer compatibility mapped onto Lophine fakeplayers.\ncommandPlayer is currently backed by Lophine's /bot command surface.",
"lophine_carpet.carpet.fakeplayer.fakePlayerAutoFish.comment": "Let fakeplayers holding a fishing rod automatically cast and reel it in.",
"lophine_carpet.carpet.fakeplayer.fakePlayerAutoReplaceTool.comment": "Toggle automatic tool replacement for fakeplayers.",
"lophine_carpet.carpet.fakeplayer.fakePlayerAutoReplenishment.comment": "Toggle automatic stack replenishment for fakeplayers.",
"lophine_carpet.carpet.fakeplayer.fakePlayerAutoReplenishmentFormShulkerBox.comment": "Let fakeplayer replenishment pull matching items out of shulker boxes in the inventory.",
"lophine_carpet.carpet.fakeplayer.fakePlayerDefaultSurvivalMode.comment": "Force newly created fakeplayers to start in survival instead of the server default gamemode.",
"lophine_carpet.carpet.fakeplayer.fakePlayerInteractLikeClient.comment": "Make fakeplayer entity interaction follow client-side fallback behavior more closely.",
"lophine_carpet.carpet.fakeplayer.fakePlayerReloadAction.comment": "Persist queued fakeplayer actions across save and reload.",
"lophine_carpet.carpet.fakeplayer.fakePlayerResident.comment": "Keep fakeplayers resident across unload and restart.",
"lophine_carpet.carpet.fakeplayer.fakePlayerTicksLikeRealPlayer.comment": "Tick fakeplayers in the network phase to better match real player timing.",
"lophine_carpet.carpet.fakeplayer.openFakePlayerInventory.comment": "Allow opening fakeplayer inventories.",
"lophine_carpet.carpet.general.amsUpdateSuppressionCrashFix.comment": "Update suppression crash protection.",
"lophine_carpet.carpet.general.antiSpamDisabled.comment": "Disable the server-side chat and creative-drop spam throttles used by vanilla/Spigot.",
"lophine_carpet.carpet.general.bambooModelNoOffset.comment": "Remove the random horizontal model offset from bamboo and bamboo saplings.",
"lophine_carpet.carpet.general.betterCraftableBoneBlock.comment": "Add the AMS alternate bone block recipe that yields 3 bone blocks from 9 bones.",
"lophine_carpet.carpet.general.betterCraftableDispenser.comment": "Add the AMS alternate dispenser recipes using a dropper.",
"lophine_carpet.carpet.general.blockPlacementIgnoreEntity.comment": "Allow creative players to place blocks without entity collision checks.",
"lophine_carpet.carpet.general.carpetAlwaysSetDefault.comment": "Compatibility flag for Lophine's config loader, which already writes default values into the compat config during preload.",
"lophine_carpet.carpet.general.clientSettingsLostOnRespawnFix.comment": "Reapply the player's last known client settings after respawn.",
"lophine_carpet.carpet.general.commandTick.comment": "Enable the tick command support.",
"lophine_carpet.carpet.general.comment": "Carpet/AMS/TIS/Org compatibility rules backed by existing Lophine features.\nOnly rules that already have a working server-side implementation are exposed here.",
"lophine_carpet.carpet.general.creativeNoClip.comment": "Whether to enable creative fly no clip.\nWhen enabled, players in creative mode will not collide with blocks while flying.\nThis allows them to pass through blocks without obstruction.",
"lophine_carpet.carpet.general.creativeNoItemCooldown.comment": "Skip item cooldown application for creative players.",
"lophine_carpet.carpet.general.creativeOneHitKill.comment": "Allow creative players to instantly kill attackable non-creative, non-spectator entities.\nSneaking expands the effect into a small area attack.",
"lophine_carpet.carpet.general.creativeOpenContainerForcibly.comment": "Allow creative players to forcibly open blocked chests, ender chests and shulker boxes.",
"lophine_carpet.carpet.general.ctrlQCraftingFix.comment": "Compatibility flag for the upstream result-slot Ctrl+Q crafting fix already present in the current menu code.",
"lophine_carpet.carpet.general.defaultLoggers.comment": "Carpet-style default logger subscriptions for players.\nExamples: [\"tps\", \"mob_caps\", \"counter white\"]",
"lophine_carpet.carpet.general.disableBlazeFire.comment": "Disables fire made from blaze fireballs.",
"lophine_carpet.carpet.general.disableGhastFire.comment": "Disables fire made from ghast fireballs.",
"lophine_carpet.carpet.general.dustTrapdoorReintroduced.comment": "Should the pre-1.20 mechanism be reintroduced:\nRedstone dust does not connect to adjacent redstone dust on trapdoors that are open\nPre-1.20.2 mechanism: Redstone dust, redstone repeaters, \nand redstone comparators do not check for attachment when receiving status updates from below.",
"lophine_carpet.carpet.general.entityInstantDeathRemoval.comment": "Remove the normal 20gt delay before dead living entities are discarded.",
"lophine_carpet.carpet.general.explosionNoBlockDamage.comment": "Let explosions damage entities without breaking blocks.",
"lophine_carpet.carpet.general.farmlandTrampledDisabled.comment": "Prevent farmland from turning into dirt when entities land on it.",
"lophine_carpet.carpet.general.fastRedstoneDust.comment": "Route redstone dust updates through the Alternate Current fast-update backend.",
"lophine_carpet.carpet.general.hopperNoItemCost.comment": "Restore the transferred stack into a hopper when a wool block is placed on top of it.",
"lophine_carpet.carpet.general.instantBlockUpdaterReintroduced.comment": "Instant block updater.",
"lophine_carpet.carpet.general.interactionUpdates.comment": "Control whether player interaction block changes emit normal block updates.\nSet to false to suppress neighbor and shape updates during block use and breaking.",
"lophine_carpet.carpet.general.lagFreeSpawning.comment": "Use the lightweight collision and precooked-mob spawning path for natural spawning checks.",
"lophine_carpet.carpet.general.language.comment": "Carpet language value.\nATTENTION: This config will not update in Lophine global now!",
"lophine_carpet.carpet.general.microTiming.comment": "Compatibility flag for the built-in region profiler and timing instrumentation carried by Folia/Moonrise.",
"lophine_carpet.carpet.general.noCreeperBlockBreaking.comment": "Disables creeper explosion block breaking.",
"lophine_carpet.carpet.general.noGhastBlockBreaking.comment": "Disables ghast fireball explosion block breaking.",
"lophine_carpet.carpet.general.observerNoDetection.comment": "Disable observer detection pulses entirely.",
"lophine_carpet.carpet.general.optimizedDragonRespawn.comment": "Enable optimized dragon respawn.",
"lophine_carpet.carpet.general.optimizedFastEntityMovement.comment": "Compatibility flag for the always-on Moonrise/Paper fast entity movement collision pipeline.",
"lophine_carpet.carpet.general.optimizedHardHitBoxEntityCollision.comment": "Compatibility flag for the always-on Moonrise/Paper hard-hitbox entity collision optimizations.",
"lophine_carpet.carpet.general.optimizedTNTHighPriority.comment": "Compatibility flag for the already optimized server explosion path carried by the current runtime.",
"lophine_carpet.carpet.general.placementRotationFix.comment": "Use the player's main body rotation for placement direction checks instead of interpolated head yaw.",
"lophine_carpet.carpet.general.powerfulExpMending.comment": "Let picked-up experience repair all damaged mending items in the player's inventory, not only equipped gear.",
"lophine_carpet.carpet.general.preventEndSpikeRespawn.comment": "Skip obsidian spike regeneration during dragon respawn.",
"lophine_carpet.carpet.general.sensibleEnderman.comment": "Restrict enderman block pickup to pumpkins and melons only.",
"lophine_carpet.carpet.general.shulkerBoxCCEReintroduced.comment": "Use ClassCastException for update suppression.",
"lophine_carpet.carpet.general.shulkerGolem.comment": "Allow a carved pumpkin on top of a shulker box to summon a shulker.",
"lophine_carpet.carpet.general.simpleInGameCalculator.comment": "Evaluate chat messages prefixed with `=` as a simple calculator expression and reply privately.",
"lophine_carpet.carpet.general.syncServerMsptMetricsData.comment": "Broadcast live MSPT samples through the native TISCM protocol channel.",
"lophine_carpet.carpet.general.tickCommandPermission.comment": "Override the `/tick` command permission level.\nAccepts values in the range 0..4, where 2 matches old Carpet behavior and 3 keeps vanilla.",
"lophine_carpet.carpet.general.tickFreezeCommandToggleable.comment": "Make `/tick freeze` toggle back to running when executed while the server is already frozen.",
"lophine_carpet.carpet.general.tiscmNetworkProtocol.comment": "Enable the native Carpet TIS Addition network channel on `tiscm:network/v1`.",
"lophine_carpet.carpet.general.tntDoNotUpdate.comment": "Prevent TNT from checking redstone power when first placed.",
"lophine_carpet.carpet.general.tntDupingFix.comment": "Toggle the piston desync path used by vanilla TNT duplication setups.",
"lophine_carpet.carpet.general.tntFuseDuration.comment": "Override the default primed TNT fuse duration in ticks.\nAccepts values in the range 0..32767.",
"lophine_carpet.carpet.general.tntIgnoreRedstoneSignal.comment": "Ignore redstone power when deciding whether TNT should auto-prime.",
"lophine_carpet.carpet.general.tntPrimerMomentumRemoved.comment": "Remove the random horizontal launch momentum from newly primed TNT.",
"lophine_carpet.carpet.general.totallyNoBlockUpdate.comment": "Suppress neighbor and shape updates globally for block changes.",
"lophine_carpet.carpet.general.viewDistance.comment": "Override the dedicated server's startup view distance with the Carpet-compatible value.",
"lophine_carpet.carpet.general.xpNoCooldown.comment": "Allow players to absorb multiple experience orbs in the same tick without pickup delay.",
"lophine_carpet.carpet.general.yeetOutOfOrderChatKick.comment": "Ignore out-of-order secure chat chain checks instead of invalidating the chat session.",
"lophine_carpet.carpet.general.yeetUpdateSuppressionCrash.comment": "Update suppression crash yeeting.",
"lophine_carpet.carpet.hopper_counter.comment": "Hopper counter functions.",
"lophine_carpet.carpet.hopper_counter.hopperCounters.comment": "Enable the existing wool hopper counter implementation.",
"lophine_carpet.carpet.hopper_counter.hopperCountersUnlimitedSpeed.comment": "Remove the hopper transfer speed limit for counters.\nOnly effective when hopperCounters is enabled.",
"luminol.experiment.command.enable_command_block.comment": "Force to enable command blocks.\nATTENTION: WOULD CAUSE SERVER CRASHING AS SOME THREADING ISSUE!!!\nDO NOT ENABLE UNLESS YOU KNOW WHAT YOU ARE DOING!!!",
"luminol.experiment.command.enable_waypoints_and_waypoint_command.comment": "Enable waypoint and waypoint command.\nWARN: Still under testing",
"luminol.experiment.disable_async_catchers.enabled.comment": "Disable async catcher to prevent some crashes caused by some plugins which supports folia but has issuable logics.\nATTENTION: Would cause region deadlock when getChunkAt was incorrectly called!\nSee: https://github.com/PaperMC/Folia/issues/280 which is resolved in folia(https://github.com/PaperMC/Folia/commit/2e7bc0721af95196c85500c7bb136aeea0bc12ce)\nDO NOT ENABLE UNLESS YOU KNOW WHAT YOU ARE DOING!!!",
"luminol.experiment.disable_entity_exception_catchers.enabled.comment": "If this config enabled, the server will crash directly when entity ticking has some errors instead of removing the entity to keep server running.\nIt could prevent entity disappearing but may cause more server crashes.\nDO NOT ENABLE UNLESS YOU KNOW WHAT YOU ARE DOING!!!",
"luminol.fixes.allow_unsafe_teleportation.enabled.comment": "Allow non player entities enter end portals if enabled.\nIf you want to use sand duping,please turn on this.\nWarning: This would cause some unsafe issues, you could learn more on : https://github.com/PaperMC/Folia/issues/297",
"luminol.fixes.collision_behavior.mode.comment": "Decides which collision logics will be used(Moonrise and Paper modified this for optimization but would also break some vanilla behaviours at the same time).\nWould be useful for fixing improper behaviours of some huge redstone machines\nAvailable Value:\nVANILLA\nBLOCK_SHAPE_VANILLA\nPAPER",
"luminol.fixes.fix_high_velocity_issue.enabled.comment": "A simple fix of an issue on folia\n(Sometimes the entity woulds have a large moment that cross the different tick regions,\nand it woulds make the server crashed)\nbut sometimes it might doesn't work",
"luminol.fixes.force_cleanup_drop_non_owned_entity_memory_module.comment": "This config is a temporary fix for those incorrect owned data in the memory of each mob, for more you can see https://github.com/PaperMC/Folia/issues/203",
"luminol.fixes.force_cleanup_drop_non_owned_entity_memory_module.enabled_for_block_pos.comment": "When enabled, the entity's brain will clean the memory which is typed of block_pos and not belong to current tickregion",
"luminol.fixes.force_cleanup_drop_non_owned_entity_memory_module.enabled_for_entity.comment": "When enabled, the entity's brain will clean the memory which is typed of entity and not belong to current tickregion",
"luminol.fixes.force_cleanup_drop_non_owned_entity_memory_module.enabled_for_position_tracker.comment": "When enabled, the entity's brain will clean the memory which is typed of position_tracker and not belong to current tickregion",
"luminol.fixes.item_multitask.enabled.comment": "Prevent the server from interrupting the state of items\nduring block interactions or hotbar slot changes.",
"luminol.fixes.long_command_support.enabled.comment": "Some long commands can be run through the dialog command,\nbut paper has prohibited it.\nEnable this to fix this problem.",
"luminol.fixes.pathfinding_fixes.break_down_pathfinding_when_out_of_region.comment": "Recompute path or stop pathfinding when it's touching the blocks out of current tick region",
"luminol.fixes.pathfinding_fixes.do_not_pathfind_to_not_owned_targets.comment": "Skip pathfinding target when it's out of current tick region",
"luminol.fixes.poi_range_fixes.do_not_compete_poi_if_unloaded.comment": "Do not compete POI if it's unloaded\nRelated with https://github.com/PaperMC/Folia/issues/292",
"luminol.fixes.prevent_incorrect_teleport_async_calls_during_move_event.enabled.comment": "When enabled, the server would reject some incorrect teleportAsync calls during move events.\nAnd this will reduce the crashes which caused by plugins(Residence etc.)\nBut you should notice that it might break the compatibility with some plugins.",
"luminol.fixes.use_vanilla_random_source.enable_for_player_entity.comment": "Related with RNG cracks",
"luminol.function.membar.display.comment": "Available displays: BOSS_BAR, ACTION_BAR, TAB_LIST",
"luminol.function.portal_rate_limit.enable.comment": "Whether or not to limit the portal rate when entity goes into portals",
"luminol.function.portal_rate_limit.maximum_portal_teleports_per_tick.comment": "Decides how much portal teleportation should be handled within a tick in a single tick region,when exceed,\nthe portal teleportation will be pushed into the next tick\n\nNote: set to -1 to use custom expressions",
"luminol.function.portal_rate_limit.maximum_portal_teleports_per_tick_expression.comment": "If the fixed limit is not enough for use, you could define your own expression to dynamically limit theportal rate.\n\nAvailable variables(all is of current tickregion): e (ticking_entity_count)\nc (ticking_chunk_count)\np (player_count)\nExample: 50 * (1 + sqrt(x/1000) + c/200 + p/5)",
"luminol.function.region_format.blinear_io_flush_delay_ms.comment": "Decides when it will be flushed to the region file when there has been no write operations for n(default is 3000) milliseconds(Only works for B_LINEAR)",
"luminol.function.region_format.blinear_io_thread_count.comment": "Decides the worker thread count of buffered linear(Only works for B_LINEAR)",
"luminol.function.region_format.format.comment": "Available choices: MCA, B_LINEAR, LINEAR_V2",
"luminol.function.region_format.linear_compression_level.comment": "Decides the compression level of the region file(Only works for LINEAR_V2 and B_LINEAR)",
"luminol.function.region_format.linear_io_flush_delay_ms.comment": "Decides when it will be flushed to the region file when it has been marked to save for n(default is 100) milliseconds(Only works for LINEAR_V2)",
"luminol.function.region_format.linear_io_thread_count.comment": "Decides the worker thread count of linear(Only works for LINEAR_V2)",
"luminol.function.region_format.linear_use_virtual_thread.comment": "Decides if it could use virtual threads for linear format(Only works for LINEAR_V2)",
"luminol.function.regionbar.display.comment": "Available displays: BOSS_BAR, ACTION_BAR, TAB_LIST",
"luminol.function.secure_seed.enabled.comment": "Once you enable secure seed, all ores and structures are generated with 1024-bit seed\ninstead of using 64-bit seed in vanilla, making traditional seed cracking impossible.\nNote: If you use V1 it will be vulnerable to terrain elevation attacks.\n***** WARN: You need keep it enabled if your old world are also using secure seed! Or it will kill your save *****",
"luminol.function.secure_seed.salt.comment": "Auto-generated 256-bit salt for V2 cryptographic operations.\nGenerated once on first startup - DO NOT SHARE THIS OR MODIFY (MODIFYING THIS WILL CAUSE CHUNK ERRORS)!\nUsed with Blake3 keyed hash to make seed irreversible.",
"luminol.function.secure_seed.version.comment": "Version 1: Blake2b (insecure, reversible with a GPU/ASIC cluster in minutes with enough entropy)\nVersion 2: Blake3 with salt key derivation (recommended, irreversible)\n***** WARN: Switching versions will cause chunk errors! *****",
"luminol.function.tpsbar.display.comment": "Available displays: BOSS_BAR, ACTION_BAR, TAB_LIST",
"luminol.function.tpsbar.precision_of_mspt_value.comment": "Example(if mspt is 20.00000000)(value -> result): 2 -> 20.00, 1 -> 20.0",
"luminol.function.tpsbar.precision_of_tps_value.comment": "Example(if tps is 20.00000000)(value -> result): 2 -> 20.00, 1 -> 20.0",
"luminol.function.tripwire_dupe.behavior_mode.comment": "Available Value:\nVANILLA20\nVANILLA21\nMIXED",
"luminol.misc.auto_update.allow_prerelease.comment": "Whether prerelease GitHub releases are allowed when selecting an update.",
"luminol.misc.auto_update.check_times.comment": "List of daily check times in HH:mm, based on the server's local time zone.",
"luminol.misc.auto_update.comment": "Checks GitHub Releases for newer version's jars on a schedule.\nDownloads are staged under auto_update/lophine and written to auto_update/core.path,\nwhich Hyacinthusclip can consume on the next restart.\nIf target_jar_path is set, server will also try to replace that launcher jar directly.",
"luminol.misc.auto_update.enabled.comment": "Whether the server should check for updates automatically.",
"luminol.misc.auto_update.target_jar_path.comment": "Optional launcher jar path to replace after a successful download.\nLeave this blank to keep the downloaded jar staged in auto_update/lophine\nand let Hyacinthusclip switch to it through auto_update/core.path on restart.",
"luminol.misc.disable_warning.disable_heightmap_warning.comment": "Disable heightmap-check's warning",
"luminol.misc.disable_warning.disable_moved_wrongly_threshold_warning.comment": "Disable wrongly move warns and checks",
"luminol.misc.disable_warning.disable_offline_mode_warning.comment": "Disable offline warns popped in the log when starting the server",
"luminol.misc.folia_watchdog.tick_region_time_out_ms.comment": "Decides the interval of the watchdog prints the threads dumps of tickregions in stuck",
"luminol.misc.force_disable_packet_limiter_of_paper.comment": "Force and fully disable all packet limiters of Paper, which is used to prevent from kicking by using some quick crafting mods but has negative impacts on security",
"luminol.misc.save_portal_tickets.do_save.comment": "whether or not to save the portal tickets when server stopping, this would make it acts like mc before 1.21.5,\nand won't auto active the portal chunk loader when server started again.",
"luminol.misc.sentry.dsn.comment": "Sentry DSN for improved error logging, leave blank to disable,\nObtain from https://sentry.io/",
"luminol.misc.sentry.log_level.comment": "Logs with a level higher than or equal to this level will be recorded.",
"luminol.misc.sentry.only_log_thrown.comment": "Only log with a Throwable will be recorded after enabling this.",
"luminol.misc.server_mod_name.name.comment": "Decides the server mod name shown in your F3 debug screen.",
"luminol.misc.server_mod_name.vanilla_spoof.comment": "Ignore any plugin's modification and server mod name set in this config block,\nonly force sending brand name of vanilla",
"luminol.misc.username_checks.allow_old_player_join.comment": "Allow old players to join the server after the username regex is changed,\neven if their names don't meet the new requirements.",
"luminol.misc.username_checks.enabled.comment": "Decide whether the username checks are enabled,\nyou could disable it if your players are using Chinese username\nbut also notification any security impacts caused by disabling it",
"luminol.misc.username_checks.enforce_skull_validation.comment": "Enforce skull validation, preventing skulls with invalid names from disconnecting the client.",
"luminol.misc.username_checks.username_check_regex.comment": "Use username regex to validate usernames,\nallowing only characters specified in the regex.",
"luminol.misc.verify_publickey_only_in_online_mode.comment": "Only verify the public key in online mode, could be useful when using plugins like MultiLogin with custom auth server configured",
"luminol.optimizations.cpu_affinity.enabled_for_tickregion.comment": "Using this you could pin the threads of tick region scheduler(Following are the same) to cpu cores listed in the config 'tickregion_affinity' following,\nwhich is useful for those CPU with P and E cores (such as 12/13/14 gen Intel Core CPUs and so on.)",
"luminol.optimizations.cpu_affinity.tickregion_affinity.comment": "The core number you want the tick region threads to bind on",
"luminol.optimizations.lithium_sleeping_block_entity.enabled.comment": "Use sleeping blocking optimizations from lithium,s\non luminol the hopper optimizations of paper were totally removed and replaced by those of lithiums\nand it's turned on by default",
"luminol.optimizations.lobotomize_villager.check_interval.comment": "The interval in ticks to check if a villager is lobotomized",
"luminol.optimizations.lobotomize_villager.comment": "Lobotomizes the villager if it cannot move (Does not disable trading)",
"luminol.optimizations.lobotomize_villager.wait_until_trade_locked.comment": "Wait until a villager has been traded with before lobotomizing",
"luminol.optimizations.projectile.max-loads-per-projectile.comment": "Controls how many chunks a projectile can load in its lifetime before it gets automatically removed.",
"luminol.optimizations.projectile.max-loads-per-tick.comment": "Controls how many chunks are allowed to be sync loaded by projectiles in a tick.",
"luminol.optimizations.reduce_sensor_work.comment": "When it is enabled, it will delete the line of sight cache less often and use a faster nearby comparison.",
"luminol.optimizations.reduce_sensor_work.enabled.comment": "The interval of each entity to drop the cache(in ticks)",
"luminol.optimizations.throttle_goal_selector_tick_in_inactive_tick.comment": "Throttles the AI goal selector in entity inactive ticks.\nThis can improve performance by a few percent, but has minor gameplay implications.",
"luminol.optimizations.use_async_protocol_switching.enabled.comment": "Uses async protocol preparation for mc.\nWarn: Due to the packet sequence was changed by this optimization, it might be\nuncompatible with some plugins(ViaVersion etc.)",
"luminol.optimizations.variable_entity_waking_up.entity_wakeup_duration_ratio_standard_deviation.comment": "If this value is set to any value > 0, waking up inactive entities happens spread over time, instead of many entities at once. This makes entities feel and behave more natural.\nThis setting is the coefficient of variation, or \u03c3 / \u03bc (the ratio of the standard deviation to the mean) of the inactivity duration.\n\nIn other words, this setting is the value \u03c3, so that the regular inactivity duration will be multiplied by a factor normal_distribution(\u03bc = 1, \u03c3).\nIf a value \u2264 0 is given, variable entity wake-up is disabled.",
"luminol.unsupported.disable_check_for_folia_supported.disable_for_leaves.comment": "Disable check for folia-supported for leaves plugin.\nATTENTION: No support will be provided if you enabled this.",
"luminol.unsupported.disable_check_for_folia_supported.disable_for_paper.comment": "Disable check for folia-supported for spigot/bukkit/paper plugin.\nATTENTION: No support will be provided if you enabled this."
"lophine.experiment.command.function_command_enabled.comment": "Allow to use function command",
"lophine.experiment.command.save_all_command.enabled.comment": "Allow to use save-all command",
"lophine.experiment.command.save_all_command.log_all_process.comment": "Log all process of save-all command to console",
"lophine.experiment.command.save_all_command.save_all_command_timeout.comment": "Maximum seconds to save before the chunk report it is timeout.",
"lophine.experiment.command.scoreboard_command_enabled.comment": "Allow to use scoreboard command",
"lophine.experiment.command.trigger_command_enabled.comment": "Allow to use trigger command",
"lophine.experiment.entity_damage_source_trace.enabled.comment": "Allow trace damage source cross different Region Scheduler.",
"lophine.experiment.global_entities_counter.version.comment": "DISABLED\nDEFAULT_SYNC: Enable global entities counter origin version with sync counter module.\nDEFAULT_ASYNC: Enable global entities counter origin version with async counter module.\nPRECISE: Enable precise mob cap calculation with incremental counting. Replaces the periodic full-scan with event-driven real-time updates.\n\nYou need to set per-player-mob-spawns to false on paper-world-defaults.yml or paper-world.yml",
"lophine.fixes.update-suppression-crash-fix.enabled.comment": "Should crash caused by update suppression be prevented?",
"lophine.fixes.vanilla-like-experience.enabled.comment": "Restore a more vanilla-like technical gameplay experience by bypassing some Paper safety and behavior changes.",
"lophine.function.container_expansion.barrel_rows.comment": "range: 1~6",
"lophine.function.container_expansion.enderchest_rows.comment": "range: 1~6",
"lophine.function.container_expansion.shulker_box.shulker_stackable_count.comment": "range: 1~64",
"lophine.function.fakeplayer.always-send-data.comment": "Always send data for fakeplayers",
"lophine.function.fakeplayer.cache-skin.comment": "Use skin cache for fakeplayers",
"lophine.function.fakeplayer.enable-locator-bar.comment": "Enable locator bar for fakeplayers",
"lophine.function.fakeplayer.enabled.comment": "Enable fakeplayer functionality (/bot command)",
"lophine.function.fakeplayer.limit.comment": "Maximum number of fakeplayers allowed",
"lophine.function.fakeplayer.manual-save-and-load.comment": "Allow manual save and load of fakeplayers",
"lophine.function.fakeplayer.modify-config.comment": "Allow modifying fakeplayer config",
"lophine.function.fakeplayer.open-action-gui.comment": "Allow opening fakeplayer action gui,\nneed sneak to open if you enabled inventory open gui",
"lophine.function.fakeplayer.prefix.comment": "Prefix for fakeplayer names",
"lophine.function.fakeplayer.regen-amount.comment": "Regeneration amount for fakeplayers",
"lophine.function.fakeplayer.simulation-distance.comment": "Simulation distance for fakeplayers (-1 for default)",
"lophine.function.fakeplayer.skip-sleep-check.comment": "Skip sleep check for fakeplayers",
"lophine.function.fakeplayer.spawn-phantom.comment": "Allow phantoms to spawn for fakeplayers",
"lophine.function.fakeplayer.suffix.comment": "Suffix for fakeplayer names",
"lophine.function.fakeplayer.unable-fakeplayer-names.comment": "List of names that cannot be used for fakeplayers",
"lophine.function.fakeplayer.use-action.comment": "Allow fakeplayers to use actions",
"lophine.function.language.allow_auto_reset_comments.comment": "If the package contains the configuration file comment file for the corresponding language,\nautomatically reload the configuration file comments using the related content.\n\nWARNING: This will delete the original comments!",
"lophine.function.language.full_blocking_load.comment": "Whether to allow blocking server loading when loading localized language.\nIf you want only use your localized language to shown in your terminal, \nyou need to enable it.\n\nWARNING: This may slow down the startup speed!",
"lophine.function.language.lang.comment": "Please use the key from https://minecraft.wiki/w/Language\nSample of format: en_us zh_cn zh_hk zh_tw\nATTENTION: If you want to edit language for carpet system, \nplease edit it in carpet config file.",
"lophine.function.protocol.alternative_block_placement.enabled.comment": "Specify the precise placement protocol type\nNONE Disable precise placement protocol\nCARPET Precise placement protocol version 2\nCARPET_FIX Enhanced precise placement protocol version 2 (requires MasaGadget installed on client)\nLITEMATICA Precise placement protocol version 3",
"lophine.function.protocol.appleskin.enabled.comment": "Enable AppleSkin protocol support",
"lophine.function.protocol.appleskin.sync-tick-interval.comment": "Set AppleSkin Synchronization Frequency (Unit: Game Ticks)",
"lophine.function.protocol.bbor.enabled.comment": "Enable BBOR protocol support",
"lophine.function.protocol.jade.enabled.comment": "Enable Jade protocol support",
"lophine.function.protocol.pca.enabled.comment": "Enable PCA sync protocol support",
"lophine.function.protocol.pca.sync-player-entity.comment": "Controls which player entities can be watched through the PCA sync protocol.\nNOBODY: never sync player entities\nBOT: only sync Lophine fake players\nOPS: sync fake players and allow operators to sync real players\nOPS_AND_SELF: sync fake players, operators, and a player's own entity\nEVERYONE: allow all player entities",
"lophine.function.protocol.rei.enabled.comment": "Enable Roughly Enough Items protocol support",
"lophine.function.protocol.servux.litematics.litematics-print-max-delay-ticks.comment": "The max delay ticks for printing litematics, -1 to disable",
"lophine.function.protocol.syncmatica.enabled.comment": "Enable Syncmatica protocol support",
"lophine.function.protocol.syncmatica.quota-Limit.comment": "Maximum Projection File Size (in bytes)",
"lophine.function.protocol.syncmatica.useQuota.comment": "Is there a limit on the size of projection files?",
"lophine.function.protocol.xaero-map.enabled.comment": "Enable Xaero World Map Protocol Support",
"lophine.function.redstone.shears_rotate.comment": "Allows you to use the Shears to right-click to rotate the block.",
"lophine.function.replay-api.cache-photographer-size.comment": "Maximum size of cache photographer profile",
"lophine.function.replay-api.cache-photographer-time.comment": "Time to cache photographer profile(in seconds)",
"lophine.misc.disable-check.disable-op-fly-check.comment": "Disable the check for the operator's fly check",
"lophine.misc.disable-check.disable-op-move-check.comment": "Disable the check for the operator's move check",
"lophine.misc.item-entity.follow-tick-sequence-merge.comment": "Due to Paper's modification of the merge radius,\nwhen the merge radius is large and stacks containing many items get stuck in an unexpected position, \nindividual items may never reach their destination.\nThis configuration option is added to fix this behavior.",
"lophine_carpet.carpet.fakeplayer.commandPlayer.comment": "Enable /player command.(not remapped)\nIf you want to enable bot command, please see lophine global config.",
"lophine_carpet.carpet.fakeplayer.comment": "Carpet fakeplayer compatibility mapped onto Lophine fakeplayers.\ncommandPlayer is currently backed by Lophine's /bot command surface.",
"lophine_carpet.carpet.fakeplayer.fakePlayerAutoFish.comment": "Let fakeplayers holding a fishing rod automatically cast and reel it in.",
"lophine_carpet.carpet.fakeplayer.fakePlayerAutoReplaceTool.comment": "Toggle automatic tool replacement for fakeplayers.",
"lophine_carpet.carpet.fakeplayer.fakePlayerAutoReplenishment.comment": "Toggle automatic stack replenishment for fakeplayers.",
"lophine_carpet.carpet.fakeplayer.fakePlayerAutoReplenishmentFormShulkerBox.comment": "Let fakeplayer replenishment pull matching items out of shulker boxes in the inventory.",
"lophine_carpet.carpet.fakeplayer.fakePlayerDefaultSurvivalMode.comment": "Force newly created fakeplayers to start in survival instead of the server default gamemode.",
"lophine_carpet.carpet.fakeplayer.fakePlayerInteractLikeClient.comment": "Make fakeplayer entity interaction follow client-side fallback behavior more closely.",
"lophine_carpet.carpet.fakeplayer.fakePlayerReloadAction.comment": "Persist queued fakeplayer actions across save and reload.",
"lophine_carpet.carpet.fakeplayer.fakePlayerResident.comment": "Keep fakeplayers resident across unload and restart.",
"lophine_carpet.carpet.fakeplayer.fakePlayerTicksLikeRealPlayer.comment": "Tick fakeplayers in the network phase to better match real player timing.",
"lophine_carpet.carpet.fakeplayer.openFakePlayerInventory.comment": "Allow opening fakeplayer inventories.",
"lophine_carpet.carpet.general.amsUpdateSuppressionCrashFix.comment": "Update suppression crash protection.",
"lophine_carpet.carpet.general.antiSpamDisabled.comment": "Disable the server-side chat and creative-drop spam throttles used by vanilla/Spigot.",
"lophine_carpet.carpet.general.bambooModelNoOffset.comment": "Remove the random horizontal model offset from bamboo and bamboo saplings.",
"lophine_carpet.carpet.general.betterCraftableBoneBlock.comment": "Add the AMS alternate bone block recipe that yields 3 bone blocks from 9 bones.",
"lophine_carpet.carpet.general.betterCraftableDispenser.comment": "Add the AMS alternate dispenser recipes using a dropper.",
"lophine_carpet.carpet.general.blockPlacementIgnoreEntity.comment": "Allow creative players to place blocks without entity collision checks.",
"lophine_carpet.carpet.general.carpetAlwaysSetDefault.comment": "Compatibility flag for Lophine's config loader, which already writes default values into the compat config during preload.",
"lophine_carpet.carpet.general.clientSettingsLostOnRespawnFix.comment": "Reapply the player's last known client settings after respawn.",
"lophine_carpet.carpet.general.commandTick.comment": "Enable the tick command support.",
"lophine_carpet.carpet.general.comment": "Carpet/AMS/TIS/Org compatibility rules backed by existing Lophine features.\nOnly rules that already have a working server-side implementation are exposed here.",
"lophine_carpet.carpet.general.creativeNoClip.comment": "Whether to enable creative fly no clip.\nWhen enabled, players in creative mode will not collide with blocks while flying.\nThis allows them to pass through blocks without obstruction.",
"lophine_carpet.carpet.general.creativeNoItemCooldown.comment": "Skip item cooldown application for creative players.",
"lophine_carpet.carpet.general.creativeOneHitKill.comment": "Allow creative players to instantly kill attackable non-creative, non-spectator entities.\nSneaking expands the effect into a small area attack.",
"lophine_carpet.carpet.general.creativeOpenContainerForcibly.comment": "Allow creative players to forcibly open blocked chests, ender chests and shulker boxes.",
"lophine_carpet.carpet.general.ctrlQCraftingFix.comment": "Compatibility flag for the upstream result-slot Ctrl+Q crafting fix already present in the current menu code.",
"lophine_carpet.carpet.general.defaultLoggers.comment": "Carpet-style default logger subscriptions for players.\nExamples: [\"tps\", \"mob_caps\", \"counter white\"]",
"lophine_carpet.carpet.general.disableBlazeFire.comment": "Disables fire made from blaze fireballs.",
"lophine_carpet.carpet.general.disableGhastFire.comment": "Disables fire made from ghast fireballs.",
"lophine_carpet.carpet.general.dustTrapdoorReintroduced.comment": "Should the pre-1.20 mechanism be reintroduced:\nRedstone dust does not connect to adjacent redstone dust on trapdoors that are open\nPre-1.20.2 mechanism: Redstone dust, redstone repeaters, \nand redstone comparators do not check for attachment when receiving status updates from below.",
"lophine_carpet.carpet.general.entityInstantDeathRemoval.comment": "Remove the normal 20gt delay before dead living entities are discarded.",
"lophine_carpet.carpet.general.explosionNoBlockDamage.comment": "Let explosions damage entities without breaking blocks.",
"lophine_carpet.carpet.general.farmlandTrampledDisabled.comment": "Prevent farmland from turning into dirt when entities land on it.",
"lophine_carpet.carpet.general.fastRedstoneDust.comment": "Route redstone dust updates through the Alternate Current fast-update backend.",
"lophine_carpet.carpet.general.hopperNoItemCost.comment": "Restore the transferred stack into a hopper when a wool block is placed on top of it.",
"lophine_carpet.carpet.general.instantBlockUpdaterReintroduced.comment": "Instant block updater.",
"lophine_carpet.carpet.general.interactionUpdates.comment": "Control whether player interaction block changes emit normal block updates.\nSet to false to suppress neighbor and shape updates during block use and breaking.",
"lophine_carpet.carpet.general.lagFreeSpawning.comment": "Use the lightweight collision and precooked-mob spawning path for natural spawning checks.",
"lophine_carpet.carpet.general.language.comment": "Carpet language value.\nATTENTION: This config will not update in Lophine global now!",
"lophine_carpet.carpet.general.microTiming.comment": "Compatibility flag for the built-in region profiler and timing instrumentation carried by Folia/Moonrise.",
"lophine_carpet.carpet.general.noCreeperBlockBreaking.comment": "Disables creeper explosion block breaking.",
"lophine_carpet.carpet.general.noGhastBlockBreaking.comment": "Disables ghast fireball explosion block breaking.",
"lophine_carpet.carpet.general.observerNoDetection.comment": "Disable observer detection pulses entirely.",
"lophine_carpet.carpet.general.optimizedDragonRespawn.comment": "Enable optimized dragon respawn.",
"lophine_carpet.carpet.general.optimizedFastEntityMovement.comment": "Compatibility flag for the always-on Moonrise/Paper fast entity movement collision pipeline.",
"lophine_carpet.carpet.general.optimizedHardHitBoxEntityCollision.comment": "Compatibility flag for the always-on Moonrise/Paper hard-hitbox entity collision optimizations.",
"lophine_carpet.carpet.general.optimizedTNTHighPriority.comment": "Compatibility flag for the already optimized server explosion path carried by the current runtime.",
"lophine_carpet.carpet.general.placementRotationFix.comment": "Use the player's main body rotation for placement direction checks instead of interpolated head yaw.",
"lophine_carpet.carpet.general.powerfulExpMending.comment": "Let picked-up experience repair all damaged mending items in the player's inventory, not only equipped gear.",
"lophine_carpet.carpet.general.preventEndSpikeRespawn.comment": "Skip obsidian spike regeneration during dragon respawn.",
"lophine_carpet.carpet.general.sensibleEnderman.comment": "Restrict enderman block pickup to pumpkins and melons only.",
"lophine_carpet.carpet.general.shulkerBoxCCEReintroduced.comment": "Use ClassCastException for update suppression.",
"lophine_carpet.carpet.general.shulkerGolem.comment": "Allow a carved pumpkin on top of a shulker box to summon a shulker.",
"lophine_carpet.carpet.general.simpleInGameCalculator.comment": "Evaluate chat messages prefixed with `=` as a simple calculator expression and reply privately.",
"lophine_carpet.carpet.general.syncServerMsptMetricsData.comment": "Broadcast live MSPT samples through the native TISCM protocol channel.",
"lophine_carpet.carpet.general.tickCommandPermission.comment": "Override the `/tick` command permission level.\nAccepts values in the range 0..4, where 2 matches old Carpet behavior and 3 keeps vanilla.",
"lophine_carpet.carpet.general.tickFreezeCommandToggleable.comment": "Make `/tick freeze` toggle back to running when executed while the server is already frozen.",
"lophine_carpet.carpet.general.tiscmNetworkProtocol.comment": "Enable the native Carpet TIS Addition network channel on `tiscm:network/v1`.",
"lophine_carpet.carpet.general.tntDoNotUpdate.comment": "Prevent TNT from checking redstone power when first placed.",
"lophine_carpet.carpet.general.tntDupingFix.comment": "Toggle the piston desync path used by vanilla TNT duplication setups.",
"lophine_carpet.carpet.general.tntFuseDuration.comment": "Override the default primed TNT fuse duration in ticks.\nAccepts values in the range 0..32767.",
"lophine_carpet.carpet.general.tntIgnoreRedstoneSignal.comment": "Ignore redstone power when deciding whether TNT should auto-prime.",
"lophine_carpet.carpet.general.tntPrimerMomentumRemoved.comment": "Remove the random horizontal launch momentum from newly primed TNT.",
"lophine_carpet.carpet.general.totallyNoBlockUpdate.comment": "Suppress neighbor and shape updates globally for block changes.",
"lophine_carpet.carpet.general.viewDistance.comment": "Override the dedicated server's startup view distance with the Carpet-compatible value.",
"lophine_carpet.carpet.general.xpNoCooldown.comment": "Allow players to absorb multiple experience orbs in the same tick without pickup delay.",
"lophine_carpet.carpet.general.yeetOutOfOrderChatKick.comment": "Ignore out-of-order secure chat chain checks instead of invalidating the chat session.",
"lophine_carpet.carpet.general.yeetUpdateSuppressionCrash.comment": "Update suppression crash yeeting.",
"lophine_carpet.carpet.hopper_counter.comment": "Hopper counter functions.",
"lophine_carpet.carpet.hopper_counter.hopperCounters.comment": "Enable the existing wool hopper counter implementation.",
"lophine_carpet.carpet.hopper_counter.hopperCountersUnlimitedSpeed.comment": "Remove the hopper transfer speed limit for counters.\nOnly effective when hopperCounters is enabled.",
"luminol.experiment.command.enable_command_block.comment": "Force to enable command blocks.\nATTENTION: WOULD CAUSE SERVER CRASHING AS SOME THREADING ISSUE!!!\nDO NOT ENABLE UNLESS YOU KNOW WHAT YOU ARE DOING!!!",
"luminol.experiment.command.enable_waypoints_and_waypoint_command.comment": "Enable waypoint and waypoint command.\nWARN: Still under testing",
"luminol.experiment.disable_async_catchers.enabled.comment": "Disable async catcher to prevent some crashes caused by some plugins which supports folia but has issuable logics.\nATTENTION: Would cause region deadlock when getChunkAt was incorrectly called!\nSee: https://github.com/PaperMC/Folia/issues/280 which is resolved in folia(https://github.com/PaperMC/Folia/commit/2e7bc0721af95196c85500c7bb136aeea0bc12ce)\nDO NOT ENABLE UNLESS YOU KNOW WHAT YOU ARE DOING!!!",
"luminol.experiment.disable_entity_exception_catchers.enabled.comment": "If this config enabled, the server will crash directly when entity ticking has some errors instead of removing the entity to keep server running.\nIt could prevent entity disappearing but may cause more server crashes.\nDO NOT ENABLE UNLESS YOU KNOW WHAT YOU ARE DOING!!!",
"luminol.fixes.allow_unsafe_teleportation.enabled.comment": "Allow non player entities enter end portals if enabled.\nIf you want to use sand duping,please turn on this.\nWarning: This would cause some unsafe issues, you could learn more on : https://github.com/PaperMC/Folia/issues/297",
"luminol.fixes.collision_behavior.mode.comment": "Decides which collision logics will be used(Moonrise and Paper modified this for optimization but would also break some vanilla behaviours at the same time).\nWould be useful for fixing improper behaviours of some huge redstone machines\nAvailable Value:\nVANILLA\nBLOCK_SHAPE_VANILLA\nPAPER",
"luminol.fixes.fix_high_velocity_issue.enabled.comment": "A simple fix of an issue on folia\n(Sometimes the entity woulds have a large moment that cross the different tick regions,\nand it woulds make the server crashed)\nbut sometimes it might doesn't work",
"luminol.fixes.force_cleanup_drop_non_owned_entity_memory_module.comment": "This config is a temporary fix for those incorrect owned data in the memory of each mob, for more you can see https://github.com/PaperMC/Folia/issues/203",
"luminol.fixes.force_cleanup_drop_non_owned_entity_memory_module.enabled_for_block_pos.comment": "When enabled, the entity's brain will clean the memory which is typed of block_pos and not belong to current tickregion",
"luminol.fixes.force_cleanup_drop_non_owned_entity_memory_module.enabled_for_entity.comment": "When enabled, the entity's brain will clean the memory which is typed of entity and not belong to current tickregion",
"luminol.fixes.force_cleanup_drop_non_owned_entity_memory_module.enabled_for_position_tracker.comment": "When enabled, the entity's brain will clean the memory which is typed of position_tracker and not belong to current tickregion",
"luminol.fixes.item_multitask.enabled.comment": "Prevent the server from interrupting the state of items\nduring block interactions or hotbar slot changes.",
"luminol.fixes.long_command_support.enabled.comment": "Some long commands can be run through the dialog command,\nbut paper has prohibited it.\nEnable this to fix this problem.",
"luminol.fixes.pathfinding_fixes.break_down_pathfinding_when_out_of_region.comment": "Recompute path or stop pathfinding when it's touching the blocks out of current tick region",
"luminol.fixes.pathfinding_fixes.do_not_pathfind_to_not_owned_targets.comment": "Skip pathfinding target when it's out of current tick region",
"luminol.fixes.poi_range_fixes.do_not_compete_poi_if_unloaded.comment": "Do not compete POI if it's unloaded\nRelated with https://github.com/PaperMC/Folia/issues/292",
"luminol.fixes.prevent_incorrect_teleport_async_calls_during_move_event.enabled.comment": "When enabled, the server would reject some incorrect teleportAsync calls during move events.\nAnd this will reduce the crashes which caused by plugins(Residence etc.)\nBut you should notice that it might break the compatibility with some plugins.",
"luminol.fixes.use_vanilla_random_source.enable_for_player_entity.comment": "Related with RNG cracks",
"luminol.function.membar.display.comment": "Available displays: BOSS_BAR, ACTION_BAR, TAB_LIST",
"luminol.function.portal_rate_limit.enable.comment": "Whether or not to limit the portal rate when entity goes into portals",
"luminol.function.portal_rate_limit.maximum_portal_teleports_per_tick.comment": "Decides how much portal teleportation should be handled within a tick in a single tick region,when exceed,\nthe portal teleportation will be pushed into the next tick\n\nNote: set to -1 to use custom expressions",
"luminol.function.portal_rate_limit.maximum_portal_teleports_per_tick_expression.comment": "If the fixed limit is not enough for use, you could define your own expression to dynamically limit theportal rate.\n\nAvailable variables(all is of current tickregion): e (ticking_entity_count)\nc (ticking_chunk_count)\np (player_count)\nExample: 50 * (1 + sqrt(x/1000) + c/200 + p/5)",
"luminol.function.region_format.blinear_io_flush_delay_ms.comment": "Decides when it will be flushed to the region file when there has been no write operations for n(default is 3000) milliseconds(Only works for B_LINEAR)",
"luminol.function.region_format.blinear_io_thread_count.comment": "Decides the worker thread count of buffered linear(Only works for B_LINEAR)",
"luminol.function.region_format.format.comment": "Available choices: MCA, LINEAR_V2, B_LINEAR",
"luminol.function.region_format.linear_compression_level.comment": "Decides the compression level of the region file(Only works for LINEAR_V2 and B_LINEAR)",
"luminol.function.region_format.linear_io_flush_delay_ms.comment": "Decides when it will be flushed to the region file when it has been marked to save for n(default is 100) milliseconds(Only works for LINEAR_V2)",
"luminol.function.region_format.linear_io_thread_count.comment": "Decides the worker thread count of linear(Only works for LINEAR_V2)",
"luminol.function.region_format.linear_use_virtual_thread.comment": "Decides if it could use virtual threads for linear format(Only works for LINEAR_V2)",
"luminol.function.regionbar.display.comment": "Available displays: BOSS_BAR, ACTION_BAR, TAB_LIST",
"luminol.function.secure_seed.enabled.comment": "Once you enable secure seed, all ores and structures are generated with 1024-bit seed\ninstead of using 64-bit seed in vanilla, making traditional seed cracking impossible.\nNote: If you use V1 it will be vulnerable to terrain elevation attacks.\n***** WARN: You need keep it enabled if your old world are also using secure seed! Or it will kill your save *****",
"luminol.function.secure_seed.salt.comment": "Auto-generated 256-bit salt for V2 cryptographic operations.\nGenerated once on first startup - DO NOT SHARE THIS OR MODIFY (MODIFYING THIS WILL CAUSE CHUNK ERRORS)!\nUsed with Blake3 keyed hash to make seed irreversible.",
"luminol.function.secure_seed.version.comment": "Version 1: Blake2b (insecure, reversible with a GPU/ASIC cluster in minutes with enough entropy)\nVersion 2: Blake3 with salt key derivation (recommended, irreversible)\n***** WARN: Switching versions will cause chunk errors! *****",
"luminol.function.tpsbar.display.comment": "Available displays: BOSS_BAR, ACTION_BAR, TAB_LIST",
"luminol.function.tpsbar.precision_of_mspt_value.comment": "Example(if mspt is 20.00000000)(value -> result): 2 -> 20.00, 1 -> 20.0",
"luminol.function.tpsbar.precision_of_tps_value.comment": "Example(if tps is 20.00000000)(value -> result): 2 -> 20.00, 1 -> 20.0",
"luminol.function.tripwire_dupe.behavior_mode.comment": "Available Value:\nVANILLA20\nVANILLA21\nMIXED",
"luminol.misc.auto_update.allow_prerelease.comment": "Whether prerelease GitHub releases are allowed when selecting an update.",
"luminol.misc.auto_update.check_times.comment": "List of daily check times in HH:mm, based on the server's local time zone.",
"luminol.misc.auto_update.comment": "Checks GitHub Releases for newer version's jars on a schedule.\nDownloads are staged under auto_update/lophine and written to auto_update/core.path,\nwhich Clip can consume on the next restart.\nIf target_jar_path is set, server will also try to replace that launcher jar directly.",
"luminol.misc.auto_update.enabled.comment": "Whether the server should check for updates automatically.",
"luminol.misc.auto_update.target_jar_path.comment": "Optional launcher jar path to replace after a successful download.\nLeave this blank to keep the downloaded jar staged in auto_update/lophine\nand let Clip switch to it through auto_update/core.path on restart.",
"luminol.misc.disable_warning.disable_heightmap_warning.comment": "Disable heightmap-check's warning",
"luminol.misc.disable_warning.disable_moved_wrongly_threshold_warning.comment": "Disable wrongly move warns and checks",
"luminol.misc.disable_warning.disable_offline_mode_warning.comment": "Disable offline warns popped in the log when starting the server",
"luminol.misc.folia_watchdog.tick_region_time_out_ms.comment": "Decides the interval of the watchdog prints the threads dumps of tickregions in stuck",
"luminol.misc.force_disable_packet_limiter_of_paper.comment": "Force and fully disable all packet limiters of Paper, which is used to prevent from kicking by using some quick crafting mods but has negative impacts on security",
"luminol.misc.save_portal_tickets.do_save.comment": "whether or not to save the portal tickets when server stopping, this would make it acts like mc before 1.21.5,\nand won't auto active the portal chunk loader when server started again.",
"luminol.misc.sentry.dsn.comment": "Sentry DSN for improved error logging, leave blank to disable,\nObtain from https://sentry.io/",
"luminol.misc.sentry.log_level.comment": "Logs with a level higher than or equal to this level will be recorded.",
"luminol.misc.sentry.only_log_thrown.comment": "Only log with a Throwable will be recorded after enabling this.",
"luminol.misc.server_mod_name.name.comment": "Decides the server mod name shown in your F3 debug screen.",
"luminol.misc.server_mod_name.vanilla_spoof.comment": "Ignore any plugin's modification and server mod name set in this config block,\nonly force sending brand name of vanilla",
"luminol.misc.username_checks.allow_old_player_join.comment": "Allow old players to join the server after the username regex is changed,\neven if their names don't meet the new requirements.",
"luminol.misc.username_checks.enabled.comment": "Decide whether the username checks are enabled,\nyou could disable it if your players are using Chinese username\nbut also notification any security impacts caused by disabling it",
"luminol.misc.username_checks.enforce_skull_validation.comment": "Enforce skull validation, preventing skulls with invalid names from disconnecting the client.",
"luminol.misc.username_checks.username_check_regex.comment": "Use username regex to validate usernames,\nallowing only characters specified in the regex.",
"luminol.misc.verify_publickey_only_in_online_mode.comment": "Only verify the public key in online mode, could be useful when using plugins like MultiLogin with custom auth server configured",
"luminol.optimizations.cpu_affinity.enabled_for_tickregion.comment": "Using this you could pin the threads of tick region scheduler(Following are the same) to cpu cores listed in the config 'tickregion_affinity' following,\nwhich is useful for those CPU with P and E cores (such as 12/13/14 gen Intel Core CPUs and so on.)",
"luminol.optimizations.cpu_affinity.tickregion_affinity.comment": "The core number you want the tick region threads to bind on",
"luminol.optimizations.lithium_sleeping_block_entity.enabled.comment": "Use sleeping blocking optimizations from lithium,s\non luminol the hopper optimizations of paper were totally removed and replaced by those of lithiums\nand it's turned on by default",
"luminol.optimizations.lobotomize_villager.check_interval.comment": "The interval in ticks to check if a villager is lobotomized",
"luminol.optimizations.lobotomize_villager.comment": "Lobotomizes the villager if it cannot move (Does not disable trading)",
"luminol.optimizations.lobotomize_villager.wait_until_trade_locked.comment": "Wait until a villager has been traded with before lobotomizing",
"luminol.optimizations.projectile.max-loads-per-projectile.comment": "Controls how many chunks a projectile can load in its lifetime before it gets automatically removed.",
"luminol.optimizations.projectile.max-loads-per-tick.comment": "Controls how many chunks are allowed to be sync loaded by projectiles in a tick.",
"luminol.optimizations.reduce_sensor_work.comment": "When it is enabled, it will delete the line of sight cache less often and use a faster nearby comparison.",
"luminol.optimizations.reduce_sensor_work.enabled.comment": "The interval of each entity to drop the cache(in ticks)",
"luminol.optimizations.throttle_goal_selector_tick_in_inactive_tick.comment": "Throttles the AI goal selector in entity inactive ticks.\nThis can improve performance by a few percent, but has minor gameplay implications.",
"luminol.optimizations.use_async_protocol_switching.enabled.comment": "Uses async protocol preparation for mc.\nWarn: Due to the packet sequence was changed by this optimization, it might be\nuncompatible with some plugins(ViaVersion etc.)",
"luminol.optimizations.variable_entity_waking_up.entity_wakeup_duration_ratio_standard_deviation.comment": "If this value is set to any value > 0, waking up inactive entities happens spread over time, instead of many entities at once. This makes entities feel and behave more natural.\nThis setting is the coefficient of variation, or σ / μ (the ratio of the standard deviation to the mean) of the inactivity duration.\n\nIn other words, this setting is the value σ, so that the regular inactivity duration will be multiplied by a factor normal_distribution(μ = 1, σ).\nIf a value 0 is given, variable entity wake-up is disabled.",
"luminol.unsupported.disable_check_for_folia_supported.disable_for_leaves.comment": "Disable check for folia-supported for leaves plugin.\nATTENTION: No support will be provided if you enabled this.",
"luminol.unsupported.disable_check_for_folia_supported.disable_for_paper.comment": "Disable check for folia-supported for spigot/bukkit/paper plugin.\nATTENTION: No support will be provided if you enabled this."
}
@@ -0,0 +1,198 @@
{
"lophine.experiment.command.function_command_enabled.comment": "允许使用 function 指令",
"lophine.experiment.command.save_all_command.enabled.comment": "允许使用 save-all 指令",
"lophine.experiment.command.save_all_command.log_all_process.comment": "将 save-all 指令的全部过程记录到控制台",
"lophine.experiment.command.save_all_command.save_all_command_timeout.comment": "区块报告保存超时前允许的最大保存秒数。",
"lophine.experiment.command.scoreboard_command_enabled.comment": "允许使用 scoreboard 指令",
"lophine.experiment.command.trigger_command_enabled.comment": "允许使用 trigger 指令",
"lophine.experiment.entity_damage_source_trace.enabled.comment": "允许跨不同区域调度器跟踪伤害来源。",
"lophine.experiment.global_entities_counter.version.comment": "DISABLED\nDEFAULT_SYNC:使用同步计数器模块启用原版全局实体计数器。\nDEFAULT_ASYNC:使用异步计数器模块启用原版全局实体计数器。\nPRECISE:使用增量计数启用精确生物容量计算。用事件驱动的实时更新替代周期性全量扫描。\n\n你需要在 paper-world-defaults.yml 或 paper-world.yml 中将 per-player-mob-spawns 设置为 false",
"lophine.fixes.update-suppression-crash-fix.enabled.comment": "防止由更新抑制导致的崩溃",
"lophine.fixes.vanilla-like-experience.enabled.comment": "通过绕过部分 Paper 安全和行为改动,恢复更接近原版的技术玩法体验。",
"lophine.function.container_expansion.barrel_rows.comment": "范围:1-6",
"lophine.function.container_expansion.enderchest_rows.comment": "范围:1-6",
"lophine.function.container_expansion.shulker_box.shulker_stackable_count.comment": "范围:1-64",
"lophine.function.fakeplayer.always-send-data.comment": "始终为假人发送数据",
"lophine.function.fakeplayer.cache-skin.comment": "为假人使用皮肤缓存",
"lophine.function.fakeplayer.enable-locator-bar.comment": "为假人启用定位栏",
"lophine.function.fakeplayer.enabled.comment": "启用假人功能(/bot 指令)",
"lophine.function.fakeplayer.limit.comment": "允许的假人最大数量",
"lophine.function.fakeplayer.manual-save-and-load.comment": "允许手动保存和加载假人",
"lophine.function.fakeplayer.modify-config.comment": "允许修改假人配置",
"lophine.function.fakeplayer.open-action-gui.comment": "允许打开假人动作 GUI,\n如果启用了物品栏打开 GUI,则需要潜行才能打开",
"lophine.function.fakeplayer.prefix.comment": "假人名称前缀",
"lophine.function.fakeplayer.regen-amount.comment": "假人的生命恢复量",
"lophine.function.fakeplayer.simulation-distance.comment": "假人的模拟距离(-1 表示默认)",
"lophine.function.fakeplayer.skip-sleep-check.comment": "跳过假人的睡眠检查",
"lophine.function.fakeplayer.spawn-phantom.comment": "允许假人生成幻翼",
"lophine.function.fakeplayer.suffix.comment": "假人名称后缀",
"lophine.function.fakeplayer.unable-fakeplayer-names.comment": "不能用于假人的名称列表",
"lophine.function.fakeplayer.use-action.comment": "允许假人执行动作",
"lophine.function.language.allow_auto_reset_comments.comment": "如果包中包含对应语言的配置文件注释文件,\n则使用相关内容自动重新加载配置文件注释。\n\n警告:这会删除原有注释!",
"lophine.function.language.full_blocking_load.comment": "加载本地化语言时,是否允许阻塞服务器加载。\n如果你只想在终端中显示本地化语言,\n需要启用此项。\n\n警告:这可能会降低启动速度!",
"lophine.function.language.lang.comment": "请使用 https://zh.minecraft.wiki/w/Language 中实际使用的的语言代码\n格式示例:en_us zh_cn zh_hk zh_tw\n注意:如果你想编辑 carpet 系统的语言,\n请在 carpet 配置文件中编辑。",
"lophine.function.protocol.alternative_block_placement.enabled.comment": "指定精确放置协议类型\nNONE 禁用精确放置协议\nCARPET 精确放置协议第 2 版\nCARPET_FIX 增强版精确放置协议第 2 版(需要客户端安装 MasaGadget\nLITEMATICA 精确放置协议第 3 版",
"lophine.function.protocol.appleskin.enabled.comment": "启用 AppleSkin 协议支持",
"lophine.function.protocol.appleskin.sync-tick-interval.comment": "设置 AppleSkin 同步频率(单位:游戏刻)",
"lophine.function.protocol.bbor.enabled.comment": "启用 BBOR 协议支持",
"lophine.function.protocol.jade.enabled.comment": "启用 Jade 协议支持",
"lophine.function.protocol.pca.enabled.comment": "启用 PCA 同步协议支持",
"lophine.function.protocol.pca.sync-player-entity.comment": "控制哪些玩家实体可以通过 PCA 同步协议被观察。\nNOBODY:从不同步玩家实体\nBOT:仅同步 Lophine 假人\nOPS:同步假人,并允许管理员同步真实玩家\nOPS_AND_SELF:同步假人、管理员以及玩家自己的实体\nEVERYONE:允许所有玩家实体",
"lophine.function.protocol.rei.enabled.comment": "启用 REI 协议支持",
"lophine.function.protocol.servux.litematics.litematics-print-max-delay-ticks.comment": "打印投影的最大延迟刻数,-1 表示禁用",
"lophine.function.protocol.syncmatica.enabled.comment": "启用共享原理图协议支持",
"lophine.function.protocol.syncmatica.quota-Limit.comment": "最大投影文件大小(字节)",
"lophine.function.protocol.syncmatica.useQuota.comment": "是否启用对投影文件大小的限制",
"lophine.function.protocol.xaero-map.enabled.comment": "启用 Xaero 世界地图协议支持",
"lophine.function.redstone.shears_rotate.comment": "允许使用剪刀右键旋转方块。",
"lophine.function.replay-api.cache-photographer-size.comment": "Replay api 摄像机档案缓存的最大大小",
"lophine.function.replay-api.cache-photographer-time.comment": "Replay api 摄像机档案缓存时间(秒)",
"lophine.misc.disable-check.disable-op-fly-check.comment": "禁用对管理员飞行检查的检测",
"lophine.misc.disable-check.disable-op-move-check.comment": "禁用对管理员移动检查的检测",
"lophine.misc.item-entity.follow-tick-sequence-merge.comment": "由于 Paper 修改了合并半径,\n当合并半径较大且包含大量物品堆卡在异常位置时,\n单个物品可能永远无法到达目标位置。\n此配置项用于修复该行为,但是请注意,启用此碰撞箱后的行为是非原版的。",
"lophine_carpet.carpet.fakeplayer.commandPlayer.comment": "启用 /player 指令。\n如果要启用 /bot 指令,请查看 lophine 全局配置。",
"lophine_carpet.carpet.fakeplayer.comment": "将 Carpet 假人兼容映射到 Lophine 假人。\ncommandPlayer 当前由 Lophine 的 /bot 指令接口提供支持。",
"lophine_carpet.carpet.fakeplayer.fakePlayerAutoFish.comment": "让手持钓鱼竿的假人自动抛竿并收竿。",
"lophine_carpet.carpet.fakeplayer.fakePlayerAutoReplaceTool.comment": "切换假人的自动工具替换。",
"lophine_carpet.carpet.fakeplayer.fakePlayerAutoReplenishment.comment": "切换假人的自动堆叠补货。",
"lophine_carpet.carpet.fakeplayer.fakePlayerAutoReplenishmentFormShulkerBox.comment": "允许假人补货从物品栏中的潜影盒取出匹配物品。",
"lophine_carpet.carpet.fakeplayer.fakePlayerDefaultSurvivalMode.comment": "强制新创建的假人以生存模式开始,而不是使用服务器默认游戏模式。",
"lophine_carpet.carpet.fakeplayer.fakePlayerInteractLikeClient.comment": "让假人的实体交互更接近客户端侧的回退行为。",
"lophine_carpet.carpet.fakeplayer.fakePlayerReloadAction.comment": "在保存和重载后保留排队的假人动作。",
"lophine_carpet.carpet.fakeplayer.fakePlayerResident.comment": "让假人在卸载和重启后保持常驻。",
"lophine_carpet.carpet.fakeplayer.fakePlayerTicksLikeRealPlayer.comment": "在网络阶段 tick 假人,以更接近真实玩家的时序。",
"lophine_carpet.carpet.fakeplayer.openFakePlayerInventory.comment": "允许打开假人物品栏。",
"lophine_carpet.carpet.general.amsUpdateSuppressionCrashFix.comment": "更新抑制崩溃保护。",
"lophine_carpet.carpet.general.antiSpamDisabled.comment": "禁用原版/Spigot 使用的服务端聊天和创造丢弃物品刷屏限制。",
"lophine_carpet.carpet.general.bambooModelNoOffset.comment": "移除竹子和竹笋模型的随机水平偏移。",
"lophine_carpet.carpet.general.betterCraftableBoneBlock.comment": "添加 AMS 替代骨块配方,可由 9 个骨头合成 3 个骨块。",
"lophine_carpet.carpet.general.betterCraftableDispenser.comment": "添加 AMS 使用投掷器的替代发射器配方。",
"lophine_carpet.carpet.general.blockPlacementIgnoreEntity.comment": "允许创造模式玩家在不检查实体碰撞的情况下放置方块。",
"lophine_carpet.carpet.general.carpetAlwaysSetDefault.comment": "Lophine 配置加载器的兼容标志;它已在预加载期间将默认值写入兼容配置。",
"lophine_carpet.carpet.general.clientSettingsLostOnRespawnFix.comment": "玩家重生后重新应用其最后已知的客户端设置。",
"lophine_carpet.carpet.general.commandTick.comment": "启用 tick 指令支持。",
"lophine_carpet.carpet.general.comment": "由现有 Lophine 功能提供支持的 Carpet/AMS/TIS/Org 兼容规则。\n这里只暴露已经有可用服务端实现的规则。",
"lophine_carpet.carpet.general.creativeNoClip.comment": "是否启用创造飞行无碰撞。\n启用后,创造模式玩家飞行时不会与方块碰撞。\n这允许他们无阻碍地穿过方块。",
"lophine_carpet.carpet.general.creativeNoItemCooldown.comment": "跳过创造模式玩家的物品冷却应用。",
"lophine_carpet.carpet.general.creativeOneHitKill.comment": "允许创造模式玩家立即击杀可攻击的非创造、非旁观实体。\n潜行会将效果扩展为小范围攻击。",
"lophine_carpet.carpet.general.creativeOpenContainerForcibly.comment": "允许创造模式玩家强制打开被阻挡的箱子、末影箱和潜影盒。",
"lophine_carpet.carpet.general.ctrlQCraftingFix.comment": "Ctrl+Q 合成修复的兼容标志;该修复已存在于当前菜单代码中。",
"lophine_carpet.carpet.general.defaultLoggers.comment": "Carpet 的玩家默认日志订阅。\n示例:[\"tps\", \"mob_caps\", \"counter white\"]",
"lophine_carpet.carpet.general.disableBlazeFire.comment": "禁用烈焰人火球生成火。",
"lophine_carpet.carpet.general.disableGhastFire.comment": "禁用恶魂火球生成火。",
"lophine_carpet.carpet.general.dustTrapdoorReintroduced.comment": "是否重新引入 1.20 前的机制:\n红石粉不会连接到打开的活板门上的相邻红石粉\n1.20.2 前机制:红石粉、红石中继器、\n红石比较器在收到来自下方的状态更新时不会检查附着。",
"lophine_carpet.carpet.general.entityInstantDeathRemoval.comment": "移除死亡生物实体被丢弃前正常的 20gt 延迟。",
"lophine_carpet.carpet.general.explosionNoBlockDamage.comment": "让爆炸伤害实体但不破坏方块。",
"lophine_carpet.carpet.general.farmlandTrampledDisabled.comment": "防止实体落在耕地上时将其踩成泥土。",
"lophine_carpet.carpet.general.fastRedstoneDust.comment": "通过 Alternate Current 快速更新后端处理红石粉更新。",
"lophine_carpet.carpet.general.hopperNoItemCost.comment": "当羊毛方块放在漏斗顶部时,将转移的物品堆恢复到漏斗中。",
"lophine_carpet.carpet.general.instantBlockUpdaterReintroduced.comment": "瞬时方块更新器。",
"lophine_carpet.carpet.general.interactionUpdates.comment": "控制玩家交互导致的方块变化是否发出正常方块更新。\n设置为 false 可在方块使用和破坏期间抑制邻近和形状更新。",
"lophine_carpet.carpet.general.lagFreeSpawning.comment": "为自然生成检查使用轻量碰撞和预处理生物生成路径。",
"lophine_carpet.carpet.general.language.comment": "Carpet 语言值。\n注意:此配置目前不会在 Lophine 全局配置中更新!",
"lophine_carpet.carpet.general.microTiming.comment": "内置区域性能分析器和 Folia/Moonrise 携带的时序检测的兼容标志。",
"lophine_carpet.carpet.general.noCreeperBlockBreaking.comment": "禁用苦力怕爆炸破坏方块。",
"lophine_carpet.carpet.general.noGhastBlockBreaking.comment": "禁用恶魂火球爆炸破坏方块。",
"lophine_carpet.carpet.general.observerNoDetection.comment": "完全禁用侦测器检测脉冲。",
"lophine_carpet.carpet.general.optimizedDragonRespawn.comment": "启用优化的末影龙重生。",
"lophine_carpet.carpet.general.optimizedFastEntityMovement.comment": "始终启用的 Moonrise/Paper 快速实体移动碰撞管线的兼容标志。",
"lophine_carpet.carpet.general.optimizedHardHitBoxEntityCollision.comment": "始终启用的 Moonrise/Paper 硬碰撞箱实体碰撞优化的兼容标志。",
"lophine_carpet.carpet.general.optimizedTNTHighPriority.comment": "当前运行时已优化的服务器爆炸路径的兼容标志。",
"lophine_carpet.carpet.general.placementRotationFix.comment": "使用玩家主身体旋转进行放置方向检查,而不是插值后的头部偏航角。",
"lophine_carpet.carpet.general.powerfulExpMending.comment": "让拾取的经验修复玩家物品栏中所有带有经验修补的受损物品,而不只是已装备物品。",
"lophine_carpet.carpet.general.preventEndSpikeRespawn.comment": "在末影龙重生期间跳过黑曜石柱再生成。",
"lophine_carpet.carpet.general.sensibleEnderman.comment": "限制末影人只能拾取南瓜和西瓜。",
"lophine_carpet.carpet.general.shulkerBoxCCEReintroduced.comment": "为更新抑制使用 ClassCastException。",
"lophine_carpet.carpet.general.shulkerGolem.comment": "允许在潜影盒上方放置雕刻南瓜来召唤潜影贝。",
"lophine_carpet.carpet.general.simpleInGameCalculator.comment": "将以 `=` 开头的聊天消息作为简单计算器表达式求值,并私下回复。",
"lophine_carpet.carpet.general.syncServerMsptMetricsData.comment": "通过 TISCM 协议通道广播实时 MSPT 数据。",
"lophine_carpet.carpet.general.tickCommandPermission.comment": "覆盖 `/tick` 指令权限等级。\n接受 0..4 范围内的值,其中 2 匹配旧 Carpet 行为,3 保持原版。",
"lophine_carpet.carpet.general.tickFreezeCommandToggleable.comment": "当服务器已冻结时执行 `/tick freeze`,使其切换回运行状态。",
"lophine_carpet.carpet.general.tiscmNetworkProtocol.comment": "在 `tiscm:network/v1` 上启用原生 Carpet TIS Addition 网络通道。",
"lophine_carpet.carpet.general.tntDoNotUpdate.comment": "防止 TNT 首次放置时检查红石能量。",
"lophine_carpet.carpet.general.tntDupingFix.comment": "切换原版 TNT 复制装置使用的活塞不同步路径。",
"lophine_carpet.carpet.general.tntFuseDuration.comment": "覆盖默认已点燃 TNT 引信时长(游戏刻)。\n接受 0..32767 范围内的值。",
"lophine_carpet.carpet.general.tntIgnoreRedstoneSignal.comment": "决定 TNT 是否应自动点燃时忽略红石能量。",
"lophine_carpet.carpet.general.tntPrimerMomentumRemoved.comment": "移除新点燃 TNT 的随机水平发射动量。",
"lophine_carpet.carpet.general.totallyNoBlockUpdate.comment": "全局抑制方块变化的邻近和形状更新。",
"lophine_carpet.carpet.general.viewDistance.comment": "使用 Carpet 兼容值覆盖专用服务器启动视距。",
"lophine_carpet.carpet.general.xpNoCooldown.comment": "允许玩家在同一 tick 内吸收多个经验球且无拾取延迟。",
"lophine_carpet.carpet.general.yeetOutOfOrderChatKick.comment": "忽略乱序的安全聊天链检查,而不是使聊天会话失效。",
"lophine_carpet.carpet.general.yeetUpdateSuppressionCrash.comment": "移除更新抑制崩溃。",
"lophine_carpet.carpet.hopper_counter.comment": "漏斗计数器功能。",
"lophine_carpet.carpet.hopper_counter.hopperCounters.comment": "启用现有的羊毛漏斗计数器实现。",
"lophine_carpet.carpet.hopper_counter.hopperCountersUnlimitedSpeed.comment": "移除计数器的漏斗传输速度限制。\n仅在启用 hopperCounters 时生效。",
"luminol.experiment.command.enable_command_block.comment": "强制启用命令方块。\n注意:由于一些线程问题,可能导致服务器崩溃!!!\n除非你知道自己在做什么,否则不要启用!!!",
"luminol.experiment.command.enable_waypoints_and_waypoint_command.comment": "启用路径点和 waypoint 指令。\n警告:仍在测试中",
"luminol.experiment.disable_async_catchers.enabled.comment": "禁用异步捕获器,以防止某些声称支持 Folia 但逻辑有问题的插件导致崩溃。\n注意:如果错误调用 getChunkAt,可能导致区域死锁!\n参见:https://github.com/PaperMC/Folia/issues/280,该问题已在 Folia 中解决(https://github.com/PaperMC/Folia/commit/2e7bc0721af95196c85500c7bb136aeea0bc12ce\n除非你知道自己在做什么,否则不要启用!!!",
"luminol.experiment.disable_entity_exception_catchers.enabled.comment": "如果启用此配置,实体 tick 出错时服务器会直接崩溃,而不是移除实体以保持服务器运行。\n它可以防止实体消失,但可能导致更多服务器崩溃。\n除非你知道自己在做什么,否则不要启用!!!",
"luminol.fixes.allow_unsafe_teleportation.enabled.comment": "启用后允许非玩家实体进入末地传送门。\n如果你想使用刷沙,请开启此项。\n警告:这可能导致一些不安全问题,可在此了解更多:https://github.com/PaperMC/Folia/issues/297",
"luminol.fixes.collision_behavior.mode.comment": "决定使用哪种碰撞逻辑(Moonrise 和 Paper 为优化修改了此项,但同时也可能破坏一些原版行为)。\n可用于修复某些大型红石机器的不正确行为\n可用值:\nVANILLA\nBLOCK_SHAPE_VANILLA\nPAPER",
"luminol.fixes.fix_high_velocity_issue.enabled.comment": "Folia 上某个问题的简单修复\n(有时实体会具有很大的动量,跨越不同 tick 区域,\n并导致服务器崩溃)\n但有时可能不起作用",
"luminol.fixes.force_cleanup_drop_non_owned_entity_memory_module.comment": "此配置是针对每个生物记忆中不正确归属数据的临时修复,更多信息见 https://github.com/PaperMC/Folia/issues/203",
"luminol.fixes.force_cleanup_drop_non_owned_entity_memory_module.enabled_for_block_pos.comment": "启用后,实体的大脑会清理类型为 block_pos 且不属于当前 tickregion 的记忆",
"luminol.fixes.force_cleanup_drop_non_owned_entity_memory_module.enabled_for_entity.comment": "启用后,实体的大脑会清理类型为 entity 且不属于当前 tickregion 的记忆",
"luminol.fixes.force_cleanup_drop_non_owned_entity_memory_module.enabled_for_position_tracker.comment": "启用后,实体的大脑会清理类型为 position_tracker 且不属于当前 tickregion 的记忆",
"luminol.fixes.item_multitask.enabled.comment": "防止服务器在方块交互或快捷栏槽位变化期间\n打断物品状态。",
"luminol.fixes.long_command_support.enabled.comment": "某些长指令可以通过 dialog 指令生成的gui运行,\n但 Paper 已禁止这样做。\n启用此项以修复该问题。",
"luminol.fixes.pathfinding_fixes.break_down_pathfinding_when_out_of_region.comment": "当寻路触碰到当前 tick 区域外的方块时,重新计算路径或停止寻路",
"luminol.fixes.pathfinding_fixes.do_not_pathfind_to_not_owned_targets.comment": "当目标位于当前 tick 区域外时跳过对该目标的寻路",
"luminol.fixes.poi_range_fixes.do_not_compete_poi_if_unloaded.comment": "如果 POI 未加载,则不要竞争该 POI\n相关:https://github.com/PaperMC/Folia/issues/292",
"luminol.fixes.prevent_incorrect_teleport_async_calls_during_move_event.enabled.comment": "启用后,服务器会拒绝移动事件期间某些不正确的 teleportAsync 调用。\n这会减少由插件(Residence 等)导致的崩溃。\n但你应注意,它可能破坏与某些插件的兼容性。",
"luminol.fixes.use_vanilla_random_source.enable_for_player_entity.comment": "与 RNG 破解相关",
"luminol.function.membar.display.comment": "可用显示方式:\nBOSS_BAR\nACTION_BAR\nTAB_LIST",
"luminol.function.portal_rate_limit.enable.comment": "实体进入传送门时是否限制传送门速率",
"luminol.function.portal_rate_limit.maximum_portal_teleports_per_tick.comment": "决定单个 tick 区域内每 tick 可处理多少次传送门传送;超过时,\n传送门传送会被推迟到下一 tick\n\n注意:设置为 -1 可使用自定义表达式",
"luminol.function.portal_rate_limit.maximum_portal_teleports_per_tick_expression.comment": "如果固定限制不够用,你可以定义自己的表达式来动态限制传送门速率。\n\n可用变量(均为当前 tickregion):\neticking_entity_count\ncticking_chunk_count\npplayer_count\n示例:50 * (1 + sqrt(x/1000) + c/200 + p/5)",
"luminol.function.region_format.blinear_io_flush_delay_ms.comment": "决定在没有写入操作持续 n(默认 3000)毫秒后何时刷新到区域文件(仅适用于 B_LINEAR",
"luminol.function.region_format.blinear_io_thread_count.comment": "决定 buffered linear 的工作线程数(仅适用于 B_LINEAR",
"luminol.function.region_format.format.comment": "可用选项:\nMCA\nLINEAR_V2\nB_LINEAR",
"luminol.function.region_format.linear_compression_level.comment": "决定区域文件的压缩等级(仅适用于 LINEAR_V2 和 B_LINEAR",
"luminol.function.region_format.linear_io_flush_delay_ms.comment": "决定在标记为保存持续 n(默认 100)毫秒后何时刷新到区域文件(仅适用于 LINEAR_V2",
"luminol.function.region_format.linear_io_thread_count.comment": "决定 linear 的工作线程数(仅适用于 LINEAR_V2",
"luminol.function.region_format.linear_use_virtual_thread.comment": "决定 linear 格式是否可以使用虚拟线程(仅适用于 LINEAR_V2",
"luminol.function.regionbar.display.comment": "可用显示方式:\nBOSS_BAR\nACTION_BAR\nTAB_LIST",
"luminol.function.secure_seed.enabled.comment": "启用安全种子后,所有矿石和结构都将使用 1024 位种子生成,\n而不是原版的 64 位种子,从而使传统种子破解变得不可能。\n注意:如果使用 V1,它会容易受到地形高度攻击。\n***** 警告:如果旧世界也在使用安全种子,你需要保持其启用!否则会损坏你的存档 *****",
"luminol.function.secure_seed.salt.comment": "为 V2 加密操作自动生成的 256 位盐。\n首次启动时生成一次 - 不要分享或修改它(修改会导致区块错误)!\n与 Blake3 keyed hash 配合使用,使种子不可逆。",
"luminol.function.secure_seed.version.comment": "版本 1:Blake2b(不安全,在有足够熵的情况下,可通过 GPU/ASIC 集群在数分钟内逆向)\n版本 2:带盐密钥派生的 Blake3(推荐,不可逆)\n***** 警告:切换版本会导致区块错误! *****",
"luminol.function.tpsbar.display.comment": "可用显示方式:\nBOSS_BAR\nACTION_BAR\nTAB_LIST",
"luminol.function.tpsbar.precision_of_mspt_value.comment": "示例(如果 mspt 为 20.00000000)(值 -> 结果):2 -> 20.001 -> 20.0",
"luminol.function.tpsbar.precision_of_tps_value.comment": "示例(如果 tps 为 20.00000000)(值 -> 结果):2 -> 20.001 -> 20.0",
"luminol.function.tripwire_dupe.behavior_mode.comment": "可用值:\nVANILLA20\nVANILLA21\nMIXED",
"luminol.misc.auto_update.allow_prerelease.comment": "选择更新时是否允许 GitHub 预发布版本。",
"luminol.misc.auto_update.check_times.comment": "每日检查时间列表,格式为 HH:mm,基于服务器本地时区。",
"luminol.misc.auto_update.comment": "按计划检查 GitHub Releases 中是否有更新版本的 jar。\n下载内容会暂存到 auto_update/lophine,并写入 auto_update/core.path\nClip 可在下次重启时使用它。\n如果设置了 target_jar_path,服务器还会尝试直接替换该启动器 jar。",
"luminol.misc.auto_update.enabled.comment": "服务器是否应自动检查更新。",
"luminol.misc.auto_update.target_jar_path.comment": "成功下载后可选的要替换的启动器 jar 路径。\n留空则将下载的 jar 保持暂存在 auto_update/lophine\n并让 Clip 在重启时通过 auto_update/core.path 切换到它。",
"luminol.misc.disable_warning.disable_heightmap_warning.comment": "禁用 heightmap 检查的警告",
"luminol.misc.disable_warning.disable_moved_wrongly_threshold_warning.comment": "禁用错误移动警告和检查",
"luminol.misc.disable_warning.disable_offline_mode_warning.comment": "禁用服务器启动时日志中弹出的离线模式警告",
"luminol.misc.folia_watchdog.tick_region_time_out_ms.comment": "决定 watchdog 打印卡住的 tickregion 线程转储的间隔",
"luminol.misc.force_disable_packet_limiter_of_paper.comment": "强制并完全禁用 Paper 的所有数据包限制器;它用于防止使用快速合成类模组时被踢出,但会对安全性产生负面影响",
"luminol.misc.save_portal_tickets.do_save.comment": "服务器停止时是否保存传送门 ticket;这会让它表现得像 1.21.5 之前的 MC,\n并且服务器再次启动时不会自动激活传送门区块加载器。",
"luminol.misc.sentry.dsn.comment": "用于改进错误日志记录的 Sentry DSN,留空表示禁用,\n可从 https://sentry.io/ 获取",
"luminol.misc.sentry.log_level.comment": "级别高于或等于此级别的日志会被记录。",
"luminol.misc.sentry.only_log_thrown.comment": "启用后仅记录带有 Throwable 的日志。",
"luminol.misc.server_mod_name.name.comment": "决定 F3 调试界面中显示的服务器模组名称。",
"luminol.misc.server_mod_name.vanilla_spoof.comment": "忽略任何插件的修改以及此配置块中设置的服务器模组名称,\n仅强制发送原版品牌名称",
"luminol.misc.username_checks.allow_old_player_join.comment": "用户名正则表达式变更后允许旧玩家加入服务器,\n即使他们的名称不符合新要求。",
"luminol.misc.username_checks.enabled.comment": "决定是否启用用户名检查,\n如果你的玩家使用中文用户名,可以禁用它,\n但也要注意禁用它带来的安全影响",
"luminol.misc.username_checks.enforce_skull_validation.comment": "强制头颅验证,防止带有无效名称的头颅导致客户端断开连接。",
"luminol.misc.username_checks.username_check_regex.comment": "使用用户名正则表达式验证用户名,\n只允许正则中指定的字符。",
"luminol.misc.verify_publickey_only_in_online_mode.comment": "仅在在线模式下验证公钥;在使用 MultiLogin 等带自定义认证服务器配置的插件时可能有用",
"luminol.optimizations.cpu_affinity.enabled_for_tickregion.comment": "使用此项可以将 tick region scheduler 的线程(以下相同)固定到后续配置 tickregion_affinity 中列出的 CPU 核心,\n这对带有 P 核和 E 核的 CPU(如第 12/13/14 代 Intel Core CPU 等)很有用。",
"luminol.optimizations.cpu_affinity.tickregion_affinity.comment": "你希望 tick region 线程绑定到的核心编号",
"luminol.optimizations.lithium_sleeping_block_entity.enabled.comment": "使用来自锂的休眠方块实体优化;\n在 luminol 上,paper 的漏斗优化已被完全移除并替换为锂的优化,\n且默认开启",
"luminol.optimizations.lobotomize_villager.check_interval.comment": "检查村民是否被简化 AI 的间隔(游戏刻)",
"luminol.optimizations.lobotomize_villager.comment": "如果村民无法移动,则简化其 AI(不会禁用交易)",
"luminol.optimizations.lobotomize_villager.wait_until_trade_locked.comment": "等到村民被交易过后再简化 AI",
"luminol.optimizations.projectile.max-loads-per-projectile.comment": "控制一个弹射物在生命周期内最多能加载多少区块,超过后会被自动移除。",
"luminol.optimizations.projectile.max-loads-per-tick.comment": "控制每 tick 允许由弹射物同步加载多少区块。",
"luminol.optimizations.reduce_sensor_work.comment": "启用后,会降低视线缓存清理频率,并使用更快的附近实体比较。",
"luminol.optimizations.reduce_sensor_work.enabled.comment": "每个实体丢弃缓存的间隔(游戏刻)",
"luminol.optimizations.throttle_goal_selector_tick_in_inactive_tick.comment": "在实体非活动 tick 中限制 AI goal selector 的 tick。\n这可以提升几个百分点的性能,但会带来轻微玩法影响。",
"luminol.optimizations.use_async_protocol_switching.enabled.comment": "为 MC 使用异步协议准备。\n警告:由于此优化改变了数据包顺序,可能与某些插件(ViaVersion 等)不兼容。",
"luminol.optimizations.variable_entity_waking_up.entity_wakeup_duration_ratio_standard_deviation.comment": "如果此值设置为任何 > 0 的值,非活动实体的唤醒会分散在一段时间内,而不是大量实体同时唤醒。这会让实体感觉和行为更自然。\n此设置是不活动时长的变异系数,即 σ / μ(标准差与平均值的比值)。\n\n换句话说,此设置就是值 σ,使常规不活动时长乘以因子 normal_distribution(μ = 1, σ)。\n如果给定值 ≤ 0,则禁用可变实体唤醒。",
"luminol.unsupported.disable_check_for_folia_supported.disable_for_leaves.comment": "禁用对 leaves 插件 folia-supported 的检查。\n注意:启用后将不提供支持。",
"luminol.unsupported.disable_check_for_folia_supported.disable_for_paper.comment": "禁用对 spigot/bukkit/paper 插件 folia-supported 的检查。\n注意:启用后将不提供支持。"
}