载具引擎(VVE)/mc载具
阅读
2022-08-13更新
最新编辑:HangBack
阅读:
更新日期:2022-08-13
最新编辑:HangBack
介绍
vve对mc中的载具进行了自己的定义。一辆载具通过vehicles:_spawn
函数解析数据模板生成。
玩家 | 根实体 | cube | 引导文本 | |
---|---|---|---|---|
数量 | <VOLUME> | 1 | <VOLUME> | 1 |
构成的概念
玩家
- 正在骑乘载具的玩家
vehicle_state
分数为1
。玩家坐上载具的一瞬间,如果该载具拥有快捷栏UI,玩家快捷栏原本的物品
- 正在骑乘载具的玩家
会被转移到背包其它位置(背包充足时),或以掉落物形式掉落(背包已满时)。玩家可以向载具根实体发送<控制信号>。
根实体
- 整辆载具的代表实体。其
Pos
即为载具的坐标,Rotation
即为载具的朝向,roll
记分板
- 整辆载具的代表实体。其
分数即为载具的横滚角
记分项 | rotation_u | rotation_v | rotation_w |
---|---|---|---|
速度方向的水平角度 | 速度方向的竖直角 | 速度大小 |
记分项 | vehicle_vr0 | vehicle_vr1 | vehicle_sp |
---|---|---|---|
速度方向的水平角度 | 速度方向的竖直角 | 速度大小 |
载具的众多属性数据也以记分板或nbt的形式储存在根实体上,原理请参考vehicles:spawn/set
函数。
刚生成的载具根实体可以使用[tag=vehicle_nsp]
选中。生成2tick
以后的载具可以使用[tag=vehicle]
来选中其根实体。正在被骑乘的载具的根实体vehicle_state
分数大于等于1
。
cube
uaec实体的Pos
即为cube的坐标,以局部坐标的形式储存在uaec实体的vehicle_u
、vehicle_v
、vehicle_w
记分板上。
对于一般cube,其朝向和横滚角与根实体同步。
对于可转动cube,其朝向以局部视角坐标的形式储存在功能实体的vehicle_r0
、vehicle_r1
记分板上,其横滚角储存在功能实体的roll
记分板上。
cube的uaec实体可以使用[tag=vehicle_cube]
来选中。cube的功能实体可以使用[tag=vehicle_dsp]
来选中。
引导文本
- 引导文本是载具在静止状态下,在座椅上生成的实体,用以显示文本,提示玩家右键进入载具。可以使用
[tag=vehicle_lead]
来选中引导文本
- 引导文本是载具在静止状态下,在座椅上生成的实体,用以显示文本,提示玩家右键进入载具。可以使用
标签vehicle_entity
标签result
- 用于指代刚被生成的一辆载具的根实体。
#导入示例载具模板库(只需执行一次) function vehicles:_class #生成载具 data modify storage math:io input set from storage math:class vehicles[{id:"first_car"}] function vehicles:_spawn execute at @e[tag=result,limit=1] run setblock ~ ~2 ~ diamond_block
- 这个例子可以生成一辆示例车,并在其头顶放置一块钻石块。
上级实体与附属实体
#以载具根实体为执行者 scoreboard players operation temp int = @s vehicle_id execute as @e[tag=vehicle_dsp] if score @s int = temp int run tag @s add tmp kill @e[tag=tmp,limit=1,sort=random] tag @e remove tmp
- 这个例子可以随机清除该载具的一个功能实体。
#以骑乘载具的玩家为执行者 scoreboard players operation temp int = @s vehicle_id execute as @e[tag=vehicle] if score @s int = temp int run tag @s add tmp execute positioned 85 93 45 as @e[tag=tmp,limit=1] rotated as @s run function vehicles:_tp tag @e remove tmp
- 这个例子可以将玩家骑乘的载具传送到坐标85 93 45的位置,并保持朝向不变。
配对实体
#以uaec为执行者 scoreboard players operation temp int = @s vehicle_cpid execute as @e[tag=vehicle] if score @s int = temp int run tag @s add tmp kill @e[tag=tmp,limit=1] tag @e remove tmp
#以uaec为执行者 scoreboard players operation temp int = @s vehicle_cpid execute as @e[tag=vehicle] if score @s int = temp int run tag @s add tmp kill @e[tag=tmp,limit=1] tag @e remove tmp
- 这个例子可以清除玩家骑乘载具的
propeller
[1]
- 这个例子可以清除玩家骑乘载具的