From 731c7726f29be883a4e4892d96db94e0eca9c83e Mon Sep 17 00:00:00 2001 From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com> Date: Thu, 24 Jul 2025 19:59:51 +0800 Subject: [PATCH 01/14] HexDebug IoticBlocks create --- .../1.19/assets/hexdebug/hexdebug/README.md | 1 + .../hexdebug/lang/en_us.flatten.json5 | 163 ++++++++++++++ .../hexdebug/lang/zh_cn.flatten.json5 | 163 ++++++++++++++ .../assets/hexdebug/hexdebug/README.md | 1 + .../hexdebug/lang/en_us.flatten.json5 | 200 ++++++++++++++++++ .../hexdebug/hexdebug/packer-policy.json | 7 + .../assets/ioticblocks/ioticblocks/README.md | 16 ++ .../ioticblocks/lang/en_us.flatten.json5 | 58 +++++ .../ioticblocks/packer-policy.json | 7 + .../1.20/assets/hexdebug/hexdebug/README.md | 19 ++ .../hexdebug/lang/en_us.flatten.json5 | 200 ++++++++++++++++++ .../hexdebug/lang/zh_cn.flatten.json5 | 200 ++++++++++++++++++ .../assets/ioticblocks/ioticblocks/README.md | 16 ++ .../ioticblocks/lang/en_us.flatten.json5 | 58 +++++ .../ioticblocks/lang/zh_cn.flatten.json5 | 58 +++++ 15 files changed, 1167 insertions(+) create mode 100644 projects/1.19/assets/hexdebug/hexdebug/README.md create mode 100644 projects/1.19/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 create mode 100644 projects/1.19/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 create mode 100644 projects/1.20-fabric/assets/hexdebug/hexdebug/README.md create mode 100644 projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 create mode 100644 projects/1.20-fabric/assets/hexdebug/hexdebug/packer-policy.json create mode 100644 projects/1.20-fabric/assets/ioticblocks/ioticblocks/README.md create mode 100644 projects/1.20-fabric/assets/ioticblocks/ioticblocks/lang/en_us.flatten.json5 create mode 100644 projects/1.20-fabric/assets/ioticblocks/ioticblocks/packer-policy.json create mode 100644 projects/1.20/assets/hexdebug/hexdebug/README.md create mode 100644 projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 create mode 100644 projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 create mode 100644 projects/1.20/assets/ioticblocks/ioticblocks/README.md create mode 100644 projects/1.20/assets/ioticblocks/ioticblocks/lang/en_us.flatten.json5 create mode 100644 projects/1.20/assets/ioticblocks/ioticblocks/lang/zh_cn.flatten.json5 diff --git a/projects/1.19/assets/hexdebug/hexdebug/README.md b/projects/1.19/assets/hexdebug/hexdebug/README.md new file mode 100644 index 000000000000..0f65c73524f7 --- /dev/null +++ b/projects/1.19/assets/hexdebug/hexdebug/README.md @@ -0,0 +1 @@ +[见主文档](/projects/1.20/assets/hexdebug/hexdebug) \ No newline at end of file diff --git a/projects/1.19/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 b/projects/1.19/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 new file mode 100644 index 000000000000..6b7ae732a41a --- /dev/null +++ b/projects/1.19/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 @@ -0,0 +1,163 @@ +{ + "item.hexdebug": { + debugger: "Debugger", + evaluator: "Evaluator", + }, + + "block.hexdebug": { + splicing_table: "Splicing Table", + focus_holder: "Focus Holder", + }, + + "itemGroup.hexdebug": "HexDebug", + + text: { + hexdebug: { + connected: "Debug client connected!", + no_session: "Debug session is not running.", + thwack: "Thwack!", + // Next Iota: [{index}] {iota} + debugger_stopped: "Next Iota: [%d] %s", + + splicing_table: { + button: { + view_left: "Move View Left", + view_right: "Move View Right", + select_none: "Select None", + select_all: "Select All", + clear_grid: "Clear Grid", + nudge_left: "Nudge Left", + nudge_right: "Nudge Right", + duplicate: "Duplicate", + delete: "Delete", + undo: "Undo", + redo: "Redo", + cut: "Cut", + copy: "Copy", + paste: "Paste (Verbatim)", + paste_splat: "Paste (Flattened)", + export: "Export as .hexpattern", + }, + tooltip: { + index: "Index: %d", + signature: "Signature: %s", + length: "Length: %d", + }, + }, + }, + + "autoconfig.hexdebug": { + title: "HexDebug Config", + category: { + client: "Client", + server: "Server", + }, + option: { + client: { + openDebugPort: { + "": "Open Debug Port", + "@Tooltip": "Whether or not a port should be opened. If false, the Debugger effectively becomes useless.", + }, + debugPort: { + "": "Debug Port", + "@Tooltip": "Port number (1024-65535) to open for the debug client (eg. VSCode) to connect to.", + }, + smartDebuggerSneakScroll: { + "": "Smart Debugger Sneak-Scroll", + "@Tooltip": "If a hex is not currently being debugged and a Debugger is in your main hand, prefer shift-scrolling whatever item is in your offhand (eg. a spellbook).", + }, + debuggerDisplayMode: { + "": "Debugger Display Mode", + "@Tooltip": "\ + Changes when the Debugger should print the next iota to be evaluated.\n\ + DISABLED: Never show Debugger status messages.\n\ + NOT_CONNECTED: Only show Debugger status messages if a debug client is not connected.\n\ + ENABLED: Always show Debugger status messages. (default)", + }, + showDebugClientLineNumber: { + "": "Show Debug Client Line Number", + "@Tooltip": "If true, show the line number (usually 1-indexed) from the debug client (eg. VSCode) in Debugger status messages; otherwise, show the list index (0-indexed)." + } + }, + server: { + maxUndoStackSize: { + "": "Undo History Size Limit", + "@Tooltip": "Maximum allowed size of the Splicing Table's undo history. To disable the limit, set the value to 0.", + } + } + }, + }, + }, + + "hexcasting.action": { + "hexdebug:": { + "const/debugging": "Debugger's Reflection", + "next_eval_index": "Debug Locator's Reflection", // TODO: this name kinda sucks tbh + "breakpoint/": { + before: "Set Breakpoint Before", + after: "Set Breakpoint After" + }, + "craft/debugger": "Craft Debugger", + }, + "book.hexdebug:": { + "next_eval_index": "Debug Locator's Rfln.", + }, + }, + + hexdebug: { + tooltip: { + debugger: { + step_mode: { + "": "Mode: %s", + continue: "Continue", + over: "Step Over", + in: "Step In", + out: "Step Out", + restart: "Restart", + stop: "Stop" + }, + }, + focus_holder: { + item: "Item: %s", + }, + }, + + category: { + items: { + entry: { + debugging: { + "": "Debugging Items", + page: { + debugger: "I have read vague descriptions of a strange object used by the ancients to help discover issues in complex _Hexes. I believe I have managed to reproduce this item; I call it the $(l:items/debugging#debugger)$(item)Debugger/$.$(br2)\ + It seems to work in a similar way to $(l:items/hexcasting)$(item)Artifacts/$. However, I can also use it to cast a _Hex right from an item (like a $(l:items/focus)$(item)Focus/$) in my off-hand.$(br2)\ + Unfortunately, the $(l:items/debugging#debugger)$(item)Debugger/$ is not very useful on its own; it seems to require the use of some sort of $(l:https://marketplace.visualstudio.com/items?itemName=object-Object.hex-casting)external tool/$.", + thwack: "$(italic)Thwack!/$", + evaluator: "Complementing the $(l:items/debugging#debugger)$(item)Debugger/$, I've also created a new type of staff: the $(l:items/debugging#evaluator)$(item)Evaluator/$.$(br2)\ + While debugging a _Hex, patterns drawn with this staff will be cast using the current stack and $(l:patterns/readwrite#hexcasting:local)$(thing)ravenmind/$ of the $(l:items/debugging#debugger)$(item)Debugger/$.$(br2)\ + Clearing the grid seems to reset the $(l:items/debugging#debugger)$(item)Debugger/$ to just before the first pattern was drawn with the $(l:items/debugging#evaluator)$(item)Evaluator/$. It will not, of course, undo any effects performed by spells on the world.", + thwonk: "$(italic)Thwonk!/$" + }, + }, + }, + }, + + patterns: { + entry: { + debugging: { + "": "Debugging", + page: { + "const/debugging": "Adds $(thing)True/$ to the top of the stack if executed by a $(l:items/debugging#debugger)$(item)Debugger/$ or $(l:items/debugging#evaluator)$(item)Evaluator/$, or $(thing)False/$ otherwise.", + "next_eval_index": "Adds the index of the next iota to be evaluated if executed by a $(l:items/debugging#debugger)$(item)Debugger/$ or $(l:items/debugging#evaluator)$(item)Evaluator/$, or $(l:casting/influences)$(thing)Null/$ otherwise.", + "breakpoint/": { + before: "Pauses the $(l:items/debugging#debugger)$(item)Debugger/$ before executing this pattern.", + after: "Pauses the $(l:items/debugging#debugger)$(item)Debugger/$ after executing this pattern (ie. before executing the next pattern).", + }, + "craft/debugger": "Creates a $(l:items/debugging#debugger)$(item)Debugger/$ that casts a _Hex, similar to $(l:patterns/spells/hexcasting)certain other patterns/$ I've used in the past.$(br2)\ + Costs about ten $(l:items/amethyst)$(item)Charged Amethyst/$.", + }, + }, + }, + }, + }, + }, +} diff --git a/projects/1.19/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 b/projects/1.19/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 new file mode 100644 index 000000000000..2de5ec27305d --- /dev/null +++ b/projects/1.19/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 @@ -0,0 +1,163 @@ +{ + "item.hexdebug": { + debugger: "调试杖", + evaluator: "运行杖", + }, + + "block.hexdebug": { + splicing_table: "剪接台", + focus_holder: "核心装载器", + }, + + "itemGroup.hexdebug": "咒法调试", + + text: { + hexdebug: { + connected: "调试客户端已连接!", + no_session: "调试会话未在运行。", + thwack: "哐当!", + // Next Iota: [{index}] {iota} + debugger_stopped: "下一个Iota:[%d] %s", + + splicing_table: { + button: { + view_left: "向左移动视野", + view_right: "向右移动视野", + select_none: "取消选区", + select_all: "全选", + clear_grid: "清空网格", + nudge_left: "左移", + nudge_right: "右移", + duplicate: "重复", + delete: "删除", + undo: "撤销", + redo: "重做", + cut: "剪切", + copy: "复制", + paste: "粘贴(逐项)", + paste_splat: "粘贴(扁平化)", + export: "导出为.hexpattern文件", + }, + tooltip: { + index: "索引下标:%d", + signature: "图案编码:%s", + length: "长度:%d", + }, + }, + }, + + "autoconfig.hexdebug": { + title: "咒法调试配置", + category: { + client: "Client", + server: "Server", + }, + option: { + client: { + openDebugPort: { + "": "开放调试端口", + "@Tooltip": "是否开放端口。若设为false,调试杖会失去作用。", + }, + debugPort: { + "": "调试端口", + "@Tooltip": "开放以连接至调试客户端(如VSCode)的端口号(1024-65535)。", + }, + smartDebuggerSneakScroll: { + "": "调试杖智能潜行滚轮", + "@Tooltip": "若当前主手持有调试杖,且未在调试咒术,则优先处理副手中法术书一类物品的“潜行滚动滚轮”操作。", + }, + debuggerDisplayMode: { + "": "调试杖显示模式", + "@Tooltip": "\ + 更改调试杖打印下一需运行iota的时机。\n\ + DISABLED:不显示调试杖状态消息。\n\ + NOT_CONNECTED:只在调试客户端未连接时显示调试杖状态消息。\n\ + ENABLED:一直显示调试杖状态信息。(默认)", + }, + showDebugClientLineNumber: { + "": "显示调试客户端行号", + "@Tooltip": "若设为true,显示调试客户端(如VSCode)的行号,通常以1起始;否则显示列表索引下标,以0起始。" + } + }, + server: { + maxUndoStackSize: { + "": "撤销历史步数上限", + "@Tooltip": "剪接台撤销历史的长度上限。设为0可禁用上限。", + } + } + }, + }, + }, + + "hexcasting.action": { + "hexdebug:": { + "const/debugging": "调试杖之精思", + "next_eval_index": "调试位之精思", // TODO: this name kinda sucks tbh + "breakpoint/": { + before: "在前方添加断点", + after: "在后方添加断点" + }, + "craft/debugger": "制作调试杖", + }, + "book.hexdebug:": { + "next_eval_index": "调试位之精思", + }, + }, + + hexdebug: { + tooltip: { + debugger: { + step_mode: { + "": "模式:%s", + continue: "继续", + over: "逐过程", + in: "单步调试", + out: "单步跳出", + restart: "重启", + stop: "停止" + }, + }, + focus_holder: { + item: "物品:%s", + }, + }, + + category: { + items: { + entry: { + debugging: { + "": "调试物品", + page: { + debugger: "部分文献中有些不太明确的描述,称古代人会使用一件奇怪的物品协助他们发现复杂$(hex)咒术/$中的问题。我应已成功复刻出了它,定名为$(item)调试杖/$。$(br2)\ + 它的工作方式与$(l:items/hexcasting)$(item)造物/$类似。不过,它还能从副手中的物品(比如$(l:items/focus)$(item)核心/$)里直接施放$(hex)咒术/$。$(br2)\ + 有些可惜的是,$(item)调试杖/$自身没有太大用处;它似乎需要某种$(l:https://marketplace.visualstudio.com/items?itemName=object-Object.hex-casting)外部工具/$才能正常运作。", + thwack: "$(italic)哐当!/$", + evaluator: "我又新制造了一种法杖——$(l:items/debugging#evaluator)$(item)运行杖/$,用以补充$(l:items/debugging#debugger)$(item)调试杖/$的功能。$(br2)\ + 调试$(hex)咒术/$时,此法杖绘制的图案会运行于$(l:items/debugging#debugger)$(item)调试杖/$当前的栈和$(l:patterns/readwrite#hexcasting:local)$(thing)渡鸦之思/$。$(br2)\ + 清空咒术网格后,$(l:items/debugging#debugger)$(item)调试杖/$似乎会回到$(l:items/debugging#evaluator)$(item)运行杖/$绘制首个图案前的状态。当然,这种操作无法撤回已造成实际影响的法术。", + thwonk: "$(italic)哐啷!/$" + }, + }, + }, + }, + + patterns: { + entry: { + debugging: { + "": "调试", + page: { + "const/debugging": "若栈由$(l:items/debugging#debugger)$(item)调试杖/$或$(l:items/debugging#evaluator)$(item)运行杖/$执行,则返回 $(thing)True/$;否则返回 $(thing)False/$。", + "next_eval_index": "若栈由$(l:items/debugging#debugger)$(item)调试杖/$或$(l:items/debugging#evaluator)$(item)运行杖/$执行,则返回下一个待执行 iota 的索引下标;否则返回 $(l:casting/influences)$(thing)Null/$。", + "breakpoint/": { + before: "在运行此图案前,暂停$(l:items/debugging#debugger)$(item)调试杖/$。", + after: "在运行此图案后,也即在运行下一图案之前,暂停$(l:items/debugging#debugger)$(item)调试杖/$。", + }, + "craft/debugger": "制作一支能施放$(hex)咒术/$的$(l:items/debugging#debugger)$(item)调试杖/$。这个图案和我之前用过的$(l:patterns/spells/hexcasting)某些图案/$有些相似。\ + $(br2)消耗大约 10 个$(l:items/amethyst)$(item)充能紫水晶/$。", + }, + }, + }, + }, + }, + }, +} diff --git a/projects/1.20-fabric/assets/hexdebug/hexdebug/README.md b/projects/1.20-fabric/assets/hexdebug/hexdebug/README.md new file mode 100644 index 000000000000..0f65c73524f7 --- /dev/null +++ b/projects/1.20-fabric/assets/hexdebug/hexdebug/README.md @@ -0,0 +1 @@ +[见主文档](/projects/1.20/assets/hexdebug/hexdebug) \ No newline at end of file diff --git a/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 b/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 new file mode 100644 index 000000000000..2f3145da54cb --- /dev/null +++ b/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 @@ -0,0 +1,200 @@ +{ + "item.hexdebug": { + debugger: "Debugger", + evaluator: "Evaluator", + }, + + "block.hexdebug": { + splicing_table: "Splicing Table", + focus_holder: "Focus Holder", + }, + + "itemGroup.hexdebug": "HexDebug", + + text: { + hexdebug: { + connected: "Debug client connected!", + no_session: "Debug session is not running.", + thwack: "Thwack!", + // Next Iota: [{index}] {iota} + debugger_stopped: "Next Iota: [%d] %s", + + splicing_table: { + button: { + view_left: "Move View Left", + view_right: "Move View Right", + select_none: "Select None", + select_all: "Select All", + clear_grid: "Clear Grid", + nudge_left: "Nudge Left", + nudge_right: "Nudge Right", + duplicate: "Duplicate", + delete: "Delete", + undo: "Undo", + redo: "Redo", + cut: "Cut", + copy: "Copy", + paste: "Paste (Verbatim)", + paste_splat: "Paste (Flattened)", + export: "Export as .hexpattern", + }, + tooltip: { + index: "Index: %d", + signature: "Signature: %s", + length: "Length: %d", + }, + }, + }, + + "autoconfig.hexdebug": { + title: "HexDebug Config", + category: { + client: "Client", + server: "Server", + }, + option: { + client: { + openDebugPort: { + "": "Open Debug Port", + "@Tooltip": "Whether or not a port should be opened. If false, the Debugger effectively becomes useless.", + }, + debugPort: { + "": "Debug Port", + "@Tooltip": "Port number (1024-65535) to open for the debug client (eg. VSCode) to connect to.", + }, + smartDebuggerSneakScroll: { + "": "Smart Debugger Sneak-Scroll", + "@Tooltip": "If a hex is not currently being debugged and a Debugger is in your main hand, prefer shift-scrolling whatever item is in your offhand (eg. a spellbook).", + }, + debuggerDisplayMode: { + "": "Debugger Display Mode", + "@Tooltip": "\ + Changes when the Debugger should print the next iota to be evaluated.\n\ + DISABLED: Never show Debugger status messages.\n\ + NOT_CONNECTED: Only show Debugger status messages if a debug client is not connected.\n\ + ENABLED: Always show Debugger status messages. (default)", + }, + showDebugClientLineNumber: { + "": "Show Debug Client Line Number", + "@Tooltip": "If true, show the line number (usually 1-indexed) from the debug client (eg. VSCode) in Debugger status messages; otherwise, show the list index (0-indexed)." + } + }, + server: { + maxUndoStackSize: { + "": "Undo History Size Limit", + "@Tooltip": "Maximum allowed size of the Splicing Table's undo history. To disable the limit, set the value to 0.", + } + } + }, + }, + }, + + "hexcasting.action": { + "hexdebug:": { + "const/debugging": "Debugger's Reflection", + "next_eval_index": "Debug Locator's Reflection", // TODO: this name kinda sucks tbh + "const/cognitohazard": "Cognitohazard Reflection", + "breakpoint/": { + before: "Set Breakpoint Before", + after: "Set Breakpoint After" + }, + "craft/debugger": "Craft Debugger", + }, + "book.hexdebug:": { + "next_eval_index": "Debug Locator's Rfln.", + "const/cognitohazard": "Cognitohazard Rfln." + }, + }, + + hexdebug: { + tooltip: { + debugger: { + step_mode: { + "": "Mode: %s", + continue: "Continue", + over: "Step Over", + in: "Step In", + out: "Step Out", + restart: "Restart", + stop: "Stop" + }, + }, + focus_holder: { + item: "Item: %s", + }, + cognitohazard_iota: "Cognitohazard", + }, + + category: { + items: { + entry: { + debugging: { + "": "Debugging Items", + page: { + debugger: "I have read vague descriptions of a strange object used by the ancients to help discover issues in complex _Hexes. I believe I have managed to reproduce this item; I call it the $(l:items/debugging#debugger)$(item)Debugger/$.$(br2)\ + It seems to work in a similar way to $(l:items/hexcasting)$(item)Artifacts/$. However, I can also use it to cast a _Hex right from an item (like a $(l:items/focus)$(item)Focus/$) in my off-hand.$(br2)\ + Unfortunately, the $(l:items/debugging#debugger)$(item)Debugger/$ is not very useful on its own; to get the most out of it, I will need to $(l:https://github.com/object-Object/HexDebug/wiki/Setting-up-VSCode-with-HexDebug)set up/$ some sort of $(l:https://marketplace.visualstudio.com/items?itemName=object-Object.hex-casting)external tool/$.", + thwack: "$(italic)Thwack!/$$(br2)\ + I can also switch between different \"step modes\" of the $(item)Debugger/$ by sneak-scrolling (like with a $(l:items/spellbook)$(item)Spellbook/$ or $(l:items/abacus)$(item)Abacus/$).", + evaluator: "Complementing the $(l:items/debugging#debugger)$(item)Debugger/$, I've also created a new type of staff: the $(l:items/debugging#evaluator)$(item)Evaluator/$.$(br2)\ + While debugging a _Hex, patterns drawn with this staff will be cast using the current stack and $(l:patterns/readwrite#hexcasting:local)$(thing)ravenmind/$ of the $(l:items/debugging#debugger)$(item)Debugger/$.$(br2)\ + Clearing the grid seems to reset the $(l:items/debugging#debugger)$(item)Debugger/$ to just before the first pattern was drawn with the $(l:items/debugging#evaluator)$(item)Evaluator/$. It will not, of course, undo any effects performed by spells on the world.", + thwonk: "$(italic)Thwonk!/$" + }, + }, + splicing_table: { + "": "Splicing Table", + page: { + "1": "As my _Hexes become more complex, I find myself spending more and more time fixing my own mistakes. Patterns such as $(l:patterns/patterns_as_iotas#hexcasting:undo)$(action)Evanition/$ and $(l:patterns/lists#hexcasting:replace)$(action)Surgeon's Exaltation/$ can suffice for simple substitutions, but I think I can do better.$(br2)\ + The $(l:items/splicing_table)$(item)Splicing Table/$ is my solution to these woes: a full-fledged workstation for viewing and editing _Hexes.", + "2": "To begin, I must place an item containing a list iota (eg. a $(l:items/focus)$(item)Focus/$) in the centre of the table. This reveals the first nine iotas in the list. The small arrows at the ends can be used to move my view of the list; I can also hold $(k:sneak) to move by a full page, or $(k:sprint) to move all the way to the start or end.$(br2)\ + If I wish to share my _Hexes with others, I can use the large button on the right side to copy the contents of the list to my \"clipboard\".", + "3": "I can select iotas (or the space between them) by clicking on them. Holding $(k:sneak) and clicking again allows me to select a range of iotas.$(br2)\ + Additionally, there are dedicated buttons to select the entire list ($(thing)Select All/$) and to clear my selection ($(thing)Select None/$).$(br2)\ + Selecting iotas allows me to unlock the true power of the $(l:items/splicing_table)$(item)Splicing Table/$: editing _Hexes.", + "4": "With $(l:items/splicing_table#cost)sufficient media/$, I can perform the following actions:\ + $(li)$(thing)Nudge Left/$: Move the selected iota(s) one space to the left.\ + $(li)$(thing)Nudge Right/$: Move the selected iota(s) one space to the right.\ + $(li)$(thing)Delete/$: Remove the selected iota(s) from the list.\ + $(li)$(thing)Duplicate/$: Create a copy of the selected iota(s).\ + $(li)$(thing)Undo/$: Revert the last action performed.\ + $(li)$(thing)Redo/$: Re-perform actions previously reverted with $(thing)Undo/$.", + "5": "For more advanced operations, some extra storage is required. I can place an iota-holding item in the slot to the left to unlock the following actions:\ + $(li)$(thing)Copy/$: Write the selected iota(s) to a new list in the secondary item.\ + $(li)$(thing)Cut/$: Same as $(thing)Copy/$, but also delete the selected iota(s).\ + $(li)$(thing)Paste/$: Replace the selected iota(s) with the iota in the secondary item. If the iota is a list, its contents are pasted instead; I can override this by holding $(k:sneak).", + "6": "Finally, I can insert a $(l:items/staff)$(item)Staff/$ into the lower left slot to reveal a miniature casting grid. Patterns drawn on this grid are inserted directly into the list, overwriting any selected iotas.$(br2)\ + There are also six general-purpose inventory slots on the right side. These have no special functionality; they're just a convenient place to store a few extra items.", + cost: "Unfortunately, all of this incredible versatility comes at a cost. In order to modify the contents of items, _media is required - about a tenth of one $(l:items/amethyst)$(item)Amethyst Dust/$ per action performed.$(br2)\ + I can supply _media to the $(l:items/splicing_table)$(item)Splicing Table/$ by putting it in the lower right slot. The table will consume up to ten $(l:items/amethyst)$(item)Amethyst Dust/$ at once; any surplus is ignored until it can be consumed without wasting _media.", + recipe: "$(italic)She plugged in strings one after the other, the tiny metal cubes flying in and out as her fingers danced over the tray with blinding speed./$", + }, + }, + }, + }, + + patterns: { + entry: { + debugging: { + "": "Debugging", + page: { + "const/debugging": "Adds $(thing)True/$ to the top of the stack if executed by a $(l:items/debugging#debugger)$(item)Debugger/$ or $(l:items/debugging#evaluator)$(item)Evaluator/$, or $(thing)False/$ otherwise.", + "next_eval_index": "Adds the index of the next iota to be evaluated if executed by a $(l:items/debugging#debugger)$(item)Debugger/$ or $(l:items/debugging#evaluator)$(item)Evaluator/$, or $(l:casting/influences)$(thing)Null/$ otherwise.", + "const/cognitohazard": { + "1": "Adds a $(thing)Cognitohazard/$ to the top of the stack.", + "2": "It seems certain $(l:items/debugging#evaluator)debugging tools/$ may pose a security risk for some $(l:patterns/meta#hexcasting:eval/cc)high-level techniques/$. To help combat this, I have created this pattern.$(br2)\ + When a $(thing)Cognitohazard/$ iota is executed normally, nothing happens. However, if one is present in a _Hex executed by a $(l:items/debugging#debugger)$(item)Debugger/$, it will cause the _Hex to terminate $(italic)immediately/$ - even before the $(thing)Cognitohazard/$ is actually executed.", + }, + "breakpoint/": { + before: "Pauses the $(l:items/debugging#debugger)$(item)Debugger/$ before executing this pattern.", + after: "Pauses the $(l:items/debugging#debugger)$(item)Debugger/$ after executing this pattern (ie. before executing the next pattern).", + }, + "craft/debugger": "Creates a $(l:items/debugging#debugger)$(item)Debugger/$ that casts a _Hex, similar to $(l:patterns/spells/hexcasting)certain other patterns/$ I've used in the past.$(br2)\ + Costs about ten $(l:items/amethyst)$(item)Charged Amethyst/$.", + }, + }, + }, + }, + }, + }, +} diff --git a/projects/1.20-fabric/assets/hexdebug/hexdebug/packer-policy.json b/projects/1.20-fabric/assets/hexdebug/hexdebug/packer-policy.json new file mode 100644 index 000000000000..103ac78cecdc --- /dev/null +++ b/projects/1.20-fabric/assets/hexdebug/hexdebug/packer-policy.json @@ -0,0 +1,7 @@ +[ + { + "type": "indirect", + "destType": "json", + "source": "projects/1.20/assets/hexdebug/hexdebug" + } +] \ No newline at end of file diff --git a/projects/1.20-fabric/assets/ioticblocks/ioticblocks/README.md b/projects/1.20-fabric/assets/ioticblocks/ioticblocks/README.md new file mode 100644 index 000000000000..7e4c13f1a7fd --- /dev/null +++ b/projects/1.20-fabric/assets/ioticblocks/ioticblocks/README.md @@ -0,0 +1,16 @@ +### 总概 + +```mermaid +flowchart LR + 1.20.1 -->|indirect| 1.20.1-fabric +``` + +``` +1.20.1 + └── 1.20.1-fabric +``` + +### 链接区域 + +- [1.20.1](/projects/1.20/assets/ioticblocks/ioticblocks) +- [1.20.1-fabric](/projects/1.20-fabric/assets/ioticblocks/ioticblocks) \ No newline at end of file diff --git a/projects/1.20-fabric/assets/ioticblocks/ioticblocks/lang/en_us.flatten.json5 b/projects/1.20-fabric/assets/ioticblocks/ioticblocks/lang/en_us.flatten.json5 new file mode 100644 index 000000000000..8a7f45f57795 --- /dev/null +++ b/projects/1.20-fabric/assets/ioticblocks/ioticblocks/lang/en_us.flatten.json5 @@ -0,0 +1,58 @@ +{ + ioticblocks: { + category: { + patterns: { + entry: { + readwrite_blocks: { + "": "Reading/Writing Blocks", + page: { + "read/block": "Like $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$, but the iota is read out of a block instead of my other hand.", + "write/block": "Like $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$, but the iota is written to a block instead of my other hand.$(br2)\ + Interestingly enough, it looks like I cannot write my own Name using this spell. I get a sense that I might be endangered if I could.", + "read/index": "Read a list iota out of an entity or block, then push the iota at the specified index to the stack.$(br2)\ + It seems this and the next pattern may be useful for handling large amounts of data without causing a $(l:casting/mishaps)Too Many Iotas/$ mishap.", + "write/index": "Read a list iota out of an entity or block, then set the element at the specified index of that list to the given iota, then write the resulting list back to the entity or block.", + "readable/block": "Like $(l:patterns/readwrite#hexcasting:readable)$(action)Auditor's Reflection/$, but the readability of a block is checked instead of my other hand.", + "writable/block": "Like $(l:patterns/readwrite#hexcasting:writable)$(action)Assessor's Reflection/$, but the writability of a block is checked instead of my other hand.", + } + } + } + } + } + }, + + hexcasting: { + action: { + "ioticblocks:": { + "read/index": "Tachygrapher's Distillation", + "write/index": "Tachygrapher's Gambit", + }, + + book: { + "ioticblocks:": { + "read/index": "Tachygrapher's Dstl.", + }, + }, + }, + + mishap: { + bad_item: { + iota: { + read: { + list: "a place to read a list from", + }, + }, + }, + + bad_block: { + iota: { + read: { + "": "a place to read iotas from", + list: "a place to read a list from", + }, + write: "a place to write iotas to", + }, + }, + }, + }, +} diff --git a/projects/1.20-fabric/assets/ioticblocks/ioticblocks/packer-policy.json b/projects/1.20-fabric/assets/ioticblocks/ioticblocks/packer-policy.json new file mode 100644 index 000000000000..d862348154db --- /dev/null +++ b/projects/1.20-fabric/assets/ioticblocks/ioticblocks/packer-policy.json @@ -0,0 +1,7 @@ +[ + { + "type": "indirect", + "destType": "json", + "source": "projects/1.20/assets/ioticblocks/ioticblocks" + } +] \ No newline at end of file diff --git a/projects/1.20/assets/hexdebug/hexdebug/README.md b/projects/1.20/assets/hexdebug/hexdebug/README.md new file mode 100644 index 000000000000..d02c8398dda3 --- /dev/null +++ b/projects/1.20/assets/hexdebug/hexdebug/README.md @@ -0,0 +1,19 @@ +### 总概 + +```mermaid +flowchart LR + 1.20.1 -->|indirect| 1.20.1-fabric + 1.19.2 +``` + +``` +1.20.1 + └── 1.20.1-fabric +1.19.2 +``` + +### 链接区域 + +- [1.19.2](/projects/1.19/assets/hexdebug/hexdebug) +- [1.20.1](/projects/1.20/assets/hexdebug/hexdebug) +- [1.20.1-fabric](/projects/1.20-fabric/assets/hexdebug/hexdebug) \ No newline at end of file diff --git a/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 b/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 new file mode 100644 index 000000000000..2f3145da54cb --- /dev/null +++ b/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 @@ -0,0 +1,200 @@ +{ + "item.hexdebug": { + debugger: "Debugger", + evaluator: "Evaluator", + }, + + "block.hexdebug": { + splicing_table: "Splicing Table", + focus_holder: "Focus Holder", + }, + + "itemGroup.hexdebug": "HexDebug", + + text: { + hexdebug: { + connected: "Debug client connected!", + no_session: "Debug session is not running.", + thwack: "Thwack!", + // Next Iota: [{index}] {iota} + debugger_stopped: "Next Iota: [%d] %s", + + splicing_table: { + button: { + view_left: "Move View Left", + view_right: "Move View Right", + select_none: "Select None", + select_all: "Select All", + clear_grid: "Clear Grid", + nudge_left: "Nudge Left", + nudge_right: "Nudge Right", + duplicate: "Duplicate", + delete: "Delete", + undo: "Undo", + redo: "Redo", + cut: "Cut", + copy: "Copy", + paste: "Paste (Verbatim)", + paste_splat: "Paste (Flattened)", + export: "Export as .hexpattern", + }, + tooltip: { + index: "Index: %d", + signature: "Signature: %s", + length: "Length: %d", + }, + }, + }, + + "autoconfig.hexdebug": { + title: "HexDebug Config", + category: { + client: "Client", + server: "Server", + }, + option: { + client: { + openDebugPort: { + "": "Open Debug Port", + "@Tooltip": "Whether or not a port should be opened. If false, the Debugger effectively becomes useless.", + }, + debugPort: { + "": "Debug Port", + "@Tooltip": "Port number (1024-65535) to open for the debug client (eg. VSCode) to connect to.", + }, + smartDebuggerSneakScroll: { + "": "Smart Debugger Sneak-Scroll", + "@Tooltip": "If a hex is not currently being debugged and a Debugger is in your main hand, prefer shift-scrolling whatever item is in your offhand (eg. a spellbook).", + }, + debuggerDisplayMode: { + "": "Debugger Display Mode", + "@Tooltip": "\ + Changes when the Debugger should print the next iota to be evaluated.\n\ + DISABLED: Never show Debugger status messages.\n\ + NOT_CONNECTED: Only show Debugger status messages if a debug client is not connected.\n\ + ENABLED: Always show Debugger status messages. (default)", + }, + showDebugClientLineNumber: { + "": "Show Debug Client Line Number", + "@Tooltip": "If true, show the line number (usually 1-indexed) from the debug client (eg. VSCode) in Debugger status messages; otherwise, show the list index (0-indexed)." + } + }, + server: { + maxUndoStackSize: { + "": "Undo History Size Limit", + "@Tooltip": "Maximum allowed size of the Splicing Table's undo history. To disable the limit, set the value to 0.", + } + } + }, + }, + }, + + "hexcasting.action": { + "hexdebug:": { + "const/debugging": "Debugger's Reflection", + "next_eval_index": "Debug Locator's Reflection", // TODO: this name kinda sucks tbh + "const/cognitohazard": "Cognitohazard Reflection", + "breakpoint/": { + before: "Set Breakpoint Before", + after: "Set Breakpoint After" + }, + "craft/debugger": "Craft Debugger", + }, + "book.hexdebug:": { + "next_eval_index": "Debug Locator's Rfln.", + "const/cognitohazard": "Cognitohazard Rfln." + }, + }, + + hexdebug: { + tooltip: { + debugger: { + step_mode: { + "": "Mode: %s", + continue: "Continue", + over: "Step Over", + in: "Step In", + out: "Step Out", + restart: "Restart", + stop: "Stop" + }, + }, + focus_holder: { + item: "Item: %s", + }, + cognitohazard_iota: "Cognitohazard", + }, + + category: { + items: { + entry: { + debugging: { + "": "Debugging Items", + page: { + debugger: "I have read vague descriptions of a strange object used by the ancients to help discover issues in complex _Hexes. I believe I have managed to reproduce this item; I call it the $(l:items/debugging#debugger)$(item)Debugger/$.$(br2)\ + It seems to work in a similar way to $(l:items/hexcasting)$(item)Artifacts/$. However, I can also use it to cast a _Hex right from an item (like a $(l:items/focus)$(item)Focus/$) in my off-hand.$(br2)\ + Unfortunately, the $(l:items/debugging#debugger)$(item)Debugger/$ is not very useful on its own; to get the most out of it, I will need to $(l:https://github.com/object-Object/HexDebug/wiki/Setting-up-VSCode-with-HexDebug)set up/$ some sort of $(l:https://marketplace.visualstudio.com/items?itemName=object-Object.hex-casting)external tool/$.", + thwack: "$(italic)Thwack!/$$(br2)\ + I can also switch between different \"step modes\" of the $(item)Debugger/$ by sneak-scrolling (like with a $(l:items/spellbook)$(item)Spellbook/$ or $(l:items/abacus)$(item)Abacus/$).", + evaluator: "Complementing the $(l:items/debugging#debugger)$(item)Debugger/$, I've also created a new type of staff: the $(l:items/debugging#evaluator)$(item)Evaluator/$.$(br2)\ + While debugging a _Hex, patterns drawn with this staff will be cast using the current stack and $(l:patterns/readwrite#hexcasting:local)$(thing)ravenmind/$ of the $(l:items/debugging#debugger)$(item)Debugger/$.$(br2)\ + Clearing the grid seems to reset the $(l:items/debugging#debugger)$(item)Debugger/$ to just before the first pattern was drawn with the $(l:items/debugging#evaluator)$(item)Evaluator/$. It will not, of course, undo any effects performed by spells on the world.", + thwonk: "$(italic)Thwonk!/$" + }, + }, + splicing_table: { + "": "Splicing Table", + page: { + "1": "As my _Hexes become more complex, I find myself spending more and more time fixing my own mistakes. Patterns such as $(l:patterns/patterns_as_iotas#hexcasting:undo)$(action)Evanition/$ and $(l:patterns/lists#hexcasting:replace)$(action)Surgeon's Exaltation/$ can suffice for simple substitutions, but I think I can do better.$(br2)\ + The $(l:items/splicing_table)$(item)Splicing Table/$ is my solution to these woes: a full-fledged workstation for viewing and editing _Hexes.", + "2": "To begin, I must place an item containing a list iota (eg. a $(l:items/focus)$(item)Focus/$) in the centre of the table. This reveals the first nine iotas in the list. The small arrows at the ends can be used to move my view of the list; I can also hold $(k:sneak) to move by a full page, or $(k:sprint) to move all the way to the start or end.$(br2)\ + If I wish to share my _Hexes with others, I can use the large button on the right side to copy the contents of the list to my \"clipboard\".", + "3": "I can select iotas (or the space between them) by clicking on them. Holding $(k:sneak) and clicking again allows me to select a range of iotas.$(br2)\ + Additionally, there are dedicated buttons to select the entire list ($(thing)Select All/$) and to clear my selection ($(thing)Select None/$).$(br2)\ + Selecting iotas allows me to unlock the true power of the $(l:items/splicing_table)$(item)Splicing Table/$: editing _Hexes.", + "4": "With $(l:items/splicing_table#cost)sufficient media/$, I can perform the following actions:\ + $(li)$(thing)Nudge Left/$: Move the selected iota(s) one space to the left.\ + $(li)$(thing)Nudge Right/$: Move the selected iota(s) one space to the right.\ + $(li)$(thing)Delete/$: Remove the selected iota(s) from the list.\ + $(li)$(thing)Duplicate/$: Create a copy of the selected iota(s).\ + $(li)$(thing)Undo/$: Revert the last action performed.\ + $(li)$(thing)Redo/$: Re-perform actions previously reverted with $(thing)Undo/$.", + "5": "For more advanced operations, some extra storage is required. I can place an iota-holding item in the slot to the left to unlock the following actions:\ + $(li)$(thing)Copy/$: Write the selected iota(s) to a new list in the secondary item.\ + $(li)$(thing)Cut/$: Same as $(thing)Copy/$, but also delete the selected iota(s).\ + $(li)$(thing)Paste/$: Replace the selected iota(s) with the iota in the secondary item. If the iota is a list, its contents are pasted instead; I can override this by holding $(k:sneak).", + "6": "Finally, I can insert a $(l:items/staff)$(item)Staff/$ into the lower left slot to reveal a miniature casting grid. Patterns drawn on this grid are inserted directly into the list, overwriting any selected iotas.$(br2)\ + There are also six general-purpose inventory slots on the right side. These have no special functionality; they're just a convenient place to store a few extra items.", + cost: "Unfortunately, all of this incredible versatility comes at a cost. In order to modify the contents of items, _media is required - about a tenth of one $(l:items/amethyst)$(item)Amethyst Dust/$ per action performed.$(br2)\ + I can supply _media to the $(l:items/splicing_table)$(item)Splicing Table/$ by putting it in the lower right slot. The table will consume up to ten $(l:items/amethyst)$(item)Amethyst Dust/$ at once; any surplus is ignored until it can be consumed without wasting _media.", + recipe: "$(italic)She plugged in strings one after the other, the tiny metal cubes flying in and out as her fingers danced over the tray with blinding speed./$", + }, + }, + }, + }, + + patterns: { + entry: { + debugging: { + "": "Debugging", + page: { + "const/debugging": "Adds $(thing)True/$ to the top of the stack if executed by a $(l:items/debugging#debugger)$(item)Debugger/$ or $(l:items/debugging#evaluator)$(item)Evaluator/$, or $(thing)False/$ otherwise.", + "next_eval_index": "Adds the index of the next iota to be evaluated if executed by a $(l:items/debugging#debugger)$(item)Debugger/$ or $(l:items/debugging#evaluator)$(item)Evaluator/$, or $(l:casting/influences)$(thing)Null/$ otherwise.", + "const/cognitohazard": { + "1": "Adds a $(thing)Cognitohazard/$ to the top of the stack.", + "2": "It seems certain $(l:items/debugging#evaluator)debugging tools/$ may pose a security risk for some $(l:patterns/meta#hexcasting:eval/cc)high-level techniques/$. To help combat this, I have created this pattern.$(br2)\ + When a $(thing)Cognitohazard/$ iota is executed normally, nothing happens. However, if one is present in a _Hex executed by a $(l:items/debugging#debugger)$(item)Debugger/$, it will cause the _Hex to terminate $(italic)immediately/$ - even before the $(thing)Cognitohazard/$ is actually executed.", + }, + "breakpoint/": { + before: "Pauses the $(l:items/debugging#debugger)$(item)Debugger/$ before executing this pattern.", + after: "Pauses the $(l:items/debugging#debugger)$(item)Debugger/$ after executing this pattern (ie. before executing the next pattern).", + }, + "craft/debugger": "Creates a $(l:items/debugging#debugger)$(item)Debugger/$ that casts a _Hex, similar to $(l:patterns/spells/hexcasting)certain other patterns/$ I've used in the past.$(br2)\ + Costs about ten $(l:items/amethyst)$(item)Charged Amethyst/$.", + }, + }, + }, + }, + }, + }, +} diff --git a/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 b/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 new file mode 100644 index 000000000000..d9777fe2eb78 --- /dev/null +++ b/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 @@ -0,0 +1,200 @@ +{ + "item.hexdebug": { + debugger: "调试杖", + evaluator: "运行杖", + }, + + "block.hexdebug": { + splicing_table: "剪接台", + focus_holder: "核心装载器", + }, + + "itemGroup.hexdebug": "咒法调试", + + text: { + hexdebug: { + connected: "调试客户端已连接!", + no_session: "调试会话未在运行。", + thwack: "哐当!", + // Next Iota: [{index}] {iota} + debugger_stopped: "下一个Iota:[%d] %s", + + splicing_table: { + button: { + view_left: "向左移动视野", + view_right: "向右移动视野", + select_none: "取消选区", + select_all: "全选", + clear_grid: "清空网格", + nudge_left: "左移", + nudge_right: "右移", + duplicate: "重复", + delete: "删除", + undo: "撤销", + redo: "重做", + cut: "剪切", + copy: "复制", + paste: "粘贴(逐项)", + paste_splat: "粘贴(扁平化)", + export: "导出为.hexpattern文件", + }, + tooltip: { + index: "索引下标:%d", + signature: "图案编码:%s", + length: "长度:%d", + }, + }, + }, + + "autoconfig.hexdebug": { + title: "咒法调试配置", + category: { + client: "Client", + server: "Server", + }, + option: { + client: { + openDebugPort: { + "": "开放调试端口", + "@Tooltip": "是否开放端口。若设为false,调试杖会失去作用。", + }, + debugPort: { + "": "调试端口", + "@Tooltip": "开放以连接至调试客户端(如VSCode)的端口号(1024-65535)。", + }, + smartDebuggerSneakScroll: { + "": "调试杖智能潜行滚轮", + "@Tooltip": "若当前主手持有调试杖,且未在调试咒术,则优先处理副手中法术书一类物品的“潜行滚动滚轮”操作。", + }, + debuggerDisplayMode: { + "": "调试杖显示模式", + "@Tooltip": "\ + 更改调试杖打印下一需运行iota的时机。\n\ + DISABLED:不显示调试杖状态消息。\n\ + NOT_CONNECTED:只在调试客户端未连接时显示调试杖状态消息。\n\ + ENABLED:一直显示调试杖状态信息。(默认)", + }, + showDebugClientLineNumber: { + "": "显示调试客户端行号", + "@Tooltip": "若设为true,显示调试客户端(如VSCode)的行号,通常以1起始;否则显示列表索引下标,以0起始。" + } + }, + server: { + maxUndoStackSize: { + "": "撤销历史步数上限", + "@Tooltip": "剪接台撤销历史的长度上限。设为0可禁用上限。", + } + } + }, + }, + }, + + "hexcasting.action": { + "hexdebug:": { + "const/debugging": "调试杖之精思", + "next_eval_index": "调试位之精思", // TODO: this name kinda sucks tbh + "const/cognitohazard": "认知危害之精思", + "breakpoint/": { + before: "在前方添加断点", + after: "在后方添加断点" + }, + "craft/debugger": "制作调试杖", + }, + "book.hexdebug:": { + "next_eval_index": "调试位之精思", + "const/cognitohazard": "认知危害之精思" + }, + }, + + hexdebug: { + tooltip: { + debugger: { + step_mode: { + "": "模式:%s", + continue: "继续", + over: "逐过程", + in: "单步调试", + out: "单步跳出", + restart: "重启", + stop: "停止" + }, + }, + focus_holder: { + item: "物品:%s", + }, + cognitohazard_iota: "认知危害", + }, + + category: { + items: { + entry: { + debugging: { + "": "调试物品", + page: { + debugger: "部分文献中有些不太明确的描述,称古代人会使用一件奇怪的物品协助他们发现复杂$(hex)咒术/$中的问题。我应已成功复刻出了它,定名为$(item)调试杖/$。$(br2)\ + 它的工作方式与$(l:items/hexcasting)$(item)造物/$类似。不过,它还能从副手中的物品(比如$(l:items/focus)$(item)核心/$)里直接施放$(hex)咒术/$。$(br2)\ + 有些可惜的是,$(item)调试杖/$自身没有太大用处;而为发挥出它的所有潜能,需要先$(l:https://github.com/object-Object/HexDebug/wiki/Setting-up-VSCode-with-HexDebug)准备好/$某种$(l:https://marketplace.visualstudio.com/items?itemName=object-Object.hex-casting)外部工具/$才能正常运作。", + thwack: "$(italic)哐当!/$$(br2)\ + 潜行滚动滚轮还可切换$(item)调试杖/$的各种“步进模式”,操作与$(l:items/spellbook)$(item)法术书/$和$(l:items/abacus)$(item)算盘/$类似。", + evaluator: "我又新制造了一种法杖——$(l:items/debugging#evaluator)$(item)运行杖/$,用以补充$(l:items/debugging#debugger)$(item)调试杖/$的功能。$(br2)\ + 调试$(hex)咒术/$时,此法杖绘制的图案会运行于$(l:items/debugging#debugger)$(item)调试杖/$当前的栈和$(l:patterns/readwrite#hexcasting:local)$(thing)渡鸦之思/$。$(br2)\ + 清空咒术网格后,$(l:items/debugging#debugger)$(item)调试杖/$似乎会回到$(l:items/debugging#evaluator)$(item)运行杖/$绘制首个图案前的状态。当然,这种操作无法撤回已造成实际影响的法术。", + thwonk: "$(italic)哐啷!/$" + }, + }, + splicing_table: { + "": "剪接台", + page: { + "1": "我的$(hex)咒术/$日益复杂,修补我自己的失误也愈发耗时。$(l:patterns/patterns_as_iotas#hexcasting:undo)$(action)消隐/$,$(l:patterns/lists#hexcasting:replace)$(action)外科医师之提整/$等图案对简单的替换来说已经足够,但我认为还可精益求精。$(br2)\ + $(l:items/splicing_table)$(item)剪接台/$就是我对这些麻烦的回应:功能完备的工作站,专为查看和编辑$(hex)咒术/$准备。", + "2": "开始之前,需将$(l:items/focus)$(item)核心/$等包含列表 iota 的物品放入界面中央。界面会显示列表中的前 9 个 iota。显示栏两侧的箭头可更改显示的区域;也可按住 $(k:sneak) 以按页移动,或按照 $(k:sprint) 以直接移动到开头或结尾。$(br2)\ + 如果要和其他人分享$(hex)咒术/$,可以按下右侧的大按钮,将列表内容复制到我的“剪贴板”。", + "3": "点击 iota 及 iota 间的空位可选择它们。按住 $(k:sneak) 再次点击则可选择一系列 iota。$(br2)\ + 此外,还有按钮专为选择整个列表($(thing)全选/$)和清空选择区域($(thing)取消选区/$)。$(br2)\ + 选择 iota 能解锁$(l:items/splicing_table)$(item)剪接台/$的真正力量:编辑$(hex)咒术/$。", + "4": "只要$(l:items/splicing_table#cost)媒质充足/$,即可执行以下操作:\ + $(li)$(thing)左移/$:将所选 iota 向左移动一格。\ + $(li)$(thing)右移/$:将所选 iota 向右移动一格。\ + $(li)$(thing)删除/$:从列表中移除所选 iota。\ + $(li)$(thing)重复/$:创建所选 iota 的副本。\ + $(li)$(thing)撤销/$:撤回最近一次操作。\ + $(li)$(thing)重做/$:重做$(thing)撤销/$所撤回的操作。", + "5": "更高级的操作需要额外存储空间。可在左侧槽位中放入可存储 iota 的物品,以解锁以下操作:\ + $(li)$(thing)复制/$:将所选 iota 作为列表写入辅助物品。\ + $(li)$(thing)剪切/$:与$(thing)复制/$功能一致,不过原本选择的 iota 会被删除。\ + $(li)$(thing)粘贴/$:使用辅助物品中的 iota 覆盖所选的 iota。如果用于覆盖的 iota 是列表,则会粘贴其中内容;按住 $(k:sneak) 可改为粘贴列表本身。", + "6": "最后,还可向左下角槽位放入$(l:items/staff)$(item)法杖/$,以显示微缩版的咒术网格。在该网格中绘制的图案会直接插入列表,覆盖选中的 iota。$(br2)\ + 右侧还有 6 个通用物品槽。这些槽位没有特殊功能,只是方便存放物品。", + cost: "可惜的是,这种强大的功能有其代价。修改物品的 iota 存储空间需要消耗$(media)媒质/$——每次操作消耗大约 1/10 个$(l:items/amethyst)$(item)紫水晶粉/$。$(br2)\ + 右下角的槽位可用于向$(l:items/splicing_table)$(item)剪接台/$补充$(media)媒质/$。单次最多可补充 10 个$(l:items/amethyst)$(item)紫水晶粉/$;多出的会被忽略,直至出现足够完全接收新$(media)媒质/$物品的缺口,才会进行消耗。", + recipe: "$(italic)看着她一个接一个接上铭印串,随着她的手指以快得几乎看不见的速度在托盘上舞动,小金属方块飞入飞出。/$", + }, + }, + }, + }, + + patterns: { + entry: { + debugging: { + "": "调试", + page: { + "const/debugging": "若栈由$(l:items/debugging#debugger)$(item)调试杖/$或$(l:items/debugging#evaluator)$(item)运行杖/$执行,则返回 $(thing)True/$;否则返回 $(thing)False/$。", + "next_eval_index": "若栈由$(l:items/debugging#debugger)$(item)调试杖/$或$(l:items/debugging#evaluator)$(item)运行杖/$执行,则返回下一个待执行 iota 的索引下标;否则返回 $(l:casting/influences)$(thing)Null/$。", + "const/cognitohazard": { + "1": "向栈顶压入一个$(thing)认知危害/$。", + "2": "貌似部分$(l:items/debugging#evaluator)调试工具/$在某些$(l:patterns/meta#hexcasting:eval/cc)高等级技术/$中容易导致安全问题。而为解决这一问题,我设计了本图案。$(br2)\ + $(thing)认知危害/$ iota 正常运行时什么都不会发生。不过,如果它出现在$(l:items/debugging#debugger)$(item)调试杖/$执行的$(hex)咒术/$里,那该$(hex)咒术/$便会$(italic)立即/$终止——甚至要先于$(thing)认知危害/$的执行。", + }, + "breakpoint/": { + before: "在运行此图案前,暂停$(l:items/debugging#debugger)$(item)调试杖/$。", + after: "在运行此图案后,也即在运行下一图案之前,暂停$(l:items/debugging#debugger)$(item)调试杖/$。", + }, + "craft/debugger": "制作一支能施放$(hex)咒术/$的$(l:items/debugging#debugger)$(item)调试杖/$。这个图案和我之前用过的$(l:patterns/spells/hexcasting)某些图案/$有些相似。\ + $(br2)消耗大约 10 个$(l:items/amethyst)$(item)充能紫水晶/$。", + }, + }, + }, + }, + }, + }, +} \ No newline at end of file diff --git a/projects/1.20/assets/ioticblocks/ioticblocks/README.md b/projects/1.20/assets/ioticblocks/ioticblocks/README.md new file mode 100644 index 000000000000..7e4c13f1a7fd --- /dev/null +++ b/projects/1.20/assets/ioticblocks/ioticblocks/README.md @@ -0,0 +1,16 @@ +### 总概 + +```mermaid +flowchart LR + 1.20.1 -->|indirect| 1.20.1-fabric +``` + +``` +1.20.1 + └── 1.20.1-fabric +``` + +### 链接区域 + +- [1.20.1](/projects/1.20/assets/ioticblocks/ioticblocks) +- [1.20.1-fabric](/projects/1.20-fabric/assets/ioticblocks/ioticblocks) \ No newline at end of file diff --git a/projects/1.20/assets/ioticblocks/ioticblocks/lang/en_us.flatten.json5 b/projects/1.20/assets/ioticblocks/ioticblocks/lang/en_us.flatten.json5 new file mode 100644 index 000000000000..8a7f45f57795 --- /dev/null +++ b/projects/1.20/assets/ioticblocks/ioticblocks/lang/en_us.flatten.json5 @@ -0,0 +1,58 @@ +{ + ioticblocks: { + category: { + patterns: { + entry: { + readwrite_blocks: { + "": "Reading/Writing Blocks", + page: { + "read/block": "Like $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$, but the iota is read out of a block instead of my other hand.", + "write/block": "Like $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$, but the iota is written to a block instead of my other hand.$(br2)\ + Interestingly enough, it looks like I cannot write my own Name using this spell. I get a sense that I might be endangered if I could.", + "read/index": "Read a list iota out of an entity or block, then push the iota at the specified index to the stack.$(br2)\ + It seems this and the next pattern may be useful for handling large amounts of data without causing a $(l:casting/mishaps)Too Many Iotas/$ mishap.", + "write/index": "Read a list iota out of an entity or block, then set the element at the specified index of that list to the given iota, then write the resulting list back to the entity or block.", + "readable/block": "Like $(l:patterns/readwrite#hexcasting:readable)$(action)Auditor's Reflection/$, but the readability of a block is checked instead of my other hand.", + "writable/block": "Like $(l:patterns/readwrite#hexcasting:writable)$(action)Assessor's Reflection/$, but the writability of a block is checked instead of my other hand.", + } + } + } + } + } + }, + + hexcasting: { + action: { + "ioticblocks:": { + "read/index": "Tachygrapher's Distillation", + "write/index": "Tachygrapher's Gambit", + }, + + book: { + "ioticblocks:": { + "read/index": "Tachygrapher's Dstl.", + }, + }, + }, + + mishap: { + bad_item: { + iota: { + read: { + list: "a place to read a list from", + }, + }, + }, + + bad_block: { + iota: { + read: { + "": "a place to read iotas from", + list: "a place to read a list from", + }, + write: "a place to write iotas to", + }, + }, + }, + }, +} diff --git a/projects/1.20/assets/ioticblocks/ioticblocks/lang/zh_cn.flatten.json5 b/projects/1.20/assets/ioticblocks/ioticblocks/lang/zh_cn.flatten.json5 new file mode 100644 index 000000000000..0b217fff13c5 --- /dev/null +++ b/projects/1.20/assets/ioticblocks/ioticblocks/lang/zh_cn.flatten.json5 @@ -0,0 +1,58 @@ +{ + ioticblocks: { + category: { + patterns: { + entry: { + readwrite_blocks: { + "": "读取/写入方块", + page: { + "read/block": "与$(l:patterns/readwrite#hexcasting:read)$(action)书吏之精思/$类似,但会从方块中读出 iota,而非从我另一只手中的物品读取。", + "write/block": "与$(l:patterns/readwrite#hexcasting:write)$(action)书吏之策略/$类似,但会向方块写入 iota,而非向我另一只手中的物品写入。$(br2)\ + 有趣的是,我似乎无法用这个法术写入我的真名。我有种感觉,如果我真可以这么做,等着我的只会是灾难。", + "read/index": "从实体或方块中读出一个列表 iota,并将 iota 压入栈中给定下标处。$(br2)\ + 这个图案和后页的图案似乎很适合处理大批量的数据,而且不会因此招致 $(l:casting/mishaps)Iota 过多/$事故。", + "write/index": "从实体或方块中读出一个列表 iota,并将该列表中给定下标处的元素修改为所给 iota,最后把修改后的列表写入原实体或方块。", + "readable/block": "与$(l:patterns/readwrite#hexcasting:readable)$(action)审计员之精思/$类似,但会检验方块的是否可读取,而非检验我另一只手中的物品。", + "writable/block": "与$(l:patterns/readwrite#hexcasting:writable)$(action)估价员之精思/$类似,但会检验方块的是否可写入,而非检验我另一只手中的物品。", + } + } + } + } + } + }, + + hexcasting: { + action: { + "ioticblocks:": { + "read/index": "速记员之馏化", + "write/index": "速记员之策略", + }, + + book: { + "ioticblocks:": { + "read/index": "速记员之馏化", + }, + }, + }, + + mishap: { + bad_item: { + iota: { + read: { + list: "一个可以读出列表的地方", + }, + }, + }, + + bad_block: { + iota: { + read: { + "": "一个可以读出iota的地方", + list: "一个可以读出列表的地方", + }, + write: "一个可以写入iota的地方", + }, + }, + }, + }, +} From f4eac6cdeb3259a05cc572b6249b40e7865c8801 Mon Sep 17 00:00:00 2001 From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com> Date: Thu, 24 Jul 2025 20:15:32 +0800 Subject: [PATCH 02/14] Caduceus IoticBlocks packer --- projects/1.20-fabric/assets/hexdebug/hexdebug/packer-policy.json | 1 - .../assets/ioticblocks/ioticblocks/packer-policy.json | 1 - 2 files changed, 2 deletions(-) diff --git a/projects/1.20-fabric/assets/hexdebug/hexdebug/packer-policy.json b/projects/1.20-fabric/assets/hexdebug/hexdebug/packer-policy.json index 103ac78cecdc..9ea0478bf711 100644 --- a/projects/1.20-fabric/assets/hexdebug/hexdebug/packer-policy.json +++ b/projects/1.20-fabric/assets/hexdebug/hexdebug/packer-policy.json @@ -1,7 +1,6 @@ [ { "type": "indirect", - "destType": "json", "source": "projects/1.20/assets/hexdebug/hexdebug" } ] \ No newline at end of file diff --git a/projects/1.20-fabric/assets/ioticblocks/ioticblocks/packer-policy.json b/projects/1.20-fabric/assets/ioticblocks/ioticblocks/packer-policy.json index d862348154db..952352fa4ea4 100644 --- a/projects/1.20-fabric/assets/ioticblocks/ioticblocks/packer-policy.json +++ b/projects/1.20-fabric/assets/ioticblocks/ioticblocks/packer-policy.json @@ -1,7 +1,6 @@ [ { "type": "indirect", - "destType": "json", "source": "projects/1.20/assets/ioticblocks/ioticblocks" } ] \ No newline at end of file From 54cf248f64772df885e0597c61a040de3b1ad7f8 Mon Sep 17 00:00:00 2001 From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com> Date: Thu, 24 Jul 2025 21:26:58 +0800 Subject: [PATCH 03/14] HexDebug fix --- .../1.19/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 | 6 +++--- .../1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/projects/1.19/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 b/projects/1.19/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 index 2de5ec27305d..0e43c266d98c 100644 --- a/projects/1.19/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 +++ b/projects/1.19/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 @@ -47,10 +47,10 @@ }, "autoconfig.hexdebug": { - title: "咒法调试配置", + title: "咒法调试(HexDebug)配置", category: { - client: "Client", - server: "Server", + client: "客户端", + server: "服务端", }, option: { client: { diff --git a/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 b/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 index d9777fe2eb78..db0dcbb6ddfe 100644 --- a/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 +++ b/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 @@ -47,10 +47,10 @@ }, "autoconfig.hexdebug": { - title: "咒法调试配置", + title: "咒法调试(HexDebug)配置", category: { - client: "Client", - server: "Server", + client: "客户端", + server: "服务端", }, option: { client: { From 351140afa34900f3055c3ae849d6299a042d1e19 Mon Sep 17 00:00:00 2001 From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com> Date: Sun, 21 Sep 2025 02:16:51 +0800 Subject: [PATCH 04/14] =?UTF-8?q?HexDebug=20update=EF=BC=9A=E5=AE=98?= =?UTF-8?q?=E5=BA=93=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hexdebug/lang/en_us.flatten.json5 | 226 ++++++++++++++++-- .../hexdebug/lang/en_us.flatten.json5 | 226 ++++++++++++++++-- .../hexdebug/lang/zh_cn.flatten.json5 | 214 +++++++++++++++-- 3 files changed, 597 insertions(+), 69 deletions(-) diff --git a/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 b/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 index 2f3145da54cb..5bee1c32975c 100644 --- a/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 +++ b/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 @@ -6,7 +6,8 @@ "block.hexdebug": { splicing_table: "Splicing Table", - focus_holder: "Focus Holder", + enlightened_splicing_table: "Mindsplice Table", + focus_holder: "Focal Frame", }, "itemGroup.hexdebug": "HexDebug", @@ -22,7 +23,11 @@ splicing_table: { button: { view_left: "Move View Left", + view_left_page: "Move View to Previous Page", + view_left_full: "Move View to Start", view_right: "Move View Right", + view_right_page: "Move View to Next Page", + view_right_full: "Move View to End", select_none: "Select None", select_all: "Select All", clear_grid: "Clear Grid", @@ -37,6 +42,7 @@ paste: "Paste (Verbatim)", paste_splat: "Paste (Flattened)", export: "Export as .hexpattern", + cast: "Activate Table", }, tooltip: { index: "Index: %d", @@ -77,32 +83,124 @@ showDebugClientLineNumber: { "": "Show Debug Client Line Number", "@Tooltip": "If true, show the line number (usually 1-indexed) from the debug client (eg. VSCode) in Debugger status messages; otherwise, show the list index (0-indexed)." + }, + invertSplicingTableScrollDirection: { + "": "Invert Splicing Table Scroll Direction", + "@Tooltip": "Whether scrolling up (as opposed to down) will increase the view index of the splicing table, and vice versa.", } }, server: { maxUndoStackSize: { "": "Undo History Size Limit", "@Tooltip": "Maximum allowed size of the Splicing Table's undo history. To disable the limit, set the value to 0.", - } - } + }, + splicingTableMediaCost: { + "": "Splicing Table Media Cost", + "@Tooltip": "How many points of media to consume when performing an action in a Splicing Table.", + }, + splicingTableMaxMedia: { + "": "Splicing Table Max Media", + "@Tooltip": "How many points of media to consume when performing an action in a Splicing Table.", + }, + splicingTableCastingCooldown: { + "": "Mindsplice Table Casting Cooldown", + "@Tooltip": "Cooldown in ticks for the Mindsplice Table's casting button.", + }, + splicingTableAmbit: { + "": "Mindsplice Table Ambit", + "@Tooltip": "Ambit radius in blocks for the Mindsplice Table.", + }, + }, }, }, }, - "hexcasting.action": { - "hexdebug:": { - "const/debugging": "Debugger's Reflection", - "next_eval_index": "Debug Locator's Reflection", // TODO: this name kinda sucks tbh - "const/cognitohazard": "Cognitohazard Reflection", - "breakpoint/": { - before: "Set Breakpoint Before", - after: "Set Breakpoint After" + hexcasting: { + action: { + "hexdebug:": { + "const/debugging": "Debugger's Reflection", + "next_eval_index": "Debug Locator's Reflection", // TODO: this name kinda sucks tbh + "const/cognitohazard": "Cognitohazard Reflection", + "breakpoint/": { + before: "Set Breakpoint Before", + after: "Set Breakpoint After" + }, + "craft/debugger": "Craft Debugger", + "splicing/": { + "view_index/": { + read: "Sprocket's Purification", + write: "Sprocket's Gambit", + }, + "selection/": { + read: "Splicer's Decomposition", + write: "Splicer's Gambit", + }, + "list/": { + "spellbook_index/": { + read: "Projectionist's Purification", + write: "Projectionist's Gambit", + readable: "Shutter's Purification" + }, + }, + "clipboard/": { + read: "Compositor's Purification", + write: "Compositor's Gambit", + readable: "Producer's Purification", + writable: "Director's Purification", + "spellbook_index/": { + read: "Projectionist's Purification II", + write: "Projectionist's Gambit II", + readable: "Shutter's Purification II", + }, + }, + "enlightened/": { + "hex/": { + read: "Mindsplice Purification", // TODO: bad name + write: "Imbue Mindsplice Table", + }, + }, + }, + }, + "book.hexdebug:": { + "next_eval_index": "Debug Locator's Rfln.", + "const/cognitohazard": "Cognitohazard Rfln.", + "splicing/": { + "list/": { + "spellbook_index/": { + read: "Projectionist's Prfn.", + }, + }, + "clipboard/": { + read: "Compositor's Prfn.", + "spellbook_index/": { + read: "Projectionist's Prfn. II", + readable: "Shutter's Prfn. II", + }, + }, + }, }, - "craft/debugger": "Craft Debugger", }, - "book.hexdebug:": { - "next_eval_index": "Debug Locator's Rfln.", - "const/cognitohazard": "Cognitohazard Rfln." + + mishap: { + bad_block: { + splicing_table: { + "": "a Splicing Table", + enlightened: "a Mindsplice Table", + list: { + spellbook: "a Splicing Table with a non-empty spellbook in the main item slot", + }, + clipboard: { + read: "a Splicing Table with a readable secondary item", + write: "a Splicing Table with a writable secondary item", + spellbook: "a Splicing Table with a non-empty spellbook in the secondary item slot", + }, + }, + }, + invalid_value: { + int: { + positive_or_null: "a positive integer or null" + } + } }, }, @@ -142,6 +240,16 @@ thwonk: "$(italic)Thwonk!/$" }, }, + focus_holder: { + "": "Focal Frame", + page: { + "1": "$(l:items/focus)$(item)Foci/$ are useful for storing _Hexes and other iotas in my inventory, but I sometimes find myself in need of a way to store iotas in the world. Item frames are too fragile, and $(l:greatwork/akashiclib)other methods/$ are inefficient and... distasteful. A cleaner solution is necessary, and I've devised one in the form of the $(item)Focal Frame/$.", + "2": "A $(item)Focal Frame/$ by itself is useless; a $(l:items/focus)$(item)Focus/$ must first be inserted. I can do that through crafting, or by right-clicking a placed $(item)Focal Frame/$ with a $(l:items/focus)$(item)Focus/$. Right-clicking with an empty hand removes the $(l:items/focus)$(item)Focus/$ from the frame.$(br2)\ + As an item, I can use a filled $(item)Focal Frame/$ anywhere I would normally use a $(l:items/focus)$(item)Focus/$, including patterns such as $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$. When placed in the world, I can access it using patterns like $(l:patterns/readwrite_blocks#hexcasting:read/entity)$(action)Chronicler's Purification/$.", + recipe: "$(italic)Two thousand movies, four thousand albums, music and words and pictures like voices whispering from a sweet, sunny past./$", + "3": "In addition to these recipes, I can craft an empty $(item)Focal Frame/$ with a $(l:items/focus)$(item)Focus/$ to insert it; and I can craft a filled $(item)Focal Frame/$ by itself to remove the $(l:items/focus)$(item)Focus/$ from it, leaving the empty frame behind." + }, + }, splicing_table: { "": "Splicing Table", page: { @@ -152,47 +260,115 @@ "3": "I can select iotas (or the space between them) by clicking on them. Holding $(k:sneak) and clicking again allows me to select a range of iotas.$(br2)\ Additionally, there are dedicated buttons to select the entire list ($(thing)Select All/$) and to clear my selection ($(thing)Select None/$).$(br2)\ Selecting iotas allows me to unlock the true power of the $(l:items/splicing_table)$(item)Splicing Table/$: editing _Hexes.", - "4": "With $(l:items/splicing_table#cost)sufficient media/$, I can perform the following actions:\ + actions: "With $(l:items/splicing_table#cost)sufficient media/$, I can perform the following actions:\ $(li)$(thing)Nudge Left/$: Move the selected iota(s) one space to the left.\ $(li)$(thing)Nudge Right/$: Move the selected iota(s) one space to the right.\ $(li)$(thing)Delete/$: Remove the selected iota(s) from the list.\ $(li)$(thing)Duplicate/$: Create a copy of the selected iota(s).\ $(li)$(thing)Undo/$: Revert the last action performed.\ $(li)$(thing)Redo/$: Re-perform actions previously reverted with $(thing)Undo/$.", - "5": "For more advanced operations, some extra storage is required. I can place an iota-holding item in the slot to the left to unlock the following actions:\ + secondary: "For more advanced operations, some extra storage is required. I can place an iota-holding item in the slot to the left to unlock the following actions:\ $(li)$(thing)Copy/$: Write the selected iota(s) to a new list in the secondary item.\ $(li)$(thing)Cut/$: Same as $(thing)Copy/$, but also delete the selected iota(s).\ $(li)$(thing)Paste/$: Replace the selected iota(s) with the iota in the secondary item. If the iota is a list, its contents are pasted instead; I can override this by holding $(k:sneak).", - "6": "Finally, I can insert a $(l:items/staff)$(item)Staff/$ into the lower left slot to reveal a miniature casting grid. Patterns drawn on this grid are inserted directly into the list, overwriting any selected iotas.$(br2)\ + staff: "Finally, I can insert a $(l:items/staff)$(item)Staff/$ into the lower left slot to reveal a miniature casting grid. Patterns drawn on this grid are inserted directly into the list, overwriting any selected iotas.$(br2)\ There are also six general-purpose inventory slots on the right side. These have no special functionality; they're just a convenient place to store a few extra items.", cost: "Unfortunately, all of this incredible versatility comes at a cost. In order to modify the contents of items, _media is required - about a tenth of one $(l:items/amethyst)$(item)Amethyst Dust/$ per action performed.$(br2)\ I can supply _media to the $(l:items/splicing_table)$(item)Splicing Table/$ by putting it in the lower right slot. The table will consume up to ten $(l:items/amethyst)$(item)Amethyst Dust/$ at once; any surplus is ignored until it can be consumed without wasting _media.", + patterns: "If this small cost is prohibitive, or if I wish to perform more complicated actions than those previously described, there is another option. I can use patterns such as $(l:patterns/readwrite_blocks#hexcasting:read/entity)$(action)Chronicler's Purification/$ to manipulate the contents of the item in the main slot, and I've devised some $(l:patterns/splicing_table)specialized patterns/$ to control other aspects of the splicing table.$(br2)\ + Now, if only I could make the table think for itself...", recipe: "$(italic)She plugged in strings one after the other, the tiny metal cubes flying in and out as her fingers danced over the tray with blinding speed./$", }, }, }, }, + greatwork: { + entry: { + enlightened_splicing_table: { + "": "Mindsplice Table", + page: { + "1": "The $(l:items/splicing_table)$(item)Splicing Table/$ is fine. Adequate. But limited, oh so limited. I have $(italic)seen/$ what is possible now, and I must have it, no matter the cost.$(br2)\ + I shall MAKE the table think for itself.", + "2": "A solution. Yes. Familiar -- almost $(italic)simple/$ in its infinite complexity. As with my $(l:greatwork/impetus)previous insights/$, I can specialize a mind -- sever it from the body, redirect, connect, rewire, $(italic)transform/$ -- for the task at hand. Like an $(l:greatwork/impetus)$(item)Impetus/$... but greater, more complicated, more and more and more and more and-- I MUST FOCUS.", + recipe: "Another $(l:greatwork/brainsweeping)$(thing)mindflaying/$ ritual. The task demanded of the mind is almost identical to that of a $(l:greatwork/impetus)$(item)Toolsmith Impetus/$, but more experience is required for this specialized, intricate work.", + "3": "The resulting $(thing)Mindsplice Table/$ is almost the same as before, but transmuted, $(italic)improved/$, in a single all-important way. With a mind to channel the patterns, the table can cast $(italic)any/$ _Hex almost effortlessly, triggered by nothing more than the press of a button.$(br)\ + A small $(l:items/splicing_table#cost)infusion/$ of media is still required to initiate the process -- wasteful, but perhaps less so than my archaic, short-sighted designs of old. For spells, media is drawn from the same source.", + "4": "Of course, the flayed mind has limits. It must be $(italic)taught/$; even such a skilled mind cannot predict my needs without some guidance. Unlike an $(l:greatwork/impetus)$(item)Impetus/$, however, slates are not required -- the commands are instead $(l:patterns/enlightened_splicing_table)$(thing)imbued/$ directly into the mind, rewriting its neural pathways and leaving it no choice but to carry out my will.", + "5": "To facilitate even more complicated operations -- one $(thing)Mindsplice Table/$ controlling, $(italic)dominating/$, the next, and so on and so on and so on and so on and so on into eternity, if I have the patience and $(l:casting/mishaps)capacity/$ to use it -- the table's influence extends a small distance (four blocks, no more and no less) from the table. Small, yes, but perfectly adequate for most purposes. If more space is needed, my $(l:patterns/great_spells/greater_sentinel#hexcasting:sentinel/create/great)$(action)Greater Sentinel/$ can be used.", + }, + }, + }, + }, + patterns: { entry: { debugging: { - "": "Debugging", + "": "Debugging Patterns", page: { - "const/debugging": "Adds $(thing)True/$ to the top of the stack if executed by a $(l:items/debugging#debugger)$(item)Debugger/$ or $(l:items/debugging#evaluator)$(item)Evaluator/$, or $(thing)False/$ otherwise.", - "next_eval_index": "Adds the index of the next iota to be evaluated if executed by a $(l:items/debugging#debugger)$(item)Debugger/$ or $(l:items/debugging#evaluator)$(item)Evaluator/$, or $(l:casting/influences)$(thing)Null/$ otherwise.", + "const/debugging": "Add $(thing)True/$ to the top of the stack if executed by a $(l:items/debugging#debugger)$(item)Debugger/$ or $(l:items/debugging#evaluator)$(item)Evaluator/$, or $(thing)False/$ otherwise.", + "next_eval_index": "Add the index of the next iota to be evaluated if executed by a $(l:items/debugging#debugger)$(item)Debugger/$ or $(l:items/debugging#evaluator)$(item)Evaluator/$, or $(l:casting/influences)$(thing)Null/$ otherwise.", "const/cognitohazard": { - "1": "Adds a $(thing)Cognitohazard/$ to the top of the stack.", + "1": "Add a $(thing)Cognitohazard/$ to the top of the stack.", "2": "It seems certain $(l:items/debugging#evaluator)debugging tools/$ may pose a security risk for some $(l:patterns/meta#hexcasting:eval/cc)high-level techniques/$. To help combat this, I have created this pattern.$(br2)\ When a $(thing)Cognitohazard/$ iota is executed normally, nothing happens. However, if one is present in a _Hex executed by a $(l:items/debugging#debugger)$(item)Debugger/$, it will cause the _Hex to terminate $(italic)immediately/$ - even before the $(thing)Cognitohazard/$ is actually executed.", }, "breakpoint/": { - before: "Pauses the $(l:items/debugging#debugger)$(item)Debugger/$ before executing this pattern.", - after: "Pauses the $(l:items/debugging#debugger)$(item)Debugger/$ after executing this pattern (ie. before executing the next pattern).", + before: "Pause the $(l:items/debugging#debugger)$(item)Debugger/$ before executing this pattern.", + after: "Pause the $(l:items/debugging#debugger)$(item)Debugger/$ after executing this pattern (ie. before executing the next pattern).", }, - "craft/debugger": "Creates a $(l:items/debugging#debugger)$(item)Debugger/$ that casts a _Hex, similar to $(l:patterns/spells/hexcasting)certain other patterns/$ I've used in the past.$(br2)\ + "craft/debugger": "Create a $(l:items/debugging#debugger)$(item)Debugger/$ that casts a _Hex, similar to $(l:patterns/spells/hexcasting)certain other patterns/$ I've used in the past.$(br2)\ Costs about ten $(l:items/amethyst)$(item)Charged Amethyst/$.", }, }, + + splicing_table: { + "": "Splicing Table Patterns", + page: { + "view_index/": { + read: "Remove a vector from the stack, then push the index of the leftmost iota currently visible in the $(l:items/splicing_table)$(item)Splicing Table/$ at that position.", + write: "Remove a vector and number from the stack, then move the view of the $(l:items/splicing_table)$(item)Splicing Table/$ at that position so that the given index is the leftmost one visible.", + }, + "selection/": { + read: { + "1": "Remove a vector from the stack, then push two values representing the current selection in the $(l:items/splicing_table)$(item)Splicing Table/$ at that position.", + "2": "If a range of iotas is selected, two numbers are pushed, representing the start (inclusive) and end (exclusive) of the selected range. If the edge between two iotas is selected, the index of the iota to the right of the selected edge is pushed, followed by $(l:casting/influences)$(thing)Null/$. And if nothing is selected, $(l:casting/influences)$(thing)Null/$ is pushed twice.", + }, + write: "Remove a vector and two values from the stack, then set the selection of the $(l:items/splicing_table)$(item)Splicing Table/$ at that position as previously described.", + }, + "list/": { + "spellbook_index/": { + read: "Remove a vector from the stack, then push the current page number (starting at 1) of the $(l:items/spellbook)$(item)Spellbook/$ in the main slot of the $(l:items/splicing_table)$(item)Splicing Table/$ at that position.", + write: "Remove a vector and number from the stack, then flip the $(l:items/spellbook)$(item)Spellbook/$ in the main slot of the $(l:items/splicing_table)$(item)Splicing Table/$ at that position to the given page number.", + readable: "Replace the vector at the top of the stack with $(thing)True/$ if there is a $(l:items/splicing_table)$(item)Splicing Table/$ at that position with a $(l:items/spellbook)$(item)Spellbook/$ in its main slot that contains at least one page, or $(thing)False/$ otherwise.", + }, + }, + "clipboard/": { + read: "Remove a vector from the stack, then copy the contents of the secondary item in the $(l:items/splicing_table)$(item)Splicing Table/$ at that position and push it to the stack.", + write: "Remove a vector and iota from the stack, then save the iota into the secondary item in the $(l:items/splicing_table)$(item)Splicing Table/$ at that position.$(br)\ + As with $(l:patterns/readwrite_blocks#hexcasting:write/entity)$(action)Chronicler's Gambit/$, I cannot write my own Name using this spell.", + readable: "Replace the vector at the top of the stack with $(thing)True/$ if there is a $(l:items/splicing_table)$(item)Splicing Table/$ at that position containing a secondary item that I could read, or $(thing)False/$ otherwise.", + writable: "Replace the vector at the top of the stack with $(thing)True/$ if there is a $(l:items/splicing_table)$(item)Splicing Table/$ at that position containing a secondary item that I could save an iota into, or $(thing)False/$ otherwise.", + "spellbook_index/": { + read: "Like $(l:patterns/splicing_table#hexdebug:splicing/list/spellbook_index/read)$(action)Projectionist's Purification/$, but the page number of the $(l:items/spellbook)$(item)Spellbook/$ in the secondary slot is read instead of the main slot.", + write: "Like $(l:patterns/splicing_table#hexdebug:splicing/list/spellbook_index/write)$(action)Projectionist's Gambit/$, but the page number of the $(l:items/spellbook)$(item)Spellbook/$ in the secondary slot is written instead of the main slot.", + readable: "Like $(l:patterns/splicing_table#hexdebug:splicing/list/spellbook_index/readable)$(action)Shutter's Purification/$, but the $(l:items/spellbook)$(item)Spellbook/$ in the secondary slot is checked instead of the main slot.", + }, + }, + }, + }, + + enlightened_splicing_table: { + "": "Mindsplice Table Patterns", + page: { + "hex/": { + read: "Remove a vector from the stack, then push the _Hex currently imbued to the $(l:greatwork/enlightened_splicing_table)$(item)Mindsplice Table/$ at that position, or $(l:casting/influences)$(thing)Null/$ if it has not yet been imbued.", + write: "Remove a vector and list of patterns from the stack, then imbue the list of patterns into the $(l:greatwork/enlightened_splicing_table)$(item)Mindsplice Table/$ at that position.$(br)\ + Costs about five $(l:items/amethyst)$(item)Charged Amethyst/$.", + }, + circle: "In addition to these patterns, I can also cast $(l:patterns/circle#hexcasting:circle/impetus_pos)$(action)Waystone Reflection/$ and $(l:patterns/circle#hexcasting:circle/impetus_dir)$(action)Lodestone Reflection/$ from within a $(l:greatwork/enlightened_splicing_table)$(item)Mindsplice Table/$. However, trying to cast them through a $(l:items/staff)$(item)Staff/$, or trying to cast other $(l:greatwork/spellcircles)$(item)Spell Circle/$-only patterns through a $(l:greatwork/enlightened_splicing_table)$(item)Mindsplice Table/$, will still fail rather spectacularly.", + }, + } }, }, }, diff --git a/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 b/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 index 2f3145da54cb..5bee1c32975c 100644 --- a/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 +++ b/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 @@ -6,7 +6,8 @@ "block.hexdebug": { splicing_table: "Splicing Table", - focus_holder: "Focus Holder", + enlightened_splicing_table: "Mindsplice Table", + focus_holder: "Focal Frame", }, "itemGroup.hexdebug": "HexDebug", @@ -22,7 +23,11 @@ splicing_table: { button: { view_left: "Move View Left", + view_left_page: "Move View to Previous Page", + view_left_full: "Move View to Start", view_right: "Move View Right", + view_right_page: "Move View to Next Page", + view_right_full: "Move View to End", select_none: "Select None", select_all: "Select All", clear_grid: "Clear Grid", @@ -37,6 +42,7 @@ paste: "Paste (Verbatim)", paste_splat: "Paste (Flattened)", export: "Export as .hexpattern", + cast: "Activate Table", }, tooltip: { index: "Index: %d", @@ -77,32 +83,124 @@ showDebugClientLineNumber: { "": "Show Debug Client Line Number", "@Tooltip": "If true, show the line number (usually 1-indexed) from the debug client (eg. VSCode) in Debugger status messages; otherwise, show the list index (0-indexed)." + }, + invertSplicingTableScrollDirection: { + "": "Invert Splicing Table Scroll Direction", + "@Tooltip": "Whether scrolling up (as opposed to down) will increase the view index of the splicing table, and vice versa.", } }, server: { maxUndoStackSize: { "": "Undo History Size Limit", "@Tooltip": "Maximum allowed size of the Splicing Table's undo history. To disable the limit, set the value to 0.", - } - } + }, + splicingTableMediaCost: { + "": "Splicing Table Media Cost", + "@Tooltip": "How many points of media to consume when performing an action in a Splicing Table.", + }, + splicingTableMaxMedia: { + "": "Splicing Table Max Media", + "@Tooltip": "How many points of media to consume when performing an action in a Splicing Table.", + }, + splicingTableCastingCooldown: { + "": "Mindsplice Table Casting Cooldown", + "@Tooltip": "Cooldown in ticks for the Mindsplice Table's casting button.", + }, + splicingTableAmbit: { + "": "Mindsplice Table Ambit", + "@Tooltip": "Ambit radius in blocks for the Mindsplice Table.", + }, + }, }, }, }, - "hexcasting.action": { - "hexdebug:": { - "const/debugging": "Debugger's Reflection", - "next_eval_index": "Debug Locator's Reflection", // TODO: this name kinda sucks tbh - "const/cognitohazard": "Cognitohazard Reflection", - "breakpoint/": { - before: "Set Breakpoint Before", - after: "Set Breakpoint After" + hexcasting: { + action: { + "hexdebug:": { + "const/debugging": "Debugger's Reflection", + "next_eval_index": "Debug Locator's Reflection", // TODO: this name kinda sucks tbh + "const/cognitohazard": "Cognitohazard Reflection", + "breakpoint/": { + before: "Set Breakpoint Before", + after: "Set Breakpoint After" + }, + "craft/debugger": "Craft Debugger", + "splicing/": { + "view_index/": { + read: "Sprocket's Purification", + write: "Sprocket's Gambit", + }, + "selection/": { + read: "Splicer's Decomposition", + write: "Splicer's Gambit", + }, + "list/": { + "spellbook_index/": { + read: "Projectionist's Purification", + write: "Projectionist's Gambit", + readable: "Shutter's Purification" + }, + }, + "clipboard/": { + read: "Compositor's Purification", + write: "Compositor's Gambit", + readable: "Producer's Purification", + writable: "Director's Purification", + "spellbook_index/": { + read: "Projectionist's Purification II", + write: "Projectionist's Gambit II", + readable: "Shutter's Purification II", + }, + }, + "enlightened/": { + "hex/": { + read: "Mindsplice Purification", // TODO: bad name + write: "Imbue Mindsplice Table", + }, + }, + }, + }, + "book.hexdebug:": { + "next_eval_index": "Debug Locator's Rfln.", + "const/cognitohazard": "Cognitohazard Rfln.", + "splicing/": { + "list/": { + "spellbook_index/": { + read: "Projectionist's Prfn.", + }, + }, + "clipboard/": { + read: "Compositor's Prfn.", + "spellbook_index/": { + read: "Projectionist's Prfn. II", + readable: "Shutter's Prfn. II", + }, + }, + }, }, - "craft/debugger": "Craft Debugger", }, - "book.hexdebug:": { - "next_eval_index": "Debug Locator's Rfln.", - "const/cognitohazard": "Cognitohazard Rfln." + + mishap: { + bad_block: { + splicing_table: { + "": "a Splicing Table", + enlightened: "a Mindsplice Table", + list: { + spellbook: "a Splicing Table with a non-empty spellbook in the main item slot", + }, + clipboard: { + read: "a Splicing Table with a readable secondary item", + write: "a Splicing Table with a writable secondary item", + spellbook: "a Splicing Table with a non-empty spellbook in the secondary item slot", + }, + }, + }, + invalid_value: { + int: { + positive_or_null: "a positive integer or null" + } + } }, }, @@ -142,6 +240,16 @@ thwonk: "$(italic)Thwonk!/$" }, }, + focus_holder: { + "": "Focal Frame", + page: { + "1": "$(l:items/focus)$(item)Foci/$ are useful for storing _Hexes and other iotas in my inventory, but I sometimes find myself in need of a way to store iotas in the world. Item frames are too fragile, and $(l:greatwork/akashiclib)other methods/$ are inefficient and... distasteful. A cleaner solution is necessary, and I've devised one in the form of the $(item)Focal Frame/$.", + "2": "A $(item)Focal Frame/$ by itself is useless; a $(l:items/focus)$(item)Focus/$ must first be inserted. I can do that through crafting, or by right-clicking a placed $(item)Focal Frame/$ with a $(l:items/focus)$(item)Focus/$. Right-clicking with an empty hand removes the $(l:items/focus)$(item)Focus/$ from the frame.$(br2)\ + As an item, I can use a filled $(item)Focal Frame/$ anywhere I would normally use a $(l:items/focus)$(item)Focus/$, including patterns such as $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$. When placed in the world, I can access it using patterns like $(l:patterns/readwrite_blocks#hexcasting:read/entity)$(action)Chronicler's Purification/$.", + recipe: "$(italic)Two thousand movies, four thousand albums, music and words and pictures like voices whispering from a sweet, sunny past./$", + "3": "In addition to these recipes, I can craft an empty $(item)Focal Frame/$ with a $(l:items/focus)$(item)Focus/$ to insert it; and I can craft a filled $(item)Focal Frame/$ by itself to remove the $(l:items/focus)$(item)Focus/$ from it, leaving the empty frame behind." + }, + }, splicing_table: { "": "Splicing Table", page: { @@ -152,47 +260,115 @@ "3": "I can select iotas (or the space between them) by clicking on them. Holding $(k:sneak) and clicking again allows me to select a range of iotas.$(br2)\ Additionally, there are dedicated buttons to select the entire list ($(thing)Select All/$) and to clear my selection ($(thing)Select None/$).$(br2)\ Selecting iotas allows me to unlock the true power of the $(l:items/splicing_table)$(item)Splicing Table/$: editing _Hexes.", - "4": "With $(l:items/splicing_table#cost)sufficient media/$, I can perform the following actions:\ + actions: "With $(l:items/splicing_table#cost)sufficient media/$, I can perform the following actions:\ $(li)$(thing)Nudge Left/$: Move the selected iota(s) one space to the left.\ $(li)$(thing)Nudge Right/$: Move the selected iota(s) one space to the right.\ $(li)$(thing)Delete/$: Remove the selected iota(s) from the list.\ $(li)$(thing)Duplicate/$: Create a copy of the selected iota(s).\ $(li)$(thing)Undo/$: Revert the last action performed.\ $(li)$(thing)Redo/$: Re-perform actions previously reverted with $(thing)Undo/$.", - "5": "For more advanced operations, some extra storage is required. I can place an iota-holding item in the slot to the left to unlock the following actions:\ + secondary: "For more advanced operations, some extra storage is required. I can place an iota-holding item in the slot to the left to unlock the following actions:\ $(li)$(thing)Copy/$: Write the selected iota(s) to a new list in the secondary item.\ $(li)$(thing)Cut/$: Same as $(thing)Copy/$, but also delete the selected iota(s).\ $(li)$(thing)Paste/$: Replace the selected iota(s) with the iota in the secondary item. If the iota is a list, its contents are pasted instead; I can override this by holding $(k:sneak).", - "6": "Finally, I can insert a $(l:items/staff)$(item)Staff/$ into the lower left slot to reveal a miniature casting grid. Patterns drawn on this grid are inserted directly into the list, overwriting any selected iotas.$(br2)\ + staff: "Finally, I can insert a $(l:items/staff)$(item)Staff/$ into the lower left slot to reveal a miniature casting grid. Patterns drawn on this grid are inserted directly into the list, overwriting any selected iotas.$(br2)\ There are also six general-purpose inventory slots on the right side. These have no special functionality; they're just a convenient place to store a few extra items.", cost: "Unfortunately, all of this incredible versatility comes at a cost. In order to modify the contents of items, _media is required - about a tenth of one $(l:items/amethyst)$(item)Amethyst Dust/$ per action performed.$(br2)\ I can supply _media to the $(l:items/splicing_table)$(item)Splicing Table/$ by putting it in the lower right slot. The table will consume up to ten $(l:items/amethyst)$(item)Amethyst Dust/$ at once; any surplus is ignored until it can be consumed without wasting _media.", + patterns: "If this small cost is prohibitive, or if I wish to perform more complicated actions than those previously described, there is another option. I can use patterns such as $(l:patterns/readwrite_blocks#hexcasting:read/entity)$(action)Chronicler's Purification/$ to manipulate the contents of the item in the main slot, and I've devised some $(l:patterns/splicing_table)specialized patterns/$ to control other aspects of the splicing table.$(br2)\ + Now, if only I could make the table think for itself...", recipe: "$(italic)She plugged in strings one after the other, the tiny metal cubes flying in and out as her fingers danced over the tray with blinding speed./$", }, }, }, }, + greatwork: { + entry: { + enlightened_splicing_table: { + "": "Mindsplice Table", + page: { + "1": "The $(l:items/splicing_table)$(item)Splicing Table/$ is fine. Adequate. But limited, oh so limited. I have $(italic)seen/$ what is possible now, and I must have it, no matter the cost.$(br2)\ + I shall MAKE the table think for itself.", + "2": "A solution. Yes. Familiar -- almost $(italic)simple/$ in its infinite complexity. As with my $(l:greatwork/impetus)previous insights/$, I can specialize a mind -- sever it from the body, redirect, connect, rewire, $(italic)transform/$ -- for the task at hand. Like an $(l:greatwork/impetus)$(item)Impetus/$... but greater, more complicated, more and more and more and more and-- I MUST FOCUS.", + recipe: "Another $(l:greatwork/brainsweeping)$(thing)mindflaying/$ ritual. The task demanded of the mind is almost identical to that of a $(l:greatwork/impetus)$(item)Toolsmith Impetus/$, but more experience is required for this specialized, intricate work.", + "3": "The resulting $(thing)Mindsplice Table/$ is almost the same as before, but transmuted, $(italic)improved/$, in a single all-important way. With a mind to channel the patterns, the table can cast $(italic)any/$ _Hex almost effortlessly, triggered by nothing more than the press of a button.$(br)\ + A small $(l:items/splicing_table#cost)infusion/$ of media is still required to initiate the process -- wasteful, but perhaps less so than my archaic, short-sighted designs of old. For spells, media is drawn from the same source.", + "4": "Of course, the flayed mind has limits. It must be $(italic)taught/$; even such a skilled mind cannot predict my needs without some guidance. Unlike an $(l:greatwork/impetus)$(item)Impetus/$, however, slates are not required -- the commands are instead $(l:patterns/enlightened_splicing_table)$(thing)imbued/$ directly into the mind, rewriting its neural pathways and leaving it no choice but to carry out my will.", + "5": "To facilitate even more complicated operations -- one $(thing)Mindsplice Table/$ controlling, $(italic)dominating/$, the next, and so on and so on and so on and so on and so on into eternity, if I have the patience and $(l:casting/mishaps)capacity/$ to use it -- the table's influence extends a small distance (four blocks, no more and no less) from the table. Small, yes, but perfectly adequate for most purposes. If more space is needed, my $(l:patterns/great_spells/greater_sentinel#hexcasting:sentinel/create/great)$(action)Greater Sentinel/$ can be used.", + }, + }, + }, + }, + patterns: { entry: { debugging: { - "": "Debugging", + "": "Debugging Patterns", page: { - "const/debugging": "Adds $(thing)True/$ to the top of the stack if executed by a $(l:items/debugging#debugger)$(item)Debugger/$ or $(l:items/debugging#evaluator)$(item)Evaluator/$, or $(thing)False/$ otherwise.", - "next_eval_index": "Adds the index of the next iota to be evaluated if executed by a $(l:items/debugging#debugger)$(item)Debugger/$ or $(l:items/debugging#evaluator)$(item)Evaluator/$, or $(l:casting/influences)$(thing)Null/$ otherwise.", + "const/debugging": "Add $(thing)True/$ to the top of the stack if executed by a $(l:items/debugging#debugger)$(item)Debugger/$ or $(l:items/debugging#evaluator)$(item)Evaluator/$, or $(thing)False/$ otherwise.", + "next_eval_index": "Add the index of the next iota to be evaluated if executed by a $(l:items/debugging#debugger)$(item)Debugger/$ or $(l:items/debugging#evaluator)$(item)Evaluator/$, or $(l:casting/influences)$(thing)Null/$ otherwise.", "const/cognitohazard": { - "1": "Adds a $(thing)Cognitohazard/$ to the top of the stack.", + "1": "Add a $(thing)Cognitohazard/$ to the top of the stack.", "2": "It seems certain $(l:items/debugging#evaluator)debugging tools/$ may pose a security risk for some $(l:patterns/meta#hexcasting:eval/cc)high-level techniques/$. To help combat this, I have created this pattern.$(br2)\ When a $(thing)Cognitohazard/$ iota is executed normally, nothing happens. However, if one is present in a _Hex executed by a $(l:items/debugging#debugger)$(item)Debugger/$, it will cause the _Hex to terminate $(italic)immediately/$ - even before the $(thing)Cognitohazard/$ is actually executed.", }, "breakpoint/": { - before: "Pauses the $(l:items/debugging#debugger)$(item)Debugger/$ before executing this pattern.", - after: "Pauses the $(l:items/debugging#debugger)$(item)Debugger/$ after executing this pattern (ie. before executing the next pattern).", + before: "Pause the $(l:items/debugging#debugger)$(item)Debugger/$ before executing this pattern.", + after: "Pause the $(l:items/debugging#debugger)$(item)Debugger/$ after executing this pattern (ie. before executing the next pattern).", }, - "craft/debugger": "Creates a $(l:items/debugging#debugger)$(item)Debugger/$ that casts a _Hex, similar to $(l:patterns/spells/hexcasting)certain other patterns/$ I've used in the past.$(br2)\ + "craft/debugger": "Create a $(l:items/debugging#debugger)$(item)Debugger/$ that casts a _Hex, similar to $(l:patterns/spells/hexcasting)certain other patterns/$ I've used in the past.$(br2)\ Costs about ten $(l:items/amethyst)$(item)Charged Amethyst/$.", }, }, + + splicing_table: { + "": "Splicing Table Patterns", + page: { + "view_index/": { + read: "Remove a vector from the stack, then push the index of the leftmost iota currently visible in the $(l:items/splicing_table)$(item)Splicing Table/$ at that position.", + write: "Remove a vector and number from the stack, then move the view of the $(l:items/splicing_table)$(item)Splicing Table/$ at that position so that the given index is the leftmost one visible.", + }, + "selection/": { + read: { + "1": "Remove a vector from the stack, then push two values representing the current selection in the $(l:items/splicing_table)$(item)Splicing Table/$ at that position.", + "2": "If a range of iotas is selected, two numbers are pushed, representing the start (inclusive) and end (exclusive) of the selected range. If the edge between two iotas is selected, the index of the iota to the right of the selected edge is pushed, followed by $(l:casting/influences)$(thing)Null/$. And if nothing is selected, $(l:casting/influences)$(thing)Null/$ is pushed twice.", + }, + write: "Remove a vector and two values from the stack, then set the selection of the $(l:items/splicing_table)$(item)Splicing Table/$ at that position as previously described.", + }, + "list/": { + "spellbook_index/": { + read: "Remove a vector from the stack, then push the current page number (starting at 1) of the $(l:items/spellbook)$(item)Spellbook/$ in the main slot of the $(l:items/splicing_table)$(item)Splicing Table/$ at that position.", + write: "Remove a vector and number from the stack, then flip the $(l:items/spellbook)$(item)Spellbook/$ in the main slot of the $(l:items/splicing_table)$(item)Splicing Table/$ at that position to the given page number.", + readable: "Replace the vector at the top of the stack with $(thing)True/$ if there is a $(l:items/splicing_table)$(item)Splicing Table/$ at that position with a $(l:items/spellbook)$(item)Spellbook/$ in its main slot that contains at least one page, or $(thing)False/$ otherwise.", + }, + }, + "clipboard/": { + read: "Remove a vector from the stack, then copy the contents of the secondary item in the $(l:items/splicing_table)$(item)Splicing Table/$ at that position and push it to the stack.", + write: "Remove a vector and iota from the stack, then save the iota into the secondary item in the $(l:items/splicing_table)$(item)Splicing Table/$ at that position.$(br)\ + As with $(l:patterns/readwrite_blocks#hexcasting:write/entity)$(action)Chronicler's Gambit/$, I cannot write my own Name using this spell.", + readable: "Replace the vector at the top of the stack with $(thing)True/$ if there is a $(l:items/splicing_table)$(item)Splicing Table/$ at that position containing a secondary item that I could read, or $(thing)False/$ otherwise.", + writable: "Replace the vector at the top of the stack with $(thing)True/$ if there is a $(l:items/splicing_table)$(item)Splicing Table/$ at that position containing a secondary item that I could save an iota into, or $(thing)False/$ otherwise.", + "spellbook_index/": { + read: "Like $(l:patterns/splicing_table#hexdebug:splicing/list/spellbook_index/read)$(action)Projectionist's Purification/$, but the page number of the $(l:items/spellbook)$(item)Spellbook/$ in the secondary slot is read instead of the main slot.", + write: "Like $(l:patterns/splicing_table#hexdebug:splicing/list/spellbook_index/write)$(action)Projectionist's Gambit/$, but the page number of the $(l:items/spellbook)$(item)Spellbook/$ in the secondary slot is written instead of the main slot.", + readable: "Like $(l:patterns/splicing_table#hexdebug:splicing/list/spellbook_index/readable)$(action)Shutter's Purification/$, but the $(l:items/spellbook)$(item)Spellbook/$ in the secondary slot is checked instead of the main slot.", + }, + }, + }, + }, + + enlightened_splicing_table: { + "": "Mindsplice Table Patterns", + page: { + "hex/": { + read: "Remove a vector from the stack, then push the _Hex currently imbued to the $(l:greatwork/enlightened_splicing_table)$(item)Mindsplice Table/$ at that position, or $(l:casting/influences)$(thing)Null/$ if it has not yet been imbued.", + write: "Remove a vector and list of patterns from the stack, then imbue the list of patterns into the $(l:greatwork/enlightened_splicing_table)$(item)Mindsplice Table/$ at that position.$(br)\ + Costs about five $(l:items/amethyst)$(item)Charged Amethyst/$.", + }, + circle: "In addition to these patterns, I can also cast $(l:patterns/circle#hexcasting:circle/impetus_pos)$(action)Waystone Reflection/$ and $(l:patterns/circle#hexcasting:circle/impetus_dir)$(action)Lodestone Reflection/$ from within a $(l:greatwork/enlightened_splicing_table)$(item)Mindsplice Table/$. However, trying to cast them through a $(l:items/staff)$(item)Staff/$, or trying to cast other $(l:greatwork/spellcircles)$(item)Spell Circle/$-only patterns through a $(l:greatwork/enlightened_splicing_table)$(item)Mindsplice Table/$, will still fail rather spectacularly.", + }, + } }, }, }, diff --git a/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 b/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 index db0dcbb6ddfe..0ea6a413f4e8 100644 --- a/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 +++ b/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 @@ -6,7 +6,8 @@ "block.hexdebug": { splicing_table: "剪接台", - focus_holder: "核心装载器", + enlightened_splicing_table: "制念台", + focus_holder: "核心框架", }, "itemGroup.hexdebug": "咒法调试", @@ -22,7 +23,11 @@ splicing_table: { button: { view_left: "向左移动视野", + view_left_page: "将视野移动到上一页", + view_left_full: "将视野移动到开头", view_right: "向右移动视野", + view_right_page: "将视野移动到下一页", + view_right_full: "将视野移动到末尾", select_none: "取消选区", select_all: "全选", clear_grid: "清空网格", @@ -37,6 +42,7 @@ paste: "粘贴(逐项)", paste_splat: "粘贴(扁平化)", export: "导出为.hexpattern文件", + cast: "激活编辑台", }, tooltip: { index: "索引下标:%d", @@ -77,32 +83,124 @@ showDebugClientLineNumber: { "": "显示调试客户端行号", "@Tooltip": "若设为true,显示调试客户端(如VSCode)的行号,通常以1起始;否则显示列表索引下标,以0起始。" + }, + invertSplicingTableScrollDirection: { + "": "反转剪接台滚轮方向", + "@Tooltip": "是否在向上滚动滚轮(反之则向下)时增加剪接台的视野索引。自动为反向滚动绑定减小索引操作。", } }, server: { maxUndoStackSize: { "": "撤销历史步数上限", "@Tooltip": "剪接台撤销历史的长度上限。设为0可禁用上限。", - } - } + }, + splicingTableMediaCost: { + "": "剪接台媒质消耗", + "@Tooltip": "在剪接台中执行操作消耗的媒质量。", + }, + splicingTableMaxMedia: { + "": "剪接台最大媒质量", + "@Tooltip": "剪接台的最大媒质容量。", + }, + splicingTableCastingCooldown: { + "": "制念台施法冷却", + "@Tooltip": "制念台施法按钮的冷却时间,以刻计。", + }, + splicingTableAmbit: { + "": "制念台影响范围", + "@Tooltip": "制念台的影响范围半径,以格计。", + }, + }, }, }, }, - "hexcasting.action": { - "hexdebug:": { - "const/debugging": "调试杖之精思", - "next_eval_index": "调试位之精思", // TODO: this name kinda sucks tbh - "const/cognitohazard": "认知危害之精思", - "breakpoint/": { - before: "在前方添加断点", - after: "在后方添加断点" + hexcasting: { + action: { + "hexdebug:": { + "const/debugging": "调试杖之精思", + "next_eval_index": "调试位之精思", // TODO: this name kinda sucks tbh + "const/cognitohazard": "认知危害之精思", + "breakpoint/": { + before: "在前方添加断点", + after: "在后方添加断点" + }, + "craft/debugger": "制作调试杖", + "splicing/": { + "view_index/": { + read: "链轮之纯化", + write: "链轮之策略", + }, + "selection/": { + read: "剪接器之分解", + write: "剪接器之策略", + }, + "list/": { + "spellbook_index/": { + read: "放映员之纯化", + write: "放映员之策略", + readable: "快门之纯化" + }, + }, + "clipboard/": { + read: "排版员之纯化", + write: "排版员之策略", + readable: "制作人之纯化", + writable: "导演之纯化", + "spellbook_index/": { + read: "放映员之纯化,第二型", + write: "放映员之策略,第二型", + readable: "快门之纯化,第二型", + }, + }, + "enlightened/": { + "hex/": { + read: "制念之纯化", // TODO: bad name + write: "融注制念台", + }, + }, + }, + }, + "book.hexdebug:": { + "next_eval_index": "调试位之精思", + "const/cognitohazard": "认知危害之精思", + "splicing/": { + "list/": { + "spellbook_index/": { + read: "放映员之纯化", + }, + }, + "clipboard/": { + read: "排版员之纯化", + "spellbook_index/": { + read: "放映员之纯化,第二型", + readable: "快门之纯化,第二型", + }, + }, + }, }, - "craft/debugger": "制作调试杖", }, - "book.hexdebug:": { - "next_eval_index": "调试位之精思", - "const/cognitohazard": "认知危害之精思" + + mishap: { + bad_block: { + splicing_table: { + "": "一个剪接台", + enlightened: "一个制念台", + list: { + spellbook: "主物品槽中有非空法术书的剪接台", + }, + clipboard: { + read: "放有可读副物品的剪接台", + write: "放有可写副物品的剪接台", + spellbook: "副物品槽中有非空法术书的剪接台", + }, + }, + }, + invalid_value: { + int: { + positive_or_null: "一个正整数或Null" + } + } }, }, @@ -142,6 +240,16 @@ thwonk: "$(italic)哐啷!/$" }, }, + focus_holder: { + "": "核心框架", + page: { + "1": "$(l:items/focus)$(item)核心/$可用于在物品栏中存储$(hex)咒术/$和其他 iota,但总有些时候我会需要在世界中存储 iota。物品展示框太脆弱,$(l:greatwork/akashiclib)其他做法/$又太低效而且也……不道德。我需要更优雅的方法,最终成功借助$(item)核心框架/$实现了。", + "2": "$(item)核心框架/$自身没有用处,必须先向其放入一枚$(l:items/focus)$(item)核心/$。可以选择合成两者,也可用$(l:items/focus)$(item)核心/$右击放置出来的$(item)核心框架/$。空手右击可从框架中取出$(l:items/focus)$(item)核心/$。$(br2)\ + 物品形态下,装有核心的$(item)核心框架/$相当于一枚$(l:items/focus)$(item)核心/$,适用于核心的操作同样适用于框架,包括$(l:patterns/readwrite#hexcasting:read)$(action)书吏之精思/$等图案。放置后,可使用$(l:patterns/readwrite_blocks#hexcasting:read/entity)$(action)编年史家之纯化/$等图案访问。", + recipe: "$(italic)两千部电影,四千部专辑,音乐、词句、图片,都仿佛诉说着过去阳光明媚的甜蜜日子。/$", + "3": "在之前提到的配方之外,我还可以在合成$(item)核心框架/$时直接放入$(l:items/focus)$(item)核心/$。将装有核心的$(item)核心框架/$单独放入合成方格合成,也可以取出其中$(l:items/focus)$(item)核心/$,并留下空的框架。" + }, + }, splicing_table: { "": "剪接台", page: { @@ -152,31 +260,51 @@ "3": "点击 iota 及 iota 间的空位可选择它们。按住 $(k:sneak) 再次点击则可选择一系列 iota。$(br2)\ 此外,还有按钮专为选择整个列表($(thing)全选/$)和清空选择区域($(thing)取消选区/$)。$(br2)\ 选择 iota 能解锁$(l:items/splicing_table)$(item)剪接台/$的真正力量:编辑$(hex)咒术/$。", - "4": "只要$(l:items/splicing_table#cost)媒质充足/$,即可执行以下操作:\ + actions: "只要$(l:items/splicing_table#cost)媒质充足/$,即可执行以下操作:\ $(li)$(thing)左移/$:将所选 iota 向左移动一格。\ $(li)$(thing)右移/$:将所选 iota 向右移动一格。\ $(li)$(thing)删除/$:从列表中移除所选 iota。\ $(li)$(thing)重复/$:创建所选 iota 的副本。\ $(li)$(thing)撤销/$:撤回最近一次操作。\ $(li)$(thing)重做/$:重做$(thing)撤销/$所撤回的操作。", - "5": "更高级的操作需要额外存储空间。可在左侧槽位中放入可存储 iota 的物品,以解锁以下操作:\ + secondary: "更高级的操作需要额外存储空间。可在左侧槽位中放入可存储 iota 的物品,以解锁以下操作:\ $(li)$(thing)复制/$:将所选 iota 作为列表写入辅助物品。\ $(li)$(thing)剪切/$:与$(thing)复制/$功能一致,不过原本选择的 iota 会被删除。\ $(li)$(thing)粘贴/$:使用辅助物品中的 iota 覆盖所选的 iota。如果用于覆盖的 iota 是列表,则会粘贴其中内容;按住 $(k:sneak) 可改为粘贴列表本身。", - "6": "最后,还可向左下角槽位放入$(l:items/staff)$(item)法杖/$,以显示微缩版的咒术网格。在该网格中绘制的图案会直接插入列表,覆盖选中的 iota。$(br2)\ + staff: "最后,还可向左下角槽位放入$(l:items/staff)$(item)法杖/$,以显示微缩版的咒术网格。在该网格中绘制的图案会直接插入列表,覆盖选中的 iota。$(br2)\ 右侧还有 6 个通用物品槽。这些槽位没有特殊功能,只是方便存放物品。", cost: "可惜的是,这种强大的功能有其代价。修改物品的 iota 存储空间需要消耗$(media)媒质/$——每次操作消耗大约 1/10 个$(l:items/amethyst)$(item)紫水晶粉/$。$(br2)\ 右下角的槽位可用于向$(l:items/splicing_table)$(item)剪接台/$补充$(media)媒质/$。单次最多可补充 10 个$(l:items/amethyst)$(item)紫水晶粉/$;多出的会被忽略,直至出现足够完全接收新$(media)媒质/$物品的缺口,才会进行消耗。", + patterns: "如果这里提到的消耗还是难以承受,或是想要执行比之前提到的更复杂的操作,那就还有一种做法。可以使用$(l:patterns/readwrite_blocks#hexcasting:read/entity)$(action)编年史家之纯化/$等图案操纵主槽位中的事物,我也为此设计了若干$(l:patterns/splicing_table)专用的图案/$,以控制剪接台其他方面的状态。$(br2)\ + 接下来的突破点,就在于如何让剪接台自行思考了……", recipe: "$(italic)看着她一个接一个接上铭印串,随着她的手指以快得几乎看不见的速度在托盘上舞动,小金属方块飞入飞出。/$", }, }, }, }, + greatwork: { + entry: { + enlightened_splicing_table: { + "": "制念台", + page: { + "1": "$(l:items/splicing_table)$(item)剪接台/$还可以。能堪其任。但有限制,且限制极大。我已$(italic)见到/$它的能力,我必须达到它的极限,无论代价如何。$(br2)\ + 我$(l)要/$让剪接台具有思维。", + "2": "解决方案。当然。很熟悉——对其无穷的复杂性而言都能说是$(italic)简单/$了。就和我$(l:greatwork/impetus)先前的洞察与领悟一样/$,我可特种化意识——将其从躯体中剥离,重新导向、连接、改造、$(italic)变形/$——令其贴合任务的需求。像是$(l:greatwork/impetus)$(item)促动石/$……但更加卓越,更加复杂,更加更加更加更加更——集、中、精、神。", + recipe: "另一种$(l:greatwork/brainsweeping)$(thing)意识剥离/$仪式。它对意识的要求与$(l:greatwork/impetus)$(item)工具匠促动石/$的几乎没有区别,但由于它的功能更为领域和精密,意识也相应需要积累更多的经验。", + "3": "所得的$(thing)制念台/$与先前基本一致,但已经过嬗变和$(italic)改进/$,经历了至关重要的变化。制念台的意识能够介导图案,也就能几乎不费吹灰之力施放$(italic)任意/$$(hex)咒术/$;只需要按一下按钮,一切就都能化作现实。$(br)\ + 启动这一过程仍需要$(l:items/splicing_table#cost)灌注/$少量媒质——确实浪费,但也许比古代那些过时、短视的设计要好些。法术需要的媒质也会从这里抽取。", + "4": "当然,剥离出来的意识也有局限。我必须先$(italic)教会/$它做事;就算是如此熟练的意识,也没法只靠猜谜就猜中我的意图。和$(l:greatwork/impetus)$(item)促动石/$不一样的是,它不需要石板——命令要直接$(l:patterns/enlightened_splicing_table)$(thing)融注/$入它的意识,直接覆写它的神经通路,让它只能随着我的意志做事。", + "5": "而为实现更复杂的操作——要是有耐心和$(l:casting/mishaps)气量/$的话,让$(thing)制念台/$控制、$(italic)统领/$、另一个制念台、周而复始、周而复始周而复始周而复始周而复始直到无穷——制念台能小范围延展其影响力(恰好 4 格)。确实不算大,但足够绝大多数情况用了。若是需要更大的范围,可以用我的$(l:patterns/great_spells/greater_sentinel#hexcasting:sentinel/create/great)$(action)卓越哨卫/$。", + }, + }, + }, + }, + patterns: { entry: { debugging: { - "": "调试", + "": "调试图案", page: { "const/debugging": "若栈由$(l:items/debugging#debugger)$(item)调试杖/$或$(l:items/debugging#evaluator)$(item)运行杖/$执行,则返回 $(thing)True/$;否则返回 $(thing)False/$。", "next_eval_index": "若栈由$(l:items/debugging#debugger)$(item)调试杖/$或$(l:items/debugging#evaluator)$(item)运行杖/$执行,则返回下一个待执行 iota 的索引下标;否则返回 $(l:casting/influences)$(thing)Null/$。", @@ -193,6 +321,54 @@ $(br2)消耗大约 10 个$(l:items/amethyst)$(item)充能紫水晶/$。", }, }, + + splicing_table: { + "": "剪接台图案", + page: { + "view_index/": { + read: "移除栈顶向量,返回该处$(l:items/splicing_table)$(item)剪接台/$视野最左侧 iota 的索引下标。", + write: "移除栈顶向量和数,移动该处$(l:items/splicing_table)$(item)剪接台/$的视野,以让所给下标的元素在视野最左侧。", + }, + "selection/": { + read: { + "1": "移除栈顶向量,返回代表该处$(l:items/splicing_table)$(item)剪接台/$当前选中区域的两个值。", + "2": "若选中一定范围的 iota,则返回两个数,分别对应起始(包含)和结束(不包含)位置。如果选中了两 iota 间的边沿,则返回边沿右侧 iota 的索引下标,同时再返回一个 $(l:casting/influences)$(thing)Null/$。如果未选中任何东西,则返回两个 $(l:casting/influences)$(thing)Null/$。", + }, + write: "移除栈顶向量和两个值,按照前页描述根据所给的两个值设置该处$(l:items/splicing_table)$(item)剪接台/$的选中区域。", + }, + "list/": { + "spellbook_index/": { + read: "移除栈顶向量,返回该处$(l:items/splicing_table)$(item)剪接台/$主槽位中$(l:items/spellbook)$(item)法术书/$当前的页码(以 1 起始)。", + write: "移除栈顶向量和数,将该处$(l:items/splicing_table)$(item)剪接台/$主槽位中的$(l:items/spellbook)$(item)法术书/$翻到对应页。", + readable: "若所给向量处有$(l:items/splicing_table)$(item)剪接台/$,且其主槽位中法术书至少有一页记有内容,则将该向量替换为 $(thing)True/$;否则返回 $(thing)False/$。", + }, + }, + "clipboard/": { + read: "移除栈顶向量,复制该处$(l:items/splicing_table)$(item)剪接台/$副槽位中物品的存储内容并返回。", + write: "移除栈顶向量和 iota,将该 iota 保存至该处$(l:items/splicing_table)$(item)剪接台/$副槽位中的物品。$(br)\ + 和$(l:patterns/readwrite_blocks#hexcasting:write/entity)$(action)编年史家之策略/$类似,我不可用此图案写入我的真名。", + readable: "若所给向量处有$(l:items/splicing_table)$(item)剪接台/$,且其副槽位物品可读,则将该向量替换为 $(thing)True/$;否则返回 $(thing)False/$。", + writable: "若所给向量处有$(l:items/splicing_table)$(item)剪接台/$,且其副槽位物品可写,则将该向量替换为 $(thing)True/$;否则返回 $(thing)False/$。", + "spellbook_index/": { + read: "与$(l:patterns/splicing_table#hexdebug:splicing/list/spellbook_index/read)$(action)放映员之纯化/$类似,但会读取副槽位中$(l:items/spellbook)$(item)法术书/$当前的页码,而非主槽位。", + write: "与$(l:patterns/splicing_table#hexdebug:splicing/list/spellbook_index/write)$(action)放映员之策略/$类似,但会修改副槽位中$(l:items/spellbook)$(item)法术书/$当前的页码,而非主槽位。", + readable: "与$(l:patterns/splicing_table#hexdebug:splicing/list/spellbook_index/readable)$(action)快门之纯化/$类似,但会检验副槽位中的$(l:items/spellbook)$(item)法术书/$,而非主槽位。", + }, + }, + }, + }, + + enlightened_splicing_table: { + "": "制念台图案", + page: { + "hex/": { + read: "移除栈顶向量,返回该处$(l:greatwork/enlightened_splicing_table)$(item)制念台/$当前融注的$(hex)咒术/$,若尚未融注则返回 $(l:casting/influences)$(thing)Null/$。", + write: "移除栈顶向量和图案列表,将该列表融注到该处$(l:greatwork/enlightened_splicing_table)$(item)制念台/$中。$(br)\ + 消耗大约 5 个$(l:items/amethyst)$(item)充能紫水晶/$。", + }, + circle: "在此之外,我还可以在$(l:greatwork/enlightened_splicing_table)$(item)制念台/$中施放$(l:patterns/circle#hexcasting:circle/impetus_pos)$(action)指路石之精思/$和$(l:patterns/circle#hexcasting:circle/impetus_dir)$(action)磁石之精思/$。不过,若是试图用$(l:items/staff)$(item)法杖/$施放,或是在$(l:greatwork/enlightened_splicing_table)$(item)制念台/$中试图施放其他仅限$(l:greatwork/spellcircles)$(item)法术环/$的图案,则仍然会招致可怖的事故。", + }, + } }, }, }, From 38732c9c8e03148736f2128411243c16fd235370 Mon Sep 17 00:00:00 2001 From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com> Date: Sun, 21 Sep 2025 03:22:10 +0800 Subject: [PATCH 05/14] HexDebug fix --- .../hexdebug/hexdebug/lang/zh_cn.flatten.json5 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 b/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 index 0ea6a413f4e8..590d56b9166f 100644 --- a/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 +++ b/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 @@ -128,8 +128,8 @@ "craft/debugger": "制作调试杖", "splicing/": { "view_index/": { - read: "链轮之纯化", - write: "链轮之策略", + read: "齿孔胶片之纯化", + write: "齿孔胶片之策略", }, "selection/": { read: "剪接器之分解", @@ -143,9 +143,9 @@ }, }, "clipboard/": { - read: "排版员之纯化", - write: "排版员之策略", - readable: "制作人之纯化", + read: "合成师之纯化", + write: "合成师之策略", + readable: "制片人之纯化", writable: "导演之纯化", "spellbook_index/": { read: "放映员之纯化,第二型", @@ -171,7 +171,7 @@ }, }, "clipboard/": { - read: "排版员之纯化", + read: "合成师之纯化", "spellbook_index/": { read: "放映员之纯化,第二型", readable: "快门之纯化,第二型", From fae4127219fe03bf3a7b3bcdaa67d3cc18eb9796 Mon Sep 17 00:00:00 2001 From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com> Date: Mon, 22 Sep 2025 21:27:17 +0800 Subject: [PATCH 06/14] =?UTF-8?q?HexDebug=20update=EF=BC=9A=E5=AE=98?= =?UTF-8?q?=E5=BA=93=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hexdebug/hexdebug/lang/en_us.flatten.json5 | 12 ++++++++++-- .../hexdebug/hexdebug/lang/en_us.flatten.json5 | 12 ++++++++++-- .../hexdebug/hexdebug/lang/zh_cn.flatten.json5 | 12 ++++++++++-- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 b/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 index 5bee1c32975c..59bb9ad5e256 100644 --- a/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 +++ b/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 @@ -39,7 +39,7 @@ redo: "Redo", cut: "Cut", copy: "Copy", - paste: "Paste (Verbatim)", + paste_verbatim: "Paste (Verbatim)", paste_splat: "Paste (Flattened)", export: "Export as .hexpattern", cast: "Activate Table", @@ -87,7 +87,15 @@ invertSplicingTableScrollDirection: { "": "Invert Splicing Table Scroll Direction", "@Tooltip": "Whether scrolling up (as opposed to down) will increase the view index of the splicing table, and vice versa.", - } + }, + splicingTableKeybinds: { + "": "Splicing Table Keybinds", + "@Tooltip": "Keybinds for actions in the Splicing Table GUI.", + }, + enlightenedSplicingTableKeybinds: { + "": "Mindsplice Table Keybinds", + "@Tooltip": "Keybinds for actions in the Mindsplice Table GUI.", + }, }, server: { maxUndoStackSize: { diff --git a/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 b/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 index 5bee1c32975c..59bb9ad5e256 100644 --- a/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 +++ b/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 @@ -39,7 +39,7 @@ redo: "Redo", cut: "Cut", copy: "Copy", - paste: "Paste (Verbatim)", + paste_verbatim: "Paste (Verbatim)", paste_splat: "Paste (Flattened)", export: "Export as .hexpattern", cast: "Activate Table", @@ -87,7 +87,15 @@ invertSplicingTableScrollDirection: { "": "Invert Splicing Table Scroll Direction", "@Tooltip": "Whether scrolling up (as opposed to down) will increase the view index of the splicing table, and vice versa.", - } + }, + splicingTableKeybinds: { + "": "Splicing Table Keybinds", + "@Tooltip": "Keybinds for actions in the Splicing Table GUI.", + }, + enlightenedSplicingTableKeybinds: { + "": "Mindsplice Table Keybinds", + "@Tooltip": "Keybinds for actions in the Mindsplice Table GUI.", + }, }, server: { maxUndoStackSize: { diff --git a/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 b/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 index 590d56b9166f..1eec8dbb2bdc 100644 --- a/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 +++ b/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 @@ -39,7 +39,7 @@ redo: "重做", cut: "剪切", copy: "复制", - paste: "粘贴(逐项)", + paste_verbatim: "粘贴(逐项)", paste_splat: "粘贴(扁平化)", export: "导出为.hexpattern文件", cast: "激活编辑台", @@ -87,7 +87,15 @@ invertSplicingTableScrollDirection: { "": "反转剪接台滚轮方向", "@Tooltip": "是否在向上滚动滚轮(反之则向下)时增加剪接台的视野索引。自动为反向滚动绑定减小索引操作。", - } + }, + splicingTableKeybinds: { + "": "剪接台按键绑定", + "@Tooltip": "剪接台GUI中各操作的键位绑定。", + }, + enlightenedSplicingTableKeybinds: { + "": "制念台按键绑定", + "@Tooltip": "制念台GUI中各操作的键位绑定。", + }, }, server: { maxUndoStackSize: { From c79e3b289b8894776d334e8881ec31c5ee912e1c Mon Sep 17 00:00:00 2001 From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com> Date: Tue, 23 Sep 2025 19:08:57 +0800 Subject: [PATCH 07/14] =?UTF-8?q?HexDebug=20update=EF=BC=9A=E5=AE=98?= =?UTF-8?q?=E5=BA=93=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hexdebug/lang/en_us.flatten.json5 | 23 +++++++++++++++---- .../hexdebug/lang/en_us.flatten.json5 | 23 +++++++++++++++---- .../hexdebug/lang/zh_cn.flatten.json5 | 23 +++++++++++++++---- 3 files changed, 57 insertions(+), 12 deletions(-) diff --git a/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 b/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 index 59bb9ad5e256..efd9e77c1c66 100644 --- a/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 +++ b/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 @@ -28,6 +28,12 @@ view_right: "Move View Right", view_right_page: "Move View to Next Page", view_right_full: "Move View to End", + cursor_left: "Move Cursor Left", + cursor_right: "Move Cursor Right", + expand_selection_left: "Expand Selection Left", + expand_selection_right: "Expand Selection Right", + move_selection_left: "Move Selection Left", + move_selection_right: "Move Selection Right", select_none: "Select None", select_all: "Select All", clear_grid: "Clear Grid", @@ -35,6 +41,7 @@ nudge_right: "Nudge Right", duplicate: "Duplicate", delete: "Delete", + backspace: "Backspace", undo: "Undo", redo: "Redo", cut: "Cut", @@ -91,10 +98,18 @@ splicingTableKeybinds: { "": "Splicing Table Keybinds", "@Tooltip": "Keybinds for actions in the Splicing Table GUI.", - }, - enlightenedSplicingTableKeybinds: { - "": "Mindsplice Table Keybinds", - "@Tooltip": "Keybinds for actions in the Mindsplice Table GUI.", + enabled: { + "": "Enable Keybinds", + "@Tooltip": "Enable custom keybinds in the Splicing Table and Mindsplice Table GUIs. If disabled, all other settings in this category are ignored.", + }, + overrideVanillaArrowKeys: { + "": "Override Vanilla Arrow Key Navigation", + "@Tooltip": "In the Splicing Table GUI, override the vanilla feature that allows the arrow keys to be used to focus on UI elements. This setting improves usability with the default keybinds, but you may want to disable it if you rely on this feature for accessibility purposes.", + }, + enlightened: { + "": "Mindsplice Table", + "@Tooltip": "Keybinds for actions in the Mindsplice Table GUI.", + }, }, }, server: { diff --git a/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 b/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 index 59bb9ad5e256..efd9e77c1c66 100644 --- a/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 +++ b/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 @@ -28,6 +28,12 @@ view_right: "Move View Right", view_right_page: "Move View to Next Page", view_right_full: "Move View to End", + cursor_left: "Move Cursor Left", + cursor_right: "Move Cursor Right", + expand_selection_left: "Expand Selection Left", + expand_selection_right: "Expand Selection Right", + move_selection_left: "Move Selection Left", + move_selection_right: "Move Selection Right", select_none: "Select None", select_all: "Select All", clear_grid: "Clear Grid", @@ -35,6 +41,7 @@ nudge_right: "Nudge Right", duplicate: "Duplicate", delete: "Delete", + backspace: "Backspace", undo: "Undo", redo: "Redo", cut: "Cut", @@ -91,10 +98,18 @@ splicingTableKeybinds: { "": "Splicing Table Keybinds", "@Tooltip": "Keybinds for actions in the Splicing Table GUI.", - }, - enlightenedSplicingTableKeybinds: { - "": "Mindsplice Table Keybinds", - "@Tooltip": "Keybinds for actions in the Mindsplice Table GUI.", + enabled: { + "": "Enable Keybinds", + "@Tooltip": "Enable custom keybinds in the Splicing Table and Mindsplice Table GUIs. If disabled, all other settings in this category are ignored.", + }, + overrideVanillaArrowKeys: { + "": "Override Vanilla Arrow Key Navigation", + "@Tooltip": "In the Splicing Table GUI, override the vanilla feature that allows the arrow keys to be used to focus on UI elements. This setting improves usability with the default keybinds, but you may want to disable it if you rely on this feature for accessibility purposes.", + }, + enlightened: { + "": "Mindsplice Table", + "@Tooltip": "Keybinds for actions in the Mindsplice Table GUI.", + }, }, }, server: { diff --git a/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 b/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 index 1eec8dbb2bdc..cb08fd3f236d 100644 --- a/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 +++ b/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 @@ -28,6 +28,12 @@ view_right: "向右移动视野", view_right_page: "将视野移动到下一页", view_right_full: "将视野移动到末尾", + cursor_left: "向左移动光标", + cursor_right: "向右移动光标", + expand_selection_left: "向左延伸选区", + expand_selection_right: "向右延伸选区", + move_selection_left: "向左移动选区", + move_selection_right: "向右移动选区", select_none: "取消选区", select_all: "全选", clear_grid: "清空网格", @@ -35,6 +41,7 @@ nudge_right: "右移", duplicate: "重复", delete: "删除", + backspace: "退格", undo: "撤销", redo: "重做", cut: "剪切", @@ -91,10 +98,18 @@ splicingTableKeybinds: { "": "剪接台按键绑定", "@Tooltip": "剪接台GUI中各操作的键位绑定。", - }, - enlightenedSplicingTableKeybinds: { - "": "制念台按键绑定", - "@Tooltip": "制念台GUI中各操作的键位绑定。", + enabled: { + "": "启用按键绑定", + "@Tooltip": "启用剪接台和制念台GUI的自定义按键绑定。若禁用,则此类别下所有其他设置无效。", + }, + overrideVanillaArrowKeys: { + "": "覆盖原版方向键操作", + "@Tooltip": "在剪接台GUI中覆盖可用方向键切换界面元素焦点的原版特性。此设置可增强默认按键绑定的可用性,但有辅助功能需求时可能需要禁用。", + }, + enlightened: { + "": "制念台", + "@Tooltip": "制念台GUI中各操作的键位绑定。", + }, }, }, server: { From b862692732f658ff724cff92c7170a351cab3bef Mon Sep 17 00:00:00 2001 From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com> Date: Sun, 5 Oct 2025 03:29:15 +0800 Subject: [PATCH 08/14] =?UTF-8?q?HexDebug=20update=EF=BC=9A=E5=AE=98?= =?UTF-8?q?=E5=BA=93=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hexdebug/lang/en_us.flatten.json5 | 50 +++++++++++++------ .../hexdebug/lang/zh_cn.flatten.json5 | 50 +++++++++++++------ 2 files changed, 70 insertions(+), 30 deletions(-) diff --git a/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 b/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 index efd9e77c1c66..cafb72d67c0d 100644 --- a/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 +++ b/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 @@ -49,10 +49,14 @@ paste_verbatim: "Paste (Verbatim)", paste_splat: "Paste (Flattened)", export: "Export as .hexpattern", - cast: "Activate Table", + cast: { + "": "Activate Mindsplice Table", + named: "Activate %s", + }, }, tooltip: { index: "Index: %d", + depth: "Depth: %d", signature: "Signature: %s", length: "Length: %d", }, @@ -91,9 +95,21 @@ "": "Show Debug Client Line Number", "@Tooltip": "If true, show the line number (usually 1-indexed) from the debug client (eg. VSCode) in Debugger status messages; otherwise, show the list index (0-indexed)." }, - invertSplicingTableScrollDirection: { - "": "Invert Splicing Table Scroll Direction", - "@Tooltip": "Whether scrolling up (as opposed to down) will increase the view index of the splicing table, and vice versa.", + splicingTable: { + "": "General Splicing Table Options", + invertScrollDirection: { + "": "Invert Scroll Direction", + "@Tooltip": "Whether scrolling up (as opposed to down) will increase the view index of the Splicing Table, and vice versa.", + }, + enableRainbowBrackets: { + "": "Enable Rainbow Brackets", + "@Tooltip": "If true, tint the outline of Introspection and Retrospection with rainbow colors to help identify matching brackets.", + }, + rainbowBracketColors: "Rainbow Bracket Colors", + showNestedPatternNames: { + "": "Show Nested Pattern Names", + "@Tooltip": "If true, for patterns inside of embedded lists, show pattern names in the tooltip instead of the built-in inline pattern display.", + }, }, splicingTableKeybinds: { "": "Splicing Table Keybinds", @@ -106,6 +122,10 @@ "": "Override Vanilla Arrow Key Navigation", "@Tooltip": "In the Splicing Table GUI, override the vanilla feature that allows the arrow keys to be used to focus on UI elements. This setting improves usability with the default keybinds, but you may want to disable it if you rely on this feature for accessibility purposes.", }, + sendHexicalTelepathy: { + "": "Enable Hexical Telepathy", + "@Tooltip": "Fabric-only. If Hexical is installed, enable all telepathy keys in the Splicing Table GUI. Note: If Hexical adds its own support for using telepathy in GUIs, disabling this feature will not disable that.", + }, enlightened: { "": "Mindsplice Table", "@Tooltip": "Keybinds for actions in the Mindsplice Table GUI.", @@ -209,15 +229,16 @@ splicing_table: { "": "a Splicing Table", enlightened: "a Mindsplice Table", - list: { - spellbook: "a Splicing Table with a non-empty spellbook in the main item slot", - }, clipboard: { read: "a Splicing Table with a readable secondary item", write: "a Splicing Table with a writable secondary item", spellbook: "a Splicing Table with a non-empty spellbook in the secondary item slot", }, }, + splicing_table_or_focus_holder: { + "": "a Splicing Table or Focal Frame", + spellbook: "a Splicing Table or Focal Frame with a non-empty spellbook in the main item slot", + }, }, invalid_value: { int: { @@ -266,11 +287,10 @@ focus_holder: { "": "Focal Frame", page: { - "1": "$(l:items/focus)$(item)Foci/$ are useful for storing _Hexes and other iotas in my inventory, but I sometimes find myself in need of a way to store iotas in the world. Item frames are too fragile, and $(l:greatwork/akashiclib)other methods/$ are inefficient and... distasteful. A cleaner solution is necessary, and I've devised one in the form of the $(item)Focal Frame/$.", - "2": "A $(item)Focal Frame/$ by itself is useless; a $(l:items/focus)$(item)Focus/$ must first be inserted. I can do that through crafting, or by right-clicking a placed $(item)Focal Frame/$ with a $(l:items/focus)$(item)Focus/$. Right-clicking with an empty hand removes the $(l:items/focus)$(item)Focus/$ from the frame.$(br2)\ - As an item, I can use a filled $(item)Focal Frame/$ anywhere I would normally use a $(l:items/focus)$(item)Focus/$, including patterns such as $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$. When placed in the world, I can access it using patterns like $(l:patterns/readwrite_blocks#hexcasting:read/entity)$(action)Chronicler's Purification/$.", - recipe: "$(italic)Two thousand movies, four thousand albums, music and words and pictures like voices whispering from a sweet, sunny past./$", - "3": "In addition to these recipes, I can craft an empty $(item)Focal Frame/$ with a $(l:items/focus)$(item)Focus/$ to insert it; and I can craft a filled $(item)Focal Frame/$ by itself to remove the $(l:items/focus)$(item)Focus/$ from it, leaving the empty frame behind." + "1": "$(l:items/focus)$(item)Foci/$ are useful for storing _Hexes and other iotas in my inventory, but I sometimes find myself in need of a way to store iotas in the world. $(item)Item Frames/$ are too fragile, and $(l:greatwork/akashiclib)other methods/$ are inefficient and... distasteful. A cleaner solution is necessary, and I've devised one in the form of the $(item)Focal Frame/$.", + "2": "A $(item)Focal Frame/$ by itself is useless. An $(l:items/focus)iota-holding item/$ must first be inserted by right-clicking a placed $(item)Frame/$ with the item, or by using a single $(item)Frame/$ in my inventory in a manner akin to a $(item)Bundle/$. Right-clicking with an empty hand extracts the item.$(br2)\ + As an item, I can use a filled $(item)Focal Frame/$ with any $(l:patterns/readwrite#hexcasting:read)patterns/$ or $(l:items/splicing_table)blocks/$ that would accept the contained item. When placed in the world, I can access it using patterns like $(l:patterns/readwrite_blocks#hexcasting:read/entity)$(action)Chronicler's Purification/$.", + "3": "$(italic)Two thousand movies, four thousand albums, music and words and pictures like voices whispering from a sweet, sunny past./$", }, }, splicing_table: { @@ -361,9 +381,9 @@ }, "list/": { "spellbook_index/": { - read: "Remove a vector from the stack, then push the current page number (starting at 1) of the $(l:items/spellbook)$(item)Spellbook/$ in the main slot of the $(l:items/splicing_table)$(item)Splicing Table/$ at that position.", - write: "Remove a vector and number from the stack, then flip the $(l:items/spellbook)$(item)Spellbook/$ in the main slot of the $(l:items/splicing_table)$(item)Splicing Table/$ at that position to the given page number.", - readable: "Replace the vector at the top of the stack with $(thing)True/$ if there is a $(l:items/splicing_table)$(item)Splicing Table/$ at that position with a $(l:items/spellbook)$(item)Spellbook/$ in its main slot that contains at least one page, or $(thing)False/$ otherwise.", + read: "Remove a vector from the stack, then push the current page number (starting at 1) of the $(l:items/spellbook)$(item)Spellbook/$ in the main slot of the $(l:items/splicing_table)$(item)Splicing Table/$ or $(l:items/focus_holder)$(item)Focal Frame/$ at that position.", + write: "Remove a vector and number from the stack, then flip the $(l:items/spellbook)$(item)Spellbook/$ in the main slot of the $(l:items/splicing_table)$(item)Splicing Table/$ or $(l:items/focus_holder)$(item)Focal Frame/$ at that position to the given page number.", + readable: "Replace the vector at the top of the stack with $(thing)True/$ if there is a $(l:items/splicing_table)$(item)Splicing Table/$ or $(l:items/focus_holder)$(item)Focal Frame/$ at that position with a $(l:items/spellbook)$(item)Spellbook/$ in its main slot that contains at least one page, or $(thing)False/$ otherwise.", }, }, "clipboard/": { diff --git a/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 b/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 index cb08fd3f236d..54c5d7036d88 100644 --- a/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 +++ b/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 @@ -49,10 +49,14 @@ paste_verbatim: "粘贴(逐项)", paste_splat: "粘贴(扁平化)", export: "导出为.hexpattern文件", - cast: "激活编辑台", + cast: { + "": "激活编辑台", + named: "激活%s", + }, }, tooltip: { index: "索引下标:%d", + depth: "深度:%d", signature: "图案编码:%s", length: "长度:%d", }, @@ -91,9 +95,21 @@ "": "显示调试客户端行号", "@Tooltip": "若设为true,显示调试客户端(如VSCode)的行号,通常以1起始;否则显示列表索引下标,以0起始。" }, - invertSplicingTableScrollDirection: { - "": "反转剪接台滚轮方向", - "@Tooltip": "是否在向上滚动滚轮(反之则向下)时增加剪接台的视野索引。自动为反向滚动绑定减小索引操作。", + splicingTable: { + "": "通用剪接台选项", + invertScrollDirection: { + "": "反转滚轮方向", + "@Tooltip": "是否在向上滚动滚轮(反之则向下)时增加剪接台的视野索引。自动为反向滚动绑定减小索引操作。", + }, + enableRainbowBrackets: { + "": "启用彩色括号", + "@Tooltip": "若设为true,则将内省和反思的轮廓显示为彩色,以便辨别成对括号。", + }, + rainbowBracketColors: "彩色括号颜色", + showNestedPatternNames: { + "": "显示嵌套图案名", + "@Tooltip": "若设为true,在内嵌列表中图案的提示文本中显示图案的名称,而不使用内置的行内图案显示。", + }, }, splicingTableKeybinds: { "": "剪接台按键绑定", @@ -106,6 +122,10 @@ "": "覆盖原版方向键操作", "@Tooltip": "在剪接台GUI中覆盖可用方向键切换界面元素焦点的原版特性。此设置可增强默认按键绑定的可用性,但有辅助功能需求时可能需要禁用。", }, + sendHexicalTelepathy: { + "": "启用Hexical心灵感应", + "@Tooltip": "仅限Fabric。若安装有Hexical,则在剪接台GUI中启用所有心灵感应键位。注意:如果Hexical本身添加了在GUI中使用心灵感应的功能,禁用此选项不会连带禁用它们。", + }, enlightened: { "": "制念台", "@Tooltip": "制念台GUI中各操作的键位绑定。", @@ -209,15 +229,16 @@ splicing_table: { "": "一个剪接台", enlightened: "一个制念台", - list: { - spellbook: "主物品槽中有非空法术书的剪接台", - }, clipboard: { read: "放有可读副物品的剪接台", write: "放有可写副物品的剪接台", spellbook: "副物品槽中有非空法术书的剪接台", }, }, + splicing_table_or_focus_holder: { + "": "一个剪接台或核心框架", + spellbook: "主物品槽中有非空法术书的剪接台或核心框架", + }, }, invalid_value: { int: { @@ -266,11 +287,10 @@ focus_holder: { "": "核心框架", page: { - "1": "$(l:items/focus)$(item)核心/$可用于在物品栏中存储$(hex)咒术/$和其他 iota,但总有些时候我会需要在世界中存储 iota。物品展示框太脆弱,$(l:greatwork/akashiclib)其他做法/$又太低效而且也……不道德。我需要更优雅的方法,最终成功借助$(item)核心框架/$实现了。", - "2": "$(item)核心框架/$自身没有用处,必须先向其放入一枚$(l:items/focus)$(item)核心/$。可以选择合成两者,也可用$(l:items/focus)$(item)核心/$右击放置出来的$(item)核心框架/$。空手右击可从框架中取出$(l:items/focus)$(item)核心/$。$(br2)\ - 物品形态下,装有核心的$(item)核心框架/$相当于一枚$(l:items/focus)$(item)核心/$,适用于核心的操作同样适用于框架,包括$(l:patterns/readwrite#hexcasting:read)$(action)书吏之精思/$等图案。放置后,可使用$(l:patterns/readwrite_blocks#hexcasting:read/entity)$(action)编年史家之纯化/$等图案访问。", - recipe: "$(italic)两千部电影,四千部专辑,音乐、词句、图片,都仿佛诉说着过去阳光明媚的甜蜜日子。/$", - "3": "在之前提到的配方之外,我还可以在合成$(item)核心框架/$时直接放入$(l:items/focus)$(item)核心/$。将装有核心的$(item)核心框架/$单独放入合成方格合成,也可以取出其中$(l:items/focus)$(item)核心/$,并留下空的框架。" + "1": "$(l:items/focus)$(item)核心/$可用于在物品栏中存储$(hex)咒术/$和其他 iota,但总有些时候我会需要在世界中存储 iota。$(item)物品展示框/$太脆弱,$(l:greatwork/akashiclib)其他做法/$又太低效而且也……不道德。我需要更优雅的方法,最终成功借助$(item)核心框架/$实现了。", + "2": "$(item)核心框架/$自身没有用处,必须先向其放入一个$(l:items/focus)$(item)能存储 iota 的物品/$。可以用物品右击$(item)核心框架/$,也可在物品栏中以类似$(item)收纳袋/$的形式与单个$(item)框架/$交互。空手右击可取出物品。$(br2)\ + 物品形态下,装有物品的$(item)核心框架/$可用到任意接受其中物品的$(l:patterns/readwrite#hexcasting:read)图案/$和$(l:items/splicing_table)方块/$中去。放置后,可使用$(l:patterns/readwrite_blocks#hexcasting:read/entity)$(action)编年史家之纯化/$等图案访问。", + "3": "$(italic)两千部电影,四千部专辑,音乐、词句、图片,都仿佛诉说着过去阳光明媚的甜蜜日子。/$", }, }, splicing_table: { @@ -361,9 +381,9 @@ }, "list/": { "spellbook_index/": { - read: "移除栈顶向量,返回该处$(l:items/splicing_table)$(item)剪接台/$主槽位中$(l:items/spellbook)$(item)法术书/$当前的页码(以 1 起始)。", - write: "移除栈顶向量和数,将该处$(l:items/splicing_table)$(item)剪接台/$主槽位中的$(l:items/spellbook)$(item)法术书/$翻到对应页。", - readable: "若所给向量处有$(l:items/splicing_table)$(item)剪接台/$,且其主槽位中法术书至少有一页记有内容,则将该向量替换为 $(thing)True/$;否则返回 $(thing)False/$。", + read: "移除栈顶向量,返回该处$(l:items/splicing_table)$(item)剪接台/$或$(l:items/focus_holder)$(item)核心框架/$主槽位中$(l:items/spellbook)$(item)法术书/$当前的页码(以 1 起始)。", + write: "移除栈顶向量和数,将该处$(l:items/splicing_table)$(item)剪接台/$或$(l:items/focus_holder)$(item)核心框架/$主槽位中的$(l:items/spellbook)$(item)法术书/$翻到对应页。", + readable: "若所给向量处有$(l:items/splicing_table)$(item)剪接台/$或$(l:items/focus_holder)$(item)核心框架/$,且其主槽位中法术书至少有一页记有内容,则将该向量替换为 $(thing)True/$;否则返回 $(thing)False/$。", }, }, "clipboard/": { From cca644ea98f6e481cfb97924ce00c7c0c57a7e59 Mon Sep 17 00:00:00 2001 From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com> Date: Sun, 19 Oct 2025 04:14:29 +0800 Subject: [PATCH 09/14] =?UTF-8?q?HexDebug=20update=EF=BC=9A=E5=AE=98?= =?UTF-8?q?=E5=BA=93=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hexdebug/lang/en_us.flatten.json5 | 83 +++++++++++++------ .../hexdebug/lang/en_us.flatten.json5 | 33 +++++--- .../hexdebug/lang/zh_cn.flatten.json5 | 37 ++++++--- 3 files changed, 103 insertions(+), 50 deletions(-) diff --git a/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 b/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 index efd9e77c1c66..711f95b44aab 100644 --- a/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 +++ b/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 @@ -1,7 +1,9 @@ { "item.hexdebug": { debugger: "Debugger", + quenched_debugger: "Quenched Debugger", evaluator: "Evaluator", + quenched_evaluator: "Quenched Evaluator", }, "block.hexdebug": { @@ -15,7 +17,8 @@ text: { hexdebug: { connected: "Debug client connected!", - no_session: "Debug session is not running.", + no_session: "Debug session is not running for thread %d.", + not_paused: "Debug session is not paused for thread %d.", thwack: "Thwack!", // Next Iota: [{index}] {iota} debugger_stopped: "Next Iota: [%d] %s", @@ -49,10 +52,14 @@ paste_verbatim: "Paste (Verbatim)", paste_splat: "Paste (Flattened)", export: "Export as .hexpattern", - cast: "Activate Table", + cast: { + "": "Activate Mindsplice Table", + named: "Activate %s", + }, }, tooltip: { index: "Index: %d", + depth: "Depth: %d", signature: "Signature: %s", length: "Length: %d", }, @@ -91,9 +98,21 @@ "": "Show Debug Client Line Number", "@Tooltip": "If true, show the line number (usually 1-indexed) from the debug client (eg. VSCode) in Debugger status messages; otherwise, show the list index (0-indexed)." }, - invertSplicingTableScrollDirection: { - "": "Invert Splicing Table Scroll Direction", - "@Tooltip": "Whether scrolling up (as opposed to down) will increase the view index of the splicing table, and vice versa.", + splicingTable: { + "": "General Splicing Table Options", + invertScrollDirection: { + "": "Invert Scroll Direction", + "@Tooltip": "Whether scrolling up (as opposed to down) will increase the view index of the Splicing Table, and vice versa.", + }, + enableRainbowBrackets: { + "": "Enable Rainbow Brackets", + "@Tooltip": "If true, tint the outline of Introspection and Retrospection with rainbow colors to help identify matching brackets.", + }, + rainbowBracketColors: "Rainbow Bracket Colors", + showNestedPatternNames: { + "": "Show Nested Pattern Names", + "@Tooltip": "If true, for patterns inside of embedded lists, show pattern names in the tooltip instead of the built-in inline pattern display.", + }, }, splicingTableKeybinds: { "": "Splicing Table Keybinds", @@ -106,6 +125,10 @@ "": "Override Vanilla Arrow Key Navigation", "@Tooltip": "In the Splicing Table GUI, override the vanilla feature that allows the arrow keys to be used to focus on UI elements. This setting improves usability with the default keybinds, but you may want to disable it if you rely on this feature for accessibility purposes.", }, + sendHexicalTelepathy: { + "": "Enable Hexical Telepathy", + "@Tooltip": "Fabric-only. If Hexical is installed, enable all telepathy keys in the Splicing Table GUI. Note: If Hexical adds its own support for using telepathy in GUIs, disabling this feature will not disable that.", + }, enlightened: { "": "Mindsplice Table", "@Tooltip": "Keybinds for actions in the Mindsplice Table GUI.", @@ -142,13 +165,13 @@ action: { "hexdebug:": { "const/debugging": "Debugger's Reflection", - "next_eval_index": "Debug Locator's Reflection", // TODO: this name kinda sucks tbh "const/cognitohazard": "Cognitohazard Reflection", "breakpoint/": { before: "Set Breakpoint Before", after: "Set Breakpoint After" }, "craft/debugger": "Craft Debugger", + "craft/quenched_debugger": "Craft Quenched Debugger", "splicing/": { "view_index/": { read: "Sprocket's Purification", @@ -185,7 +208,6 @@ }, }, "book.hexdebug:": { - "next_eval_index": "Debug Locator's Rfln.", "const/cognitohazard": "Cognitohazard Rfln.", "splicing/": { "list/": { @@ -209,15 +231,16 @@ splicing_table: { "": "a Splicing Table", enlightened: "a Mindsplice Table", - list: { - spellbook: "a Splicing Table with a non-empty spellbook in the main item slot", - }, clipboard: { read: "a Splicing Table with a readable secondary item", write: "a Splicing Table with a writable secondary item", spellbook: "a Splicing Table with a non-empty spellbook in the secondary item slot", }, }, + splicing_table_or_focus_holder: { + "": "a Splicing Table or Focal Frame", + spellbook: "a Splicing Table or Focal Frame with a non-empty spellbook in the main item slot", + }, }, invalid_value: { int: { @@ -229,15 +252,15 @@ hexdebug: { tooltip: { + thread_id: "Thread: %d", debugger: { step_mode: { - "": "Mode: %s", - continue: "Continue", - over: "Step Over", - in: "Step In", - out: "Step Out", - restart: "Restart", - stop: "Stop" + continue: "Mode: Continue", + over: "Mode: Step Over", + in: "Mode: Step In", + out: "Mode: Step Out", + restart: "Mode: Restart", + stop: "Mode: Stop" }, }, focus_holder: { @@ -266,11 +289,10 @@ focus_holder: { "": "Focal Frame", page: { - "1": "$(l:items/focus)$(item)Foci/$ are useful for storing _Hexes and other iotas in my inventory, but I sometimes find myself in need of a way to store iotas in the world. Item frames are too fragile, and $(l:greatwork/akashiclib)other methods/$ are inefficient and... distasteful. A cleaner solution is necessary, and I've devised one in the form of the $(item)Focal Frame/$.", - "2": "A $(item)Focal Frame/$ by itself is useless; a $(l:items/focus)$(item)Focus/$ must first be inserted. I can do that through crafting, or by right-clicking a placed $(item)Focal Frame/$ with a $(l:items/focus)$(item)Focus/$. Right-clicking with an empty hand removes the $(l:items/focus)$(item)Focus/$ from the frame.$(br2)\ - As an item, I can use a filled $(item)Focal Frame/$ anywhere I would normally use a $(l:items/focus)$(item)Focus/$, including patterns such as $(l:patterns/readwrite#hexcasting:read)$(action)Scribe's Reflection/$. When placed in the world, I can access it using patterns like $(l:patterns/readwrite_blocks#hexcasting:read/entity)$(action)Chronicler's Purification/$.", - recipe: "$(italic)Two thousand movies, four thousand albums, music and words and pictures like voices whispering from a sweet, sunny past./$", - "3": "In addition to these recipes, I can craft an empty $(item)Focal Frame/$ with a $(l:items/focus)$(item)Focus/$ to insert it; and I can craft a filled $(item)Focal Frame/$ by itself to remove the $(l:items/focus)$(item)Focus/$ from it, leaving the empty frame behind." + "1": "$(l:items/focus)$(item)Foci/$ are useful for storing _Hexes and other iotas in my inventory, but I sometimes find myself in need of a way to store iotas in the world. $(item)Item Frames/$ are too fragile, and $(l:greatwork/akashiclib)other methods/$ are inefficient and... distasteful. A cleaner solution is necessary, and I've devised one in the form of the $(item)Focal Frame/$.", + "2": "A $(item)Focal Frame/$ by itself is useless. An $(l:items/focus)iota-holding item/$ must first be inserted by right-clicking a placed $(item)Frame/$ with the item, or by using a single $(item)Frame/$ in my inventory in a manner akin to a $(item)Bundle/$. Right-clicking with an empty hand extracts the item.$(br2)\ + As an item, I can use a filled $(item)Focal Frame/$ with any $(l:patterns/readwrite#hexcasting:read)patterns/$ or $(l:items/splicing_table)blocks/$ that would accept the contained item. When placed in the world, I can access it using patterns like $(l:patterns/readwrite_blocks#hexcasting:read/entity)$(action)Chronicler's Purification/$.", + "3": "$(italic)Two thousand movies, four thousand albums, music and words and pictures like voices whispering from a sweet, sunny past./$", }, }, splicing_table: { @@ -321,6 +343,14 @@ "5": "To facilitate even more complicated operations -- one $(thing)Mindsplice Table/$ controlling, $(italic)dominating/$, the next, and so on and so on and so on and so on and so on into eternity, if I have the patience and $(l:casting/mishaps)capacity/$ to use it -- the table's influence extends a small distance (four blocks, no more and no less) from the table. Small, yes, but perfectly adequate for most purposes. If more space is needed, my $(l:patterns/great_spells/greater_sentinel#hexcasting:sentinel/create/great)$(action)Greater Sentinel/$ can be used.", }, }, + + quenching_debuggers: { + "": "Quenching Debuggers", + page: { + "1": "My mind has been apotheosized, but my $(l:items/debugging)tools/$ are still so $(italic)limited/$, bursting at the seams with the enormity of the Work. I need -- no, DESERVE -- more.$(br2)\ + The shards of an Allay make an excellent medium for the task. As they twist and jump around, so too can these tools -- holding $(k:sneak) and $(k:sprint) while scrolling will switch between slots for _Hexes to debug." + }, + }, }, }, @@ -330,7 +360,6 @@ "": "Debugging Patterns", page: { "const/debugging": "Add $(thing)True/$ to the top of the stack if executed by a $(l:items/debugging#debugger)$(item)Debugger/$ or $(l:items/debugging#evaluator)$(item)Evaluator/$, or $(thing)False/$ otherwise.", - "next_eval_index": "Add the index of the next iota to be evaluated if executed by a $(l:items/debugging#debugger)$(item)Debugger/$ or $(l:items/debugging#evaluator)$(item)Evaluator/$, or $(l:casting/influences)$(thing)Null/$ otherwise.", "const/cognitohazard": { "1": "Add a $(thing)Cognitohazard/$ to the top of the stack.", "2": "It seems certain $(l:items/debugging#evaluator)debugging tools/$ may pose a security risk for some $(l:patterns/meta#hexcasting:eval/cc)high-level techniques/$. To help combat this, I have created this pattern.$(br2)\ @@ -342,6 +371,8 @@ }, "craft/debugger": "Create a $(l:items/debugging#debugger)$(item)Debugger/$ that casts a _Hex, similar to $(l:patterns/spells/hexcasting)certain other patterns/$ I've used in the past.$(br2)\ Costs about ten $(l:items/amethyst)$(item)Charged Amethyst/$.", + "craft/quenched_debugger": "Create a $(l:greatwork/quenching_debuggers)$(item)Quenched Debugger/$ that casts a _Hex, similar to $(l:patterns/spells/hexcasting)certain other patterns/$ I've used in the past.$(br2)\ + Costs about ten $(l:items/amethyst)$(item)Charged Amethyst/$.", }, }, @@ -361,9 +392,9 @@ }, "list/": { "spellbook_index/": { - read: "Remove a vector from the stack, then push the current page number (starting at 1) of the $(l:items/spellbook)$(item)Spellbook/$ in the main slot of the $(l:items/splicing_table)$(item)Splicing Table/$ at that position.", - write: "Remove a vector and number from the stack, then flip the $(l:items/spellbook)$(item)Spellbook/$ in the main slot of the $(l:items/splicing_table)$(item)Splicing Table/$ at that position to the given page number.", - readable: "Replace the vector at the top of the stack with $(thing)True/$ if there is a $(l:items/splicing_table)$(item)Splicing Table/$ at that position with a $(l:items/spellbook)$(item)Spellbook/$ in its main slot that contains at least one page, or $(thing)False/$ otherwise.", + read: "Remove a vector from the stack, then push the current page number (starting at 1) of the $(l:items/spellbook)$(item)Spellbook/$ in the main slot of the $(l:items/splicing_table)$(item)Splicing Table/$ or $(l:items/focus_holder)$(item)Focal Frame/$ at that position.", + write: "Remove a vector and number from the stack, then flip the $(l:items/spellbook)$(item)Spellbook/$ in the main slot of the $(l:items/splicing_table)$(item)Splicing Table/$ or $(l:items/focus_holder)$(item)Focal Frame/$ at that position to the given page number.", + readable: "Replace the vector at the top of the stack with $(thing)True/$ if there is a $(l:items/splicing_table)$(item)Splicing Table/$ or $(l:items/focus_holder)$(item)Focal Frame/$ at that position with a $(l:items/spellbook)$(item)Spellbook/$ in its main slot that contains at least one page, or $(thing)False/$ otherwise.", }, }, "clipboard/": { diff --git a/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 b/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 index cafb72d67c0d..711f95b44aab 100644 --- a/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 +++ b/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 @@ -1,7 +1,9 @@ { "item.hexdebug": { debugger: "Debugger", + quenched_debugger: "Quenched Debugger", evaluator: "Evaluator", + quenched_evaluator: "Quenched Evaluator", }, "block.hexdebug": { @@ -15,7 +17,8 @@ text: { hexdebug: { connected: "Debug client connected!", - no_session: "Debug session is not running.", + no_session: "Debug session is not running for thread %d.", + not_paused: "Debug session is not paused for thread %d.", thwack: "Thwack!", // Next Iota: [{index}] {iota} debugger_stopped: "Next Iota: [%d] %s", @@ -162,13 +165,13 @@ action: { "hexdebug:": { "const/debugging": "Debugger's Reflection", - "next_eval_index": "Debug Locator's Reflection", // TODO: this name kinda sucks tbh "const/cognitohazard": "Cognitohazard Reflection", "breakpoint/": { before: "Set Breakpoint Before", after: "Set Breakpoint After" }, "craft/debugger": "Craft Debugger", + "craft/quenched_debugger": "Craft Quenched Debugger", "splicing/": { "view_index/": { read: "Sprocket's Purification", @@ -205,7 +208,6 @@ }, }, "book.hexdebug:": { - "next_eval_index": "Debug Locator's Rfln.", "const/cognitohazard": "Cognitohazard Rfln.", "splicing/": { "list/": { @@ -250,15 +252,15 @@ hexdebug: { tooltip: { + thread_id: "Thread: %d", debugger: { step_mode: { - "": "Mode: %s", - continue: "Continue", - over: "Step Over", - in: "Step In", - out: "Step Out", - restart: "Restart", - stop: "Stop" + continue: "Mode: Continue", + over: "Mode: Step Over", + in: "Mode: Step In", + out: "Mode: Step Out", + restart: "Mode: Restart", + stop: "Mode: Stop" }, }, focus_holder: { @@ -341,6 +343,14 @@ "5": "To facilitate even more complicated operations -- one $(thing)Mindsplice Table/$ controlling, $(italic)dominating/$, the next, and so on and so on and so on and so on and so on into eternity, if I have the patience and $(l:casting/mishaps)capacity/$ to use it -- the table's influence extends a small distance (four blocks, no more and no less) from the table. Small, yes, but perfectly adequate for most purposes. If more space is needed, my $(l:patterns/great_spells/greater_sentinel#hexcasting:sentinel/create/great)$(action)Greater Sentinel/$ can be used.", }, }, + + quenching_debuggers: { + "": "Quenching Debuggers", + page: { + "1": "My mind has been apotheosized, but my $(l:items/debugging)tools/$ are still so $(italic)limited/$, bursting at the seams with the enormity of the Work. I need -- no, DESERVE -- more.$(br2)\ + The shards of an Allay make an excellent medium for the task. As they twist and jump around, so too can these tools -- holding $(k:sneak) and $(k:sprint) while scrolling will switch between slots for _Hexes to debug." + }, + }, }, }, @@ -350,7 +360,6 @@ "": "Debugging Patterns", page: { "const/debugging": "Add $(thing)True/$ to the top of the stack if executed by a $(l:items/debugging#debugger)$(item)Debugger/$ or $(l:items/debugging#evaluator)$(item)Evaluator/$, or $(thing)False/$ otherwise.", - "next_eval_index": "Add the index of the next iota to be evaluated if executed by a $(l:items/debugging#debugger)$(item)Debugger/$ or $(l:items/debugging#evaluator)$(item)Evaluator/$, or $(l:casting/influences)$(thing)Null/$ otherwise.", "const/cognitohazard": { "1": "Add a $(thing)Cognitohazard/$ to the top of the stack.", "2": "It seems certain $(l:items/debugging#evaluator)debugging tools/$ may pose a security risk for some $(l:patterns/meta#hexcasting:eval/cc)high-level techniques/$. To help combat this, I have created this pattern.$(br2)\ @@ -362,6 +371,8 @@ }, "craft/debugger": "Create a $(l:items/debugging#debugger)$(item)Debugger/$ that casts a _Hex, similar to $(l:patterns/spells/hexcasting)certain other patterns/$ I've used in the past.$(br2)\ Costs about ten $(l:items/amethyst)$(item)Charged Amethyst/$.", + "craft/quenched_debugger": "Create a $(l:greatwork/quenching_debuggers)$(item)Quenched Debugger/$ that casts a _Hex, similar to $(l:patterns/spells/hexcasting)certain other patterns/$ I've used in the past.$(br2)\ + Costs about ten $(l:items/amethyst)$(item)Charged Amethyst/$.", }, }, diff --git a/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 b/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 index 54c5d7036d88..e0efac7eba62 100644 --- a/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 +++ b/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 @@ -1,7 +1,9 @@ { "item.hexdebug": { debugger: "调试杖", + quenched_debugger: "淬灵调试杖", evaluator: "运行杖", + quenched_evaluator: "淬灵运行杖", }, "block.hexdebug": { @@ -15,7 +17,8 @@ text: { hexdebug: { connected: "调试客户端已连接!", - no_session: "调试会话未在运行。", + no_session: "线程%d的调试会话未在运行。", + not_paused: "线程%d的调试会话未被暂停。", thwack: "哐当!", // Next Iota: [{index}] {iota} debugger_stopped: "下一个Iota:[%d] %s", @@ -162,13 +165,13 @@ action: { "hexdebug:": { "const/debugging": "调试杖之精思", - "next_eval_index": "调试位之精思", // TODO: this name kinda sucks tbh "const/cognitohazard": "认知危害之精思", "breakpoint/": { before: "在前方添加断点", after: "在后方添加断点" }, "craft/debugger": "制作调试杖", + "craft/quenched_debugger": "制作淬灵调试杖", "splicing/": { "view_index/": { read: "齿孔胶片之纯化", @@ -205,7 +208,6 @@ }, }, "book.hexdebug:": { - "next_eval_index": "调试位之精思", "const/cognitohazard": "认知危害之精思", "splicing/": { "list/": { @@ -250,15 +252,15 @@ hexdebug: { tooltip: { + thread_id: "线程:%d", debugger: { step_mode: { - "": "模式:%s", - continue: "继续", - over: "逐过程", - in: "单步调试", - out: "单步跳出", - restart: "重启", - stop: "停止" + continue: "模式:继续", + over: "模式:逐过程", + in: "模式:单步调试", + out: "模式:单步跳出", + restart: "模式:重启", + stop: "模式:停止" }, }, focus_holder: { @@ -341,6 +343,14 @@ "5": "而为实现更复杂的操作——要是有耐心和$(l:casting/mishaps)气量/$的话,让$(thing)制念台/$控制、$(italic)统领/$、另一个制念台、周而复始、周而复始周而复始周而复始周而复始直到无穷——制念台能小范围延展其影响力(恰好 4 格)。确实不算大,但足够绝大多数情况用了。若是需要更大的范围,可以用我的$(l:patterns/great_spells/greater_sentinel#hexcasting:sentinel/create/great)$(action)卓越哨卫/$。", }, }, + + quenching_debuggers: { + "": "调试杖的淬灵", + page: { + "1": "我的意识已然神化,但我的$(l:items/debugging)工具/$还极为$(italic)低效/$,在卓伟之作的宏大之下愈发脆弱。我需要——不,我$(bold)应得/$——更多。$(br2)\ + 悦灵的碎片是改进的绝佳介质。淬灵晶会改变外形、四处跳动,经它们改进的工具也可以——滚动滚轮时按住$(k:sneak)和$(k:sprint),即可切换当前调试的$(hex)咒术/$槽。" + }, + }, }, }, @@ -350,7 +360,6 @@ "": "调试图案", page: { "const/debugging": "若栈由$(l:items/debugging#debugger)$(item)调试杖/$或$(l:items/debugging#evaluator)$(item)运行杖/$执行,则返回 $(thing)True/$;否则返回 $(thing)False/$。", - "next_eval_index": "若栈由$(l:items/debugging#debugger)$(item)调试杖/$或$(l:items/debugging#evaluator)$(item)运行杖/$执行,则返回下一个待执行 iota 的索引下标;否则返回 $(l:casting/influences)$(thing)Null/$。", "const/cognitohazard": { "1": "向栈顶压入一个$(thing)认知危害/$。", "2": "貌似部分$(l:items/debugging#evaluator)调试工具/$在某些$(l:patterns/meta#hexcasting:eval/cc)高等级技术/$中容易导致安全问题。而为解决这一问题,我设计了本图案。$(br2)\ @@ -360,8 +369,10 @@ before: "在运行此图案前,暂停$(l:items/debugging#debugger)$(item)调试杖/$。", after: "在运行此图案后,也即在运行下一图案之前,暂停$(l:items/debugging#debugger)$(item)调试杖/$。", }, - "craft/debugger": "制作一支能施放$(hex)咒术/$的$(l:items/debugging#debugger)$(item)调试杖/$。这个图案和我之前用过的$(l:patterns/spells/hexcasting)某些图案/$有些相似。\ - $(br2)消耗大约 10 个$(l:items/amethyst)$(item)充能紫水晶/$。", + "craft/debugger": "制作一支能施放$(hex)咒术/$的$(l:items/debugging#debugger)$(item)调试杖/$。这个图案和我之前用过的$(l:patterns/spells/hexcasting)某些图案/$有些相似。$(br2)\ + 消耗大约 10 个$(l:items/amethyst)$(item)充能紫水晶/$。", + "craft/quenched_debugger": "制作一支能施放$(hex)咒术/$的$(l:greatwork/quenching_debuggers)$(item)淬灵调试杖/$。这个图案和我之前用过的$(l:patterns/spells/hexcasting)某些图案/$有些相似。$(br2)\ + 消耗大约 10 个$(l:items/amethyst)$(item)充能紫水晶/$。", }, }, From 4112b0c7b1ec898660ae51da8349fce898162168 Mon Sep 17 00:00:00 2001 From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com> Date: Fri, 7 Nov 2025 16:46:43 +0800 Subject: [PATCH 10/14] =?UTF-8?q?HexDebug=20update=EF=BC=9A=E5=AE=98?= =?UTF-8?q?=E5=BA=93=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hexdebug/lang/en_us.flatten.json5 | 20 +++++++++++++------ .../hexdebug/lang/en_us.flatten.json5 | 20 +++++++++++++------ .../hexdebug/lang/zh_cn.flatten.json5 | 20 +++++++++++++------ 3 files changed, 42 insertions(+), 18 deletions(-) diff --git a/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 b/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 index 711f95b44aab..cc50332cba8a 100644 --- a/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 +++ b/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 @@ -16,12 +16,17 @@ text: { hexdebug: { - connected: "Debug client connected!", - no_session: "Debug session is not running for thread %d.", - not_paused: "Debug session is not paused for thread %d.", + debugging: { + connected: "Debug client connected!", + no_session: "Debug session is not running for thread %d.", + not_paused: "Debug session is not paused for thread %d.", + // Next Iota: [{index}] {iota} + debugger_stopped: "Next Iota: [%d] %s", + illegal_thread: "The item failed, somehow... am I not skilled enough?", + out_of_range: "Debuggee is out of range.", + }, + thwack: "Thwack!", - // Next Iota: [{index}] {iota} - debugger_stopped: "Next Iota: [%d] %s", splicing_table: { button: { @@ -252,7 +257,10 @@ hexdebug: { tooltip: { - thread_id: "Thread: %d", + thread: { + inactive: "Thread %s", + active: "Thread %s (%s)", + }, debugger: { step_mode: { continue: "Mode: Continue", diff --git a/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 b/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 index 711f95b44aab..cc50332cba8a 100644 --- a/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 +++ b/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 @@ -16,12 +16,17 @@ text: { hexdebug: { - connected: "Debug client connected!", - no_session: "Debug session is not running for thread %d.", - not_paused: "Debug session is not paused for thread %d.", + debugging: { + connected: "Debug client connected!", + no_session: "Debug session is not running for thread %d.", + not_paused: "Debug session is not paused for thread %d.", + // Next Iota: [{index}] {iota} + debugger_stopped: "Next Iota: [%d] %s", + illegal_thread: "The item failed, somehow... am I not skilled enough?", + out_of_range: "Debuggee is out of range.", + }, + thwack: "Thwack!", - // Next Iota: [{index}] {iota} - debugger_stopped: "Next Iota: [%d] %s", splicing_table: { button: { @@ -252,7 +257,10 @@ hexdebug: { tooltip: { - thread_id: "Thread: %d", + thread: { + inactive: "Thread %s", + active: "Thread %s (%s)", + }, debugger: { step_mode: { continue: "Mode: Continue", diff --git a/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 b/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 index e0efac7eba62..ce58ae2937c3 100644 --- a/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 +++ b/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 @@ -16,12 +16,17 @@ text: { hexdebug: { - connected: "调试客户端已连接!", - no_session: "线程%d的调试会话未在运行。", - not_paused: "线程%d的调试会话未被暂停。", + debugging: { + connected: "调试客户端已连接!", + no_session: "线程%d的调试会话未在运行。", + not_paused: "线程%d的调试会话未被暂停。", + // Next Iota: [{index}] {iota} + debugger_stopped: "下一个Iota:[%d] %s", + illegal_thread: "物品不知怎的失效了……是我还要再提升自己的技术吗?", + out_of_range: "调试员已离开连接范围。", + }, + thwack: "哐当!", - // Next Iota: [{index}] {iota} - debugger_stopped: "下一个Iota:[%d] %s", splicing_table: { button: { @@ -252,7 +257,10 @@ hexdebug: { tooltip: { - thread_id: "线程:%d", + thread: { + inactive: "线程 %d", + active: "线程 %s(%s)", + }, debugger: { step_mode: { continue: "模式:继续", From f39d3c93c22912e7e76b3edabc76a7a617b4afc2 Mon Sep 17 00:00:00 2001 From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com> Date: Sat, 8 Nov 2025 04:50:06 +0800 Subject: [PATCH 11/14] HexDebug hotfix --- projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 b/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 index ce58ae2937c3..899b3efed90c 100644 --- a/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 +++ b/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 @@ -258,7 +258,7 @@ hexdebug: { tooltip: { thread: { - inactive: "线程 %d", + inactive: "线程 %s", active: "线程 %s(%s)", }, debugger: { From 10a1e2b2a6ce3998f6a7e4801e9efa94d417e992 Mon Sep 17 00:00:00 2001 From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com> Date: Wed, 4 Mar 2026 21:07:25 +0800 Subject: [PATCH 12/14] =?UTF-8?q?IoticBlocks=20fix=EF=BC=9A=E7=A5=9E?= =?UTF-8?q?=E7=BB=8F=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/ioticblocks/ioticblocks/lang/zh_cn.flatten.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/1.20/assets/ioticblocks/ioticblocks/lang/zh_cn.flatten.json5 b/projects/1.20/assets/ioticblocks/ioticblocks/lang/zh_cn.flatten.json5 index 0b217fff13c5..9ae072073b35 100644 --- a/projects/1.20/assets/ioticblocks/ioticblocks/lang/zh_cn.flatten.json5 +++ b/projects/1.20/assets/ioticblocks/ioticblocks/lang/zh_cn.flatten.json5 @@ -9,7 +9,7 @@ "read/block": "与$(l:patterns/readwrite#hexcasting:read)$(action)书吏之精思/$类似,但会从方块中读出 iota,而非从我另一只手中的物品读取。", "write/block": "与$(l:patterns/readwrite#hexcasting:write)$(action)书吏之策略/$类似,但会向方块写入 iota,而非向我另一只手中的物品写入。$(br2)\ 有趣的是,我似乎无法用这个法术写入我的真名。我有种感觉,如果我真可以这么做,等着我的只会是灾难。", - "read/index": "从实体或方块中读出一个列表 iota,并将 iota 压入栈中给定下标处。$(br2)\ + "read/index": "从实体或方块中读出一个列表 iota,并将其中给定下标处的 iota 压入栈中。$(br2)\ 这个图案和后页的图案似乎很适合处理大批量的数据,而且不会因此招致 $(l:casting/mishaps)Iota 过多/$事故。", "write/index": "从实体或方块中读出一个列表 iota,并将该列表中给定下标处的元素修改为所给 iota,最后把修改后的列表写入原实体或方块。", "readable/block": "与$(l:patterns/readwrite#hexcasting:readable)$(action)审计员之精思/$类似,但会检验方块的是否可读取,而非检验我另一只手中的物品。", From cd95220200c18bc18706ab7ad66a7188ee91bcb6 Mon Sep 17 00:00:00 2001 From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com> Date: Tue, 23 Jun 2026 22:02:15 +0800 Subject: [PATCH 13/14] policies and readmes --- projects/1.19/assets/hexdebug/hexdebug/README.md | 2 +- projects/1.20-fabric/assets/hexdebug/hexdebug/README.md | 2 +- .../1.20-fabric/assets/hexdebug/hexdebug/packer-policy.json | 2 +- .../1.20-fabric/assets/ioticblocks/ioticblocks/README.md | 4 ++-- .../assets/ioticblocks/ioticblocks/packer-policy.json | 2 +- projects/1.20/assets/hexdebug/hexdebug/README.md | 6 +++--- projects/1.20/assets/ioticblocks/ioticblocks/README.md | 4 ++-- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/projects/1.19/assets/hexdebug/hexdebug/README.md b/projects/1.19/assets/hexdebug/hexdebug/README.md index 0f65c73524f7..daa137bad60d 100644 --- a/projects/1.19/assets/hexdebug/hexdebug/README.md +++ b/projects/1.19/assets/hexdebug/hexdebug/README.md @@ -1 +1 @@ -[见主文档](/projects/1.20/assets/hexdebug/hexdebug) \ No newline at end of file +[见主文档](/projects/assets/hexdebug/1.20/hexdebug) \ No newline at end of file diff --git a/projects/1.20-fabric/assets/hexdebug/hexdebug/README.md b/projects/1.20-fabric/assets/hexdebug/hexdebug/README.md index 0f65c73524f7..daa137bad60d 100644 --- a/projects/1.20-fabric/assets/hexdebug/hexdebug/README.md +++ b/projects/1.20-fabric/assets/hexdebug/hexdebug/README.md @@ -1 +1 @@ -[见主文档](/projects/1.20/assets/hexdebug/hexdebug) \ No newline at end of file +[见主文档](/projects/assets/hexdebug/1.20/hexdebug) \ No newline at end of file diff --git a/projects/1.20-fabric/assets/hexdebug/hexdebug/packer-policy.json b/projects/1.20-fabric/assets/hexdebug/hexdebug/packer-policy.json index 9ea0478bf711..bb221fa7c5d2 100644 --- a/projects/1.20-fabric/assets/hexdebug/hexdebug/packer-policy.json +++ b/projects/1.20-fabric/assets/hexdebug/hexdebug/packer-policy.json @@ -1,6 +1,6 @@ [ { "type": "indirect", - "source": "projects/1.20/assets/hexdebug/hexdebug" + "source": "projects/assets/hexdebug/1.20/hexdebug" } ] \ No newline at end of file diff --git a/projects/1.20-fabric/assets/ioticblocks/ioticblocks/README.md b/projects/1.20-fabric/assets/ioticblocks/ioticblocks/README.md index 7e4c13f1a7fd..01fe48afa518 100644 --- a/projects/1.20-fabric/assets/ioticblocks/ioticblocks/README.md +++ b/projects/1.20-fabric/assets/ioticblocks/ioticblocks/README.md @@ -12,5 +12,5 @@ flowchart LR ### 链接区域 -- [1.20.1](/projects/1.20/assets/ioticblocks/ioticblocks) -- [1.20.1-fabric](/projects/1.20-fabric/assets/ioticblocks/ioticblocks) \ No newline at end of file +- [1.20.1](/projects/assets/ioticblocks/1.20/ioticblocks) +- [1.20.1-fabric](/projects/assets/ioticblocks/1.20-fabric/ioticblocks) \ No newline at end of file diff --git a/projects/1.20-fabric/assets/ioticblocks/ioticblocks/packer-policy.json b/projects/1.20-fabric/assets/ioticblocks/ioticblocks/packer-policy.json index 952352fa4ea4..03a36ddc3b45 100644 --- a/projects/1.20-fabric/assets/ioticblocks/ioticblocks/packer-policy.json +++ b/projects/1.20-fabric/assets/ioticblocks/ioticblocks/packer-policy.json @@ -1,6 +1,6 @@ [ { "type": "indirect", - "source": "projects/1.20/assets/ioticblocks/ioticblocks" + "source": "projects/assets/ioticblocks/1.20/ioticblocks" } ] \ No newline at end of file diff --git a/projects/1.20/assets/hexdebug/hexdebug/README.md b/projects/1.20/assets/hexdebug/hexdebug/README.md index d02c8398dda3..b848794b2ced 100644 --- a/projects/1.20/assets/hexdebug/hexdebug/README.md +++ b/projects/1.20/assets/hexdebug/hexdebug/README.md @@ -14,6 +14,6 @@ flowchart LR ### 链接区域 -- [1.19.2](/projects/1.19/assets/hexdebug/hexdebug) -- [1.20.1](/projects/1.20/assets/hexdebug/hexdebug) -- [1.20.1-fabric](/projects/1.20-fabric/assets/hexdebug/hexdebug) \ No newline at end of file +- [1.19.2](/projects/assets/hexdebug/1.19/hexdebug) +- [1.20.1](/projects/assets/hexdebug/1.20/hexdebug) +- [1.20.1-fabric](/projects/assets/hexdebug/1.20-fabric/hexdebug) \ No newline at end of file diff --git a/projects/1.20/assets/ioticblocks/ioticblocks/README.md b/projects/1.20/assets/ioticblocks/ioticblocks/README.md index 7e4c13f1a7fd..01fe48afa518 100644 --- a/projects/1.20/assets/ioticblocks/ioticblocks/README.md +++ b/projects/1.20/assets/ioticblocks/ioticblocks/README.md @@ -12,5 +12,5 @@ flowchart LR ### 链接区域 -- [1.20.1](/projects/1.20/assets/ioticblocks/ioticblocks) -- [1.20.1-fabric](/projects/1.20-fabric/assets/ioticblocks/ioticblocks) \ No newline at end of file +- [1.20.1](/projects/assets/ioticblocks/1.20/ioticblocks) +- [1.20.1-fabric](/projects/assets/ioticblocks/1.20-fabric/ioticblocks) \ No newline at end of file From cde59c6dbcbf4bf7acc733ef71e706b16afcfcf4 Mon Sep 17 00:00:00 2001 From: "cfpa-bot[bot]" <181747+cfpa-bot[bot]@users.noreply.github.com> Date: Tue, 23 Jun 2026 22:13:04 +0800 Subject: [PATCH 14/14] chore: migrate to new path structure --- .../assets/hexdebug => assets/hexdebug/1.19}/hexdebug/README.md | 0 .../hexdebug/1.19}/hexdebug/lang/en_us.flatten.json5 | 0 .../hexdebug/1.19}/hexdebug/lang/zh_cn.flatten.json5 | 0 .../hexdebug => assets/hexdebug/1.20-fabric}/hexdebug/README.md | 0 .../hexdebug/1.20-fabric}/hexdebug/lang/en_us.flatten.json5 | 0 .../hexdebug/1.20-fabric}/hexdebug/packer-policy.json | 0 .../assets/hexdebug => assets/hexdebug/1.20}/hexdebug/README.md | 0 .../hexdebug/1.20}/hexdebug/lang/en_us.flatten.json5 | 0 .../hexdebug/1.20}/hexdebug/lang/zh_cn.flatten.json5 | 0 .../ioticblocks/1.20-fabric}/ioticblocks/README.md | 0 .../ioticblocks/1.20-fabric}/ioticblocks/lang/en_us.flatten.json5 | 0 .../ioticblocks/1.20-fabric}/ioticblocks/packer-policy.json | 0 .../ioticblocks => assets/ioticblocks/1.20}/ioticblocks/README.md | 0 .../ioticblocks/1.20}/ioticblocks/lang/en_us.flatten.json5 | 0 .../ioticblocks/1.20}/ioticblocks/lang/zh_cn.flatten.json5 | 0 15 files changed, 0 insertions(+), 0 deletions(-) rename projects/{1.19/assets/hexdebug => assets/hexdebug/1.19}/hexdebug/README.md (100%) rename projects/{1.19/assets/hexdebug => assets/hexdebug/1.19}/hexdebug/lang/en_us.flatten.json5 (100%) rename projects/{1.19/assets/hexdebug => assets/hexdebug/1.19}/hexdebug/lang/zh_cn.flatten.json5 (100%) rename projects/{1.20-fabric/assets/hexdebug => assets/hexdebug/1.20-fabric}/hexdebug/README.md (100%) rename projects/{1.20-fabric/assets/hexdebug => assets/hexdebug/1.20-fabric}/hexdebug/lang/en_us.flatten.json5 (100%) rename projects/{1.20-fabric/assets/hexdebug => assets/hexdebug/1.20-fabric}/hexdebug/packer-policy.json (100%) rename projects/{1.20/assets/hexdebug => assets/hexdebug/1.20}/hexdebug/README.md (100%) rename projects/{1.20/assets/hexdebug => assets/hexdebug/1.20}/hexdebug/lang/en_us.flatten.json5 (100%) rename projects/{1.20/assets/hexdebug => assets/hexdebug/1.20}/hexdebug/lang/zh_cn.flatten.json5 (100%) rename projects/{1.20-fabric/assets/ioticblocks => assets/ioticblocks/1.20-fabric}/ioticblocks/README.md (100%) rename projects/{1.20-fabric/assets/ioticblocks => assets/ioticblocks/1.20-fabric}/ioticblocks/lang/en_us.flatten.json5 (100%) rename projects/{1.20-fabric/assets/ioticblocks => assets/ioticblocks/1.20-fabric}/ioticblocks/packer-policy.json (100%) rename projects/{1.20/assets/ioticblocks => assets/ioticblocks/1.20}/ioticblocks/README.md (100%) rename projects/{1.20/assets/ioticblocks => assets/ioticblocks/1.20}/ioticblocks/lang/en_us.flatten.json5 (100%) rename projects/{1.20/assets/ioticblocks => assets/ioticblocks/1.20}/ioticblocks/lang/zh_cn.flatten.json5 (100%) diff --git a/projects/1.19/assets/hexdebug/hexdebug/README.md b/projects/assets/hexdebug/1.19/hexdebug/README.md similarity index 100% rename from projects/1.19/assets/hexdebug/hexdebug/README.md rename to projects/assets/hexdebug/1.19/hexdebug/README.md diff --git a/projects/1.19/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 b/projects/assets/hexdebug/1.19/hexdebug/lang/en_us.flatten.json5 similarity index 100% rename from projects/1.19/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 rename to projects/assets/hexdebug/1.19/hexdebug/lang/en_us.flatten.json5 diff --git a/projects/1.19/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 b/projects/assets/hexdebug/1.19/hexdebug/lang/zh_cn.flatten.json5 similarity index 100% rename from projects/1.19/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 rename to projects/assets/hexdebug/1.19/hexdebug/lang/zh_cn.flatten.json5 diff --git a/projects/1.20-fabric/assets/hexdebug/hexdebug/README.md b/projects/assets/hexdebug/1.20-fabric/hexdebug/README.md similarity index 100% rename from projects/1.20-fabric/assets/hexdebug/hexdebug/README.md rename to projects/assets/hexdebug/1.20-fabric/hexdebug/README.md diff --git a/projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 b/projects/assets/hexdebug/1.20-fabric/hexdebug/lang/en_us.flatten.json5 similarity index 100% rename from projects/1.20-fabric/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 rename to projects/assets/hexdebug/1.20-fabric/hexdebug/lang/en_us.flatten.json5 diff --git a/projects/1.20-fabric/assets/hexdebug/hexdebug/packer-policy.json b/projects/assets/hexdebug/1.20-fabric/hexdebug/packer-policy.json similarity index 100% rename from projects/1.20-fabric/assets/hexdebug/hexdebug/packer-policy.json rename to projects/assets/hexdebug/1.20-fabric/hexdebug/packer-policy.json diff --git a/projects/1.20/assets/hexdebug/hexdebug/README.md b/projects/assets/hexdebug/1.20/hexdebug/README.md similarity index 100% rename from projects/1.20/assets/hexdebug/hexdebug/README.md rename to projects/assets/hexdebug/1.20/hexdebug/README.md diff --git a/projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 b/projects/assets/hexdebug/1.20/hexdebug/lang/en_us.flatten.json5 similarity index 100% rename from projects/1.20/assets/hexdebug/hexdebug/lang/en_us.flatten.json5 rename to projects/assets/hexdebug/1.20/hexdebug/lang/en_us.flatten.json5 diff --git a/projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 b/projects/assets/hexdebug/1.20/hexdebug/lang/zh_cn.flatten.json5 similarity index 100% rename from projects/1.20/assets/hexdebug/hexdebug/lang/zh_cn.flatten.json5 rename to projects/assets/hexdebug/1.20/hexdebug/lang/zh_cn.flatten.json5 diff --git a/projects/1.20-fabric/assets/ioticblocks/ioticblocks/README.md b/projects/assets/ioticblocks/1.20-fabric/ioticblocks/README.md similarity index 100% rename from projects/1.20-fabric/assets/ioticblocks/ioticblocks/README.md rename to projects/assets/ioticblocks/1.20-fabric/ioticblocks/README.md diff --git a/projects/1.20-fabric/assets/ioticblocks/ioticblocks/lang/en_us.flatten.json5 b/projects/assets/ioticblocks/1.20-fabric/ioticblocks/lang/en_us.flatten.json5 similarity index 100% rename from projects/1.20-fabric/assets/ioticblocks/ioticblocks/lang/en_us.flatten.json5 rename to projects/assets/ioticblocks/1.20-fabric/ioticblocks/lang/en_us.flatten.json5 diff --git a/projects/1.20-fabric/assets/ioticblocks/ioticblocks/packer-policy.json b/projects/assets/ioticblocks/1.20-fabric/ioticblocks/packer-policy.json similarity index 100% rename from projects/1.20-fabric/assets/ioticblocks/ioticblocks/packer-policy.json rename to projects/assets/ioticblocks/1.20-fabric/ioticblocks/packer-policy.json diff --git a/projects/1.20/assets/ioticblocks/ioticblocks/README.md b/projects/assets/ioticblocks/1.20/ioticblocks/README.md similarity index 100% rename from projects/1.20/assets/ioticblocks/ioticblocks/README.md rename to projects/assets/ioticblocks/1.20/ioticblocks/README.md diff --git a/projects/1.20/assets/ioticblocks/ioticblocks/lang/en_us.flatten.json5 b/projects/assets/ioticblocks/1.20/ioticblocks/lang/en_us.flatten.json5 similarity index 100% rename from projects/1.20/assets/ioticblocks/ioticblocks/lang/en_us.flatten.json5 rename to projects/assets/ioticblocks/1.20/ioticblocks/lang/en_us.flatten.json5 diff --git a/projects/1.20/assets/ioticblocks/ioticblocks/lang/zh_cn.flatten.json5 b/projects/assets/ioticblocks/1.20/ioticblocks/lang/zh_cn.flatten.json5 similarity index 100% rename from projects/1.20/assets/ioticblocks/ioticblocks/lang/zh_cn.flatten.json5 rename to projects/assets/ioticblocks/1.20/ioticblocks/lang/zh_cn.flatten.json5