# 26.3.21 v2.1.3
新增：
- 数据版本参考，用于判断玩家的当前版本，根据版本应用不同的模型行为。
  - 该值存储在$game_version计分项的dc_version计分板。
  - 数据版本参考[wiki](https://zh.minecraft.wiki/w/%E6%95%B0%E6%8D%AE%E7%89%88%E6%9C%AC#%E7%89%88%E6%9C%AC)

修改：
- $auto_install选项现在默认为开。
  - 我们推荐在模型数量较多时，关闭该选项，以获得更快的重载速度。

# 26.2.8 v2.1.2
修改：`fixed`类型模型新增`extra_data`参数`hitbox`,默认为true，为false时不在此格添加屏障碰撞箱。

# 26.1.17 v2.1.1
数据版本上调至28。

新增：
- `rotate`事件参数`type`新增接收值"Z",表示在z轴上的旋转。
  - 注意：该事件会覆写展示实体的`left_rotation`变换字段。

修复：
- dc-16：attach为cubic时在顶面和地面时吸附不生效。

# 26.1.15 v2.1.0
新增：
- 索引数据的event键下新增字段：`destruct`
  - 与`construct`、`update`字段类似，为一事件列表；
  - 在破坏操作前执行，等效于使用`group`事件包含指定事件与`destruct`。
  - 作为有多个`destruct`事件时的语法糖存在。
- 索引数据属性`prop`下新增属性：
  - `attach`: 枚举类型，可为 `"false"|"square"|"cubic"` ,默认为`"false"`。仅以物品展示框为生成原型时有效。为后两者时，以物品展示框的朝向决定生成模型的朝向：
    - 为`"square"`时，当物品展示框吸附在方块侧面时，水平朝向设为展示框朝向；
    - 为`"cubic"`时，当展示框吸附在侧面时，设置其水平朝向；在顶面或底面时，修改其垂直朝向。
  - `orient`，枚举类型，可为`"fixed"|"0"|"4"|"8"|"16"`，表示放置时自动面向玩家时的精度。数字代表可能的方向数量。
- 新增事件关键字：`broadcast`
  - 仅限`fixed`和`light`类型的模型使用；
  - 对上下前后左右6个方块的`fixed`和`light`类型的模型广播更新事件，指定位置的模型会进行一次更新操作；
  - 用于方块型模型的连接，作者可以使用该事件修改应用的模型，以连接相邻的方块。

修改：
- 新增了索引和模板中对命名空间型索引值的支持（形如`foo:bar`）
- `destruct`事件下的`particle`参数接受新的保留字：`self`，如果为该值，在破坏时使用展示实体的物品数据生成破坏粒子。
- `sit`事件新增参数`offset`，当存在时，相对标记位置以局部坐标对玩家坐的位置进行偏移，不存在时则直接坐在展示实体上（模型的一半位置）
- （尽量）去除了物品展示框为原型的模型的放置声音。

修复：
- dc-15：`light`类型在hitbox参数为false时仍有0.2尺寸的碰撞箱。

# 25.8.20 v2.0.0
数据版本27，适配1.21.5~1.21.9，部分适配1.21~1.21.4

新增：
- 索引数据新增两个键值：(string)`type` 和 (compond)`extra_data`：
  - `type`接受以下值：`"regular","fixed","hitbox","light"`
  - 默认为`regular`，生成默认的无碰撞箱模型；
  - 为`fixed`时，为固定的方块模型，拥有完整碰撞箱，不可移动、缩放；
    - 按下潜行可在方块模型上放置方块；
  - 为`hitbox`时，为带碰撞箱的可动模型，需要在`extra_data`新增以下数据：
    - (float)`width`:(默认为1f)表示碰撞箱的宽度和高度，等效于实体的scale；为1时代表1x1；
    - (float)`offset`:(默认为0)表示碰撞箱的纵向偏移。
  - 为`light`时，为固定的光源模型，可在`extra_data`中添加下列数据：
    - (byte)`level`:(默认为15b)光源强度；
    - (boolean)`hitbox`:(默认为0b)是否具有碰撞箱；
- 事件下新增`update`字段，为一事件列表，无触发判据，和`construct`相似；\
  - 在触发更新行为时（如转换、旋转、缩放事件后），执行的事件。
- 在1.21.5版本以上，物品展示框也属于合法的模型基准实体(即带有索引数据和"dc_place"标签的定位实体)。
- 新增注册索引的mcdoc，可以在vscode代码编辑器下借助spyglass插件对索引数据进行自动补全。

修复：
- dc-13：索引中未指定`modsize`或`interactsize`时，更新导致模型和交互碰撞箱异常
- dc-14：（严重）无法识别放置模型的玩家

# 25.7.30 v1.9.7
数据版本26，适配1.21-1.21.8

修复：
- dc-12：在楼梯上方摆放时，模型摆放在楼梯所在方块的位置

# 25.7.1 v1.9.6
数据版本26，适配1.21-1.21.7

修复：
- dc-11:(严重)install接口会清空所有已注册的模型

# 25.4.22 v1.9.5
数据版本25，适配版本1.21-1.21.5 

新增：
- 在模型生成的刷怪蛋中，可以在标记实体数据中指定一个新键值：inheritance
  - 语法和索引注册数据相同
  - 在模型放置时会合并到索引数据中
  - 用于特定物品的专门变化
  - destruct事件的inherit模式现在使用这个特性。

修改：
- 现在注册索引和destruct事件中，loot_table可以和item共存，数据会合并，item优先级更高；
- destruct事件参数新增可选项：
  - (string)mode:"inherit"
  - 设置为inherit时，将会从模型的展示实体中提取物品数据，而非默认的从索引中；
  - 重新放置时，会继承物品的模型数据。

修复：
- dc-10：模型数据更新(update)时，不解析战利品表内容

# 25.4.8 v1.9.4
数据版本24，适配版本1.21-1.21.5 

修改：
- 现在放置模型时，对y轴使用四舍五入而非直接舍去法对齐到最近的整数方块。
- 现在构造事件会由模型标记执行而非临时定位实体，以解决不能在构造事件中为模型添加标记的问题；

修复：
- dc-9：在desturct事件中使用战利品表时，会覆盖索引数据

# 25.3.28 v1.9.3
数据版本24，适配版本1.21-1.21.5 
修复：
- dc-8：破坏事件中，模型物品的数据优先级高于指定的掉落物数据，会覆盖掉落物的组件


# 25.3.25 v1.9.2
数据版本23，适配版本1.21-1.21.5  
修改：  
调用声音事件时，会覆盖玩家重击的声音。

# 25.3.24 v1.9.1
数据版本23，适配版本1.21-1.21.5  
修复：  
dc-7：`dc:api/install`函数被误拼写为`dc:api/intall`

# 25.3.24 v1.9
数据版本22，适配版本1.21-1.21.5

**破坏性更改**：
- destruct事件下的item字段现在拥有新的语法：
  - (optional)(any / compound)item:控制非创造模式下破坏模型产生的掉落物：
    - 若不含该参数，则不产生掉落物；
    - 若传入空值或任意字符串，则产生默认掉落物（索引中item指定的物品，此外包含生成该模型的索引值）
    - 若传入一个复合标签(compound)，则按照其中规则修改掉落物：
      - (string)mode:("add"|"replace") 决定将该标签内的物品数据合并进默认掉落物，或是替换默认掉落物；
      - (compound : item)item:指定掉落物的物品数据
      - (string)loot_table:使用战利品表指定掉落物数据

新增：
- 注册索引新增字段：(string)loot_table，支持从战利品表中导入物品；
  - 和item不共存，当二者均存在时，会选择item，此时loot_table字段失效。
- 新增对1.21.5的文本组件改动的支持。

修改：
- 现在谓词支持使用"!"取反的语法，与目标选择器的行为一致。


# 25.2.7 v1.8.1
数据版本21，适配版本1.21-1.21.4

修复：
- dc-6: 在注册物品相同而谓词不同的事件时，后一个事件会被剔除。

## 25.2.5 v1.8
数据版本21，适配版本1.21-1.21.4

修改：
- 坐下事件不再强制校正位置；新增参数orient，该参数的值总是为空标签，存在时，玩家坐上去的瞬间会被强制校位。
  - 使用例： `args:{orient:{}}`
- 破坏事件现在会复制item中指定的物品数据，这部分数据可以不在事件参数中额外指定。
  - 依然需要一个空的`item:{}`标签来生成掉落物。
- 加入了预制事件：
  - 目前已有的预制事件：
    - move_r_1px：水平移动1像素（推）
    - move_r_-1px：水平移动-1像素（拉）
    - move_y_1px：竖直移动1像素（上）
    - move_y_-1px：竖直移动-1像素（下）
    - rotate_h_225：水平旋转22.5度（顺时针）
    - rotate_h_-225：水平旋转-22.5度（逆时针）
    - rotate_v_225：垂直旋转22.5度（顺时针）
    - rotate_v_-225：垂直旋转-22.5度（逆时针）
    - scale_02：缩放0.2倍（大）
    - scale_-02：缩放-0.2倍（小）
- 重排了更新日志，现在按事件倒序排列。

## 24.9.11 v1.7
数据版本20，适配版本1.21~1.21.1，支持版本1.20.5~1.21.1

在1.20.5~1.20.6使用时需要自行修改数据包文件夹名

新增：
- 模型注册时及注册完成时均会在玩家聊天栏输出信息提示；
- 选项：silent_register:开启后不再输出上述提示；
- 设置界面：提供了一个聊天栏菜单，可以可视化的调整选项
- 事件标签下新增一个键（可缺省）：(string)predicate：和item一起构成事件的条件；可以填写一个谓词的路径，需要玩家满足该谓词的条件才会判定通过。
- 模型数据下新增一个字段（可缺省）：(compound)prop，表示模型的特殊属性
  - 目前下属一个键：(byte)height_adaption，默认为0
  - 设为1时，在垂直旋转时，碰撞箱的高度会自适应调节

修改：
- 现在事件标签下item内可不含id
- 事件标签下item的id设为air时，匹配空手。
  - 注意：id设为"*"时，可以匹配任意非空物品点击
  - 缺省id时，可匹配任意点击
  - 即写成"item:{}"的形式可以匹配任意空手或非空手点击，即覆盖fallback选项
- 现在sit事件会将玩家的朝向设为模型朝向
- 现在内置调用的模型更新不会输出更新提示

修复：
- dc-4：模型数量较多，注册时的指令超出单刻命令最大执行数量时，未完成注册的部分模型被截断。
- dc-5：垂直旋转事件在角度超过90度时仍然尝试旋转，导致展示实体和模型旋转角度不同；现在在超出90度时自动回到90度并输出提示。

## 24.7.13 v1.6
数据版本19，适配版本1.20.6，支持版本1.20.5~1.21

在1.21使用时需要自行修改数据包文件夹名

新增：
- 模板嵌套功能：现在模板数据中可以包含另一个模板，dc会将其嵌套解析。
  - 但注意过多的嵌套层数会对加载性能造成影响
- 数据版本：作为模型更新的依据，若模型的数据版本较低，一些事件可能不能正常生效，可使用调试棒左键更新模型。

事件：
- 缩放(scale)  
  - 效果：可以放大和缩小模型
  - 参数：(float) scale:模型大小的变化值，正值为放大，负值为缩小
  - 限制：scale本身没有范围限制，但放大缩小后模型有如下限制：
    - 模型放大倍数在0.1到10之间
    - 交互实体宽高任一不能小于0.1
    - 展示实体高不能大于10
  - 备注：该事件会调用更新模块自动更新模型

调试事件：
- 更新(update)
  - 效果：1.更新模型的数据结构到dc的版本，2.并且和当前的索引信息同步
  - 无参数
  - 备注：
    - 更新完成后会向互动玩家输出一条更新完成的信息，将$silent_update 的dc_options计分项设为1可以不输出该信息
    - 使用调试棒左键模型可以触发更新事件
- 信息(info)
  - 效果：向玩家聊天栏输出模型的属性信息，包括该模型的uid，索引，缩放倍数，版本，上次更新时间，当前时间等。
  - 无参数
  - 备注：
    - 使用调试棒右键模型可以触发信息事件

流程控制事件：
- 组(group)
  - 效果：按照顺序依次执行一系列事件
  - 参数：(list)events，为一个列表，里面的每一项均为一个事件，不含item字段。
  - 备注：对列表内的事件暂无检查
- 随机(random)
  - 效果：在一系列事件中按照权重挑选一个事件执行
  - 参数：(list)events，列表，每一项为一个事件，不含item字段，可以包含一个weight字段，为整数，表示其在列表中的权重。
  - 备注：对列表内的事件暂无检查

其他：
- 现在调试棒与模型的互动默认为左键更新右键信息，在模型内自定义的事件将不再生效。

修改：
- 破坏模型时，交互实体的延迟延长到4tick

## 24.6.26 v1.5
修改：破坏模型时，交互实体会延迟2tick再被清除

## 24.5.18 v1.4
新增：
- 在根目录下加入toolbox函数，其中定义了一些有用的接口信息的声明，使用vscode和dhp插件的开发者可以将其复制到自己的函数文件夹下以辅助开发。
修复：
- dc-4：模型不含construct事件时，有概率执行上一个模型的construct事件
- dc-5：fallback中的事件没有做检查

## 24.5.5 v1.3
修复：
- dc-3：R类型移动事件不能正确执行

## 24.5.4 v1.2
修复：
- dc-2：trans不传func参数时失效

## 24.5.4 v1.1
修复：
- dc-1：trans改变模型后在特定条件下会残留前一个模型的事件

## 24.5.4 v1.0
修改：
- trans事件移除可选参数sound，新增可选参数func，支持执行自定义函数。
修复：
- dca-2：trans事件改变模型时朝向被设置为默认方向

## 24.4.29 v0.4
新增：
- 事件：转换（trans）
  - 效果：将一个模型转换为另一个已注册的模型，将会使用对应模型的所有数据覆盖原有数据
  - 参数：
    - (string)index:要转换的模型的索引，若该参数不存在，则事件注册将失败；若该参数指向为注册的索引名，则不会做出任何修改。
    - (optional)(string)sound:转换时产生的音效。可选。
- 事件：声音(sound)
  - 效果：发出声音
  - 参数：
    - (string)sound:声音路径

- event标签下新增标签：
  - construct,包含构建时立即执行的事件。为一列表，列表内为一系列事件，无item属性。

- 自定义事件：
  - 现在在自定义检查函数检测到参数未正确设置等问题时，可以将#check的dc_temp计分项设为1，此时该事件将不会被加入索引的事件列表中。

## 24.4.28 v0.3
新增：
- 事件中item的id现在可以为物品标签
- 现在在自定义事件中可以用dc_custom_pivot，dc_custom_display，dc_custom_interaction来分别选中交互的模型的标记，展示实体，交互实体

## 24.4.24 V0.2
新增：
- 模型默认面向玩家；
- move事件type参数新增接受值：V，代表相对玩家垂直方向平移，逻辑与水平移动保持一致，正值远离玩家，负值靠近玩家；
- destruct事件新增三个可选参数：
  - particle：破坏模型时产生的粒子
  - sound：破坏模型时播放的音效
  - （以上两个参数对应的值均与对应命令的路径值一致）
  - item：控制非创造模式下破坏模型产生的掉落物:
      - 若不含该参数，则不产生掉落物；
      - 若传入空值或任意字符串，则产生默认掉落物（牛刷怪蛋，包含生成该模型的索引值）
      - 若传入一个物品数据(compound item)，则将该物品数据合并到上述默认掉落物中。
  
修复：
- dca-1：interactsize和modsize不生效


## 24.4.20 V0.1
封装了第一个版本。

