From 481b858e497dfe0da8ca62866fc0b7ad98ab875f Mon Sep 17 00:00:00 2001
From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com>
Date: Thu, 5 Mar 2026 19:53:55 +0800
Subject: [PATCH 01/13] HextraPats create
---
.../hextrapats/lang/en_us.flatten.json5 | 134 ++++++++++++++++++
.../hextrapats/lang/zh_cn.flatten.json5 | 134 ++++++++++++++++++
2 files changed, 268 insertions(+)
create mode 100644 projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
create mode 100644 projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
new file mode 100644
index 000000000000..1fdaf3426de5
--- /dev/null
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
@@ -0,0 +1,134 @@
+{
+ "pages.hextrapats":{
+ "hextrapats_consts.title": "Hextra Constants",
+ "hextrapats_logic.title": "Hextra Logic",
+ "hextrapats_retained_comparison.title": "Retaining Comparisons",
+ "hextrapats_vec_literals.title": "Vector Literals",
+ "hextrapats_math.title": "Hextra Math",
+ },
+ hextrapats: {
+ page: {
+ consts: {
+ one: "The left-hand counter-clockwise pattern adds (1, 1, 1) to the stack; the right-hand clockwise pattern adds (-1, -1, -1)."
+ },
+ logic: {
+ greater: "If the first vector is longer than the second, return True. Otherwise, return False.",
+ less: "If the first vector is shorter than the second, return True. Otherwise, return False.",
+ greater_eq: "If the first vector is longer or the same length as the second, return True. Otherwise, return False.",
+ less_eq: "If the first vector is shorter or the same length as the second, return True. Otherwise, return False.",
+ len_eq: "If the two vectors are the same length (within small tolerance), return True. Otherwise, return False.",
+ len_neq: "If the two vectors are not the same length (outside small tolerance), return True. Otherwise, return False.",
+ in_range: "If the first number is between the second and third, return True. Otherwise, return False. If the first value is a vector, compare its length instead.",
+ "in_range.ops": "The fourth number seems to describe how to check if the value is in the range.$(li)0: min < val < max$(li)1: min <= val < max$(li)2: min < val <= max$(li)3: min <= val <= max",
+ out_range: "If the first number is not between the second and third, return True. Otherwise, return False. If the first value is a vector, compare its length instead.",
+ "out_range.ops": "The fourth number seems to describe how to check if the value is outside the range.$(li)0: val < min or max < val$(li)1: val <= min or max < val$(li)2: val < min or max <= val$(li)3: val <= min or max <= val"
+ },
+ retained_comparison: {
+ intro: "Sometimes, I want operate on two iotas after comparing them, but it gets rather annoying to have to execute $(l:patterns/stackmanip#hexcasting:2dup)$(action)Dioscuri Gambit/$ every time I do.",
+ detail: "With some experimentation, I have found that prepending a comparison with a clockwise triangle will cause the two inputs to not be consumed.",
+ greater: "Comp. Gambit: Maximus",
+ less: "Comp. Gambit: Minimus",
+ greater_eq: "Comp. Gambit: Maximus II",
+ less_eq: "Comp. Gambit: Minimus II",
+ equals: "Comp. Gambit: Equality",
+ not_equals: "Comp. Gambit: Inequality",
+ len_eq: "Comp. Gambit: Len. Eq.",
+ len_neq: "Comp. Gambit: Len. Ineq."
+ },
+ vec_literals: {
+ intro: "Interestingly, attaching the tail of any Vector Reflection to the start of $(l:patterns/numbers)$(action)Number Reflection/$ makes it return a vector.",
+ x: "A head that sharply bends to the left will output a vector along the $(l:patterns/consts#hexcasting:const/vec/x)$(action)X axis/$.",
+ y: "A head that doesn't bend will output a vector along the $(l:patterns/consts#hexcasting:const/vec/y)$(action)Y axis/$.",
+ z: "A head that sharply bends to the right will output a vector along the $(l:patterns/consts#hexcasting:const/vec/z)$(action)Z axis/$.",
+ "1": "A head that slightly bends to the left will output a vector where $(l:patterns/hextrapats_consts#hextrapats:haha_ha_one)$(action)all 3 components are the same/$.",
+ detail: "First, I draw one of the eight shapes shown on the prior pages. Next, the $(italic)angles/$ following will modify a running count starting at 0.$(li)Forward: Add 1$(li)Left: Add 5$(li)Right: Add 10$(li)Sharp Left: Multiply by 2$(li)Sharp Right: Divide by 2.$(br)The clockwise version of the pattern, on the right of the other page, will negate the value at the very end. (The left-hand counter-clockwise version keeps the number positive).$(p)Once I finish drawing, a vector's pushed to the top of the stack.",
+
+ example: {
+ "x10.header": "Example 1",
+ "x10": "This pattern pushes (10, 0, 0).",
+ "y7.header": "Example 2",
+ "y7": "This pattern pushes (0, 7, 0): 5 + 1 + 1.",
+ "z-32.header": "Example 3",
+ "z-32": "This pattern pushes (0, 0, -32): negate 1 + 5 + 10 * 2.",
+ "a4.5.header": "Example 4",
+ "a4.5": "This pattern pushes (4.5, 4.5, 4.5): 5 / 2 + 1 + 1."
+ }
+ },
+ math: {
+ deg_to_rad: "Converts an angle in degrees to an angle in radians. Essentially multiplies by $(l:patterns/consts#hexcasting:const/double/pi)$(action)pi/$ then divides by 180.",
+ rad_to_deg: "Converts an angle in radians to an angle in degrees. Essentially multiplies by 180 then divides by $(l:patterns/consts#hexcasting:const/double/pi)$(action)pi/$.",
+ normalize: "Sets the length of the vector to one.",
+ rot_about_x: "Rotates the vector by the given angle in radians around the X axis.",
+ rot_about_y: "Rotates the vector by the given angle in radians around the Y axis.",
+ rot_about_z: "Rotates the vector by the given angle in radians around the Z axis.",
+ cons_about_x: "Converts an angle in radians to a unit vector where X=0. +Z at 0 radians and +Y at pi/4 radians.",
+ cons_about_y: "Converts an angle in radians to a unit vector where Y=0. +Z at 0 radians and -X at pi/4 radians. Some texts have mentioned something called $(thing)F3/$, but I haven't been able to tell what that means.",
+ cons_about_z: "Converts an angle in radians to a unit vector where Z=0. -X at 0 radians and +Y at pi/4 radians.",
+ scientific_exp: "Multiplies the number by 10^n, where n is the length of the tail. A downwards tail multiplies by 10^-n."
+ }
+ }
+ },
+ hexcasting: {
+ action: {
+ "hextrapats:": {
+ haha_ha_one: "Vector Reflection +1",
+ eno_ah_ahah: "Vector Reflection -1",
+
+ len_eq: "Length Equality Distillation",
+ len_neq: "Length Inequality Distillation",
+
+ in_range: "Range Exaltation",
+ out_range: "Range Exaltation II",
+
+ scaled_vec_x: "Vector Reflection X II",
+ scaled_vec_y: "Vector Reflection Y II",
+ scaled_vec_z: "Vector Reflection Z II",
+ scaled_vec_all: "Vector Reflection 1 II",
+
+ deg_to_rad: "Radian Purification",
+ rad_to_deg: "Degree Purification",
+ normalize: "Norm Purification",
+ rot_about_x: "Pitch Distillation",
+ rot_about_y: "Yaw Distillation",
+ rot_about_z: "Roll Distillation",
+ cons_about_x: "Pitch Purification",
+ cons_about_y: "Yaw Purification",
+ cons_about_z: "Roll Purification",
+
+ retained_comparison: "Comparison Gambit",
+
+ scientific_exp: "Scientific Purification"
+ },
+
+ "book.hextrapats:": {
+ haha_ha_one: "Vector Rfln. +1/-1",
+
+ len_eq: "Length Equality Dstl.",
+ len_neq: "Length Inequality Dstl.",
+
+ scaled_vec_x: "Vector Rfln. +X/-X II",
+ scaled_vec_y: "Vector Rfln. +Y/-Y II",
+ scaled_vec_z: "Vector Rfln. +Z/-Z II",
+ scaled_vec_all: "Vector Rfln. +1/-1 II",
+ }
+ },
+ "special.hextrapats:": {
+ scaled_vec_x: "Vector Reflection: (%s, 0, 0)",
+ scaled_vec_y: "Vector Reflection: (0, %s, 0)",
+ scaled_vec_z: "Vector Reflection: (0, 0, %s)",
+ scaled_vec_all: "Vector Reflection: (%s, %s, %s)",
+ retained_comparison: {
+ name: "Comparison Gambit: %s",
+ "op.hexcasting:": {
+ greater: "Maximus",
+ less: "Minimus",
+ greater_eq: "Maximus II",
+ less_eq: "Minimus II",
+ equals: "Equality",
+ not_equals: "Inequality"
+ }
+ },
+ scientific_exp: "Scientific Purification: 10^%s"
+ }
+ }
+}
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
new file mode 100644
index 000000000000..073940dd5871
--- /dev/null
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
@@ -0,0 +1,134 @@
+{
+ "pages.hextrapats":{
+ "hextrapats_consts.title": "咒法新增:常量",
+ "hextrapats_logic.title": "咒法新增:逻辑",
+ "hextrapats_retained_comparison.title": "保留式比较",
+ "hextrapats_vec_literals.title": "向量常量",
+ "hextrapats_math.title": "咒法新增:数学",
+ },
+ hextrapats: {
+ page: {
+ consts: {
+ one: "左图即逆时针图案会压入 (1, 1, 1);右图即顺时针图案会压入 (-1, -1, -1)。"
+ },
+ logic: {
+ greater: "若第一个向量的长度长于第二个的,返回 True;否则返回 False。",
+ less: "若第一个向量的长度短于第二个的,返回 True;否则返回 False。",
+ greater_eq: "若第一个向量的长度长于或等于第二个的,返回 True;否则返回 False。",
+ less_eq: "若第一个向量的长度短于或等于第二个的,返回 True;否则返回 False。",
+ len_eq: "若两向量的长度相等(允许较小误差),返回 True;否则返回 False。",
+ len_neq: "若两向量的长度不相等(不计较小误差),返回 True;否则返回 False。",
+ in_range: "若第一个数在第二个和第三个之间,返回 True;否则返回 False。若第一个参数是向量,则比较其长度。",
+ "in_range.ops": "第四个数似乎描述了检验的方式。$(li)0:min < val < max$(li)1:min <= val < max$(li)2:min < val <= max$(li)3:min <= val <= max",
+ out_range: "若第一个数不在第二个和第三个之间,返回 True;否则返回 False。若第一个参数是向量,则比较其长度。",
+ "out_range.ops": "第四个数似乎描述了检验的方式。$(li)0:val < min 或 max < val$(li)1:val <= min 或 max < val$(li)2:val < min 或 max <= val$(li)3:val <= min 或 max <= val"
+ },
+ retained_comparison: {
+ intro: "总有些时候,我会想要在比较两个 iota 之后还继续对它们执行操作,但这就需要每次都先运行$(l:patterns/stackmanip#hexcasting:2dup)$(action)狄俄斯库里之策略/$,确实有些麻烦。",
+ detail: "通过实验,我发现:在比较图案前加上一个顺时针的三角形,就可以保留两个输入参数了。",
+ greater: "比较之策略:至大",
+ less: "比较之策略:至小",
+ greater_eq: "比较之策略:至大第二型",
+ less_eq: "比较之策略:至小第二型",
+ equals: "比较之策略:相等",
+ not_equals: "比较之策略:不等",
+ len_eq: "比较之策略:长度相等",
+ len_neq: "比较之策略:长度不等"
+ },
+ vec_literals: {
+ intro: "返回数的图案有种神奇的性质:把向量之精思的尾部加到$(l:patterns/numbers)$(action)数之精思/$的开头,就能返回一个向量。",
+ x: "向左急转的头部会返回 $(l:patterns/consts#hexcasting:const/vec/x)$(action)X 轴/$上的向量。",
+ y: "直线形状的头部会返回 $(l:patterns/consts#hexcasting:const/vec/y)$(action)Y 轴/$上的向量。",
+ z: "向右急转的头部会返回 $(l:patterns/consts#hexcasting:const/vec/z)$(action)Z 轴/$上的向量。",
+ "1": "向左微偏的头部会返回$(l:patterns/hextrapats_consts#hextrapats:haha_ha_one)$(action)所有 3 个分量都相等/$的向量。",
+ detail: "首先,绘制前页八种图案中的一种,默认数值为 0。然后,每一画的$(italic)方向/$会以对应方式修改该数值。$(li)前方:加 1$(li)左前方:加 5$(li)右前方:加 10$(li)左后方:乘 2$(li)右后方:除以 2$(br)顺时针绘制,也即各页右图,会在绘制完成后取相反数(如左图逆时针绘制则不取)。$(p)绘制完成后会返回对应向量。",
+
+ example: {
+ "x10.header": "例图一",
+ "x10": "该图案会返回 (10, 0, 0)。",
+ "y7.header": "例图二",
+ "y7": "该图案会返回 (0, 7, 0):5 + 1 + 1。",
+ "z-32.header": "例图三",
+ "z-32": "该图案会返回 (0, 0, -32):(1 + 5 + 10) * 2 的相反数。",
+ "a4.5.header": "例图四",
+ "a4.5": "该图案会返回 (4.5, 4.5, 4.5):5 / 2 + 1 + 1。"
+ }
+ },
+ math: {
+ deg_to_rad: "将角度变为弧度。相当于乘以 $(l:patterns/consts#hexcasting:const/double/pi)$(action)π/$ 再除以 180。",
+ rad_to_deg: "将弧度变为角度。相当于乘以 180 再除以 $(l:patterns/consts#hexcasting:const/double/pi)$(action)π/$。",
+ normalize: "将向量的长度变为 1。",
+ rot_about_x: "绕 X 轴将所给向量旋转所给弧度。",
+ rot_about_y: "绕 Y 轴将所给向量旋转所给弧度。",
+ rot_about_z: "绕 Z 轴将所给向量旋转所给弧度。",
+ cons_about_x: "将弧度角变为单位向量。该向量的 X 分量为 0。0 弧度对应 +Z,π/4 弧度对应 +Y。",
+ cons_about_y: "将弧度角变为单位向量。该向量的 Y 分量为 0。0 弧度对应 +Z,π/4 弧度对应 -X。某些文献提到过某种叫 $(thing)F3/$ 的东西,但我还不知道它的意义。",
+ cons_about_z: "将弧度角变为单位向量。该向量的 Z 分量为 0。0 弧度对应 -X,π/4 弧度对应 +Y。",
+ scientific_exp: "求所给数与 10^n 相乘的积。其中 n 为尾部的长度。尾部向下代表乘以 10^-n。"
+ }
+ }
+ },
+ hexcasting: {
+ action: {
+ "hextrapats:": {
+ haha_ha_one: "向量之精思,+1型",
+ eno_ah_ahah: "向量之精思,-1型",
+
+ len_eq: "长度相等之馏化",
+ len_neq: "长度不等之馏化",
+
+ in_range: "范围之提整",
+ out_range: "范围之提整,第二型",
+
+ scaled_vec_x: "向量之精思,X第二型",
+ scaled_vec_y: "向量之精思,Y第二型",
+ scaled_vec_z: "向量之精思,Z第二型",
+ scaled_vec_all: "向量之精思,1第二型",
+
+ deg_to_rad: "弧度之纯化",
+ rad_to_deg: "角度之纯化",
+ normalize: "归一之纯化",
+ rot_about_x: "俯仰之馏化",
+ rot_about_y: "偏航之馏化",
+ rot_about_z: "滚转之馏化",
+ cons_about_x: "俯仰之纯化",
+ cons_about_y: "偏航之纯化",
+ cons_about_z: "滚转之纯化",
+
+ retained_comparison: "比较之策略",
+
+ scientific_exp: "科学计数之纯化"
+ },
+
+ "book.hextrapats:": {
+ haha_ha_one: "向量之精思,+1/-1型",
+
+ len_eq: "长度相等之馏化",
+ len_neq: "长度不等之馏化",
+
+ scaled_vec_x: "向量之精思,+X/-X第二型",
+ scaled_vec_y: "向量之精思,+Y/-Y第二型",
+ scaled_vec_z: "向量之精思,+Z/-Z第二型",
+ scaled_vec_all: "向量之精思,+1/-1第二型",
+ }
+ },
+ "special.hextrapats:": {
+ scaled_vec_x: "向量之精思:(%s, 0, 0)",
+ scaled_vec_y: "向量之精思:(0, %s, 0)",
+ scaled_vec_z: "向量之精思:(0, 0, %s)",
+ scaled_vec_all: "向量之精思:(%s, %s, %s)",
+ retained_comparison: {
+ name: "比较之策略:%s",
+ "op.hexcasting:": {
+ greater: "至大",
+ less: "至小",
+ greater_eq: "至大第二型",
+ less_eq: "至小第二型",
+ equals: "相等",
+ not_equals: "不等"
+ }
+ },
+ scientific_exp: "科学计数之纯化:10^%s"
+ }
+ }
+}
From 2a8135a61cdbc425e638d202e9f98461a4cc58ec Mon Sep 17 00:00:00 2001
From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com>
Date: Fri, 6 Mar 2026 23:27:33 +0800
Subject: [PATCH 02/13] =?UTF-8?q?HextraPats=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
---
.../hextrapats/lang/en_us.flatten.json5 | 4 ++--
.../hextrapats/lang/zh_cn.flatten.json5 | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
index 1fdaf3426de5..017fd17ba838 100644
--- a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
@@ -62,9 +62,9 @@
rot_about_y: "Rotates the vector by the given angle in radians around the Y axis.",
rot_about_z: "Rotates the vector by the given angle in radians around the Z axis.",
cons_about_x: "Converts an angle in radians to a unit vector where X=0. +Z at 0 radians and +Y at pi/4 radians.",
- cons_about_y: "Converts an angle in radians to a unit vector where Y=0. +Z at 0 radians and -X at pi/4 radians. Some texts have mentioned something called $(thing)F3/$, but I haven't been able to tell what that means.",
+ cons_about_y: "Converts an angle in radians to a unit vector where Y=0. +Z at 0 radians and -X at pi/4 radians. I've seen some texts related to this pattern mentioning something called $(thing)F3/$, but I couldn't figure out what that means.",
cons_about_z: "Converts an angle in radians to a unit vector where Z=0. -X at 0 radians and +Y at pi/4 radians.",
- scientific_exp: "Multiplies the number by 10^n, where n is the length of the tail. A downwards tail multiplies by 10^-n."
+ scientific_exp: "Multiplies the number by 10^n or 10^-n, where n is the length of the tail, depending on whether the start is similar to $(l:patterns/math#hexcasting:mul)$(action)Multiplicative Distillation/$ or $(l:patterns/math#hexcasting:div)$(action)Division Distillation/$."
}
}
},
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
index 073940dd5871..ca263ca4b7ba 100644
--- a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
@@ -62,9 +62,9 @@
rot_about_y: "绕 Y 轴将所给向量旋转所给弧度。",
rot_about_z: "绕 Z 轴将所给向量旋转所给弧度。",
cons_about_x: "将弧度角变为单位向量。该向量的 X 分量为 0。0 弧度对应 +Z,π/4 弧度对应 +Y。",
- cons_about_y: "将弧度角变为单位向量。该向量的 Y 分量为 0。0 弧度对应 +Z,π/4 弧度对应 -X。某些文献提到过某种叫 $(thing)F3/$ 的东西,但我还不知道它的意义。",
+ cons_about_y: "将弧度角变为单位向量。该向量的 Y 分量为 0。0 弧度对应 +Z,π/4 弧度对应 -X。我曾读到过某些文献提到某种叫 $(thing)F3/$ 的东西,但我还找不出它的意义。",
cons_about_z: "将弧度角变为单位向量。该向量的 Z 分量为 0。0 弧度对应 -X,π/4 弧度对应 +Y。",
- scientific_exp: "求所给数与 10^n 相乘的积。其中 n 为尾部的长度。尾部向下代表乘以 10^-n。"
+ scientific_exp: "求所给数与 10^n 或 10^-n 相乘的积。其中 n 为尾部的长度,指数有无负号取决于图案开头更近似于$(l:patterns/math#hexcasting:mul)$(action)乘法之馏化/$还是$(l:patterns/math#hexcasting:div)$(action)除法之馏化/$。"
}
}
},
From f28c16ac08ab0d345db175acc1b4b8fa2957af32 Mon Sep 17 00:00:00 2001
From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com>
Date: Sun, 8 Mar 2026 02:05:26 +0800
Subject: [PATCH 03/13] =?UTF-8?q?HextraPats=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
---
.../hextrapats/lang/en_us.flatten.json5 | 56 +++++++++++--------
.../hextrapats/lang/zh_cn.flatten.json5 | 56 +++++++++++--------
2 files changed, 66 insertions(+), 46 deletions(-)
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
index 017fd17ba838..305a415ba81d 100644
--- a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
@@ -2,9 +2,10 @@
"pages.hextrapats":{
"hextrapats_consts.title": "Hextra Constants",
"hextrapats_logic.title": "Hextra Logic",
- "hextrapats_retained_comparison.title": "Retaining Comparisons",
+ "hextrapats_nocon.title": "Non-consuming Logic",
"hextrapats_vec_literals.title": "Vector Literals",
"hextrapats_math.title": "Hextra Math",
+ "hextrapats_lists.title": "Hextra Lists",
},
hextrapats: {
page: {
@@ -23,17 +24,10 @@
out_range: "If the first number is not between the second and third, return True. Otherwise, return False. If the first value is a vector, compare its length instead.",
"out_range.ops": "The fourth number seems to describe how to check if the value is outside the range.$(li)0: val < min or max < val$(li)1: val <= min or max < val$(li)2: val < min or max <= val$(li)3: val <= min or max <= val"
},
- retained_comparison: {
+ nocon: {
intro: "Sometimes, I want operate on two iotas after comparing them, but it gets rather annoying to have to execute $(l:patterns/stackmanip#hexcasting:2dup)$(action)Dioscuri Gambit/$ every time I do.",
+ name: "Comparison Gambit",
detail: "With some experimentation, I have found that prepending a comparison with a clockwise triangle will cause the two inputs to not be consumed.",
- greater: "Comp. Gambit: Maximus",
- less: "Comp. Gambit: Minimus",
- greater_eq: "Comp. Gambit: Maximus II",
- less_eq: "Comp. Gambit: Minimus II",
- equals: "Comp. Gambit: Equality",
- not_equals: "Comp. Gambit: Inequality",
- len_eq: "Comp. Gambit: Len. Eq.",
- len_neq: "Comp. Gambit: Len. Ineq."
},
vec_literals: {
intro: "Interestingly, attaching the tail of any Vector Reflection to the start of $(l:patterns/numbers)$(action)Number Reflection/$ makes it return a vector.",
@@ -65,6 +59,10 @@
cons_about_y: "Converts an angle in radians to a unit vector where Y=0. +Z at 0 radians and -X at pi/4 radians. I've seen some texts related to this pattern mentioning something called $(thing)F3/$, but I couldn't figure out what that means.",
cons_about_z: "Converts an angle in radians to a unit vector where Z=0. -X at 0 radians and +Y at pi/4 radians.",
scientific_exp: "Multiplies the number by 10^n or 10^-n, where n is the length of the tail, depending on whether the start is similar to $(l:patterns/math#hexcasting:mul)$(action)Multiplicative Distillation/$ or $(l:patterns/math#hexcasting:div)$(action)Division Distillation/$."
+ },
+ lists: {
+ split: "Splits a list at the given index. [a, b, c, d, e], 2 will return [a, b], [c, d, e].",
+ swindle: "Reorders the elements of a list the same way $(l:patterns/stackmanip#hexcasting:swizzle)$(action)Swindler's Gambit/$ reorders the stack. Inputting a negative code will reorder the elements at the start instead of the end."
}
}
},
@@ -95,9 +93,21 @@
cons_about_y: "Yaw Purification",
cons_about_z: "Roll Purification",
- retained_comparison: "Comparison Gambit",
+ "nocon/": {
+ greater: "Comparison Gambit: Maximus",
+ less: "Comparison Gambit: Minimus",
+ greater_eq: "Comparison Gambit: Maximus II",
+ less_eq: "Comparison Gambit: Minimus II",
+ eq: "Comparison Gambit: Equality",
+ neq: "Comparison Gambit: Inequality",
+ len_eq: "Comparison Gambit: Length Equality",
+ len_neq: "Comparison Gambit: Length Inequality",
+ },
+
+ scientific_exp: "Scientific Purification",
- scientific_exp: "Scientific Purification"
+ split_list: "Separation Gambit",
+ swindle_list: "Swindler's Distillation"
},
"book.hextrapats:": {
@@ -110,6 +120,17 @@
scaled_vec_y: "Vector Rfln. +Y/-Y II",
scaled_vec_z: "Vector Rfln. +Z/-Z II",
scaled_vec_all: "Vector Rfln. +1/-1 II",
+
+ "nocon/": {
+ greater: "Comp. Gambit: Maximus",
+ less: "Comp. Gambit: Minimus",
+ greater_eq: "Comp. Gambit: Maximus II",
+ less_eq: "Comp. Gambit: Minimus II",
+ eq: "Comp. Gambit: Equality",
+ neq: "Comp. Gambit: Inequality",
+ len_eq: "Comp. Gambit: Len. Eq.",
+ len_neq: "Comp. Gambit: Len. Ineq."
+ }
}
},
"special.hextrapats:": {
@@ -117,17 +138,6 @@
scaled_vec_y: "Vector Reflection: (0, %s, 0)",
scaled_vec_z: "Vector Reflection: (0, 0, %s)",
scaled_vec_all: "Vector Reflection: (%s, %s, %s)",
- retained_comparison: {
- name: "Comparison Gambit: %s",
- "op.hexcasting:": {
- greater: "Maximus",
- less: "Minimus",
- greater_eq: "Maximus II",
- less_eq: "Minimus II",
- equals: "Equality",
- not_equals: "Inequality"
- }
- },
scientific_exp: "Scientific Purification: 10^%s"
}
}
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
index ca263ca4b7ba..a3c6b8d94885 100644
--- a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
@@ -2,9 +2,10 @@
"pages.hextrapats":{
"hextrapats_consts.title": "咒法新增:常量",
"hextrapats_logic.title": "咒法新增:逻辑",
- "hextrapats_retained_comparison.title": "保留式比较",
+ "hextrapats_nocon.title": "保留式比较",
"hextrapats_vec_literals.title": "向量常量",
"hextrapats_math.title": "咒法新增:数学",
+ "hextrapats_lists.title": "咒法新增:列表",
},
hextrapats: {
page: {
@@ -23,17 +24,10 @@
out_range: "若第一个数不在第二个和第三个之间,返回 True;否则返回 False。若第一个参数是向量,则比较其长度。",
"out_range.ops": "第四个数似乎描述了检验的方式。$(li)0:val < min 或 max < val$(li)1:val <= min 或 max < val$(li)2:val < min 或 max <= val$(li)3:val <= min 或 max <= val"
},
- retained_comparison: {
+ nocon: {
intro: "总有些时候,我会想要在比较两个 iota 之后还继续对它们执行操作,但这就需要每次都先运行$(l:patterns/stackmanip#hexcasting:2dup)$(action)狄俄斯库里之策略/$,确实有些麻烦。",
+ name: "比较之策略",
detail: "通过实验,我发现:在比较图案前加上一个顺时针的三角形,就可以保留两个输入参数了。",
- greater: "比较之策略:至大",
- less: "比较之策略:至小",
- greater_eq: "比较之策略:至大第二型",
- less_eq: "比较之策略:至小第二型",
- equals: "比较之策略:相等",
- not_equals: "比较之策略:不等",
- len_eq: "比较之策略:长度相等",
- len_neq: "比较之策略:长度不等"
},
vec_literals: {
intro: "返回数的图案有种神奇的性质:把向量之精思的尾部加到$(l:patterns/numbers)$(action)数之精思/$的开头,就能返回一个向量。",
@@ -65,6 +59,10 @@
cons_about_y: "将弧度角变为单位向量。该向量的 Y 分量为 0。0 弧度对应 +Z,π/4 弧度对应 -X。我曾读到过某些文献提到某种叫 $(thing)F3/$ 的东西,但我还找不出它的意义。",
cons_about_z: "将弧度角变为单位向量。该向量的 Z 分量为 0。0 弧度对应 -X,π/4 弧度对应 +Y。",
scientific_exp: "求所给数与 10^n 或 10^-n 相乘的积。其中 n 为尾部的长度,指数有无负号取决于图案开头更近似于$(l:patterns/math#hexcasting:mul)$(action)乘法之馏化/$还是$(l:patterns/math#hexcasting:div)$(action)除法之馏化/$。"
+ },
+ lists: {
+ split: "在所给下标处分割列表。[a, b, c, d, e], 2 会返回 [a, b], [c, d, e]。",
+ swindle: "重排列表的元素,方式与$(l:patterns/stackmanip#hexcasting:swizzle)$(action)骗徒之策略/$重排栈的一致。给定负值会从开头起进行重排,而非从末尾起。"
}
}
},
@@ -95,9 +93,21 @@
cons_about_y: "偏航之纯化",
cons_about_z: "滚转之纯化",
- retained_comparison: "比较之策略",
+ "nocon/": {
+ greater: "比较之策略:至大",
+ less: "比较之策略:至小",
+ greater_eq: "比较之策略:至大第二型",
+ less_eq: "比较之策略:至小第二型",
+ eq: "比较之策略:相等",
+ neq: "比较之策略:不等",
+ len_eq: "比较之策略:长度相等",
+ len_neq: "比较之策略:长度不等",
+ },
+
+ scientific_exp: "科学计数之纯化",
- scientific_exp: "科学计数之纯化"
+ split_list: "分割之策略",
+ swindle_list: "骗徒之馏化"
},
"book.hextrapats:": {
@@ -110,6 +120,17 @@
scaled_vec_y: "向量之精思,+Y/-Y第二型",
scaled_vec_z: "向量之精思,+Z/-Z第二型",
scaled_vec_all: "向量之精思,+1/-1第二型",
+
+ "nocon/": {
+ greater: "比较之策略:至大",
+ less: "比较之策略:至小",
+ greater_eq: "比较之策略:至大第二型",
+ less_eq: "比较之策略:至小第二型",
+ eq: "比较之策略:相等",
+ neq: "比较之策略:不等",
+ len_eq: "比较之策略:长度相等",
+ len_neq: "比较之策略:长度不等"
+ }
}
},
"special.hextrapats:": {
@@ -117,17 +138,6 @@
scaled_vec_y: "向量之精思:(0, %s, 0)",
scaled_vec_z: "向量之精思:(0, 0, %s)",
scaled_vec_all: "向量之精思:(%s, %s, %s)",
- retained_comparison: {
- name: "比较之策略:%s",
- "op.hexcasting:": {
- greater: "至大",
- less: "至小",
- greater_eq: "至大第二型",
- less_eq: "至小第二型",
- equals: "相等",
- not_equals: "不等"
- }
- },
scientific_exp: "科学计数之纯化:10^%s"
}
}
From 3809b5fe0cc9a2514252f10f2318b351691f5292 Mon Sep 17 00:00:00 2001
From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com>
Date: Mon, 9 Mar 2026 16:52:03 +0800
Subject: [PATCH 04/13] =?UTF-8?q?HextraPats=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
---
.../hextrapats/lang/en_us.flatten.json5 | 21 ++++++++++++++++---
.../hextrapats/lang/zh_cn.flatten.json5 | 21 ++++++++++++++++---
2 files changed, 36 insertions(+), 6 deletions(-)
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
index 305a415ba81d..16cec10d6b9e 100644
--- a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
@@ -52,16 +52,24 @@
deg_to_rad: "Converts an angle in degrees to an angle in radians. Essentially multiplies by $(l:patterns/consts#hexcasting:const/double/pi)$(action)pi/$ then divides by 180.",
rad_to_deg: "Converts an angle in radians to an angle in degrees. Essentially multiplies by 180 then divides by $(l:patterns/consts#hexcasting:const/double/pi)$(action)pi/$.",
normalize: "Sets the length of the vector to one.",
+ invert: "Multiplies the number/vector by -1.",
+ rand_zero: "Returns a random number between 0 (inclusive) and the number (exclusive).",
+ rand_range: "Returns a random number between the first number (inclusive) and the second (exclusive).",
+ rand_vec: "Returns a unit vector facing a random direction.",
rot_about_x: "Rotates the vector by the given angle in radians around the X axis.",
rot_about_y: "Rotates the vector by the given angle in radians around the Y axis.",
rot_about_z: "Rotates the vector by the given angle in radians around the Z axis.",
cons_about_x: "Converts an angle in radians to a unit vector where X=0. +Z at 0 radians and +Y at pi/4 radians.",
cons_about_y: "Converts an angle in radians to a unit vector where Y=0. +Z at 0 radians and -X at pi/4 radians. I've seen some texts related to this pattern mentioning something called $(thing)F3/$, but I couldn't figure out what that means.",
cons_about_z: "Converts an angle in radians to a unit vector where Z=0. -X at 0 radians and +Y at pi/4 radians.",
- scientific_exp: "Multiplies the number by 10^n or 10^-n, where n is the length of the tail, depending on whether the start is similar to $(l:patterns/math#hexcasting:mul)$(action)Multiplicative Distillation/$ or $(l:patterns/math#hexcasting:div)$(action)Division Distillation/$."
+ scientific_exp: "Multiplies the number/vector by 10^n or 10^-n, where n is the length of the tail, depending on whether the start is similar to $(l:patterns/math#hexcasting:mul)$(action)Multiplicative Distillation/$ or $(l:patterns/math#hexcasting:div)$(action)Division Distillation/$."
},
lists: {
split: "Splits a list at the given index. [a, b, c, d, e], 2 will return [a, b], [c, d, e].",
+ "del_element/": {
+ first: "Remove the iota at the top of the stack, then remove the first instance of it from the list. If that iota was in the list, return True. Otherwise, return False.",
+ all: "Remove the iota at the top of the stack, then remove $(italic)all/$ instances of it from the list. Returns the number of occurrences of that iota."
+ },
swindle: "Reorders the elements of a list the same way $(l:patterns/stackmanip#hexcasting:swizzle)$(action)Swindler's Gambit/$ reorders the stack. Inputting a negative code will reorder the elements at the start instead of the end."
}
}
@@ -86,12 +94,17 @@
deg_to_rad: "Radian Purification",
rad_to_deg: "Degree Purification",
normalize: "Norm Purification",
+ invert: "Reversal Purification",
+ rand_zero: "Entropy Purification",
+ rand_range: "Entropy Distillation",
+ rand_vec: "Chaos Reflection",
rot_about_x: "Pitch Distillation",
rot_about_y: "Yaw Distillation",
rot_about_z: "Roll Distillation",
cons_about_x: "Pitch Purification",
cons_about_y: "Yaw Purification",
cons_about_z: "Roll Purification",
+ scientific_exp: "Scientific Purification",
"nocon/": {
greater: "Comparison Gambit: Maximus",
@@ -104,9 +117,11 @@
len_neq: "Comparison Gambit: Length Inequality",
},
- scientific_exp: "Scientific Purification",
-
split_list: "Separation Gambit",
+ "del_element/": {
+ first: "Elimination Gambit",
+ all: "Elimination Gambit II"
+ },
swindle_list: "Swindler's Distillation"
},
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
index a3c6b8d94885..1224f5b0229e 100644
--- a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
@@ -52,16 +52,24 @@
deg_to_rad: "将角度变为弧度。相当于乘以 $(l:patterns/consts#hexcasting:const/double/pi)$(action)π/$ 再除以 180。",
rad_to_deg: "将弧度变为角度。相当于乘以 180 再除以 $(l:patterns/consts#hexcasting:const/double/pi)$(action)π/$。",
normalize: "将向量的长度变为 1。",
+ invert: "求所给数/向量与 -1 相乘的积。",
+ rand_zero: "返回 0(包含)到所给数(不包含)之间的随机数。",
+ rand_range: "返回从第一个数(包含)到第二个数(不包含)之间的随机数。",
+ rand_vec: "返回朝向随机方向的单位向量。",
rot_about_x: "绕 X 轴将所给向量旋转所给弧度。",
rot_about_y: "绕 Y 轴将所给向量旋转所给弧度。",
rot_about_z: "绕 Z 轴将所给向量旋转所给弧度。",
cons_about_x: "将弧度角变为单位向量。该向量的 X 分量为 0。0 弧度对应 +Z,π/4 弧度对应 +Y。",
cons_about_y: "将弧度角变为单位向量。该向量的 Y 分量为 0。0 弧度对应 +Z,π/4 弧度对应 -X。我曾读到过某些文献提到某种叫 $(thing)F3/$ 的东西,但我还找不出它的意义。",
cons_about_z: "将弧度角变为单位向量。该向量的 Z 分量为 0。0 弧度对应 -X,π/4 弧度对应 +Y。",
- scientific_exp: "求所给数与 10^n 或 10^-n 相乘的积。其中 n 为尾部的长度,指数有无负号取决于图案开头更近似于$(l:patterns/math#hexcasting:mul)$(action)乘法之馏化/$还是$(l:patterns/math#hexcasting:div)$(action)除法之馏化/$。"
+ scientific_exp: "求所给数/向量与 10^n 或 10^-n 相乘的积。其中 n 为尾部的长度,指数有无负号取决于图案开头更近似于$(l:patterns/math#hexcasting:mul)$(action)乘法之馏化/$还是$(l:patterns/math#hexcasting:div)$(action)除法之馏化/$。"
},
lists: {
split: "在所给下标处分割列表。[a, b, c, d, e], 2 会返回 [a, b], [c, d, e]。",
+ "del_element/": {
+ first: "移除栈顶 iota,而后移除列表中该 iota 第一次出现的实例。若列表中存在该 iota,返回 True;否则返回 False。",
+ all: "移除栈顶 iota,而后移除列表中该 iota 的$(italic)全部/$实例。返回该 iota 在列表中出现的次数。"
+ },
swindle: "重排列表的元素,方式与$(l:patterns/stackmanip#hexcasting:swizzle)$(action)骗徒之策略/$重排栈的一致。给定负值会从开头起进行重排,而非从末尾起。"
}
}
@@ -86,12 +94,17 @@
deg_to_rad: "弧度之纯化",
rad_to_deg: "角度之纯化",
normalize: "归一之纯化",
+ invert: "反向之纯化",
+ rand_zero: "熵之纯化",
+ rand_range: "熵之馏化",
+ rand_vec: "混沌之精思",
rot_about_x: "俯仰之馏化",
rot_about_y: "偏航之馏化",
rot_about_z: "滚转之馏化",
cons_about_x: "俯仰之纯化",
cons_about_y: "偏航之纯化",
cons_about_z: "滚转之纯化",
+ scientific_exp: "科学计数之纯化",
"nocon/": {
greater: "比较之策略:至大",
@@ -104,9 +117,11 @@
len_neq: "比较之策略:长度不等",
},
- scientific_exp: "科学计数之纯化",
-
split_list: "分割之策略",
+ "del_element/": {
+ first: "消除之策略",
+ all: "消除之策略,第二型"
+ },
swindle_list: "骗徒之馏化"
},
From ff54729e68b19cd8b8ce1d5a2569e8ec9b8cca10 Mon Sep 17 00:00:00 2001
From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com>
Date: Fri, 13 Mar 2026 20:38:27 +0800
Subject: [PATCH 05/13] =?UTF-8?q?HextraPats=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
---
.../hextrapats/lang/en_us.flatten.json5 | 49 ++++++++++++++---
.../hextrapats/lang/zh_cn.flatten.json5 | 53 +++++++++++++++----
2 files changed, 84 insertions(+), 18 deletions(-)
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
index 16cec10d6b9e..faedaacecebd 100644
--- a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
@@ -5,6 +5,7 @@
"hextrapats_nocon.title": "Non-consuming Logic",
"hextrapats_vec_literals.title": "Vector Literals",
"hextrapats_math.title": "Hextra Math",
+ "hextrapats_vec_math.title": "Hextra Vector Math",
"hextrapats_lists.title": "Hextra Lists",
},
hextrapats: {
@@ -51,26 +52,42 @@
math: {
deg_to_rad: "Converts an angle in degrees to an angle in radians. Essentially multiplies by $(l:patterns/consts#hexcasting:const/double/pi)$(action)pi/$ then divides by 180.",
rad_to_deg: "Converts an angle in radians to an angle in degrees. Essentially multiplies by 180 then divides by $(l:patterns/consts#hexcasting:const/double/pi)$(action)pi/$.",
- normalize: "Sets the length of the vector to one.",
invert: "Multiplies the number/vector by -1.",
+ increment: "Adds 1.",
+ decrement: "Subtracts by 1.",
rand_zero: "Returns a random number between 0 (inclusive) and the number (exclusive).",
rand_range: "Returns a random number between the first number (inclusive) and the second (exclusive).",
+ scientific_exp: "Multiplies the input by 10^n or 10^-n, where n is the length of the tail, depending on whether the start is similar to $(l:patterns/math#hexcasting:mul)$(action)Mult. Dstl./$ or $(l:patterns/math#hexcasting:div)$(action)Div. Dstl./$. The top 3 patterns are x10^1, x10^2, and x10^3. The bottom 3 are x10^-1, x10^-2, and x10^-3.",
+ linear_approach: "Makes the first value approach the second at a rate of the third value. Will not overshoot.",
+ angle_dist: "Returns the shortest angular distance between two angles in radians.",
+ angle_approach: "Makes the first angle approach the second at a rate of the third value. Will not overshoot. Picks whichever direction is shorter. All angles in radians."
+ },
+ vec_math: {
+ normalize: "Sets the length of the vector to one.",
+ increment: "Increases length by 1. Does nothing if the vector is (0, 0, 0).",
+ decrement: "Decreases length by 1. Does nothing if the vector is (0, 0, 0).",
rand_vec: "Returns a unit vector facing a random direction.",
+ vec_dist: "Returns the distance between two vectors.",
+ vec_approach: "Moves the first vector towards the second a rate of the third value. Will not overshoot.",
+ vec_angle_dist: "Returns the shortest angular distance on a sphere between two vectors in radians",
+ vec_rotate_towards: "Turns the first vector towards the second vector by num radians.",
+ from_polar: "Creates a unit vector from two polar angles, pitch and yaw, in radians. +Y is up. 0 yaw is +Z, pi/2 yaw is -X. Yet again, mentions of $(thing)F3/$ turn up.",
+ to_polar: "Converts a vector's direction into two polar angles, pitch and yaw, in radians. +Y is up. 0 yaw is +Z, pi/2 yaw is -X. Yet again, mentions of $(thing)F3/$ turn up.",
rot_about_x: "Rotates the vector by the given angle in radians around the X axis.",
rot_about_y: "Rotates the vector by the given angle in radians around the Y axis.",
rot_about_z: "Rotates the vector by the given angle in radians around the Z axis.",
cons_about_x: "Converts an angle in radians to a unit vector where X=0. +Z at 0 radians and +Y at pi/4 radians.",
cons_about_y: "Converts an angle in radians to a unit vector where Y=0. +Z at 0 radians and -X at pi/4 radians. I've seen some texts related to this pattern mentioning something called $(thing)F3/$, but I couldn't figure out what that means.",
cons_about_z: "Converts an angle in radians to a unit vector where Z=0. -X at 0 radians and +Y at pi/4 radians.",
- scientific_exp: "Multiplies the number/vector by 10^n or 10^-n, where n is the length of the tail, depending on whether the start is similar to $(l:patterns/math#hexcasting:mul)$(action)Multiplicative Distillation/$ or $(l:patterns/math#hexcasting:div)$(action)Division Distillation/$."
},
lists: {
split: "Splits a list at the given index. [a, b, c, d, e], 2 will return [a, b], [c, d, e].",
"del_element/": {
first: "Remove the iota at the top of the stack, then remove the first instance of it from the list. If that iota was in the list, return True. Otherwise, return False.",
- all: "Remove the iota at the top of the stack, then remove $(italic)all/$ instances of it from the list. Returns the number of occurrences of that iota."
+ all: "Remove the iota at the top of the stack, then remove $(italic)all/$ instances of it from the list. Returns the number of removed occurrences."
},
- swindle: "Reorders the elements of a list the same way $(l:patterns/stackmanip#hexcasting:swizzle)$(action)Swindler's Gambit/$ reorders the stack. Inputting a negative code will reorder the elements at the start instead of the end."
+ swindle: "Reorders the elements of a list the same way $(l:patterns/stackmanip#hexcasting:swizzle)$(action)Swindler's Gambit/$ reorders the stack. Inputting a negative code will reorder the elements at the start instead of the end.",
+ scronglwfijspoivjqwofklcrvewb: "Shuffles the order of elements in the list."
}
}
},
@@ -93,18 +110,30 @@
deg_to_rad: "Radian Purification",
rad_to_deg: "Degree Purification",
- normalize: "Norm Purification",
- invert: "Reversal Purification",
+ invert: "Reflection Purification",
+ increment: "Incrementation Purification",
+ decrement: "Decrementation Purification",
rand_zero: "Entropy Purification",
rand_range: "Entropy Distillation",
+ scientific_exp: "Scientific Purification",
+ linear_approach: "Approach Exaltation",
+ angle_dist: "Theta Distillation",
+ angle_approach: "Turning Exaltation",
+ vec_angle_dist: "Theta Distillation II",
+ vec_rotate_towards: "Turning Exaltation II",
+
+ normalize: "Norm Purification",
rand_vec: "Chaos Reflection",
+ vec_dist: "Distance Distillation",
+ vec_approach: "Approach Exaltation II",
+ from_polar: "Polar Distillation",
+ to_polar: "Polar Decomposition",
rot_about_x: "Pitch Distillation",
rot_about_y: "Yaw Distillation",
rot_about_z: "Roll Distillation",
cons_about_x: "Pitch Purification",
cons_about_y: "Yaw Purification",
cons_about_z: "Roll Purification",
- scientific_exp: "Scientific Purification",
"nocon/": {
greater: "Comparison Gambit: Maximus",
@@ -122,7 +151,8 @@
first: "Elimination Gambit",
all: "Elimination Gambit II"
},
- swindle_list: "Swindler's Distillation"
+ swindle_list: "Swindler's Distillation",
+ scronglwfijspoivjqwofklcrvewb: "Shuffling Purification"
},
"book.hextrapats:": {
@@ -136,6 +166,9 @@
scaled_vec_z: "Vector Rfln. +Z/-Z II",
scaled_vec_all: "Vector Rfln. +1/-1 II",
+ increment: "Incrementation Purif.",
+ decrement: "Decrementation Purif.",
+
"nocon/": {
greater: "Comp. Gambit: Maximus",
less: "Comp. Gambit: Minimus",
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
index 1224f5b0229e..db350628a43b 100644
--- a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
@@ -5,6 +5,7 @@
"hextrapats_nocon.title": "保留式比较",
"hextrapats_vec_literals.title": "向量常量",
"hextrapats_math.title": "咒法新增:数学",
+ "hextrapats_vec_math.title": "咒法新增:向量数学",
"hextrapats_lists.title": "咒法新增:列表",
},
hextrapats: {
@@ -31,9 +32,9 @@
},
vec_literals: {
intro: "返回数的图案有种神奇的性质:把向量之精思的尾部加到$(l:patterns/numbers)$(action)数之精思/$的开头,就能返回一个向量。",
- x: "向左急转的头部会返回 $(l:patterns/consts#hexcasting:const/vec/x)$(action)X 轴/$上的向量。",
+ x: "指向左后方的头部会返回 $(l:patterns/consts#hexcasting:const/vec/x)$(action)X 轴/$上的向量。",
y: "直线形状的头部会返回 $(l:patterns/consts#hexcasting:const/vec/y)$(action)Y 轴/$上的向量。",
- z: "向右急转的头部会返回 $(l:patterns/consts#hexcasting:const/vec/z)$(action)Z 轴/$上的向量。",
+ z: "指向右后方的头部会返回 $(l:patterns/consts#hexcasting:const/vec/z)$(action)Z 轴/$上的向量。",
"1": "向左微偏的头部会返回$(l:patterns/hextrapats_consts#hextrapats:haha_ha_one)$(action)所有 3 个分量都相等/$的向量。",
detail: "首先,绘制前页八种图案中的一种,默认数值为 0。然后,每一画的$(italic)方向/$会以对应方式修改该数值。$(li)前方:加 1$(li)左前方:加 5$(li)右前方:加 10$(li)左后方:乘 2$(li)右后方:除以 2$(br)顺时针绘制,也即各页右图,会在绘制完成后取相反数(如左图逆时针绘制则不取)。$(p)绘制完成后会返回对应向量。",
@@ -51,26 +52,42 @@
math: {
deg_to_rad: "将角度变为弧度。相当于乘以 $(l:patterns/consts#hexcasting:const/double/pi)$(action)π/$ 再除以 180。",
rad_to_deg: "将弧度变为角度。相当于乘以 180 再除以 $(l:patterns/consts#hexcasting:const/double/pi)$(action)π/$。",
- normalize: "将向量的长度变为 1。",
invert: "求所给数/向量与 -1 相乘的积。",
+ increment: "递增 1。",
+ decrement: "递减 1。",
rand_zero: "返回 0(包含)到所给数(不包含)之间的随机数。",
rand_range: "返回从第一个数(包含)到第二个数(不包含)之间的随机数。",
+ scientific_exp: "求所给数/向量与 10^n 或 10^-n 相乘的积。其中 n 为尾部的长度,指数有无负号取决于图案开头更近似于$(l:patterns/math#hexcasting:mul)$(action)乘法之馏化/$还是$(l:patterns/math#hexcasting:div)$(action)除法之馏化/$。上方三图分别为 x10^1、x10^2、x10^3。下方三图分别为 x10^-1、x10^-2、x10^-3。",
+ linear_approach: "以第三个数为步长,让第一个数向第二个数靠近,不会过冲。",
+ angle_dist: "返回两角间最短的角度差,以弧度计。",
+ angle_approach: "以第三个值为步长,让第一个角向第二个角靠近,不会过冲。会选择最短路径。所有角均以弧度计。"
+ },
+ vec_math: {
+ normalize: "将向量的长度变为 1。",
+ increment: "令长度增加 1。对 (0, 0, 0) 无效。",
+ decrement: "令强度减少 1。对 (0, 0, 0) 无效。",
rand_vec: "返回朝向随机方向的单位向量。",
+ vec_dist: "返回两向量间的距离。",
+ vec_approach: "以第三个值为步长,让第一个向量向第二个向量靠近,不会过冲。",
+ vec_angle_dist: "返回两向量间最短的角度差,以弧度计。",
+ vec_rotate_towards: "将第一个向量向第二个向量旋转 num 弧度。",
+ from_polar: "以俯仰和偏航两个极坐标角生成单位向量,均以弧度计。+Y 对应上方。偏航角为 0 对应 +Z,为 π/2 对应 -X。相关文献又提到了所谓的 $(thing)F3/$。",
+ to_polar: "将向量的方向转换为俯仰和偏航两个极坐标角,均以弧度计。+Y 对应上方。偏航角为 0 对应 +Z,为 π/2 对应 -X。相关文献又提到了所谓的 $(thing)F3/$。",
rot_about_x: "绕 X 轴将所给向量旋转所给弧度。",
rot_about_y: "绕 Y 轴将所给向量旋转所给弧度。",
rot_about_z: "绕 Z 轴将所给向量旋转所给弧度。",
cons_about_x: "将弧度角变为单位向量。该向量的 X 分量为 0。0 弧度对应 +Z,π/4 弧度对应 +Y。",
cons_about_y: "将弧度角变为单位向量。该向量的 Y 分量为 0。0 弧度对应 +Z,π/4 弧度对应 -X。我曾读到过某些文献提到某种叫 $(thing)F3/$ 的东西,但我还找不出它的意义。",
cons_about_z: "将弧度角变为单位向量。该向量的 Z 分量为 0。0 弧度对应 -X,π/4 弧度对应 +Y。",
- scientific_exp: "求所给数/向量与 10^n 或 10^-n 相乘的积。其中 n 为尾部的长度,指数有无负号取决于图案开头更近似于$(l:patterns/math#hexcasting:mul)$(action)乘法之馏化/$还是$(l:patterns/math#hexcasting:div)$(action)除法之馏化/$。"
},
lists: {
split: "在所给下标处分割列表。[a, b, c, d, e], 2 会返回 [a, b], [c, d, e]。",
"del_element/": {
first: "移除栈顶 iota,而后移除列表中该 iota 第一次出现的实例。若列表中存在该 iota,返回 True;否则返回 False。",
- all: "移除栈顶 iota,而后移除列表中该 iota 的$(italic)全部/$实例。返回该 iota 在列表中出现的次数。"
+ all: "移除栈顶 iota,而后移除列表中该 iota 的$(italic)全部/$实例。返回从列表中移除的元素数量。"
},
- swindle: "重排列表的元素,方式与$(l:patterns/stackmanip#hexcasting:swizzle)$(action)骗徒之策略/$重排栈的一致。给定负值会从开头起进行重排,而非从末尾起。"
+ swindle: "重排列表的元素,方式与$(l:patterns/stackmanip#hexcasting:swizzle)$(action)骗徒之策略/$重排栈的一致。给定负值会从开头起进行重排,而非从末尾起。",
+ scronglwfijspoivjqwofklcrvewb: "打乱列表各元素。"
}
}
},
@@ -93,18 +110,30 @@
deg_to_rad: "弧度之纯化",
rad_to_deg: "角度之纯化",
- normalize: "归一之纯化",
- invert: "反向之纯化",
+ invert: "反照之纯化",
+ increment: "递增之纯化",
+ decrement: "递减之纯化",
rand_zero: "熵之纯化",
rand_range: "熵之馏化",
+ scientific_exp: "科学计数之纯化",
+ linear_approach: "趋近之提整",
+ angle_dist: "西塔之馏化",
+ angle_approach: "转向之提整",
+ vec_angle_dist: "西塔之馏化,第二型",
+ vec_rotate_towards: "转向之提整,第二型",
+
+ normalize: "归一之纯化",
rand_vec: "混沌之精思",
+ vec_dist: "距离之馏化",
+ vec_approach: "趋近之提整,第二型",
+ from_polar: "极坐标之馏化",
+ to_polar: "极坐标之分解",
rot_about_x: "俯仰之馏化",
rot_about_y: "偏航之馏化",
rot_about_z: "滚转之馏化",
cons_about_x: "俯仰之纯化",
cons_about_y: "偏航之纯化",
cons_about_z: "滚转之纯化",
- scientific_exp: "科学计数之纯化",
"nocon/": {
greater: "比较之策略:至大",
@@ -122,7 +151,8 @@
first: "消除之策略",
all: "消除之策略,第二型"
},
- swindle_list: "骗徒之馏化"
+ swindle_list: "骗徒之馏化",
+ scronglwfijspoivjqwofklcrvewb: "打乱之纯化"
},
"book.hextrapats:": {
@@ -136,6 +166,9 @@
scaled_vec_z: "向量之精思,+Z/-Z第二型",
scaled_vec_all: "向量之精思,+1/-1第二型",
+ increment: "递增之纯化",
+ decrement: "递减之纯化",
+
"nocon/": {
greater: "比较之策略:至大",
less: "比较之策略:至小",
From e425e10506a555eba0c2bcf1e9bf8cbd6bd1a308 Mon Sep 17 00:00:00 2001
From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com>
Date: Sun, 15 Mar 2026 14:34:00 +0800
Subject: [PATCH 06/13] =?UTF-8?q?HextraPats=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
---
.../hextrapats/lang/en_us.flatten.json5 | 19 +++++++++----------
.../hextrapats/lang/zh_cn.flatten.json5 | 17 ++++++++---------
2 files changed, 17 insertions(+), 19 deletions(-)
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
index faedaacecebd..afba1d20e5f0 100644
--- a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
@@ -36,7 +36,7 @@
y: "A head that doesn't bend will output a vector along the $(l:patterns/consts#hexcasting:const/vec/y)$(action)Y axis/$.",
z: "A head that sharply bends to the right will output a vector along the $(l:patterns/consts#hexcasting:const/vec/z)$(action)Z axis/$.",
"1": "A head that slightly bends to the left will output a vector where $(l:patterns/hextrapats_consts#hextrapats:haha_ha_one)$(action)all 3 components are the same/$.",
- detail: "First, I draw one of the eight shapes shown on the prior pages. Next, the $(italic)angles/$ following will modify a running count starting at 0.$(li)Forward: Add 1$(li)Left: Add 5$(li)Right: Add 10$(li)Sharp Left: Multiply by 2$(li)Sharp Right: Divide by 2.$(br)The clockwise version of the pattern, on the right of the other page, will negate the value at the very end. (The left-hand counter-clockwise version keeps the number positive).$(p)Once I finish drawing, a vector's pushed to the top of the stack.",
+ detail: "First, I draw one of the eight shapes shown on the prior pages. Next, the $(italic)angles/$ following will modify a running count starting at 0.$(li)Forward: Add 1$(li)Left: Add 5$(li)Right: Add 10$(li)Sharp Left: Multiply by 2$(li)Sharp Right: Divide by 2.$(br)The clockwise version of the pattern, on the right of the other pages, will negate the value at the very end. (The left-hand counter-clockwise version keeps the number positive).$(p)Once I finish drawing, a vector's pushed to the top of the stack.",
example: {
"x10.header": "Example 1",
@@ -58,9 +58,10 @@
rand_zero: "Returns a random number between 0 (inclusive) and the number (exclusive).",
rand_range: "Returns a random number between the first number (inclusive) and the second (exclusive).",
scientific_exp: "Multiplies the input by 10^n or 10^-n, where n is the length of the tail, depending on whether the start is similar to $(l:patterns/math#hexcasting:mul)$(action)Mult. Dstl./$ or $(l:patterns/math#hexcasting:div)$(action)Div. Dstl./$. The top 3 patterns are x10^1, x10^2, and x10^3. The bottom 3 are x10^-1, x10^-2, and x10^-3.",
- linear_approach: "Makes the first value approach the second at a rate of the third value. Will not overshoot.",
+ approach: "Moves the first value closer to the second by the given amount. Will not overshoot.",
angle_dist: "Returns the shortest angular distance between two angles in radians.",
- angle_approach: "Makes the first angle approach the second at a rate of the third value. Will not overshoot. Picks whichever direction is shorter. All angles in radians."
+ angle_approach: "Turns the first angle towards the second by the given number of radians, picking whichever direction is shorter.",
+ "angle_approach.examples": "(To make it easier to read, these examples are written in degrees instead of radians.)$(p)For example:$(li)90, 135, 10 \u2192 100 (start at 90, turn 10 degrees towards 135)$(li)10, 270, 30 \u2192 340 (start at 10, turn 30 degrees towards 270)$(li)300, 90, 90 \u2192 30 (start at 300, turn 90 degrees towards 90)$(li)20, 60, 180 \u2192 60 (start at 20, turn 180 degrees towards 60, stop at 60)"
},
vec_math: {
normalize: "Sets the length of the vector to one.",
@@ -68,9 +69,10 @@
decrement: "Decreases length by 1. Does nothing if the vector is (0, 0, 0).",
rand_vec: "Returns a unit vector facing a random direction.",
vec_dist: "Returns the distance between two vectors.",
- vec_approach: "Moves the first vector towards the second a rate of the third value. Will not overshoot.",
- vec_angle_dist: "Returns the shortest angular distance on a sphere between two vectors in radians",
- vec_rotate_towards: "Turns the first vector towards the second vector by num radians.",
+ approach: "Moves the first vector towards the second by a given distance. Will not overshoot.",
+ angle_dist: "Returns the shortest angular distance on a sphere between two vectors in radians",
+ angle_approach: "Rotates the first vector towards the direction of the second vector by the given number of radians.",
+ "angle_approach.examples": "For example:$(li)(1, 0, 0), (0, 1, 0), pi/4$(br) \u2192 (0.71, 0.71, 0)$(li)(2, 0, 0), (0, 5, 0), pi/4$(br) \u2192 (1.41, 1.41, 0)$(li)(1, 1, 1), (0, 5, 5), pi/6$(br) \u2192 (0.16, 1.22, 1.22)",
from_polar: "Creates a unit vector from two polar angles, pitch and yaw, in radians. +Y is up. 0 yaw is +Z, pi/2 yaw is -X. Yet again, mentions of $(thing)F3/$ turn up.",
to_polar: "Converts a vector's direction into two polar angles, pitch and yaw, in radians. +Y is up. 0 yaw is +Z, pi/2 yaw is -X. Yet again, mentions of $(thing)F3/$ turn up.",
rot_about_x: "Rotates the vector by the given angle in radians around the X axis.",
@@ -116,16 +118,13 @@
rand_zero: "Entropy Purification",
rand_range: "Entropy Distillation",
scientific_exp: "Scientific Purification",
- linear_approach: "Approach Exaltation",
+ approach: "Approach Exaltation",
angle_dist: "Theta Distillation",
angle_approach: "Turning Exaltation",
- vec_angle_dist: "Theta Distillation II",
- vec_rotate_towards: "Turning Exaltation II",
normalize: "Norm Purification",
rand_vec: "Chaos Reflection",
vec_dist: "Distance Distillation",
- vec_approach: "Approach Exaltation II",
from_polar: "Polar Distillation",
to_polar: "Polar Decomposition",
rot_about_x: "Pitch Distillation",
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
index db350628a43b..0ed3c98e2eb6 100644
--- a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
@@ -58,9 +58,10 @@
rand_zero: "返回 0(包含)到所给数(不包含)之间的随机数。",
rand_range: "返回从第一个数(包含)到第二个数(不包含)之间的随机数。",
scientific_exp: "求所给数/向量与 10^n 或 10^-n 相乘的积。其中 n 为尾部的长度,指数有无负号取决于图案开头更近似于$(l:patterns/math#hexcasting:mul)$(action)乘法之馏化/$还是$(l:patterns/math#hexcasting:div)$(action)除法之馏化/$。上方三图分别为 x10^1、x10^2、x10^3。下方三图分别为 x10^-1、x10^-2、x10^-3。",
- linear_approach: "以第三个数为步长,让第一个数向第二个数靠近,不会过冲。",
+ approach: "以第三个数为步长,让第一个数向第二个数靠近,不会过冲。",
angle_dist: "返回两角间最短的角度差,以弧度计。",
- angle_approach: "以第三个值为步长,让第一个角向第二个角靠近,不会过冲。会选择最短路径。所有角均以弧度计。"
+ angle_approach: "以第三个值为步长,让第一个角转向第二个角。会选择最短路径。所有角均以弧度计。",
+ "angle_approach.examples": "(为方便阅读,示例中使用角度单位。)$(p)例如:$(li)90, 135, 10 → 100(起点为 90,向 135 旋转 10 度)$(li)10, 270, 30 → 340(起点为 10,向 270 旋转 35 度)$(li)300, 90, 90 → 30(起点为 300,向 90 旋转 90 度)$(li)20, 60, 180 → 60(起点为 20,向 60 旋转 180 度,并停在 60 处)"
},
vec_math: {
normalize: "将向量的长度变为 1。",
@@ -68,9 +69,10 @@
decrement: "令强度减少 1。对 (0, 0, 0) 无效。",
rand_vec: "返回朝向随机方向的单位向量。",
vec_dist: "返回两向量间的距离。",
- vec_approach: "以第三个值为步长,让第一个向量向第二个向量靠近,不会过冲。",
- vec_angle_dist: "返回两向量间最短的角度差,以弧度计。",
- vec_rotate_towards: "将第一个向量向第二个向量旋转 num 弧度。",
+ approach: "以第三个距离为步长,让第一个向量向第二个向量靠近,不会过冲。",
+ angle_dist: "返回两向量间最短的角度差,以弧度计。",
+ angle_approach: "将第一个向量向第二个向量旋转给定弧度。",
+ "angle_approach.examples": "例如:$(li)(1, 0, 0), (0, 1, 0), π/4$(br) → (0.71, 0.71, 0)$(li)(2, 0, 0), (0, 5, 0), π/4$(br) → (1.41, 1.41, 0)$(li)(1, 1, 1), (0, 5, 5), π/6$(br) → (0.16, 1.22, 1.22)",
from_polar: "以俯仰和偏航两个极坐标角生成单位向量,均以弧度计。+Y 对应上方。偏航角为 0 对应 +Z,为 π/2 对应 -X。相关文献又提到了所谓的 $(thing)F3/$。",
to_polar: "将向量的方向转换为俯仰和偏航两个极坐标角,均以弧度计。+Y 对应上方。偏航角为 0 对应 +Z,为 π/2 对应 -X。相关文献又提到了所谓的 $(thing)F3/$。",
rot_about_x: "绕 X 轴将所给向量旋转所给弧度。",
@@ -116,16 +118,13 @@
rand_zero: "熵之纯化",
rand_range: "熵之馏化",
scientific_exp: "科学计数之纯化",
- linear_approach: "趋近之提整",
+ approach: "趋近之提整",
angle_dist: "西塔之馏化",
angle_approach: "转向之提整",
- vec_angle_dist: "西塔之馏化,第二型",
- vec_rotate_towards: "转向之提整,第二型",
normalize: "归一之纯化",
rand_vec: "混沌之精思",
vec_dist: "距离之馏化",
- vec_approach: "趋近之提整,第二型",
from_polar: "极坐标之馏化",
to_polar: "极坐标之分解",
rot_about_x: "俯仰之馏化",
From 9d61579e32b872388c4a9f47af5d115d404c35e6 Mon Sep 17 00:00:00 2001
From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com>
Date: Tue, 17 Mar 2026 13:20:55 +0800
Subject: [PATCH 07/13] =?UTF-8?q?Hexcessible=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
---
.../assets/hexcessible/hexcessible/lang/en_us.json | 3 +++
.../assets/hexcessible/hexcessible/lang/zh_cn.json | 5 ++++-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/projects/1.20-fabric/assets/hexcessible/hexcessible/lang/en_us.json b/projects/1.20-fabric/assets/hexcessible/hexcessible/lang/en_us.json
index 8fbcc2cc9c48..b549a8c87654 100644
--- a/projects/1.20-fabric/assets/hexcessible/hexcessible/lang/en_us.json
+++ b/projects/1.20-fabric/assets/hexcessible/hexcessible/lang/en_us.json
@@ -72,6 +72,9 @@
"text.autoconfig.hexcessible.enum.tooltip.HIDDEN": "§cNo",
"text.autoconfig.hexcessible.enum.tooltip.SIMPLE": "Simple",
"text.autoconfig.hexcessible.enum.tooltip.DESCRIPTIVE": "Descriptive",
+ "text.autoconfig.hexcessible.enum.keydocs.OFF": "§cNo",
+ "text.autoconfig.hexcessible.enum.keydocs.IDLING": "When Idle",
+ "text.autoconfig.hexcessible.enum.keydocs.ALWAYS": "Always",
"__note": "unsure why, but ComplexHex doesn't seem to set this.",
"hexcasting.special.complexhex:long": "Long Reflection: %s"
diff --git a/projects/1.20-fabric/assets/hexcessible/hexcessible/lang/zh_cn.json b/projects/1.20-fabric/assets/hexcessible/hexcessible/lang/zh_cn.json
index 967028057820..08c8157d0506 100644
--- a/projects/1.20-fabric/assets/hexcessible/hexcessible/lang/zh_cn.json
+++ b/projects/1.20-fabric/assets/hexcessible/hexcessible/lang/zh_cn.json
@@ -71,7 +71,10 @@
"text.autoconfig.hexcessible.option.autoComplete.count.@Tooltip": "单页中显示的选项数量",
"text.autoconfig.hexcessible.enum.tooltip.HIDDEN": "§c不显示",
"text.autoconfig.hexcessible.enum.tooltip.SIMPLE": "简单",
- "text.autoconfig.hexcessible.enum.tooltip.DESCRIPTIVE": "详细描述",
+ "text.autoconfig.hexcessible.enum.tooltip.DESCRIPTIVE": "详细",
+ "text.autoconfig.hexcessible.enum.keydocs.OFF": "§c禁用",
+ "text.autoconfig.hexcessible.enum.keydocs.IDLING": "仅空闲时",
+ "text.autoconfig.hexcessible.enum.keydocs.ALWAYS": "一直可以",
"__note": "unsure why, but ComplexHex doesn't seem to set this.",
"hexcasting.special.complexhex:long": "长整型之精思:%s"
From ca41ab5e9f84a41a4f14b5e9f68e21fc8f6a0034 Mon Sep 17 00:00:00 2001
From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com>
Date: Sat, 21 Mar 2026 03:34:53 +0800
Subject: [PATCH 08/13] =?UTF-8?q?HextraPats=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
---
.../hextrapats/lang/en_us.flatten.json5 | 67 +++++++++++++++++--
.../hextrapats/lang/zh_cn.flatten.json5 | 67 +++++++++++++++++--
2 files changed, 124 insertions(+), 10 deletions(-)
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
index afba1d20e5f0..1a48794f5f43 100644
--- a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
@@ -7,6 +7,7 @@
"hextrapats_math.title": "Hextra Math",
"hextrapats_vec_math.title": "Hextra Vector Math",
"hextrapats_lists.title": "Hextra Lists",
+ "hextrapats_sets.title": "Hash Set Manipulation"
},
hextrapats: {
page: {
@@ -60,8 +61,10 @@
scientific_exp: "Multiplies the input by 10^n or 10^-n, where n is the length of the tail, depending on whether the start is similar to $(l:patterns/math#hexcasting:mul)$(action)Mult. Dstl./$ or $(l:patterns/math#hexcasting:div)$(action)Div. Dstl./$. The top 3 patterns are x10^1, x10^2, and x10^3. The bottom 3 are x10^-1, x10^-2, and x10^-3.",
approach: "Moves the first value closer to the second by the given amount. Will not overshoot.",
angle_dist: "Returns the shortest angular distance between two angles in radians.",
- angle_approach: "Turns the first angle towards the second by the given number of radians, picking whichever direction is shorter.",
- "angle_approach.examples": "(To make it easier to read, these examples are written in degrees instead of radians.)$(p)For example:$(li)90, 135, 10 \u2192 100 (start at 90, turn 10 degrees towards 135)$(li)10, 270, 30 \u2192 340 (start at 10, turn 30 degrees towards 270)$(li)300, 90, 90 \u2192 30 (start at 300, turn 90 degrees towards 90)$(li)20, 60, 180 \u2192 60 (start at 20, turn 180 degrees towards 60, stop at 60)"
+ angle_approach: {
+ "": "Turns the first angle towards the second by the given number of radians, picking whichever direction is shorter."
+ examples: "(To make it easier to read, these examples are written in degrees instead of radians.)$(p)For example:$(li)90, 135, 10 \u2192 100 (start at 90, turn 10 degrees towards 135)$(li)10, 270, 30 \u2192 340 (start at 10, turn 30 degrees towards 270)$(li)300, 90, 90 \u2192 30 (start at 300, turn 90 degrees towards 90)$(li)20, 60, 180 \u2192 60 (start at 20, turn 180 degrees towards 60, stop at 60)",
+ }
},
vec_math: {
normalize: "Sets the length of the vector to one.",
@@ -71,8 +74,10 @@
vec_dist: "Returns the distance between two vectors.",
approach: "Moves the first vector towards the second by a given distance. Will not overshoot.",
angle_dist: "Returns the shortest angular distance on a sphere between two vectors in radians",
- angle_approach: "Rotates the first vector towards the direction of the second vector by the given number of radians.",
- "angle_approach.examples": "For example:$(li)(1, 0, 0), (0, 1, 0), pi/4$(br) \u2192 (0.71, 0.71, 0)$(li)(2, 0, 0), (0, 5, 0), pi/4$(br) \u2192 (1.41, 1.41, 0)$(li)(1, 1, 1), (0, 5, 5), pi/6$(br) \u2192 (0.16, 1.22, 1.22)",
+ angle_approach: {
+ "": "Rotates the first vector towards the direction of the second vector by the given number of radians. Mishaps if the two directions are directly opposite to each other.",
+ examples: "For example:$(li)(1, 0, 0), (0, 1, 0), pi/4$(br) \u2192 (0.71, 0.71, 0)$(li)(2, 0, 0), (0, 5, 0), pi/4$(br) \u2192 (1.41, 1.41, 0)$(li)(1, 1, 1), (0, 5, 5), pi/6$(br) \u2192 (0.16, 1.22, 1.22)"
+ },
from_polar: "Creates a unit vector from two polar angles, pitch and yaw, in radians. +Y is up. 0 yaw is +Z, pi/2 yaw is -X. Yet again, mentions of $(thing)F3/$ turn up.",
to_polar: "Converts a vector's direction into two polar angles, pitch and yaw, in radians. +Y is up. 0 yaw is +Z, pi/2 yaw is -X. Yet again, mentions of $(thing)F3/$ turn up.",
rot_about_x: "Rotates the vector by the given angle in radians around the X axis.",
@@ -90,6 +95,33 @@
},
swindle: "Reorders the elements of a list the same way $(l:patterns/stackmanip#hexcasting:swizzle)$(action)Swindler's Gambit/$ reorders the stack. Inputting a negative code will reorder the elements at the start instead of the end.",
scronglwfijspoivjqwofklcrvewb: "Shuffles the order of elements in the list."
+ },
+ sets: {
+ intro: "A hash set contains elements in an unordered fashion, and cannot contain duplicates. Excellent for keeping track of whether or not something exists.
Due to a magical process known as '$(thing)hashing/$', access is reduced to nearly O(1), relaxing the burden on Nature.",
+ empty_set: "Push an empty set to the top of the stack.",
+ insert: {
+ name: "Insertion Distillation",
+ "": "Remove the top of the stack, then add it to the set at the top of the stack."
+ },
+ insert_ret: "Remove the top of the stack, then add it to the set at the top of the stack. Return True if it wasn't already in the set, otherwise return False.",
+ remove: {
+ name: "Removal Distillation",
+ "": "Remove the top of the stack, then remove it from the set at the top of the stack."
+ },
+ remove_ret: "Remove the top of the stack, then remove it from the set at the top of the stack. Return True if it was previously in the set, otherwise return False.",
+ last_n_set: "Remove $(italic)num/$ elements from the stack, then add them to a set at the top of the stack.",
+ splat_set: "Remove the set at the top of the stack, then push its contents to the stack. The order is up to Nature's whims.",
+ find: {
+ name: "Locator's Gambit",
+ "": "Remove the top of the stack, then return True if the set at the top of the stack contains it, otherwise return False."
+ },
+ add: "Remove the set at the top of the stack, then add all its elements to the set at the top of the stack.",
+ sub: "Remove the set at the top of the stack, then remove all its elements from the set at the top of the stack.",
+ and: "Takes the intersection of two sets. The new set will only contain elements that were present in both of the previous sets.",
+ xor: "Takes the exclusive disjunction of two sets. The new set will only contain elements that were present in only one of the two sets.",
+ abs: "Remove the set at the top of the stack, then push the number of elements in the set to the stack.",
+ list_to_set: "Converts the list at the top of the stack to a set.",
+ set_to_list: "Converts the set at the top of the stack to a list. The order is up to Nature's whims."
}
}
},
@@ -151,7 +183,15 @@
all: "Elimination Gambit II"
},
swindle_list: "Swindler's Distillation",
- scronglwfijspoivjqwofklcrvewb: "Shuffling Purification"
+ scronglwfijspoivjqwofklcrvewb: "Shuffling Purification",
+
+ empty_set: "Vacant Reflection: Set",
+ last_n_set: "Bucket's Gambit",
+ splat_set: "Spilling Disintegration",
+ set_insert_ret: "Insertion Gambit",
+ set_remove_ret: "Removal Gambit",
+ list_to_set: "Disordering Purification",
+ set_to_list: "Ordering Purification"
},
"book.hextrapats:": {
@@ -186,6 +226,23 @@
scaled_vec_z: "Vector Reflection: (0, 0, %s)",
scaled_vec_all: "Vector Reflection: (%s, %s, %s)",
scientific_exp: "Scientific Purification: 10^%s"
+ },
+ "iota.hextrapats:": {
+ set: {
+ "": "Set",
+ desc: "a set"
+ }
+ },
+ mishap: {
+ invalid_value: {
+ class: {
+ set: "a set"
+ },
+ "hextrapats:": {
+ opposite_vecs: "vector not facing opposite to the start direction (%s)",
+ too_short_to_swindle: "a list of at least length %s"
+ }
+ }
}
}
}
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
index 0ed3c98e2eb6..312ee223c97d 100644
--- a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
@@ -7,6 +7,7 @@
"hextrapats_math.title": "咒法新增:数学",
"hextrapats_vec_math.title": "咒法新增:向量数学",
"hextrapats_lists.title": "咒法新增:列表",
+ "hextrapats_sets.title": "哈希集合操作"
},
hextrapats: {
page: {
@@ -60,8 +61,10 @@
scientific_exp: "求所给数/向量与 10^n 或 10^-n 相乘的积。其中 n 为尾部的长度,指数有无负号取决于图案开头更近似于$(l:patterns/math#hexcasting:mul)$(action)乘法之馏化/$还是$(l:patterns/math#hexcasting:div)$(action)除法之馏化/$。上方三图分别为 x10^1、x10^2、x10^3。下方三图分别为 x10^-1、x10^-2、x10^-3。",
approach: "以第三个数为步长,让第一个数向第二个数靠近,不会过冲。",
angle_dist: "返回两角间最短的角度差,以弧度计。",
- angle_approach: "以第三个值为步长,让第一个角转向第二个角。会选择最短路径。所有角均以弧度计。",
- "angle_approach.examples": "(为方便阅读,示例中使用角度单位。)$(p)例如:$(li)90, 135, 10 → 100(起点为 90,向 135 旋转 10 度)$(li)10, 270, 30 → 340(起点为 10,向 270 旋转 35 度)$(li)300, 90, 90 → 30(起点为 300,向 90 旋转 90 度)$(li)20, 60, 180 → 60(起点为 20,向 60 旋转 180 度,并停在 60 处)"
+ angle_approach: {
+ "": "以第三个值为步长,让第一个角转向第二个角。会选择最短路径。所有角均以弧度计。",
+ examples: "(为方便阅读,示例中使用角度单位。)$(p)例如:$(li)90, 135, 10 → 100(起点为 90,向 135 旋转 10 度)$(li)10, 270, 30 → 340(起点为 10,向 270 旋转 35 度)$(li)300, 90, 90 → 30(起点为 300,向 90 旋转 90 度)$(li)20, 60, 180 → 60(起点为 20,向 60 旋转 180 度,并停在 60 处)"
+ }
},
vec_math: {
normalize: "将向量的长度变为 1。",
@@ -71,8 +74,10 @@
vec_dist: "返回两向量间的距离。",
approach: "以第三个距离为步长,让第一个向量向第二个向量靠近,不会过冲。",
angle_dist: "返回两向量间最短的角度差,以弧度计。",
- angle_approach: "将第一个向量向第二个向量旋转给定弧度。",
- "angle_approach.examples": "例如:$(li)(1, 0, 0), (0, 1, 0), π/4$(br) → (0.71, 0.71, 0)$(li)(2, 0, 0), (0, 5, 0), π/4$(br) → (1.41, 1.41, 0)$(li)(1, 1, 1), (0, 5, 5), π/6$(br) → (0.16, 1.22, 1.22)",
+ angle_approach: {
+ "": "将第一个向量向第二个向量旋转给定弧度。若两向量方向正好相反,则会招致事故。",
+ examples: "例如:$(li)(1, 0, 0), (0, 1, 0), π/4$(br) → (0.71, 0.71, 0)$(li)(2, 0, 0), (0, 5, 0), π/4$(br) → (1.41, 1.41, 0)$(li)(1, 1, 1), (0, 5, 5), π/6$(br) → (0.16, 1.22, 1.22)",
+ },
from_polar: "以俯仰和偏航两个极坐标角生成单位向量,均以弧度计。+Y 对应上方。偏航角为 0 对应 +Z,为 π/2 对应 -X。相关文献又提到了所谓的 $(thing)F3/$。",
to_polar: "将向量的方向转换为俯仰和偏航两个极坐标角,均以弧度计。+Y 对应上方。偏航角为 0 对应 +Z,为 π/2 对应 -X。相关文献又提到了所谓的 $(thing)F3/$。",
rot_about_x: "绕 X 轴将所给向量旋转所给弧度。",
@@ -90,6 +95,33 @@
},
swindle: "重排列表的元素,方式与$(l:patterns/stackmanip#hexcasting:swizzle)$(action)骗徒之策略/$重排栈的一致。给定负值会从开头起进行重排,而非从末尾起。",
scronglwfijspoivjqwofklcrvewb: "打乱列表各元素。"
+ },
+ sets: {
+ intro: "哈希集合的各元素无顺序且不重复,很适合用于记录某物存在与否。
由于所谓的“$(thing)哈希/$”之魔法过程,访问其中元素的操作接近于 O(1),能减轻自然的负担。",
+ empty_set: "压入一个空集合。",
+ insert: {
+ name: "入集合之馏化",
+ "": "移除栈顶元素,将其插入栈顶集合。"
+ },
+ insert_ret: "移除栈顶元素,将其插入此时栈顶的集合。若元素已在集合中,返回 True;否则返回 False。",
+ remove: {
+ name: "出集合之馏化",
+ "": "移除栈顶元素,并从此时栈顶的集合中移除该元素。"
+ },
+ remove_ret: "移除栈顶元素,并从此时栈顶的集合中移除该元素。若元素曾在集合中,返回 True;否则返回 False。",
+ last_n_set: "移除 $(italic)num/$ 个元素,而后将它们插入此时栈顶的集合。",
+ splat_set: "移除栈顶集合,将其各元素压栈。顺序随自然心情决定。",
+ find: {
+ name: "定位器之策略",
+ "": "移除栈顶元素,若此时栈顶的集合包含该元素,返回 True;否则返回 False。"
+ },
+ add: "移除栈顶集合,再将其中所有元素插入此时栈顶的集合。",
+ sub: "移除栈顶集合,再从此时栈顶的集合中移除被移除集合的各元素。",
+ and: "取两集合的交集。新集合将只包含两集合共有的元素。",
+ xor: "取两集合的互斥元素。新集合将只包含仅出现于其中一个集合的元素。",
+ abs: "移除栈顶集合,返回其中元素数。",
+ list_to_set: "将栈顶的列表转换为集合。",
+ set_to_list: "将栈顶的集合转换为列表。顺序随自然心情而定。"
}
}
},
@@ -151,7 +183,15 @@
all: "消除之策略,第二型"
},
swindle_list: "骗徒之馏化",
- scronglwfijspoivjqwofklcrvewb: "打乱之纯化"
+ scronglwfijspoivjqwofklcrvewb: "打乱之纯化",
+
+ empty_set: "空无之精思:集合",
+ last_n_set: "桶之策略",
+ splat_set: "泼洒之拆解",
+ set_insert_ret: "入集合之策略",
+ set_remove_ret: "出集合之策略",
+ list_to_set: "解顺序之纯化",
+ set_to_list: "赋顺序之纯化"
},
"book.hextrapats:": {
@@ -186,6 +226,23 @@
scaled_vec_z: "向量之精思:(0, 0, %s)",
scaled_vec_all: "向量之精思:(%s, %s, %s)",
scientific_exp: "科学计数之纯化:10^%s"
+ },
+ "iota.hextrapats:": {
+ set: {
+ "": "集合",
+ desc: "一个集合"
+ }
+ },
+ mishap: {
+ invalid_value: {
+ class: {
+ set: "一个集合"
+ },
+ "hextrapats:": {
+ opposite_vecs: "不与起始方向(%s)正好反向的向量",
+ too_short_to_swindle: "长度至少为%s的列表"
+ }
+ }
}
}
}
From 900fabe4829f7c21796756e8565d2e3d92bb07d4 Mon Sep 17 00:00:00 2001
From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com>
Date: Sun, 22 Mar 2026 16:55:18 +0800
Subject: [PATCH 09/13] =?UTF-8?q?HextraPats=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
---
.../hextrapats/lang/en_us.flatten.json5 | 24 +++++++++++++------
.../hextrapats/lang/zh_cn.flatten.json5 | 24 +++++++++++++------
2 files changed, 34 insertions(+), 14 deletions(-)
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
index 1a48794f5f43..84bc6d30d3cf 100644
--- a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
@@ -7,7 +7,8 @@
"hextrapats_math.title": "Hextra Math",
"hextrapats_vec_math.title": "Hextra Vector Math",
"hextrapats_lists.title": "Hextra Lists",
- "hextrapats_sets.title": "Hash Set Manipulation"
+ "hextrapats_sets.title": "Hash Set Manipulation",
+ "hextrapats_meta.title": "Hextra Meta-Evaluation"
},
hextrapats: {
page: {
@@ -98,7 +99,9 @@
},
sets: {
intro: "A hash set contains elements in an unordered fashion, and cannot contain duplicates. Excellent for keeping track of whether or not something exists.
Due to a magical process known as '$(thing)hashing/$', access is reduced to nearly O(1), relaxing the burden on Nature.",
- empty_set: "Push an empty set to the top of the stack.",
+ empty_num_set: "Push an empty set that can hold numbers to the top of the stack.",
+ empty_vec_set: "Push an empty set that can hold vectors to the top of the stack.",
+ empty_entity_set: "Push an empty set that can hold entities to the top of the stack.",
insert: {
name: "Insertion Distillation",
"": "Remove the top of the stack, then add it to the set at the top of the stack."
@@ -122,6 +125,10 @@
abs: "Remove the set at the top of the stack, then push the number of elements in the set to the stack.",
list_to_set: "Converts the list at the top of the stack to a set.",
set_to_list: "Converts the set at the top of the stack to a list. The order is up to Nature's whims."
+ },
+ meta: {
+ true_halt: "Forcibly halts a $(thing)Hex/$ like $(l:patterns/meta#hexcasting:halt)$(action)Charon's Gambit/$ if the iota at the top of the stack is $(l:patterns/logic#hexcasting:bool_coerce)$(action)considered True by Nature/$.",
+ false_halt: "Forcibly halts a $(thing)Hex/$ like $(l:patterns/meta#hexcasting:halt)$(action)Charon's Gambit/$ if the iota at the top of the stack is $(l:patterns/logic#hexcasting:bool_coerce)$(action)considered False by Nature/$."
}
}
},
@@ -191,7 +198,10 @@
set_insert_ret: "Insertion Gambit",
set_remove_ret: "Removal Gambit",
list_to_set: "Disordering Purification",
- set_to_list: "Ordering Purification"
+ set_to_list: "Ordering Purification",
+
+ true_halt: "Acheron's Gambit",
+ false_halt: "Styx's Gambit"
},
"book.hextrapats:": {
@@ -228,15 +238,15 @@
scientific_exp: "Scientific Purification: 10^%s"
},
"iota.hextrapats:": {
- set: {
- "": "Set",
- desc: "a set"
+ num_set: {
+ "": "Set (Nums)",
+ desc: "a number set"
}
},
mishap: {
invalid_value: {
class: {
- set: "a set"
+ num_set: "a set"
},
"hextrapats:": {
opposite_vecs: "vector not facing opposite to the start direction (%s)",
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
index 312ee223c97d..6e3c0c21c19f 100644
--- a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
@@ -7,7 +7,8 @@
"hextrapats_math.title": "咒法新增:数学",
"hextrapats_vec_math.title": "咒法新增:向量数学",
"hextrapats_lists.title": "咒法新增:列表",
- "hextrapats_sets.title": "哈希集合操作"
+ "hextrapats_sets.title": "哈希集合操作",
+ "hextrapats_meta.title": "咒法新增:元运行"
},
hextrapats: {
page: {
@@ -98,7 +99,9 @@
},
sets: {
intro: "哈希集合的各元素无顺序且不重复,很适合用于记录某物存在与否。
由于所谓的“$(thing)哈希/$”之魔法过程,访问其中元素的操作接近于 O(1),能减轻自然的负担。",
- empty_set: "压入一个空集合。",
+ empty_num_set: "压入一个可包含数的空集合。",
+ empty_vec_set: "压入一个可包含向量的空集合。",
+ empty_entity_set: "压入一个可包含实体的空集合。",
insert: {
name: "入集合之馏化",
"": "移除栈顶元素,将其插入栈顶集合。"
@@ -122,6 +125,10 @@
abs: "移除栈顶集合,返回其中元素数。",
list_to_set: "将栈顶的列表转换为集合。",
set_to_list: "将栈顶的集合转换为列表。顺序随自然心情而定。"
+ },
+ meta: {
+ true_halt: "若$(l:patterns/logic#hexcasting:bool_coerce)$(action)自然会将栈顶 iota 视作 True/$,则强制停止$(thing)Hex/$的施放,与$(l:patterns/meta#hexcasting:halt)$(action)卡戎之策略/$类似。",
+ false_halt: "若$(l:patterns/logic#hexcasting:bool_coerce)$(action)自然会将栈顶 iota 视作 False/$,则强制停止$(thing)Hex/$的施放,与$(l:patterns/meta#hexcasting:halt)$(action)卡戎之策略/$类似。"
}
}
},
@@ -191,7 +198,10 @@
set_insert_ret: "入集合之策略",
set_remove_ret: "出集合之策略",
list_to_set: "解顺序之纯化",
- set_to_list: "赋顺序之纯化"
+ set_to_list: "赋顺序之纯化",
+
+ true_halt: "阿刻戎之策略",
+ false_halt: "斯堤克斯之策略"
},
"book.hextrapats:": {
@@ -228,15 +238,15 @@
scientific_exp: "科学计数之纯化:10^%s"
},
"iota.hextrapats:": {
- set: {
- "": "集合",
- desc: "一个集合"
+ num_set: {
+ "": "数集合",
+ desc: "一个数集合"
}
},
mishap: {
invalid_value: {
class: {
- set: "一个集合"
+ num_set: "一个集合"
},
"hextrapats:": {
opposite_vecs: "不与起始方向(%s)正好反向的向量",
From 018202c088cc2b093eaccbaa6eb67854ca0f2324 Mon Sep 17 00:00:00 2001
From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com>
Date: Tue, 24 Mar 2026 16:51:23 +0800
Subject: [PATCH 10/13] =?UTF-8?q?HextraPats=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
---
.../hextrapats/lang/en_us.flatten.json5 | 110 +++++++++++-------
.../hextrapats/lang/zh_cn.flatten.json5 | 110 +++++++++++-------
2 files changed, 142 insertions(+), 78 deletions(-)
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
index 84bc6d30d3cf..05408e45ddc3 100644
--- a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
@@ -28,9 +28,9 @@
"out_range.ops": "The fourth number seems to describe how to check if the value is outside the range.$(li)0: val < min or max < val$(li)1: val <= min or max < val$(li)2: val < min or max <= val$(li)3: val <= min or max <= val"
},
nocon: {
- intro: "Sometimes, I want operate on two iotas after comparing them, but it gets rather annoying to have to execute $(l:patterns/stackmanip#hexcasting:2dup)$(action)Dioscuri Gambit/$ every time I do.",
- name: "Comparison Gambit",
- detail: "With some experimentation, I have found that prepending a comparison with a clockwise triangle will cause the two inputs to not be consumed.",
+ intro: "Sometimes, I want operate on iotas after using them for logic operations, but it gets rather annoying to have to copy them every time I do. All this copying also places a heavy burden on Nature, especially with large iotas like lists where $(l:casting/mishaps)$(thing)stack size can be a concern/$.",
+ name: "Retention Gambit",
+ detail: "With some experimentation, I have found that prepending certain logic operations with a clockwise triangle will cause the inputs to not be consumed.",
},
vec_literals: {
intro: "Interestingly, attaching the tail of any Vector Reflection to the start of $(l:patterns/numbers)$(action)Number Reflection/$ makes it return a vector.",
@@ -63,7 +63,7 @@
approach: "Moves the first value closer to the second by the given amount. Will not overshoot.",
angle_dist: "Returns the shortest angular distance between two angles in radians.",
angle_approach: {
- "": "Turns the first angle towards the second by the given number of radians, picking whichever direction is shorter."
+ "": "Turns the first angle towards the second by the given number of radians, picking whichever direction is shorter.",
examples: "(To make it easier to read, these examples are written in degrees instead of radians.)$(p)For example:$(li)90, 135, 10 \u2192 100 (start at 90, turn 10 degrees towards 135)$(li)10, 270, 30 \u2192 340 (start at 10, turn 30 degrees towards 270)$(li)300, 90, 90 \u2192 30 (start at 300, turn 90 degrees towards 90)$(li)20, 60, 180 \u2192 60 (start at 20, turn 180 degrees towards 60, stop at 60)",
}
},
@@ -99,36 +99,41 @@
},
sets: {
intro: "A hash set contains elements in an unordered fashion, and cannot contain duplicates. Excellent for keeping track of whether or not something exists.
Due to a magical process known as '$(thing)hashing/$', access is reduced to nearly O(1), relaxing the burden on Nature.",
+ tolerance: "However, '$(thing)hashing/$' seems to have a different, albeit minor, burden on Nature. Numbers and vectors lose precision in the process of getting inserted into a set, becoming rounded to 4 decimals. This seems to be related to $(l:patterns/logic#hexcasting:equals)$(thing)how Nature considers $(action)equality/$.",
empty_num_set: "Push an empty set that can hold numbers to the top of the stack.",
+ last_n_num_set: "Remove $(italic)num/$ numbers from the top of the stack, then add them to a number set at the top of the stack.",
empty_vec_set: "Push an empty set that can hold vectors to the top of the stack.",
+ last_n_vec_set: "Remove $(italic)num/$ vectors from the top of the stack, then add them to a vec set at the top of the stack.",
empty_entity_set: "Push an empty set that can hold entities to the top of the stack.",
+ last_n_entity_set: "Remove $(italic)num/$ entities from the top of the stack, then add them to an entity set at the top of the stack.",
insert: {
name: "Insertion Distillation",
- "": "Remove the top of the stack, then add it to the set at the top of the stack."
+ "": "Remove the iota at the top of the stack, then add it to the set. The iota's type must match the set's type."
},
- insert_ret: "Remove the top of the stack, then add it to the set at the top of the stack. Return True if it wasn't already in the set, otherwise return False.",
+ insert_ret: "Remove the iota at the top of the stack, then add it to the set. Return True if it wasn't already in the set, otherwise return False. The iota's type must match the set's type.",
remove: {
name: "Removal Distillation",
- "": "Remove the top of the stack, then remove it from the set at the top of the stack."
+ "": "Remove the iota from top of the stack, then remove it set. The iota's type must match the set's type."
},
- remove_ret: "Remove the top of the stack, then remove it from the set at the top of the stack. Return True if it was previously in the set, otherwise return False.",
- last_n_set: "Remove $(italic)num/$ elements from the stack, then add them to a set at the top of the stack.",
- splat_set: "Remove the set at the top of the stack, then push its contents to the stack. The order is up to Nature's whims.",
+ remove_ret: "Remove the iota from top of the stack, then remove it set. Return True if it was previously in the set, otherwise return False. The iota's type must match the set's type.",
find: {
name: "Locator's Gambit",
- "": "Remove the top of the stack, then return True if the set at the top of the stack contains it, otherwise return False."
+ "": "Remove the iota top of the stack, then return True if the set contains that iota, otherwise return False. The iota's type must match the set's type."
},
- add: "Remove the set at the top of the stack, then add all its elements to the set at the top of the stack.",
- sub: "Remove the set at the top of the stack, then remove all its elements from the set at the top of the stack.",
- and: "Takes the intersection of two sets. The new set will only contain elements that were present in both of the previous sets.",
- xor: "Takes the exclusive disjunction of two sets. The new set will only contain elements that were present in only one of the two sets.",
+ add: "Remove the set at the top of the stack, then add all its elements to the set at the top of the stack. The two sets must be of matching type.",
+ sub: "Remove the set at the top of the stack, then remove all its elements from the set at the top of the stack. The two sets must be of matching type.",
+ and: "Takes the intersection of two sets. The new set will only contain elements that were present in both of the previous sets. The two sets must be of matching type.",
+ xor: "Takes the exclusive disjunction of two sets. The new set will only contain elements that were present in only one of the two sets. The two sets must be of matching type.",
abs: "Remove the set at the top of the stack, then push the number of elements in the set to the stack.",
- list_to_set: "Converts the list at the top of the stack to a set.",
- set_to_list: "Converts the set at the top of the stack to a list. The order is up to Nature's whims."
+ set_to_list: "Converts the set at the top of the stack to a list. The order is up to Nature's whims.",
+ splat_set: "Remove the set at the top of the stack, then push its contents to the stack. The order is up to Nature's whims.",
},
meta: {
- true_halt: "Forcibly halts a $(thing)Hex/$ like $(l:patterns/meta#hexcasting:halt)$(action)Charon's Gambit/$ if the iota at the top of the stack is $(l:patterns/logic#hexcasting:bool_coerce)$(action)considered True by Nature/$.",
- false_halt: "Forcibly halts a $(thing)Hex/$ like $(l:patterns/meta#hexcasting:halt)$(action)Charon's Gambit/$ if the iota at the top of the stack is $(l:patterns/logic#hexcasting:bool_coerce)$(action)considered False by Nature/$."
+ true_halt: "Forcibly halts a $(thing)Hex/$ like $(l:patterns/meta#hexcasting:halt)$(action)Charon's Gambit/$ if the iota at the top of the stack is $(l:patterns/logic#hexcasting:bool_coerce)$(thing)considered $(action)True $(thing)by Nature/$.",
+ false_halt: "Forcibly halts a $(thing)Hex/$ like $(l:patterns/meta#hexcasting:halt)$(action)Charon's Gambit/$ if the iota at the top of the stack is $(l:patterns/logic#hexcasting:bool_coerce)$(thing)considered $(action)False $(thing)by Nature/$.",
+ true_eval: "Casts a pattern or list of patterns like $(l:patterns/meta#hexcasting:eval)$(action)Hermes' Gambit/$ if the next iota from the top of the stack is $(l:patterns/logic#hexcasting:bool_coerce)$(thing)considered $(action)True $(thing)by Nature/$.",
+ false_eval: "Casts a pattern or list of patterns like $(l:patterns/meta#hexcasting:eval)$(action)Hermes' Gambit/$ if the next iota from the top of the stack is $(l:patterns/logic#hexcasting:bool_coerce)$(thing)considered $(action)False $(thing)by Nature/$.",
+ index_for_each: "Casts like $(l:patterns/meta#hexcasting:for_each)$(action)Thoth's Gambit/$, however the new stack for each element additionally has the index of that element added to the top."
}
}
},
@@ -174,14 +179,15 @@
cons_about_z: "Roll Purification",
"nocon/": {
- greater: "Comparison Gambit: Maximus",
- less: "Comparison Gambit: Minimus",
- greater_eq: "Comparison Gambit: Maximus II",
- less_eq: "Comparison Gambit: Minimus II",
- eq: "Comparison Gambit: Equality",
- neq: "Comparison Gambit: Inequality",
- len_eq: "Comparison Gambit: Length Equality",
- len_neq: "Comparison Gambit: Length Inequality",
+ bool_coerce: "Retention Gambit: Augur's",
+ greater: "Retention Gambit: Maximus",
+ less: "Retention Gambit: Minimus",
+ greater_eq: "Retention Gambit: Maximus II",
+ less_eq: "Retention Gambit: Minimus II",
+ eq: "Retention Gambit: Equality",
+ neq: "Retention Gambit: Inequality",
+ len_eq: "Retention Gambit: Length Equality",
+ len_neq: "Retention Gambit: Length Inequality",
},
split_list: "Separation Gambit",
@@ -192,8 +198,12 @@
swindle_list: "Swindler's Distillation",
scronglwfijspoivjqwofklcrvewb: "Shuffling Purification",
- empty_set: "Vacant Reflection: Set",
- last_n_set: "Bucket's Gambit",
+ empty_num_set: "Vacant Reflection: Number Set",
+ empty_vec_set: "Vacant Reflection: Vector Set",
+ empty_entity_set: "Vacant Reflection: Entity Set",
+ last_n_num_set: "Bucketing Gambit: Numbers",
+ last_n_vec_set: "Bucketing Gambit: Vectors",
+ last_n_entity_set: "Bucketing Gambit: Entities",
splat_set: "Spilling Disintegration",
set_insert_ret: "Insertion Gambit",
set_remove_ret: "Removal Gambit",
@@ -201,7 +211,10 @@
set_to_list: "Ordering Purification",
true_halt: "Acheron's Gambit",
- false_halt: "Styx's Gambit"
+ false_halt: "Styx's Gambit",
+ true_eval: "Helios' Gambit",
+ false_eval: "Selene's Gambit",
+ index_for_each: "Djehuty's Gambit"
},
"book.hextrapats:": {
@@ -219,15 +232,23 @@
decrement: "Decrementation Purif.",
"nocon/": {
- greater: "Comp. Gambit: Maximus",
- less: "Comp. Gambit: Minimus",
+ bool_coerce: "Ret. Gambit: Augur's",
+ greater: "Ret. Gambit: Maximus",
+ less: "Ret. Gambit: Minimus",
greater_eq: "Comp. Gambit: Maximus II",
- less_eq: "Comp. Gambit: Minimus II",
- eq: "Comp. Gambit: Equality",
- neq: "Comp. Gambit: Inequality",
- len_eq: "Comp. Gambit: Len. Eq.",
- len_neq: "Comp. Gambit: Len. Ineq."
- }
+ less_eq: "Ret. Gambit: Minimus II",
+ eq: "Ret. Gambit: Equality",
+ neq: "Ret. Gambit: Inequality",
+ len_eq: "Ret. Gambit: Len. Eq.",
+ len_neq: "Ret. Gambit: Len. Ineq."
+ },
+
+ empty_num_set: "Vacant Refl.: Num. Set",
+ empty_vec_set: "Vacant Refl.: Vec. Set",
+ empty_entity_set: "Vacant Refl.: Ent. Set",
+ last_n_num_set: "Bucketing Gamb.: Nums",
+ last_n_vec_set: "Bucketing Gamb.: Vecs",
+ last_n_entity_set: "Bucketing Gamb.: Ents"
}
},
"special.hextrapats:": {
@@ -241,12 +262,23 @@
num_set: {
"": "Set (Nums)",
desc: "a number set"
+ },
+ vec_set: {
+ "": "Set (Vectors)",
+ desc: "a vector set"
+ },
+ entity_set: {
+ "": "Set (Entities)",
+ desc: "an entity set"
}
},
mishap: {
invalid_value: {
class: {
- num_set: "a set"
+ any_set: "any set",
+ num_set: "a number set",
+ vec_set: "a vector set",
+ entity_set: "an entity set"
},
"hextrapats:": {
opposite_vecs: "vector not facing opposite to the start direction (%s)",
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
index 6e3c0c21c19f..464b911325be 100644
--- a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
@@ -28,9 +28,9 @@
"out_range.ops": "第四个数似乎描述了检验的方式。$(li)0:val < min 或 max < val$(li)1:val <= min 或 max < val$(li)2:val < min 或 max <= val$(li)3:val <= min 或 max <= val"
},
nocon: {
- intro: "总有些时候,我会想要在比较两个 iota 之后还继续对它们执行操作,但这就需要每次都先运行$(l:patterns/stackmanip#hexcasting:2dup)$(action)狄俄斯库里之策略/$,确实有些麻烦。",
- name: "比较之策略",
- detail: "通过实验,我发现:在比较图案前加上一个顺时针的三角形,就可以保留两个输入参数了。",
+ intro: "总有些时候,我会想要在对两个 iota 进行逻辑操作之后,还继续对它们执行其他操作。但这就需要每次都先复制,确实有些麻烦。而且复制也会给自然带去负担,复制大型 iota 时尤为如此,比如说列表等大到$(l:casting/mishaps)$(thing)栈上限成为问题/$的那些。",
+ name: "留项之策略",
+ detail: "通过实验,我发现:在部分逻辑操作图案前加上一个顺时针的三角形,就可以保留两个输入参数了。",
},
vec_literals: {
intro: "返回数的图案有种神奇的性质:把向量之精思的尾部加到$(l:patterns/numbers)$(action)数之精思/$的开头,就能返回一个向量。",
@@ -99,36 +99,41 @@
},
sets: {
intro: "哈希集合的各元素无顺序且不重复,很适合用于记录某物存在与否。
由于所谓的“$(thing)哈希/$”之魔法过程,访问其中元素的操作接近于 O(1),能减轻自然的负担。",
+ tolerance: "不过,这种“$(thing)哈希/$”似乎会给自然带去另一种负担,虽然轻微,但确实存在。数和向量在插入集合时会丢失精度,舍入至 4 位小数。这应当是与$(l:patterns/logic#hexcasting:equals)$(thing)自然理解$(action)相等/$的方式有关。",
empty_num_set: "压入一个可包含数的空集合。",
+ last_n_num_set: "移除栈顶 $(italic)num/$ 个数,将其插入此时栈顶的数集合。",
empty_vec_set: "压入一个可包含向量的空集合。",
+ last_n_vec_set: "移除栈顶 $(italic)num/$ 个向量,将其插入此时栈顶的向量集合。",
empty_entity_set: "压入一个可包含实体的空集合。",
+ last_n_entity_set: "移除栈顶 $(italic)num/$ 个实体,将其插入此时栈顶的实体集合。",
insert: {
name: "入集合之馏化",
- "": "移除栈顶元素,将其插入栈顶集合。"
+ "": "移除栈顶元素,将其插入栈顶集合。该 iota 的类型必须符合集合类型。"
},
- insert_ret: "移除栈顶元素,将其插入此时栈顶的集合。若元素已在集合中,返回 True;否则返回 False。",
+ insert_ret: "移除栈顶元素,将其插入此时栈顶的集合。若元素已在集合中,返回 True;否则返回 False。该 iota 的类型必须符合集合类型。",
remove: {
name: "出集合之馏化",
- "": "移除栈顶元素,并从此时栈顶的集合中移除该元素。"
+ "": "移除栈顶元素,并从此时栈顶的集合中移除该元素。该 iota 的类型必须符合集合类型。"
},
- remove_ret: "移除栈顶元素,并从此时栈顶的集合中移除该元素。若元素曾在集合中,返回 True;否则返回 False。",
- last_n_set: "移除 $(italic)num/$ 个元素,而后将它们插入此时栈顶的集合。",
- splat_set: "移除栈顶集合,将其各元素压栈。顺序随自然心情决定。",
+ remove_ret: "移除栈顶元素,并从此时栈顶的集合中移除该元素。若元素曾在集合中,返回 True;否则返回 False。该 iota 的类型必须符合集合类型。",
find: {
name: "定位器之策略",
- "": "移除栈顶元素,若此时栈顶的集合包含该元素,返回 True;否则返回 False。"
+ "": "移除栈顶元素,若此时栈顶的集合包含该元素,返回 True;否则返回 False。该 iota 的类型必须符合集合类型。"
},
- add: "移除栈顶集合,再将其中所有元素插入此时栈顶的集合。",
- sub: "移除栈顶集合,再从此时栈顶的集合中移除被移除集合的各元素。",
- and: "取两集合的交集。新集合将只包含两集合共有的元素。",
- xor: "取两集合的互斥元素。新集合将只包含仅出现于其中一个集合的元素。",
+ add: "移除栈顶集合,再将其中所有元素插入此时栈顶的集合。两集合类型必须匹配。",
+ sub: "移除栈顶集合,再从此时栈顶的集合中移除被移除集合的各元素。两集合类型必须匹配。",
+ and: "取两集合的交集。新集合将只包含两集合共有的元素。两集合类型必须匹配。",
+ xor: "取两集合的互斥元素。新集合将只包含仅出现于其中一个集合的元素。两集合类型必须匹配。",
abs: "移除栈顶集合,返回其中元素数。",
- list_to_set: "将栈顶的列表转换为集合。",
- set_to_list: "将栈顶的集合转换为列表。顺序随自然心情而定。"
+ set_to_list: "将栈顶的集合转换为列表。顺序随自然心情而定。",
+ splat_set: "移除栈顶集合,而后将其中元素全部压入栈顶。顺序随自然心情而定。",
},
meta: {
- true_halt: "若$(l:patterns/logic#hexcasting:bool_coerce)$(action)自然会将栈顶 iota 视作 True/$,则强制停止$(thing)Hex/$的施放,与$(l:patterns/meta#hexcasting:halt)$(action)卡戎之策略/$类似。",
- false_halt: "若$(l:patterns/logic#hexcasting:bool_coerce)$(action)自然会将栈顶 iota 视作 False/$,则强制停止$(thing)Hex/$的施放,与$(l:patterns/meta#hexcasting:halt)$(action)卡戎之策略/$类似。"
+ true_halt: "若自然会将栈顶 iota $(l:patterns/logic#hexcasting:bool_coerce)$(thing)视作 $(action)True/$,则强制停止$(thing)Hex/$的施放,与$(l:patterns/meta#hexcasting:halt)$(action)卡戎之策略/$类似。",
+ false_halt: "若自然会将栈顶 iota $(l:patterns/logic#hexcasting:bool_coerce)$(thing)视作 $(action)False/$,则强制停止$(thing)Hex/$的施放,与$(l:patterns/meta#hexcasting:halt)$(action)卡戎之策略/$类似。",
+ true_eval: "若自然会将栈顶往下第二 iota $(l:patterns/logic#hexcasting:bool_coerce)$(thing)视作 $(action)True/$,则施放栈顶的图案或图案列表,与$(l:patterns/meta#hexcasting:eval)$(action)赫尔墨斯之策略/$类似。",
+ false_eval: "若自然会将栈顶往下第二 iota $(l:patterns/logic#hexcasting:bool_coerce)$(thing)视作 $(action)False/$,则施放栈顶的图案或图案列表,与$(l:patterns/meta#hexcasting:eval)$(action)赫尔墨斯之策略/$类似。",
+ index_for_each: "与$(l:patterns/meta#hexcasting:for_each)$(action)托特之策略/$类似,但被遍历列表的各独立栈会额外将所选元素的下标压入栈顶。"
}
}
},
@@ -174,14 +179,15 @@
cons_about_z: "滚转之纯化",
"nocon/": {
- greater: "比较之策略:至大",
- less: "比较之策略:至小",
- greater_eq: "比较之策略:至大第二型",
- less_eq: "比较之策略:至小第二型",
- eq: "比较之策略:相等",
- neq: "比较之策略:不等",
- len_eq: "比较之策略:长度相等",
- len_neq: "比较之策略:长度不等",
+ bool_coerce: "留项之策略:占卜师",
+ greater: "留项之策略:至大",
+ less: "留项之策略:至小",
+ greater_eq: "留项之策略:至大第二型",
+ less_eq: "留项之策略:至小第二型",
+ eq: "留项之策略:相等",
+ neq: "留项之策略:不等",
+ len_eq: "留项之策略:长度相等",
+ len_neq: "留项之策略:长度不等",
},
split_list: "分割之策略",
@@ -192,8 +198,12 @@
swindle_list: "骗徒之馏化",
scronglwfijspoivjqwofklcrvewb: "打乱之纯化",
- empty_set: "空无之精思:集合",
- last_n_set: "桶之策略",
+ empty_num_set: "空无之精思:数集合",
+ empty_vec_set: "空无之精思:向量集合",
+ empty_entity_set: "空无之精思:实体集合",
+ last_n_num_set: "桶之策略:数",
+ last_n_vec_set: "桶之策略:向量",
+ last_n_entity_set: "桶之策略:实体",
splat_set: "泼洒之拆解",
set_insert_ret: "入集合之策略",
set_remove_ret: "出集合之策略",
@@ -201,7 +211,10 @@
set_to_list: "赋顺序之纯化",
true_halt: "阿刻戎之策略",
- false_halt: "斯堤克斯之策略"
+ false_halt: "斯堤克斯之策略",
+ true_eval: "赫利俄斯之策略",
+ false_eval: "塞勒涅之策略",
+ index_for_each: "杰胡提之策略"
},
"book.hextrapats:": {
@@ -219,15 +232,23 @@
decrement: "递减之纯化",
"nocon/": {
- greater: "比较之策略:至大",
- less: "比较之策略:至小",
- greater_eq: "比较之策略:至大第二型",
- less_eq: "比较之策略:至小第二型",
- eq: "比较之策略:相等",
- neq: "比较之策略:不等",
- len_eq: "比较之策略:长度相等",
- len_neq: "比较之策略:长度不等"
- }
+ bool_coerce: "留项之策略:占卜师",
+ greater: "留项之策略:至大",
+ less: "留项之策略:至小",
+ greater_eq: "留项之策略:至大第二型",
+ less_eq: "留项之策略:至小第二型",
+ eq: "留项之策略:相等",
+ neq: "留项之策略:不等",
+ len_eq: "留项之策略:长度相等",
+ len_neq: "留项之策略:长度不等"
+ },
+
+ empty_num_set: "空无之精思:数集合",
+ empty_vec_set: "空无之精思:向量集合",
+ empty_entity_set: "空无之精思:实体集合",
+ last_n_num_set: "桶之策略:数",
+ last_n_vec_set: "桶之策略:向量",
+ last_n_entity_set: "桶之策略:实体"
}
},
"special.hextrapats:": {
@@ -241,12 +262,23 @@
num_set: {
"": "数集合",
desc: "一个数集合"
+ },
+ vec_set: {
+ "": "向量集合",
+ desc: "一个向量集合"
+ },
+ entity_set: {
+ "": "实体集合",
+ desc: "一个实体集合"
}
},
mishap: {
invalid_value: {
class: {
- num_set: "一个集合"
+ any_set: "任意集合",
+ num_set: "一个数集合",
+ vec_set: "一个向量集合",
+ entity_set: "一个实体集合"
},
"hextrapats:": {
opposite_vecs: "不与起始方向(%s)正好反向的向量",
From 9a5940109c6c5ac9f4b955cb5ec3685e82d1569c Mon Sep 17 00:00:00 2001
From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com>
Date: Mon, 6 Apr 2026 00:29:17 +0800
Subject: [PATCH 11/13] HextraPats fix
---
.../hextrapats/lang/zh_cn.flatten.json5 | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
index 464b911325be..65bb4ab36025 100644
--- a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
@@ -20,8 +20,8 @@
less: "若第一个向量的长度短于第二个的,返回 True;否则返回 False。",
greater_eq: "若第一个向量的长度长于或等于第二个的,返回 True;否则返回 False。",
less_eq: "若第一个向量的长度短于或等于第二个的,返回 True;否则返回 False。",
- len_eq: "若两向量的长度相等(允许较小误差),返回 True;否则返回 False。",
- len_neq: "若两向量的长度不相等(不计较小误差),返回 True;否则返回 False。",
+ len_eq: "若两向量的长度相等(在较小误差内),返回 True;否则返回 False。",
+ len_neq: "若两向量的长度不相等(超出较小误差),返回 True;否则返回 False。",
in_range: "若第一个数在第二个和第三个之间,返回 True;否则返回 False。若第一个参数是向量,则比较其长度。",
"in_range.ops": "第四个数似乎描述了检验的方式。$(li)0:min < val < max$(li)1:min <= val < max$(li)2:min < val <= max$(li)3:min <= val <= max",
out_range: "若第一个数不在第二个和第三个之间,返回 True;否则返回 False。若第一个参数是向量,则比较其长度。",
From 41e3473ea1a2feda13d9a30105fdca02930c4823 Mon Sep 17 00:00:00 2001
From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com>
Date: Mon, 6 Apr 2026 00:42:27 +0800
Subject: [PATCH 12/13] =?UTF-8?q?HextraPats=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
---
.../hextrapats/lang/en_us.flatten.json5 | 26 ++++++++--------
.../hextrapats/lang/zh_cn.flatten.json5 | 30 +++++++++----------
2 files changed, 28 insertions(+), 28 deletions(-)
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
index 05408e45ddc3..ca5825c0e7e5 100644
--- a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/en_us.flatten.json5
@@ -101,11 +101,8 @@
intro: "A hash set contains elements in an unordered fashion, and cannot contain duplicates. Excellent for keeping track of whether or not something exists.
Due to a magical process known as '$(thing)hashing/$', access is reduced to nearly O(1), relaxing the burden on Nature.",
tolerance: "However, '$(thing)hashing/$' seems to have a different, albeit minor, burden on Nature. Numbers and vectors lose precision in the process of getting inserted into a set, becoming rounded to 4 decimals. This seems to be related to $(l:patterns/logic#hexcasting:equals)$(thing)how Nature considers $(action)equality/$.",
empty_num_set: "Push an empty set that can hold numbers to the top of the stack.",
- last_n_num_set: "Remove $(italic)num/$ numbers from the top of the stack, then add them to a number set at the top of the stack.",
empty_vec_set: "Push an empty set that can hold vectors to the top of the stack.",
- last_n_vec_set: "Remove $(italic)num/$ vectors from the top of the stack, then add them to a vec set at the top of the stack.",
empty_entity_set: "Push an empty set that can hold entities to the top of the stack.",
- last_n_entity_set: "Remove $(italic)num/$ entities from the top of the stack, then add them to an entity set at the top of the stack.",
insert: {
name: "Insertion Distillation",
"": "Remove the iota at the top of the stack, then add it to the set. The iota's type must match the set's type."
@@ -126,6 +123,8 @@
xor: "Takes the exclusive disjunction of two sets. The new set will only contain elements that were present in only one of the two sets. The two sets must be of matching type.",
abs: "Remove the set at the top of the stack, then push the number of elements in the set to the stack.",
set_to_list: "Converts the set at the top of the stack to a list. The order is up to Nature's whims.",
+ list_to_set: "Converts the list at the top of the stack to a set. The list must be non-empty and entirely numbers, vectors, or entities.",
+ last_n_set: "Remove $(italic)num/$ iota from the top of the stack, then add them to a set at the top of the stack. Must be either all numbers, all vectors, or all entities.",
splat_set: "Remove the set at the top of the stack, then push its contents to the stack. The order is up to Nature's whims.",
},
meta: {
@@ -133,7 +132,9 @@
false_halt: "Forcibly halts a $(thing)Hex/$ like $(l:patterns/meta#hexcasting:halt)$(action)Charon's Gambit/$ if the iota at the top of the stack is $(l:patterns/logic#hexcasting:bool_coerce)$(thing)considered $(action)False $(thing)by Nature/$.",
true_eval: "Casts a pattern or list of patterns like $(l:patterns/meta#hexcasting:eval)$(action)Hermes' Gambit/$ if the next iota from the top of the stack is $(l:patterns/logic#hexcasting:bool_coerce)$(thing)considered $(action)True $(thing)by Nature/$.",
false_eval: "Casts a pattern or list of patterns like $(l:patterns/meta#hexcasting:eval)$(action)Hermes' Gambit/$ if the next iota from the top of the stack is $(l:patterns/logic#hexcasting:bool_coerce)$(thing)considered $(action)False $(thing)by Nature/$.",
- index_for_each: "Casts like $(l:patterns/meta#hexcasting:for_each)$(action)Thoth's Gambit/$, however the new stack for each element additionally has the index of that element added to the top."
+ index_for_each: "Casts like $(l:patterns/meta#hexcasting:for_each)$(action)Thoth's Gambit/$, however the new stack for each element additionally has the index of that element added to the top.",
+ main_for_each: "Casts like $(l:patterns/meta#hexcasting:for_each)$(action)Thoth's Gambit/$, however each sub-execution operates on the main stack instead of copies of the stack.",
+ main_index_for_each: "Casts like $(l:patterns/hextrapats_meta#hextrapats:index_for_each)$(action)Djehuty's Gambit/$, however each sub-execution operates on the main stack instead of copies of the stack."
}
}
},
@@ -201,9 +202,7 @@
empty_num_set: "Vacant Reflection: Number Set",
empty_vec_set: "Vacant Reflection: Vector Set",
empty_entity_set: "Vacant Reflection: Entity Set",
- last_n_num_set: "Bucketing Gambit: Numbers",
- last_n_vec_set: "Bucketing Gambit: Vectors",
- last_n_entity_set: "Bucketing Gambit: Entities",
+ last_n_set: "Bucketing Gambit",
splat_set: "Spilling Disintegration",
set_insert_ret: "Insertion Gambit",
set_remove_ret: "Removal Gambit",
@@ -214,7 +213,9 @@
false_halt: "Styx's Gambit",
true_eval: "Helios' Gambit",
false_eval: "Selene's Gambit",
- index_for_each: "Djehuty's Gambit"
+ index_for_each: "Djehuty's Gambit",
+ main_for_each: "Anubis' Gambit",
+ main_index_for_each: "Ra's Gambit"
},
"book.hextrapats:": {
@@ -245,10 +246,7 @@
empty_num_set: "Vacant Refl.: Num. Set",
empty_vec_set: "Vacant Refl.: Vec. Set",
- empty_entity_set: "Vacant Refl.: Ent. Set",
- last_n_num_set: "Bucketing Gamb.: Nums",
- last_n_vec_set: "Bucketing Gamb.: Vecs",
- last_n_entity_set: "Bucketing Gamb.: Ents"
+ empty_entity_set: "Vacant Refl.: Ent. Set"
}
},
"special.hextrapats:": {
@@ -282,7 +280,9 @@
},
"hextrapats:": {
opposite_vecs: "vector not facing opposite to the start direction (%s)",
- too_short_to_swindle: "a list of at least length %s"
+ too_short_to_swindle: "a list of at least length %s",
+ set_item: "a number, vector, or entity",
+ set_list: "a non-empty list of entirely numbers, vectors, or entities"
}
}
}
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
index 65bb4ab36025..924fd458c08a 100644
--- a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
@@ -101,11 +101,8 @@
intro: "哈希集合的各元素无顺序且不重复,很适合用于记录某物存在与否。
由于所谓的“$(thing)哈希/$”之魔法过程,访问其中元素的操作接近于 O(1),能减轻自然的负担。",
tolerance: "不过,这种“$(thing)哈希/$”似乎会给自然带去另一种负担,虽然轻微,但确实存在。数和向量在插入集合时会丢失精度,舍入至 4 位小数。这应当是与$(l:patterns/logic#hexcasting:equals)$(thing)自然理解$(action)相等/$的方式有关。",
empty_num_set: "压入一个可包含数的空集合。",
- last_n_num_set: "移除栈顶 $(italic)num/$ 个数,将其插入此时栈顶的数集合。",
empty_vec_set: "压入一个可包含向量的空集合。",
- last_n_vec_set: "移除栈顶 $(italic)num/$ 个向量,将其插入此时栈顶的向量集合。",
empty_entity_set: "压入一个可包含实体的空集合。",
- last_n_entity_set: "移除栈顶 $(italic)num/$ 个实体,将其插入此时栈顶的实体集合。",
insert: {
name: "入集合之馏化",
"": "移除栈顶元素,将其插入栈顶集合。该 iota 的类型必须符合集合类型。"
@@ -126,14 +123,18 @@
xor: "取两集合的互斥元素。新集合将只包含仅出现于其中一个集合的元素。两集合类型必须匹配。",
abs: "移除栈顶集合,返回其中元素数。",
set_to_list: "将栈顶的集合转换为列表。顺序随自然心情而定。",
+ list_to_set: "将栈顶的列表转换为集合。列表必须完全由数、向量、实体三者中的一者组成。",
+ last_n_set: "从栈顶移除 $(italic)num/$ 个 iota,而后将它们加入此时栈顶的集合。被移除 iota 必须全部为数,或全部为向量,或全部为实体。",
splat_set: "移除栈顶集合,而后将其中元素全部压入栈顶。顺序随自然心情而定。",
},
meta: {
- true_halt: "若自然会将栈顶 iota $(l:patterns/logic#hexcasting:bool_coerce)$(thing)视作 $(action)True/$,则强制停止$(thing)Hex/$的施放,与$(l:patterns/meta#hexcasting:halt)$(action)卡戎之策略/$类似。",
- false_halt: "若自然会将栈顶 iota $(l:patterns/logic#hexcasting:bool_coerce)$(thing)视作 $(action)False/$,则强制停止$(thing)Hex/$的施放,与$(l:patterns/meta#hexcasting:halt)$(action)卡戎之策略/$类似。",
+ true_halt: "若自然会将栈顶 iota $(l:patterns/logic#hexcasting:bool_coerce)$(thing)视作 $(action)True/$,则强制停止$(thing)咒术/$的施放,与$(l:patterns/meta#hexcasting:halt)$(action)卡戎之策略/$类似。",
+ false_halt: "若自然会将栈顶 iota $(l:patterns/logic#hexcasting:bool_coerce)$(thing)视作 $(action)False/$,则强制停止$(thing)咒术/$的施放,与$(l:patterns/meta#hexcasting:halt)$(action)卡戎之策略/$类似。",
true_eval: "若自然会将栈顶往下第二 iota $(l:patterns/logic#hexcasting:bool_coerce)$(thing)视作 $(action)True/$,则施放栈顶的图案或图案列表,与$(l:patterns/meta#hexcasting:eval)$(action)赫尔墨斯之策略/$类似。",
false_eval: "若自然会将栈顶往下第二 iota $(l:patterns/logic#hexcasting:bool_coerce)$(thing)视作 $(action)False/$,则施放栈顶的图案或图案列表,与$(l:patterns/meta#hexcasting:eval)$(action)赫尔墨斯之策略/$类似。",
- index_for_each: "与$(l:patterns/meta#hexcasting:for_each)$(action)托特之策略/$类似,但被遍历列表的各独立栈会额外将所选元素的下标压入栈顶。"
+ index_for_each: "与$(l:patterns/meta#hexcasting:for_each)$(action)托特之策略/$类似,但被遍历列表的各独立栈会额外将所选元素的下标压入栈顶。",
+ main_for_each: "与$(l:patterns/meta#hexcasting:for_each)$(action)托特之策略/$类似,但会直接在主栈中进行遍历,而非各项复制新栈。",
+ main_index_for_each: "与$(l:patterns/hextrapats_meta#hextrapats:index_for_each)$(action)杰胡提之策略/$类似,但会直接在主栈中进行遍历,而非各项复制新栈。"
}
}
},
@@ -201,9 +202,7 @@
empty_num_set: "空无之精思:数集合",
empty_vec_set: "空无之精思:向量集合",
empty_entity_set: "空无之精思:实体集合",
- last_n_num_set: "桶之策略:数",
- last_n_vec_set: "桶之策略:向量",
- last_n_entity_set: "桶之策略:实体",
+ last_n_set: "桶之策略",
splat_set: "泼洒之拆解",
set_insert_ret: "入集合之策略",
set_remove_ret: "出集合之策略",
@@ -214,7 +213,9 @@
false_halt: "斯堤克斯之策略",
true_eval: "赫利俄斯之策略",
false_eval: "塞勒涅之策略",
- index_for_each: "杰胡提之策略"
+ index_for_each: "杰胡提之策略",
+ main_for_each: "阿努比斯之策略",
+ main_index_for_each: "拉之策略"
},
"book.hextrapats:": {
@@ -245,10 +246,7 @@
empty_num_set: "空无之精思:数集合",
empty_vec_set: "空无之精思:向量集合",
- empty_entity_set: "空无之精思:实体集合",
- last_n_num_set: "桶之策略:数",
- last_n_vec_set: "桶之策略:向量",
- last_n_entity_set: "桶之策略:实体"
+ empty_entity_set: "空无之精思:实体集合"
}
},
"special.hextrapats:": {
@@ -282,7 +280,9 @@
},
"hextrapats:": {
opposite_vecs: "不与起始方向(%s)正好反向的向量",
- too_short_to_swindle: "长度至少为%s的列表"
+ too_short_to_swindle: "长度至少为%s的列表",
+ set_item: "一个数、向量,或实体",
+ set_list: "完全由数、向量、实体三者之一组成的非空列表"
}
}
}
From b38efd7c4bce49747a8b16e77c7615be3c2afeb1 Mon Sep 17 00:00:00 2001
From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com>
Date: Sun, 19 Apr 2026 15:51:14 +0800
Subject: [PATCH 13/13] HextraPats fix
---
.../hextrapats/lang/zh_cn.flatten.json5 | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5 b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
index 924fd458c08a..46d75871280a 100644
--- a/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
+++ b/projects/1.20-fabric/assets/modrinth-hextra-patterns/hextrapats/lang/zh_cn.flatten.json5
@@ -133,8 +133,8 @@
true_eval: "若自然会将栈顶往下第二 iota $(l:patterns/logic#hexcasting:bool_coerce)$(thing)视作 $(action)True/$,则施放栈顶的图案或图案列表,与$(l:patterns/meta#hexcasting:eval)$(action)赫尔墨斯之策略/$类似。",
false_eval: "若自然会将栈顶往下第二 iota $(l:patterns/logic#hexcasting:bool_coerce)$(thing)视作 $(action)False/$,则施放栈顶的图案或图案列表,与$(l:patterns/meta#hexcasting:eval)$(action)赫尔墨斯之策略/$类似。",
index_for_each: "与$(l:patterns/meta#hexcasting:for_each)$(action)托特之策略/$类似,但被遍历列表的各独立栈会额外将所选元素的下标压入栈顶。",
- main_for_each: "与$(l:patterns/meta#hexcasting:for_each)$(action)托特之策略/$类似,但会直接在主栈中进行遍历,而非各项复制新栈。",
- main_index_for_each: "与$(l:patterns/hextrapats_meta#hextrapats:index_for_each)$(action)杰胡提之策略/$类似,但会直接在主栈中进行遍历,而非各项复制新栈。"
+ main_for_each: "与$(l:patterns/meta#hexcasting:for_each)$(action)托特之策略/$类似,但遍历会直接以主栈为运行环境,而非为各项单独复制新栈。",
+ main_index_for_each: "与$(l:patterns/hextrapats_meta#hextrapats:index_for_each)$(action)杰胡提之策略/$类似,但遍历会直接以主栈为运行环境,而非为各项单独复制新栈。"
}
}
},