木须柄的时光工坊

探索技术与游戏乐趣的奇妙之旅

目录
我的世界服务端 实用插件大全 + 部署
/      

我的世界服务端 实用插件大全 + 部署

我的世界服务端 实用插件大全 + 部署.png

最近简单研究了一下 Minecraft 服务端的实用插件,这些插件能在各个方面提高 MC 服务器的安全性和游玩体验。服务端的插件选择,以实用功能和服务安全为主。

我这里的服务端选择的是 Mohist 版本 1.20.2,可以结合 ForgeBukkit/Spigot/Sponge 等不同的 Mod 和插件生态系统。插件主要通过 Bukkit/Spigot/Paper插件的形式在服务端部署。部署方法也很方便,一般过程是寻找合适的插件 JAR 包,然后将其下载拷贝到服务端的 plugins 目录下,重启服务器后即可加载插件。

关于版本,插件版本尽量选择与服务端对应的版本。

一般第一次加载插件后,插件会在 plugins 目录下生成相关的配置和数据库文件,控制台也会有相应的日志提示。如果有错误,可以根据提示逐个排查,可能会需要补全一些配置或者数据库文件,这里就不一一赘述了。

这里主要记录一下配置文件的基本设置过程和一些插件的指令方法。

身份验证 AuthMe

功能介绍:AuthMe 是 Minecraft 服务器端的一个插件,用于管理玩家认证和身份验证。该插件通常用于提供额外的玩家账户安全性,特别是在多人服务器环境中。

下载地址:https://github.com/AuthMe/AuthMeReloaded/releases/tag/5.6.0-beta2

插件配置

编辑 AuthMeconfig.yml 设置文件。

1cd ./plugins/AuthMe
2vim config.yml

编辑以下字段文件,在 vim 中可以用 / 加关键词定位查询:

 1# 设置信息语言,改为中文
 2    # Message language, available languages:
 3    # https://github.com/AuthMe/AuthMeReloaded/blob/master/docs/translations.md
 4    messagesLanguage: zhcn
 5
 6# 设置服务器名称
 7    # The name of the server, used in some placeholders.
 8    serverName: 木须柄
 9
10# 设置昵称的最大最小长度,默认 3-16
11        # Minimum allowed username length
12        minNicknameLength: 3
13        # Maximum allowed username length
14        maxNicknameLength: 16
15
16# 设置登陆限制时间,默认 30 秒
17        # After how many seconds should players who fail to login or register
18        # be kicked? Set to 0 to disable.
19        timeout: 30
20  
21# 设置昵称合法字符范围,加上中文字符
22        # Regex pattern of allowed characters in the player name.
23        allowedNicknameCharacters: '[a-zA-Z0-9\u4E00-\u9FA5_]*'
24
25# 关闭“您拥有多个账户”的提示
26        displayOtherAccounts: false

关闭“拥有多个账户”的提示

编辑 AuthMeconfig.yml 设置文件,将其中的 displayOtherAccounts 设置为 false即可。

登陆验证

第一次登陆服务器后,需要注册,输出账号密码。

1/register <password> <password>

之后登陆需要输入密码

1/login <password>

白名单 IpacWhitelist

功能介绍:带有许多功能的白名单插件. 标签: [白名单, 参观账户, Ban, AuthMe 集成, SQLite, 离线, 正版, Geyser]

  • 同时支持正版账号/离线账号/Geyser账号.
  • 支持查看/导出数据

下载地址:https://modrinth.com/plugin/ipacwhitelist

插件配置

 1# 数据库
 2sql:
 3  # 使 Name 大小写不敏感, 同时影响白名单和指令. 仅可在建表时修改
 4  Name_COLLATE_NOCASE: true
 5
 6# 连接到其他插件, 修改此处需要重启服务器
 7hook:
 8  AuthMe: true
 9
