[1.21.1][Arclight] StazzasNPC——Cobblemon的自定义NPC,好感度系统上线!!无需跟任何方可梦插件进行联动,本身就拥有超级完善功能的超级插件!

原创 付费 [1.21.1][Arclight] StazzasNPC——Cobblemon的自定义NPC,好感度系统上线!!无需跟任何方可梦插件进行联动,本身就拥有超级完善功能的超级插件! 1.0

请登录后获取
版权类型
原创
插件中文名称
Stazzas的NPC插件
插件英文名称
StazzasNPC
原帖地址
#
支持的核心(服务端)
  1. Spigot
  2. Paper
  3. 其他核心
语言支持
中文(简体)
前置组件
PlaceholderAPI[可选]
适配版本(Java)
  1. 1.21

📕 介绍​

本插件是一款能够在插件内对Cobblemon的Npc进行创建的插件,支持任务/交换/对战/npc模型和每个对话框执行的动画/npc行为等多种功能进行编辑,超级简易!支持Arclight,暂时不支持Youer。该插件支持高度自定义的配置,npc编辑,自定义任务,自定义npc交换精灵,还能编辑npc预设与npc的行为,已经支持对话框ui的自定义背景!数据包的npc如果你觉得太繁杂了,那不妨来试试这款插件

视频展示完成效果:
感谢HuHu对该插件进行了演示

NPC后台皮肤文件图示:
1779558974825.webp

任务编辑器及任务界面图示:
1779559062072.webp
1779559071100.webp

1779559083273.webp

NPC动作图示:
1779559160822.webp




📄 结语​

感谢使用 StazzasNPC 插件,我们持续更新更多功能。如果你有任何问题或建议,请加入方可梦技术交流群:966720491。
购买此插件只有使用权,没有分发权,请自觉
购买插件后 凭借购买记录 联系作者要授权码
作者QQ:1738964540

