监狱逻辑 – 非官方更新

监狱逻辑 – 非官方更新

Jail Logic 模组的一个非官方、社区维护的分支,已为较新版本的 Minecraft 更新。

管理

⚠️ 这是 n3mmuss 所制作的 Jail Logic 的非官方分支。

原项目似乎已停止维护,因此本分支的存在是为了让该模组能在较新的 Minecraft 版本上继续使用,并附带一些可选的改进。

原项目的源代码以 CC0 许可证 发布。
本分支以 MIT 许可证 重新分发,以便为后续维护明确署名与贡献条款。

如果原作者针对本分支所支持的版本发布更新,并包含此处提供的修复,则本分支将不再更新。

请勿向原开发者报告问题。请在此处报告。


Jail Mod (Fabric)

Get it on Modrinth Get it on CurseForge

Jail Mod 是一款服务端模组,允许你将玩家囚禁在一个虚拟监狱中,阻止他们与世界交互,直到被释放。它同样适用于单人世界,在启用作弊命令时,主机可以使用监禁命令。

1


主要功能

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

2 3

  • 自动或手动释放:玩家会在设定时间结束后自动获释,管理员也可以手动释放他们。
  • 囚禁原因:可在需要时添加原因。若省略,默认为 Unknown reason。 4
  • 查询剩余时间的命令:被囚禁的玩家可以查看距离获释的剩余时间。 5
  • 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 后,可打开配置文件或搜索内置帮助选项卡。

使用方法:

  1. 建造一座监狱(封闭结构)。

  2. 使用 /jail set x y z 设置监禁位置(例如 /jail set 0 60 0),或站在目标方块上运行 /jail set。

  3. 使用 /jail reload 重新加载配置。

  4. 将某人送入监狱并指定时长和可选原因,例如 /jail imprison playerexample 2m Griefing。如果省略原因,则为 Unknown reason。

  5. 使用 /jail unjail playerexample 或 /unjail playerexample 提前释放玩家。你也可以使用玩家的 UUID;离线玩家将在下次加入时被释放。

前置要求

  • Minecraft 26.3
  • Java 25
  • Fabric Loader
  • Fabric API

安装

  1. 将模组的 .jar 文件放入 Minecraft 服务器的 mods 文件夹。
  2. 启动服务器以生成配置文件。对于单人游戏,将模组安装到 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

被囚禁的玩家可以使用此命令查看剩余时间。