10# 白名单功能
11whitelist:
12  # 简易的 ip 黑名单. 在这里添加正则表达式, 匹配的ip不允许加入服务器 (也不允许使用参观账户
13  # 使用 /wl reload 重载配置即可应用
14  ip-blacklist: []
15#    - '^192\.168\.100\..+$'
16#    - '^fe80:🔢.+$' # ipv6没有方括号
17
18  # 限定玩家可以使用的用户名正则
19  name-rule: '^\.?[a-zA-Z0-9_]+$' # 白名单中的玩家
20  name-rule-visit: '^\.?[a-zA-Z0-9_]+$' # 参观账户
21
22  # 自动检查并处理出错的记录
23  # 比如添加玩家 UUID 后又添加了 NAME (此时产生两条记录), 当玩家登录时自动删除其中一条记录
24  autoClean:
25    enable: true
26    # 如果两条记录中的关键数据不一致, 比如记录1是白名单, 而记录2中是黑名单, 则将记录2中的数据迁移到记录1
27    dataByWeight: true
28
29  # 如果玩家在指定秒数内没上线过, 则视为不在白名单中. -1 = 禁用
30  # 参观账户不受此限制
31  timeout: -1  # 10368000 = 4个月
32
33  # 服务器启动完成后等待多少毫秒才能允许玩家加入
34  late-join-time: 4000 # 4秒
35
36  # 玩家因任何原因断开连接后需要等待多长时间才能再次加入 (毫秒
37  # 用于防止玩家在短时间内重复加入退出
38  playerDisconnectToReconnectMinTime: 2000
39
40
41# 参观账户
42# 参观账户允许不在白名单中的玩家加入服务器, 可以限制其功能
43visit:
44  # 如果开启, 不在白名单和移出白名单的玩家将会以参观账户的形式加入服务器. 白名单过期和封禁中的账户依然不可加入服务器
45  # 关闭可重载配置, 但开启它需要重启服务器
46  enable: false
47  # 最多允许同时加入多少参观账户
48  max-visit-player: 10
49
50  # 限定参观账户只能使用以下域名加入服务器, 否则提示不在白名单
51  limit-hostname:
52    enable: false
53    list:
54      - 'visit.your-mc-server.com:25565'
55      - 'visit2.your-mc-server.com:25565'
56
57  # 需要启用 hook.AuthMe
58  # 自动注册和登录都在运行完事件程序后运行
59  AuthMe:
60    autoRegisterPassword: 'your_password' # 需要在这里填写一个复杂的密码
61    autoRegister: true # 为参观账户自动注册, 相当于 `authme register <playerName> <password>`, 但不会踢出玩家
62    autoLogin: true # 为参观账户自动登录, 相当于 `/authme forcelogin <playerName>`
63
64# 玩家加入消息广播
65
66# 玩家加入
67  playerJoin:
68
69    # IpacWL 参观账户登录服务器
70    onVisitPlayerJoin:
71      message: '§6IpacEL §f> §a%player% §b使用参观账户加入游戏'
72
73    # AuthMe 玩家登录或注册成功
74    onAuthMeLoginEvent: # 需要启用 hook.AuthMe
75      message: '§6IpacEL §f> §a%player% §b加入游戏'
76
77    # 玩家加入事件. 如果使用 AuthMe, 同时这里留空, 就能在玩家登录后显示加入游戏
78    onPlayerJoinEvent:
79      message: '§6IpacEL §f> §a%player% §b加入游戏'
80
81  # 玩家退出
82  playerQuit:
83
84    # AuthMe 登录密码错误
85    onAuthMeFailedLoginEvent: # 需要启用 hook.AuthMe
86      message: '§6IpacEL §f> §a%player% §b断开连接: §7密码错误'
87
88    # AuthMe 玩家注销事件 (/logout)
89    onLogoutEvent:
90      message: ''
91
92    # 玩家退出事件
93    onPlayerQuitEvent:
94      message: '§6IpacEL §f> §a%player% §b 离开游戏'
95

指令列表

 1/wl - 主命令
 2/wl reload - 重载配置, 同时重新连接数据库
 3/wl add <playerName|playerUUID> - 添加到白名单, uuid为空时自动获取
 4/wl del <playerName|playerUUID> - 取消玩家的白名单
 5/wl ban <playerName|playerUUID> - 封禁玩家
 6/wl unban <playerName|playerUUID> - 解封玩家
 7/wl info <playerName|playerUUID> - 查看玩家数据
 8/wl list <NOT|VISIT|WHITE|BLACK|VISIT_CONVERT|VISIT_BLACK|*> <num|ALL> - 列出玩家数据
 9/wl clean <VISIT|NOT> - 清理一个类型下所有玩家的数据, 详见配置
