- 版权类型
- 原创
- 语言支持
- 多语言
- 前置组件
- EndStone
- 适配版本(基岩)
- 最新版本
[MD]
# 弧光监狱插件 (ARC Prison Plugin)
[](https://github.com/EndstoneMC/python-example-plugin)
[](https://github.com/EndstoneMC/endstone)
[](https://www.python.org/)
- 一个功能完整的 Minecraft 服务器监狱管理系统,基于 EndStone 框架开发。为您的服务器提供专业级的法律制裁和监狱管理功能。
## 🎯 功能特性
### 📋 核心功能
- **完整监狱系统**: 支持玩家关押、释放、刑期管理
- **智能UI面板**: 直观的图形化管理界面,支持关押和释放操作
- **位置管理**: 设置监狱位置和出狱点,支持跨维度传送
- **自动监控**: 10秒定时检查,防止玩家逃离监狱范围
- **行为限制**: 完全阻止坐牢玩家的破坏性操作
- **多维度支持**: 支持主世界、下界、末地等多个维度
### 🔒 安全防护
- **全方位拦截**: 破坏方块、放置方块、交互操作、命令使用
- **智能监控**: 实时检查玩家位置,超出范围自动传送回监狱
- **防逃系统**: 维度检查 + 曼哈顿距离限制(20格范围)
- **权限管理**: OP权限豁免,便于管理操作
- **自动释放**: 刑期到期自动释放并传送到出狱点
### 🌐 多语言支持
- **中英双语**: 完整的多语言界面支持
- **动态加载**: 支持运行时语言配置切换
- **可扩展**: 易于添加新语言包
## 📦 安装说明
1. 下载插件文件到服务器的 `plugins` 目录
2. 重启服务器或使用插件管理器重新加载
3. 插件将自动创建必要的数据库和配置文件
4. 使用 `/setprisonpos prison` 设置监狱位置开始使用
## 📋 指令详解
### 基础指令
| 指令 | 权限要求 | 语法 | 功能描述 |
|------|----------|------|----------|
| `/prison` | 所有玩家 | `/prison` | 打开监狱管理面板,查看当前坐牢玩家状态 |
| `/setprisonpos` | OP | `/setprisonpos [prison\|release]` | 设置监狱位置或出狱位置 |
| `/jail` | OP | `/jail <玩家名> <时间(分钟)> [原因]` | 将指定玩家关入监狱 |
### 指令详细说明
#### `/prison` - 监狱管理面板
- **普通玩家**: 查看当前所有坐牢玩家的信息,包括剩余刑期和入狱原因
- **OP管理员**: 除查看功能外,还可以:
- 通过UI界面关押在线玩家
- 通过UI界面释放在押犯人
- 可视化设置坐牢时长和原因
#### `/setprisonpos` - 位置设置
```bash
/setprisonpos prison # 将当前位置设为监狱坐标
/setprisonpos release # 将当前位置设为出狱点坐标(可选)
```
- 支持跨维度设置
- 监狱位置为必需设置,出狱位置为可选
- 如果未设置出狱位置,释放时玩家将留在原地
#### `/jail` - 关押指令
```bash
/jail Steve 60 恶意破坏建筑 # 关押Steve 60分钟,原因:恶意破坏建筑
/jail Alex 120 # 关押Alex 120分钟,无具体原因
```
- 时间单位为分钟,必须为正整数
- 原因为可选参数,未填写时显示"未指定原因"
- 关押成功后会向全服广播消息
## 🔧 API 接口文档
插件提供完整的 API 接口供其他开发者调用:
### 核心检查接口
#### `api_is_player_imprisoned(player_name: str) -> bool`
检查指定玩家是否正在坐牢
```python
# 检查玩家是否在监狱中
is_jailed = prison_plugin.api_is_player_imprisoned("Steve")
if is_jailed:
print("Steve 正在坐牢")
```
#### `api_get_player_prison_info(player_name: str) -> dict | None`
获取指定玩家的详细坐牢信息
```python
info = prison_plugin.api_get_player_prison_info("Steve")
if info:
print(f"玩家: {info['player_name']}")
print(f"剩余时间: {info['remaining_minutes']} 分钟")
print(f"入狱原因: {info['reason']}")
print(f"执行者: {info['jailed_by']}")
```
**返回数据结构:**
```python
{
'player_name': str, # 玩家姓名
'prison_time': str, # 入狱时间
'sentence_duration': int, # 原始刑期(分钟)
'sentence_end_time': str, # 刑期结束时间
'remaining_minutes': int, # 剩余时间(分钟)
'reason': str, # 入狱原因
'jailed_by': str # 执行关押的管理员
}
```
### 管理操作接口
#### `api_jail_player(player_name: str, duration_minutes: int, reason: str, jailed_by: str) -> bool`
将指定玩家关入监狱
```python
success = prison_plugin.api_jail_player(
player_name="Steve",
duration_minutes=60,
reason="违反服务器规则",
jailed_by="Admin"
)
if success:
print("关押成功")
```
#### `api_release_player(player_name: str) -> bool`
手动释放指定玩家
```python
success = prison_plugin.api_release_player("Steve")
if success:
print("释放成功")
```
### 批量查询接口
#### `api_get_all_imprisoned_players() -> list`
获取当前所有坐牢玩家的信息列表
```python
prisoners = prison_plugin.api_get_all_imprisoned_players()
print(f"当前共有 {len(prisoners)} 名玩家在坐牢")
for prisoner in prisoners:
print(f"玩家: {prisoner['player_name']}")
print(f"剩余: {prisoner['remaining_hours']}小时{prisoner['remaining_minutes_mod']}分钟")
print(f"在线: {'是' if prisoner['is_online'] else '否'}")
print("---")
```
**返回数据结构:**
```python
[
{
'player_name': str, # 玩家姓名
'player_uuid': str, # 玩家UUID
'prison_time': str, # 入狱时间
'sentence_duration': int, # 原始刑期(分钟)
'sentence_end_time': str, # 刑期结束时间
'remaining_minutes': int, # 剩余总分钟数
'remaining_hours': int, # 剩余小时数
'remaining_minutes_mod': int, # 剩余分钟数(去除小时后的余数)
'reason': str, # 入狱原因
'jailed_by': str, # 执行关押的管理员
'is_online': bool # 玩家是否在线
},
# ... 更多玩家数据
]
```
### API 使用示例
```python
# 完整的监狱管理示例
class MyPlugin(Plugin):
def on_enable(self):
# 获取监狱插件实例
self.prison = self.server.plugin_manager.get_plugin("arc_prison")
def punish_player(self, player_name: str):
# 检查玩家是否已经在坐牢
if self.prison.api_is_player_imprisoned(player_name):
return "玩家已经在坐牢中"
# 关押玩家30分钟
success = self.prison.api_jail_player(
player_name=player_name,
duration_minutes=30,
reason="自动检测到违规行为",
jailed_by="AutoSystem"
)
return "关押成功" if success else "关押失败"
def get_prison_status(self):
# 获取所有在押犯人
prisoners = self.prison.api_get_all_imprisoned_players()
status = {
'total_prisoners': len(prisoners),
'online_prisoners': len([p for p in prisoners if p['is_online']]),
'prisoners_list': prisoners
}
return status
```
## 📊 数据存储
插件使用 SQLite 数据库进行数据持久化:
### 数据库表结构
#### `prison_positions` - 位置信息表
- `prison_x/y/z` - 监狱坐标
- `prison_dimension` - 监狱维度
- `release_x/y/z` - 出狱点坐标
- `release_dimension` - 出狱点维度
- `set_by` - 设置者
- `set_time` - 设置时间
#### `prisoners` - 囚犯信息表
- `player_name` - 玩家姓名
- `player_uuid` - 玩家UUID
- `prison_time` - 入狱时间
- `sentence_duration` - 刑期时长
- `sentence_end_time` - 刑期结束时间
- `reason` - 入狱原因
- `jailed_by` - 执行者
- `is_active` - 是否在服刑中
**数据库文件位置**: `plugins/ARCPrison/prison.db`
## ⚙️ 配置文件
### 语言文件配置
语言文件位于:`plugins/ARCPrison/`
- `CN.txt` - 中文语言包
- `EN.txt` - 英文语言包
### 自定义语言文本
您可以编辑语言文件来自定义所有游戏内提示信息:
```ini
# CN.txt 示例
PRISON_PANEL_TITLE=§6监狱管理系统
JAIL_SUCCESS=§a成功将玩家 §7{0} §a关入监狱 §7{1} §a分钟
RELEASE_SUCCESS=§a成功释放玩家 §c{0}
# ... 更多配置项
```
## 🛡️ 系统要求
- **EndStone**: 0.10 或更高版本
- **Python**: 3.8 或更高版本
- **操作系统**: Windows, Linux, macOS
- **内存**: 建议至少 512MB 可用内存
- **存储**: 约 10MB 磁盘空间
## 🎮 使用场景
### 服务器管理
- 处理恶意玩家和违规行为
- 临时隔离问题玩家
- 维护服务器秩序
### 角色扮演服务器
- 实现完整的法律制裁系统
- 增强游戏沉浸感
- 支持复杂的社会系统
### 小游戏服务器
- 失败惩罚机制
- 临时禁赛功能
- 反作弊措施
## 📝 更新日志
### v0.0.1 (当前版本)
- ✨ 完整的监狱管理系统
- 🎨 可视化管理面板(关押+释放功能)
- 🌍 多语言支持(中英双语)
- 🔒 自动监控防逃系统
- 🔌 完整的API接口
- 📊 SQLite数据库存储
- 🚀 跨维度传送支持
## 🤝 贡献指南
我们欢迎所有形式的贡献!
### 报告问题
- 使用 GitHub Issues 报告 bug
- 提供详细的错误信息和复现步骤
- 包含服务器版本和插件版本信息
### 功能建议
- 在 Issues 中提出新功能建议
- 详细描述功能需求和使用场景
- 讨论实现方案的可行性
### 代码贡献
- Fork 项目并创建功能分支
- 遵循现有代码风格
- 添加必要的测试和文档
- 提交 Pull Request
## 📄 许可证
本项目采用 [MIT 许可证](LICENSE)。您可以自由使用、修改和分发此软件。
## 📞 技术支持
如遇到问题或需要帮助:
- 📧 邮箱:DEVILENMO@gmail.com
- 🐛 提交 GitHub Issue
- 💬 参与项目讨论
---
**弧光监狱插件** - 让您的 Minecraft 服务器拥有完善的法律制裁系统! ⚖️
*Built with ❤️ for the Minecraft community*
[/MD]