@@ -417,23 +417,23 @@ IF (has_animations) {
417417 $execute \
418418 as $(<%node.storage_name%>) \
419419 positioned \
420- ^<%roundTo(global.transform.pos[0], 10 )%> \
421- ^<%roundTo(global.transform.pos[1], 10 )%> \
422- ^<%roundTo(global.transform.pos[2], 10 )%> \
420+ ^<%roundTo(global.transform.pos[0], 4 )%> \
421+ ^<%roundTo(global.transform.pos[1], 4 )%> \
422+ ^<%roundTo(global.transform.pos[2], 4 )%> \
423423 rotated \
424- ~<%roundTo(global.transform.head_rot[1], 10 )%> \
425- ~<%roundTo(global.transform.head_rot[0], 10 )%> \
424+ ~<%roundTo(global.transform.head_rot[1], 4 )%> \
425+ ~<%roundTo(global.transform.head_rot[0], 4 )%> \
426426 <%global.transform.function_execute_condition ? global.transform.function_execute_condition + ' ' : ''%>run \
427427 function ./<%animation.duration%>_locator_<%node.storage_name%>
428428 } ELSE {
429429 execute \
430430 positioned \
431- ^<%roundTo(global.transform.pos[0], 10 )%> \
432- ^<%roundTo(global.transform.pos[1], 10 )%> \
433- ^<%roundTo(global.transform.pos[2], 10 )%> \
431+ ^<%roundTo(global.transform.pos[0], 4 )%> \
432+ ^<%roundTo(global.transform.pos[1], 4 )%> \
433+ ^<%roundTo(global.transform.pos[2], 4 )%> \
434434 rotated \
435- ~<%roundTo(global.transform.head_rot[1], 10 )%> \
436- ~<%roundTo(global.transform.head_rot[0], 10 )%> \
435+ ~<%roundTo(global.transform.head_rot[1], 4 )%> \
436+ ~<%roundTo(global.transform.head_rot[0], 4 )%> \
437437 <%global.transform.function_execute_condition ? global.transform.function_execute_condition + ' ' : ''%>run \
438438 function ./<%animation.duration%>_locator_<%node.storage_name%>
439439 }
@@ -501,20 +501,20 @@ IF (has_animations) {
501501 lastActiveFrame[node.uuid] = transform
502502 ;if (!lastFrame || matrixToNbtFloatArray(transform.matrix).toString() !== matrixToNbtFloatArray(lastFrame.matrix).toString()) {
503503 toMerge.locators[node.storage_name] = {
504- px: roundTo(transform.pos[0], 10 ),
505- py: roundTo(transform.pos[1], 10 ),
506- pz: roundTo(transform.pos[2], 10 ),
507- ry: roundTo(transform.head_rot[1], 10 ),
508- rx: roundTo(transform.head_rot[0], 10 )
504+ px: roundTo(transform.pos[0], 4 ),
505+ py: roundTo(transform.pos[1], 4 ),
506+ pz: roundTo(transform.pos[2], 4 ),
507+ ry: roundTo(transform.head_rot[1], 4 ),
508+ rx: roundTo(transform.head_rot[0], 4 )
509509 };
510510 }
511511
512512 if (transform.function) {
513513 if (node.config?.use_entity) {
514514 frameFuncEnd +=
515515 `\n$execute unless entity @s[tag=${TAGS.TRANSFORMS_ONLY()}] as $(${node.storage_name}) `
516- + `positioned ^${roundTo(transform.pos[0], 10 )} ^${roundTo(transform.pos[1], 10 )} ^${roundTo(transform.pos[2], 10 )} `
517- + `rotated ~${roundTo(transform.head_rot[1], 10 )} ~${roundTo(transform.head_rot[0], 10 )} `
516+ + `positioned ^${roundTo(transform.pos[0], 4 )} ^${roundTo(transform.pos[1], 4 )} ^${roundTo(transform.pos[2], 4 )} `
517+ + `rotated ~${roundTo(transform.head_rot[1], 4 )} ~${roundTo(transform.head_rot[0], 4 )} `
518518 + `${transform.function_execute_condition ? transform.function_execute_condition + ' ' : ''}run `
519519 + `block ${frameIndex}_locator_${node.storage_name}%NEWLINE_PATCH%{\n`
520520 + `tp @s ~ ~ ~ ~ ~\n`
@@ -523,8 +523,8 @@ IF (has_animations) {
523523 } else {
524524 frameFuncEnd +=
525525 `\nexecute unless entity @s[tag=${TAGS.TRANSFORMS_ONLY()}] `
526- + `positioned ^${roundTo(transform.pos[0], 10 )} ^${roundTo(transform.pos[1], 10 )} ^${roundTo(transform.pos[2], 10 )} `
527- + `rotated ~${roundTo(transform.head_rot[1], 10 )} ~${roundTo(transform.head_rot[0], 10 )} `
526+ + `positioned ^${roundTo(transform.pos[0], 4 )} ^${roundTo(transform.pos[1], 4 )} ^${roundTo(transform.pos[2], 4 )} `
527+ + `rotated ~${roundTo(transform.head_rot[1], 4 )} ~${roundTo(transform.head_rot[0], 4 )} `
528528 + `${transform.function_execute_condition ? transform.function_execute_condition + ' ' : ''}run `
529529 + `block ${frameIndex}_locator_${node.storage_name}%NEWLINE_PATCH%{\n`
530530 + `${transform.function}`
@@ -538,19 +538,19 @@ IF (has_animations) {
538538 lastActiveFrame[node.uuid] = transform
539539 ;if (!lastFrame || matrixToNbtFloatArray(transform.matrix).toString() !== matrixToNbtFloatArray(lastFrame.matrix).toString()) {
540540 toMerge.interactions[node.storage_name] = {
541- px: roundTo(transform.pos[0], 10 ),
542- py: roundTo(transform.pos[1], 10 ),
543- pz: roundTo(transform.pos[2], 10 ),
544- ry: roundTo(transform.head_rot[1], 10 ),
545- rx: roundTo(transform.head_rot[0], 10 )
541+ px: roundTo(transform.pos[0], 4 ),
542+ py: roundTo(transform.pos[1], 4 ),
543+ pz: roundTo(transform.pos[2], 4 ),
544+ ry: roundTo(transform.head_rot[1], 4 ),
545+ rx: roundTo(transform.head_rot[0], 4 )
546546 };
547547 }
548548
549549 if (transform.function) {
550550 frameFuncEnd +=
551551 `\n$execute unless entity @s[tag=${TAGS.TRANSFORMS_ONLY()}] as $(${node.storage_name}) `
552- + `positioned ^${roundTo(transform.pos[0], 10 )} ^${roundTo(transform.pos[1], 10 )} ^${roundTo(transform.pos[2], 10 )} `
553- + `rotated ~${roundTo(transform.head_rot[1], 10 )} ~${roundTo(transform.head_rot[0], 10 )} `
552+ + `positioned ^${roundTo(transform.pos[0], 4 )} ^${roundTo(transform.pos[1], 4 )} ^${roundTo(transform.pos[2], 4 )} `
553+ + `rotated ~${roundTo(transform.head_rot[1], 4 )} ~${roundTo(transform.head_rot[0], 4 )} `
554554 + `${transform.function_execute_condition ? transform.function_execute_condition + ' ' : ''}run `
555555 + `block ${frameIndex}_interaction_${node.storage_name}%NEWLINE_PATCH%{\n`
556556 + `tp @s ~ ~ ~ ~ ~\n`
@@ -674,9 +674,9 @@ function summon {
674674
675675 REPEAT (Object.values(rig.nodes).filter(node => node.type === 'interaction')) as interaction {
676676 summon minecraft:interaction \
677- ^<%roundTo(interaction.default_transform.pos[0], 10 )%> \
678- ^<%roundTo(interaction.default_transform.pos[1], 10 )%> \
679- ^<%roundTo(interaction.default_transform.pos[2], 10 )%> \
677+ ^<%roundTo(interaction.default_transform.pos[0], 4 )%> \
678+ ^<%roundTo(interaction.default_transform.pos[1], 4 )%> \
679+ ^<%roundTo(interaction.default_transform.pos[2], 4 )%> \
680680 { \
681681 Tags:<%getNodeTags(interaction, rig)%>, \
682682 response: <%interaction.config.response ?? false%>, \
@@ -710,9 +710,9 @@ function summon {
710710
711711 REPEAT (Object.values(rig.nodes).filter(node => node.type === 'locator' && node.config?.use_entity)) as locator {
712712 summon <%locator.config.entity_type%> \
713- ^<%roundTo(locator.default_transform.pos[0], 10 )%> \
714- ^<%roundTo(locator.default_transform.pos[1], 10 )%> \
715- ^<%roundTo(locator.default_transform.pos[2], 10 )%> \
713+ ^<%roundTo(locator.default_transform.pos[0], 4 )%> \
714+ ^<%roundTo(locator.default_transform.pos[1], 4 )%> \
715+ ^<%roundTo(locator.default_transform.pos[2], 4 )%> \
716716 {Tags:<%getNodeTags(locator, rig)%>}
717717 execute \
718718 as @e[ \
@@ -735,9 +735,9 @@ function summon {
735735
736736 REPEAT (Object.values(rig.nodes).filter(node => node.type === 'camera')) as camera {
737737 summon minecraft:item_display \
738- ^<%roundTo(camera.default_transform.pos[0], 10 )%> \
739- ^<%roundTo(camera.default_transform.pos[1], 10 )%> \
740- ^<%roundTo(camera.default_transform.pos[2], 10 )%> \
738+ ^<%roundTo(camera.default_transform.pos[0], 4 )%> \
739+ ^<%roundTo(camera.default_transform.pos[1], 4 )%> \
740+ ^<%roundTo(camera.default_transform.pos[2], 4 )%> \
741741 {Tags:<%getNodeTags(camera, rig)%>, teleport_duration: 2}
742742 execute \
743743 as @e[ \
@@ -772,20 +772,10 @@ function summon {
772772 data modify storage <%temp_storage%> entry.data.uuids_by_name.<%node.storage_name%> set from storage <%gu_storage%> out
773773 }
774774
775- IF (has_entity_locators) {
776- REPEAT (Object.values(rig.nodes).filter(node => node.type === 'locator' && node.config?.use_entity)) as locator {
777- block { with storage <%temp_storage%> entry.data.locators.<%locator.storage_name%>
778- # Track any custom entities on the locator.
779- $execute at @s as $(uuid) at @s run function animated_java:global/util/get_entity_stack_uuids
780- }
781- data modify storage <%temp_storage%> entry.data.uuids append from storage <%temp_storage%> uuids
782- }
783- }
775+ data_manager write
784776
785777 function <%blueprint_id%>/zzz/set_default_pose
786778
787- data_manager write
788-
789779 # Variant Arguement
790780 IF (Object.keys(rig.variants).length > 1) {
791781 execute if data storage <%temp_storage%> args.variant run block variant_arg/process { with storage <%temp_storage%> args
@@ -869,33 +859,48 @@ function summon {
869859 execute if score #success <%OBJECTIVES.I()%> matches 0 run return fail
870860 }
871861
872- IF (has_locators || has_cameras) {
873- function <%blueprint_id%>/root/on_tick/transform_floating_entities
874- }
875862 execute on passengers run tp @s ~ ~ ~ ~ ~
876863
877864 # Apply teleport duration
878865 data modify entity @s teleport_duration set value <%teleportation_duration%>
879866 execute on passengers run data modify entity @s teleport_duration set value <%teleportation_duration%>
880867
881868 IF (has_entity_locators) {
882- REPEAT (Object.values(rig.nodes).filter(node => node.type === 'locator' && node.config?.use_entity && node.config.on_summon_function)) as locator {
883- block { with storage <%temp_storage%> entry.data.locators.<%locator.storage_name%>
884- $execute at @s as $(uuid) at @s run block on_summon/custom_<%locator.type + '_' + locator.storage_name%> {
885- <%%
886- emit.mcb(locator.config.on_summon_function)
887- %%>
869+ # Capture the value of entry.data.locators in the macro call to prevent unexpected
870+ # behavior if entry.data.locators is modified by any on_summon_function calls.
871+ block { with storage <%temp_storage%> entry.data.locators
872+ REPEAT (Object.values(rig.nodes).filter(node => node.type === 'locator' && node.config?.use_entity && node.config.on_summon_function)) as locator {
873+ $block { $(<%locator.storage_name%>)
874+ $execute at @s as $(uuid) at @s run block on_summon/custom_<%locator.type + '_' + locator.storage_name%> {
875+ <%%
876+ emit.mcb(locator.config.on_summon_function)
877+ %%>
878+ }
888879 }
889880 }
890881 }
882+
883+ data_manager prep read
884+ REPEAT (Object.values(rig.nodes).filter(node => node.type === 'locator' && node.config?.use_entity)) as locator {
885+ block { with storage <%temp_storage%> entry.data.locators.<%locator.storage_name%>
886+ # Track any custom entities on the locator.
887+ $execute at @s as $(uuid) at @s run function animated_java:global/util/get_entity_stack_uuids
888+ }
889+ data modify storage <%temp_storage%> entry.data.uuids append from storage <%temp_storage%> uuids
890+ }
891+ data_manager write
891892 }
892893
893- REPEAT (Object.values(rig.nodes).filter(node => node.type === 'interaction' && node.config.on_summon_function)) as interaction {
894- block { with storage <%temp_storage%> entry.data.interactions.<%interaction.storage_name%>
895- $execute at @s as $(uuid) at @s run block on_summon/custom_<%interaction.type + '_' + interaction.storage_name%> {
896- <%%
897- emit.mcb(interaction.config.on_summon_function)
898- %%>
894+ IF (has_interactions) {
895+ block { with storage <%temp_storage%> entry.data.interactions
896+ REPEAT (Object.values(rig.nodes).filter(node => node.type === 'interaction' && node.config.on_summon_function)) as interaction {
897+ $block { $(<%interaction.storage_name%>)
898+ $execute at @s as $(uuid) at @s run block on_summon/custom_<%interaction.type + '_' + interaction.storage_name%> {
899+ <%%
900+ emit.mcb(interaction.config.on_summon_function)
901+ %%>
902+ }
903+ }
899904 }
900905 }
901906 }
@@ -1659,6 +1664,12 @@ IF (Object.keys(rig.variants).length > 1) {
16591664 }
16601665 }
16611666 }
1667+ IF (variant.on_apply_function) {
1668+ <%%
1669+ emit.mcb(variant.on_apply_function)
1670+ %%>
1671+ }
1672+
16621673 # Return success to allow this function to be used in function conditions.
16631674 return 1
16641675 }
@@ -1674,64 +1685,64 @@ IF (has_locators || has_cameras) {
16741685 IF (locator.config?.use_entity) {
16751686 execute at @s run block set_default_pose/as_locator_<%locator.storage_name%> { with storage <%temp_storage%> entry.data.locators.<%locator.storage_name%>
16761687 $tp $(uuid) \
1677- ^<%roundTo(locator.default_transform.pos[0], 10 )%> \
1678- ^<%roundTo(locator.default_transform.pos[1], 10 )%> \
1679- ^<%roundTo(locator.default_transform.pos[2], 10 )%> \
1680- ~<%roundTo(locator.default_transform.head_rot[1], 10 )%> \
1681- ~<%roundTo(locator.default_transform.head_rot[0], 10 )%>
1688+ ^<%roundTo(locator.default_transform.pos[0], 4 )%> \
1689+ ^<%roundTo(locator.default_transform.pos[1], 4 )%> \
1690+ ^<%roundTo(locator.default_transform.pos[2], 4 )%> \
1691+ ~<%roundTo(locator.default_transform.head_rot[1], 4 )%> \
1692+ ~<%roundTo(locator.default_transform.head_rot[0], 4 )%>
16821693
16831694 data modify storage <%temp_storage%> entry.data.locators.<%locator.storage_name%> merge value { \
1684- px: <%roundTo(locator.default_transform.pos[0], 10 )%>, \
1685- py: <%roundTo(locator.default_transform.pos[1], 10 )%>, \
1686- pz: <%roundTo(locator.default_transform.pos[2], 10 )%>, \
1687- ry: <%roundTo(locator.default_transform.head_rot[1], 10 )%>, \
1688- rx: <%roundTo(locator.default_transform.head_rot[0], 10 )%> \
1695+ px: <%roundTo(locator.default_transform.pos[0], 4 )%>, \
1696+ py: <%roundTo(locator.default_transform.pos[1], 4 )%>, \
1697+ pz: <%roundTo(locator.default_transform.pos[2], 4 )%>, \
1698+ ry: <%roundTo(locator.default_transform.head_rot[1], 4 )%>, \
1699+ rx: <%roundTo(locator.default_transform.head_rot[0], 4 )%> \
16891700 }
16901701 }
16911702 } ELSE {
16921703 data modify storage <%temp_storage%> entry.data.locators.<%locator.storage_name%> merge value { \
1693- px: <%roundTo(locator.default_transform.pos[0], 10 )%>, \
1694- py: <%roundTo(locator.default_transform.pos[1], 10 )%>, \
1695- pz: <%roundTo(locator.default_transform.pos[2], 10 )%>, \
1696- ry: <%roundTo(locator.default_transform.head_rot[1], 10 )%>, \
1697- rx: <%roundTo(locator.default_transform.head_rot[0], 10 )%> \
1704+ px: <%roundTo(locator.default_transform.pos[0], 4 )%>, \
1705+ py: <%roundTo(locator.default_transform.pos[1], 4 )%>, \
1706+ pz: <%roundTo(locator.default_transform.pos[2], 4 )%>, \
1707+ ry: <%roundTo(locator.default_transform.head_rot[1], 4 )%>, \
1708+ rx: <%roundTo(locator.default_transform.head_rot[0], 4 )%> \
16981709 }
16991710 }
17001711 }
17011712
17021713 REPEAT(Object.values(rig.nodes).filter(node => node.type === 'interaction')) as interaction {
17031714 execute at @s run block set_default_pose/as_interaction_<%interaction.storage_name%> { with storage <%temp_storage%> entry.data.interactions.<%interaction.storage_name%>
17041715 $tp $(uuid) \
1705- ^<%roundTo(interaction.default_transform.pos[0], 10 )%> \
1706- ^<%roundTo(interaction.default_transform.pos[1], 10 )%> \
1707- ^<%roundTo(interaction.default_transform.pos[2], 10 )%> \
1708- ~<%roundTo(interaction.default_transform.head_rot[1], 10 )%> \
1709- ~<%roundTo(interaction.default_transform.head_rot[0], 10 )%>
1716+ ^<%roundTo(interaction.default_transform.pos[0], 4 )%> \
1717+ ^<%roundTo(interaction.default_transform.pos[1], 4 )%> \
1718+ ^<%roundTo(interaction.default_transform.pos[2], 4 )%> \
1719+ ~<%roundTo(interaction.default_transform.head_rot[1], 4 )%> \
1720+ ~<%roundTo(interaction.default_transform.head_rot[0], 4 )%>
17101721 data modify storage <%temp_storage%> entry.data.interactions.<%interaction.storage_name%> merge value { \
1711- px: <%roundTo(interaction.default_transform.pos[0], 10 )%>, \
1712- py: <%roundTo(interaction.default_transform.pos[1], 10 )%>, \
1713- pz: <%roundTo(interaction.default_transform.pos[2], 10 )%>, \
1714- ry: <%roundTo(interaction.default_transform.head_rot[1], 10 )%>, \
1715- rx: <%roundTo(interaction.default_transform.head_rot[0], 10 )%> \
1722+ px: <%roundTo(interaction.default_transform.pos[0], 4 )%>, \
1723+ py: <%roundTo(interaction.default_transform.pos[1], 4 )%>, \
1724+ pz: <%roundTo(interaction.default_transform.pos[2], 4 )%>, \
1725+ ry: <%roundTo(interaction.default_transform.head_rot[1], 4 )%>, \
1726+ rx: <%roundTo(interaction.default_transform.head_rot[0], 4 )%> \
17161727 }
17171728 }
17181729 }
17191730
17201731 REPEAT (Object.values(rig.nodes).filter(node => node.type === 'camera')) as camera {
17211732 execute at @s run block set_default_pose/as_camera_<%camera.storage_name%> { with storage <%temp_storage%> entry.data.cameras.<%camera.storage_name%>
17221733 $tp $(uuid) \
1723- ^<%roundTo(camera.default_transform.pos[0], 10 )%> \
1724- ^<%roundTo(camera.default_transform.pos[1], 10 )%> \
1725- ^<%roundTo(camera.default_transform.pos[2], 10 )%> \
1726- ~<%roundTo(camera.default_transform.head_rot[1], 10 )%> \
1727- ~<%roundTo(camera.default_transform.head_rot[0], 10 )%>
1734+ ^<%roundTo(camera.default_transform.pos[0], 4 )%> \
1735+ ^<%roundTo(camera.default_transform.pos[1], 4 )%> \
1736+ ^<%roundTo(camera.default_transform.pos[2], 4 )%> \
1737+ ~<%roundTo(camera.default_transform.head_rot[1], 4 )%> \
1738+ ~<%roundTo(camera.default_transform.head_rot[0], 4 )%>
17281739
17291740 data modify storage <%temp_storage%> entry.data.cameras.<%camera.storage_name%> merge value { \
1730- px: <%roundTo(camera.default_transform.pos[0], 10 )%>, \
1731- py: <%roundTo(camera.default_transform.pos[1], 10 )%>, \
1732- pz: <%roundTo(camera.default_transform.pos[2], 10 )%>, \
1733- ry: <%roundTo(camera.default_transform.head_rot[1], 10 )%>, \
1734- rx: <%roundTo(camera.default_transform.head_rot[0], 10 )%> \
1741+ px: <%roundTo(camera.default_transform.pos[0], 4 )%>, \
1742+ py: <%roundTo(camera.default_transform.pos[1], 4 )%>, \
1743+ pz: <%roundTo(camera.default_transform.pos[2], 4 )%>, \
1744+ ry: <%roundTo(camera.default_transform.head_rot[1], 4 )%>, \
1745+ rx: <%roundTo(camera.default_transform.head_rot[0], 4 )%> \
17351746 }
17361747 }
17371748 }
@@ -1782,9 +1793,7 @@ IF (has_animations) {
17821793 # Changes the pose of the rig to the the default pose with interpolation
17831794 debug assert executed_as_root_entity <%TAGS.PROJECT_ROOT(blueprint_id)%>
17841795
1785- IF (has_locators || has_cameras || has_interactions) {
1786- data_manager prep read
1787- }
1796+ data_manager prep read
17881797 function ./zzz/apply_default_pose
17891798 }
17901799}
@@ -1793,8 +1802,6 @@ function set_default_pose {
17931802 # Changes the pose of the rig to the the default pose without interpolation
17941803 debug assert executed_as_root_entity <%TAGS.PROJECT_ROOT(blueprint_id)%>
17951804
1796- IF (has_locators || has_cameras || has_interactions) {
1797- data_manager prep read
1798- }
1805+ data_manager prep read
17991806 function ./zzz/set_default_pose
18001807}
0 commit comments