# MapperPlugin
**Repository Path**: TasteSteak/mapper-plugin
## Basic Information
- **Project Name**: MapperPlugin
- **Description**: MapperPlugin模组使用说明
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2024-10-12
- **Last Updated**: 2025-08-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# MapperPlugin 文档
If you need the English documentation, please refer to [English Documentation](README.md).
>为造图提供更多元素以及功能。该插件旨在通过扩展功能和增强灵活性。它基于作者在学习过程中的经验和探索,致力于为用户提供更多创作选择和优化工具。
版本 1.4.4-fabric+1.21
[更新日志](#更新日志)
** *
## 功能
该模组主要提供了 Command指令 来实现.
注意:对于部分指令,如果执行者不是 玩家对象 ,则需要利用execute来更改执行者.
考虑到基于造图师使用,所有指令仅需权限2级.
** *
### 游戏规则
实体伤害间隔 `mobDamageInvulnerable`(默认true)
若更改此游戏规则,则实体不再拥有伤害无敌间隔.
玩家伤害间隔 `playerDamageInvulnerable`(默认true)
若更改此游戏规则,则玩家不再拥有伤害无敌间隔.
展示实体类`DisplayEntity` 的`Pitch`值不再受原版限制([-90F,90F]),您可以随意地更改!
现指令 `/data` 可修改玩家数据
### 玩家属性值
多段跳能力 `mapperplugin:player.multi_jump` (默认1.0, 最小1.0, 最大6.0)
玩家的多段跳能力,若更改此选项,只对整数型生效.
### NBT 标签
玩家的鼠标输入将会被监听并存储到自身NBT中(只读).
例:
{Options: {attack:0, use:0, space:0, sneak:0}}
int型表示: `0 未按下按键` `1 按下了按键` `2 按住了按键` `3 松开了按键`
```
#示例代码
execute as @a[nbt={Options:{attack:2,use:3}}] run say 按住了攻击键且松开了交互键
```
对于 `WitherEntity`
新增NBT标签 `BossbarVisible` ,用于更改凋灵实体是否展示boss栏(默认true)
### DataComponent 物品组件
新增物品组件 `mapperplugin:attack_event` `mapperplugin:use_event`
```
#手持物品攻击实体时,将执行函数tutorial:attack
give @s minecraft:diamond[mapperplugin:attack_event:{function:"tutorial:attack"}]
#主手使用物品时,将执行函数tutorial:use
give @s minecraft:diamond[mapperplugin:use_event:{function:"tutorial:use"}]
#副手使用物品时,将执行函数tutorial:use
give @s minecraft:diamond[mapperplugin:use_event:{function:"tutorial:use", main_hand:false}]
```
### 自定义粒子
此粒子 `mapperplugin:abstract_custom_particle` 是一个用于自定义粒子的模板,允许您为粒子设置多个属性。
通过该粒子,您可以自由配置粒子的颜色变化、缩放、光照、重力影响、生命周期等参数.
```
{
name: "minecraft:end_rod", // 粒子的名称 (默认"minecraft:end_rod")
from_color: [0.5f, 0.0f, 0.0f, 1.0f], // 粒子起始颜色 (RGBA 格式) (默认[1.0f, 1.0f, 1.0f, 1.0f])
to_color: [0.3f, 1.0f, 1.0f, 1.0f], // 粒子结束颜色 (RGBA 格式) (默认[1.0f, 1.0f, 1.0f, 1.0f])
scale: 1.0, // 粒子缩放比例 (0.01 ~ 10.0) (默认1.0f)
light_sky: 15, // 粒子对天空的光照强度 (0 ~ 15) (默认15)
light_block: 15, // 粒子对方块的光照强度 (0 ~ 15) (默认15)
gravity: 0.1, // 粒子的重力影响程度 (-1.0 ~ 1.0) (默认0.0f)
life_time: 60, // 粒子的生命周期 (0~200 tick) (默认60)
min_life_time: 20 // 粒子的最小生命周期 (0~40 tick) (默认20)
}
```
```
#示例代码
particle mapperplugin:abstract_custom_particle{name:"minecraft:end_rod",from_color:[0.5f,0.0f,0.0f,1.0f],to_color:[0.3f,1.0f,1.0f,1.0f],scale:0.6,light_sky:15,light_block:15,gravity:0.1,life_time:60,min_life_time:20} ~ ~ ~ 0 0 0 0.1 500 normal
```
### 模组配置界面
该界面用于配置客户端某些内容.
-游戏启动时是否显示预启动图标
-渲染末地折跃门光束
-更改粒子数量上限
-声音监听器接收来源
-Cef浏览器接收来自MC发送的JS最大等待时间(需要MCEF库)
** *
### mp:camera
该指令实现了自定义相机功能.
用法:
```
mp:camera set
```
``: 玩家相机的坐标位置
``: 玩家相机的朝向
``: 是否允许相机进行x轴移动
``: 是否允许相机进行y轴移动
``: 是否允许相机进行z轴移动
``: 是否允许相机进行水平轴(yaw)移动
``: 是否允许相机进行垂直轴(pitch)移动
``: 从玩家视角到相机目标位置移动动画时长(秒)
``: 滑动类型.
```
easing(滑动类型)
├── linear(线性)
│ └── 描述: 匀速滑动,速率不变
│
├── ease_in(缓入)
│ └── 描述: 开始时速度较慢,然后逐渐加速
│
├── ease_out(缓出)
│ └── 描述: 开始时速度较快,逐渐减慢
│
└── ease_in_out(缓进出)
└── 描述: 开始和结束时较慢,中间较快
```
```
#示例代码(玩家为执行者)
mp:camera set ~ ~ ~-6 0 0 true false false false false 1.2 ease_in_out
#示例代码(非玩家为执行者)
execute as @p run mp:camera set 0 0 -6 0 0 true true false false false 0.6 linear
```
用法:
```
mp:camera option raycast
mp:camera option restrict
mp:camera option zoom
mp:camera option lock_rotation
mp:camera option shake
mp:camera option roll
mp:camera option fov_effect_scale
mp:camera option normalize
```
`raycast` ``: 相机射线距离,使用需要相机的使用`set`
`restrict` ` `: 相机被约束的活动范围,使用需要相机的使用`set`
`zoom` ` `: 相机缩放比率(0.1~16.0)、动画时长以及滑动类型(参考camera set )
`lock_rotation` ` `: 玩家视角朝向锁定,默认(true true)
`shake` ` `: 相机的摇晃强度、持续时长以及摇晃类型
`roll` ` `: 相机翻滚角度、动画时长以及滑动类型(参考camera set )
`normalize`: 归一化相机目标实体的朝向[-180,180)
`offset` ``: 相机相对偏移量,使用需要相机的使用`set` (测试)
`fov_eeffect_scale` ``: 相机的视场角效果
```
shake_type(摇晃类型)
├── positional(坐标)
│ └── 描述: 摇晃相机在空间中的位置,导致相机的位置发生变化
│
└── rotational(朝向)
└── 描述: 摇晃相机的朝向,导致相机的视角或旋转发生变化
```
```
#示例代码(玩家为执行者)
mp:camera option raycast 4
mp:camera option restrict ~-5 ~-5 ~-5 ~5 ~5 ~5
mp:camera option zoom 2 ease_out
mp:camera option lock_rotation false true
mp:camera option shake 1 5 postional
mp:camera option fov_effect_scale 1.0
mp:camera normalize
```
如果需要重置,输入
```
#重置相机的set配置
mp:camera set
#重置相机的所有option配置
mp:camera option
#重置相机射线距离
mp:camera option raycast
#重置相机约束范围(默认无)
mp:camera option restrict
#重置相机缩放比率
mp:camera option zoom
#重置玩家视角锁定朝向
mp:camera option lock_rotation
#清空玩家相机摇晃效果
mp:camera option shake
#重置相机翻滚效果
mp:camera option roll
#恢复相机视场角效果至默认
mp:camera option fov_effect_scale
#重置相机所有配置
mp:camera
```
### mp:chatclear
该指令用于清空玩家聊天栏历史记录(相当于`F3 + D`).
用法:
```
mp:chatclear
```
### mp:gui
该指令用于打开自定义界面(浏览器).
注意:调用此功能需要安装依赖库模组
`MCEF` ,否则无法使用(不会影响其他游戏正常打开和其他功能使用)
用法:
```
mp:gui create [ ]
mp:gui send (direct | filename ) ( | )
```
`create `: 传入URL,协议可以为`http://` `https://` `file:///` `mc://`(mc://代表导航至.minecraft文件夹为根目录)
`create `: (可选)设置窗口大小时 水平预留位置大小
`create `: (可选)设置窗口大小时 垂直预留位置大小
```
value(单位)
├── (无单位,将自动转为绝对值)
├── px(绝对值)
└── v(比例)
```
`create `: (可选) 是否禁用`Esc`以关闭界面(默认false) 并提供关闭按钮(右上角)
`create `: (可选) 是否禁用`Esc`以背景界面模糊(默认false)
`send ( | )`: 向处于打开自定义GUI(浏览器)中的玩家传递需要执行的JS或通过存储Storage传入JS方法名中执行
`send direct`: 直接进行传递
`send filename `: 筛选网页文件名相同的玩家进行传递
```
#示例代码(玩家为执行者)
mp:gui create 'https://www.bing.com' 0px 10v false true
#示例代码(非玩家为执行者)
execute as @p run mp:gui create 'mc:///logs/' 2 10px true false
#向所有打开了网页文件名为demo.html的玩家传递JS
execute as @a run mp:gui send filename 'demo.html' document.write('你好JS!
');
#传入Storage demo:test 给名为 storageMethod 的js方法并执行
mp:gui send direct storageMethod demo:test
#JS
function storageMethod(nbt) {
console.log(nbt);
}
```
**对于GUI开发者**
此功能基于JCEF浏览器 Chrome内核,如果你想自定义GUI,则需要一定的`HTML`基础知识.
JS接口:
```js
//具体实现方式由自己调整
//关闭 GUI界面
window.cefQuery({
request: "closeGUI",
persistent: false,
});
//调用 Minecraft指令
function queryMinecraftCommand(str) {
window.cefQuery({
"request": "command:" + str,
"persistent": false
});
}
//获取在线玩家列表
window.cefQuery({
request: "playerList",
persistent: false,
onSuccess: function (response) {
console.log(response)
}
});
```
```js
//请不要使用这种操作!
//错误案例,会导致死循环并占用网络通信
const cmd = 'mp:gui send direct queeryMinecraftCommand();';
function queryMinecraftCommand() {
window.cefQuery({
"request": "command:" + cmd,
"persistent": false
});
}
queryMinecraftCommand();
```
如果客户端调用GUI时无法响应JS请求,请尝试输入 `/mp:reconfig_cef` 指令以重新配置.
### mp:kick
该指令用于 踢出玩家,类似于`kick`指令,但它提供 Text文本 并允许任何选择器调用,包括`CommandBlock` `Server` `主机`等.
用法:
```
mp:kick
```
``: (可选) 踢出原因
```
#示例代码
mp:kick ["\u00a7c你没虫Q币"]
```
### mp:motion
该指令允许修改生物的`Motion`值.
用法:
```
mp:motion (set | append) [] []
```
`(set | append)`: 矢量修改类型(设置/添加)
``: x轴向量值
``: y轴向量值
``: z轴向量值
`[]`: 是否使用局部坐标,默认false
`[]`: 是否受Y轴参数影响,默认false
```
#示例代码
mp:motion 0 0 2 true true
```
### mp:pathfinder
该指令用于寻路导航,需要使用`循环调用`
用法:
```
mp:pathfinder
```
``: 传入一个坐标点,支持`~`和`^`(不建议)
`>`: 传入一个或多个坐标点
```
#示例代码
execute as @p run mp:pathfinder ~ ~ ~ ~ ~2 ~5
execute as @p run mp:pathfinder ~ 10 ~ ~5 ~14 ~ ~-8 12 ~9 ~1 ~ ~4
```
### mp:perspective
该指令用于修改玩家视角,相当于`F5`(默认按键)进行切换.
用法:
```
mp:perspective
```
``: 传入视角类型
```
perspective_type(视角类型)
├── FIRST_PERSON(第一人称)
├── THIRD_PERSON_BACK(第三人称背后)
└── THIRD_PERSON_FRONT(第三人称前方)
```
```
#示例代码
execute as @p run mp:perspective THIRD_PERSON_FRONT
```
### mp:pose
该指令用于修改生物动作, 可能会有奇怪的事情发生.
用法:
```
mp:pose
```
``: 动作类型,注意,不能保证玩家能够有效执行该动作
```
pose(动作类型)
├── standing(站立)
├── fall_flying(下落/飞行)
├── sleeping(睡觉)
├── swimming(游泳)
├── spin_attack(旋转攻击)
├── crouching(蹲下)
├── long_jumping(长跳)
├── dying(死亡)
├── croaking(呱呱叫)
├── using_tongue(使用舌头)
├── sitting(坐下)
├── roaring(咆哮)
├── sniffing(嗅探)
├── emerging(出现)
├── digging(挖掘)
├── sliding(滑行)
├── shooting(射击)
├── inhaling(吸气)
```
```
#示例代码
mp:pose swimming
```
### mp:shader
该指令允许更改玩家渲染的 `后期着色器` `shaders/post` ,并允许叠加(最多不超过10个,若超过则将清除最先前的着色器)
用法:
```
mp:shader add
mp:shader clear []
mp:shader uniform (add | remove | set)
```
``:传入有效的着色器路径,且文件要求为`JSON`文件
`uniform (add | remove | set) `: 添加/减少/设置 目标着色器的Uniform的值(可自定义Uniform)
若 `clear []`中未传入 ``,则表示重置所有已加载的后期着色器
```
#示例代码
mp:shader add minecraft:creeper
mp:shader clear rain_g:wasted
mp:shader uniform test:demo CustomUniform 0.2
```
### mp:particle
该指令用于绘画线段以及椭球体等 (当前版本`1.1.9`),注意!在不确定的情况下请勿一次性频繁地生成大规模粒子,会导致客户端无法响应需求甚至崩溃!
用法:
```
mp:particle lines
mp:particle sphere
mp:particle arc
```
``:传入粒子类型和效果
``: 传入Yaw偏转角度(Y轴偏转)
``: 传入Pitch偏转角度(X轴偏转)
``: 传入Z偏转角度(Z轴偏转)
``: 额外粒子速度(局部定位),受朝向影响
``:每个粒子之间的间隔
``:绘画完成所需动画时长,以毫秒为单位(1000即为1秒,但跟随客户端线程)(如果时间过短建议设置0减少性能损耗)
`lines `:粒子之间的随机偏移量
`lines >`:绘画线段类型的坐标点,支持多个坐标点
`[sphere | arc] `: 球体/圆弧中心点
`[sphere | arc] `:图案生成时使用的移动动画类型
`sphere `:椭球体X轴半径大小
`sphere `:椭球体Y轴半径大小
`sphere `:椭球体Z轴半径大小
`arc `:圆弧半径大小
`arc `: 圆弧角度(0~360)
```
motion_style(移动动画类型)
├── none(无)
├── shrink(收缩生成)
├── sphere(扩散生成)
├── incomplete_shrink(无序收缩生成)
└── incomplete_sphere(无序扩散生成)
```
注:偏转lines图案的旋转轴为执行位置处,若需要调整,可使用`execute [positioned | at]`等.
```
#示例代码
#生成五角星
execute as @p positioned ~ ~3 ~ run mp:particle minecraft:end_rod lines 0 0 0 0.0 0 0.0 0 0.1 1000 ~ ~3 ~-3 ~ ~3 ~3 ~ ~ ~-1.8 ~ ~5 ~ ~ ~ ~1.8 ~ ~3 ~-3
#生成爆发型球体
execute as @p positioned ~ ~3 ~ run mp:particle minecraft:end_rod sphere ~ ~ ~ 0 0 0 0.0 0 0.0 5 5 5 0.4 1000 incomplete_spread
#生成扩散型圆环
execute as @p at @s run mp:particle minecraft:end_rod sphere ~ ~ ~ 0 0 0 0.0 0 0.0 15 0 15 0.1 0 spread
#生成向前移动的线段,速度方向为执行位置方向
execute as @a rotated as @s run mp:particle minecraft:end_rod lines ~ ~ 0.0 0.0 0.0 0.4 0 0.1 0 ~ ~1 ~ ~ ~1 ~3
#生成喷发型球体,速度方向为执行位置方向
execute as @a positioned ~ ~2 ~ rotated as @s run mp:particle minecraft:end_rod sphere ~ ~ ~ ~ ~ 0 0.0 0.0 0.6 2 2 2 0.2 2000 incomplete_spread
#生成向前移动的圆弧,速度方向为执行位置方向
execute as @a at @s run mp:particle minecraft:end_rod arc ~ ~ ~ ~ ~ -45 0.0 0.0 0.7 2 180 0.1 0 none
```
### mp:mapgenerator
该指令用于将图片转换成地图画.
用法:
```
mp:mapgenerator create
```
``:传入的图片url路径,支持本地文件(玩家执行者的本地文件)、`HTTP`等
``:裁剪图片时的宽度数量(1~16)
``:裁剪图片时的高度数量(1~16)
``:渲染模式,不同生成模式会有不同的结果
```
mode(渲染模式)
├── minecraft_common(使用Minecraft原生渲染地图画)
│ └── 描述: 可能会丢失图片原有颜色
│
├── minecraft_grayscale(使用Minecraft原生渲染灰度图)
│ └── 描述: 牺牲更多色彩换取更高的精准度
│
└── mod_fix_compress(牺牲分辨率换取更高色彩)
└── 描述: 只有在安装MapperPlugin时才能正常渲染应有效果
```
```
#示例代码
#以MINECRAFT_COMMON模式生成2x1(2张)在系统D盘中的test.png文件
mp:mapgeneractor create "file:///D:/test.png" 2 1 minecraft_common
#以MOD_FIX_COMPRESS模式生成3x3(9张)在网上中的abc.jpg文件
mp:mapgeneractor create "https://url.example.com/abc.jpg" 3 3 mod_fix_compress
```
### mp:stats
(测试) 该指令用来更新玩家状态.
用法:
```
mp:stats
```
``:状态类型
```
#示例代码
mp:stats jump
```
### mp:input
该指令用于控制玩家操作权限和控制.
用法:
```
mp:input permission (disabled | enabled)
mp:input cooldown
mp:input operate
```
`permission `: 权限类型.
```
permission(权限类型)
├──all (全部)
│ ├── movement (移动)
│ │ ├── lateral_move (按键移动)
│ │ │ ├── move_forward (前进)
│ │ │ ├── move_backward (后退)
│ │ │ ├── move_left (左移)
│ │ │ └── move_right (右移)
│ │ ├── jump (跳跃)
│ │ └── sneak (潜行)
│ ├── rotation (旋转)
│ │ ├── rotation_horizontal (水平旋转)
│ │ └── rotation_vertical (垂直旋转)
│ ├── mouse (鼠标)
│ │ ├── mouse_attack (鼠标攻击)
│ │ ├── mouse_use (鼠标使用)
│ │ └── mouse_pick_item (鼠标拾取物品)
│ ├── perspective (视角)
│ ├── smooth_camera (平滑相机)
│ ├── hotbar_keys (快捷栏按键)
│ ├── social_interaction (社交互动)
│ ├── inventory (背包)
│ ├── advancement (成就)
│ ├── swap_hand (交换手)
│ ├── drop_item (丢弃物品)
│ └── chat (聊天)
```
`cooldown `: 冷却目标
```
cooldown(冷却目标)
├── attack(攻击[实体])
├── use(放置/交互)
├── space(空格键)
└── all(全部)
```
`cooldown `: 最大冷却时间(0~10000s)(独立)
`operate `: 执行操作
```
#示例代码
mp:input permission movement disabled
mp:input cooldown attack 10
```
重置:将所需参数填空即可,或
```
mp:input
```
### mp:aimassist
该指令用于更改辅助瞄准功能.
注意:启用后,将监听 `破坏/攻击键` `放置/交互键`.
用法:
```
mp:aimassist []
```
``: 指定 Yaw 角度 (5.0~180.0)
``: 指定 Pitch 角度 (5.0~90.0)
``: 指定最大距离 (1.0~16.0)
``: 指定瞄准模式(优先级) `angle`(角度优先) `distance`(距离优先)
```
target_mode(瞄准模式)
├── angle(角度优先)
└── distance(距离优先)
```
`[FocusTime: long]`: (可选)在相机锁定视角时玩家受辅助瞄准标记的时长(默认0L, 0~2000L 毫秒)
```
mp:aimassist 20 20 5 distance
```
重置(关闭)辅助瞄准:
```
mp:aimassist
```
### mp:hotbar
该指令用于设置玩家选中的槽位栏.
用法:
```
mp:hotbar
```
``: 选中的槽位栏(1~9)
``: 是否锁定(锁定后,玩家无法更换槽位栏)
```
#示例代码
mp:hotbar 1 true
```
重置方法
```
mp:hotbar
```
### mp:target
此指令用于标记实体或者寻路导航.
注意:某些实体拥有独特的机制,对于某些生物标记将不会长期生效,如`Piglin` `Hoglin`.
用法:
```
mp:target entity [force]
mp:target navigation ( | )
```
``: 执行者,要求为 `MobEntity` 类
`entity `: 标记实体,目标
`entity [force]`: (可选)强制标记,直到目标不存在为止
`navigation ( | )`: 导航抵达终点位置,可以是实体也可以是坐标
`navigation `: 导航最长有效时间(0~600 tick),超时将会停止导航
```
#示例代码
mp:target @n[type=zombie] entity @n[type=pig] force
mp:target @n[type=!player] navigation @s ~ ~ ~ 100
```
重置方法
```
#注:如果标记的是玩家,则执行者重置标记可能无效.
mp:target entity
mp:target navigation
```
### mp:animate
此指令用于播放玩家动画.
此功能依赖于库(您无需再次安装) `PlayerAnimator`, 当前导入的版本:`player-animation-lib-fabric-2.0.0+1.21.1`, 作者`KosmX`
动画数据文件将在数据包中加载 `data//animations/`.
用法:
```
mp:animate play
mp:animate stop
```
`play `: 播放动画数据文件的资源位置
`play `: 播放动作时玩家移动是否会中断动画(默认 false)
`stop`: 停止播放动画
```
#示例代码
#假设有数据包templete data/namespace/animations/waving.json
mp:animate play namespace:waving
```
### mp:hud
此指令用于自定义绘制HUD。
本模组提供了通过json文件来实现自定义绘制HUD(后续会介绍如何编写自定义数据文件),您只需要将准备好的文件放入对应位置后调用即可。
HUD数据文件将在数据包中加载 `data//hud/`.
用法:
```
mp:hud add
mp:hud clear []
mp:hud send
```
`add `: 需要加载的HUD配置文件
`clear []`: 需要清除的HUD文件,不填则清除所有已加载的HUD配置文件
`send `: 需要传输给目标HUD的信息(参考`function ... with`)
```
#示例代码
#假设有数据包templete data/namespace/hud/abc.json
mp:hud add namespace:abc
```
以下是如何自定义HUD文件:
```json lines
//这里包含了一个HUD文件,整个内容为LayerDraw
{
"name": "Example HUD", //文件名,必填
"version": "1.2.1", //文件版本,必填
"component": [ //包含一个或多个渲染图层组件,必填
渲染图层组件1...,
渲染图层组件2...,
渲染图层组件3...,
渲染图层组件4...,
...
],
"resource": [ //包含一个或多个纹理资源,在渲染时将使用预设好的资源,选填
纹理资源1...,
纹理资源2...,
纹理资源3...,
纹理资源4...,
...
],
"replacement": { //初始化时可变更文本的默认文本,如 $(key1) 在初始化后被显示为 value1
"key1": "value1",
"key2": "value2",
"key3": "value3",
"name": "@s" //如果可变更文本为@s,则返回玩家原始名
}
}
//纹理资源的数据格式,整个内容为TextureResource
{
"id": "BLACK", //纹理资源ID,必填
"path": [ //纹理资源的资源位置,若存在多个,则会根据数组大小以及分数追踪器提供的分数来返回对应的纹理,必填
"minecraft:hud/heart/withered_hardcore_half",
"minecraft:hud/heart/withered_hardcore_full"
],
"width": 11, //纹理的宽度大小,必填
"height": 11, //纹理的高度大小,必填
"offsetX": -1, //纹理的外边框宽度增加量,必填
"offsetY": -1, //纹理的外边框高度增加量,必填
"sprite": true //是否为精灵图类型,如果为false,则需要提供完整的纹理资源路径,默认为false,选填
}
{
"id": "COIN",
"path": "minecraft:textures/item/emerald.png", //不是精灵图类型,返回的纹理资源路径为完整路径,且带有文件名
"width": 10,
"height": 10,
"offsetX": -1,
"offsetY": -1
}
//渲染图层组件数据格式,整个内容为LayerDrawComponent
{
"style": { //组件的样式设置,必填
"position": "TOP_LEFT", //组件渲染基本位置,必须是这些选项之一:(TOP_LEFT TOP_CENTER TOP_RIGHT CENTER_LEFT CENTER CENTER_RIGHT BOTTOM_LEFT BOTTOM_CENTER BOTTOM_RIGHT)
"offsetX": 2, //宽度位置偏移量,需要填入整数型,选填
"offsetY": 3, //高度位置偏移量,需要填入整数型,选填
"background": 491300000, //组件的背景颜色,传入rgba十进制数,选填,默认透明(0)
"scale": 1.0, //组件整体渲染时的放大倍率,选填
"opacity": 1.0 //组件的可见透明度,选填
},
"context": [ //包含一个或多个绘制部分,每个绘制部分有不同的功能,必填
绘制部分1...,
绘制部分2...,
绘制部分3...,
绘制部分4...,
...
],
"animation": { //组件的动画帧配置,选填
"0": { //在第0时刻(tick)时的动画关键帧
"pos": [0, 0], //偏移量,分别是x轴、y轴,选填
"scale": 1.0, //缩放倍率,选填
"opacity": 1.0, //透明度,选填
"easing": "EASE_OUT" //滑动类型,选填(默认LINEAR)
},
"50": {
"pos": [50, 0],
"scale": 2.0,
"opacity": 0.5,
"easing": "LINEAR"
},
"100": {
"pos": [50, 30],
"scale": 5.0,
"opacity": 1.0,
"easing": "EASE_IN"
},
"200": {
"pos": [0, 0],
"scale": 0.5,
"easing": "LINEAR"
},
"loop": true //是否循环动画,可选,默认false
}
}
//绘制部分的数据格式,每个类型会有不同的写入方式,整个内容为PartContext
{
"type": "text", //绘制类型,必须是这些选项之一: (text player_head fetters item progress)
"value": [ //绘制部分包含的值,必填
{"text":"$(name)"}, //与Minecraft原本的文本组件一致,其中$(key)为可变更文本,@s表示玩家自己
{"text":"","color":"#FFDD50","objective":"coin"} //如果需要展示分数,可以在原有的文本组件上简写,如"score": {"objective":"coin"} 可以直接写成{"objective":"coin"}
],
"sort": "FOLLOW", //绘制部分的排序方式,必须是这些选项之一: (FOLLOW WRAP),选填,默认为FOLLOW
"shadow": true //是否启用阴影文本,选填,默认false
}
{
"type": "player_head",
"value": {
"player": "Steve", //绘制头像的玩家,可以填 @s 玩家ID 玩家UUID,可以使用可变更文本$(key),如果找不到对应值,则返回默认皮肤头像,必填
"size": 24, //绘制头像的尺寸,代表宽度和高度,必填
"playerHat": true //是否渲染玩家帽子部分,选填
},
"sort": "FOLLOW"
}
{
"type": "fetters", //根据分数追踪器的值来重复绘制纹理
"value": {
"id": "HEALTH", //纹理资源ID
"objective": "heart", //分数追踪器的计分板对象,如果没有给定值,则获取该计分板值,默认为0,必须有(objective 或 value)之一
"value": 14, //分数追踪器的固定值,如果有该键值,则优先返回该值,而不是计分板对象,必须有(objective 或 value)之一
"container": { //绘制纹理前的容器,会优先绘制容器内的纹理,选填
"id": "HEALTH_BACKGROUND", //容器纹理资源ID
"value": 6 //与上面描述一致,为分数追踪器,返回结果
}
}
}
{
"type": "item", //绘制物品部分
"value": {
"item": "#selected", //物品目标,需要填入玩家背包内的槽位(如 hotbar.1) 或 #selected(主手手持物品),否则返回空,必填
"count": { //物品数量,根据分数追踪器提供的值返回数量
"objective": "coin"
},
"custom_model_data": 0 //物品自定义模型数据,选填
},
"sort": "FOLLOW"
}
{
"type": "progress", //绘制进度条部分
"value": {
"width": 240, //进度条的总长度,必填
"height": 8, //进度条的总宽度,必填
"value": { //当前进度条的值,由分数追踪器返回,必填
"objective": "coin"
},
"max_value": { //进度条的最大值,由分数追踪器返回,必填
"value": 100
},
"progress": { //进度条的纹理设置,必填
"current": "minecraft:textures/gui/sprites/boss_bar/purple_progress.png", //当前值进度条,可以是纹理位置也可以是十进制颜色,必填
"alter": "minecraft:textures/gui/sprites/boss_bar/red_progress.png", //进度条时变化,可以是纹理位置也可以是十进制颜色,选填
"background": "minecraft:textures/gui/sprites/boss_bar/purple_background.png" //进度条背景,可以是纹理位置也可以是十进制颜色,必填
},
"transition": { //变换动画配置,必填
"delay": 3500, //动画持续时长(毫秒,1s=1000ms),必填
"easing": "EASE_OUT", //滑动函数类型,参考上文,必填
"vertical": false //进度条是否为垂直样式(默认为false),选填
}
},
"sort": "WRAP"
}
```
### mp:testfor
此指令用于检测或返回某些功能.
用法:
```
mp:testfor raycast entity [as target] run ]
mp:testfor raycast block [at (pos | block_pos)] run
mp:testfor raycast miss [at target] run
mp:testfor distance entity
mp:testfor distance pos
mp:testfor collision (block | blocks) run
```
`raycast`: 检测实体的射线
`raycast `: 发射射线的实体
`raycast (entity | block | miss)`: 射线目标类型,分别是实体、方块、未命中
`raycast `: 射线检测的最大范围(0 ~ 64)
`[as target run ]`: 若射线检测成功,则运行的指令,指令执行源以target(目标)为执行者
`[at (pos | block_pos) run ]`: 若射线检测成功,则运行的指令,指令执行源以(pos(位置) | block_pos(方块位置))为执行位置
`[at target run ]`: 若射线检测成功,则运行的指令,指令执行源以target(目标)为执行位置
`distance`: 返回实体与位置之间的距离
`distance `: 距离中心
`distance entity `: 目标实体,返回实体与实体之间的距离
`distance pos `: 目标位置,返回实体与位置之间的距离
`collision `: 检测碰撞的实体对象
`collosion `: 与方块碰撞的朝向
```
facing (Facing)
├── all (所有)
│ ├── horizontal (水平朝向)
│ │ ├── east (东面)
│ │ └── south (南面)
│ │ ├── west (西面)
│ │ └── north (北面)
│ ├── vertical (垂直朝向)
│ │ ├── top (顶面)
│ │ └── ground (底面)
```
`collision block `: 指定目标的方块
`collision blocks`: 指定所有目标方块
`collision run `: 若检测成功,将以方块目标为执行位置,执行指令
```
#示例代码
#若射线击中16范围内的目标,则目标将执行指令say Hello
mp:testfor raycast @s entity 16 as target run say Hello
#返回最近的玩家实体到最近的实体之间的距离,并存储到storage test:distance中的result键中
execute store result storage test:distance result int 1 run mp:testfor distance @p entity @n[type=!player]
```
### mp:player
此指令用于更改与玩家相关的内容
用法:
```
mp:player skin set
mp:player skin reset
mp:player name set
mp:player name reset
```
`skin set `: 设置玩家的皮肤外观
`skin reset`: 重置为原来的皮肤外观
`name set `: 设置玩家的显示名称
`name reset`: 重置为原来的名称
```
#示例代码
mp:player skin set Steve
mp:player name set Pig
```
### mp:mouse
此指令用于实现鼠标相关功能
用法:
```
mp:mouse cursor (default | lock | unlock)
mp:mouse icon (set [ ] | reset)
mp:mouse event (left_click | middle_click | right_click) [as target | at (pos | block_pos) | facing (target | pos | block_pos)] run
```
`cursor (default | lock | unlock)`: 设置鼠标是否显示(default默认) (lock锁定,不显示) (unlock解锁,显示)
`icon set [ ]`: 设置鼠标图标,设置图标XY的偏移量以及尺寸大小`[1~4]`(可选)
`icon reset`: 重置鼠标图标
`event (left_click | middle_click | right_click) run `: 鼠标点击(左键/中键/右键)时触发执行的指令
`event (...) [as target | at (pos | block_pos) | facing (target | pos | block_pos)] run `: 在执行指令时携带(执行者 / 执行位置(坐标/方块坐标) / 朝向(实体目标/坐标/方块坐标))
```
#示例代码
#解锁鼠标光标
mp:mouse cursor unlock
#设置鼠标图标为金苹果,且2倍大小
mp:mouse icon set minecraft:textures/item/golden_apple.png 0 0 2
#当鼠标右键到实体时,将执行/say hello!
mp:mouse event right_click as target run say hello!
#当鼠标左键到方块上时,将摧毁方块
mp:mouse event left_click at block_pos run setblock ~ ~ ~ air destroy
```
### mp:rotate
此方法与原版Minecraft 1.21.2 的相似
https://minecraft.wiki/w/Commands/rotate
### mp:sound
此指令与`/playsound`相似,但提供了更多的可选项
用法:
```
mp:sound static [] [] [