配置
我们总共有 2 个额外的配置文件:
- luminol_config/luminol_global_config.toml(Luminol 的配置文件)
- luminol_config/kaiiju_entity_limits.yml(Kaiiju 实体限制器的配置文件,见 Kaiiju 实体限制)
Luminol 全局配置
此文件是 Luminol 的主要配置文件。
我们将配置分为几个类别,类似于一些 hack 客户端,以下是类别:
- EXPERIMENT(需要进一步测试的新功能)
- FIXES(bug 修复和原版特性恢复)
- FUNCTION(附加功能和已移除的原版特性)
- MISC(杂项设置)
- OPTIMIZATIONS(优化)
- UNSUPPORTED(不受支持的功能)
注意:UNSUPPORTED 和 EXPERIMENT 类别中的任何配置都是不稳定的,可能会导致崩溃。
配置文件应该采用 TOML 格式,以下是带有键注释的配置:
toml
[unsupported.disable_check_for_folia_supported]
#禁用对 leaves 插件的 folia-supported 检查。
#注意:如果您启用此选项,将不会提供支持。
disable_for_leaves = false
#禁用对 spigot/bukkit/paper 插件的 folia-supported 检查。
#注意:如果您启用此选项,将不会提供支持。
disable_for_paper = false
[experiment.disable_entity_exception_catchers]
#如果启用此配置,当实体 ticking 出现错误时,服务器将直接崩溃,而不是移除实体以保持服务器运行。
#这可以防止实体消失,但可能会导致更多的服务器崩溃。
#除非您知道自己在做什么,否则不要启用!!!
enabled = false
[experiment.disable_async_catchers]
#禁用异步捕获器以防止一些由支持 folia 但逻辑有问题的插件引起的崩溃。
#注意:当不正确调用 getChunkAt 时会导致区域死锁!
#请参阅:https://github.com/PaperMC/Folia/issues/280,该问题已在 folia 中解决(https://github.com/PaperMC/Folia/commit/2e7bc0721af95196c85500c7bb136aeea0bc12ce)
#除非您知道自己在做什么,否则不要启用!!!
#
enabled = false
[experiment.command]
enable_data_command = false
#强制启用命令方块。
#注意:由于一些线程问题,这会导致服务器崩溃!!!
#除非您知道自己在做什么,否则不要启用!!!
#
enable_command_block = false
#启用 waypoint 和 waypoint 命令。
#警告:仍在测试中
#
enable_waypoints_and_waypoint_command = false
[fixes.poi_range_fixes]
#如果 POI 未加载,则不竞争 POI
#与 https://github.com/PaperMC/Folia/issues/292 相关
#
do_not_compete_poi_if_unloaded = false
[fixes.allow_unsafe_teleportation]
#如果启用,允许非玩家实体进入末地传送门。
#如果您想使用沙子复制,请打开此选项。
#警告:这会导致一些不安全的问题,您可以在以下链接了解更多:https://github.com/PaperMC/Folia/issues/297
enabled = false
#此配置是对每个生物内存中不正确的所属数据的临时修复,更多信息请参见 https://github.com/PaperMC/Folia/issues/203
[fixes.force_cleanup_drop_non_owned_entity_memory_module]
#启用后,实体的大脑将清理不属于当前 tickregion 的实体类型的内存
enabled_for_entity = false
#启用后,实体的大脑将清理不属于当前 tickregion 的 position_tracker 类型的内存
enabled_for_position_tracker = false
#启用后,实体的大脑将清理不属于当前 tickregion 的 block_pos 类型的内存
enabled_for_block_pos = false
[fixes.collision_behavior]
#决定使用哪种碰撞逻辑(Moonrise 和 Paper 修改了此逻辑以进行优化,但同时也会破坏一些原版行为)。
#对于修复一些大型红石机器的非原版行为很有用
#可用值:
#VANILLA
#BLOCK_SHAPE_VANILLA
#PAPER
mode = "BLOCK_SHAPE_VANILLA"
[fixes.prevent_incorrect_teleport_async_calls_during_move_event]
throw_when_caught = true
#启用后,服务器将拒绝在移动事件期间进行一些不正确的 teleportAsync 调用。
#这将减少由插件(Residence 等)引起的崩溃。
#但您应该注意,这可能会破坏与某些插件的兼容性。
enabled = false
[fixes.pathfinding_fixes]
#当实体接触到当前 tick 区域外的方块时,重新计算路径或停止寻路
break_down_pathfinding_when_out_of_region = false
#当寻路目标不在当前 tick 区域内时,跳过寻路目标
do_not_pathfind_to_not_owned_targets = false
[fixes.fix_high_velocity_issue]
#folia 上一个问题的简单修复
#(有时实体会有一个大的动量,穿过不同的 tick 区域,这会导致服务器崩溃)
#但有时可能不起作用
enabled = false
warn_on_detected = false
[fixes.use_vanilla_random_source]
#与 RNG 破解相关
enable_for_player_entity = false
[function.regionbar]
format = "<gray>Util<yellow>:</yellow> <util> Chunks<yellow>:</yellow> <green><chunks></green> Players<yellow>:</yellow> <green><players></green> Entities<yellow>:</yellow> <green><entities></green>"
enabled = false
util_color_list = ["GREEN", "YELLOW", "RED", "PURPLE"]
#可用显示:BOSS_BAR, ACTION_BAR, TAB_LIST
display = "BOSS_BAR"
update_interval_ticks = 15
[function.portal_rate_limit]
#如果固定限制不够使用,您可以定义自己的表达式来动态限制
#传送门速率。
#
#可用变量(均为当前 tickregion 的):e (ticking_entity_count)
# c (ticking_chunk_count)
# p (player_count)
#示例:50 * (1 + sqrt(x/1000) + c/200 + p/5)
#
maximum_portal_teleports_per_tick_expression = "50 * (1 + sqrt(e/1000) + c/200 + p/5)"
#是否在实体进入传送门时限制传送门速率
enable = false
#决定在单个 tick 区域内的一个 tick 中应该处理多少传送门传送,当超过时,
#传送门传送将被推到下一个 tick
#
#注意:设置为 -1 以使用自定义表达式
maximum_portal_teleports_per_tick = 200
[function.tripwire_dupe]
enabled = false
#可用值:
#VANILLA20
#VANILLA21
#MIXED
behavior_mode = "VANILLA21"
[function.item_multitask]
#防止服务器在方块交互或物品栏槽位更改期间中断物品的状态。
enabled = false
[function.membar]
format = "<gray>Memory usage <yellow>:</yellow> <used>MB<yellow>/</yellow><available>MB"
memory_color_list = ["GREEN", "YELLOW", "RED", "PURPLE"]
enabled = false
#可用显示:BOSS_BAR, ACTION_BAR, TAB_LIST
display = "BOSS_BAR"
update_interval_ticks = 15
[function.region_format]
#决定区域文件的压缩级别(仅适用于 LINEAR_V2 和 B_LINEAR)
linear_compression_level = 1
#决定当标记为保存 n(默认值为 100)毫秒时,它将何时刷新到区域文件(仅适用于 LINEAR_V2)
linear_io_flush_delay_ms = 100
#决定当没有写入操作 n(默认值为 3000)毫秒时,它将何时刷新到区域文件(仅适用于 B_LINEAR)
blinear_io_flush_delay_ms = 3000
#决定 linear 的工作线程数(仅适用于 LINEAR_V2)
linear_io_thread_count = 6
#决定缓冲 linear 的工作线程数(仅适用于 B_LINEAR)
blinear_io_thread_count = 6
#可用选择:MCA, B_LINEAR, LINEAR_V2
format = "MCA"
#决定是否可以为 linear 格式使用虚拟线程(仅适用于 LINEAR_V2)
linear_use_virtual_thread = true
[function.tpsbar]
ping_color_list = ["GREEN", "YELLOW", "RED", "PURPLE"]
#示例(如果 mspt 为 20.00000000)(值 -> 结果):2 -> 20.00, 1 -> 20.0
precision_of_mspt_value = 2
#示例(如果 tps 为 20.00000000)(值 -> 结果):2 -> 20.00, 1 -> 20.0
precision_of_tps_value = 2
chunkhot_color_list = ["GREEN", "YELLOW", "RED", "PURPLE"]
#可用显示:BOSS_BAR, ACTION_BAR, TAB_LIST
display = "BOSS_BAR"
format = "<gray>TPS<yellow>:</yellow> <tps> MSPT<yellow>:</yellow> <mspt> Ping<yellow>:</yellow> <ping>ms ChunkHot<yellow>:</yellow> <chunkhot>"
tps_color_list = ["GREEN", "YELLOW", "RED", "PURPLE"]
enabled = false
update_interval_ticks = 15
[function.secure_seed]
#版本 1:Blake2b(不安全,使用 GPU/ASIC 集群在几分钟内可逆向,具有足够的熵)
#版本 2:带有盐密钥派生的 Blake3(推荐,不可逆向)
#***** 警告:切换已有secure seed存档的secure seed版本会导致区块错误!*****
version = 1
# 一旦您启用安全种子,所有矿石和结构都将使用 1024 位种子生成
# 而不是使用原版中的 64 位种子,使传统的种子破解变得不可能。
#注意:如果您使用 V1,它将容易受到地形高程攻击。
# ***** 警告:如果您的旧世界也使用安全种子,则需要保持启用它!否则会破坏您的存档 *****
enabled = false
#V2 加密操作的自动生成的 256 位盐。
#在首次启动时生成一次 - 不要共享或修改此值(修改此值会导致区块错误)!
#与 Blake3 键控哈希一起使用,使种子不可逆向。
salt = "xESwPP3SUzHglZoAJLLrdLeRzXhJFgPvpwNCxiiJVHI="
[optimizations.cpu_affinity]
#使用此选项,您可以将 tick region 调度器的线程固定到以下 config 'tickregion_affinity' 中列出的 CPU 核心,
#这对于具有 P 和 E 核心的 CPU(如 12/13/14 代 Intel Core CPU 等)很有用。
enabled = false
#您希望 tick region 线程绑定的核心编号
tickregion_affinity = ["0", "1", "2", "3"]
#在实体非活动 tick 中限制 AI 目标选择器。
#这可以提高几个百分点的性能,但会对游戏玩法产生轻微影响。
[optimizations.throttle_goal_selector_tick_in_inactive_tick]
enabled = false
[optimizations.use_simd]
enabled = true
#如果村民无法移动,则对其进行 lobotomize(不会禁用交易)
[optimizations.lobotomize_villager]
#检查村民是否被 lobotomize 的时间间隔(以 tick 为单位)
check_interval = 100
#等待直到村民被交易后再进行 lobotomize
wait_until_trade_locked = false
enabled = false
[optimizations.use_async_protocol_switching]
#为 mc 使用异步协议准备。
#警告:由于此优化更改了数据包发包顺序,它可能与
#一些插件(ViaVersion 等)不兼容
enabled = false
[optimizations.lithium_sleeping_block_entity]
#使用来自 lithium 的睡眠实体方块优化,
#在 luminol 上,paper 的漏斗优化已完全移除,替换为 lithium 的优化
#并且默认开启
enabled = true
[optimizations.end_dragon]
optimized_dragon_respawn = false
[optimizations.variable_entity_waking_up]
#如果此值设置为任何大于 0 的值,唤醒非活动实体的过程将随时间分散,而不是一次唤醒许多实体。这使实体感觉和行为更自然。
#此设置是变异系数,或 σ / μ(标准差与平均值的比率)的非活动持续时间。
#
#换句话说,此设置是值 σ,因此常规非活动持续时间将乘以因子 normal_distribution(μ = 1, σ)。
#如果给定的值 ≤ 0,则禁用可变实体唤醒。
entity_wakeup_duration_ratio_standard_deviation = 0.2
[optimizations.projectile]
#控制投射物在被自动移除之前可以加载的区块数量。
max-loads-per-projectile = 0
#控制一个 tick 中投射物允许同步加载的区块数量。
max-loads-per-tick = 0
#当启用时,它会减少视线缓存的删除频率,并使用更快的附近比较。
[optimizations.reduce_sensor_work]
#每个实体丢弃缓存的间隔(以 tick 为单位)
delay_ticks = 10
enabled = true
[misc.disable_warning]
#禁用高度图检查的警告
disable_heightmap_warning = false
#禁用服务器启动时在日志中弹出的离线警告
disable_offline_mode_warning = false
[misc.server_mod_name]
#决定在 F3 调试屏幕中显示的服务器模组名称。
name = "Luminol"
#忽略任何插件的修改和在此配置块中设置的服务器模组名称,仅强制发送原版品牌名称
vanilla_spoof = false
[misc.disable_moved_wrongly_threshold]
#禁用错误移动警告和检查
enabled = false
#定期检查 GitHub Releases 以获取更新的 Luminol jar。
#下载的文件会暂存到 auto_update/luminol 下,并写入 auto_update/core.path,
#Hyacinthusclip 可以在下次重启时使用。
#如果设置了 target_jar_path,Luminol 也会尝试直接替换该启动器 jar。
[misc.auto_update]
#成功下载后要替换的可选启动器 jar 路径。
#留空以将下载的 jar 暂存到 auto_update/luminol 中
#并让 Hyacinthusclip 在重启时通过 auto_update/core.path 切换到它。
target_jar_path = ""
#选择更新时是否允许预发布的 GitHub 版本。
allow_prerelease = false
#基于服务器本地时区的每日检查时间列表,格式为 HH:mm。
check_times = ["06:00"]
#Luminol 是否应该自动检查更新。
enabled = false
[misc.username_checks]
#决定是否启用用户名检查,
#如果您的玩家使用中文用户名,您可以禁用它,但同时, 禁用它可能导致的任何安全影响
enabled = true
[misc.folia_watchdog]
#决定 watchdog 打印卡住的 tickregions 线程转储的间隔
tick_region_time_out_ms = 5000
[misc.save_portal_tickets]
#是否在服务器停止时保存传送门 ticket,这将使其行为类似于 1.21.5 之前的 mc,并且在服务器再次启动时不会自动激活传送门区块加载器。
do_save = true
[misc.mojang_out_of_order_chat_check]
enabled = true
#强制完全禁用 Paper 的所有数据包限制器,这用于防止使用一些快速合成模组时被踢出,但
#对安全性有负面影响
[misc.force_disable_packet_limiter_of_paper]
force_disable = false
#仅在在线模式下验证公钥,这在使用 MultiLogin 等配置了自定义认证服务器的插件时很有用
[misc.verify_publickey_only_in_online_mode]
enabled = false
[misc.sentry]
#级别高于或等于此级别的日志将被记录。
log_level = "WARN"
#启用后,只有带有 Throwable 的日志才会被记录。
only_log_thrown = true
#用于改进错误日志记录的 Sentry DSN,留空以禁用,
#从 https://sentry.io/ 获取
dsn = ""Kaiiju 实体限制
此文件是 Kaiiju 实体限制器的配置文件。
配置文件应该采用 YAML 格式,以下是带有键注释的配置:
yaml
# Kaiiju 的每个区域实体限制。
# 如果一个区域中特定实体类型的数量超过限制,实体 tick 将被限制。
# 示例:对于凋零限制 100 和一个区域中有 300 个凋零 -> 100 个凋零每个 tick 都会 tick,每个凋零每 3 个 tick 会 tick 一次。
# 每个实体名称都在 mojmap 的命名空间下,您可以通过服务器 jar 中的实体包浏览它们
# 是否启用实体限制器。
# 可以通过 reload 命令重新加载
enabled: false
Axolotl:
# 一个tick区域中美西螈数量的 tick 限制,如果数量超过此限制,超出部分的实体 tick 将推迟到下一个 tick
limit: 1000
# 一个tick区域中美西螈数量的限制,如果数量超过此限制,超出部分的实体将被移除
removal: 2000