[MD] # StazzasNpc 插件使用手册 > 基于 Cobblemon 的增强 NPC 系统 — 支持自定义 NPC、多阶段对话、任务、声望、皮肤、行为AI、特效等 --- ## 一、指令列表 | 子命令 | 权限 | 用法 | 说明 | |--------|------|------|------| | `spawn` | `stazzasnpc.adm` | `/cbn spawn <文件名>` | 从 `plugins/StazzasNPC/NPCs/<文件名>.json` 生成 NPC | | `remove` | `stazzasnpc.adm` | `/cbn remove <UUID\|名称\|类型>` | 移除已注册的 NPC | | `removefront` | `stazzasnpc.adm` | `/cbn removefront` | 移除玩家视线中的 NPC | | `list` | `stazzasnpc.adm` | `/cbn list` | 列出所有已注册 NPC | | `reload` | `stazzasnpc.reload` | `/cbn reload [true]` | 重载所有配置,加 `true` 向所有玩家发送热重载信号 | | `dialogue` | `stazzasnpc.adm` | `/cbn dialogue <对话ID> [玩家]` | 为指定玩家启动对话 | | `visibility` | `stazzasnpc.adm` | `/cbn visibility <玩家> <NPC资源ID> <show\|hide>` | 对指定玩家显示/隐藏 NPC | | `editor` | `stazzasnpc.adm` | `/cbn editor` | 打开 NPC 编辑器主菜单 | | `quest` | — | `/cbn quest <子命令>` | 任务管理,见下方 | | `daily` | — | `/cbn daily` | 打开每日任务面板 | | `rep` | `stazzasnpc.adm` | `/cbn rep <玩家> <阵营ID> <set\|add\|get> [值]` | 声望管理 | | `faction` | — | `/cbn faction` | 打开阵营总览界面 | | `announce` | `stazzasnpc.adm` | `/cbn announce <list\|reload\|start\|stop> [NPC_ID]` | NPC 广播管理 | | `effects` | `stazzasnpc.adm` | `/cbn effects reload` | 重载 NPC 特效配置 | | `behaviour` | `stazzasnpc.adm` | `/cbn behaviour <list\|reload>` | 查看/重载 NPC 行为配置 | | `skin` | `stazzasnpc.adm` | `/cbn skin reload` | 重载 NPC 皮肤配置 | | `trade` | — | `/cbn trade <玩家> <交易ID>` | 发起 NPC 交易(开发中) | ### 任务子命令: | 子命令 | 用法 | 说明 | |--------|------|------| | `give` | `/cbn quest give <玩家> <任务ID>` | 给予玩家任务 | | `complete` | `/cbn quest complete <玩家> <任务ID>` | 强制完成任务 | | `abort` | `/cbn quest abort <玩家> <任务ID>` | 放弃玩家任务 | | `menu` | `/cbn quest menu` | 打开任务菜单 | | `setstatus` | `/cbn quest setstatus <玩家> <任务ID> <状态>` | 设置任务状态(ACCEPTED / CONDITIONS_MET / COMPLETED) | --- ## 二、PlaceholderAPI 变量列表 ### NPC 相关 | 变量 | 返回值 | 示例 | |------|--------|------| | `%cbn_npc_name_<NPC_ID>%` | NPC 显示名称 | `%cbn_npc_name_nurse_joy%` → `乔伊` | | `%cbn_npc_name_stazzasnpc:nurse_joy%` | 支持完整 resourceIdentifier | — | ### 任务相关 | 变量 | 返回值 | 示例 | |------|--------|------| | `%cbn_quest_name_<任务ID>%` | 任务显示名称 | `%cbn_quest_name_collect_herbs%` → `采集药草` | | `%cbn_quest_progress_<任务ID>%` | 当前进度数值 | → `5` | | `%cbn_quest_target_<任务ID>%` | 目标数值 | → `10` | | `%cbn_quest_status_<任务ID>%` | 状态枚举值 | → `ACCEPTED` | | `%cbn_quest_status_display_<任务ID>%` | 状态中文显示 | → `进行中` / `可交付` / `已完成` / `已失败` / `未接取` | | `%cbn_main_task_name%` | 当前主任务名称 | → `采集药草` | | `%cbn_main_task_info%` | 主任务进度详情 | → `进度: 5/10` | | `%cbn_main_task%` | 主任务名称(同 main_task_name) | → `采集药草` | ### 声望相关 | 变量 | 返回值 | 示例 | |------|--------|------| | `%cbn_rep_<阵营ID>%` | 该阵营声望值 | `%cbn_rep_team_rocket%` → `250` | | `%cbn_rep_<阵营ID>_rank%` | 该阵营等级名 | `%cbn_rep_team_rocket_rank%` → `elite` | --- ## 三、NPC JSON 配置文件格式 存放位置:`plugins/StazzasNPC/NPCs/<名称>.json` ```jsonc { "type": "dialogue", // NPC类型: dialogue / battle / command "resourceIdentifier": "stazzasnpc:nurse_joy",// 唯一资源ID (必填) "names": ["&d乔伊", "&d护士乔伊"], // 显示名称列表 "hitbox": "player", // 碰撞箱: player / mob "modelScale": 0.9375, // 模型缩放 "presets": ["wanders", "looks_around"], // 加载的预设行为 "skill": 50, // 对战AI等级 (0-100) "autoHealParty": true, // 战斗结束后自动治疗 "canDespawn": false, // 是否可自然消失 "randomizePartyOrder": false, // 随机队伍顺序 "isMovable": false, // 是否可被推动 "isInvulnerable": true, // 是否无敌 "isLeashable": false, // 是否可拴绳 "allowProjectileHits": false, // 是否受弹射物伤害 "hideNameTag": false, // 是否隐藏名牌 // ======== 交互配置 ======== "interaction": [ { "dialogue": "stazzasnpc:heal_dialogue", // 对话ID "permission": "stazzas.vip", // 需要此权限才显示(完成标记) "prepermission": "", // 需要此权限才解锁(前置条件) "priority": 100 // 优先级(数字越小越优先) }, { "dialogue": "stazzasnpc:default_talk", // 默认对话(无前置条件) "priority": 999 // 默认放在最后 } ] } ``` ### 字段速查表 | 字段 | 类型 | 默认值 | 说明 | |------|------|--------|------| | `type` | string | `"dialogue"` | NPC 类型 | | `resourceIdentifier` | string | **必填** | 格式 `namespace:id` | | `names` | string[] | `[]` | 显示名称,支持 `&` 颜色码 | | `hitbox` | string | `"player"` | `"player"` 或自定义尺寸 | | `presets` | string[] | `[]` | 引用的预设名,见 Presets/ 目录 | | `skill` | int | `50` | 对战AI难度 0-100 | | `autoHealParty` | bool | `true` | 战后自动治疗 | | `canDespawn` | bool | `false` | 是否自然消失 | | `isInvulnerable` | bool | `true` | 无敌 | | `hideNameTag` | bool | `false` | 隐藏名牌 | ### 交互选项字段 | 字段 | 类型 | 说明 | |------|------|------| | `dialogue` | string | 指向的对话ID(如 `stazzasnpc:heal_dialogue`) | | `permission` | string | **完成标记** — 有该权限表示已完成此阶段,会跳过 | | `prepermission` | string | **前置条件** — 有该权限才解锁此选项 | | `priority` | int | 优先级(越小越优先,默认 999 为兜底) | **交互逻辑:** 遍历所有选项 → 检查 `prepermission`(没通过则跳过)→ 检查 `permission`(通过了说明已完成,跳过)→ 选中第一个满足"有前置条件但未完成"的对话。 --- ## 四、对话配置文件格式 存放位置:`plugins/StazzasNPC/Dialogues/<名称>.json` ```hocon HEAD: name=乔伊, face=cobblemon:standard --- page1 --- NPC: 欢迎来到宝可梦中心! NPC: 需要治疗你的宝可梦吗? * &a是的,麻烦了! -> yes_page * &c不用了,谢谢。 -> quitter --- yes_page --- NPC: 好的,请稍等! cmd: cbn quest complete_dialogue %player% heal_quest --- actions --- yes: q.dialogue.close(); ``` ### 脚本格式语法 | 关键字 | 用法 | 说明 | |--------|------|------| | `HEAD:` | `HEAD: name=乔伊, face=cobblemon:standard` | 头部配置 | | `NPC:` | `NPC: 对话文字` | NPC 发言行 | | `PLAYER:` | `PLAYER: 对话文字` | 玩家发言行 | | `*` | `* &a选项文本 -> 目标页` | 玩家选项,`->` 后为目标页ID | | `--- 页ID ---` | `--- yes_page ---` | 定义新页面 | | `--- actions ---` | &nbsp; | 进入 action 定义区域 | | `--- input ---` | &nbsp; | 进入输入定义区域 | | `--- QUITTER ---` | &nbsp; | 结束对话页 | | `[CMD]` | `[CMD] cbn give %player% quest1` | 进入页面时执行命令 | | `[CLIENT]` | `[CLIENT] q.npc.play_animation(wave)` | 客户端 Molang 表达式 | | `[AUTO]` | `[AUTO] close-quick` | 自动翻页(`close-quick`=快速关闭) | ### 可用 Molang 表达式 | 表达式 | 说明 | |--------|------| | `q.run_command(<命令>)` | 以玩家身份执行命令 | | `q.dialogue.set_page('<页ID>')` | 跳转到指定页面 | | `q.dialogue.close()` | 关闭对话框 | | `q.player.username` | 玩家用户名 | | `q.npc.challenge(<npc_uuid>)` | 向该 NPC 发起挑战 | --- ## 五、任务配置文件格式 存放位置:`plugins/StazzasNPC/quests/<名称>.yml` ### 完整示例 ```yaml # 单条件任务 — 收集物品 collect_herbs: display-name: "&a采集药草" lore: - "&7为乔伊小姐收集治疗药草" - "&7进度: %cbn_quest_progress_collect_herbs%/%cbn_quest_target_collect_herbs%" type: SUBMIT_ITEM # 任务类型 target: "minecraft:grass" # 目标物品 amount: 10 # 需要的数量 completion-mode: NPC # DIRECT=自动完成, NPC=回去找NPC交付 npc-id: "stazzasnpc:nurse_joy" # 交付NPC的resourceIdentifier rewards: - "give %player% diamond 3" - "xp give %player% 100" open-dialogue: "stazzasnpc:heal_thanks" repeatable: false cooldown: 1d # 支持: 30s, 15m, 2h, 1d, mc:1.0(Minecraft天数) time-limit: 10m # 限时任务, 超时自动失败 retry-after-failure: true # 多条件任务 — 终极挑战 expert_challenge: display-name: "&6&l专家挑战" type: MULTI npc-id: "stazzasnpc:professor_oak" completion-mode: NPC special-dialogue: "stazzasnpc:expert_complete" conditions: catch_20: type: CATCH_POKEMON target: "ANY" amount: 20 description: "捕获任意宝可梦" defeat_boss: type: DEFEAT_NPC target: "stazzasnpc:gym_leader" amount: 1 description: "击败道馆馆主" level_up: type: POKEMON_LEVEL target: "Pikachu" amount: 50 description: "将皮卡丘练到50级" collect_ores: type: SUBMIT_ITEM target: "minecraft:diamond" amount: 5 description: "收集钻石" ``` ### 所有任务类型 | 类型 | 说明 | target 示例 | 触发方式 | |------|------|-------------|----------| | `SUBMIT_ITEM` | 提交物品 | `minecraft:diamond` / 物品名 | 背包检查(自动) + NPC交付 | | `KILL_MOB` | 击杀生物 | `ZOMBIE` / `SKELETON` | 事件触发 | | `CATCH_POKEMON` | 捕获宝可梦 | `Pikachu` / `ANY` | 事件触发 | | `DEFEAT_POKEMON` | 击败野生宝可梦 | `Charizard` / `ANY` | 事件触发 | | `DEFEAT_NPC` | 击败NPC训练师 | NPC的resourceIdentifier | 事件触发 | | `LOSE_TO_NPC` | 输给NPC训练师 | NPC的resourceIdentifier | 事件触发 | | `LOSE_TO_POKEMON` | 输给野生宝可梦 | 宝可梦物种名 | 事件触发 | | `RELEASE_POKEMON` | 放生宝可梦 | `Bulbasaur` / `ANY` | 事件触发 | | `EVOLVE_POKEMON` | 进化宝可梦 | 进化前的物种名 | 事件触发 | | `OBTAIN_APRICORN` | 采集球果 | `RED` / `BLUE` / `ANY` | 事件触发 | | `TRADE_POKEMON` | 交换宝可梦 | — | 事件触发 | | `DIALOGUE` | 对话任务 | 对话ID | 与指定NPC对话 | | `REACH_LOCATION` | 到达指定地点 | — | 移动检测 | | `SHOW_POKEMON` | 展示宝可梦 | `Eevee` / `ANY` | 背包检查 | | `SUBMIT_POKEMON` | 提交宝可梦 | 宝可梦物种名 | 背包检查 + NPC交付 | | `POKEMON_LEVEL` | 宝可梦达到等级 | `Pikachu` / `ANY` | 状态检查 | | `POKEMON_FRIENDSHIP` | 宝可梦亲密度 | `Eevee` / `ANY` | 状态检查 | | `POKEDEX_COMPLETION` | 图鉴收集进度 | — | 状态检查 | | `POKEMON_IV` | 宝可梦个体值 | 宝可梦物种 + amount为最低IV总和 | 状态检查 | | `POKEMON_EV` | 宝可梦努力值 | 同上 | 状态检查 | | `POKEMON_NATURE` | 宝可梦性格 | `Adamant` / `Modest` | 状态检查 | | `POKEMON_ABILITY` | 宝可梦特性 | `Static` / `Intimidate` | 状态检查 | | `FISH_POKEMON` | 钓鱼钓到宝可梦 | `Magikarp` / `ANY` | 事件触发 | | `MULTI` | 复合条件 | — | 组合多种条件 | ### 任务配置字段完整说明 | 字段 | 类型 | 默认值 | 说明 | |------|------|--------|------| | `display-name` | string | 任务ID | 任务显示名称(支持 & 颜色码) | | `lore` | string[] | `[]` | 任务描述列表 | | `type` | string | `SUBMIT_ITEM` | 任务类型(枚举值) | | `target` | string | — | 任务目标(物种/物品/实体名,`ANY`=任意) | | `amount` | int | `1` | 需要的数量 | | `completion-mode` | string | `DIRECT` | `DIRECT`=即时完成 / `NPC`=需要找NPC交付 | | `npc-id` | string | — | 关联NPC的resourceIdentifier | | `skinid` | string | — | 通过皮肤ID匹配NPC(替代npc-id) | | `special-dialogue` | string | — | 交付任务时播放的特殊对话ID | | `rewards` | string[] | `[]` | 奖励命令列表(`%player%`=玩家名) | | `repeatable` | bool | `false` | 是否可重复接取 | | `cooldown` | string | `"0s"` | 冷却时间 | | `time-limit` | string | `"0s"` | 超时时限 | | `retry-after-failure` | bool | `false` | 失败后是否可重试 | | `open-dialogue` | string | — | 任务完成时打开的对话 | | `start-dialogue` | string | — | 任务开始时打开的对话 | | `next-quest` | string | — | 完成后自动接取的下一个任务ID | | `daily` | bool | `false` | 是否出现在每日任务池中 | | `auto-give` | object/bool | — | 自动给予配置,见下方 | ### 自动给予(auto-give)配置 ```yaml auto-give: when: first_join # NEVER / JOIN / FIRST_JOIN / ALWAYS requires-completed: # 需要先完成这些任务 - tutorial_quest requires-not-completed: # 需要尚未完成这些任务 - expert_finale ``` ### 时间格式 | 格式 | 示例 | 说明 | |------|------|------| | `Xs` | `30s` | X 秒 | | `Xm` | `15m` | X 分钟 | | `Xh` | `2h` | X 小时 | | `Xd` | `1d` | X 天 | | `mc:X` | `mc:1.0` | X 个 Minecraft 天(20分钟/天) | --- ## 六、声望系统配置 ### 阵营配置 存放位置:`plugins/StazzasNPC/factions/<名称>.yml` ```yaml team_rocket: display: "&c火箭队" default: 0 # 玩家初始声望 ranks: # 等级定义 hostile: min: -1000 max: -100 dialogue: "stazzasnpc:rocket_hostile" neutral: min: -99 max: 99 member: min: 100 max: 499 dialogue: "stazzasnpc:rocket_member" commands: # 晋升到此等级时执行的命令 - "give %player% diamond 1" permissions: # 晋升时授予的权限 - "stazzasnpc.rocket.member" elite: min: 500 max: 1000 dialogue: "stazzasnpc:rocket_elite" faction_multipliers: # 阵营关系倍数(影响声望获取) professor_oak: 0.5 # 奥克博士阵营声望高时,火箭队声望获取 ×0.5 pokemon_league: 0.3 interaction_overrides: # 声望驱动的交互覆盖 high_rep: min_rep: 300 max_rep: 1000 dialogue: "stazzasnpc:rocket_elite" permission: "stazzasnpc.rocket.elite" grant: true # true=授予权限, false=移除 # 礼物系统 gifts: 0: item: "DIAMOND" reputation: 25 message: "&c哼,算你识相!" reject: "&c这种东西我们不需要!" # 阵营能力 shop_discount: 0.15 # 阵营商店折扣(0.0-1.0) auto_hostile_below_zero: true # 声望为负时自动敌对 territory: world: "world" x: 100 z: 200 radius: 50 # 领地范围 ``` ### NPC 声望交互配置 在 NPC JSON 文件中添加: ```json { "faction_id": "team_rocket", "rep_interactions": [ { "min_rep": -1000, "max_rep": -100, "hostile": true, "dialogue": "stazzasnpc:rocket_hostile" }, { "min_rep": 100, "max_rep": 500, "auto_battle": true, "daily_battles": 3 } ], "gifts": [ { "item": "DIAMOND", "rep_change": 25, "message": "&c哼,算你识相!", "reject_message": "&c不需要这个!", "name_match": "闪亮的宝石", "lore_match": "珍贵的" } ], "battle_config": { "rep_on_win": 30, "rep_on_lose": -10, "daily_limit": 5, "win_rewards": ["give %player% emerald 1"], "lose_rewards": [], "restore_party": true } } ``` --- ## 七、NPC 皮肤配置 在 NPC JSON 中添加 `skins` 数组: ```jsonc { "skins": [ { "type": "steve", // steve / alex / slim / pokemon "texture": "https://example.com/skin.png",// URL / 文件名 / 玩家名 "condition": "", // 空 = 默认皮肤 "priority": 1, "visibility": "global", // global / personal "skinid": "nurse_default", "names": ["&d乔伊"], // 此皮肤专属的显示名称 "aspects": "" // pokemon类型时: "shiny,female" }, { "type": "alex", "texture": "file:nurse_joy_night.png", "condition": "time:night", "priority": 10, "visibility": "global" }, { "type": "steve", "texture": "Notch", // 使用玩家名加载皮肤 "condition": "permission:stazzas.vip", "visibility": "personal" // 仅对该玩家显示 } ] } ``` ### 皮肤条件关键字 | 条件 | 格式 | 说明 | |------|------|------| | `时间` | `time:day` / `time:night` | 根据MC时间切换 | | `权限` | `permission:权限节点` | 玩家有该权限时使用 | | `任务完成` | `quest_completed:任务ID` | 完成某任务后使用 | | `任务接取` | `quest_accepted:任务ID` | 接取某任务后使用 | | `指定玩家` | `player:玩家名或UUID` | 指定玩家可见 | --- ## 八、NPC 行为系统 在 NPC JSON 中添加 `custom_behaviours` 数组,或引用外部文件: ### 行为类型 #### 1. 巡逻 (patrol) ```json { "type": "patrol", "loop": true, "speed": 0.5, "condition": "time:day", "waypoints": [ { "world": "world", "x": 100, "y": 64, "z": 100, "wait": 3 }, { "world": "world", "x": 200, "y": 64, "z": 100, "wait": 2 }, { "world": "world", "x": 200, "y": 64, "z": 200, "wait": 3 } ] } ``` #### 2. 跟随玩家 (follow) ```json { "type": "follow", "radius": 10, "speed": 0.3, "max_distance": 3 } ``` #### 3. 攻击 (attack) ```json { "type": "attack", "damage": 4.0, "range": 3.0, "target": "players", // players / hostile_mobs / all_mobs "retaliate_only": false, // false=主动攻击, true=只反击 "attack_speed": 1.5, // 每秒攻击次数 "condition": "time:night" } ``` #### 4. 手持物品 (hold_item) ```json { "type": "hold_item", "material": "IRON_SWORD", "hand": "main_hand" // main_hand / off_hand } ``` #### 5. 时间表 (schedule) ```json { "type": "schedule", "schedule": [ { "time": "06:00-18:00", "world": "world", "x": 100, "y": 64, "z": 100, "active": true }, { "time": "18:00-06:00", "active": false } ] } ``` #### 6. 重生 (respawn) ```json { "type": "respawn", "enabled": true, "delay_seconds": 30, "restore_party": true, "respawn_message": "&c训练师 &e{npc_name} &c再次出现!" } ``` ### 行为条件 每个行为可选填 `condition` 字段: | 条件 | 格式 | 说明 | |------|------|------| | 时间 | `time:day` / `time:night` | 只在白天/夜晚执行 | | 权限 | `permission:权限节点` | 附近玩家有权限时执行 | | 任务接取 | `quest_accepted:任务ID` | 附近玩家接取了该任务 | | 任务完成 | `quest_completed:任务ID` | 附近玩家完成了该任务 | --- ## 九、NPC 特效系统 在 NPC JSON 中添加 `effects` 字段,或引用 `effects/` 目录下的文件: ```json { "effects": { "on_interact": { "sound": { "name": "entity.villager.yes", "volume": 1.0, "pitch": 1.2 }, "particle": { "type": "HEART", "count": 5, "offset": {"x":0.5,"y":2.0,"z":0.5}, "speed":0.1 } }, "on_battle_start": { "sound": { "name": "cobblemon:poke_battle.start", "volume": 1.0, "pitch": 1.0 }, "particle": { "type": "EXPLOSION_LARGE", "count": 3, "offset": {"x":0,"y":0.5,"z":0}, "speed":0.3 } } } } ``` 或引用外部文件:`"effects_ref": "nurse_joy_effects"`(从 `effects/nurse_joy_effects.json` 加载) --- ## 十、NPC 广播系统 存放位置:`plugins/StazzasNPC/announces/<名称>.yml` ```yaml nurse_joy: npc-id: "stazzasnpc:nurse_joy" # 关联的NPC resourceIdentifier interval: 120 # 广播间隔(秒) radius: 10 # 广播范围(方块), 0=全服 type: chat # chat / action_bar / title enabled: true messages: - "&e欢迎来到宝可梦中心!需要治疗你的宝可梦吗?" - "&e我们会把你的宝可梦恢复至最佳状态~" ``` ### 消息变量 | 变量 | 说明 | |------|------| | `{npc_name}` | 自动替换为NPC的当前显示名称 | --- ## 十一、NPC 预设系统 存放位置:`plugins/StazzasNPC/Presets/<名称>.json` 预设是预先定义好的 Cobblemon NPC 行为/AI 配置,可在 NPC JSON 的 `presets` 字段中引用。 ### 默认预设 | 文件名 | 用途 | |--------|------| | `wanders.json` | 随机游走行为 | | `looks_around.json` | 环顾四周行为 | | `base_npc_npcs.json` | 基础NPC属性 | ### 变体系统 (Variations) 在 NPC JSON 中添加 `variations` 字段实现 NPC 外观随机化: ```json { "variations": { "outfit": { "type": "weighted", "options": [ { "aspects": ["outfit_default"], "weight": 7 }, { "aspects": ["outfit_formal"], "weight": 2 }, { "aspects": ["outfit_sporty"], "weight": 1 } ] }, "hairstyle": { "type": "random", "aspects": ["hair_short", "hair_long", "hair_ponytail", "hair_spiky"] } } } ``` --- ## 11、权限节点汇总 | 权限节点 | 用途 | |----------|------| | `stazzasnpc.adm` | 管理员 — NPC管理、生成、删除、编辑器、声望/广播/行为/皮肤管理 | | `stazzasnpc.reload` | 重载配置 | | `stazzasnpc.trade` | 使用 NPC 交易功能 | | `stazzasnpc.daily` | 使用每日任务 | | `stazzasnpc.faction` | 查看阵营界面 | | `stazzasnpc.rocket.elite` | 示例:火箭队精英等级专属权限 | --- ## 12、赠礼系统 玩家潜行 + 右键 NPC = 赠送手持物品。 在 NPC JSON 的 `gifts` 中配置可接受的礼物: ```json { "gifts": [ { "item": "DIAMOND", "rep_change": 25, "message": "&a谢谢!我很喜欢!", "reject_message": "&c我不需要这个...", "name_match": "", "lore_match": "" } ] } ``` `name_match` / `lore_match` 支持按物品名称或Lore文本模糊匹配。 --- ## 13、快速开始示例 ### 创建一个会说话的 NPC **1.** 创建 `plugins/StazzasNPC/NPCs/test_npc.json`: ```json { "type": "dialogue", "resourceIdentifier": "stazzasnpc:test_npc", "names": ["&e测试NPC"], "presets": ["wanders", "looks_around"], "interaction": [ { "dialogue": "stazzasnpc:hello_dialogue", "priority": 100 } ] } ``` **2.** 创建 `plugins/StazzasNPC/Dialogues/hello_dialogue.json`: ```json { "speakers": { "player": { "face": "q.player.face()", "name": {"type":"expression","expression":"q.player.username"} }, "npc": { "face": {"type":"artificial","modelType":"npc","identifier":"cobblemon:standard"}, "name": "测试NPC" } }, "pages": [ { "id": "page1", "speaker": "npc", "lines": ["你好,旅行者!", "欢迎来到这个世界。"] } ] } ``` **3.** 游戏中执行: `/cbn spawn test_npc` **4.** 右键 NPC 即可触发对话 [/MD]
作者
Stazza
查看
373
首次发布
最后更新

评分

0.00 星 0 次评分

最新更新

  1. [1.21.1][Arclight] StazzasNPC——Cobblemon的自定义NPC,好感度系统上线!!觉得adyeshach等npc插件繁琐的不妨试试我吧,解决方可梦服务器大部分问题!!

    StazzasNPC——Cobblemon的自定义NPC,好感度系统上线!!觉得adyeshach等npc插件繁琐的不妨试试我吧,解决方可梦服务器大部分问题!!...
后退
顶部 底部