Skip to content

Commit 922ff08

Browse files
committed
dmodels_multi_load and corresponding logic upgrade
1 parent c6db086 commit 922ff08

File tree

2 files changed

+42
-4
lines changed

2 files changed

+42
-4
lines changed

scripts/dmodels_loader.dsc

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,34 @@
44
###########################
55

66

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+
729
dmodels_load_bbmodel:
830
type: task
931
debug: false
1032
definitions: model_name
1133
script:
34+
- debug log "[DModels] loading <[model_name].custom_color[emphasis]>"
1235
# =============== Prep ===============
1336
- define pack_root <script[dmodels_config].data_key[resource_pack_path]>
1437
- define models_root <[pack_root]>/assets/minecraft/models/item/dmodels/<[model_name]>
@@ -110,11 +133,17 @@ dmodels_load_bbmodel:
110133
- if <[animation_list].any||false>:
111134
- flag server dmodels_data.animations_<[model_name]>:<[animation_list]>
112135
# =============== 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
114141
- ~fileread path:<[override_item_filepath]> save:override_item
142+
- flag server dmodels_temp_item_reading:!
115143
- define override_item_data <util.parse_yaml[<entry[override_item].data.utf8_decode>]>
116144
- else:
117145
- 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.
118147
- define overrides_changed false
119148
- foreach <server.flag[dmodels_data.temp_<[model_name]>.raw_outlines]> as:outline:
120149
- define outline_origin <location[<[outline.origin]>]>
@@ -165,7 +194,10 @@ dmodels_load_bbmodel:
165194
# This sets the actual live usage flag data
166195
- flag server dmodels_data.model_<[model_name]>.<[outline.uuid]>:<[outline]>
167196
- 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]>
169201
# Ensure all filewrites are done before ending the task
170202
- waituntil rate:1t max:5m <server.flag[dmodels_data.temp_<[model_name]>.filewrites].is_empty||true>
171203
# Final clear of temp data

scripts/dmodels_main.dsc

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@
77
#
88
# @author mcmonkey
99
# @contributors Max^
10+
# @thanks Darwin, Max^, kalebbroo, sharklaserss - for helping with reference models, testing, ideas, etc
1011
# @date 2022/06/01
11-
# @updated 2022/07/07
12+
# @updated 2022/07/18
1213
# @denizen-build REL-1773
13-
# @script-version 1.4
14+
# @script-version 1.5
1415
#
1516
# This takes BlockBench "BBModel" files, converts them to a client-ready resource pack and Denizen internal data,
1617
# 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.
@@ -67,6 +68,11 @@
6768
# Input definitions:
6869
# model_name: The name of the model to load, must correspond to the relevant ".bbmodel" file.
6970
# This task should be ~waited for.
71+
# dmodels_multi_load
72+
# Usage: Loads multiple models simultaneously, and ends the ~wait only after all models are loaded. This is faster than doing individual 'load' calls in a loop and waiting for each.
73+
# Input definitions:
74+
# list: A ListTag of valid model names, equivalent to the ones that can be input to 'dmodels_load_bbmodel'
75+
# This task should be ~waited for.
7076
# dmodels_spawn_model
7177
# Usage: Spawns a single instance of a model using real armor stand entities at a location.
7278
# Input definitions:

0 commit comments

Comments
 (0)