RavelloH's Blog

LOADing...



Minecraft Paper Server指南

minecraft-paper-server

minecraft服务器 47982 ---

minecraftpaperserver


前言

作为一个曾管理过两个百人级别服务器的服务器管理员,这里我分享一下我平时管理 paper 核心服务器的经验。 注意:本文主要偏向于对 Paper 核心服务器的管理而并非基础的“怎么开一个服务器”。

Paper 服务器是什么?

Paper is a Minecraft game server based on Spigot, designed to greatly improve performance and offer more advanced features and API.

Paper 是一个基于 Spigot 的 Minecraft 游戏服务器,旨在大幅提高性能并提供更多高级功能和 API。

简单来说,Paper 服务器相对于原版服务器来说性能更好,并能够以插件的方式拓展其功能。

但是也仅限于原版——这意味着你无法在 Paper 服务器中使用 Mod 等。不过好处是,玩家可以通过原版客户端直接连接至服务器。

本文是一个 Paper 服务器完全指南,旨在通过一文来阐释清楚 Paper 服务器的创建、维护、更新、个性化等各方面的内容。

创建 Paper 服务器

在创建服务器之前,你需要考虑以下内容:

  • 我会在什么设备上运行 Paper 服务器?
  • 我想运行哪个版本的 MC?
  • 我的服务器大致是以什么玩法为主的?

实际上,想要创建一个 MC 服务器并不容易。在最低的标准下,你至少需要有用来运行 MC 服务器的设备,这个设备最好是全天在线的,以便玩家任何时候都能加入进来。鉴于本文主要是关于 Paper 服务器架设相关的,这里不会多赘述“如何找到这样的设备”的内容,简单来说你可以直接使用家用电脑(可能不太稳定)或者自己购买云服务器等。找到了这样的设备,你应该考虑一下要运行什么样的系统。就 MC 而言,一般是 Linux 和 Windows\Windows Server 两种选择。就稳定性和系统占用情况而言,Linux 是更好的选择。

至于运行什么版本的 MC,实际上我认为在一定程度上新一些比较好,毕竟这并不是 Mod 服务器,不需要考虑 Mod 的兼容性问题。越新的 Paper 包含的性能升级就越大,Minecraft 本体的玩法更多,但是相应的 MC 服务器的性能需求也越大。不过,你也需要根据你所安装的插件所支持的最新版本来决定你需要安装哪个版本的 Paper,通常来讲,我推荐落后一个大版本,即如果最新是 1.21.x,使用 1.20.x 既可以体验到相对新的内容,也给插件开发者留出了较多的时间来为其更新适配。当然,如果你对版本有需求的话(例如就是想体验最新版本的内容或者想重温经典),你也可以按照自己的想法来。

说到玩法,通常来说因为没有 Mod,Paper 服务器更适合基于原版内容的玩法。我以我的经验举一些例子,如:

  1. 生存类(原版生存/空岛/钻石大陆等)
  2. 建筑类(可使用插件如 WorldEditVoxelSniper 提供快速建造工具)
  3. PVP 和竞技类
  4. 模拟经营类(因为可以用 Vault 这样的经济插件)
  5. RPG 和冒险
  6. 红石/生电
  7. 小游戏类

当然,这些仅仅只是我个人曾见过或想过的玩法,可能并不全面,而且 MC 本身的玩法就有无限种可能,上面的举例仅供你没什么思路时参考用。

安装 JAVA

想要下载 Paper 服务器,你需要先确定好服务器版本并安装好 Java 环境。根据 Paper 官方的建议,Paper 版本与 Java 版本的对应关系如下:

Paper 版本 建议的 Java 版本
1.8 to 1.11 Java 8
1.12 to 1.16.4 Java 11
1.16.5 Java 16
1.17.1 to 1.20+ Java 17
1.21+ Java 21
  • 在 Linux 上安装 在 Linux 上可以使用 SDKMAN 安装。如下:
# 你需要先安装zip包,如果是debian系:

apt update
apt install zip

# 先安装SDKMAN

curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"

# 之后选择相应的版本安装

sdk install java 8.0.372-tem    # Java 8
sdk install java 11.0.20-tem   # Java 11
sdk install java 16.0.2-open   # Java 16
sdk install java 21.0.1-tem    # Java 21

# 之后设置Java的默认版本

sdk default java 21.0.1-tem   # 以 Java 21 为例

之后输入 java -version,如果正常显示了版本信息说明安装成功了。如果没成功,你可能需要手动修改位于/etc/environment 的环境变量,添加以下内容:

JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 # 替换成你的路径
PATH=$JAVA_HOME/bin:$PATH

之后输入 source /etc/environment应用修改,并再次使用 java -version查看效果。

  • 在 Windows/Windows Server 上安装

在 Windows 上安装可以直接通过 Adoptium 下载

  1. 访问 Adoptium 官方下载页面

  2. 下载对应的 Java 版本(选择 OpenJDK):

    • Java 8: 选择 OpenJDK 8
    • Java 11: 选择 OpenJDK 11
    • Java 16: 选择 OpenJDK 16
    • Java 21: 选择 OpenJDK 21
  3. 安装时,选择 "Add to PATH"。

  • 设置环境变量

或者你可以使用 Chocolatey:

  1. 安装 Chocolatey(如果未安装): 在管理员模式的 PowerShell 中运行:
Set-ExecutionPolicy Bypass -Scope Process -Force; `[System.Net.ServicePointManager]::SecurityProtocol =`[System.Net.ServicePointManager]::SecurityProtocol -bor 3072;`
 iex (New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')
  • 安装特定版本的 Java:

    choco install openjdk8`  # Java 8
    choco install openjdk11  # Java 11
    choco install openjdk16  # Java 16
    choco install openjdk21  # Java 21

无论是 Linux 还是 Windows,安装完成后都可以使用 java -version 检查是否安装成功,如果不行的话需要配置 JAVA_HOME 变量。

配置 JAVA 环境变量

在 Windows 系统上设置 JAVA_HOME 变量需要以下步骤:

  1. 检查 Java 安装路径 确保你已经安装了 Java,并找到 Java 的安装路径(如:C:\Program Files\Java\jdk-xxxx 是版本号)。
  2. 打开环境变量设置
  • 右键点击 “此电脑”(或“我的电脑”),选择 “属性”
  • 点击左侧的 “高级系统设置”
  • 在弹出的窗口中,点击 “环境变量”
  1. 设置 JAVA_HOME 变量
  • 系统变量 部分,点击 “新建”
  • 变量名 填写:JAVA_HOME
  • 变量值 填写 Java 的安装路径,例如:C:\Program Files\Java\jdk-xx
  1. 更新 Path 变量
  • 系统变量 部分,找到 Path,点击 “编辑”
  • 点击 “新建”,添加以下内容:

%JAVA_HOME%\bin

  • 点击 “确定” 保存。
  1. 验证配置
  • 打开命令提示符(Win + R,输入 cmd 回车)。
  • 输入以下命令:
  • echo %JAVA_HOME%

如果显示的是你设置的 Java 安装路径,则 JAVA_HOME 设置成功。

  • 验证 Java 是否可用:

    java -version

    如果显示 Java 版本信息,则说明配置成功。

下载Paper

可以在https://papermc.io/downloads/paper中下载到最新版本的 paper 服务端,对应最新版本的 Minecraft,但是如果你想下载对应旧版本 MC 的 Paper 服务器端的话,可以在https://papermc.io/downloads/all中查看。

paer-downloadpaer-download

其中,左边一栏可选择 MC 的版本,右边可以下载对应版本最新的 Paper 端。下载后,你应该可以得到一个 jar 包,此时可以将其移动至单独的文件夹中。

随后,你可以在文件资源管理器的地址栏中输入 CMD 来打开当前目录的终端。

start-paperstart-paper

在终端中,你可以输入以下内容来初始化启动你的 Paper 端:

java -jar <你下载的paper包的名称>

如果一切顺利,看起来应该是这样的:

first-starftfirst-starft

此时的文件夹应该是这样的:

init-folderinit-folder

这就说明 Java 环境正确,且 Paper 可以正常启动了,可以进行下一步的配置了。

配置PAPER

Paper 服务器的配置文件有很多,说起来还是比较复杂的。基本上包括以下几个文件:

logs # 日志文件夹
config # 配置文件夹
└─paper-global.yml  # Paper全局配置文件
└─paper-world-defaults.yml # Paper每个世界的默认配置文件
plugins # 插件文件夹
└─.paper-remapped # 放remapped jar包的文件夹
└─spark # Spark插件相关的文件夹
<world> # 每个世界的文件夹
└─paper-world.yml # Paper每个世界的配置文件
banned-ips.json # IP黑名单
banned-players.json # 玩家黑名单
bukkit.yml # Bukkit配置文件
commands.yml # 命令配置文件
eula.txt # Mojang EULA协议
help.yml # 帮助配置文件
ops.json # OP列表
permissions.yml # 权限配置文件
server.properties # 服务器配置文件
spigot.yml # Spigot配置文件
usercache.json # 用户缓存
whitelist.json # 白名单

eula.txt

首先,你需要同意 Mojang 的 EULA 协议(原文在https://aka.ms/MinecraftEULA),这里你可以在根目录下打开eula.txt文件,将eula=false改为eula=true

server.properties

之后,你需要配置server.properties文件,这个文件是你的服务器的配置文件,你可以在其中设置服务器的一些基本信息,如服务器名称、服务器端口、服务器最大玩家数等。这里用列表的方式来说一下这个文件的可配置项:(重要的部分已加粗)

设置项 含义 默认值 推荐值
accepts-transfers 是否接受其他服务器传来的文件,在集群服务器中使用 false false
allow-flight 检测到生存玩家飞行(在爬脚手架等场景会误报)时不踢出玩家 false 根据需要设置
allow-nether 是否允许玩家进入下界 true true
broadcast-console-to-ops 是否向 OP 玩家广播控制台消息 true true
broadcast-rcon-to-ops 是否向 OP 玩家广播 RCON 消息 true true
debug 是否启用调试模式 false false
bug-report-link 默认不在文件中,用于设置菜单中汇报服务器bug的URL 你可以做个在线问卷什么的
difficulty 游戏难度(peaceful/easy/normal/hard) easy 根据玩家需求
enable-command-block 是否启用命令方块 false true(需命令方块功能时)
enable-jmx-monitoring 是否启用 JMX 监控(用于性能监控) false false(普通服务器无需)
enable-query 是否启用GameSpy4游戏查询(可显示服务器状态) false false(若不需要状态监控)
enable-rcon 是否启用 RCON 远程控制 false true(需要远程管理时)
enable-status 在服务器列表中显示服务器状态(在线情况、人数等) true true
enforce-secure-profile 是否强制使用Mojang 签名公钥安全的玩家档案 true true
enforce-whitelist 是否强制启用白名单 false 根据需要设置
entity-broadcast-range-percentage 实体广播范围百分比(影响性能和视距) 100 100
force-gamemode 是否强制玩家在进入世界时切换到默认的游戏模式 false false(根据需求)
function-permission-level 函数执行权限等级(1 到 4) 2 根据需要设置
gamemode 默认游戏模式(survival/creative/adventure/spectator) survival 根据需要设置
generate-structures 是否生成村庄、神庙等结构 true true
generator-settings 自定义世界生成设置(仅影响单群系和超平坦) {} {}(需自定义时调整)
hardcore 是否启用极限模式(死亡玩家变旁观) false false
hide-online-players 是否隐藏在线玩家信息 false false
initial-disabled-packs 初始禁用的资源包,用逗号分割 根据需求设置
initial-enabled-packs 初始启用的资源包,用逗号分隔 vanilla vanilla
level-name 世界名称(存档文件夹名称) world 自定义
level-seed 世界种子值(留空为随机生成) 根据需求设置
level-type 世界类型(normal/flat/amplified/customized/large_biomes) minecraft:normal 根据需求设置
log-ips 是否记录玩家 IP 地址 true true
max-chained-neighbor-updates 最大邻近方块更新链数量 1000000 默认即可
max-players 最大玩家数量 20 根据服务器性能设置
max-tick-time 单个 tick 的最大执行时间(毫秒),超过后服务器自动关闭 60000 默认即可
max-world-size 最大世界大小(以块为单位) 29999984 默认即可
motd 服务器的欢迎信息 A Minecraft Server 根据需求自定义
network-compression-threshold 网络压缩阈值(字节数) 256 根据网络状况调整
online-mode 是否启用正版验证 true true(推荐正版服务器开启)
op-permission-level OP 玩家的默认权限等级(1 到 4) 4 根据需求设置
player-idle-timeout 玩家闲置踢出时间(分钟,0 表示禁用) 0 根据需求设置
prevent-proxy-connections 是否防止代理连接 false true
pvp 是否启用玩家对战 true 根据需求设置
query.port 查询协议的端口号 25565 默认即可
rate-limit 每秒接受的最大数据包数量(0 表示无限制) 0 默认即可
rcon.password RCON 远程控制的密码 根据需求设置
rcon.port RCON 远程控制的端口号 25575 默认即可
region-file-compression 区块文件的压缩方式 deflate 默认即可
require-resource-pack 是否强制玩家使用服务器资源包 false false(可选)
resource-pack 服务器资源包的 URL 根据需求设置
resource-pack-id 资源包的 ID(用于校验) 根据需求设置
resource-pack-prompt 向玩家显示的资源包提示 根据需求设置
resource-pack-sha1 资源包的 SHA1 哈希值 根据需求设置
server-ip 服务器绑定的 IP 地址 单网卡一般不需要设置
server-port 服务器端口号 25565 默认即可
simulation-distance 模拟距离(影响加载区块范围) 10 根据服务器性能设置
spawn-animals 是否生成动物 true true
spawn-monsters 是否生成怪物 true true
spawn-npcs 是否生成 NPC true true
spawn-protection 重生点保护范围(以块为单位) 16 根据需求设置
sync-chunk-writes 是否同步写入区块数据 true true
text-filtering-config 聊天过滤器的配置文件 根据需求设置
use-native-transport 是否使用本地传输优化 true true
view-distance 视距(客户端加载的区块范围) 10 根据服务器性能设置
white-list 是否启用白名单 false 根据需求设置

paper-global.yml

设置完eula.txtserver.properties后,就可以开始设置paper自己的配置文件了。不过在此之前,你需要再运行一下服务器,来生成其余的配置文件。 你可以参照上面的(#下载Paper)(https://ravelloh.top/posts/minecraft-paper-server#下载Paper),来再次启动你的服务器,启动后之后直接关闭即可。 若一切正常,你的文件夹应该会变成这样的:

paper-fullpaper-full
下面来看位于config文件夹下的paper-global.yml文件,这个文件是Paper的全局配置文件,你可以在其中设置一些全局的配置,如TPS显示、实体限制等。这里在每个项后面加了注释,强烈建议到博客上查看https://ravelloh.top/posts/minecraft-paper-server

_version: 29 # paper版本号,不要改
block-updates:
  disable-chorus-plant-updates: false # 是否禁用紫颂植物更新
  disable-mushroom-block-updates: false # 是否禁用蘑菇方块更新
  disable-noteblock-updates: false # 是否禁用音符盒更新
  disable-tripwire-updates: false # 是否禁用绊线更新
chunk-loading-advanced:
  auto-config-send-distance: true # 是否自动配置发送距离
  player-max-concurrent-chunk-generates: 0 # 玩家最大并发区块生成数(0为自动分配, -1为不限制)
  player-max-concurrent-chunk-loads: 0 # 玩家最大并发区块加载数(0为自动分配, -1为不限制)
chunk-loading-basic:
  player-max-chunk-generate-rate: -1.0 # 单个玩家最大区块生成速率(-1为不限制)
  player-max-chunk-load-rate: 100.0 # 玩家最大区块加载速率(-1为不限制)
  player-max-chunk-send-rate: 75.0 # 玩家最大区块发送速率(-1为不限制)
chunk-system:
  gen-parallelism: default # 开启并行区块生成(default为true)
  io-threads: -1 # 区块读写线程数(-1为单线程)
  worker-threads: -1 # 工作线程数(-1为根据CPU核心数自动分配)
collisions:
  enable-player-collisions: true # 是否启用玩家碰撞
  send-full-pos-for-hard-colliding-entities: true # 是否发送完整位置信息以解决碰撞问题
commands:
  fix-target-selector-tag-completion: true # 修复目标选择器标签补全
  suggest-player-names-when-null-tab-completions: true # 当Tab补全为空时建议玩家名
  time-command-affects-all-worlds: false # 时间命令是否影响所有世界(主世界,下界,地狱)
console:
  enable-brigadier-completions: true # 启用Mojang的Brigadier命令补全
  enable-brigadier-highlighting: true # 启用Mojang的Brigadier命令高亮
  has-all-permissions: false # 控制台是否拥有所有权限(与服务器控制台相同)
item-validation:
  book:
    author: 8192 # 书的作者名字最大长度(字符)
    page: 16384 # 书的单本最大长度(字符)
    title: 8192 # 书的标题最大长度(字符)
  book-size:
    page-max: 2560 # 书的单页最大长度(字符)
    total-multiplier: 0.98 # 我也不知道这是干什么的
  display-name: 8192 # 物品显示名字最大长度(字符)
  lore-line: 8192 # 物品描述最大长度(字符)
  resolve-selectors-in-books: false # 解析书中的选择器
logging:
  deobfuscate-stacktraces: true # 是否将Spigot堆栈跟踪映射到Mojang映射,以便更好地报告错误
messages:
  kick:
    authentication-servers-down: <lang:multiplayer.disconnect.authservers_down> # 服务器宕机时显示给玩家的文字
    connection-throttle: Connection throttled! Please wait before reconnecting. # 连接限制时显示给玩家的文字`
    flying-player: <lang:multiplayer.disconnect.flying> # 飞行时显示给玩家的警告
    flying-vehicle: <lang:multiplayer.disconnect.flying> # 发现玩家乘坐飞行器(2b2t飞船?)时显示给玩家的警告
  no-permission: <red>I'm sorry, but you do not have permission to perform this command.
    Please contact the server administrators if you believe that this is in error. # 没有权限时显示给玩家的文字
  use-display-name-in-quit-message: false # 玩家退出后之前的消息是否使用玩家的显示名
misc:
  chat-threads: 
    chat-executor-core-size: -1 # 聊天线程池的最小线程数
    chat-executor-max-size: -1 # 聊天线程池的最大线程数(-1为不限制)
  compression-level: default # 网络数据压缩级别, 默认是6
  fix-entity-position-desync: true # 修复实体位置不同步
  load-permissions-yml-before-plugins: true # 在加载插件之前加载权限文件
  max-joins-per-tick: 5 # 每tick最大连接数
  region-file-cache-size: 256 # 区块文件缓存大小
  strict-advancement-dimension-check: false # 禁用尝试将使用与主世界、下界或末地相同生成的世界翻译为通用维度
  use-alternative-luck-formula: false # 使用替代的幸运公式(https://gist.github.com/aikar/40281f6c73ec9b6fef7588e6461e1ba9)
  use-dimension-type-for-custom-spawners: false # 使用维度类型来确定自定义刷怪笼的维度,似乎没什么用
packet-limiter: # 数据包限制
  all-packets: # 所有数据包的限制
    action: KICK # 超过包速率时的处理方式, KICK为踢出玩家, DROP为丢弃包
    interval: 7.0 # 包速率检测间隔
    max-packet-rate: 500.0 # 每个玩家在间隔内允许的包数量
  kick-message: <red><lang:disconnect.exceeded_packet_rate> #玩家因发送过多数据包而被踢出的消息
  overrides: # 特定数据包的限制
    ServerboundPlaceRecipePacket: # 服务器发送的合成表数据包
      action: DROP # 超过包速率时的处理方式, KICK为踢出玩家, DROP为丢弃包
      interval: 4.0 # 包速率检测间隔
      max-packet-rate: 5.0 # 每个玩家在间隔内允许的包数量
player-auto-save:
  max-per-tick: -1 # 每tick最大保存玩家数(-1为自动分配)
  rate: -1 # 保存玩家的速率(-1 将沿用 bukkit.yml 中的 ticks-per.autosave(后文会说到))
proxies:
  bungee-cord:
    online-mode: true # 指示服务器在位于 BungeeCord 代理时如何处理玩家 UUID 和数据
  proxy-protocol: false # 服务器是否应该处理PROXY协议消息(https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt)
  velocity:
    enabled: false # 是否启用Velocity代理支持
    online-mode: true # 指示服务器在位于Velocity代理时如何处理玩家 UUID 和数据
    secret: '' # 用于验证Velocity代理的密钥
scoreboards:
  save-empty-scoreboard-teams: true # 是否保留空记分板队伍,false以自动清理
  track-plugin-scoreboards: false # 服务器是否应该仅使用虚拟目标跟踪插件计分板
spam-limiter:
  incoming-packet-threshold: 300 # 每秒允许的最大数据包数量,超过后将被视为垃圾
  recipe-spam-increment: 1 # 每次发送合成表数据包时增加的计数
  recipe-spam-limit: 20 # 合成表数据包计数超过此值时将被视为垃圾
  tab-spam-increment: 1 # 每次按TAB时增加的数据包计数
  tab-spam-limit: 500 # 按TAB数据包计数超过此值时将被视为垃圾
timings:
  enabled: true # 是否启用Timings v2分析器,用于分析服务器性能
  hidden-config-entries: # 隐藏的配置项
  - database
  - proxies.velocity.secret
  history-interval: 300 # 每次记录的时间间隔(秒)
  history-length: 3600 # 记录的最大时间长度(秒)
  server-name: Unknown Server # 记录中的服务器名称
  server-name-privacy: false # 是否隐藏服务器名称
  url: https://timings.aikar.co/ # Timings v2服务器地址
  verbose: true # 是否启用详细模式
unsupported-settings: # 可能不再支持的设置
  allow-headless-pistons: false # 是否允许无头活塞
  allow-permanent-block-break-exploits: false # 是否允许永久破坏方块的漏洞
  allow-piston-duplication: false # 是否允许活塞复制
  allow-tripwire-disarming-exploits: false # 是否允许绊线陷阱的漏洞
  allow-unsafe-end-portal-teleportation: false # 是否允许不安全的末地传送
  compression-format: ZLIB # 网络数据压缩格式
  perform-username-validation: true # 是否验证用户名,允许有特殊字符的用户名加入
  skip-vanilla-damage-tick-when-shield-blocked: false # 是否跳过盾牌阻挡时的伤害
watchdog:
  early-warning-delay: 10000 # 服务器挂起后,watchdog线程开始打印线程转储前的毫秒数
  early-warning-every: 5000 # 服务器挂起时打印线程转储之间的毫秒间隔

上面的项没有对性能特别有影响的,所以你可以根据自己的需求来设置。

paper-world-defaults.yml

接下来是paper-world-defaults.yml文件,这个文件是Paper每个世界的默认配置文件,你可以在其中设置一些世界的默认配置,如实体限制、方块限制等。这里在每个项后面加了注释,强烈建议到博客上查看https://ravelloh.top/posts/minecraft-paper-server

_version: 31 # paper版本号,不要改
anticheat: # 反作弊
  anti-xray: # 反矿透相关
    enabled: false # 是否启用反矿透
    engine-mode: 1 # 反矿透引擎模式,1:将指定方块(hidden-blocks)显示为其他方块(replacement-blocks),2:将指定方块(replacement-blocks)显示为指定的方块(hidden-blocks),3:将每个方块显示为replacement-blocks中的方块
    hidden-blocks: # 模式1中隐藏的方块
    - copper_ore
    - deepslate_copper_ore
    - raw_copper_block
    - gold_ore
    - deepslate_gold_ore
    - iron_ore
    - deepslate_iron_ore
    - raw_iron_block
    - coal_ore
    - deepslate_coal_ore
    - lapis_ore
    - deepslate_lapis_ore
    - mossy_cobblestone
    - obsidian
    - chest
    - diamond_ore
    - deepslate_diamond_ore
    - redstone_ore
    - deepslate_redstone_ore
    - clay
    - emerald_ore
    - deepslate_emerald_ore
    - ender_chest
    lava-obscures: false # 混淆接触熔岩的方块
    max-block-height: 64 # 反矿透生效的最大高度,低于这个高度就进行反矿透
    replacement-blocks: # 模式2中、3替换为的方块
    - stone
    - oak_planks
    - deepslate
    update-radius: 2 # 显示真实方块的更新半径
    use-permission: false  # 是否允许拥有 paper.antixray.bypass 权限的玩家绕过反矿透
  obfuscation:
    items:
      hide-durability: false # 控制是否将一个玩家的耐久度信息发送给其他玩家的客户端,这可能会破坏在观察其他玩家时依赖耐久度值的资源包
      hide-itemmeta: false # 控制是否应将可能给作弊客户端带来优势的不必要物品信息(例如附魔、潜影盒/捆绑包中的物品等)发送到其他玩家的客户端。这可能会破坏依赖于观察其他玩家时附魔、物品描述或物品名称等信息的资源包
      hide-itemmeta-with-visual-effects: false # 控制是否将影响物品显示方式的信息(例如磁石罗盘位置)发送给其他玩家的客户端。此信息可能被作弊客户端利用,为作弊玩家提供额外优势。将影响某些物品在其他玩家手中时的显示效果
chunks:
  auto-save-interval: default # 配置世界保存间隔(以 ticks 为单位),默认为 bukkit.yml 中的 ticks-per.autosave
  delay-chunk-unloads-by: 10s #延迟卸载块指定时间。格式为单单位持续时间,例如 10h 或 25m。支持 d、h、m 和 s
  entity-per-chunk-save-limit:
    arrow: -1 # 限制每个区块将保存/加载的经验球数量,-1时禁用限制
    ender_pearl: -1 # 限制每个区块将保存/加载的末影珍珠数量,-1时禁用限制
    experience_orb: -1 # 限制每个区块将保存/加载的经验球数量,-1时禁用限制
    fireball: -1 # 限制每个区块将保存/加载的火球数量,-1时禁用限制
    small_fireball: -1 # 限制每个区块将保存/加载的小火球数量,-1时禁用限制
    snowball: -1 # 限制每个区块将保存/加载的雪球数量,-1时禁用限制
  fixed-chunk-inhabited-time: -1 # 区块的生存时间,-1时禁用固定值(自动)
  flush-regions-on-save: false  # 保存时是否刷新区域
  max-auto-save-chunks-per-tick: 24 # 每tick最大保存区块数
  prevent-moving-into-unloaded-chunks: false # 是否阻止实体移动到未加载的区块
collisions:
  allow-player-cramming-damage: false # 允许玩家在碰撞的实体数量超过 maxEntityCramming 游戏规则设置时受到挤压伤害
  allow-vehicle-collisions: true # 玩家碰撞启用后,也允许矿车和船等的碰撞
  fix-climbing-bypassing-cramming-rule: false # 修复玩家/实体通过攀爬绕过 maxEntityCramming 游戏规则设置的问题
  max-entity-collisions: 8 # 计算实体碰撞的最大堆叠量,超过这个值将不再计算碰撞量
  only-players-collide: false # 仅当玩家参与碰撞时才计算碰撞
command-blocks:
  force-follow-perm-level: true # 强制命令方块遵循权限等级设定
  permissions-level: 2 # 命令方块的默认权限等级
entities:
  armor-stands:
    do-collision-entity-lookups: true # 是否允许盔甲架实体参与碰撞检查
    tick: true # 禁用以防止盔甲架进行计时。在有许多盔甲架的情况下可以提高性能
  behavior:
    allow-spider-world-border-climbing: true # 是否允许蜘蛛在世界边界墙上爬行
    baby-zombie-movement-modifier: 0.5 # 小僵尸的移动速度修正,公式是speed=defaultSpeed*(1+baby-zombie-movement-modifier)
    disable-chest-cat-detection: false # 即使箱子上坐着猫也能让你打开箱子
    disable-creeper-lingering-effect: false # 禁用爬行者随机留下持续区域效果云
    disable-player-crits: false # 禁用玩家pvp时的暴击
    door-breaking-difficulty: # 设定生物在什么难度下可以破坏门
      husk: # 尸壳
      - HARD
      vindicator: # 掠夺者
      - NORMAL
      - HARD
      zombie: # 僵尸
      - HARD
      zombie_villager: # 僵尸村民
      - HARD 
      zombified_piglin: # 僵尸猪灵
      - HARD
    ender-dragons-death-always-places-dragon-egg: false # 末影龙每次死亡时是否总是生成一个末影龙蛋
    experience-merge-max-value: -1 # 单个经验球中存储经验的最大值,-1时禁用最大值,即可以把经验球合并成1个
    mobs-can-always-pick-up-loot: # 生物是否总是可以捡起掉落物,false时根据游戏难度决定
      skeletons: false # 骷髅
      zombies: false # 僵尸
    nerf-pigmen-from-nether-portals: false # 是否移除通过下界传送门生成的猪人中的 AI
    parrots-are-unaffected-by-player-movement: false # 玩家移动时是否影响站在肩上的鹦鹉
    phantoms-do-not-spawn-on-creative-players: true # 禁用在创造模式下对玩家生成幻影
    phantoms-only-attack-insomniacs: true # 只有没在床上的玩家才会被幻影攻击
    phantoms-spawn-attempt-max-seconds: 119 # 幻影生成尝试的最大秒数
    phantoms-spawn-attempt-min-seconds: 60 # 幻影生成尝试的最小秒数
    piglins-guard-chests: true # 猪灵是否会守护箱子
    pillager-patrols:
      disable: false # 是否禁用掠夺者巡逻队
      spawn-chance: 0.2  # 掠夺者巡逻队生成几率
      spawn-delay:
        per-player: false # 是否每个玩家都有自己的生成延迟
        ticks: 12000 # 生成延迟的tick数
      start:
        day: 5 # 两次生成之间的最小天数
        per-player: false # 是否每个玩家都有自己的生成天数
    player-insomnia-start-ticks: 72000 # 玩家开始失眠的tick数
    should-remove-dragon: false # 是否在不存在末地通向主世界的传送门的情况下移除末影龙
    spawner-nerfed-mobs-should-jump: false # 刷怪笼生成的生物是否可以在水中浮出水面
    zombie-villager-infection-chance: default # 僵尸村民感染几率(0.0-100.0),default为根据游戏难度决定
    zombies-target-turtle-eggs: true # 僵尸是否会破坏海龟蛋,将此设置为 false 可能会提高性能,因为它们不会寻找附近的海龟蛋
  entities-target-with-follow-range: false # 这个我也不太清楚,翻译过来是“实体目标跟随范围”,可能是沿用实体的追踪范围
  markers:
    tick: true # 禁用以防止标记实体进行计时。在有许多标记实体的情况下可以提高性能
  mob-effects:
    immune-to-wither-effect: # 免疫凋零效果的生物
      wither: true # 凋零
      wither-skeleton: true # 凋零骷髅
    spiders-immune-to-poison-effect: true # 蜘蛛是否免疫中毒效果
  sniffer: # 嗅探兽相关设置
    boosted-hatch-time: default # 孵化时间加速?
    hatch-time: default # 孵化时间?
  spawning: # 生成相关
    all-chunks-are-slime-chunks: false # 是否让所有区块都是史莱姆区块
    alt-item-despawn-rate: 
      enabled: false # 是否启用替代物品消失速率
      items:
        cobblestone: 300 # 例子:物品名:自定义消失时间(单位是秒)
    count-all-mobs-for-spawning: false # 决定刷怪笼生成的怪物和其他杂项怪物是否计入全局怪物限制
    creative-arrow-despawn-rate: default # 创造模式下的箭消失速率,默认为-1(不消失),单位为tick
    despawn-ranges: # 距离玩家多远的实体会消失
      ambient: # 环境生物(如蝙蝠)
        hard: 128 # 强制消失距离
        soft: 32 # 大于此距离的实体会随机消失
      axolotls: # 美西螈
        hard: 128
        soft: 32
      creature: # 生物
        hard: 128
        soft: 32
      misc: # 杂项
        hard: 128
        soft: 32
      monster: # 怪物
        hard: 128
        soft: 32
      underground_water_creature: # 地下洞穴水域中的水生生物
        hard: 128
        soft: 32
      water_ambient: # 水中的环境生物
        hard: 64
        soft: 32
      water_creature: # 水生生物
        hard: 128
        soft: 32
    disable-mob-spawner-spawn-egg-transformation: false # 是否要禁止玩家使用刷怪蛋修改刷怪笼刷出生物的种类
    duplicate-uuid:
      mode: SAFE_REGEN # 对于有相同UUID的实体的处理办法,saferegen:为实体重新命名UUID(如果相距小于safe-regen-delete-range就delete),delete:移除新加入的实体,warn:只在控制台输出警告,slient:不处理
      safe-regen-delete-range: 32 # mode等于saferegen时,相距小于这个距离的实体会被删除
    filter-bad-tile-entity-nbt-from-falling-blocks: true # 服务器是否要删除部分从刷怪蛋刷出的生物、Falling Block的实体形式和经常用在创造模式下会滥用的物品的NBT
    filtered-entity-tag-nbt-paths: # 将被从生成实体的物品上的 EntityTag 标签中移除的 NBT 标签列表。这些字符串的格式遵循与在 Vanilla 命令中选择 NBT 标签相同的格式。如果生成是由玩家直接引起的,并且玩家拥有 minecraft.nbt.place 权限,则过滤列表将被忽略。默认设置是为了防止实体生成或移动到放置位置以外的其他地方。例如,如果未包含 Pos,则生成蛋可以在任何位置放置实体
    - Pos
    - Motion
    - SleepingX
    - SleepingY
    - SleepingZ
    iron-golems-can-spawn-in-air: false # 是否允许铁傀儡在空中生成,可能影响刷铁机
    monster-spawn-max-light-level: default # 怪物生成的最大光照等级(0-15)
    non-player-arrow-despawn-rate: default # 非玩家射出的箭消失速率(单位是tick)
    per-player-mob-spawns: true # 决定是否按每个玩家或整个服务器计算怪物限制(在 bukkit.yml 中)。启用此设置会导致怪物数量大致相同,但分布更均匀,防止一个玩家使用全部怪物上限,并提供更像单人玩家的体验
    scan-for-legacy-ender-dragon: true # 决定服务器是否尝试开始末影龙的战斗。将此设置为 false 将使末影龙在末地不生成
    skeleton-horse-thunder-spawn-chance: default # 骷髅马在雷击时生成的几率(0.0-1.0,default为根据游戏难度决定)
    slime-spawn-height:
      slime-chunk:
        maximum: 40.0 # 史莱姆生成的最大高度
      surface-biome:
        maximum: 70.0 # 地表上的生物群系中史莱姆生成的最大高度
        minimum: 50.0 # 地表上的生物群系中史莱姆生成的最小高度
    spawn-limits: # 生成限制
      ambient: -1 # 环境生物(如蝙蝠)(-1 的值将使用 bukkit.yml 中的值,以下相同)
      axolotls: -1  # 美西螈
      creature: -1 # 生物
      monster: -1 # 怪物
      underground_water_creature: -1 # 地下水生生物
      water_ambient: -1  # 水中环境生物
      water_creature: -1 # 水生生物
    ticks-per-spawn: # 每tick生成的实体数量
      ambient: -1 # 环境生物(如蝙蝠)
      axolotls: -1 # 美西螈
      creature: -1 # 生物
      monster: -1 # 怪物
      underground_water_creature: -1 # 地下水生生物
      water_ambient: -1 # 水中环境生物
      water_creature: -1 # 水生生物
    wandering-trader:
      spawn-chance-failure-increment: 25 # 每次流浪商人生成失败时,生成几率会增加多少
      spawn-chance-max: 75 # 流浪商人生成的最大几率
      spawn-chance-min: 25 # 流浪商人生成的最小几率 
      spawn-day-length: 24000 # 流浪商人尝试生成的时间间隔(以tick计)
      spawn-minute-length: 1200 # 流浪商人生成的间隔时间
    wateranimal-spawn-height: # 水生生物生成的高度
      maximum: default # 最大高度
      minimum: default # 最小高度
  tracking-range-y: # 垂直高度的跟踪范围
    animal: default # 控制动物在垂直方向上被追踪(发送到)玩家的区块距离
    display: default # 控制垂直方向上以方块为单位显示实体被追踪(发送给)玩家的距离
    enabled: false # 启用垂直(Y)方向上跟踪范围的单独范围
    misc: default # 控制杂项实体在垂直方向上被追踪(发送到)玩家的区块距离
    monster: default # 控制怪物在垂直方向上被追踪(发送到)玩家的区块距离
    other: default # 控制其他实体在垂直方向上被追踪(发送到)玩家的区块距离
    player: default # 控制玩家在垂直方向上被追踪(发送到)玩家的区块距离
environment:
  disable-explosion-knockback: false # 禁用爆炸的击退效果
  disable-ice-and-snow: false # 禁用冰雪生成
  disable-teleportation-suffocation-check: false # 禁用传送窒息检查
  disable-thunder: false # 禁用雷击
  fire-tick-delay: 30 # 火焰燃烧的延迟时间
  frosted-ice: # 霜冰方块(冰霜行者生成的方块)的设置
    delay:
      max: 40 # 霜冰效果的最大RNG值(RNG似乎是随机数生成器的意思,大概是指霜冰方块保留的最大时间)
      min: 20 # 霜冰效果的最小RNG值
    enabled: true # 服务器是否要启用(并计时Tick)霜冰(冰霜行者生成的方块)方块
  generate-flat-bedrock: false # 服务器是否要生成基岩作为单个的平面层。
  locate-structures-outside-world-border: false 
  max-block-ticks: 65536 
  max-fluid-ticks: 65536
  nether-ceiling-void-damage-height: disabled # 设定玩家在地狱Y高度应该高于多少后受到虚空伤害,dfsabled为禁用, 设置为128以防止玩家跑到地狱天花板上
  optimize-explosions: false # 服务器是否应该在爆炸时使用缓存来查找实体,而不是爆炸时进行计算。此项会显著提高爆炸的速度
  portal-create-radius: 16 # 服务器尝试生成新传送门时可偏移的最大距离
  portal-search-radius: 128 # 服务器尝试搜寻已有传送门的范围,范围内如果没有已有传送门则会生成新传送门
  portal-search-vanilla-dimension-scaling: true # 是否在原版维度根据大小缩放 portal-search-radius
  treasure-maps:
    enabled: true # 从村民和箱子中得到的藏宝图是否应当指向相应的位置
    find-already-discovered: # 原版的机制是优先寻找未被探索过的位置,可能会被引导到没有一个被完全搜刮的地方,也可能会抵达世界边界。这些配置允许设定获得地图的方式
      loot-tables: default # 是否要为未被探索过的地方覆盖配置战利品表检查。default 允许战利品表将单独确定搜索位置时是否准许已探索过的位置。原版战利品表都会自动跳过已探索过的位置,因此将此项设置为false会覆盖并强制搜索已探索过的位置
      villager-trade: false #  服务器是否需要将通过从村民手中获得的藏宝图定位到第一个宝藏位置
  water-over-lava-flow-speed: # 直译是“水覆盖岩浆的流速”,可能是指水与岩浆接触生成原石/石头等的速度?
feature-seeds:
  generate-random-seeds-for-all: false # 为全部未指定种子的游戏内容启用自动填充种子。设置为true以尽量为所有内容生成独特的种子
fishing-time-range:
  maximum: 600 # 钓鱼前的最大RNG tick值(钓鱼时间的最大值)
  minimum: 100 # 钓鱼前的最小RNG tick值(钓鱼时间的最小值)
fixes:
  disable-unloaded-chunk-enderpearl-exploit: true # 卸载区块时是否不保存已投出的末影珍珠
  falling-block-height-nerf: disabled # 服务器应该在高度为何值时时移除下落方块。设定为 disabled 则禁用此项
  fix-items-merging-through-walls: false # 是否应防止物品穿墙堆叠。启用此项会使性能下降
  prevent-tnt-from-moving-in-water: false # 是否阻止水中的TNT移动
  split-overstacked-loot: true # 当设置为 false 时,战利品表不会尝试将堆叠数量高于最大值的物品拆分为更小堆叠数量的物品。这将防止超堆叠物品丢失或导致区块无法加载(由于玩家打破潜影箱时因超大数据包不断被踢出)
  tnt-entity-height-nerf: disabled # 服务器移除已激活的TNT最大高度的值。设定为 disabled 以禁用此项
hopper:
  cooldown-when-full: true # 指示服务器在漏斗满时应用短暂的冷却时间,而不是不断尝试接收新物品,大幅优化漏斗性能
  disable-move-event: false # 为漏斗禁用全部 InventoryMoveItemEvent 事件。此项可以显著提高性能,但是会影响使用此事件的插件,例如领地或保护插件
  ignore-occluding-blocks: false # 决定漏斗是否会忽略遮挡方块内的容器,例如沙块内的漏斗矿车。启用此功能将提高漏斗检查物品插入位置的性能
lootables:
  auto-replenish: false # 服务器是否会自动填充战利品容器。在启用此项之后,对某些玩家不断跑图(不断生成新区块)以寻找好东西的长期存档的服务器非常有用
  max-refills: -1 # 战利品容器的最大填充次数,-1时无限填充
  refresh-max: 2d # 战利品容器的最大刷新时间 格式为带单个单位的时间段,例如 1s 1m 1h 1d
  refresh-min: 12h # 战利品容器的最小刷新时间 格式为带单个单位的时间段,例如 1s 1m 1h 1d
  reset-seed-on-fill: true # 当每次准备重新填充战利品是否都要随机决定重新填充的新物品种类
  restrict-player-reloot: true # 是否要防止同一玩家反复回来掠夺同一容器中的战利品
  restrict-player-reloot-time: disabled # 每个玩家重新加载之间的冷却时间。格式为带单个单位的时间段,例如 1s 1m 1h 1d
maps:
  item-frame-cursor-limit: 128 # 每个地图最大标记数量。如果过多可能会使客户端卡顿
  item-frame-cursor-update-interval: 10 # 物品展示框上的地图标记多久更新一次。设定为 1 或更低则禁用此更新
max-growth-height: 
  bamboo:
    max: 16 # 竹子自然生长能长到多高
    min: 11 # 竹子自然生长至少长多高
  cactus: 3 # 仙人掌自然生长最多能长多高
  reeds: 3 # 甘蔗自然生长最多能长多高
misc:
  disable-end-credits: false  # 离开末地时是否永不播放终末之诗
  disable-relative-projectile-velocity: false # 服务器在计算射出的箭的速度时是否不计算射手的速度
  disable-sprint-interruption-on-attack: false # 当玩家疾跑时受到攻击是否要停止疾跑
  light-queue-size: 20 # 设定每个世界对于非主线程的光更新队列的大小。原版设定此值为 5,但是实际使用此值会造成许多问题,特别是当使用WorldEdit等插件时
  max-leash-distance: 10.0 # 缰绳有效的最大距离。如果拴住生物的距离超过此值,则会断开缰绳
  redstone-implementation: VANILLA # 指定服务器的红石实现方法,可能大幅降低红石执行的延迟,但可能会存在各种问题。vanilla: 原版实现,eigencraft: theosib 开发的 Eigencraft 红石实现(https://bugs.mojang.com/browse/MC-81098?focusedCommentId=420777#comment-42077),alternate-current: Space Walker 开发的 Alternate Current 红石实现(https://github.com/SpaceWalkerRS/alternate-current/blob/main/README.md)
  shield-blocking-delay: 5 # 玩家举起盾牌与实际格挡伤害之间需要间隔多少Tick
  show-sign-click-command-failure-msgs-to-player: false # 点击告示牌运行命令失败时是否需要向玩家显示失败消息
  update-pathfinding-on-block-update: true # 当某一方块更新时是否要同步更新生物的寻路机制。禁用此选项可以大大提高服务器性能,又几乎完全不影响游戏机制。推荐加载大量的实体时,又建了一个自动农场或红石钟时启用
scoreboards:
  allow-non-player-entities-on-scoreboards: true # 当服务器计算碰撞时,是否要将非玩家实体视作从来未在计数器上出现过。启用此项会增加服务器计算实体碰撞的时间
  use-vanilla-world-scoreboard-name-coloring: false # 服务器是否要使用原版计分板为玩家显示名称着色。当在原版服务器和客户端上游玩冒险模式地图很有用
spawn:
  allow-using-signs-inside-spawn-protection: false # 是否允许玩家在出生点保护内放置告示牌
tick-rates:
  behavior:
    villager:
      validatenearbypoi: -1 # 设定村民实体的 validatenearbypoi 行为的Tick速率
  container-update: 1 # 容器更新的Tick速率
  dry-farmland: 1 # 耕地干旱的Tick速率
  grass-spread: 1 # 草方块传播的Tick速率
  mob-spawner: 1 # 刷怪笼生成的Tick速率
  sensor:
    villager:
      secondarypoisensor: 40 # 设定村民实体的 secondarypoisensor 传感器的Tick速率
  wet-farmland: 1 # 耕地湿润的Tick速率
unsupported-settings:
  disable-world-ticking-when-empty: false # 当世界没有玩家时是否禁用世界的tick(无人时暂停服务器)
  fix-invulnerable-end-crystal-exploit: true # 修复末影水晶的无敌漏洞

就我个人而言,我推荐修改下列项目来优化服务器性能:

...
entities:
  armor-stands:
    do-collision-entity-lookups: true # 是否允许盔甲架实体参与碰撞检查
-    tick: true # 禁用以防止盔甲架进行计时。在有许多盔甲架的情况下可以提高性能
+    tick: false
...
  markers:
-    tick: true # 禁用以防止标记实体进行计时。在有许多标记实体的情况下可以提高性能
+    tick: false
...
- optimize-explosions: false # 服务器是否应该在爆炸时使用缓存来查找实体,而不是爆炸时进行计算。此项会显著提高爆炸的速度
+ optimize-explosions: true
...
maps:
-  item-frame-cursor-limit: 128 # 每个地图最大标记数量。如果过多可能会使客户端卡顿
+  item-frame-cursor-limit: 64
-  item-frame-cursor-update-interval: 10 # 物品展示框上的地图标记多久更新一次。设定为 1 或更低则禁用此更新
+  item-frame-cursor-update-interval: 5
...
-  redstone-implementation: VANILLA
+  redstone-implementation: alternate-current # 生电玩家谨慎选择,以免失去原版特性
...
-  update-pathfinding-on-block-update: true # 当某一方块更新时是否要同步更新生物的寻路机制。禁用此选项可以大大提高服务器性能,又几乎完全不影响游戏机制。推荐加载大量的实体时,又建了一个自动农场或红石钟时启用
+ update-pathfinding-on-block-update: false
...
scoreboards:
-   allow-non-player-entities-on-scoreboards: true # 当服务器计算碰撞时,是否要将非玩家实体视作从来未在计数器上出现过。启用此项会增加服务器计算实体碰撞的时间
+   allow-non-player-entities-on-scoreboards: false
  use-vanilla-world-scoreboard-name-coloring: false # 服务器是否要使用原版计分板为玩家显示名称着色。当在原版服务器和客户端上游玩冒险模式地图很有用

paper-world.yml

非常简单,你只需要在你需要单独设置paper设置的世界文件夹中创建一个名为paper-world.yml的文件,然后将你想要的设置复制进去即可。这个文件的设置会覆盖paper-default.yml中的设置,其余的会继续使用paper-default.yml中的设置

spigot.yml

settings:
  debug: false # 是否启用调试模式
  sample-count: 12 # 显示多少名玩家的名字在玩家数量菜单(tab)中。选中的玩家及其在列表中的位置是随机的
  save-user-cache-on-stop-only: false # 是否只在服务器关闭时保存用户缓存,而不是在每次服务器状态更新时都保存(false可防止服务器崩溃导致数据丢失)
  bungeecord: false  # 是否启用BungeeCord代理模式
  moved-too-quickly-multiplier: 10.0 # 控制客户端在一次数据包(与服务器通信)中移动的速度。如果超过,服务器将记录到控制台并阻止移动
  moved-wrongly-threshold: 0.0625 # 控制客户端在一次数据包(与服务器通信)中移动的距离,单位为方块距离的平方(默认为0.25的平方)。如果超过,服务器将记录到控制台并阻止移动
  timeout-time: 60 # 服务器未响应超过此时间后,进行重启或停止操作
  restart-on-crash: true # 服务器崩溃时是否自动重启
  restart-script: ./start.sh # 服务器重启时执行的脚本
  log-villager-deaths: true # 是否记录村民死亡
  log-named-deaths: true # 是否记录命名实体的死亡
  netty-threads: 4 # 服务器使用的Netty线程数
  player-shuffle: 0  # 多久重新排序一次玩家连接列表,以 ticks 为单位,输入-1 以禁用。这可以防止玩家通过策略性重新登录来提高他们在 tick 顺序中的位置。如果启用且值较低,可能会对性能产生影响,建议在pvp服务器上启用
  user-cache-size: 1000 # 在用户缓存中保留多少玩家
  attribute:
    maxHealth:
      max: 2048.0 # 生物的最大生命值
    movementSpeed:
      max: 2048.0 # 生物的最大移动速度
    attackDamage:
      max: 2048.0 # 生物的最大攻击伤害
advancements:
  disable-saving: false # 是否禁用进度保存
  disabled: 
  - minecraft:story/disabled # 禁用的进度
world-settings:
  default:
    below-zero-generation-in-existing-chunks: true # 是否在当已生成的区块中没有负坐标的方块(如从低版本迁移)时生成负坐标的方块
    merge-radius:
      exp: 3.0 # 合并经验球的半径
      item: 2.5 # 合并物品的半径
    hunger:
      jump-walk-exhaustion: 0.05 # 跳跃和行走的饥饿值消耗
      jump-sprint-exhaustion: 0.2 # 跳跃和冲刺的饥饿值消耗
      combat-exhaustion: 0.1 # 战斗的饥饿值消耗
      regen-exhaustion: 6.0 # 恢复生命值的饥饿值消耗
      swim-multiplier: 0.01 # 游泳的饥饿值消耗
      sprint-multiplier: 0.1 # 冲刺的饥饿值消耗
      other-multiplier: 0.0 # 其他的饥饿值消耗
    ticks-per:
      hopper-transfer: 8 # 每多少tick传送一次漏斗中的物品
      hopper-check: 1 # 每多少tick检查一次漏斗
    hopper-amount: 1 # 每次漏斗传送的物品数量
    hopper-can-load-chunks: false # 漏斗是否可以加载区块(红石服可以用这个来代替区块更新器)
    view-distance: default # 视距,default为使用server.properties中的值
    simulation-distance: default # 模拟距离,default为使用server.properties中的值
    zombie-aggressive-towards-villager: true # 僵尸是否对村民敌对
    enable-zombie-pigmen-portal-spawns: true # 是否允许僵尸猪人从传送门生成
    entity-activation-range:
      animals: 32 # 动物的激活范围
      monsters: 32 # 怪物的激活范围
      raiders: 48 # 掠夺者的激活范围
      misc: 16 # 其他实体的激活范围
      water: 16 # 水生生物的激活范围
      villagers: 32 # 村民的激活范围
      flying-monsters: 32 # 飞行怪物的激活范围
      wake-up-inactive:
        animals-max-per-tick: 4 # 每tick唤醒的动物数量
        animals-every: 1200 # 每多少tick唤醒一次动物
        animals-for: 100 # 每次唤醒动物持续多少tick
        monsters-max-per-tick: 8 # 每tick唤醒的怪物数量
        monsters-every: 400 # 每多少tick唤醒一次怪物
        monsters-for: 100 # 每次唤醒怪物持续多少tick
        villagers-max-per-tick: 4 # 每tick唤醒的村民数量
        villagers-every: 600 # 每多少tick唤醒一次村民
        villagers-for: 100 # 每次唤醒村民持续多少tick
        flying-monsters-max-per-tick: 8 # 每tick唤醒的飞行怪物数量
        flying-monsters-every: 200 # 每多少tick唤醒一次飞行怪物
        flying-monsters-for: 100 # 每次唤醒飞行怪物持续多少tick
      villagers-work-immunity-after: 100 # 村民工作多长时间后下班
      villagers-work-immunity-for: 20 # 村民工下班持续多少tick
      villagers-active-for-panic: true # 村民是否在恐慌时活跃
      tick-inactive-villagers: true # 是否对非活跃村民也计算tick
      ignore-spectators: false # 旁观模式的玩家是否能激活周围的实体
    max-tick-time:
      tile: 50 # 弃用了的选项
      entity: 50 # 弃用了的选项
    thunder-chance: 100000 # 雷击概率的倒数
    max-tnt-per-tick: 100 # 每tick最多爆炸的TNT数量
    entity-tracking-range:
      players: 48 # 玩家能看到其他玩家的距禮
      animals: 48 # 玩家能看到动物的距离
      monsters: 48 # 玩家能看到怪物的距离
      misc: 32  # 玩家能看到其他实体的距离
      display: 128 # 玩家能看到实体的距离
      other: 64 # 玩家能看到其他实体的距离
    seed-village: 10387312 # 村庄的结构种子
    seed-desert: 14357617 # 沙漠神殿的结构种子
    seed-igloo: 14357618 # 冰山的结构种子
    seed-jungle: 14357619 # 丛林神殿的结构种子
    seed-swamp: 14357620 # 沼泽的结构种子
    seed-monument: 10387313 # 海底神殿的结构种子
    seed-shipwreck: 165745295 # 沉船的结构种子
    seed-ocean: 14357621 # 海底建筑的结构种子
    seed-outpost: 165745296 # 前哨站的结构种子
    seed-endcity: 10387313 # 末地城的结构种子
    seed-slime: 987234911 # 史莱姆区块的种子
    seed-nether: 30084232 # 地狱要塞的结构种子
    seed-mansion: 10387319 # 山林庄园的结构种子
    seed-fossil: 14357921 # 化石的结构种子
    seed-portal: 34222645 # 末地传送门的结构种子
    seed-ancientcity: 20083232 # 古代遗迹的结构种子
    seed-trailruins: 83469867 # 遗迹的结构种子
    seed-trialchambers: 94251327 # 试炼室的结构种子
    seed-buriedtreasure: 10387320 # 埋藏宝藏的结构种子
    seed-mineshaft: default # 矿井的结构种子 
    seed-stronghold: default # 要塞的结构种子 
    unload-frozen-chunks: false # 是否卸载冻结的区块
    growth:
      cactus-modifier: 100 # 仙人掌生长速度(百分比,以下也是)
      cane-modifier: 100 # 甘蔗生长速度
      melon-modifier: 100 # 甜瓜生长速度
      mushroom-modifier: 100 # 蘑菇生长速度
      pumpkin-modifier: 100 # 南瓜生长速度
      sapling-modifier: 100 # 树苗生长速度
      beetroot-modifier: 100 # 甜菜根生长速度
      carrot-modifier: 100 # 胡萝卜生长速度
      potato-modifier: 100 # 土豆生长速度
      torchflower-modifier: 100 # 火把花生长速度
      wheat-modifier: 100 # 小麦生长速度
      netherwart-modifier: 100 # 地狱疣生长速度
      vine-modifier: 100 # 藤蔓生长速度
      cocoa-modifier: 100 # 可可豆生长速度
      bamboo-modifier: 100 # 竹子生长速度
      sweetberry-modifier: 100 # 甜浆果生长速度
      kelp-modifier: 100 # 海带生长速度
      twistingvines-modifier: 100 # 缠绕藤蔓生长速度
      weepingvines-modifier: 100 # 垂泪藤蔓生长速度
      cavevines-modifier: 100 # 洞穴藤蔓生长速度
      glowberry-modifier: 100 # 荧光浆果生长速度
      pitcherplant-modifier: 100 # 猪笼草生长速度
    end-portal-sound-radius: 0 # 末地传送门音效半径(0为全服播放)
    wither-spawn-sound-radius: 0 # 凋零生成音效半径(0为全服播放)
    hanging-tick-frequency: 100 # 多久触发一次尝试挂起(相当于暂停)实体的操作
    dragon-death-sound-radius: 0 # 末影龙死亡音效半径(0为全服播放)
    item-despawn-rate: 6000 # 物品消失时间
    mob-spawn-range: 8 # 玩家周围以区块为单位,怪物可以生成的范围
    arrow-despawn-rate: 1200 # 箭矢消失时间
    trident-despawn-rate: 1200 # 三叉戟消失时间
    nerf-spawner-mobs: false # 是否禁用刷怪笼生成的怪物的AI
    verbose: false # 是否启用详细日志
messages:
  whitelist: You are not whitelisted on this server! # 未被白名单的玩家尝试进入服务器时的提示
  unknown-command: Unknown command. Type "/help" for help. # 未知命令时的提示
  server-full: The server is full! # 服务器满员时的提示 
  outdated-client: Outdated client! Please use {0} # 客户端过旧时的提示 
  outdated-server: Outdated server! I'm still on {0} # 服务器过旧时的提示 
  restart: Server is restarting # 服务器重启时的提示
commands:
  tab-complete: 0 # 选项卡补全的最大数量(0为无限)
  send-namespaced: true # 是否发送命名空间的命令
  silent-commandblock-console: false # 命令方块是否静默执行
  replace-commands: # 以下命令将始终使用原版实现,不受插件的影响
  - setblock 
  - summon
  - testforblock
  - tellraw
  spam-exclusions: # 任何与此列表中条目前缀匹配的聊天消息或命令将被排除在内置垃圾邮件过滤器之外,命令前面加上/,消息直接写就行
  - /skill
  log: true # 是否记录命令
players: 
  disable-saving: false # 是否禁用玩家数据保存
config-version: 12 # 版本标识,不要更改
stats:
  disable-saving: false # 是否禁用统计数据保存
  forced-stats: {} # 强制统计的数据(不受disable-saving影响,选项见https://minecraft.wiki/w/Statistics#List_of_custom_statistic_names)

bukkit.yml

settings:
  allow-end: true # 是否启用末地
  warn-on-overload: true # 是否在服务器超载时警告
  permissions-file: permissions.yml # 权限文件
  update-folder: update # 更新文件夹
  plugin-profiling: false # 是否启用插件性能分析
  connection-throttle: 4000 # 连接节流 
  query-plugins: true # 是否查询插件
  deprecated-verbose: default # 弃用警告级别 
  shutdown-message: Server closed # 服务器关闭时的消息
  minimum-api: none # 最低API版本
  use-map-color-cache: true # 是否使用地图颜色缓存
spawn-limits: # 生成数量上限
  monsters: 70 # 怪物
  animals: 10  # 动物
  water-animals: 5 # 水生动物
  water-ambient: 20 # 水生环境
  water-underground-creature: 5 # 水下生物
  axolotls: 5 # 美西螈
  ambient: 15 # 环境生物
chunk-gc:
  period-in-ticks: 600 # 由插件引发加载的区块的持续时间,但是Paper限制最大为20tick
ticks-per: # 每多少tick执行一次
  animal-spawns: 400 # 动物生成 
  monster-spawns: 1 # 怪物生成
  water-spawns: 1 # 水生动物生成
  water-ambient-spawns: 1 # 水生环境生成
  water-underground-creature-spawns: 1 # 水下生物生成
  axolotl-spawns: 1 # 美西螈生成
  ambient-spawns: 1 # 环境生物生成
  autosave: 6000 # 自动保存间隔,单位为tick
aliases: now-in-commands.yml # 从旧版本转换为新的 commands.yml 文件的位置

commands.yml

commands.yml主要控制原版指令与bukkit指令之间的关系,用处不是很大,当bukkit覆盖了你想要的原版指令的之后可以调整一下。

command-block-overrides: [] # 在列表中填入始终使用原版方式实现的命令。格式如["fill","setblock"]
ignore-vanilla-permissions: false # 在执行命令的时候是否忽略原版的命令权限机制
aliases: # 设置命令的别名
  icanhasbukkit: # 内置的别名
  - version $1-

premissions.yml

不同于其他文件,默认情况下premission.yml里没有内容。

此文件的作用是将权限节点,便于分配不同玩家他可用的指令等。不建议手动修改,后面会提到一些权限控制相关的插件,通过插件来控制就好。

其他各种json

剩下的几个json文件格式都大致相同,大概是这样的:

[
  {
    "uuid": "f430dbb6-5d9a-444e-b542-e47329b2c5a0",
    "name": "username"
  },
  {
    "uuid": "e5aa0f99-2727-4a11-981f-dded8b1cd032",
    "name": "username"
  }
]

这用于控制服务器黑白名单、OP名单等,但是也不建议手动修改,因为要在玩家进入服务器前就知道其uuid有点困难,可以直接用命令来实现,比如/ban,/op等都能实际控制这些文件。

特别提一下whitelist.json,在服务器中可以直接使用/whitelist add <name>的方式将玩家写入到白名单中,之后还需要/whitelist reload即可生效。

恭喜,跟着上面的内容看完整个配置文件,你已经完成了Paper服务器的基本配置。接下来是关于如何安装插件,维护服务器,升级服务器等内容。

安装插件

Paper的官网有官方的插件中心,你可以在这里找到你需要的插件。https://hangar.papermc.io/

里面的插件通常直接就能下载,看好支持的版本,直接下载即可,例如下面的图片:

download-plugindownload-plugin

也有一些插件会跳转到第三方站点下载,这时候直接去找jar文件下载即可。例如下面的:

download-plugin-thdownload-plugin-th

当然,你也可以自己找jar包。很多插件的jar包都会放在GitHub上,你可以在GitHub上搜索你需要的插件,然后下载jar包。

下载完之后安装非常简单,直接把jar文件放到/plugins文件夹下,之后重启服务器即可。

鉴于此文写到现在就已经将近5w字了,插件推荐放在下一篇文章中了:

Minecraft Paper服务器插件推荐-https://ravelloh.top/posts/minecraft-paper-server-plugins

启动服务器

虽然你可以简单的使用java -jar <name>.jar的方式来运行服务器,但是这个的性能并不怎么样,你可以使用Aikar's Flags(详见https://aikar.co/2018/07/02/tuning-the-jvm-g1gc-garbage-collector-flags-for-minecraft/,下面为此文章的摘选翻译)来优化你的服务器打开方式:

java -Xms10G -Xmx10G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paper.jar --nogui

通常来说你只需要更改-Xms10G-Xmx10G其中的10G为你想给服务器提供的内存量,之后把paper.jar改成你的服务器jar包名即可,其他选项不需要修改。

不过如果你能提供大于12G的内存,那可以这样优化一下:

java -Xms10G -Xmx10G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=40 -XX:G1MaxNewSizePercent=50 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=15 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=20 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paper.jar --nogui

维护服务器

维护服务器算是比较容易,毕竟只要服务器不崩溃,基本上就不会有什么问题,而Paper服务器也很稳定,只要不是服务器压力太大,基本上不会出现问题。 不过在少部分情况下,可能还是会出现崩溃甚至坏档的问题,如果只是地图毁了,可以用我上面写插件的那个文章里面那个插件来回档,但是如果更严重的情况下,也可能会出现整个服务器gg的情况,这时候就需要注意备份了。

定期备份

备份很简单,直接把整个paper所处的目录复制一份就行了,不过这样的话会占用很大的空间,所以可以使用一些备份插件,比如BackupWorldEdit等,这些插件都可以用来备份服务器,而且还可以设置定时备份,非常方便。 除了用插件,你也可以根据系统的定时任务来备份,比如Linux下的crontab,Windows下的任务计划程序等。 但如果不用这些自动备份的方法,实际上你手动去复制这个文件夹到其他位置也行,顺便也可以压缩一下,这样可以节省很多空间。 这里我写了两个小脚本,你可以在Windows和Linux上快速复制mcserver文件夹到backup文件夹并压缩,文件名为备份时的日期:

:: Windows
@echo off
setlocal enabledelayedexpansion
set date=%date:~0,4%%date:~5,2%%date:~8,2%
xcopy /s /e /y "C:\path\to\mcserver" "C:\path\to\backup\%date%"
tar -zcvf "C:\path\to\backup\%date%.tar.gz" "C:\path\to\backup\%date%"
# Linux
#!/bin/bash
date=$(date "+%Y%m%d")
cp -r /path/to/mcserver /path/to/backup/$date
tar -zcvf /path/to/backup/$date.tar.gz /path/to/backup/$date

下面是两个加了定时任务的脚本,会自动注册到系统的定时任务中,每天凌晨3点备份一次:

:: Windows
@echo off
setlocal enabledelayedexpansion
set date=%date:~0,4%%date:~5,2%%date:~8,2%
xcopy /s /e /y "C:\path\to\mcserver" "C:\path\to\backup\%date%"
tar -zcvf "C:\path\to\backup\%date%.tar.gz" "C:\path\to\backup\%date%"
schtasks /create /tn "backup" /tr "C:\path\to\backup.bat" /sc daily /st 03:00
# Linux
#!/bin/bash
date=$(date "+%Y%m%d")
cp -r /path/to/mcserver /path/to/backup/$date
tar -zcvf /path/to/backup/$date.tar.gz /path/to/backup/$date
echo "0 3 * * * /path/to/backup.sh" | crontab

解除定时任务只需运行以下命令:

:: Windows
schtasks /delete /tn "backup" /f
# Linux
crontab -r

升级服务器

一般来说不太建议升级服务器的版本,因为新版本可能会有一些不兼容的地方。不用担心新版本客户端登陆不到你的服务器,我上文插件那篇文章里面的ViaVersion和ViaBackwards插件可以让你的服务器支持多个版本的客户端,前者往高版本跨,后者往低版本跨,具体可以去看那篇文章。

但是如果你确实需要去跨版本,那么可以遵循以下步骤:

  1. 备份服务器
  2. 下载新版本的Paper服务器,详见上文#下载Paper
  3. 检查所有插件,看其是否支持你想要更换到的版本,支持的话就下载了
  4. 替换旧的服务器jar包和旧的插件包
  5. 试运行服务器,测试是否有问题

没有意外的话,你的服务器应该可以正常运行了,如果有问题就回滚到备份的版本,然后再看看问题出在哪里。

INFO

00:00


无正在播放的音乐
00:00/00:00

账号
User avatar
未登录未设置描述...