配置
NuStarParty 的所有配置文件都在:plugins/NuStarParty/。
修改后可用 /nsp reload(需要 NuStarPartyAdminPerm)重载 config.yml / language.yml / 菜单文件。
config.yml
debug: false
# 队伍最大人数
party-max-size: 25
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
party-max-size | int | 25 | 队伍可加入的“队员”上限(不含队长)。队伍总人数 = party-max-size + 1(队长)。 |
debug | boolean | false | 预留字段:当前版本不会直接根据它切换日志输出,可保持默认。 |
language.yml(消息文案)
- 支持
§颜色代码(例如§a) - 支持变量替换:
{leader}、{member}等 - 部分 key 可能为预留/历史遗留(当前版本未必会触发),可先保持默认
常用变量
| 变量 | 含义 |
|---|---|
{leader} | 队长名称 |
{member} | 队伍成员名称 |
{player} | 申请入队的玩家名称 |
{applicant} | 入队申请者名称(队长处理申请时) |
{inviter} | 邀请人名称 |
{invited} | 被邀请人名称 |
{reason} | 踢出原因 |
{destination} / {mode} | 预留变量(当前版本无对应功能逻辑) |
Key 清单(按场景)
基础
| Key | 场景 | 变量 |
|---|---|---|
onCreateParty | 创建队伍成功 | - |
onNotJoinParty | 没有加入任何队伍 | - |
onSomeoneJoinedParty | 有人加入队伍 | {member} |
onJoinParty | 自己加入队伍 | {leader} |
onQuitParty | 自己退出队伍 | {leader} |
onMemberQuitParty | 队员退出队伍 | {member} |
onPartyFull | 队伍已满 | {leader} |
onPartyNotExist | 队伍不存在 | - |
onPartyAlreadyExist | 已有队伍 | - |
onPartyAlreadyJoined | 已经加入过队伍/已有队伍 | - |
入队申请
| Key | 场景 | 变量 |
|---|---|---|
onJoinPartyApplication | 自己发起入队申请 | {leader} |
onSomeoneJoinPartyApplication | 有人申请加入你的队伍(队长收到) | {player} |
onJoinPartyAccept | 入队申请被通过 | {leader} |
onJoinPartyRefuse | 队长拒绝申请(队伍内广播) | {leader} {applicant} |
onPartyRefuseJoinApplication | 自己的申请被拒绝 | {leader} |
onJoinPartyApplicationAlreadyExist | 重复申请 | - |
onNonLeaderOpenJoinApplicationMenu | 非队长打开申请列表 | - |
onNonLeaderHandleJoinApplication | 非队长处理申请 | - |
邀请
| Key | 场景 | 变量 |
|---|---|---|
onInviteJoinParty | 自己发出邀请 | {invited} |
onSomeoneInviteJoinParty | 收到邀请 | {inviter} {leader} |
onInviteJoinPartyAccept | 自己接受邀请 | {inviter} |
onInviteJoinPartyRefuse | 自己拒绝邀请 | {inviter} |
onInviteAlreadyJoinedParty | 被邀请者已在队伍中 | {invited} |
onSomeoneInviteJoinPartyRefuse | 被邀请者拒绝邀请(邀请人收到) | {invited} |
onInviteApplicationAlreadyExist | 重复邀请 | {invited} |
踢人
| Key | 场景 | 变量 |
|---|---|---|
onKickedOutParty | 被踢的人收到 | {leader} {reason} |
onKickParty | 队伍内广播踢人 | {leader} {member} {reason} |
onKickPartyFail | 非队长踢人失败 | - |
onKickPartyNotInParty | 目标不在队伍中 | - |
解散
| Key | 场景 | 变量 |
|---|---|---|
onPartyDisband | 队长解散成功(自己收到) | - |
onLeaderDisbandParty | 队伍解散广播(队员收到) | {leader} |
onNonLeaderDisbandParty | 非队长尝试解散 | - |
地牢(可选联动)
| Key | 场景 | 变量 |
|---|---|---|
onNonLeaderStartDungeon | 非队长尝试开本 | - |
onOtherMemberInDungeon | 有队员在地牢内,阻止开本 | - |
onTeleportToDungeon | 中途进队,传送到地牢 | - |
onTeleportToDungeonConditionsNotMet | 中途进队但条件不满足 | - |
onCannotDisbandPartyWhileInDungeon | 地牢内禁止解散队伍 | - |
菜单文件(GUI)
首次启动会释放默认菜单文件到 plugins/NuStarParty/:
party-menu.yml:公共队伍列表my-party-menu.yml:我的队伍管理party-join-application-menu.yml:入队申请列表invite-menu.yml:邀请列表player-list-menu.yml:玩家列表
菜单结构速览
每个菜单文件大致结构如下:
MenuName: "队伍菜单"
Title: "§7§l队伍列表"
Layout:
- "#########"
- "# #"
Buttons:
'#':
name: "§8—"
material: "stained_glass_pane"
'A':
name: "§7上一页"
material: "paper"
type: "lastPage"
Layout:用字符画定义布局;Buttons里同名字符会被渲染为静态按钮type:静态按钮的行为类型(见下方)- 空白槽位:用于渲染“动态列表”(队伍/成员/申请/邀请/玩家)
已内置的 type 行为
| type | 作用 |
|---|---|
lastPage / nextPage | 翻页 |
createParty | 创建队伍(成功后打开“我的队伍”) |
myParty | 打开“我的队伍” |
partyList | 打开“队伍列表” |
playerList | 打开“玩家列表” |
inviteApplicationList | 打开“邀请列表” |
joinApplicationList | 打开“申请列表”(队长专用) |
quitParty | 退出队伍(队长会触发转让/解散逻辑) |
disbandParty | 解散队伍(队长专用;DungeonPlus 联动时地牢内会被禁止) |
动态按钮与固定点击行为
动态列表按钮的点击行为是固定的(不通过 type 配置切换),但你可以修改它们的显示样式与 Lore 提示:
party-menu.yml→Buttons.party:点击队伍条目会“申请加入该队伍”my-party-menu.yml→ 成员按钮:Shift + 左键踢人;Shift + 右键转让队长party-join-application-menu.yml→ 申请者按钮:左键通过;右键拒绝invite-menu.yml→ 邀请者按钮:左键接受;右键拒绝player-list-menu.yml→ 玩家按钮:左键邀请加入队伍(邀请理由固定为“通过玩家列表邀请”)
菜单占位符
菜单中可使用占位符(形如 {name}),用于动态渲染玩家与队伍信息。
基础占位符
| 占位符 | 含义 | 需要在线 |
|---|---|---|
{name} | 玩家名 | 否 |
{level} | 玩家等级 | 是 |
{health} | 当前生命值(保留 2 位小数) | 是 |
{maxHealth} | 最大生命值(保留 2 位小数) | 是 |
{last_online} | 上次在线时间(Asia/Shanghai) | 否 |
队伍相关占位符
| 占位符 | 含义 |
|---|---|
{slots} | 剩余空位(或“满人”) |
{partyLeader} | 该玩家所在队伍的队长名 |
{partySize} | 队伍总人数(成员数 + 1) |
{partyMaxSize} | 队伍最大人数(来自 Party.getMaxSize()) |
邀请理由
在 invite-menu.yml 的 invite-apply-lore 中可使用 {inviteReason},会自动按行换行展示。