
监狱逻辑 – 非官方更新
Jail Logic 模组的一个非官方、社区维护的分支,已为较新版本的 Minecraft 更新。
⚠️ 这是 n3mmuss 所制作的 Jail Logic 的非官方分支。
原项目似乎已停止维护,因此本分支的存在是为了让该模组能在较新的 Minecraft 版本上继续使用,并附带一些可选的改进。
原项目的源代码以 CC0 许可证 发布。
本分支以 MIT 许可证 重新分发,以便为后续维护明确署名与贡献条款。
如果原作者针对本分支所支持的版本发布更新,并包含此处提供的修复,则本分支将不再更新。
请勿向原开发者报告问题。请在此处报告。
Jail Mod (Fabric)
Jail Mod 是一款服务端模组,允许你将玩家囚禁在一个虚拟监狱中,阻止他们与世界交互,直到被释放。它同样适用于单人世界,在启用作弊命令时,主机可以使用监禁命令。

主要功能
- 临时囚禁:你可以将玩家囚禁一段特定的时间,阻止其与方块、实体和物体(例如熔岩桶或水桶)交互。

- 自动或手动释放:玩家会在设定时间结束后自动获释,管理员也可以手动释放他们。
- 囚禁原因:可在需要时添加原因。若省略,默认为
Unknown reason。
- 查询剩余时间的命令:被囚禁的玩家可以查看距离获释的剩余时间。

