|
4 | 4 | ########################### |
5 | 5 |
|
6 | 6 |
|
| 7 | +dmodels_multi_load: |
| 8 | + type: task |
| 9 | + debug: false |
| 10 | + definitions: list |
| 11 | + script: |
| 12 | + - define key <util.random_uuid> |
| 13 | + - foreach <[list]> as:model: |
| 14 | + - run dmodels_multiwaitable_load def.key:<[key]> def.model:<[model]> |
| 15 | + # Ensure all loads are done before ending the task |
| 16 | + - waituntil rate:1t max:5m <server.flag[dmodels_data.temp_<[key]>.filewrites].is_empty||true> |
| 17 | + # Cleanup |
| 18 | + - flag server dmodels_data.temp_<[key]>:! |
| 19 | + |
| 20 | +dmodels_multiwaitable_load: |
| 21 | + type: task |
| 22 | + debug: false |
| 23 | + definitions: key|model |
| 24 | + script: |
| 25 | + - flag server dmodels_data.temp_<[key]>.multiload.<[model]> |
| 26 | + - ~run dmodels_load_bbmodel def.model_name:<[model]> |
| 27 | + - flag server dmodels_data.temp_<[key]>.multiload.<[model]>:! |
| 28 | + |
7 | 29 | dmodels_load_bbmodel: |
8 | 30 | type: task |
9 | 31 | debug: false |
10 | 32 | definitions: model_name |
11 | 33 | script: |
| 34 | + - debug log "[DModels] loading <[model_name].custom_color[emphasis]>" |
12 | 35 | # =============== Prep =============== |
13 | 36 | - define pack_root <script[dmodels_config].data_key[resource_pack_path]> |
14 | 37 | - define models_root <[pack_root]>/assets/minecraft/models/item/dmodels/<[model_name]> |
@@ -110,11 +133,17 @@ dmodels_load_bbmodel: |
110 | 133 | - if <[animation_list].any||false>: |
111 | 134 | - flag server dmodels_data.animations_<[model_name]>:<[animation_list]> |
112 | 135 | # =============== Item model file generation =============== |
113 | | - - if <util.has_file[<[override_item_filepath]>]>: |
| 136 | + - waituntil rate:1t max:15s !<server.has_flag[dmodels_temp_item_reading]> |
| 137 | + - if <server.has_flag[dmodels_temp_item_file]>: |
| 138 | + - define override_item_data <util.parse_yaml[<server.flag[dmodels_temp_item_file].utf8_decode>]> |
| 139 | + - else if <util.has_file[<[override_item_filepath]>]>: |
| 140 | + - flag server dmodels_temp_item_reading expire:1h |
114 | 141 | - ~fileread path:<[override_item_filepath]> save:override_item |
| 142 | + - flag server dmodels_temp_item_reading:! |
115 | 143 | - define override_item_data <util.parse_yaml[<entry[override_item].data.utf8_decode>]> |
116 | 144 | - else: |
117 | 145 | - definemap override_item_data parent:minecraft:item/generated textures:<map[layer0=minecraft:item/<script[dmodels_config].data_key[item]>]> |
| 146 | + # NOTE: THE BELOW SECTION MUST NOT WAIT! For item override file interlock. |
118 | 147 | - define overrides_changed false |
119 | 148 | - foreach <server.flag[dmodels_data.temp_<[model_name]>.raw_outlines]> as:outline: |
120 | 149 | - define outline_origin <location[<[outline.origin]>]> |
@@ -165,7 +194,10 @@ dmodels_load_bbmodel: |
165 | 194 | # This sets the actual live usage flag data |
166 | 195 | - flag server dmodels_data.model_<[model_name]>.<[outline.uuid]>:<[outline]> |
167 | 196 | - if <[overrides_changed]>: |
168 | | - - 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> |
| 197 | + - define override_file_json <[override_item_data].to_json[native_types=true;indent=4].utf8_encode> |
| 198 | + - flag server dmodels_temp_item_file:<[override_file_json].utf8_encode> expire:1h |
| 199 | + - waituntil rate:1t max:15s !<server.has_flag[dmodels_data.temp_<[model_name]>.filewrites.<[override_item_filepath].escaped>]> |
| 200 | + - run dmodels_multiwaitable_filewrite def.key:<[model_name]> def.path:<[override_item_filepath]> def.data:<[override_file_json]> |
169 | 201 | # Ensure all filewrites are done before ending the task |
170 | 202 | - waituntil rate:1t max:5m <server.flag[dmodels_data.temp_<[model_name]>.filewrites].is_empty||true> |
171 | 203 | # Final clear of temp data |
|
0 commit comments