首页 | Blogs | 项目合集 | Bilibili↗
←返回 |
创建:2025-05-03 | 最后更新:2025-05-03
[i] 栈流Streack服务器฿,原版高版本,双端互通,欢迎来看。
Placeholder
CMI 所有地方都支持Placeholder全局变量,下面这些是CMI默认有的
占位符名称 | 描述 |
---|---|
%cmi_user_charges_left% |
|
%cmi_user_charges_max% |
|
%cmi_user_charges_time% |
|
%cmi_user_charges_cooldown% |
|
%cmi_user_display_name% |
|
%cmi_p_[playerName]_display_name% |
|
%cmi_user_cleannickname% |
|
%cmi_user_nickname% |
|
%cmi_user_name% |
|
%cmi_user_uuid% |
|
%cmi_user_uuid_% |
|
%cmi_user_deathloc% |
|
%cmi_user_backloc% |
|
%cmi_user_cuffed% |
|
%cmi_p_[playerName]_cuffed% |
|
%cmi_user_muted% |
|
%cmi_p_[playerName]_muted% |
|
%cmi_user_inpvp% |
|
%cmi_user_god% |
|
%cmi_p_[playerName]_god% |
|
%cmi_user_sneaking% |
|
%cmi_user_mail_count% |
|
%cmi_user_warning_count% |
|
%cmi_user_warning_points% |
|
%cmi_user_afk% |
|
%cmi_user_afk_symbol% |
|
%cmi_user_afk_msg% |
|
%cmi_user_afk_for% |
|
%cmi_user_afk_in% |
|
%cmi_user_spy% |
|
%cmi_user_cmdspy% |
|
%cmi_user_signspy% |
|
%cmi_user_joinedcounter% |
|
%cmi_user_banned% |
|
%cmi_p_[playerName]_banned% |
|
%cmi_user_maxhomes% |
|
%cmi_user_homeamount% |
|
%cmi_user_homelist% |
|
%cmi_user_missingexp% |
|
%cmi_user_missingexpp% |
|
%cmi_user_exp% |
|
%cmi_user_expp% |
|
%cmi_user_totalexp% |
|
%cmi_user_level% |
|
%cmi_user_ping% |
|
%cmi_user_gamemode% |
|
%cmi_user_op% |
|
%cmi_user_pweather% |
|
%cmi_user_weather% |
|
%cmi_user_weatherduration% |
|
%cmi_user_canfly% |
|
%cmi_user_flying% |
|
%cmi_user_vanished_symbol% |
|
%cmi_user_balance_formatted% |
|
%cmi_user_balance% |
|
%cmi_user_prefix% |
|
%cmi_user_suffix% |
|
%cmi_user_group% |
|
%cmi_user_nameplate_prefix% |
|
%cmi_user_nameplate_suffix% |
|
%cmi_user_tfly% |
|
%cmi_user_tfly_formatted% |
|
%cmi_user_flightcharge% |
|
%cmi_user_tgod% |
|
%cmi_user_tgod_formatted% |
|
%cmi_user_votecount% |
|
%cmi_user_dailyvotecount% |
|
%cmi_user_chatcolor% |
|
%cmi_user_rank_displayname% |
|
%cmi_user_rank_name% |
|
%cmi_user_nextranks% |
|
%cmi_user_nextrankpercent% |
|
%cmi_user_nextvalidranks% |
|
%cmi_user_canrankup% |
|
%cmi_user_country% |
|
%cmi_user_country_code% |
|
%cmi_user_city% |
|
%cmi_user_name_colorcode% |
|
%cmi_user_glow_code% |
|
%cmi_user_glow_name% |
|
%cmi_user_jailed% |
|
%cmi_p_[playerName]_jailed% |
|
%cmi_user_jailname% |
|
%cmi_p_[playerName]_jailname% |
|
%cmi_user_jailcell% |
|
%cmi_p_[playerName]_jailcell% |
|
%cmi_user_jailtime% |
|
%cmi_p_[playerName]_jailtime% |
|
%cmi_user_jailreason% |
|
%cmi_p_[playerName]_jailreason% |
|
%cmi_user_jailedby% |
|
%cmi_p_[playerName]_jailedby% |
|
%cmi_user_riding% |
|
%cmi_user_beingriddenby% |
|
%cmi_user_bungeeserver% |
|
%cmi_user_rt_cooldown% |
|
%cmi_user_rt_cooldown_[worldName]% |
|
%cmi_user_playtime_formatted% |
|
%cmi_user_playtime_days% |
|
%cmi_user_playtime_dayst% |
|
%cmi_user_playtime_hours% |
|
%cmi_user_playtime_hoursf% |
|
%cmi_user_playtime_hourst% |
|
%cmi_user_playtime_minutes% |
|
%cmi_user_playtime_minutest% |
|
%cmi_user_playtime_seconds% |
|
%cmi_user_playtime_secondst% |
|
%cmi_user_prewards_count% |
|
%cmi_user_world_formatted% |
|
%cmi_user_online% |
|
%cmi_p_[playerName]_online% |
|
%cmi_user_itemcount_[itemIdName(:data)]% |
|
%cmi_user_maxperm_[playerName]_[corePerm]_[defaultValue]% |
|
%cmi_user_toggle_[msg\|pay\|tp\|compass\|sospy\|sispy\|cospy\|schest\|autoflightrecharge\|totem\|shiftedit\|tagsound\|chatbubble]% |
|
%cmi_user_togglename_[msg\|pay\|tp\|compass\|sospy\|sispy\|cospy\|schest\|autoflightrecharge\|totem\|shiftedit\|tagsound\|chatbubble]% |
|
%cmi_user_holo_page_[hologramName]% |
|
%cmi_equation_[equation]% |
计算一个算式 |
%cmi_equationint_[equation]% |
|
%cmi_color_[text]% |
|
%cmi_iteminhand_displayname% |
|
%cmi_iteminhand_realname% |
|
%cmi_iteminhand_type% |
|
%cmi_iteminhand_itemdata% |
|
%cmi_iteminhand_amount% |
|
%cmi_iteminhand_durability% |
|
%cmi_iteminhand_maxdurability% |
|
%cmi_iteminhand_custommodeldata% |
|
%cmi_iteminhand_worth% |
|
%cmi_iteminhand_worth_one% |
|
%cmi_iteminhand_worthc% |
|
%cmi_iteminhand_worthc_one% |
|
%cmi_schedule_nextin_[schedName]% |
|
%cmi_schedule_endat_[schedName]% |
|
%cmi_baltop_name_[1-10]% |
|
%cmi_baltop_money_[1-10]% |
|
%cmi_baltop_shortmoney_[1-10]% |
|
%cmi_playtimetop_name_[1-10]% |
|
%cmi_playtimetop_time_[1-10]% |
|
%cmi_votetop_[1-10]% |
|
%cmi_votetopcount_[1-10]% |
|
%cmi_worth_buy_[itemIdName(:data)]% |
|
%cmi_worth_sell_[itemIdName(:data)]% |
|
%cmi_worthc_buy_[itemIdName(:data)]% |
|
%cmi_worthc_sell_[itemIdName(:data)]% |
|
%cmi_bungee_total_[serverName]% |
|
%cmi_bungee_current_[serverName]% |
|
%cmi_bungee_motd_[serverName]% |
|
%cmi_bungee_onlinestatus_[serverName]% |
|
%cmi_tps_1% |
这个不知道为什么,值为20 的时候不会交替显示一个* |
%cmi_tps_60% |
|
%cmi_tps_300% |
|
%cmi_tps_[range]_colored% |
|
%cmi_tps_[range]% |
|
%cmi_random_player_name% |
|
%cmi_lastrandom_player_name% |
|
%cmi_random_[from]_[to]% |
|
%cmi_lastrandom_[playerName]% |
|
%cmi_user_rank_percent[rankName]% |
|
%cmi_user_meta_[key]% |
这两个用法见下文 |
%cmi_user_metaint_[key]% |
|
%cmi_chatmute_time% |
|
%cmi_chatmute_reason% |
|
%cmi_user_baltop% |
|
%cmi_user_stats_[mainStat(:optionalSubStat)]% |
|
%cmi_user_kitcd_[kitName]% |
|
%cmi_user_kit_available% |
|
%cmi_user_kit_available_[kitName]% |
|
%cmi_user_kit_hasaccess_[kitName]% |
|
%cmi_jail_time_[playerName]_[cellId]% |
|
%cmi_jail_username_[playerName]_[cellId]% |
|
%cmi_jail_reason_[playerName]_[cellId]% |
|
%cmi_weather_[worldName]% |
|
%cmi_weatherduration_[worldName]% |
|
%cmi_afk_count% |
|
%cmi_maintenance_state% |
|
%cmi_maintenance_message% |
|
%cmi_chat_range% |
|
%cmi_server_uptime% |
获取服务器运行时长,需要注意是有格式的,末尾要用§r 重置一下 |
%cmi_server_uptime_seconds% |
|
%cmi_server_worlds% |
|
%cmi_server_vanished% |
|
%cmi_server_users% |
|
%player_world% |
|
%cmi_player_world% |
|
%player_x% |
|
%cmi_player_x% |
|
%player_y% |
|
%cmi_player_y% |
|
%player_z% |
|
%cmi_player_z% |
|
%player_biome% |
|
%cmi_player_biome% |
|
%vault_eco_balance_formatted% |
|
%server_online% |
|
%cmi_server_online% |
|
%server_max_players% |
|
%cmi_server_max_players% |
|
%cmi_server_online_[worldName]% |
|
%server_unique_joins% |
|
%cmi_server_unique_joins% |
|
%onlineplayers_names% |
|
%cmi_onlineplayers_names% |
|
%onlineplayers_displaynames% |
|
%cmi_onlineplayers_displaynames% |
|
%cmi_server_time_[timeFormat]_[timeZone]% |
|
%cmi_server_time_[timeFormat]% |
|
%cmi_world_time12_[worldName]% |
|
%cmi_world_time24_[worldName]% |
Usermate
CMI的Usermeta可以理解为一个以玩家为核心的记分板:
项目 | /scoreboard |
/cmi usermeta |
/data stroge |
---|---|---|---|
对象 | 先创建记分板再操作分数 | 直接将分数赋值到玩家上 | 操作对象的NBT数据 |
目标 | 任一实体或虚拟对象 | 玩家 | 任一实体或虚拟对象 |
非法玩家名支持 | ✓ | ||
UUID支持 | ✓ | ✓ | ✓ |
目标选择器 | ✓ | ✓ | |
Placeholder | 需要额外插件 | ✓ | 需要额外插件 |
数据包友好 | ✓ | ✓ |
Usermeta可以用Placeholder%cmi_user_meta_[key]%
和%cmi_user_metaint_[key]%
读取,配合下方脚本操作符可以实现一些好玩的功能。
脚本操作符
CMI 的几乎所有预置命令部分都支持下方的操作符。
可以说这几乎构成了一个脚本语言……
下列场景均可以使用:
- CustomAlias(自定义别名,不过我建议改名叫自定义命令,因为实在是太强大了)
/cmi attachcommand
- 牌子命令
Schedules.yml
EventCommands.yml
- ……
占位符
需要命令上文含有玩家
内容 | 描述 |
---|---|
[playerName] |
插入玩家名 |
[playerDisplayName] |
插入玩家显示名 |
[lvl] |
插入玩家等级 |
[exp] |
插入玩家经验 |
[hp] |
插入玩家血量 |
[maxHp] |
插入玩家最大血量 |
[hunger] |
插入玩家饥饿值 |
[gameMode] |
插入玩家游戏模式 |
[randomPlayer] |
等效于选择器@r ,即随机玩家 |
子命令
内容 | 描述 |
---|---|
msg! <玩家> |
给玩家发私聊,等效于/tellraw <玩家> "消息" |
broadcast! |
|
actionbar! <玩家> |
给玩家展示物品栏标题 |
title! <玩家> |
给玩家展示标题 |
subtitle! <玩家> |
给玩家展示副标题 |
kickall! |
以后面接的理由踢出全部玩家,OP除外(准确来说是拥有对应bypass权限节点) |
delay! <秒> [名字] |
暂停执行 |
canceldelay:<名字>! |
取消暂停执行 |
cooldown:<秒>! |
其后指令在冷却结束后才能触发 |
ucooldown:<秒>! |
相同事件的冷却 |
gcooldown:<秒>! |
冷却时间内全服玩家都不能二次触发 |
逻辑子命令
内容 | 描述 |
---|---|
statement:<检测名称>! <条件1>! <条件2>! <...>! |
|
if:<检测名称>! <上述条件全符合后执行的指令> |
|
if:<检测名称>@! <上述条件不符合后执行的指令> |
条件子命令
以下条件子命令的!
前面可以接符号:
?
会在检验失败时通知玩家#
会在检验失败后直接结束当前任务,即后续命令不再执行@
反转检验条件- 可以混合使用
内容 | 描述 |
---|---|
check:<第一个值><比较符><第二个值>! |
比较两个值(可以是Placeholder),只有符合条件才能执行后续指令,比较符可以是==/</<=/>/>=/!= |
perm:[permissionNode]! |
拥有权限节点才执行 |
perm:[permissionNode]@! |
权限节点被拒绝时执行后方命令 |
moneycost:<金钱>! |
有足够的钱的玩家可以触发后续指令 |
hasmoney:<金钱>! |
检测玩家是否有足够的钱,但不扣除 |
expcost:<经验>! |
有足够的经验的玩家可以触发后续指令 |
hasexp:<经验>! |
检测玩家是否有足够的经验,但不扣除 |
item:<物品ID>! |
有该物品的玩家可以触发后续的指令;可以给其增加数量参数,写成item:<物品ID>-<数量>! |
hasitem:<物品ID>! |
检测玩家是否有足够的物品,但不扣除;可以给其增加数量参数,写成item:<物品ID>-<数量>! |
ifonline:<玩家名>! |
若指定玩家在线则触发后续指令 |
ifoffline:<玩家名>! |
若指定玩家不在线则触发后续指令 |
ifempty:<hand/offhand/quickbar/armor/inv/subinv>! |
若玩家背包里特定格子是空的则触发后续指令;可以给其增加数量参数,例如ifempty:<位置>-<数量> 其中 quickbar 是快捷九格栏,armor 是盔甲四格栏,inv 是整个背包,subinv 是除掉快捷栏9格的剩下27格栏 |
votes:<票数>! |
玩家获得一定投票才能执行后续指令 |
click:<点击方式>! (仅适用于IC指令绑定) |
玩家必须以某种方式点击方块才能生效,可用left /leftshift /right /rightshift |