@@ -63,10 +63,13 @@ dmodels_load_bbmodel:
6363 - debug error "[DModels] Can't load bbmodel for '<[model_name] > ' - file has no elements?"
6464 - stop
6565 # =============== Pack validation ===============
66- - if !<server.has_flag[<[pack_root] > /pack.mcmeta] > :
67- - run dmodels_multiwaitable_filewrite def.key:<[model_name] > def.path:<[pack_root] > /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>
66+ - define packversion 12
67+ - if !<util.has_file[<[pack_root] > /pack.mcmeta] > || <server.flag[dmodels_last_pack_version] ||0> != packversion:
68+ - flag server dmodels_last_pack_version:<[packversion] >
69+ - run dmodels_multiwaitable_filewrite def.key:<[model_name] > def.path:<[pack_root] > /pack.mcmeta def.data:<map.with[pack] .as[<map[pack_format=<[packversion] > ;description=dModels_AutoPack_Default] > ] .to_json[native_types=true;indent=4] .utf8_encode>
6870 # =============== Textures loading ===============
6971 - define tex_id 0
72+ - define texture_paths <list>
7073 - foreach <[data.textures] ||<list> > as:texture:
7174 - define texname <[texture.name] >
7275 - if <[texname] .ends_with[.png] > :
@@ -79,6 +82,7 @@ dmodels_load_bbmodel:
7982 - run dmodels_multiwaitable_filewrite def.key:<[model_name] > def.path:<[texture_output_path] > def.data:<[raw_source] .after[,] .base64_to_binary>
8083 - define proper_path dmodels/<[model_name] > /<[texname] >
8184 - define mc_texture_data.<[tex_id] > <[proper_path] >
85+ - define texture_paths:->:<[proper_path] >
8286 - if <[texture.particle] ||false> :
8387 - define mc_texture_data.particle <[proper_path] >
8488 - define tex_id:++
@@ -134,6 +138,32 @@ dmodels_load_bbmodel:
134138 - define animation_list.<[animation.name] > .animators.<[o_uuid] > .frames <[animation_list.<[animation.name] > .animators.<[o_uuid] > .frames] .sort_by_value[get[time] ] >
135139 - if <[animation_list] .any||false> :
136140 - flag server dmodels_data.animations_<[model_name] > :<[animation_list] >
141+ # =============== Atlas gen ===============
142+ - define atlas_file <[pack_root] > /assets/minecraft/atlases/blocks.json
143+ - waituntil rate:1t max:15s !<server.has_flag[dmodels_temp_atlas_handling] >
144+ - if <server.has_flag[dmodels_temp_atlas_file] > :
145+ - define atlas_data <util.parse_yaml[<server.flag[dmodels_temp_atlas_file] .utf8_decode> ] >
146+ - else if <util.has_file[<[atlas_file] > ] > :
147+ - flag server dmodels_temp_atlas_handling expire:1h
148+ - ~fileread path:<[atlas_file] > save:atlas_file_data
149+ - flag server dmodels_temp_atlas_handling:!
150+ - define atlas_data <util.parse_yaml[<entry[atlas_file_data] .data.utf8_decode> ] >
151+ - else :
152+ - definemap atlas_data sources:<list>
153+ - define known_atlas_dirs <[atlas_data.sources] .parse[get[source] ] .deduplicate>
154+ - define atlas_dirs_to_track <[texture_paths] .parse[before_last[/] ] .deduplicate>
155+ - define atlas_dirs_to_add <[atlas_dirs_to_track] .exclude[<[known_atlas_dirs] > ] >
156+ - if <[atlas_dirs_to_add] .any> :
157+ - foreach <[atlas_dirs_to_add] > as:new_dir:
158+ - definemap src:
159+ type : directory
160+ source : <[new_dir] >
161+ prefix : <[new_dir] > /
162+ - define atlas_data.sources:->:<[src] >
163+ - define new_atlas_json <[atlas_data] .to_json[indent=4] .utf8_encode>
164+ - flag server dmodels_temp_atlas_file:<[new_atlas_json] > expire:1h
165+ - waituntil rate:1t max:15s !<server.has_flag[dmodels_data.temp_core.filewrites.<[atlas_file] .escaped> ] >
166+ - run dmodels_multiwaitable_filewrite def.key:core def.path:<[atlas_file] > def.data:<[new_atlas_json] >
137167 # =============== Item model file generation ===============
138168 - waituntil rate:1t max:15s !<server.has_flag[dmodels_temp_item_reading] >
139169 - if <server.has_flag[dmodels_temp_item_file] > :
@@ -198,10 +228,10 @@ dmodels_load_bbmodel:
198228 - if <[overrides_changed] > :
199229 - define override_file_json <[override_item_data] .to_json[native_types=true;indent=4] .utf8_encode>
200230 - flag server dmodels_temp_item_file:<[override_file_json] > expire:1h
201- - waituntil rate:1t max:15s !<server.has_flag[dmodels_data.temp_ < [model_name] > .filewrites.<[override_item_filepath] .escaped> ] >
231+ - waituntil rate:1t max:15s !<server.has_flag[dmodels_data.temp_core .filewrites.<[override_item_filepath] .escaped> ] >
202232 - run dmodels_multiwaitable_filewrite def.key:<[model_name] > def.path:<[override_item_filepath] > def.data:<[override_file_json] >
203233 # Ensure all filewrites are done before ending the task
204- - waituntil rate:1t max:5m <server.flag[dmodels_data.temp_<[model_name] > .filewrites] .is_empty||true>
234+ - waituntil rate:1t max:5m <server.flag[dmodels_data.temp_<[model_name] > .filewrites] .is_empty||true> && <server.flag [dmodels_data.temp_core.filewrites] .is_empty||true>
205235 # Final clear of temp data
206236 - flag server dmodels_data.temp_<[model_name] > :!
207237
0 commit comments