- BanHammer 风格的监禁消息:玩家名称为红色,管理员名称为金色,原因和时长为黄色。监禁公告会包含原因与刑期时长。
- 监禁列表:管理员可通过
/jail list查看被囚禁玩家、其剩余时间、原因以及执行囚禁的人员。 - 离线释放:可按名称或 UUID 释放离线玩家。其监禁状态会立即清除,保存的状态将在下次加入时恢复。
- Discord Webhook(可选):将监禁和释放事件发送到 Discord Webhook。在专用服务器上复用 BanHammer Webhook 默认启用,在客户端/单人默认配置中默认禁用。
- BanHammer 风格的 Discord 模板:支持
config/jailmod/discord-messages.json,采用类似 BanHammer 的格式,并自动为新字段打补丁。 - Mod Menu 设置与帮助:编辑客户端默认值以及每个世界的覆盖设置,包括管理员角色、监禁与释放位置、Discord 选项。安装 Mod Menu 和 Cloth Config 后,可打开配置文件或搜索内置帮助选项卡。
使用方法:
建造一座监狱(封闭结构)。
使用
/jail set x y z设置监禁位置(例如/jail set 0 60 0),或站在目标方块上运行/jail set。使用
/jail reload重新加载配置。将某人送入监狱并指定时长和可选原因,例如
/jail imprison playerexample 2m Griefing。如果省略原因,则为Unknown reason。使用
/jail unjail playerexample或/unjail playerexample提前释放玩家。你也可以使用玩家的 UUID;离线玩家将在下次加入时被释放。
前置要求
- Minecraft 26.3
- Java 25
- Fabric Loader
- Fabric API
安装
- 将模组的
.jar文件放入 Minecraft 服务器的mods文件夹。 - 启动服务器以生成配置文件。对于单人游戏,将模组安装到 Minecraft 实例的
mods文件夹。Mod Menu 和 Cloth Config 为可选,安装后启用游戏内设置界面。
可用命令
1. /jail imprison player duration [reason]
- 描述:将玩家囚禁指定时长。原因可选,默认为
Unknown reason。 - 使用者:仅限管理员或服务器 OP。
- 语法:
/jail imprison player_name duration [reason] - 时长单位:
s、m、h、d、w/wk、mo/mth、y/yr,以及复数形式wks/yrs和全称second(s)、minute(s)、hour(s)、day(s)、week(s)、month(s)和year(s)。单位直接跟在数字后(例如10seconds)。纯数字或未知后缀按秒处理。一个月按 30 天计算,一年按 365 天计算。 - 示例:
/jail imprison Steve 300 Griefing、/jail imprison Steve 10m和/jail imprison Steve 2years Breaking blocks。第二个示例使用默认原因。
2. /jail unjail <player name|UUID>
- 描述:在时间结束前手动释放被囚禁的玩家。目标可在线或离线,可通过名称或 UUID 指定。离线玩家的保存状态将在下次加入时恢复。
- 使用者:仅限管理员或服务器 OP。
- 语法:
/jail unjail <player_name|uuid> - 别名:
/unjail <player_name|uuid> - 示例:
/jail unjail Steve或/jail unjail 069a79f4-44e9-4726-a5be-fca90e38aaf5
3. /jail info
- 描述:允许被囚禁的玩家查看距离获释的剩余时间以及囚禁原因。
- 使用者:仅限被囚禁的玩家。
- 示例:
/jail info显示剩余时长(以非零单位表示)、执行囚禁的人员以及原因;例如:"You are jailed for 10 minutes by Alex. Reason: Griefing."
4. /jail list
- 描述:列出被囚禁玩家及其剩余刑期、原因和执行囚禁的管理员。离线被囚禁的玩家也包含在内。
- 使用者:仅限管理员或服务器 OP。
- 示例:
/jail list
5. /jail reload
- 描述:重新加载配置、语言消息和
discord-messages.json,无需重启服务器。 - 使用者:仅限管理员或服务器 OP。
- 示例:
/jail reload此命令重新加载模组配置,在配置文件被修改后非常有用。
6. /jail set
- 描述:设置被囚禁玩家的生成位置。不带坐标时,使用执行玩家当前所在的方块位置。
- 使用者:OP 始终可以使用。当
allow_admin_role_set_jail_position启用时,配置的管理员角色标签也可使用。 - 语法:
/jail set或/jail set x y z - 示例:
/jail set使用你当前所在的方块位置;/jail set 0 60 0显式设置位置。控制台用户必须提供坐标。
监禁期间被阻止的交互
当玩家被囚禁时,他们无法进行以下操作:
- 使用方块,例如门、拉杆或按钮。
- 与实体交互,例如村民或动物。
- 使用熔岩桶或水桶。
- 破坏或放置方块。
自动释放
- 设定时间结束后,玩家将自动从监狱获释。
- 被囚禁期间,玩家可以使用
/jail info命令查看剩余时间。
配置文件
config/jailmod/config.json
此文件会自动生成并更新。在专用服务器上,它是该服务器的活动配置。在单人游戏中,它存储用于新世界的客户端默认值;每个世界可以在其 serverconfig/jailmod/config.json 文件中拥有单独的覆盖设置。Mod Menu 会分别显示 Client Defaults 和 This World 设置,并在未打开世界时禁用世界设置。配置界面还包含打开相关配置文件的按钮和可搜索的帮助选项卡。监禁记录按世界存储在 serverconfig/jailmod/jail_data.json 中;专用服务器使用 config/jailmod/jail_data.json。
admin_roles:授予管理员命令访问权限的标签列表,以逗号分隔,例如admin,moderator。op代表服务器 OP。allow_admin_role_set_jail_position:默认为false。启用后,配置的管理员角色标签可以使用/jail set;OP 始终可以使用。use_previous_position:如果设为true,玩家将在被囚禁前所在的位置获释。如果设为false,他们将在指定位置获释。return_to_last_location:如果为 true,获释的玩家将被传送回他们被囚禁时的确切位置。release_position:如果没有使用其他位置(出生点/最后位置),用于释放玩家的后备坐标,在use_previous_position设为false或return_to_last_location设为false时生效。jail_position:玩家在监禁期间被关押的坐标,包含x、y、z。discord_webhook_url:用于监禁/释放嵌入消息的可选 Discord Webhook。留空则在世界的设置中启用时使用 BanHammer 的 Webhook。use_banhammer_webhook:如果为true且discord_webhook_url为空,Jail Mod 可能会复用 BanHammer 的服务端 Webhook。在专用服务器上默认为true,在客户端/单人默认配置中默认为false。它不会在 Mod Menu 界面中显示。
配置示例:
此示例适用于专用服务器。客户端/单人默认配置中 use_banhammer_webhook 为 false。
{
"_config_guide": "JailMod Configuration Guide: \n- admin_roles: Comma-separated list of roles or tags that grant /jail access. Use \u0027op\u0027 to include server operators.\n- use_previous_position: If true, released players will be teleported to their original spawn point (if return_to_last_location is false or unavailable).\n- return_to_last_location: If true, released players will be teleported back to the exact spot where they were jailed.\n- jail_position: The coordinates where players are held while in jail.\n- release_position: The fallback coordinates for releasing players if no other location (spawn/last) is used.",
"admin_roles": "op",
"allow_admin_role_set_jail_position": false,
"use_previous_position": true,
"return_to_last_location": true,
"discord_webhook_url": "",
"use_banhammer_webhook": true,
"release_position": {
"x": 100,
"y": 65,
"z": 100
},
"jail_position": {
"x": 20,
"y": 64,
"z": 142
}
}
config/jailmod/discord-messages.json
此文件以 BanHammer 风格的格式控制 Discord Webhook 消息模板,并会自动生成/自动打补丁。
sendJailMessage:启用监禁 Webhook 通知。jailMessage:监禁事件的模板。sendUnjailMessage和unjailMessage:手动释放事件的模板。sendAutoUnjailMessage和autoUnjailMessage:自动释放事件的模板。
/jail reload 也会重新加载此文件。
config/jailmod/language.txt
此文件包含游戏内显示的消息,可自定义以匹配服务器的语气或风格。如果文件不存在,会自动生成默认消息。以下是可以修改的部分消息:
jail_player:玩家被囚禁时收到的消息。使用{time}、{reason}和{actor}占位符。 示例:"You have been jailed by {actor} for {time}! Reason: {reason}"jail_broadcast:BanHammer 风格的公开监禁公告。{player}为红色,{actor}为金色,{reason}和{time}为黄色,其他文本为白色。 示例:"Player: {player} has been jailed by {actor}! Reason: {reason}. Expires in {time}"unjail_player_manual:玩家被手动释放时收到的消息。
示例:"You have been manually released from jail!"unjail_broadcast_manual:玩家被手动释放时向服务器所有玩家广播的消息。
示例:"{player} has been manually released from jail!"unjail_player_auto:玩家在时间结束后自动获释时收到的消息。
示例:"You have been released after serving your sentence."unjail_broadcast_auto:玩家在时间结束后自动获释时向服务器所有玩家广播的消息。
示例:"{player} has been released after serving their sentence."block_interaction_denied:告知玩家在监禁期间无法与方块交互的消息。
示例:"You cannot interact with blocks while in jail!"entity_interaction_denied:告知玩家在监禁期间无法与实体交互的消息。
示例:"You cannot interact with entities while in jail!"bucket_use_denied:告知玩家在监禁期间无法使用熔岩桶或水桶的消息。
示例:"You cannot use lava or water buckets while in jail!"item_use_denied:告知玩家在监禁期间无法使用物品的消息。
示例:"You cannot use items while in jail!"block_break_denied:告知玩家在监禁期间无法破坏方块的消息。
示例:"You cannot break blocks while in jail!"jail_time_added_player和jail_time_added_broadcast:增加监禁时间的消息。{added}和{time}是格式化后的时长,因此不要在它们后面添加单位标签。jail_info_message:/jail info显示的消息。{time}仅包含非零的年、月、天、小时、分钟和秒;{actor}是执行囚禁或最近一次延长刑期的人员;{reason}是原因。 示例:"You are jailed for {time} by {actor}. Reason: {reason}"not_in_jail_message:玩家未在监禁中却尝试使用/jail info时显示的消息。
示例:"You are not in jail!"
默认 language.txt 示例:
jail_player=You have been jailed by {actor} for {time}! Reason: {reason}
jail_broadcast=Player: {player} has been jailed by {actor}! Reason: {reason}. Expires in {time}
unjail_player_manual=You have been manually released from jail!
unjail_broadcast_manual={player} has been manually released from jail!
unjail_player_auto=You have been released after serving your sentence.
unjail_broadcast_auto={player} has been released after serving their sentence.
block_interaction_denied=You cannot interact with blocks while in jail!
entity_interaction_denied=You cannot interact with entities while in jail!
bucket_use_denied=You cannot use lava or water buckets while in jail!
item_use_denied=You cannot use items while in jail!
block_break_denied=You cannot break blocks while in jail!
jail_time_added_player=Your jail time has been extended by {actor}. Added {added}. Remaining: {time}. Reason: {reason}
jail_time_added_broadcast={player}'s jail time has been extended by {actor}. Added {added}. Remaining: {time}. Reason: {reason}
jail_info_message=You are jailed for {time} by {actor}. Reason: {reason}
not_in_jail_message=You are not in jail!
使用提示
更改配置或语言消息后,请使用 /jail reload。需要时添加清晰的原因;若省略,默认为 Unknown reason。较旧的语言文件会自动更新,迁移过程中会移除 {time} 或 {added} 后面的单位标签。
使用示例
设置监禁生成位置:
/jail set 0 60 0
因不公平行为囚禁玩家:
/jail imprison Alex 600 Offending another player
这将把 Alex 囚禁 10 分钟,原因为 "Offending another player"。
查询监禁时间:
/jail info
被囚禁的玩家可以使用此命令查看剩余时间。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。