Compare commits

...

3 Commits

Author SHA1 Message Date
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
12 changed files with 54 additions and 36 deletions
+7 -1
View File
@@ -29,6 +29,12 @@
- 🔬 **生电功能增强** - 在 Folia 上实现更多生电内容(完整生电请使用 Fabric)
- 🛠️ **更多实用功能** - 持续添加有用的服务器功能
### 额外启动参数
- morninggloryclip.useMojangSource 强制服务端使用mojang源下载文件
- morninggloryclip.enable.mixin 启用服务器插件的mixin支持
## 📥 下载
### 稳定版本
@@ -79,7 +85,7 @@ dependencies {
<dependencies>
<dependency>
<groupId>fun.bm.lophine</groupId>
<artifactId>luminol-api</artifactId>
<artifactId>lophine-api</artifactId>
<version>$VERSION</version>
</dependency>
</dependencies>
+6 -1
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
@@ -79,7 +84,7 @@ dependencies {
<dependencies>
<dependency>
<groupId>fun.bm.lophine</groupId>
<artifactId>luminol-api</artifactId>
<artifactId>lophine-api</artifactId>
<version>$VERSION</version>
<scope>provided</scope>
</dependency>
+1 -1
View File
@@ -2,7 +2,7 @@ group=fun.bm.lophine
mcVersion=26.2
apiVersion=26.2
channel=STABLE
clipVersion=3.0.18
clipVersion=1.0.0
weightVersion=2.0.15
# true for release, false for skip release, pre for pre-release
release=pre
+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,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 {
@@ -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() {
@@ -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
@@ -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()) {
@@ -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,10 +1,10 @@
{
"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.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.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": "防止由更新抑制导致的崩溃",
@@ -15,7 +15,7 @@
"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.enabled.comment": "启用假人功能(/bot 令)",
"lophine.function.fakeplayer.limit.comment": "允许的假人最大数量",
"lophine.function.fakeplayer.manual-save-and-load.comment": "允许手动保存和加载假人",
"lophine.function.fakeplayer.modify-config.comment": "允许修改假人配置",
@@ -30,7 +30,7 @@
"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://minecraft.wiki/w/Language 中的键\n格式示例:en_us zh_cn zh_hk zh_tw\n注意:如果你想编辑 carpet 系统的语言,\n请在 carpet 配置文件中编辑。",
"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 同步频率(单位:游戏刻)",
@@ -50,8 +50,8 @@
"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.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": "切换假人的自动堆叠补货。",
@@ -70,7 +70,7 @@
"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.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": "跳过创造模式玩家的物品冷却应用。",
@@ -78,8 +78,8 @@
"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.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": "让爆炸伤害实体但不破坏方块。",
@@ -106,7 +106,7 @@
"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.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 首次放置时检查红石能量。",
@@ -123,7 +123,7 @@
"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": "启用路径点和路径点命令。\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",
@@ -134,7 +134,7 @@
"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": "某些长令可以通过对话框命令运行,\n但 Paper 已禁止这样做。\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",