附录4:杂项
这里放置了一些零散的资料,有一些引用在正文里。
旋转格式转换
by 伊桑
How to convert entity rotation to a rotation transformation.
This function will convert the Rotation
of a display entity into a rotation transformation using left_rotation
and right_rotation
and reset the entity's yaw and pitch to 0. This can be used to get around the issue of display entities rotations visually snapping to integer degrees.
如何将 实体旋转数据 转换为 展示实体的旋转变换
使用如下函数,可将展示实体的 Rotation
NBT标签数据转换为其 transformation
标签下的 left_rotation
和 right_rotation
变换,并重置其 Rotation
标签。
这可以用来实现展示实体在视觉上旋转整数度数,在逻辑上不旋转。
# initialises transformation NBT in storage
data modify storage ns:temp transformation set value {left_rotation:{axis:[0f,1f,0f],angle:0f},right_rotation:{axis:[1f,0f,0f],angle:0f}}
# calculates rotation transformation angles using yaw and pitch respectively.
execute store result storage ns:temp transformation.left_rotation.angle float -0.00001745329251 run data get entity @s Rotation[0] 1000
execute store result storage ns:temp transformation.right_rotation.angle float 0.00001745329251 run data get entity @s Rotation[1] 1000
# applies rotation transformations.
data modify entity @s transformation merge from storage ns:temp transformation
# resets entity rotation.
execute at @s run tp @s ~ ~ ~ 0 0
Note: It overwrites both left and right rotations, and will create a shear if the scale transformation is non-uniform.
注意: 该函数同时覆写了展示实体的初始旋转和再次旋转变换,且若展示实体的缩放倍率不一致,将产生剪切。
不阻挡实体的方块
by 伊桑
以下为不会阻挡实体的方块的方块标签,有需要者可自取。
json
{
"values": [
"#minecraft:banners",
"#minecraft:bee_growables",
"#minecraft:buttons",
"#minecraft:corals",
"#minecraft:doors",
"#minecraft:fence_gates",
"#minecraft:fire",
"#minecraft:flowers",
"#minecraft:pressure_plates",
"#minecraft:rails",
"#minecraft:saplings",
"#minecraft:signs",
"#minecraft:wall_corals",
"#minecraft:wool_carpets",
"minecraft:air",
"minecraft:attached_melon_stem",
"minecraft:attached_pumpkin_stem",
"minecraft:bamboo_sapling",
"minecraft:brown_mushroom",
"minecraft:cave_air",
"minecraft:cobweb",
"minecraft:comparator",
"minecraft:crimson_fungus",
"minecraft:crimson_roots",
"minecraft:dead_brain_coral",
"minecraft:dead_brain_coral_fan",
"minecraft:dead_brain_coral_wall_fan",
"minecraft:dead_bubble_coral",
"minecraft:dead_bubble_coral_fan",
"minecraft:dead_bubble_coral_wall_fan",
"minecraft:dead_bush",
"minecraft:dead_fire_coral",
"minecraft:dead_fire_coral_fan",
"minecraft:dead_fire_coral_wall_fan",
"minecraft:dead_horn_coral",
"minecraft:dead_horn_coral_fan",
"minecraft:dead_horn_coral_wall_fan",
"minecraft:dead_tube_coral",
"minecraft:dead_tube_coral_fan",
"minecraft:dead_tube_coral_wall_fan",
"minecraft:fern",
"minecraft:grass",
"minecraft:kelp",
"minecraft:kelp_plant",
"minecraft:ladder",
"minecraft:large_fern",
"minecraft:lever",
"minecraft:lily_pad",
"minecraft:nether_portal",
"minecraft:nether_sprouts",
"minecraft:nether_wart",
"minecraft:red_mushroom",
"minecraft:redstone_torch",
"minecraft:redstone_wall_torch",
"minecraft:redstone_wire",
"minecraft:repeater",
"minecraft:scaffolding",
"minecraft:seagrass",
"minecraft:soul_torch",
"minecraft:soul_wall_torch",
"minecraft:structure_void",
"minecraft:sugar_cane",
"minecraft:tall_grass",
"minecraft:tall_seagrass",
"minecraft:torch",
"minecraft:tripwire",
"minecraft:tripwire_hook",
"minecraft:twisting_vines",
"minecraft:twisting_vines_plant",
"minecraft:vine",
"minecraft:void_air",
"minecraft:wall_torch",
"minecraft:warped_fungus",
"minecraft:warped_roots",
"minecraft:water",
"minecraft:weeping_vines",
"minecraft:weeping_vines_plant",
"minecraft:small_dripleaf",
"minecraft:glow_lichen",
"minecraft:moss_carpet",
"minecraft:spore_blossom",
"minecraft:hanging_roots",
"minecraft:light",
"minecraft:sculk_vein",
"minecraft:frogspawn"
]
}
爆炸强度
by 伊桑
刚刚翻mj的答辩源码得到一个重要结论 可能有用
爆炸强度 = 1-爆炸中心到实体距离/爆炸直径 爆炸动量 = 爆炸中心到实体眼睛的单位向量 * 爆炸强度
1.17到1.21适用的物品提示框(tooltip)顶点id
by 轩宇1725
如何显示均匀球体
一种非递归的射线追踪模拟
优化十三条
by 九秋
- 如无必要 勿增实体
- 涉及运算最好使用记分板
- store result 最好只在数据类型转换时使用
- 判断数值时尽量只使用记分板
- 在不涉及nbt的判断中,尽量使用谓词(这一条没有完全的测试结果)
- 选择器使用 尽量使用execute更改执行者,然后在函数中使用@s,而不是多次调用选择器
- 可能需要考虑函数调用的性能损耗
- tick中留有最少的语句,尽可能利用if unless 分割执行
- 第一反应不应该想到nbt操作,而是细化命令和数据包的其他部分,例如item achievement
- 对于索引类型的设计来说,考虑记分板树
- 不必要的高频可以改为score计数达到一定值才执行的低频
- 实际运算量大于1gt的操作不要试图在1gt中完成
- 如果涉及到一些运算量大的操作,可以占用玩家不影响体验的tick完成,比如init,切换维度前等