• 欢迎加入MineBBS QQ讨论群:点击查看所有的官方讨论群
  • 我们将于近期对服务器进行迁移,服务可能中断至多2日。请各位安排好自己的访问计划,造成不便敬请谅解!
  • MineBBS入站考试已经上线!想要成为【正式会员】解锁更多功能吗?快来参与吧!【点我去看】
弧光核心:自用all in one简单核心插件系统

Python 弧光核心:自用all in one简单核心插件系统 v0.8.5

完成注册/登录后下载
版权类型
原创
版权链接
https://github.com/ARC-Minecraft
Wiki/文档
https://github.com/ARC-Minecraft/EndstoneMC-ARC-Core-Plugin
语言支持
多语言
前置组件
EndStone
适配版本(基岩)
  1. 最新版本
[MD] <div align="center"> # EndStone ARC Core Plugin / EndStone弧光核心 [![Codacy Grade](https://app.codacy.com/project/badge/Grade/2f830615baf347258558dcc2a5ab85a1)](https://app.codacy.com/gh/DEVILENMO/EndstoneMC-ARC-Core-Plugin/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) [![Version](https://img.shields.io/badge/version-v0.8.5-blue)](https://github.com/ARC-Minecraft/EndstoneMC-ARC-Core-Plugin) [![Python](https://img.shields.io/badge/python-3.13+-blue?logo=python&logoColor=white)](https://www.python.org/) [![EndStone API](https://img.shields.io/badge/EndStone_API-0.7+-black)](https://github.com/EndstoneMC/endstone) [![License](https://img.shields.io/github/license/ARC-Minecraft/EndstoneMC-ARC-Core-Plugin)](LICENSE) [![GitHub stars](https://img.shields.io/github/stars/ARC-Minecraft/EndstoneMC-ARC-Core-Plugin)](https://github.com/ARC-Minecraft/EndstoneMC-ARC-Core-Plugin/stargazers) </div> ## 概述 EndStone ARC Core 是一个功能完整的 EndStone (Minecraft 基岩版服务器) 插件,为服务器提供全方位的核心功能模块。该插件包含玩家管理、经济系统、领地管理、传送系统、公告系统、清道夫系统、天眼行为审计等丰富功能,是构建现代化 Minecraft 服务器的理想选择。插件体验服:IP:arcclub.top,端口:19132,你可以在这个服务器试用体验本插件。 ## 作者信息 - **作者**: DEVILENMO - **邮箱**: DEVILENMO@gmail.com - **版本**: 0.8.5 - **API 版本**: 0.7+ - **推荐 Python 版本**: 3.13 ## ✨ 主要功能 ### 🗄️ 数据库管理 - 基于 SQLite 的高性能数据库支持 - 线程安全的数据库连接管理 - 自动创建数据库文件和目录 - 支持复杂查询和事务处理 - **XUID主键系统** - 全面使用XUID作为玩家主键,提升数据一致性和查询性能 - **说明** - 自 v0.2.3 起不再支持从 UUID 到 XUID 的自动迁移,请使用已迁移至 XUID 的数据库或旧版本完成迁移后再升级 ### 🌍 多语言支持 - 完整的国际化系统 - 动态语言文件加载 - 默认支持中文 (ZH-CN) - 可扩展其他语言包 ### 🧭 主菜单与子命令(`/arc`) - **进服自动弹出主菜单**:玩家加入服务器后约 **1 秒**(20 ticks)会 **自动弹出 ARC 主菜单一次**,**无需配置**;可直接 **关闭** 表单继续游玩,亦可随时再输入 **`/arc`** 打开。此项 **不是**「强制登录」——浏览菜单不设密码门槛;敏感操作仍见下文「敏感操作密码验证」。 - 主菜单前几项顺序为:**新手引导 → 传送系统 → 领地系统 → 银行 → 公会 → 每日签到 → 我的信息 → 工具**(含小喇叭与重生)→ …;浏览与一般入口 **无需** 预先输入账户密码;涉及资金与领地等安全步骤见「玩家管理系统」中的 **敏感操作密码验证**。 - **`/arc land`**、**`/arc tp`**、**`/arc bank`**、**`/arc guild`** 分别直接打开 **领地菜单**、**传送菜单**、**银行菜单**、**公会菜单**(若从控制台/命令方块执行,会按 **命令发送者名称** 解析在线玩家,与 `/connecttoserver` 相同机制,便于命令方块代为弹出表单)。进入菜单后,**转账、创建/管理领地、公会创建等敏感操作**仍会按需弹出密码验证(未设密会先引导设密),详见「玩家管理系统」。 ### 👤 玩家管理系统 - **敏感操作密码验证(非进服门禁)**:打开 **`/arc`**、浏览主菜单 **无需** 预先输入密码;**转账、创建或管理领地、公会创建等敏感操作**会在执行前要求 **账户密码验证**。同一 **游戏会话**(自进服至退出)内验证成功 **一次** 即可重复使用;若尚未在数据库中设置密码,会先弹出 **设密(与注册相同流程)** 再继续敏感操作。(进服时主菜单会自动弹出一次,见上文「主菜单与子命令」。) - **会话内验证状态**:已设密的玩家使用 **SHA-256** 存储的密码校验;验证通过后本会话内标记为已验证(修改密码会清除该标记,需重新验证)。语言提示见 **`dist/ARCCore/ZH-CN.txt`** 中 **`SENSITIVE_*`** 等键。 - **注册确认密码**(v0.3.0):首次设密 / 注册时需输入两次密码,一致方可完成。 - **修改密码(我的信息)**:主菜单 **我的信息** →「修改密码」。已设置账户密码时需填写 **当前密码**、**新密码** 与 **确认新密码**(新密码不可与当前密码相同);尚未设置密码时打开与首次注册相同的 **设密 + 确认** 表单(标题为单独提示文案),成功或关闭表单后均回到 **我的信息**。修改成功后,本会话内「敏感操作已验证」状态会清除,之后转账、领地等需用 **新密码** 再验证一次。相关语言键见 `dist/ARCCore/ZH-CN.txt` 中 `CHANGE_PASSWORD_*` - 玩家数据持久化存储(跨服账号:`player_basic_info`;本服档案:`player_local_info`) - 在线状态实时管理 - 玩家加入/离开消息提示 - **免费领地格子**、**OP 标记**、**签到** 均为本服数据,不随 `PLAYER_DATABASE_PATH` / 同步中心跨服覆盖 - **游戏时长 / 进服次数** 写在跨服表 `player_basic_info`,随同步中心或共享库跨服累计 ### 👁️ 天眼系统(Sky Eye,v0.7.6) - **用途**:可选开启的玩家行为审计日志,按自然日写入文本,便于排查与合规留痕 - **配置**(`core_setting.yml`):**`ENABLE_SKY_EYE`**(`True`/`False`,默认关闭)、**`SKY_EYE_MAX_RETENTION_DAYS`**(按文件名日期保留的天数,默认 **7**;更早日期的日志文件会被自动删除;**`0`** 表示不自动删除旧文件) - **存储路径**:**`plugins/ARCCore/sky_eye/`**(目录名对应英文 **Sky Eye**);每日一个文件,文件名 **`YYYYMMDD.txt`**(例如 `20260511.txt`),UTF-8 追加写入 - **记录字段**:时间、行为类型、玩家名、XUID、维度、**坐标**、**主手物品**(`物品IDx数量`,空手为 `empty`)、`detail`(如方块类型、死亡原因、实体类型、进服是否新玩家等) - **已挂钩行为**:进服 / 离服、方块破坏与放置、对方块交互与无方块交互、与实体交互、玩家死亡(含死因原始字符串);关闭开关时不写盘 ### 💰 银行经济系统 - 完整的货币管理系统,**金钱精确到分**(float 存储,两位小数) - 玩家余额存储和查询 - **升级转账功能** - 两步式转账流程,先选择玩家再输入金额,支持小数金额 - 富豪榜排行系统 - 管理员金钱操作命令 - 实时余额变动提醒 - **财富榜首富头衔(v0.4.0)** - 配置 `RICHEST_TITLE_NAME`(默认「首富」)、传奇稀有度;金钱变动后自动刷新财富榜第一;若首富易主则撤销旧头衔并授予新首富;可在 **OP 面板 → 经济管理 → 经济参数配置** 中修改 ### 🏠 领地管理系统 - **三维领地** - 按 min/max X/Y/Z 圈地,按体积计价;粒子显示立方体边界(与「进入领地」时边界粒子一致) - **创建领地流程** - 菜单「创建新领地」后按提示 **交互四个方块**:水平矩形两角(取 X/Z)→ 最低 Y → 最高 Y,完成后进入 **购买确认面板**(可再次播放边界粒子、用六个整数框修改 min/max X/Y/Z、确认购买);亦可用 **「手动输入六向坐标」** 或 **`/land pos1`、`/land pos2`、`/land buy`** 快捷选点 - **待购面板** - 购买前可随时用 **`/land buy`** 重新打开同一面板;该指令为打开面板而非直接扣款 - **领地保护机制**(防止破坏/建造/方块互动) - **免费领地格子系统** - 新玩家可获得免费格子,购买领地时自动减免费用 - **领地授权系统** - 可将领地权限授权给其他玩家 - **子领地系统** - 领地主人可在领地内创建子领地并授权他人;子领地为三维、不可重叠、不可超出父领地;交互时先判子领地权限再判父领地 - **公共领地「允许圈私人领地」** - 公共领地可开启后,玩家可在其内购买私人领地;同一位置优先按私人领地权限判定 - **公共领地三级优先级** - 字段 `public_priority`(1/2/3,**3 最高**,默认 1)。高优先级公共可覆盖低优先级公共;同级不可重叠。生效顺序:**私人/公会 > 公共(3>2>1)**;私人子领地权限仍先于父私人领地。创建公共领地时 OP 选择等级;OP 公共领地设置中可修改(若与同级/更高公共冲突则拒绝) - **公共领地「拦截生物生成」** - OP 公共领地设置中可开启;开启后通过 `ActorSpawnEvent` 取消该公共领地内**除玩家外的全部实体**生成(含模组生物,不限原版 `Mob`);数据库字段 `block_actor_spawn`,**默认关闭** - **领地移交功能** - 可将领地转移给其他玩家 - **私人领地上架出售(v0.7.4)** - 领地详情中 **「出售领地(上架/改价/下架)」**:主人可设置正数标价并上架;其他玩家 **进入** 该私人领地时(非主人)在原有进入提示与边界粒子后,会收到 **购买表单**(领地名、标价、当前主人、购买/关闭)。购买时扣买家款、过户给买家、`owner_paid_money` 记为成交价,**清空授权列表**;卖家在线会收到成交通知。数据库 `lands` 表新增 **`for_sale`**、**`sale_price`**(旧库启动时自动 `ALTER`)。**公共领地 / 公会领地** 不适用此流程;若向卖家入账失败会尝试 **回滚过户并退款**(极端失败会提示联系管理员) - **私人领地成交增值税(v0.7.6 文档化)** - 配置 **`LAND_SALE_VAT_RATE`**(`core_setting.yml`,默认 `0.1` 即 10%,取值 **0~1**;**`0` 关闭**)。成交时 **买家按标价全额付款**;**卖家实收** = 成交价 − 增值税额。**税基(溢价)** = `max(0, 成交价 − 过户前 owner_paid_money)`;**增值税额** = 税基 × 税率(金额按分四舍五入)。平价或低于买入价成交不产生增值税。卖家在线提示中含成交价、增值税、实收(语言键 **`LAND_SALE_BUY_SUCCESS_SELLER`** 等,见 `ZH-CN.txt`)。**OP 重载配置** 后刷新税率 - **爆炸保护设置** - 可单独控制领地内是否允许爆炸;全局开关 **`BLOCK_ALL_EXPLOSIONS`** 关闭时,按领地 **`allow_explosion`** 做 **逐方块** 保护(v0.8 修复拦截流程,见更新日志) - **方块互动开放设置** - 可设置领地对所有人开放方块互动(如开箱子、按按钮等) - **生物保护系统** - 可控制领地内是否允许与生物交互和攻击生物 - **展示框权限设置** - 可禁止领地对展示框/发光展示框及各材质展示架的互动与破坏(默认禁止,防止他人取物);**关闭展示框权限时**,领地主人、授权玩家、子领地权限持有者及(若开启「公会成员可交互」)同公会成员 **仍可** 操作展示框/架,不受此项拦截 - **领地范围重设(v0.7.5+)** - 私人/公会领地在 **我的领地 → 领地详情 →「重设领地范围」**;公共领地在 **OP 领地管理 → 领地详情 →「重设公共领地范围」**。流程与 **新建领地相同**(四角选点或手动改坐标),确认面板显示 **原/新体积与补差价或退差价**:私人领地扩大时优先消耗 **免费领地格** 再按 `LAND_PRICE` 补款,缩小按 `LAND_SELL_REFUND_COEFFICIENT` 退款并调整 `owner_paid_money`;**OP 改私人领地** 不扣款;**公会领地** 仅会长/管理者,扩大消耗 **公会公共贡献点**,缩小退还公共池;**公共领地** 仅 OP、不扣款。确认后更新 `lands` 边界、**重建 chunk 索引**(`land_id` 不变),传送点若超出新范围会 **自动移到新范围中心(Y 取新 min_y)**;**上架出售中** 不可重设;**子领地** 若超出新长方体范围会阻止并提示先调整子领地。文案键见 `dist/ARCCore/ZH-CN.txt` 中 `LAND_RESIZE_*` - **全局禁用方块(v0.6.0)** - 新增 `DISABLED_BLOCKS` 配置;列表内方块对非 OP 玩家禁止放置与交互,OP 跳过检查 - **领地尺寸限制** - 可配置领地最小尺寸,防止创建过小的领地(默认长宽必须都大于5格) - **领地信息查看功能** - 可查看当前位置的详细领地信息 - **领地边界可视化** - 用粒子效果显示领地边界范围 - **创建领地重叠提示** - 与已有领地重叠时提示与哪些领地重叠 - 领地传送点设置和管理 - 领地重命名功能 - 可配置的领地价格和最小距离 - 智能传送命令生成(自动处理包含空格的玩家名) ### 🎯 成就系统(已拆至独立插件) - **独立插件**:`endstone_arc_achievement` / plugin id **`arc_achievement`**,仓库目录 `EndstoneMC-ARC-Achievement-Plugin`,数据目录 `plugins/ARCAchievement/` - **核心职责**:菜单入口转发(检测到插件时显示「我的成就」「成就管理」,执行 `/ach`、`/achop`);头衔解锁与发奖仍走本核心 API - **进度库**:`player_achievement_stats` 仍使用 arc_core 的 SQLite(与拆分前同一库) - **定义文件**:`plugins/ARCAchievement/achievements.json`(首次启用时若仅有旧版 `plugins/ARCCore/achievements.json` 会自动复制) - **说明**:未安装 `arc_achievement` 时,核心不显示成就入口、不统计击杀成就 ### 📅 每日签到(v0.4.0 起,v0.4.2 / v0.6.0 增强) - **可签到条件**:本服 `player_local_info.last_checkin_date` 与服务器本地日期(YYYY-MM-DD)不同即可在主菜单 **每日签到**(**每服独立**,不跨服共享) - **连续签到奖励(v0.6.0)**:支持按连续签到天数发放递增金钱奖励(可配置步长) - **前几名签到奖励(v0.6.0)**:支持配置每日前 X 名签到玩家的额外金钱与额外物品奖励 - **奖励**:配置存款 + 按权重 **不放回** 随机物品;每日抽取条数在 **`CHECKIN_REWARD_PICK_MIN`~`CHECKIN_REWARD_PICK_MAX`** 之间随机(未配置区间时沿用 `CHECKIN_REWARD_PICK_COUNT`) - **统计与排行数据(v0.4.2)**:`total_checkin_count` 累计签到次数、`last_checkin_at`(ISO8601)记录最近一次签到时刻,用于 **当日签到先后** 与 **累计签到榜** 排序 - **全服广播(v0.4.2)**:签到成功后广播完成提示;**今日签到先后**(当日人数 ≤10 时列出全员;>10 时广播「最早前 10」与「最晚前 10」两段);**累计签到榜前 10**;聊天中 **按行发送**,避免名次挤成一行难读 - **配置**:`CHECKIN_DAILY_MONEY`、`CHECKIN_REWARD_LIST`(JSON 数组,每项 `[物品ID, 数量, 权重]`);**OP 面板 → 签到配置**(总览 + 存款/条数表单 + 奖励列表管理,见 OP 面板说明) - **配置键速览(v0.6.0)**: - `CHECKIN_CONTINUOUS_DAYS_MONEY_INCREMENT`:连续签到金钱递增步长(连续第 N 天在基础金额上额外加 `(N-1)*步长`) - `CHECKIN_TOP_RANK_LIMIT`:每日前 X 名签到人数(设为 `0` 即关闭前几名奖励) - `CHECKIN_TOP_RANK_BONUS_MONEY_STEP`:前 X 名额外金钱步长(名次越靠前奖励越高) - `CHECKIN_TOP_RANK_BONUS_ITEM_COUNT`:前 X 名额外物品条数(每位前 X 名玩家额外获得的条目数) - `CHECKIN_REWARD_PICK_MIN` / `CHECKIN_REWARD_PICK_MAX`:每日随机抽取物品奖励条数区间 - **签到公会贡献点(v0.7.3)**:`CHECKIN_GUILD_CONTRIBUTION_POINTS`(默认 `10`)— 签到成功时,若玩家 **已加入公会**,则按 `GuildSystem.add_contribution_by_xuid` 同时增加 **私人贡献点** 与 **公会公共贡献点**;未加入公会则跳过(不报错)。设为 `0` 可关闭。可在 **OP 面板 → 签到配置 → 配置存款与随机条数** 表单最后一项编辑,或直接改 `core_setting.yml` ### 💀 击杀生物金钱奖励(v0.4.0) - 独立配置文件 **`kill_reward.txt`**(与 `core_setting.yml` 同级目录),格式:`minecraft:creeper=10`(击杀一个苦力怕获得 10 元) - 首次击杀某种生物且配置中无该类型时,自动追加 `类型ID=0`,不提示;仅当金额 **> 0** 时提示「击杀了 xx 获得 xx 元」 - 显示名优先通过 **`entity_display_name.txt`** 中 `entity.minecraft.xxx.name` 等键解析(`EntityDisplayNameManager.get_display_name_for_entity_type`) - **击杀 → 公会贡献点(v0.7.5)**:`KILL_REWARD_GUILD_CONTRIB_RATIO`(默认 `0`)— 玩家在已加入公会时,每次成功扣发击杀金钱奖励后按 `floor(reward * ratio)` 额外获得公会贡献点;同步累加 **私人贡献点** 与 **公会公共贡献点**。例如 `kill_reward.txt` 配置 `minecraft:creeper=10` 且比例为 `0.5`,则击杀苦力怕在获得 10 元的同时获得 5 公会贡献点。比例 `0` 或 `floor(reward*ratio) <= 0` 或玩家未加入公会时静默跳过 ### 📍 传送系统 - **私人传送点 (Home)** - 玩家可设置多个传送点 - **公共传送点 (Warp)** - 管理员可创建公共传送点 - **跨服传送(v0.6.0)** - 数据库维护跨服目标;`/connecttoserver` **无参数**时打开跨服目标 **选择面板**,有参数时按名称执行传送;控制台/命令方块执行时可通过发送者名称解析在线玩家(与下列命令解析方式一致) - **玩家传送请求 (TPA/TPHERE)** - 玩家间传送请求;**被请求方收到请求时自动弹出表单**(v0.4.2),可直接同意或拒绝,不再仅依赖聊天提示 - **死亡回归系统** - 玩家死亡后可传送回死亡地点;**死亡坐标在同一次服务器运行期间保持**(退出游戏不再清空;实际传送成功后仍会清除记录) - **随机传送系统 (v0.1.12新增)** - 随机传送到指定范围内,自动附加缓降(羽落)效果(**30 秒**,v0.4.1 起;此前为 10 秒) - **传送付费系统 (v0.1.12新增)** - 每种传送类型可独立配置收费,支持余额检查 - **跨维度传送支持** - 支持在主世界、下界、末地之间自由传送 - **智能维度处理** - 自动使用 `execute in <dimension> run tp`;原版三维度用短名(`overworld`/`nether`/`the_end`),自定义维度用完整 `namespace:id` - 传送倒计时提示 ### 💴 商店系统 - **ushop插件适配** ,如果你安装了 `ushop` ,弧光核心的主菜单中会有 "商店" 按钮 - **arc_button_shop适配** - 新增对arc_button_shop玩家按钮商店的集成支持,可通过主菜单直接访问按钮商店功能,提升玩家开店体验 ### 📈 股票系统 - **up_and_down插件适配** - 新增对up_and_down股票插件的集成支持 - 在主菜单中新增"证券交易所"按钮,玩家可直接访问股票交易功能 - 提供便捷的股票系统入口,简化玩家投资操作流程 ### 📢 公告系统 (v0.1.2新增) - 定时循环播放公告消息 - 支持多条公告轮播 - **动态占位符支持**: - `{date}` - 当前日期 (年-月-日) - `{time}` - 当前时间 (小时:分钟) - `{online_player_number}` - 当前在线玩家数 - 可配置公告发送间隔 - 从 `broadcast.txt` 文件读取公告内容 ### 🧹 清道夫系统 (v0.1.2新增) - 定时自动清理掉落物 - 可配置清理时间间隔 - 清理前10秒倒计时警告 - 清理过程状态提示 - 可通过配置开启/关闭 ### 🎊 新人欢迎系统 (v0.1.4新增) - **新玩家自动识别** - 基于数据库记录智能判断新玩家 - **自定义欢迎消息** - 通过 `newbie_welcome.txt` 文件设置欢迎内容 - **自动执行指令** - 通过 `newbie_commands.txt` 文件配置新人自动执行的指令 - **动态玩家名替换** - 指令中的 `{player}` 占位符自动替换为新玩家名称 - **数据库自动初始化** - 新玩家加入时自动创建基础数据和经济账户 - **初始资金设置** - 新玩家自动获得配置中设定的初始金钱 - **UTF-8 编码支持** - 完全支持中文和特殊字符 - **错误处理机制** - 文件读取失败不影响插件正常运行 ### 🔐 OP状态追踪系统 (v0.1.4新增) - **OP状态持久化** - 记录在本服表 **`player_local_info.is_op`**(**不跨服同步**,每服独立) - **离线状态查询** - 即使玩家离线也能查询其本服 OP 状态 - **自动状态同步** - 玩家加入时自动检查并更新本服 OP 状态 - **金钱排行榜隐藏** - 可配置在金钱排行榜中隐藏 OP 玩家 ### 🛡️ 出生点保护 - 可配置的出生点保护范围 - 防止玩家在出生点附近建筑/破坏 - 多维度出生点支持 ### ⚙️ OP 管理面板(v0.4.0 整理) - **主菜单顺序**(自上而下):重载配置 → **工具** → **经济管理** → 领地管理 → 传送管理 → 成就管理(需安装 `arc_achievement`)→ 签到配置 → 邀请奖励配置 → 头衔管理 → 返回 - **工具**:切换游戏模式、清除掉落物、记录坐标 1/2、调试模式、执行命令(`@p1`/`@p2`、留空重复上次命令) - **经济管理**(原「金钱管理」):**增减在线玩家存款**;**经济参数配置** 写入 `PLAYER_INIT_MONEY_NUM`、`HIDE_OP_IN_MONEY_RANKING`、`RICHEST_TITLE_NAME`(与 `core_setting.yml` 玩家经济段一致) - **领地管理**:管理所有领地、管理脚下领地、重建领地区块映射;**公共领地** 详情内可 **重设公共领地范围**(与玩家重设流程一致,不扣款)(返回统一回到领地管理子菜单) - **传送管理**:**管理公共传送点**(创建/删除 Warp);**传送参数配置**(`MAX_PLAYER_HOME_NUM`、随机传送开关/中心/半径、各类传送费用等,与 `core_setting.yml` 传送段一致) - 邀请奖励配置、**签到配置**(v0.4.2:总览展示当前存款/随机条数区间/奖励条目数;**配置存款与随机条数** 弹窗表单,v0.7.3 起含 **每日签到公会贡献点**;**配置物品奖励列表** 支持按条目进入编辑/删除与新增)、头衔管理、成就管理 - **重载配置** - 重载 `core_setting`、广播、语言、**entity_display_name.txt**、**kill_reward.txt** 等 - **调试模式**(v0.3.0):开启后,在方块破坏/放置、方块交互、生物攻击、生物交互时向该 OP 发送聊天调试消息(事件类型、目标、维度、位置) ### 🏷️ 头衔系统(v0.3.0,表结构 v0.7.1) - **聊天头衔展示** - 远古 QQ 风格:首行 `[头衔]玩家名(年.月.日-时:分):`,下一行消息内容;`[头衔]玩家名` 加粗并按稀有度上色(MC 格式码 §l、§r、§f/§9/§d/§6/§c),「玩家」前缀可在语言文件中配置(如英文 `Player-`) - **数据(v0.7.1)** - 玩家解锁时间仅存 **`player_title_unlock_time`**(`xuid`、`title`、`unlocked_at`);已移除仅作历史兼容的 **`player_title_extra`**。若旧库中仍有该表可手动 `DROP TABLE IF EXISTS player_title_extra;` - **头衔属性** - 每个头衔支持:**稀有度**(普通/稀有/史诗/传奇/神话,对应白/蓝/紫/橙/红)、**头衔介绍**、**解锁时间**(解锁时记录,默认头衔在首次进服或首次获得时记录;已进服但尚未有默认头衔的玩家在下一次进服时补发并记录时间)、**解锁奖励**(金钱 + 物品列表「物品ID 数量」) - **默认头衔** - 配置 `DEFAULT_TITLE`(逗号分隔),**进服时**为每位玩家写入解锁记录(与成就无关);默认稀有度为普通,介绍与奖励为空,OP 可在头衔属性管理中修改。 - **OP 专属头衔** - 配置 `OP_TITLE`(单个),仅 OP 拥有;非 OP 进服时若正佩戴该头衔则自动解除 - **头衔管理(玩家)** - 主菜单「我的信息」→「头衔管理」:选择佩戴/不佩戴(同入口下另有「修改密码」,见上文 **玩家管理系统**) - **OP 头衔管理** - OP 面板→「头衔管理」:**头衔属性管理**(编辑各头衔的稀有度、介绍、解锁奖励)、**创建新头衔**(名称 + 稀有度 + 介绍 + 奖励)、**给所有玩家添加头衔**(选择已有头衔,为当前数据库内所有玩家解锁,新人不会自动获得)、**给玩家单独添加头衔**(先输入玩家名,再选择要添加的头衔);解锁时若玩家在线则发放该头衔的解锁奖励(金钱与物品) - **API** - 见下文「API 接口」:`api_unlock_title`、`api_set_title_definition`、`api_give_player_items` 等(供 `arc_achievement` 等插件调用) - **解锁头衔自动佩戴(v0.4.0)** - 通过 `api_unlock_title` 等途径解锁头衔时,若当前未佩戴任何头衔,则自动佩戴新解锁的头衔 ### 🏰 公会系统(v0.7.0;v0.7.2 拓展规模与贡献点;v0.7.3 浏览与入会审批) - **模块**:`GuildSystem.py`;表 **`guilds`**、**`guild_members`**(每名玩家最多归属一个公会);**`guild_invites`** 表仍保留,供历史数据或旧版待处理邀请读取,**当前版本的在线邀请不再写入该表** - **入口**:主菜单 **公会**,或 **`/arc guild`**(菜单内 **创建公会** 等敏感步骤需按上文完成密码验证) - **创建公会**:消耗可配置 **`GUILD_CREATE_COST`**(默认 `100000`);公会名唯一、可选简介;创建者即为 **会长(owner)** - **职级**:**会长**、**管理者(manager)**、**成员(member)** — 会长可踢管理者与成员、变更职级、解散公会;管理者可邀请与踢出普通成员;成员可退出 - **在线邀请(v0.7.0)**:**仅邀请当前在线且未加入任何公会的玩家** — 邀请方在列表中点选玩家名,被邀请方 **立即弹出接受/拒绝表单**,确认后直接写入成员表,**无需入库待处理邀请** - **公会规模(v0.7.2)**:每个公会有 **小型 / 中型 / 大型** 三档规模等级,新建公会默认 **小型**;各档成员人数上限可在 `core_setting.yml` 中通过 **`GUILD_SIZE_SMALL_MAX`**、**`GUILD_SIZE_MEDIUM_MAX`**、**`GUILD_SIZE_LARGE_MAX`** 配置(默认 10 / 20 / 40)。邀请与接受邀请均会校验当前规模容量,超过上限直接报 **`GUILD_FULL`** 错误 - **公会规模升级(v0.7.2)**:会长 / 管理者可在 **我的公会 → 升级公会规模** 中花费 **公会公共贡献点** 升级;升级消耗在 `core_setting.yml` 中通过 **`GUILD_UPGRADE_TO_MEDIUM_COST`**(默认 `10000`)、**`GUILD_UPGRADE_TO_LARGE_COST`**(默认 `100000`)配置;仅可由低向高升级(small→medium / large、medium→large);OP 在 **OP 面板 → 公会管理** 中可绕开贡献点直接升级或降级规模(降级时若当前人数已超过目标上限会被拒绝,且不会退还任何贡献点);规模变更后会自动刷新该公会全体在线成员的头顶名(颜色随之变化) - **公会改名(v0.7.2)**:会长可在 **我的公会 → 公会改名** 中输入新公会名(与创建公会一致:自动剥离 §X 颜色码、限长 32、去首尾空白);新名 **不能与当前公会同名(去色后比较)**,**不能与其它公会重名**;改名费用由 `core_setting.yml` 中 **`GUILD_RENAME_COST`** 配置(默认 `0` 即免费),费用 > 0 时改名失败会自动回滚扣款;改名成功后立即刷新全体在线成员的头顶名 - **公会名颜色与防注入(v0.7.2)**:聊天、玩家头顶 `name_tag`、`get_player_name_by_xuid(..., True)` 等展示名中的 `[公会名]` 前缀会按公会规模上色 — **小型 §h / 中型 §s / 大型 §p**(可在语言文件中通过 `GUILD_SIZE_TIER_COLOR_SMALL / MEDIUM / LARGE` 覆盖)。`GuildSystem` 在创建公会、改名、按名查公会、读取公会、列出待处理邀请等所有出口处都会通过正则 **统一剥离 §X 格式码**(含残留的孤立 §),即便玩家在公会名中尝试粘贴 MC 颜色码也会被消除;旧库内若残留过格式码也会在读取时自动清洗。**创建 / 改名表单提交后**:若玩家输入的公会名包含 §X,会先静默剥离再入库,并通过 `GUILD_NAME_COLOR_STRIPPED_HINT` 向玩家发出「颜色码已被自动移除」的提示;若输入仅由颜色码组成,会按 `GUILD_INVALID_NAME` 拒绝并附带同一提示 - **公会贡献点(v0.7.2)**: - **私人公会贡献点**:保存在 `guild_members.contribution`;玩家通过 **API** 或 **每日签到(v0.7.3,见签到章节)** 等途径累加;**退出 / 被踢 / 公会解散** 时该玩家私人贡献点随成员行删除而 **清零** - **公共公会贡献点**:保存在 `guilds.total_contribution`;玩家每次获得私人贡献点时同步累加到所在公会公共值;**成员退出/被踢时公共值不会减少**(仅在公会解散时随公会行一并销毁);当前 UI 中可被「升级公会规模」消耗 - 玩家加入新公会时私人贡献点从 0 开始;新公会的公共贡献点也从 0 开始 - **对外插件接口(查询 + 发放)**:按玩家名可继续用 `api_get_player_guild_info`、`api_add_guild_contribution`(私人与公共同时 +points)。按公会 id 请用 **`api_get_player_guild_id`**、**`api_get_guild_info`**、**`api_get_guild_total_contribution`** / **`api_change_guild_total_contribution`**、**`api_get_member_guild_contribution`** / **`api_change_member_guild_contribution`**(私人点单独增减)、**`api_list_guild_members`**。详见下方「公会系统 API」 - **底层消费接口**:`GuildSystem.consume_guild_contribution(guild_id, points)`(仅扣减公共值,不影响私人值),供领地等系统消耗公共贡献点 - **全部公会浏览与入会(v0.7.3)**:主菜单 **公会 → 查看全部公会** — 列表按 **规模等级降序、同规模按公共贡献点降序**;支持 **按名称搜索**、分页;点选公会仅 **预览**(名称、简介、规模、人数/上限、公共贡献、入会说明);**无公会** 玩家可 **申请加入 / 加入**(取决于 **入会审核**);**已是本会成员** 仅提供 **我的公会** 跳转。会长 / 管理者在 **我的公会 → 入会审核设置** 中开关审核,在 **入会申请** 中处理待审。相关数据表:`guild_join_requests`、`guilds.join_requires_approval` - **跨服同步**:与 **`ENABLE_SYNC_CLIENT`** 互斥。文件方式下在 `core_setting.yml` 配置 **`GUILD_DATABASE_PATH`** 为各服可访问的 **同一 SQLite 文件路径**(留空则使用 `DATABASE_PATH` 主库);远程客户端方式下通过 **`SYNC_CLIENT_SYNC_GUILD`** 控制是否同步公会数据 - **展示名统一**:聊天、玩家头顶 **`name_tag`**、`get_player_name_by_xuid(..., return_with_title=True)` 等为 **`[公会前缀][头衔]玩家名`**:有公会时前缀为带 MC 颜色码的 **`[公会名]`**(与「普通」稀有度头衔同色);无公会时为 **`§f[无公会]§r`**(白色),再接头衔段与游戏名 - **数据库平滑升级**:插件加载时若旧库 `guilds` / `guild_members` 缺少 `size_tier` / `total_contribution` / `contribution` 列,会自动 `ALTER TABLE` 补齐(默认值:`size_tier='small'`、其余为 `0`),无需手动迁移 ### 🔄 跨服数据同步(v0.8) - **用途**:在多服架构下,让玩家账号级数据、经济、头衔、公会等在多个 ARC Core 实例之间保持一致 - **游戏服二选一(互斥)**: - **方式 A · 远程客户端**:**`ENABLE_SYNC_CLIENT=True`**,连接同步中心(**`SYNC_SERVER_IP`** + **`SYNC_CLIENT_PORT`**),首次连接全量拉取、之后接收 **`PUSH_NOTIFY`** 推送 - **方式 B · 共享文件**:**`ENABLE_SYNC_CLIENT=False`**,通过 **`PLAYER_DATABASE_PATH`**、**`PLAYER_ECONOMY_DATABASE_PATH`**、**`PLAYER_TITLE_DATABASE_PATH`**、**`GUILD_DATABASE_PATH`** 指向同一 SQLite 文件 - **同步中心(可选)**:某一实例可设 **`ENABLE_SYNC_SERVER=True`** 监听 **`SYNC_SERVER_PORT`**(部署上常与 FRP **19135** 对应),供其他游戏服以客户端连接;与上述 A/B 消费方式独立 - **分项同步开关(仅远程客户端)**:**`SYNC_CLIENT_SYNC_PLAYER`**、**`SYNC_CLIENT_SYNC_ECONOMY`**、**`SYNC_CLIENT_SYNC_TITLE`**、**`SYNC_CLIENT_SYNC_GUILD`** 可单独开关;关闭的类别不会拉取全量数据,也不会接收推送。若 A 与 B 同时配置,插件 **以远程客户端为准** 并忽略文件路径 - **玩法配置以同步中心为准(v0.8.5,仅方式 A)**:开启对应分项后,从服连接同步中心时会拉取并覆盖该类别的玩法配置(写入本机 `core_setting.yml`)。例如同步经济则统一 **初始金钱 / 签到存款 / 传送与圈地价格**;同步公会则统一 **创建费用 / 规模上限 / 升级贡献点**。主服 OP 改配置或重载后会推送给已连接从服。本机路径、端口、`SYNC_CLIENT_*`、清道夫、出生点保护等仍各服独立。**方式 B(共享文件)不会自动同步配置文件**,需自行保证各服一致,或改用远程客户端 - **模块**:`sync_protocol.py`、`sync_server.py`、`sync_client.py`、`sync_config.py` - **可同步数据表**:跨服玩家账号信息(`player_basic_info`)、经济(`player_economy`)、头衔(`title_definitions` / `player_title_unlock_time` / `player_title_equipped`)、公会(`guilds` / `guild_members` / `guild_invites`) - **本服本地表(不同步)**:**`player_local_info`** — `is_op`、剩余免费领地格、**签到**(每服独立)。始终写在本服 **`DATABASE_PATH`**,即使配置了 `PLAYER_DATABASE_PATH` 也不会进共享库 - **QQ 群消息**:跨服 QQ 互通由 **AstrBot 弧光 EndStone 消息中枢** + **endstone-arc-qq-sync-astrbot** 负责;ARCCore **不再**经 SyncServer 做 QQ 事件中继。死亡播报调用本机 QQ Sync 的 `api_send_event("death", …)`;成就等可用 `custom` - **启动迁移**:签到迁入本服表;时长 / 进服次数保留在跨服 `player_basic_info` ### ⏱️ 游戏时长统计(跨服) - 表:**`player_basic_info`**(`total_playtime` 秒、`session_count`、`last_join_time` / `last_quit_time`) - 进服 / 离服自动记账;关服时结算在线会话;随 SyncServer / 共享库跨服累计 - 对外 API:**`api_get_player_playtime(raw_player_name="", xuid="")`**,供 QQ Sync `/who` 与进离服播报查询 ### 🔌 插件 API 系统 - **统一玩家标识** - 多数接口同时支持游戏名与 **xuid**(填一个即可,xuid 优先);旧的只传玩家名的调用仍可用 - **经济系统 API** - 查询/增减金钱、财富排名;变动接口可返回结构化结果 - **头衔系统 API** - 解锁/查询/列出定义、按 xuid 解锁、发放物品等(供成就等弧光系列插件调用) - **领地系统 API** - 坐标生效领地、玩家/公会领地列表、静默权限检查 - **传送系统 API** - 传送在线玩家到坐标 / Home / 公共传送点,并列出 Home 与 Warp - **公会系统 API** - 按公会 id / 玩家 xuid 查询与单独增减公共、私人贡献点 - **玩家解析 API** - `api_get_player_xuid_by_name` / `api_get_player_name_by_xuid` - **游戏时长 API** - `plugin.api_get_player_playtime(...)` 查询跨服累计时长与进服次数 - **新手引导 API** - `plugin.api_get_newbie_guide_text()` 返回 `newbie_welcome.txt` 全文(供大模型聊天等插件使用) - **线程安全设计** - 支持多插件并发调用 - **错误处理机制** - 自动处理异常情况 - **详细文档支持** - 提供完整的使用示例 - **调用入口**:`server.get_plugin("arc_core")`(与 pyproject entry-point 一致) ## 命令列表 | 命令 | 描述 | 权限 | 用法 | |------|------|------|------| | `/arc` | 打开 ARC Core 主菜单 | 默认 | `/arc` | | `/arc op` | 直接打开 OP 面板(仅 OP) | OP | `/arc op` | | `/arc land` | 直接打开领地系统菜单 | 默认 | `/arc land` | | `/arc tp` | 直接打开传送系统菜单 | 默认 | `/arc tp` | | `/arc bank` | 直接打开银行菜单 | 默认 | `/arc bank` | | `/arc guild` | 直接打开公会菜单 | 默认 | `/arc guild` | | `/pos1` | 记录当前坐标为坐标 1(OP 快捷,对应 OP 面板记录坐标 1) | OP | `/pos1` | | `/pos2` | 记录当前坐标为坐标 2 并打开 OP 面板(OP 快捷) | OP | `/pos2` | | `/updatespawnpos` | 更新当前维度的出生点位置 | OP | `/updatespawnpos` | | `/suicide` | 自杀命令 | 默认 | `/suicide` | | `/spawn` | 传送到出生点 | 默认 | `/spawn` | | `/land pos1` | 领地选点 1(记录当前站立方块坐标) | 默认 | `/land pos1` | | `/land pos2` | 领地选点 2 并打开待购面板 | 默认 | `/land pos2` | | `/land buy` | 打开待购领地购买面板 | 默认 | `/land buy` | | `/connecttoserver` | 无参数时打开跨服目标列表;有参数时按名称传送 | 默认 | `/connecttoserver` 或 `/connecttoserver <名称>` | ## 📂 文件结构 插件会在 `plugins/ARCCore/` 目录下创建以下文件: - `core_setting.yml` - 主要配置文件 - `broadcast.txt` - 公告消息文件 - `{语言代码}.txt` - 语言文件 (如 ZH-CN.txt) - `entity_display_name.txt` - 生物显示名翻译(v0.3.1+,死亡播报等) - `kill_reward.txt` - 击杀生物金钱奖励(v0.4.0,每行 `类型ID=金额`) - SQLite 数据库文件 成就定义与成就语言文件见独立插件 `plugins/ARCAchievement/`(`endstone_arc_achievement`)。 ## ⚙️ 配置文件 ### core_setting.yml - 主要配置选项 ```yaml # 基础设置 DEFAULT_LANGUAGE_CODE=ZH-CN # 默认语言 DATABASE_PATH=ARCCore.db # 数据库文件路径 PLAYER_INIT_MONEY_NUM=10000 # 玩家初始金钱 # 出生点保护 IF_PROTECT_SPAWN=True # 是否保护出生点 SPAWN_PROTECT_RANGE=8 # 出生点保护范围 # 领地系统 MIN_LAND_DISTANCE=1 # 领地最小距离 LAND_PRICE=100 # 领地价格 (每格) LAND_SELL_REFUND_COEFFICIENT=0.9 # 领地出售退款系数 LAND_MIN_SIZE=5 # 领地最小尺寸 (长宽必须都大于此值) LAND_SALE_VAT_RATE=0.1 # 私人领地上架成交增值税:对 (成交价−过户前owner_paid_money) 的溢价按比例征税,从卖家实收扣除;0=关闭 # 传送系统 MAX_PLAYER_HOME_NUM=5 # 玩家最大家园数量 # 随机传送配置 (v0.1.12新增) ENABLE_RANDOM_TELEPORT=True # 是否启用随机传送功能 RANDOM_TELEPORT_CENTER_X=0 # 随机传送中心点X坐标 RANDOM_TELEPORT_CENTER_Z=0 # 随机传送中心点Z坐标 RANDOM_TELEPORT_RADIUS=5000 # 随机传送半径 (格) # 传送收费配置 (v0.1.12新增,0表示免费) TELEPORT_COST_PUBLIC_WARP=0 # 公共传送点费用 TELEPORT_COST_HOME=0 # 私人传送点费用 TELEPORT_COST_LAND=0 # 领地传送费用 TELEPORT_COST_DEATH_LOCATION=0 # 死亡地点传送费用 TELEPORT_COST_RANDOM=100 # 随机传送费用 TELEPORT_COST_PLAYER=50 # 玩家互传费用 (TPA/TPHERE) # 公告系统 BROADCAST_INTERVAL=180 # 公告发送间隔 (秒) # 清道夫系统 ENABLE_CLEANER=True # 是否启用清道夫 CLEANER_INTERVAL=600 # 清理间隔 (秒) # 全局爆炸拦截(默认开启):True=取消一切爆炸事件;False=仅按领地 allow_explosion 保护 BLOCK_ALL_EXPLOSIONS=True # 天眼系统(Sky Eye,v0.7.6):玩家行为审计日志 plugins/ARCCore/sky_eye/YYYYMMDD.txt ENABLE_SKY_EYE=False # 是否启用天眼日志 SKY_EYE_MAX_RETENTION_DAYS=7 # 按自然日保留天数,0=不自动删旧文件 # 新人欢迎系统和OP设置(部分项也可在 OP 面板「经济管理」中修改) HIDE_OP_IN_MONEY_RANKING=True # 金钱排行榜是否隐藏OP玩家 # 首富头衔(v0.4.0,亦可 OP 经济管理) RICHEST_TITLE_NAME=首富 # 领地系统 DEFAULT_FREE_LAND_BLOCKS=100 # 新玩家默认免费领地格子数 # 公共领地白名单保护生物 (v0.2.1,逗号分隔) PUBLIC_LAND_PROTECTED_ENTITIES=minecraft:villager,minecraft:iron_golem,minecraft:snow_golem # 头衔系统 (v0.3.0):逗号分隔为默认头衔;OP_TITLE 仅一个,仅 OP 拥有。对应头衔的稀有度、介绍、解锁奖励可在 OP 面板→头衔管理→头衔属性管理中编辑,也可创建新头衔 DEFAULT_TITLE=创始玩家, 核心成员, ARC Player OP_TITLE=管理员 # 公会系统 (v0.7.0);跨服共享库路径见下方「跨服数据同步 → 方式 B」 GUILD_CREATE_COST=100000 # 公会规模 (v0.7.2):每个公会有 small / medium / large 三档;下列三个值为各档成员人数上限(含会长) GUILD_SIZE_SMALL_MAX=10 GUILD_SIZE_MEDIUM_MAX=20 GUILD_SIZE_LARGE_MAX=40 # 公会规模升级所消耗的公会公共贡献点(会长 / 管理者可在「我的公会 → 升级公会规模」中花费) GUILD_UPGRADE_TO_MEDIUM_COST=10000 GUILD_UPGRADE_TO_LARGE_COST=100000 # 会长改名公会需支付的金钱(0 表示免费) GUILD_RENAME_COST=0 # 跨服数据同步(v0.8) # 游戏服在以下两种方式中择一(互斥): # A. 远程同步 — ENABLE_SYNC_CLIENT=True # B. 文件同步 — ENABLE_SYNC_CLIENT=False,填写下方共享 SQLite 路径 # 另:某一实例可设 ENABLE_SYNC_SERVER=True 作为同步中心 # ----- 同步中心(可选) ----- ENABLE_SYNC_SERVER=False SYNC_SERVER_PORT=19999 SYNC_SERVER_AUTH_KEY= # ----- 方式 A:远程客户端(与文件路径互斥) ----- ENABLE_SYNC_CLIENT=False SYNC_SERVER_IP=127.0.0.1 SYNC_CLIENT_PORT=19999 SYNC_CLIENT_SERVER_ID=server_001 SYNC_CLIENT_SERVER_NAME=服务器01 SYNC_CLIENT_AUTH_KEY= SYNC_CLIENT_SYNC_PLAYER=True SYNC_CLIENT_SYNC_ECONOMY=True SYNC_CLIENT_SYNC_TITLE=True SYNC_CLIENT_SYNC_GUILD=True # 开启某类别时,该类别相关玩法配置也以同步中心为准(初始金钱、公会升级消耗等) # ----- 方式 B:共享数据库文件路径(与远程客户端互斥) ----- PLAYER_DATABASE_PATH= PLAYER_ECONOMY_DATABASE_PATH= PLAYER_TITLE_DATABASE_PATH= GUILD_DATABASE_PATH= ``` ### broadcast.txt - 公告消息文件 每行一条公告,支持占位符: ```txt 欢迎来到ARC弧光基岩服务器!你可以在聊天框发送/arc命令打开服务器操作菜单 请遵守服务器规则,文明游戏,共建和谐游戏环境! 现在是北京时间{date} {time},请注意休息,爱护眼睛你我做起。 当前服务器在线人数{online_player_number},求生者们请互帮互助 ``` ### newbie_welcome.txt - 新人欢迎消息文件 (v0.1.4新增) 新玩家第一次加入服务器时显示的欢迎消息: ```txt 欢迎来到ARC弧光大陆服务器!这里是一个恐怖+种田+模拟生活的多模组服务器,拥有丰富的玩法和特色系统!在聊天框输入/arc命令即可打开服务器操作菜单,进行购物、传送、领地管理等操作。 ``` ### newbie_commands.txt - 新人自动执行指令文件 (v0.1.4新增) 新玩家第一次加入服务器时自动执行的指令,每行一个指令: ```txt # 新人指令文件 # 每行一个指令,{player} 会被替换为玩家名称 # 示例: gamemode 0 {player} # clear {player} give {player} minecraft:bread 5 give {player} krep:m1911 give {player} krep:acp45 42 ``` #### 新人指令文件说明 - **注释支持**: 以 `#` 开头的行为注释,不会执行 - **占位符替换**: `{player}` 会自动替换为新玩家的名称 - **指令格式**: 使用标准的Minecraft指令格式,无需添加 `/` 前缀 - **错误处理**: 单个指令执行失败不会影响其他指令 ### 支持的占位符 | 占位符 | 描述 | 示例输出 | |--------|------|----------| | `{date}` | 当前日期 | `2024-01-15` | | `{time}` | 当前时间 | `14:30` | | `{online_player_number}` | 在线玩家数 | `5` | | `{player}` | 玩家名称 (仅新人指令文件) | `PlayerName` | ## 安装说明 1. 确保您的服务器运行 EndStone 框架 2. 将插件文件放入服务器的 `plugins` 目录 3. 重启服务器 4. 插件会自动创建必要的配置文件和数据库 ## 依赖要求 - EndStone 框架 (API 版本 0.7+) - Python 3.x - SQLite3 (通常内置于 Python) ## 🎮 使用指南 ### 快速开始 1. 玩家进入服务器后,约 **1 秒** 内会 **自动弹出主菜单一次**(可直接关闭);也可随时用 **`/arc`** 手动打开。 2. **首次**进行转账、圈地购地、创建公会等 **敏感操作** 时,若尚未设置账户密码,会引导 **设密(两次确认)**;已设密则弹出 **密码验证**,本会话内验证通过一次后,同类验证在一段时间内不必重复输入(退出游戏后失效)。 3. 可在主菜单使用银行、领地、传送、公会等功能;具体步骤中凡涉及资金安全或领地变更的环节仍会按需验证密码(见「玩家管理系统」)。 ### 功能操作指南 - **银行系统**: 在主菜单点击"银行"进行转账、查看余额等 - **转账操作**: 使用全新的两步式转账流程,先从在线玩家列表中选择目标玩家,再输入转账金额 - **领地系统**: - 推荐:主菜单 **领地 → 创建新领地**,按提示交互四个方块;或使用 **`/land pos1` / `/land pos2`** 在对角两点定范围,再用 **`/land buy`** 打开购买面板 - 领地长宽必须都大于配置的最小尺寸(默认 5 格);**`/pos1` `/pos2` 为 OP 记录坐标指令,与圈地无关** - 新玩家享有免费领地格子,购买时会自动使用免费格子抵扣费用 - 在领地详情中可设置爆炸保护、方块互动开放、展示框权限等高级选项;**重设领地范围** 与新建圈地流程一致,确认前可预览粒子、改坐标 - 支持将领地权限授权给其他玩家或完全移交领地 - **传送系统**: 在主菜单的"传送系统"中管理传送点和发送传送请求 - **公告查看**: 定时播放的公告会自动显示当前时间和在线人数 - **新人欢迎系统**: - 编辑 `newbie_welcome.txt` 自定义新玩家欢迎消息 - 编辑 `newbie_commands.txt` 配置新玩家自动执行的指令 - 使用 `{player}` 占位符在指令中引用玩家名称 - 新玩家首次加入时自动获得初始资金和执行欢迎流程 ## 🗃️ 数据存储 插件使用 SQLite 数据库存储以下数据: - **玩家信息**: 用户名、XUID、密码哈希、OP状态、剩余免费领地格子数、邀请人(inviter_xuid)、待领取邀请奖励次数、注册时间 - **经济数据**: 玩家余额、交易记录 - **领地信息**: 领地坐标、拥有者、传送点、共享用户、爆炸保护设置、方块互动开放设置、生物保护设置、展示框权限设置 - **传送点**: 私人传送点、公共传送点坐标信息 - **成就进度表(可选,由 arc_achievement 写入)**: **`player_achievement_stats`** — 击杀进度与完成标记;定义 JSON 在 **`plugins/ARCAchievement/achievements.json`** - **服务器配置**: 出生点坐标、系统设置 - **天眼审计(v0.7.6)**:非数据库;开启后写入 **`plugins/ARCCore/sky_eye/*.txt`**(按日),见「天眼系统」 ### 🆕 数据库自动升级系统 (v0.1.4新增) - **智能检测**: 自动检测数据库版本并执行必要的升级 - **字段添加**: 为旧数据库自动添加新字段(如is_op字段) - **向后兼容**: 完全兼容旧版本数据,无需手动迁移 - **安全升级**: 升级过程包含完整的错误处理机制 - **XUID主键系统** (v0.1.8 引入): 使用 XUID 作为玩家主键(v0.2.3 起不再支持 UUID→XUID 自动迁移) ## 🛠️ 开发信息 ### 项目结构 ``` EndStone-ARC-CORE/ ├── src/endstone_arc_core/ │ ├── __init__.py # 插件初始化 │ ├── arc_core_plugin.py # 主插件类 │ ├── sky_eye_log.py # 天眼系统按日日志与滚动清理(v0.7.6+) │ ├── TitleSystem.py # 头衔系统 │ ├── LandSystem.py # 领地系统 │ ├── KillRewardConfig.py # 击杀奖励配置(v0.4.0+) │ ├── EntityDisplayNameManager.py │ ├── TitleSystem.py │ ├── GuildSystem.py # 公会系统(v0.7.0+) │ ├── sync_protocol.py # 跨服同步协议(v0.8+) │ ├── sync_server.py # 跨服同步后端服务端(v0.8+) │ ├── sync_client.py # 跨服同步远程客户端(v0.8+) │ ├── sync_config.py # 跨服同步模式与分项开关(v0.8+) │ ├── DatabaseManager.py # 数据库管理器 │ ├── LanguageManager.py # 语言管理器 │ └── SettingManager.py # 设置管理器 ├── dist/ARCCore/ │ ├── core_setting.yml # 配置文件 │ ├── broadcast.txt # 公告文件 │ ├── entity_display_name.txt │ ├── kill_reward.txt │ ├── newbie_welcome.txt # 新人欢迎消息文件 │ ├── newbie_commands.txt # 新人自动执行指令文件 │ └── ZH-CN.txt # 中文语言包 └── pyproject.toml # 项目配置 ``` ### 核心技术特性 - **线程安全**: 数据库操作完全线程安全 - **多线程架构**: 位置检测系统使用独立线程,提升60%响应速度 - **事件驱动**: 基于 EndStone 事件系统 - **定时任务**: 使用 Scheduler 实现定时功能 - **模块化设计**: 各功能模块独立,易于维护 - **动态配置**: 支持运行时配置重载 - **精确坐标计算**: 使用 math.floor() 确保负坐标位置计算准确 - **XUID主键系统**: 全面使用XUID作为玩家标识,提升数据一致性和查询性能 - **数据库结构升级**: 支持表结构自动升级(自 v0.2.3 起不再提供 UUID→XUID 迁移) - **统一接口设计**: API和内部功能基于同一套底层接口,提升代码复用性和维护性 - **坐标处理统一**: 所有坐标计算统一使用math.floor(),确保负坐标处理正确 - **可视化领地系统**: 支持粒子效果显示领地边界,提供直观的领地范围展示 ### API 兼容性 - **EndStone API**: 0.11+ - **Python**: 3.13+ ## 📈 性能特性 - **高效的区块索引**: 领地系统使用区块映射,快速定位 - **内存优化**: 合理的缓存策略,减少数据库查询 - **异步处理**: 耗时操作使用定时任务处理 - **资源清理**: 自动清理过期的传送请求和临时数据 ## 🔒 安全特性 - **密码保护**:玩家密码使用 SHA-256 哈希存储;**敏感操作**(如转账、领地与部分公会管理)在 **会话内** 验证一次密码即可,兼顾安全与操作流畅度。 - **权限系统**: 基于 EndStone 权限系统 - **输入验证**: 所有用户输入都经过严格验证 - **SQL 注入防护**: 使用参数化查询 ## 🔌 API 接口 其它 EndStone 插件通过 **`server.get_plugin("arc_core")`** 获取核心实例后调用下列方法。多数接口同时支持 **游戏名** 与 **xuid**(填一个即可,**xuid 优先**);只传游戏名的旧写法仍然有效。接口线程安全。圈地 / 转账 / 建会等敏感写操作仍走游戏内密码验证,不对外提供。 插件 id:`arc_core`(与 pyproject entry-point 一致)。成就插件 id 为 `arc_achievement`,详见上文「成就系统」。 ### API 引用示例 以查询指定玩家金钱为例: ```python from endstone.plugin import Plugin class MyPlugin(Plugin): def on_enable(self): self.arc = self.server.get_plugin("arc_core") if self.arc is None: self.logger.error("未找到 arc_core,请先安装 EndStone ARC Core") return def check_balance(self, player): # 推荐:用 xuid(改名不影响) money = self.arc.api_get_player_money(xuid=player.xuid) # 亦可:只传游戏名 # money = self.arc.api_get_player_money(player.name) self.logger.info(f"{player.name} 当前金钱: {money}") ``` ### API 一览表 #### 经济 | 函数 | 参数 | 返回值 | |------|------|--------| | `api_get_player_money` | `player_name=""`,`xuid=""` | `float`:余额;找不到为 `0.0` | | `api_change_player_money` | `player_name=""`,`money_to_change=0`,`xuid=""`,`notify=True` | `bool`:是否成功。正加负减;`notify=False` 不发余额提示 | | `api_adjust_player_money` | `delta`,`player_name=""`,`xuid=""`,`notify=True` | `dict`:`ok`,`error`,`xuid`,`money`(变动后),`delta`。错误码:`PLAYER_NOT_FOUND` / `MONEY_INVALID_AMOUNT` / `MONEY_DB_ERROR` | | `api_get_player_money_rank` | `player_name=""`,`xuid=""` | `int`:财富排名(从 1 起);找不到为 `0` | | `api_get_all_money_data` | 无 | `dict`:`{玩家名: 金钱}` | | `api_get_richest_player_money_data` | 无 | `list`:`[玩家名, 金钱]`;无数据为 `["", 0]` | | `api_get_poorest_player_money_data` | 无 | `list`:`[玩家名, 金钱]`;无数据为 `["", 0]` | #### 头衔 / 发奖 | 函数 | 参数 | 返回值 | |------|------|--------| | `api_unlock_title` | `player`(Player),`title` | `bool`:成功;新解锁且在线则发奖,未佩戴时自动佩戴 | | `api_unlock_title_by_xuid` | `xuid`,`title` | `bool`:离线可记解锁;在线且新解锁则发奖并可能自动佩戴 | | `api_set_title_definition` | `title`,`rarity`,`description`,`reward_money`,`reward_items=None` | `bool`:创建或**覆盖**定义。`reward_items` 形如 `[{"item_name":"minecraft:diamond","count":1}]`(亦接受键 `id`) | | `api_ensure_title_definition` | `title`,`rarity="普通"`,`description=""`,`reward_money=0.0`,`reward_items=None` | `bool`:仅当头衔不存在时插入,不覆盖已有定义 | | `api_get_title_definition` | `title` | `dict \| None`:`title` / `rarity` / `description` / `reward_money` / `reward_items` | | `api_list_title_definitions` | 无 | `list[dict]`:全部头衔定义(字段同上) | | `api_has_unlocked_title` | `title`,关键字:`player=None`,`player_name=""`,`xuid=""` | `bool`:解析顺序 `xuid` → `player` → `player_name` | | `api_get_equipped_title` | `player_name=""`,`xuid=""` | `str`:当前佩戴头衔;未佩戴 / 找不到为 `""` | | `api_list_unlocked_titles` | `player_name=""`,`xuid=""` | `list[str]`:已解锁头衔名 | | `api_give_player_items` | `player=None`,`items=None`,`player_name=""`,`xuid=""` | `bool`:向**在线**玩家 `give`;至少发出一条有效物品为 `True` | #### 玩家 / 其它 | 函数 | 参数 | 返回值 | |------|------|--------| | `api_get_player_xuid_by_name` | `player_name` | `str \| None`:在线优先,其次数据库(大小写不敏感) | | `api_get_player_name_by_xuid` | `xuid`,`with_title=False` | `str`:找不到为 `""`;`with_title=True` 时为公会/头衔展示名 | | `api_get_player_playtime` | `raw_player_name=""`,`xuid=""` | `dict`:`session_count`,`total_playtime`(秒,含当前会话),`is_online`,`last_join_time`,`last_quit_time`,`xuid`;找不到时时长为 0 | | `api_get_newbie_guide_text` | 无 | `str`:`newbie_welcome.txt` 全文;失败为 `""` | #### 领地 维度会规范化(如 `Overworld` → `minecraft:overworld`);坐标按三维 AABB(含 Y)。生效顺序:私人/公会 > 公共(`public_priority` 3>2>1)。 | 函数 | 参数 | 返回值 | |------|------|--------| | `api_if_position_in_land` | `dimension`,`position=(x,y,z)` | `int \| None`:生效主领地 `land_id`;不在领地为 `None` | | `api_resolve_land_at_position` | `dimension`,`position` | `dict`:`dimension`,`land_id`,`sub_land_id`,`is_public`,`public_priority`,`owner_xuid`,`covering_land_ids` | | `api_list_lands_at_position` | `dimension`,`position` | `list[dict]`:覆盖该点的全部主领地(含 `land_id`),按生效优先级降序 | | `api_get_land_info` | `land_id` | `dict`:领地详情;不存在为 `{}`。常见键:`land_name`,`dimension`,`min_/max_x/y/z`,`tp_x/y/z`,`shared_users`,`owner_xuid`,`for_sale`,`sale_price`,各类开关,`public_priority`,`owner_paid_money` | | `api_get_player_lands` | `player_name=""`,`xuid=""` | `list[dict]`:该玩家私人领地(含 `land_id`) | | `api_get_guild_lands` | `guild_id` | `list[dict]`:该公会领地(含 `land_id`) | | `api_check_land_access` | `dimension`,`position`,`player_name=""`,`xuid=""`,`action="build"` | `dict`:`allowed`,`land_id`,`sub_land_id`,`is_public`,`wilderness`,`action`。静默检查,不发聊天。`action` 为 `build` 或 `interact` | #### 传送 仅对**在线**玩家生效。 | 函数 | 参数 | 返回值 | |------|------|--------| | `api_teleport_player_to` | `dimension`,`x`,`y`,`z`,`player_name=""`,`xuid=""` | `dict`:`ok`,`error`。错误码:`PLAYER_NOT_ONLINE` / `TELEPORT_FAILED` | | `api_teleport_player_to_home` | `home_name`,`player_name=""`,`xuid=""` | `dict`:`ok`,`error`。另含 `PLAYER_NOT_FOUND` / `HOME_NOT_FOUND` | | `api_teleport_player_to_warp` | `warp_name`,`player_name=""`,`xuid=""` | `dict`:`ok`,`error`。另含 `WARP_NOT_FOUND` | | `api_list_player_homes` | `player_name=""`,`xuid=""` | `list[dict]`:`home_name`,`dimension`,`x`,`y`,`z` | | `api_list_public_warps` | 无 | `list[dict]`:`warp_name`,`dimension`,`x`,`y`,`z` | #### 公会 | 函数 | 参数 | 返回值 | |------|------|--------| | `api_get_player_guild_info` | `player_name=""`,`xuid=""` | `dict`:含 `guild_id`,`name`,`role`,`size_tier`,`capacity`,`member_count`,`total_contribution`,`personal_contribution`,`motto`,`owner_xuid`,`join_requires_approval`;未入会为 `{}` | | `api_get_player_guild_id` | `player_name=""`,`xuid=""` | `int`:公会 id;未入会为 `0` | | `api_get_guild_info` | `guild_id` | `dict`:公会公开信息;不存在为 `{}` | | `api_list_guild_members` | `guild_id` | `list[dict]`:每项 `xuid`,`role`,`joined_at`,`contribution` | | `api_add_guild_contribution` | `player_name=""`,`points=0`,`xuid=""` | `dict`:`ok`,`error`,`personal_contribution`,`guild_total_contribution`,`guild_id`。私人与公共**同时各 +points**(须为正整数) | | `api_get_player_guild_contribution` | `player_name=""`,`xuid=""` | `int`:私人贡献点;未入会为 `0` | | `api_get_guild_total_contribution_by_player` | `player_name=""`,`xuid=""` | `int`:所在公会公共贡献;未入会为 `0` | | `api_get_guild_total_contribution` | `guild_id` | `int`:公会公共贡献点 | | `api_change_guild_total_contribution` | `guild_id`,`delta` | `dict`:`ok`,`error`,`guild_id`,`total_contribution`,`delta`。只改公共池;`delta` 可负;低于 0 失败 | | `api_get_member_guild_contribution` | `guild_id`,`player_name=""`,`xuid=""` | `int`:该成员私人贡献;非成员为 `0` | | `api_change_member_guild_contribution` | `guild_id`,`delta`,`player_name=""`,`xuid=""` | `dict`:`ok`,`error`,`guild_id`,`personal_contribution`,`delta`。只改私人;`delta` 可负 | | `api_set_guild_size_tier` | `guild_name`,`tier`(`small`/`medium`/`large`) | `bool`:目标容量低于当前人数时拒绝 | 公会常见错误码:`GUILD_INVALID_PLAYER`、`GUILD_NOT_IN_GUILD`、`GUILD_NOT_FOUND`、`GUILD_CONTRIB_INVALID_POINTS`、`GUILD_CONTRIB_NOT_ENOUGH`、`GUILD_DB_ERROR`。 ## 📄 许可证 本项目采用开源许可证,详见 LICENSE 文件。 ## 🤝 支持与反馈 - **作者邮箱**: DEVILENMO@gmail.com - **问题反馈**: 请详细描述问题和复现步骤 - **功能建议**: 欢迎提供改进建议 ## 📋 近期更新日志 ### v0.8.5(当前版本) - ✅ **公共领地拦截生物生成修复**:原先仅取消 EndStone `Mob` 类型,模组生物常被包成普通 Actor 因而漏拦。开启 `block_actor_spawn` 后改为取消该公共领地内**除玩家外的全部实体**生成 - ✅ **跨服玩法配置以主服为准**:远程客户端按已开启的同步类别,从同步中心拉取并覆盖对应 `core_setting.yml` 项(初始金钱、公会升级消耗、签到存款、传送/圈地价格等)。主服改配置或重载后推送;从服本地修改这些键会被主服覆盖。共享文件模式不自动同步配置 - ✅ **公会 API 补齐**:按公会 id / 玩家 xuid 查询与单独增减公共、私人贡献点(`api_get_player_guild_id`、`api_get_guild_info`、`api_get_guild_total_contribution`、`api_change_guild_total_contribution`、`api_get_member_guild_contribution`、`api_change_member_guild_contribution`、`api_list_guild_members`) - ✅ **其它系统对外 API**:经济 / 头衔 / 领地 / 传送 / 玩家解析统一支持 **xuid**;新增 `api_adjust_player_money`、财富排名、头衔列表与佩戴查询、玩家/公会领地、静默领地权限检查、坐标/Home/Warp 传送、`api_get_player_name_by_xuid` 等。旧签名保持兼容 ### v0.8.4 - ✅ **成就系统拆出**:成就迁至独立插件 `endstone_arc_achievement`(`arc_achievement`);核心仅转发菜单入口并提供头衔/发奖 API。关服时忽略同步套接字已关闭后的 `recv` 噪声 ### v0.8.2 - ✅ **玩家表拆分**:跨服 **`player_basic_info`**(密码、邀请、**游戏时长 / 进服次数**);本服 **`player_local_info`**(`is_op`、剩余免费领地格、**签到**)。启动自动迁移 - ✅ **QQ 中继移除**:不再经 SyncServer 转发 QQ 事件 / 群聊下行(原 `QQ_RELAY_MODE` / `EVENT_FORWARD` 已移除)。群服互通由 AstrBot 弧光 EndStone 消息中枢 + QQ Sync 插件负责;死亡使用 `api_send_event("death", …)`,成就等可用 `custom` - ✅ **公共领地三级优先级**:`lands.public_priority`(1/2/3,**3 最高**,默认 1)。高优先级公共可覆盖低优先级;同级不可重叠。位置生效顺序:**私人/公会 > 公共(3>2>1)**;私人子领地仍先于父领地。创建公共领地时 OP 选择等级;OP 公共领地设置可改级(升高时校验冲突) - ✅ **公共领地拦截生物生成**:`block_actor_spawn`(默认关闭);开启后经 `ActorSpawnEvent` 取消该公共领地内 `Mob`(不含玩家)生成 - ✅ **传送点校验修复**:设置领地传送点改为按目标领地三维 AABB(含维度/Y)判定,不再用「脚下生效领地 ID」比较,避免嵌套私人地/高层公共覆盖时误报「不在领地内」 - ✅ **领地外接 API**:`api_if_position_in_land` 适配三维 Y、维度规范化与多层生效;新增 **`api_resolve_land_at_position`**、**`api_list_lands_at_position`**。维度支持规范 ID(如 `minecraft:overworld`)及自定义维度 - ✅ **跨维传送指令修复**:`/execute in` 对原版三维度使用短名(`overworld` / `nether` / `the_end`),去掉 `minecraft:`;自定义维度仍使用完整 `namespace:dimension_identifier` - ✅ **版本号方案**:历史版本号由 `0.0.x` 调整为 `0.x`(如原 `0.0.8.1` → `0.8.1`) ### v0.8.1 - ✅ **跨服数据同步**:游戏服 **远程客户端**(**`ENABLE_SYNC_CLIENT`**)与 **共享文件路径**(**`PLAYER_DATABASE_PATH`** 等)**互斥**;远程模式支持分项开关 **`SYNC_CLIENT_SYNC_PLAYER` / `_ECONOMY` / `_TITLE` / `_GUILD`**。新增 **`sync_client.py`**、**`sync_config.py`**;同步中心 **`ENABLE_SYNC_SERVER`** 可选开启。详见上文「跨服数据同步」 - ✅ **爆炸监听修复**:修复 **`ActorExplodeEvent`** 在 **`BLOCK_ALL_EXPLOSIONS=False`** 时按领地保护的流程错误。改为用 **`block.x/y/z`** 直接取坐标;对需保留方块通过 **`get_block_at`** 重建 **`block_list`** 再写回;写回失败时回退为取消整次爆炸 ### 计划中的功能 - 🔄 更多语言包支持 - 🔄 数据备份和恢复 --- *ARC Core 是一个功能完整、性能优异的 EndStone 插件,为服务器管理者提供了一站式的解决方案。* [/MD]
作者
DEVILENMO
下载
156
查看
2,559
首次发布
最后更新

评分

5.00 星 1 次评分

DEVILENMO 的其他资源

最新更新

  1. 功能更新与优化

    ### v0.8.5(当前版本) - ✅ **公共领地拦截生物生成修复**:原先仅取消 EndStone `Mob` 类型,模组生物常被包成普通 Actor 因而漏拦。开启...
  2. 功能更新与优化

    ### v0.8.2(当前版本) - ✅ **公共领地三级优先级**:`lands.public_priority`(1/2/3,**3 最高**,默认...
  3. 功能更新与优化

    ### v0.0.4.2 (当前版本) - ✅ **每日签到机制** -...

最新评价

用起来还不错的
后退
顶部 底部