Skip to content

Commit 06e1dd8

Browse files
committed
more cleanups and header update
1 parent 5abdfbb commit 06e1dd8

File tree

3 files changed

+35
-13
lines changed

3 files changed

+35
-13
lines changed

scripts/dmodels_loader.dsc

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ dmodels_load_bbmodel:
4141
- stop
4242
# =============== Pack validation ===============
4343
- if !<server.has_flag[data/dmodels/res_pack/pack.mcmeta]>:
44-
- filewrite path:data/dmodels/res_pack/pack.mcmeta data:<map.with[pack].as[<map[pack_format=8;description=dModels_AutoPack_Default]>].to_json[native_types=true;indent=4].utf8_encode>
44+
- run dmodels_multiwaitable_filewrite def.key:<[model_name]> def.path:data/dmodels/res_pack/pack.mcmeta def.data:<map.with[pack].as[<map[pack_format=8;description=dModels_AutoPack_Default]>].to_json[native_types=true;indent=4].utf8_encode>
4545
# =============== Textures loading ===============
4646
- define tex_id 0
4747
- foreach <[data.textures]||<list>> as:texture:
@@ -53,7 +53,7 @@ dmodels_load_bbmodel:
5353
- debug error "[DModels] Can't load bbmodel for '<[model_name]>': invalid texture source data."
5454
- stop
5555
- define texture_output_path <[textures_root]>/<[texname]>.png
56-
- ~filewrite path:<[texture_output_path]> data:<[raw_source].after[,].base64_to_binary>
56+
- run dmodels_multiwaitable_filewrite def.key:<[model_name]> def.path:<[texture_output_path]> def.data:<[raw_source].after[,].base64_to_binary>
5757
- define proper_path dmodels/<[model_name]>/<[texname]>
5858
- define mc_texture_data.<[tex_id]> <[proper_path]>
5959
- if <[texture.particle]||false>:
@@ -105,7 +105,7 @@ dmodels_load_bbmodel:
105105
- else:
106106
- define anim_map.data <[data_points.x]>,<[data_points.y]>,<[data_points.z]>
107107
- define animation_list.<[animation.name]>.animators.<[o_uuid]>.frames:->:<[anim_map]>
108-
# Time sort
108+
# Sort frames by time (why is this not done by default? BlockBench is weird)
109109
- define animation_list.<[animation.name]>.animators.<[o_uuid]>.frames <[animation_list.<[animation.name]>.animators.<[o_uuid]>.frames].sort_by_value[get[time]]>
110110
- flag server dmodels_data.animations_<[model_name]>:<[animation_list]>
111111
# =============== Item model file generation ===============
@@ -149,7 +149,7 @@ dmodels_load_bbmodel:
149149
- define model_json.display.head.translation <list[32|25|32]>
150150
- define model_json.display.head.scale <list[4|4|4]>
151151
- define modelpath item/dmodels/<[model_name]>/<[outline.name]>
152-
- ~filewrite path:<[models_root]>/<[outline.name]>.json data:<[model_json].to_json[native_types=true;indent=4].utf8_encode>
152+
- run dmodels_multiwaitable_filewrite def.key:<[model_name]> def.path:<[models_root]>/<[outline.name]>.json def.data:<[model_json].to_json[native_types=true;indent=4].utf8_encode>
153153
- define cmd 0
154154
- define min_cmd 1000
155155
- foreach <[override_item_data.overrides]||<list>> as:override:
@@ -164,10 +164,21 @@ dmodels_load_bbmodel:
164164
# This sets the actual live usage flag data
165165
- flag server dmodels_data.model_<[model_name]>.<[outline.uuid]>:<[outline]>
166166
- if <[overrides_changed]>:
167-
- ~filewrite path:<[override_item_filepath]> data:<[override_item_data].to_json[native_types=true;indent=4].utf8_encode>
167+
- run dmodels_multiwaitable_filewrite def.key:<[model_name]> def.path:<[override_item_filepath]> def.data:<[override_item_data].to_json[native_types=true;indent=4].utf8_encode>
168+
# Ensure all filewrites are done before ending the task
169+
- waituntil rate:1t max:5m <server.flag[dmodels_data.temp_<[model_name]>.filewrites].is_empty||true>
168170
# Final clear of temp data
169171
- flag server dmodels_data.temp_<[model_name]>:!
170172

