isuckatcode-pages/Minecraft Datapacking/When Two Macros are Faster than One.md
themodernhakr 620bd29a29
All checks were successful
Update pages on webserver / Update (push) Successful in 5s
vault backup: 2025-03-24 22:16:49
2025-03-24 22:16:49 -05:00

2.1 KiB

title draft
When Two Macros are Faster than One false

While working on my Database datapack (still WIP), I knew I'd want to find

Scenario

Dataset

The data is stored in a storage #_macro.array. Array is populated with a total of 500 entries, each having a id and string fields.

[
	{
		id: 1,
		string: "entry1"
	},
	...
	{
		id: 500,
		string: "entry500"
	}
]

Constraints

The objective is to create an interface that receives a keyword, say entry500, and searches the array for an entry where the value of string matches the keyword.

One Macro

Macros allow us to reach into our array and pick out an entry that matching value in the string property.

... one_macro.array[string:$(keyword)]
'# one_macro/run.mcfunction

data modify storage test_namespace:test_namespace temp.keyword set value 'entry500'

function test_namespace:one_macro/_searcharray with storage test_namespace:test_namespace temp

data remove storage test_namespace:test_namespace temp.keyword
data remove storage test_namespace:test_namespace temp.result
'# one_macro/_searcharray.mcfunction

$data modify storage test_namespace:test_namespace temp.result set from storage test_namespace:test_namespace one_macro.array[string:$(keyword)]

Two Macro

'# two_macro/run.mcfunction

data modify storage test_namespace:test_namespace temp.keyword set value 'entry500'

function test_namespace:two_macro/_searchindex with storage test_namespace:test_namespace temp

function test_namespace:two_macro/_searcharray with storage test_namespace:test_namespace temp

data remove storage test_namespace:test_namespace temp.keyword
data remove storage test_namespace:test_namespace temp.index
data remove storage test_namespace:test_namespace temp.result
'# two_macro/_searchindex.mcfunction

$data modify storage test_namespace:test_namespace temp.index set from storage test_namespace:test_namespace two_macro.index.$(keyword)
'# two_macro/_searcharray.mcfunction

$data modify storage test_namespace:test_namespace temp.result set from storage test_namespace:test_namespace two_macro.array[$(index)]