Skip to content

Commit e782e6c

Browse files
SnaveSutitgitbutler-client
authored andcommitted
🐛 Fix summon function failing if a locator summoned another rig from it's on summon functions
1 parent c201c2b commit e782e6c

6 files changed

Lines changed: 654 additions & 612 deletions

File tree

src/systems/datapackCompiler/1.20.4/main.mcb

Lines changed: 109 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)