173+
dmodels_multiwaitable_filewrite:
174+
type: task
175+
debug: false
176+
definitions: key|path|data
177+
script:
178+
- flag server dmodels_data.temp_<[key]>.filewrites.<[path].escaped>
179+
- ~filewrite path:<[path]> data:<[data]>
180+
- flag server dmodels_data.temp_<[key]>.filewrites.<[path].escaped>:!
181+
171182
dmodels_facefix:
172183
type: procedure
173184
debug: false

scripts/dmodels_main.dsc

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
#
88
# @author mcmonkey
99
# @date 2022/06/01
10-
# @updated 2022/06/13
10+
# @updated 2022/07/06
1111
# @denizen-build REL-1772
12-
# @script-version 1.3
12+
# @script-version 1.4
1313
#
14-
# This takes BlockBench "BBModel" files, converts them (via external program) to resource pack + Denizen-compatible file,
14+
# This takes BlockBench "BBModel" files, converts them to a client-ready resource pack and Denizen internal data,
1515
# then is able to display them in minecraft and even animate them, by spawning and moving invisible armor stands with resource pack items on their heads.
1616
#
1717
# Installation:
@@ -96,6 +96,15 @@
9696
# animation: The name of the animation to play (as set in BlockBench).
9797
# timespot: The time (in seconds) from the start of the animation to select as the frame.
9898
# delay_pose: 'true' if playing fluidly to offset the pose application over time, 'false' to snap exactly to frame position.
99+
# Flags:
100+
# Every entity spawned by DModels has the flag 'dmodel_root', that refers up to the root entity.
101+
# The root entity has the following flags:
102+
# 'dmodel_model_id': the name of the model used.
103+
# 'dmodel_parts': a list of all part entities spawned.
104+
# 'dmodel_anim_part.<ID_HERE>': a mapping of outline IDs to the part entity spawned for them.
105+
# 'dmodels_animation_id': only if the model is animating automatically, contains the animation ID.
106+
# 'dmodels_anim_time': only if the model is animating automatically, contains the progress through the current animation as a number representing time.
107+
# Additional flags are present on both the root and on parts, but are not considered API - use at your own risk.
99108
#
100109
################################################
101110

scripts/dmodels_spawning.dsc

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ dmodels_spawn_model:
2626
- define center <[location].with_pitch[0].below[0.72]>
2727
- define yaw_mod <[location].yaw.add[180].to_radians>
2828
- spawn dmodel_part_stand <[location]> save:root
29-
- flag <entry[root].spawned_entity> dmodel_model_id:<[model_name]>
29+
- define root <entry[root].spawned_entity>
30+
- flag <[root]> dmodel_model_id:<[model_name]>
31+
- flag <[root]> dmodel_root:<[root]>
3032
- define parentage <map>
3133
- define model_data <server.flag[dmodels_data.model_<[model_name]>]>
3234
- define tracking_range <[tracking_range].if_null[<script[dmodels_config].data_key[tracking_range]>]>
@@ -52,10 +54,10 @@ dmodels_spawn_model:
5254
- adjust <entry[spawned].spawned_entity> tracking_range:<[tracking_range]>
5355
- flag <entry[spawned].spawned_entity> dmodel_def_pose:<[new_rot].xyz>
5456
- flag <entry[spawned].spawned_entity> dmodel_def_offset:<[new_pos].div[16]>
55-
- flag <entry[spawned].spawned_entity> dmodel_root:<entry[root].spawned_entity>
56-
- flag <entry[root].spawned_entity> dmodel_parts:->:<entry[spawned].spawned_entity>
57-
- flag <entry[root].spawned_entity> dmodel_anim_part.<[id]>:->:<entry[spawned].spawned_entity>
58-
- determine <entry[root].spawned_entity>
57+
- flag <entry[spawned].spawned_entity> dmodel_root:<[root]>
58+
- flag <[root]> dmodel_parts:->:<entry[spawned].spawned_entity>
59+
- flag <[root]> dmodel_anim_part.<[id]>:->:<entry[spawned].spawned_entity>
60+
- determine <[root]>
5961

6062
dmodels_delete:
6163
type: task

0 commit comments

Comments
 (0)