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

2.3 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 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 #_macro.array for an entry where the value of string matches the keyword. The keyword

In TypeScript, it would look something like this:

function searchArray(keyword: string) {
	// logic
	return theRelevantEntry
}

searchArray('entry500')

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)]