10/wl clean PLAYER <playerName|playerUUID> - 清理一个玩家的所有数据, 详见配置

回滚插件 CoreProtect

功能介绍:CoreProtect - 快速,高效的方块记录,回滚和恢复

CoreProtect是一种快速,高效的数据记录和防止恶意破坏的工具。可以回滚和恢复破坏。为大型服务器设计,CoreProtect将记录和管理数据,而不会影响服务器性能。

下载地址:https://www.spigotmc.org/resources/coreprotect.8631/updates

指令列表

 1/co help 	显示命令列表
 2/co inspect 	开启查询模式
 3/co rollback <params> 	回档方块数据
 4/co restore <params> 	取消回档操作
 5/co lookup <params> 	方块记录翻页
 6/co purge <params> 	删除旧有数据
 7/co reload 	重载配置文件
 8/co version 	查看当前插件版本信息
 9简短命令 /co near 	查看半径五格内的方块记录
10/co undo 	撤销回档/恢复操作,即进行相反的动作(下面列出详细的命令信息.
11/co help 	在游戏中列出所有命令.
12/co inspect 	开启查询模式.再次输入则关闭查询模式.缩写"/co i". 

基本指令示例

 1# 查看玩家的日志记录
 2/co lookup u:<user> t: r:<radius> a:<action> b:<blocks> e:<exclude>
 3  # 简短命令: "/co l".
 4
 5# 示例
 6# 查看 player 一小时内 破坏的方块
 7/co lookup player t:1h a:-block
 8
 9# 查看 player 一天内 拿出箱子内的物品
10/co lookup player t:1h a:container
11
12# 查看 player 30分钟内 杀死的怪物/动物
13/co lookup player t:30m a:kill

查询结果,可以用来查看玩家的操作记录

image-20240109161607667.png

参数说明

 1u:<user> - 指定一名用户进行回档操作.
 2# 例子: u:Notch
 3
 4t: - 指定回档的时间变量.你可以指定周、天、小时、分钟、秒数.
 5# 例子 t:2w,5d,7h,2m,10s
 6# 你可以指定更具体的时间变量.
 7# 例子: t:5d2h
 8# 你也可以使用小数
 9# 例子: t:2.50h (两个半小时)
10
11r:<radius> - 指定作用的半径范围.
12# 你可以利用这个变量只恢复你附近的方块.
13# 你可以直接指定一个数字(例如 r:5),一个世界(例如 r:#world_the_end), 全局回档(r:#global), 或是一个WorldEdit的选区(r:#worldedit 或者 r:#we)
14# 举个例子来说,下面这个变量意味着只恢复你周围半径为十格的方块【注:此处是半径抑或就是方块数?】: r:10
15
16a:<action> - 限定操作的动作范围
17# 举个例子来说,如果你只想恢复放置的方块,输入 a:+block
18# 以下是所有动作的变量代码:
19a:block (方块放置/破坏)
20a:+block (方块放置)
21a:-block (方块破坏)
22a:click (玩家交互)
23a:container (物品拿出或放入箱子等容器.)
24a:+container (物品放入箱子等容器.)
25a:-container (物品拿出箱子等容器.)
26a:kill (被杀死的怪物/动物)
27a:chat (聊天栏中的信息)
28a:command (用过的命令)
29a:session (玩家登入/登出)
30a:+session (玩家登入)
31a:-session (玩家登出)

参考文档:https://mineplugin.org/CoreProtect

世界保护 WorldGuard

功能介绍:WorldGuard 是 Minecraft 服务器端的一个插件,用于管理和保护世界(World)中的区域。该插件允许服务器管理员对不同的地区(区域)设置特定的规则、权限和保护措施。

下载地址:https://dev.bukkit.org/projects/worldguard

领地保护方法

输入指令 //wand,使用得道的木棍左键一个区域的第一个点,用木棍右键一个区域的第二个点。

image-20240109173653608.png

此两点为对角线,系统认为这两个点的中间范围是你所选中的范围

(所以有一个点可能需要搭楼梯到高处)

image-20240109173713099.png

输入指令 /rg claim 领地名

例: /rg claim myhome 则是定义一个叫 myhome 的地盘, 这个地盘的所有者默认包含创建者,这片区域则只有你能进行建造破坏等行动(TNT,苦力怕也能破坏)

查看领地信息

在某个领地的区域范围内输入指令 /rg info。默认无主区域的领地标识为 __global__

编辑领地用户

添加领地用户:输入指令 /rg addmember 领地名 用户名

删除领地用户:输入指令 /rg removemember 领地名 用户名

以下指令为可选

输入指令/rg flag 领地名 tnt deny

这片区域禁止tnt破坏

输入指令/rg flag 领地名 creeper-explosion deny

这片区域禁止苦力怕爆炸破坏

输入指令/rg flag 领地名 enderman-grief deny

这片区域禁止 Enderman 搬运

输入指令/rg flag 领地名 greeting welcome %name%!

当有人进入这片区域会提示 ”welcome (某某某)! ”

输入指令/rg flag 领地名 farewell thank you %name% see you next time!

当有人离开这片区域会提示 ”thank you (某某某) see you next time!”

欢迎辞和欢送辞使用中日文可以, 但是服务器重启后会变成乱码

输入指令/rg flag 领地名 chest-access allow

当有人进入这片区域可以打开你没上锁的箱子,但是箱子必须是公有的 (/cremove状态)

输入指令/rg flag 领地名 use allow

强制设置这片区域别人可以使用触发器例如踏板开关之类的.(默认为开,但有时会BUG造成无法使用)

删除领地

输入指令 /rg del 领地名

拥有者Owner & 使用者Member & 无权限者区别

拥有者可以修改自己区域的拥有者,使用者,以及flag参数.

使用者则只能在此区域做正常的建设&拆除,但无法更改这个地区的设置.

无权限者无法在此区域做任何建设&拆除.

显示自己所有的区域

使用指令 /rg list .me

多世界插件 Multiverse-Core

功能介绍:Multiverse-Core 是 Minecraft 服务器端的一个插件,旨在为服务器管理员提供多世界管理功能。该插件允许在同一个服务器上创建和管理多个游戏世界,每个世界可以具有独立的设置、规则和特性。

下载地址:https://www.spigotmc.org/resources/multiverse-core.390/

导入地图

可以将旧地图导入进服务器,地图文件夹默认为 world,在导入前为了不和现有地图冲突,建议重命名,比如 world_old

1# 将旧地图复制到新服务端
2# 假设旧地图在 Old_mc_dir 中,新服务端目录为 new_mc_dir
3cp -R old_mc_dir/world new_mc_dir/world_old

然后在 MC 控制台输入导入世界的命令,其中世界名和地图文件夹需要一致。

1# 导入普通世界 world_old
2/mv import world_old normal

导入成功后就可以通过命令自由切换世界了。

切换地图

1# 将自己传送至 world_old
2/mv tp world_old
3
4# 将 player 传送至 world_old
5/mv tp player world_old

指令列表

 1/mv help - 查看本插件帮助
 2
 3/mv spawn [世界名] - 回到这一个世界的出生点
 4
 5/mv create [世界名] [世界类型] [世界种子] - 创造一个新世界
 6
 7/mv create 世界名 normal 普通
 8
 9/mv create 世界名 normal -t flat 超平坦
10
11/mv create 世界名 normal -t largebiomes大型生物群落
12
13/mv create 世界名 nether 创建地狱输入
14
15/mv create 世界名 end 创建末地输入
16
17/mv delete [世界名] - 删除一个世界
18
19/mv save - 保存插件信息
20
21/mv reload - 重载插件
22
23/mv list - 查看已有世界列表
24
25/mv listgens - 查看可选择的世界类型
26
27/mv move [玩家名] [世界名] - 将某玩家传送到某的世界
28
29/mv spawn [某世界] - 回到出生点
30
31/mv setspawn - 设置本世界出生点
32
33/mv debug - 进入调试模式
34
35/mv info [世界名] - 查看该世界的信息
36
37/mv unload [世界名] - 重新加载一个世界
38
39/mv link [目标地狱] [世界名] - 连接[目标世界]地狱和[世界名]
40
41/mv link-end [目标末界] [世界] - 连接[目标世界]末界和[世界]
42
43/mv flags - 显示全部标志列表
44
45/mv setflag [世界名] [标志名] [] - 改变标志值
46
47/mv getflag [世界名] [标志名] - 查看标志值。输入"*"可以查看该世界全部标志状态 
48
49/mv load [世界名] 打开某个被关闭的世界

世界传送门 Multiverse-Portals

功能介绍:Multiverse-Portals 是 Minecraft 服务器端的一个插件,是 Multiverse-Core 插件的一个附属模块,用于在多世界管理中创建和管理传送门。这个插件提供了创建传送门的工具,允许玩家通过特定的门或区域快速移动到其他世界或特定位置。

下载地址:https://dev.bukkit.org/projects/multiverse-portals

创建传送门

可以利用Multiverse-Portals插件构造传送门,使普通玩家不需要利用mv tp <世界名> 命令即可在不同世界间穿越,效果类似于原版的地狱传送门;

插件依赖:Essentials, EssentialsGeoIP, Multiverse-Core, Multiverse-Portals

安装好插件,工作正常后,进入客户端设置:

1# 查阅当前插件安装情况
2/plugins
3[20:46:26 INFO]: Plugins (19): LuckPerms, CMILib, OnePlayerSleep, Vault, Votifier, Multiverse-Core, WorldEdit, Essentials, EssentialsGeoIP, AuthMe, Economy, Multiverse-Portals, IpacWhitelist, WorldGuard, CoreProtect, LockettePro, Jobs, ChestShop, Mohist
4
5# 设置一个选择器
6/mvp wand
7
8//wand

指令执行完毕后,背包内会多出一只木斧子,也就是选择器

image-20240106205454743

装备木斧,根据提示,对着框体结构的一角单击左键,再在对角单击右键;

成功的话,会有紫色文字坐标提示;

image-20240109145646205

此时就设置好了这个传送门的框体范围,接下来要创建传送点,并设置这个传送点的名字

1/mvp create world_1

这里我就简单起名为world_1

同理,可以在另一处位置的框体范围,按照同样的方法,创建另一个传送点。

image-20240109150400290

1# 选择框体
2//wand
3
4# 创建第二个世界传送点,名称 world_2
5/mvp create world_2

两个世界的传送点构建完成后,需要建立连接。

此时我们选中的是最后创建的传送点 world_2,需要将其目标连接到 world_1,所以传送门连接设置成这样。

1# 构建 world_2 到 world_1 的连接
2/mvp modify dest p:world_1

这条命令将 world_2传送门的目标连接到了 world_1

同理,我们再选中编辑 world_1,再建立到 world_2 的连接。

1# 选中 world_1
2/mvp select world_1
3
4# 构建 world_1 到 world_2 的连接
5/mvp modify dest p:world_2

至此,这个双向传送门就构建完毕!

最后还需要设置一下玩家权限,否则只有管理员才能通过。

编辑 Multiverse-Portals 的配置文件 config.yml

1cd ./plugins/Multiverse-Portals
2vim config.yml

在传送门的配置文件中找到 enforceportalaccess 值改成 false 就可以让所以玩家通过所有存在的传送门了。另外之前在游戏中设置的传送门信息就存储在 protals.yml 中,不要轻易修改或删除。

箱子上锁 LockettePro

功能介绍:LockettePro 是 Minecraft 服务器端的一个插件,用于提供箱子、门、陷阱门和其他方块的保护功能。该插件允许玩家保护特定的容器或方块,以防止其他玩家访问或交互。

下载地址:https://www.spigotmc.org/resources/lockettepro-for-1-14-to-1-19.74354/

插件配置

编辑 LocketteProconfig.yml 设置文件。

 1block-interfere-placement: true
 2    # 可以防止玩家在锁着的容器附近放漏斗等可以偷出物品的方块。
 3
 4block-item-transfer-in: false
 5   # 防止物品放进容器,关闭
 6
 7block-item-transfer-out: true
 8   # 防止物品拿出容器,关闭
 9
10block-hopper-minecart: true
11   # 可以防止漏斗矿车从锁着的箱子里拿出物品,如果设置为remove的话,漏斗矿车将被直接移除。
12
13lockables: 
14   # 代表可上锁的物品
15   # 如果在lockables中添加'*'(此时需带单引号),则代表添加所有物品。如果物品前附带了一个减号如'-STONE'(此时需带单引号),则代表将本物品例外。
16
17cache-time-seconds: 0
18   # 为缓存时间,默认关闭,单位为秒,如果你的服务器漏斗很多很多的话,建议使用本功能,推荐数值填10秒。

指令列表

 1# 所有/lock指令均可使/lockettepro,/lockette 或 /lockit 替换
 2
 3/lock 行号 玩家名
 4# 修改牌子的用户,玩家默认有这个权限
 5# 玩家需要先右键选中一个牌子才可以使用。
 6
 7/lock reload
 8# 重载插件,权限:lockettepro.reload
 9# 管理员撬锁权限:lockettepro.admin.break
10# 管理员绕过检测使用方块(例如开箱子)权限:lockettepro.admin.use
11# 管理员绕过检测在锁着的方块附近放东西权限:lockettepro.admin.interfere
12# 管理员修改任何人的牌子权限:lockettepro.admin.edit

保护示例

示例:假设 player_1 需要保护自己的箱子或者门,并只允许自己和 player_2 才能打开。

放置保护标志: 首先,装备告示牌(Sign),将其放置在一个你要保护的方块旁边(例如箱子或门)。 LockettePro 会默认添加你打得所有权,一般格式是:

1[Private]
2player_1

在告示牌上的第一行写上 [Private] 或者 [Lockette] 以指示这是一个 LockettePro 的保护标志。

设置权限: 在告示牌上设置权限,确保只有 player_1player_2 能够打开这个箱子或门。在控制台输入命令

12 代表第2
2/lock 2 player_2

此时告示牌上的信息会变更为:

1[Private]
2player_1
3player_2

上述命令的作用是将第一行视为标志行,将 player_1player_2 加入到这个方块的权限列表中。这样只有这两个玩家才能访问这个箱子或门。

如果所有人很多,还可以贴上新的告示牌来增加玩家。

激活保护: 操作完成后,右击告示牌来激活和保存设置。成功保存后,这个方块将会受到 LockettePro 的保护,只有在权限列表中的玩家才能访问或操作它。这样一来,只有 player_1player_2 能够打开和访问这个被保护的箱子或门,其他玩家则无法进行操作。

注: LockettePro 的保护权限对管理员无效。

单人睡觉 OnePlayerSleep

功能介绍:OnePlayerSleep 是 Minecraft 服务器插件,旨在改变游戏中的睡眠系统。传统上,Minecraft 中所有玩家都需要进入床并达成一致,才能将夜晚转变为白天。这个插件的目的是让单个玩家就能够让夜晚转为白天。

下载地址:https://www.spigotmc.org/resources/oneplayersleep.76534/

皮肤补丁 SkinsRestorer

功能介绍:SkinsRestorer 是一个 Minecraft 服务器插件,它允许玩家在服务器上使用自定义皮肤。该插件允许玩家更改其角色的外观,包括皮肤、披风和帽子等。

下载地址:https://github.com/SkinsRestorer/SkinsRestorerX

安装文档:https://skinsrestorer.net/docs/installation

评论
  • Luckperms 权限速查:

    查看所有用户组:lp listgroups

    将用户添加到用户组 member:/lp user <player> parent add member

    查看 member 用户组的所有用户:lp group member listmembers

    查看 member 用户组的所有权限:lp group member permission info

    Reply
  • 使用 find /path/to/directory -type f -size +10M 查看,可以看到 plugins/CoreProtect/database.db 的大小在迅速增长,这是由于 CoreProtect 的日志数据记录较大。需要定期清理。

    解决方法:设置 crontab 定时脚本,定期给服务器发送 co purge 命令清理任务:

    55 7 * * * screen -S mc -X stuff "co purge t:7d^M"

    其中,co purge t:7d 表示仅保留 7 天内的日志数据

    Reply
取消