diff --git a/packs/guikit-datapack/data/guikit/function/api/close.mcfunction b/packs/guikit-datapack/data/guikit/function/api/close.mcfunction index ec8b395b..eb12a28d 100644 --- a/packs/guikit-datapack/data/guikit/function/api/close.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/api/close.mcfunction @@ -2,8 +2,8 @@ # Only touches the cart owned by THIS player (uid match), and only widget items in the inventory. scoreboard players operation #uid guikit.tmp = @s guikit.uid execute store result storage guikit:ctx uid int 1 run scoreboard players get @s guikit.uid -function guikit:internal/cont_unbind with storage guikit:ctx -execute as @e[type=#guikit:container,tag=guikit.cart] if score @s guikit.uid = #uid guikit.tmp run function guikit:internal/dispose_cart +function guikit:internal/summon/unbind with storage guikit:ctx +execute as @e[type=#guikit:container,tag=guikit.cart] if score @s guikit.uid = #uid guikit.tmp run function guikit:internal/pad/dispose_cart function guikit:internal/safe_clear @@ -15,7 +15,7 @@ scoreboard players reset @s guikit.uid scoreboard players reset @s guikit.slots scoreboard players reset @s guikit.click function #guikit:clear_tags -function guikit:internal/cleanup_player +function guikit:internal/clear/player # hook: menu packs can clean up their own state here. Runs AFTER the cart is gone and this # player's guikit scores are reset, so a listener must NOT call guikit:api/open / refresh from diff --git a/packs/guikit-datapack/data/guikit/function/api/open.mcfunction b/packs/guikit-datapack/data/guikit/function/api/open.mcfunction index 1fb3bd5d..ef1d015a 100644 --- a/packs/guikit-datapack/data/guikit/function/api/open.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/api/open.mcfunction @@ -2,7 +2,7 @@ # Input (storage guikit:in): {menu:":", page:0, timer:900} # Result: #ok guikit.const = 1 opened, 0 failed # -# function guikit:internal/clear_in +# function guikit:internal/clear/in # data merge storage guikit:in {menu:"ns:id"} # function guikit:api/open @@ -24,7 +24,7 @@ scoreboard players operation @s guikit.uid = #next_uid guikit.const scoreboard players add #next_uid guikit.const 1 # summon + bind cart to owner -function guikit:internal/summon with storage guikit:in +function guikit:internal/summon/main with storage guikit:in execute unless entity @e[type=#guikit:container,tag=guikit.new,distance=..1] run return run function guikit:internal/open_fail scoreboard players operation @e[type=#guikit:container,tag=guikit.new,distance=..1,limit=1] guikit.uid = @s guikit.uid tag @e[type=#guikit:container,tag=guikit.new,distance=..1] remove guikit.new diff --git a/packs/guikit-datapack/data/guikit/function/cond/check.mcfunction b/packs/guikit-datapack/data/guikit/function/cond/check.mcfunction index 94afad0b..167ac844 100644 --- a/packs/guikit-datapack/data/guikit/function/cond/check.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/cond/check.mcfunction @@ -13,15 +13,15 @@ # leaf types above (a nested all/any counts as failed) # `not:1b` inverts the result. Unknown type / missing key = fails (closed). # -# function guikit:internal/clear_cond +# function guikit:internal/clear/cond # data merge storage guikit:cond {type:"score", obj:"coins", min:10} # function guikit:cond/check # execute if score #cond guikit.tmp matches 1 run ... # # One small function per type (no big execute chains), same as the rest of the pack. scoreboard players set #cond guikit.tmp 0 -execute if data storage guikit:cond {type:"all"} run return run function guikit:cond/t_all -execute if data storage guikit:cond {type:"any"} run return run function guikit:cond/t_any +execute if data storage guikit:cond {type:"all"} run function guikit:cond/t_all +execute if data storage guikit:cond {type:"any"} run function guikit:cond/t_any execute if data storage guikit:cond {type:"score"} run function guikit:cond/t_score execute if data storage guikit:cond {type:"item_count"} run function guikit:cond/t_item_count execute if data storage guikit:cond {type:"tag"} if data storage guikit:cond tag run function guikit:cond/t_tag with storage guikit:cond diff --git a/packs/guikit-datapack/data/guikit/function/cond/comp_run.mcfunction b/packs/guikit-datapack/data/guikit/function/cond/comp_run.mcfunction index 19408aff..c4c1fdee 100644 --- a/packs/guikit-datapack/data/guikit/function/cond/comp_run.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/cond/comp_run.mcfunction @@ -13,5 +13,5 @@ scoreboard players operation #cond guikit.tmp = #cacc guikit.tmp execute if score #cnot guikit.tmp matches 1 run function guikit:cond/negate data remove storage guikit:cnd items data remove storage guikit:cnd cur -function guikit:internal/clear_cond +function guikit:internal/clear/cond return run scoreboard players get #cond guikit.tmp diff --git a/packs/guikit-datapack/data/guikit/function/cond/comp_step.mcfunction b/packs/guikit-datapack/data/guikit/function/cond/comp_step.mcfunction index 9e2d1af7..13229bf7 100644 --- a/packs/guikit-datapack/data/guikit/function/cond/comp_step.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/cond/comp_step.mcfunction @@ -2,7 +2,7 @@ execute unless score #ci guikit.tmp < #cn guikit.tmp run return 0 execute store result storage guikit:cnd i int 1 run scoreboard players get #ci guikit.tmp function guikit:cond/comp_pick with storage guikit:cnd -function guikit:internal/clear_cond +function guikit:internal/clear/cond function guikit:cond/load_cur scoreboard players set #cond guikit.tmp 0 execute unless data storage guikit:cond {type:"all"} unless data storage guikit:cond {type:"any"} run function guikit:cond/check diff --git a/packs/guikit-datapack/data/guikit/function/core/load.mcfunction b/packs/guikit-datapack/data/guikit/function/core/load.mcfunction index 4540f823..5c1d5105 100644 --- a/packs/guikit-datapack/data/guikit/function/core/load.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/core/load.mcfunction @@ -17,20 +17,20 @@ scoreboard players set #version guikit.const 2 execute unless score #next_uid guikit.const matches 0.. run scoreboard players set #next_uid guikit.const 1 # transient scratch storage / scores are dropped on every reload (stale state from a previous run) -function guikit:internal/clear_in -function guikit:internal/clear_w -function guikit:internal/clear_cond -function guikit:internal/clear_tmp -function guikit:internal/clear_btn_cur -function guikit:internal/clear_mtr -function guikit:internal/cleanup_scores +function guikit:internal/clear/in +function guikit:internal/clear/w +function guikit:internal/clear/cond +function guikit:internal/clear/tmp +function guikit:internal/btn/clear_cur +function guikit:internal/clear/mtr +function guikit:internal/clear/scores # carts that lost their owner across a reload / relog are removed -function guikit:internal/sweep_orphans +function guikit:internal/sweep/orphans # registry is rebuilt on every reload by the #guikit:register listeners data modify storage guikit:reg menus set value {} -function guikit:internal/containers_builtin +function guikit:internal/summon/builtin data modify storage guikit:cont bound set value {} data modify storage guikit:btn defs set value {} function #guikit:register diff --git a/packs/guikit-datapack/data/guikit/function/core/tick_player.mcfunction b/packs/guikit-datapack/data/guikit/function/core/tick_player.mcfunction index f2964646..577afa1e 100644 --- a/packs/guikit-datapack/data/guikit/function/core/tick_player.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/core/tick_player.mcfunction @@ -11,6 +11,8 @@ scoreboard players set #found guikit.tmp 0 execute as @e[type=#guikit:container,tag=guikit.cart] if score @s guikit.uid = #uid guikit.tmp run function guikit:internal/follow execute if score #found guikit.tmp matches 0 run return run function guikit:api/close +execute as @e[type=#guikit:container,tag=guikit.cart] if score @s guikit.uid = #uid guikit.tmp run function guikit:internal/sweep/foreign_cart + # click detection: a GUI item in the inventory == the player left-clicked it. # `clear ... 0` only COUNTS. Everything below is gated on that count, so a tick with no # GUI item in the inventory never reaches a destructive clear. diff --git a/packs/guikit-datapack/data/guikit/function/internal/btn_afford.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/btn/afford.mcfunction similarity index 76% rename from packs/guikit-datapack/data/guikit/function/internal/btn_afford.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/btn/afford.mcfunction index ffadb9ea..e5e07b5c 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/btn_afford.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/btn/afford.mcfunction @@ -1,8 +1,8 @@ -# guikit :: internal/btn_afford as player reads storage guikit:btn cur.cost +# guikit :: internal/btn/afford as player reads storage guikit:btn cur.cost # cost:{obj:"coins", amount:5} score cost # cost:{item:"minecraft:diamond", [count:3]} item cost (count defaults to 1) # Result in #cond guikit.tmp (1 = enough). Does not charge. scoreboard players set #cond guikit.tmp 1 execute unless data storage guikit:btn cur.cost.count run data modify storage guikit:btn cur.cost.count set value 1 -execute if data storage guikit:btn cur.cost.obj run function guikit:internal/btn_afford_score with storage guikit:btn cur.cost -execute if data storage guikit:btn cur.cost.item run function guikit:internal/btn_afford_item +execute if data storage guikit:btn cur.cost.obj run function guikit:internal/btn/afford_score with storage guikit:btn cur.cost +execute if data storage guikit:btn cur.cost.item run function guikit:internal/btn/afford_item diff --git a/packs/guikit-datapack/data/guikit/function/internal/btn_afford_item.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/btn/afford_item.mcfunction similarity index 75% rename from packs/guikit-datapack/data/guikit/function/internal/btn_afford_item.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/btn/afford_item.mcfunction index 456d645f..3d9553d7 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/btn_afford_item.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/btn/afford_item.mcfunction @@ -1,8 +1,8 @@ -# guikit :: internal/btn_afford_item as player +# guikit :: internal/btn/afford_item as player # Reuses the item_count condition, which does not count the clicked widget item (see cond/t_item_count_do). scoreboard players set #cond guikit.tmp 0 -function guikit:internal/clear_cond +function guikit:internal/clear/cond data modify storage guikit:cond item set from storage guikit:btn cur.cost.item data modify storage guikit:cond min set from storage guikit:btn cur.cost.count function guikit:cond/t_item_count_do with storage guikit:cond -function guikit:internal/clear_cond +function guikit:internal/clear/cond diff --git a/packs/guikit-datapack/data/guikit/function/internal/btn_afford_score.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/btn/afford_score.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/btn_afford_score.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/btn/afford_score.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/clear_btn_cur.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/btn/clear_cur.mcfunction similarity index 50% rename from packs/guikit-datapack/data/guikit/function/internal/clear_btn_cur.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/btn/clear_cur.mcfunction index 95ef751c..daa412db 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/clear_btn_cur.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/btn/clear_cur.mcfunction @@ -1,2 +1,2 @@ -# guikit :: internal/clear_btn_cur +# guikit :: internal/btn/clear_cur data remove storage guikit:btn cur diff --git a/packs/guikit-datapack/data/guikit/function/internal/btn_click.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/btn/click.mcfunction similarity index 89% rename from packs/guikit-datapack/data/guikit/function/internal/btn_click.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/btn/click.mcfunction index da38d185..6d9fbb33 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/btn_click.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/btn/click.mcfunction @@ -13,19 +13,19 @@ data remove storage guikit:btn cur $data modify storage guikit:btn cur set from storage guikit:btn defs."$(id)" execute unless data storage guikit:btn cur run return 0 -function guikit:internal/btn_cond -execute if score #cond guikit.tmp matches 0 run return run function guikit:internal/btn_deny +function guikit:internal/btn/cond +execute if score #cond guikit.tmp matches 0 run return run function guikit:internal/btn/deny # cost: charged only now (cond passed), before the command runs scoreboard players set #paid guikit.tmp 1 -execute if data storage guikit:btn cur.cost run function guikit:internal/btn_pay -execute if score #paid guikit.tmp matches 0 run return run function guikit:internal/btn_poor +execute if data storage guikit:btn cur.cost run function guikit:internal/btn/pay +execute if score #paid guikit.tmp matches 0 run return run function guikit:internal/btn/poor # decide now: the command may overwrite guikit:btn cur (e.g. by running another button) execute store success score #btn_close guikit.tmp if data storage guikit:btn cur{close:1b} -execute if data storage guikit:btn cur.cmd run function guikit:internal/btn_cmd with storage guikit:btn cur -execute if data storage guikit:btn cur.url run function guikit:internal/btn_url with storage guikit:btn cur +execute if data storage guikit:btn cur.cmd run function guikit:internal/btn/cmd with storage guikit:btn cur +execute if data storage guikit:btn cur.url run function guikit:internal/btn/url with storage guikit:btn cur execute if score #btn_close guikit.tmp matches 1 if score @s guikit.uid matches 1.. run function guikit:api/close # transient: nothing may leak into the next click -function guikit:internal/clear_btn_cur +function guikit:internal/btn/clear_cur diff --git a/packs/guikit-datapack/data/guikit/function/internal/btn_cmd.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/btn/cmd.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/btn_cmd.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/btn/cmd.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/btn_cond.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/btn/cond.mcfunction similarity index 78% rename from packs/guikit-datapack/data/guikit/function/internal/btn_cond.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/btn/cond.mcfunction index c1a25cf3..01d5bde8 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/btn_cond.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/btn/cond.mcfunction @@ -1,8 +1,8 @@ -# guikit :: internal/btn_cond as player reads storage guikit:btn cur.cond +# guikit :: internal/btn/cond as player reads storage guikit:btn cur.cond # Result: #cond guikit.tmp = 1 when the button has no condition or it passes, else 0. scoreboard players set #cond guikit.tmp 1 execute unless data storage guikit:btn cur.cond run return 1 -function guikit:internal/clear_cond +function guikit:internal/clear/cond data remove storage guikit:cnd cur data modify storage guikit:cnd cur set from storage guikit:btn cur.cond function guikit:cond/load_cur diff --git a/packs/guikit-datapack/data/guikit/function/internal/btn_deny.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/btn/deny.mcfunction similarity index 73% rename from packs/guikit-datapack/data/guikit/function/internal/btn_deny.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/btn/deny.mcfunction index 3467865f..3882b3e8 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/btn_deny.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/btn/deny.mcfunction @@ -1,5 +1,5 @@ -# guikit :: internal/btn_deny as player reads storage guikit:btn cur.deny -function guikit:internal/clear_in +# guikit :: internal/btn/deny as player reads storage guikit:btn cur.deny +function guikit:internal/clear/in data modify storage guikit:in msg set value "Not available." execute if data storage guikit:btn cur.deny run data modify storage guikit:in msg set from storage guikit:btn cur.deny data modify storage guikit:in color set value "red" diff --git a/packs/guikit-datapack/data/guikit/function/internal/btn_gate.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/btn/gate.mcfunction similarity index 72% rename from packs/guikit-datapack/data/guikit/function/internal/btn_gate.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/btn/gate.mcfunction index 2ee7dbf2..d5fed18b 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/btn_gate.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/btn/gate.mcfunction @@ -1,6 +1,6 @@ -# guikit :: internal/btn_gate as player reads storage guikit:btn cur +# guikit :: internal/btn/gate as player reads storage guikit:btn cur # Result: #cond guikit.tmp = 1 when the button's cond passes AND its cost is affordable, else 0. # Nothing is charged here (used when drawing, to decide the locked look). -function guikit:internal/btn_cond +function guikit:internal/btn/cond execute if score #cond guikit.tmp matches 0 run return 0 -execute if data storage guikit:btn cur.cost run function guikit:internal/btn_afford +execute if data storage guikit:btn cur.cost run function guikit:internal/btn/afford diff --git a/packs/guikit-datapack/data/guikit/function/internal/btn_pay.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/btn/pay.mcfunction similarity index 82% rename from packs/guikit-datapack/data/guikit/function/internal/btn_pay.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/btn/pay.mcfunction index 266b7568..e7d7bcaa 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/btn_pay.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/btn/pay.mcfunction @@ -1,5 +1,5 @@ -# guikit :: internal/btn_pay as player reads storage guikit:btn cur.cost +# guikit :: internal/btn/pay as player reads storage guikit:btn cur.cost # Charges the cost through the existing helpers. Result in #paid guikit.tmp (1 = paid, 0 = not enough). execute unless data storage guikit:btn cur.cost.count run data modify storage guikit:btn cur.cost.count set value 1 execute if data storage guikit:btn cur.cost.obj run function guikit:internal/pay_score with storage guikit:btn cur.cost -execute if data storage guikit:btn cur.cost.item run function guikit:internal/btn_pay_item +execute if data storage guikit:btn cur.cost.item run function guikit:internal/btn/pay_item diff --git a/packs/guikit-datapack/data/guikit/function/internal/btn_pay_item.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/btn/pay_item.mcfunction similarity index 86% rename from packs/guikit-datapack/data/guikit/function/internal/btn_pay_item.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/btn/pay_item.mcfunction index 346965a6..13dddbd9 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/btn_pay_item.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/btn/pay_item.mcfunction @@ -1,4 +1,4 @@ -# guikit :: internal/btn_pay_item as player +# guikit :: internal/btn/pay_item as player # The clicked widget is still in the inventory here. Remove widget items first so pay_item can neither # count it nor clear it instead of the player's real items (a button that costs its own item type). function guikit:internal/safe_clear diff --git a/packs/guikit-datapack/data/guikit/function/internal/btn_poor.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/btn/poor.mcfunction similarity index 74% rename from packs/guikit-datapack/data/guikit/function/internal/btn_poor.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/btn/poor.mcfunction index 504b1452..dfd2c060 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/btn_poor.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/btn/poor.mcfunction @@ -1,5 +1,5 @@ -# guikit :: internal/btn_poor as player reads storage guikit:btn cur.poor -function guikit:internal/clear_in +# guikit :: internal/btn/poor as player reads storage guikit:btn cur.poor +function guikit:internal/clear/in data modify storage guikit:in msg set value "You can't afford that." execute if data storage guikit:btn cur.poor run data modify storage guikit:in msg set from storage guikit:btn cur.poor data modify storage guikit:in color set value "red" diff --git a/packs/guikit-datapack/data/guikit/function/internal/btn_url.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/btn/url.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/btn_url.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/btn/url.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/btn_visual.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/btn/visual.mcfunction similarity index 94% rename from packs/guikit-datapack/data/guikit/function/internal/btn_visual.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/btn/visual.mcfunction index 45378f1a..521be381 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/btn_visual.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/btn/visual.mcfunction @@ -3,7 +3,7 @@ data remove storage guikit:btn cur $data modify storage guikit:btn cur set from storage guikit:btn defs."$(id)" execute unless data storage guikit:btn cur.cond unless data storage guikit:btn cur.cost run return 0 -function guikit:internal/btn_gate +function guikit:internal/btn/gate execute if score #cond guikit.tmp matches 1 run return 0 data modify storage guikit:w item set value "minecraft:barrier" execute if data storage guikit:btn cur.locked_item run data modify storage guikit:w item set from storage guikit:btn cur.locked_item diff --git a/packs/guikit-datapack/data/guikit/function/internal/clear_cond.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/clear/cond.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/clear_cond.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/clear/cond.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/clear_in.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/clear/in.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/clear_in.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/clear/in.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/clear_mtr.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/clear/mtr.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/clear_mtr.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/clear/mtr.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/cleanup_player.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/clear/player.mcfunction similarity index 76% rename from packs/guikit-datapack/data/guikit/function/internal/cleanup_player.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/clear/player.mcfunction index 86b85ae3..88f463cc 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/cleanup_player.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/clear/player.mcfunction @@ -4,7 +4,7 @@ # guikit:in is deliberately NOT cleared here: api/open calls api/close in the middle of its own # run (to close a previous menu) and still needs guikit:in {menu,page,timer} afterwards. # The caller owns guikit:in (see internal/clear_in, called before every `data merge storage guikit:in`). -function guikit:internal/clear_w -function guikit:internal/clear_cond -function guikit:internal/clear_tmp -function guikit:internal/clear_mtr +function guikit:internal/clear/w +function guikit:internal/clear/cond +function guikit:internal/clear/tmp +function guikit:internal/clear/mtr diff --git a/packs/guikit-datapack/data/guikit/function/internal/cleanup_scores.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/clear/scores.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/cleanup_scores.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/clear/scores.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/clear_tmp.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/clear/tmp.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/clear_tmp.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/clear/tmp.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/clear_w.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/clear/w.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/clear_w.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/clear/w.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/cd_notify.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/cooldown/notify.mcfunction similarity index 96% rename from packs/guikit-datapack/data/guikit/function/internal/cd_notify.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/cooldown/notify.mcfunction index c58b6bfc..e62fd796 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/cd_notify.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/cooldown/notify.mcfunction @@ -2,7 +2,7 @@ # Tells the player how long the cooldown still runs. Call it when widget/cooldown_start # returned 0 (before this, a refused click gave the player no feedback at all). # -# execute unless function guikit:widget/cooldown_start run function guikit:internal/cd_notify +# execute unless function guikit:widget/cooldown_start run function guikit:internal/cooldown/notify # # Do NOT call cooldown_start first and then test `guikit.cd matches 1..`: on success it has just # SET the cooldown, so that test is true then too and the player would be told to wait after a diff --git a/packs/guikit-datapack/data/guikit/function/internal/cd_set.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/cooldown/set.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/cd_set.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/cooldown/set.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/dispose_cart.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/dispose_cart.mcfunction deleted file mode 100644 index f09b482e..00000000 --- a/packs/guikit-datapack/data/guikit/function/internal/dispose_cart.mcfunction +++ /dev/null @@ -1,29 +0,0 @@ -# guikit :: dispose_cart as cart - empty first so kill does not drop GUI items -item replace entity @s container.0 with minecraft:air -item replace entity @s container.1 with minecraft:air -item replace entity @s container.2 with minecraft:air -item replace entity @s container.3 with minecraft:air -item replace entity @s container.4 with minecraft:air -item replace entity @s container.5 with minecraft:air -item replace entity @s container.6 with minecraft:air -item replace entity @s container.7 with minecraft:air -item replace entity @s container.8 with minecraft:air -item replace entity @s container.9 with minecraft:air -item replace entity @s container.10 with minecraft:air -item replace entity @s container.11 with minecraft:air -item replace entity @s container.12 with minecraft:air -item replace entity @s container.13 with minecraft:air -item replace entity @s container.14 with minecraft:air -item replace entity @s container.15 with minecraft:air -item replace entity @s container.16 with minecraft:air -item replace entity @s container.17 with minecraft:air -item replace entity @s container.18 with minecraft:air -item replace entity @s container.19 with minecraft:air -item replace entity @s container.20 with minecraft:air -item replace entity @s container.21 with minecraft:air -item replace entity @s container.22 with minecraft:air -item replace entity @s container.23 with minecraft:air -item replace entity @s container.24 with minecraft:air -item replace entity @s container.25 with minecraft:air -item replace entity @s container.26 with minecraft:air -kill @s diff --git a/packs/guikit-datapack/data/guikit/function/internal/meter_hit.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/meter/hit.mcfunction similarity index 93% rename from packs/guikit-datapack/data/guikit/function/internal/meter_hit.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/meter/hit.mcfunction index b32913be..220273b8 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/meter_hit.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/meter/hit.mcfunction @@ -1,5 +1,5 @@ -# guikit :: internal/meter_hit -# macro: $(id) $(c) $(obj) $(max) as player (called by internal/meter_probe_loop) +# guikit :: internal/meter/hit +# macro: $(id) $(c) $(obj) $(max) as player (called by internal/meter/probe_loop) # Non-destructive presence test for cell $(c) of meter $(id) (same trick as widget/probe). On a # hit, sets $(obj) to the cell's scaled value using score #mw guikit.tmp (width, set by # widget/meter_probe) and marks the menu dirty for redraw. diff --git a/packs/guikit-datapack/data/guikit/function/internal/meter_loop.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/meter/loop.mcfunction similarity index 82% rename from packs/guikit-datapack/data/guikit/function/internal/meter_loop.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/meter/loop.mcfunction index 3995e188..7483992b 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/meter_loop.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/meter/loop.mcfunction @@ -1,4 +1,4 @@ -# guikit :: internal/meter_loop (recursive -- like internal/progress_loop, but draws +# guikit :: internal/meter/loop (recursive -- like internal/progress_loop, but draws # clickable "meter" cells instead of static "progress" ones). Reads score #f/#i/#left guikit.tmp # set by internal/progress_calc, and storage guikit:pg set by widget/meter_draw. execute if score #left guikit.tmp matches ..0 run return 0 @@ -7,7 +7,7 @@ scoreboard players operation #d guikit.tmp -= #i guikit.tmp data modify storage guikit:pg item set from storage guikit:pg empty execute if score #d guikit.tmp matches 1.. run data modify storage guikit:pg item set from storage guikit:pg full execute store result storage guikit:pg cell int 1 run scoreboard players get #i guikit.tmp -function guikit:internal/meter_slot with storage guikit:pg +function guikit:internal/meter/slot with storage guikit:pg scoreboard players add #i guikit.tmp 1 scoreboard players remove #left guikit.tmp 1 -function guikit:internal/meter_loop +function guikit:internal/meter/loop diff --git a/packs/guikit-datapack/data/guikit/function/internal/meter_probe_loop.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/meter/probe_loop.mcfunction similarity index 69% rename from packs/guikit-datapack/data/guikit/function/internal/meter_probe_loop.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/meter/probe_loop.mcfunction index 334863c8..b2cf63be 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/meter_probe_loop.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/meter/probe_loop.mcfunction @@ -1,9 +1,9 @@ -# guikit :: internal/meter_probe_loop (recursive) +# guikit :: internal/meter/probe_loop (recursive) # Reads storage guikit:mtr {id, obj, max} and score #mc/#mw guikit.tmp (current cell / width), -# set by widget/meter_probe. Stops as soon as a cell hits (internal/meter_hit sets #mhit). +# set by widget/meter_probe. Stops as soon as a cell hits (internal/meter/hit sets #mhit). execute if score #mc guikit.tmp >= #mw guikit.tmp run return 0 execute store result storage guikit:mtr c int 1 run scoreboard players get #mc guikit.tmp -function guikit:internal/meter_hit with storage guikit:mtr +function guikit:internal/meter/hit with storage guikit:mtr execute if score #mhit guikit.tmp matches 1 run return 0 scoreboard players add #mc guikit.tmp 1 -function guikit:internal/meter_probe_loop +function guikit:internal/meter/probe_loop diff --git a/packs/guikit-datapack/data/guikit/function/internal/meter_slot.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/meter/slot.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/meter_slot.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/meter/slot.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/open_fail.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/open_fail.mcfunction index ec634641..124df21b 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/open_fail.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/open_fail.mcfunction @@ -3,11 +3,11 @@ # entity type tag #guikit:container (then the cart could never be bound to its owner and would # live forever). Remove it and roll the half-opened state back. execute store result storage guikit:ctx uid int 1 run scoreboard players get @s guikit.uid -function guikit:internal/cont_unbind with storage guikit:ctx +function guikit:internal/summon/unbind with storage guikit:ctx kill @e[tag=guikit.new,distance=..1] scoreboard players reset @s guikit.uid scoreboard players reset @s guikit.slots -function guikit:internal/clear_tmp +function guikit:internal/clear/tmp tellraw @s [{"text":"[guikit] ","color":"gray"},{"text":"could not open the menu: its container entity was not created or is not in #guikit:container","color":"red"}] scoreboard players set #ok guikit.const 0 return 0 diff --git a/packs/guikit-datapack/data/guikit/function/internal/pad/dispose_cart.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/pad/dispose_cart.mcfunction new file mode 100644 index 00000000..752c7ae7 --- /dev/null +++ b/packs/guikit-datapack/data/guikit/function/internal/pad/dispose_cart.mcfunction @@ -0,0 +1,9 @@ +# guikit :: internal/pad/dispose_cart as cart - empty first so kill does not drop GUI items +# Only clears the cart's own slot count (guikit.slots, set at summon time): a hard-coded +# container.0..26 here would run item replace on slots past a hopper_minecart's real 5 +# (or any future non-27-slot container), which fails per slot and littered the log without +# actually stopping the kill that follows. +scoreboard players operation #ds guikit.tmp = @s guikit.slots +execute unless score #ds guikit.tmp matches 1.. run scoreboard players set #ds guikit.tmp 27 +function guikit:internal/pad/dispose_slot +kill @s diff --git a/packs/guikit-datapack/data/guikit/function/internal/pad/dispose_slot.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/pad/dispose_slot.mcfunction new file mode 100644 index 00000000..233dc10c --- /dev/null +++ b/packs/guikit-datapack/data/guikit/function/internal/pad/dispose_slot.mcfunction @@ -0,0 +1,6 @@ +# guikit :: internal/pad/dispose_slot as cart #ds = slots still to clear +# Same recursion shape as internal/pad/step: clears slot #ds-1, then recurses to 0. +scoreboard players remove #ds guikit.tmp 1 +execute store result storage guikit:ctx i int 1 run scoreboard players get #ds guikit.tmp +function guikit:internal/pad/dispose_slot_do with storage guikit:ctx +execute if score #ds guikit.tmp matches 1.. run function guikit:internal/pad/dispose_slot diff --git a/packs/guikit-datapack/data/guikit/function/internal/pad/dispose_slot_do.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/pad/dispose_slot_do.mcfunction new file mode 100644 index 00000000..2f4a1878 --- /dev/null +++ b/packs/guikit-datapack/data/guikit/function/internal/pad/dispose_slot_do.mcfunction @@ -0,0 +1 @@ +# macro: $(i) as cart$item replace entity @s container.$(i) with minecraft:air diff --git a/packs/guikit-datapack/data/guikit/function/internal/pad_load.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/pad/load.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/pad_load.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/pad/load.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/pad_slot.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/pad/slot.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/pad_slot.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/pad/slot.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/pad_step.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/pad/step.mcfunction similarity index 67% rename from packs/guikit-datapack/data/guikit/function/internal/pad_step.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/pad/step.mcfunction index 703d8317..25f7ce41 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/pad_step.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/pad/step.mcfunction @@ -1,6 +1,6 @@ -# guikit :: internal/pad_step as cart #pi = slots still to fill; storage guikit:ctx pad +# guikit :: internal/pad/step as cart #pi = slots still to fill; storage guikit:ctx pad # Fills slot #pi-1, then recurses until slot 0 is done. scoreboard players remove #pi guikit.tmp 1 execute store result storage guikit:ctx i int 1 run scoreboard players get #pi guikit.tmp -function guikit:internal/pad_slot with storage guikit:ctx -execute if score #pi guikit.tmp matches 1.. run function guikit:internal/pad_step +function guikit:internal/pad/slot with storage guikit:ctx +execute if score #pi guikit.tmp matches 1.. run function guikit:internal/pad/step diff --git a/packs/guikit-datapack/data/guikit/function/internal/progress_calc.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/progress/calc.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/progress_calc.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/progress/calc.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/progress_loop.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/progress/loop.mcfunction similarity index 86% rename from packs/guikit-datapack/data/guikit/function/internal/progress_loop.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/progress/loop.mcfunction index e555f4cf..dc6b9d86 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/progress_loop.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/progress/loop.mcfunction @@ -7,7 +7,7 @@ data modify storage guikit:pg item set from storage guikit:pg empty execute if score #d guikit.tmp matches 1.. run data modify storage guikit:pg item set from storage guikit:pg full # slot = base + i execute store result storage guikit:pg cell int 1 run scoreboard players get #i guikit.tmp -function guikit:internal/progress_slot with storage guikit:pg +function guikit:internal/progress/slot with storage guikit:pg scoreboard players add #i guikit.tmp 1 scoreboard players remove #left guikit.tmp 1 -function guikit:internal/progress_loop +function guikit:internal/progress/loop diff --git a/packs/guikit-datapack/data/guikit/function/internal/progress_slot.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/progress/slot.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/progress_slot.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/progress/slot.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/cont_bind.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/summon/bind.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/cont_bind.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/summon/bind.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/containers_builtin.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/summon/builtin.mcfunction similarity index 98% rename from packs/guikit-datapack/data/guikit/function/internal/containers_builtin.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/summon/builtin.mcfunction index ebf90ee4..3799a225 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/containers_builtin.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/summon/builtin.mcfunction @@ -1,4 +1,4 @@ -# guikit :: internal/containers_builtin (called from core/load BEFORE #guikit:register) +# guikit :: internal/summon/builtin (called from core/load BEFORE #guikit:register) # Built-in entries of the container registry, storage guikit:reg containers.: # entity vanilla entity id WITHOUT namespace; it must be in the entity type tag #guikit:container # slots inventory size (27 chest_minecart/chest_boat, 5 hopper_minecart, 15 donkey/mule) default 27 diff --git a/packs/guikit-datapack/data/guikit/function/internal/summon_legacy.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/summon/legacy.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/summon_legacy.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/summon/legacy.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/summon.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/summon/main.mcfunction similarity index 87% rename from packs/guikit-datapack/data/guikit/function/internal/summon.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/summon/main.mcfunction index 26def984..b76a92db 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/summon.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/summon/main.mcfunction @@ -6,21 +6,21 @@ execute unless data storage guikit:ctx ctype run data modify storage guikit:ctx # 2. resolve its definition: registry entry (guikit:reg containers., see containers_builtin), # otherwise the name is taken as a raw entity id like before (27 slots, gray pad) data remove storage guikit:ctx cdef -function guikit:internal/summon_resolve with storage guikit:ctx -execute unless data storage guikit:ctx cdef run function guikit:internal/summon_legacy with storage guikit:ctx +function guikit:internal/summon/resolve with storage guikit:ctx +execute unless data storage guikit:ctx cdef run function guikit:internal/summon/legacy with storage guikit:ctx execute unless data storage guikit:ctx cdef.entity run data modify storage guikit:ctx cdef.entity set from storage guikit:ctx ctype execute unless data storage guikit:ctx cdef.slots run data modify storage guikit:ctx cdef.slots set value 27 execute unless data storage guikit:ctx cdef.pad run data modify storage guikit:ctx cdef.pad set value "minecraft:gray_stained_glass_pane" # 3. summon (a title becomes the CustomName) -execute if data storage guikit:ctx cdef.title run function guikit:internal/summon_titled with storage guikit:ctx cdef -execute unless data storage guikit:ctx cdef.title run function guikit:internal/summon_type with storage guikit:ctx cdef +execute if data storage guikit:ctx cdef.title run function guikit:internal/summon/titled with storage guikit:ctx cdef +execute unless data storage guikit:ctx cdef.title run function guikit:internal/summon/type with storage guikit:ctx cdef # 4. slot count on cart and owner; the definition is kept per owner uid for widget/pad execute store result score @s guikit.slots run data get storage guikit:ctx cdef.slots scoreboard players operation @e[type=#guikit:container,tag=guikit.new,distance=..1,limit=1] guikit.slots = @s guikit.slots execute store result storage guikit:ctx uid int 1 run scoreboard players get @s guikit.uid -function guikit:internal/cont_bind with storage guikit:ctx +function guikit:internal/summon/bind with storage guikit:ctx # a cart that looks different from the plain 27-slot gray one takes the registry-driven pad path execute unless data storage guikit:ctx cdef{slots:27,pad:"minecraft:gray_stained_glass_pane"} run tag @e[type=#guikit:container,tag=guikit.new,distance=..1,limit=1] add guikit.styled diff --git a/packs/guikit-datapack/data/guikit/function/internal/summon_resolve.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/summon/resolve.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/summon_resolve.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/summon/resolve.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/summon_titled.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/summon/titled.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/summon_titled.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/summon/titled.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/summon_type.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/summon/type.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/summon_type.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/summon/type.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/cont_unbind.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/summon/unbind.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/cont_unbind.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/summon/unbind.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/sweep/foreign_cart.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/sweep/foreign_cart.mcfunction new file mode 100644 index 00000000..f8bf1c45 --- /dev/null +++ b/packs/guikit-datapack/data/guikit/function/internal/sweep/foreign_cart.mcfunction @@ -0,0 +1,29 @@ +# guikit :: internal/sweep/foreign_cart as cart +# Widget olmayan (custom_data guikit.w:1b tasimayan) her slotu bosalt. +execute unless items entity @s container.0 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.0 with air +execute unless items entity @s container.1 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.1 with air +execute unless items entity @s container.2 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.2 with air +execute unless items entity @s container.3 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.3 with air +execute unless items entity @s container.4 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.4 with air +execute unless items entity @s container.5 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.5 with air +execute unless items entity @s container.6 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.6 with air +execute unless items entity @s container.7 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.7 with air +execute unless items entity @s container.8 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.8 with air +execute unless items entity @s container.9 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.9 with air +execute unless items entity @s container.10 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.10 with air +execute unless items entity @s container.11 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.11 with air +execute unless items entity @s container.12 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.12 with air +execute unless items entity @s container.13 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.13 with air +execute unless items entity @s container.14 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.14 with air +execute unless items entity @s container.15 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.15 with air +execute unless items entity @s container.16 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.16 with air +execute unless items entity @s container.17 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.17 with air +execute unless items entity @s container.18 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.18 with air +execute unless items entity @s container.19 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.19 with air +execute unless items entity @s container.20 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.20 with air +execute unless items entity @s container.21 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.21 with air +execute unless items entity @s container.22 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.22 with air +execute unless items entity @s container.23 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.23 with air +execute unless items entity @s container.24 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.24 with air +execute unless items entity @s container.25 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.25 with air +execute unless items entity @s container.26 *[custom_data~{guikit:{w:1b}}] run item replace entity @s container.26 with air diff --git a/packs/guikit-datapack/data/guikit/function/internal/sweep_keep.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/sweep/keep.mcfunction similarity index 100% rename from packs/guikit-datapack/data/guikit/function/internal/sweep_keep.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/sweep/keep.mcfunction diff --git a/packs/guikit-datapack/data/guikit/function/internal/sweep_orphans.mcfunction b/packs/guikit-datapack/data/guikit/function/internal/sweep/orphans.mcfunction similarity index 86% rename from packs/guikit-datapack/data/guikit/function/internal/sweep_orphans.mcfunction rename to packs/guikit-datapack/data/guikit/function/internal/sweep/orphans.mcfunction index a2d59bd9..2c02c989 100644 --- a/packs/guikit-datapack/data/guikit/function/internal/sweep_orphans.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/internal/sweep/orphans.mcfunction @@ -2,5 +2,5 @@ # A cart whose owner logged off / died / lost its uid would live forever. Mark every cart, # unmark the ones that still have an owner with the same uid, dispose the rest. tag @e[type=#guikit:container,tag=guikit.cart] add guikit.orphan -execute as @a[scores={guikit.uid=1..}] run function guikit:internal/sweep_keep -execute as @e[type=#guikit:container,tag=guikit.cart,tag=guikit.orphan] run function guikit:internal/dispose_cart +execute as @a[scores={guikit.uid=1..}] run function guikit:internal/sweep/keep +execute as @e[type=#guikit:container,tag=guikit.cart,tag=guikit.orphan] run function guikit:internal/pad/dispose_cart diff --git a/packs/guikit-datapack/data/guikit/function/widget/button.mcfunction b/packs/guikit-datapack/data/guikit/function/widget/button.mcfunction index f8b485d9..fb178972 100644 --- a/packs/guikit-datapack/data/guikit/function/widget/button.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/widget/button.mcfunction @@ -7,5 +7,5 @@ # If the definition has a `cond` and it fails right now, the item is swapped for `locked_item` # (default minecraft:barrier). The click handler re-checks the condition, so the look is cosmetic only. data modify storage guikit:w type set value "button" -function guikit:internal/btn_visual with storage guikit:w +function guikit:internal/btn/visual with storage guikit:w function guikit:widget/draw diff --git a/packs/guikit-datapack/data/guikit/function/widget/button_probe.mcfunction b/packs/guikit-datapack/data/guikit/function/widget/button_probe.mcfunction index b53d3dd8..6fb9b52a 100644 --- a/packs/guikit-datapack/data/guikit/function/widget/button_probe.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/widget/button_probe.mcfunction @@ -4,4 +4,4 @@ # function guikit:widget/button_probe with storage guikit:p # Same presence test as widget/probe, then runs the definition registered under that id. $execute store result score #hit guikit.tmp run clear @s *[custom_data~{guikit:{w:1b,id:"$(id)"}}] 0 -$execute if score #hit guikit.tmp matches 1.. run function guikit:internal/btn_click {id:"$(id)"} +$execute if score #hit guikit.tmp matches 1.. run function guikit:internal/btn/click {id:"$(id)"} diff --git a/packs/guikit-datapack/data/guikit/function/widget/cooldown_start.mcfunction b/packs/guikit-datapack/data/guikit/function/widget/cooldown_start.mcfunction index c1280ffd..de9a18b8 100644 --- a/packs/guikit-datapack/data/guikit/function/widget/cooldown_start.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/widget/cooldown_start.mcfunction @@ -1,5 +1,5 @@ # guikit :: widget/cooldown_start as player storage guikit:in {ticks:N} # Sets guikit.cd if free. Result: 1 = allowed (cooldown now running), 0 = still cooling down. execute if score @s guikit.cd matches 1.. run return 0 -function guikit:internal/cd_set with storage guikit:in +function guikit:internal/cooldown/set with storage guikit:in return 1 diff --git a/packs/guikit-datapack/data/guikit/function/widget/meter_draw.mcfunction b/packs/guikit-datapack/data/guikit/function/widget/meter_draw.mcfunction index 31398c92..365504da 100644 --- a/packs/guikit-datapack/data/guikit/function/widget/meter_draw.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/widget/meter_draw.mcfunction @@ -10,14 +10,14 @@ # Draws `width` clickable cells starting at `slot`, filled up to the live `obj` score (same # scaling as widget/progress: filled = obj * width / max). Cell i's clickable id is "_i" -- # click it with widget/meter_probe (ONE registration per meter, not per cell). -function guikit:internal/clear_mtr +function guikit:internal/clear/mtr $data modify storage guikit:mtr cur set from storage guikit:mtr defs."$(id)" execute unless data storage guikit:mtr cur run return 0 data modify storage guikit:mtr obj set from storage guikit:mtr cur.obj data modify storage guikit:mtr max set from storage guikit:mtr cur.max data modify storage guikit:mtr width set from storage guikit:mtr cur.width -function guikit:internal/progress_calc with storage guikit:mtr +function guikit:internal/progress/calc with storage guikit:mtr data modify storage guikit:pg cur set value 0 data modify storage guikit:pg slot set from storage guikit:w slot @@ -26,4 +26,4 @@ data modify storage guikit:pg full set from storage guikit:mtr cur.full data modify storage guikit:pg empty set from storage guikit:mtr cur.empty data modify storage guikit:pg id set from storage guikit:w id data modify storage guikit:pg name set from storage guikit:mtr cur.name -function guikit:internal/meter_loop +function guikit:internal/meter/loop diff --git a/packs/guikit-datapack/data/guikit/function/widget/meter_probe.mcfunction b/packs/guikit-datapack/data/guikit/function/widget/meter_probe.mcfunction index 72c84fb3..e763fe82 100644 --- a/packs/guikit-datapack/data/guikit/function/widget/meter_probe.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/widget/meter_probe.mcfunction @@ -5,7 +5,7 @@ # # Tests each of the meter's `width` cells in turn; on a hit, sets the def's `obj` to the clicked # cell's scaled value (cell 0..width-1 -> (cell+1)*max/width, floor) and marks the redraw dirty. -function guikit:internal/clear_mtr +function guikit:internal/clear/mtr $data modify storage guikit:mtr cur set from storage guikit:mtr defs."$(id)" execute unless data storage guikit:mtr cur run return 0 data modify storage guikit:mtr obj set from storage guikit:mtr cur.obj @@ -13,4 +13,4 @@ data modify storage guikit:mtr max set from storage guikit:mtr cur.max execute store result score #mw guikit.tmp run data get storage guikit:mtr cur.width data modify storage guikit:mtr id set from storage guikit:p id scoreboard players set #mc guikit.tmp 0 -function guikit:internal/meter_probe_loop +function guikit:internal/meter/probe_loop diff --git a/packs/guikit-datapack/data/guikit/function/widget/pad_cart_dyn.mcfunction b/packs/guikit-datapack/data/guikit/function/widget/pad_cart_dyn.mcfunction index 770665f8..56ac35ef 100644 --- a/packs/guikit-datapack/data/guikit/function/widget/pad_cart_dyn.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/widget/pad_cart_dyn.mcfunction @@ -2,10 +2,10 @@ # Pad item and slot count come from the definition kept by owner uid (internal/cont_bind). execute store result storage guikit:ctx uid int 1 run scoreboard players get @s guikit.uid data remove storage guikit:ctx pad -function guikit:internal/pad_load with storage guikit:ctx +function guikit:internal/pad/load with storage guikit:ctx execute unless data storage guikit:ctx pad run return 0 scoreboard players operation #pi guikit.tmp = @s guikit.slots -function guikit:internal/pad_step +function guikit:internal/pad/step data remove storage guikit:ctx pad data remove storage guikit:ctx uid data remove storage guikit:ctx i diff --git a/packs/guikit-datapack/data/guikit/function/widget/progress.mcfunction b/packs/guikit-datapack/data/guikit/function/widget/progress.mcfunction index 9952641e..2f206da0 100644 --- a/packs/guikit-datapack/data/guikit/function/widget/progress.mcfunction +++ b/packs/guikit-datapack/data/guikit/function/widget/progress.mcfunction @@ -2,7 +2,7 @@ # storage guikit:w = {obj:"score", slot:9, width:5, max:10, full:"minecraft:lime_stained_glass_pane", # empty:"minecraft:gray_stained_glass_pane", id:"bar1", name:{text:" "}} # Draws `width` cells starting at `slot`. Cell i (0-based) is full when i < filled. -function guikit:internal/progress_calc with storage guikit:w +function guikit:internal/progress/calc with storage guikit:w # working copy data modify storage guikit:pg cur set value 0 data modify storage guikit:pg slot set from storage guikit:w slot @@ -11,4 +11,4 @@ data modify storage guikit:pg full set from storage guikit:w full data modify storage guikit:pg empty set from storage guikit:w empty data modify storage guikit:pg id set from storage guikit:w id data modify storage guikit:pg name set from storage guikit:w name -function guikit:internal/progress_loop +function guikit:internal/progress/loop