From cdc023a93fa31a3a69a90e1c6538f34c88cdcd98 Mon Sep 17 00:00:00 2001 From: Robotgiggle <88736742+Robotgiggle@users.noreply.github.com> Date: Mon, 11 May 2026 20:24:12 -0400 Subject: [PATCH 1/6] Update Gradle, Kotlin, and Loom to support Inline 1.2.2 (#1043) The current implementation of the pattern overlay feature added in #879 relies on a method in Inline that was renamed in the 1.2.0 update. Thus, if anyone uses a version of Inline beyond that point with the current version of hex, it will break. This PR updates hex's Inline dependency to the latest version and updates the relevant methods to their new names to prevent that from happening, and also updates a bunch of core libraries which are required for the new Inline version. Note that if this PR does _not_ get merged before the 0.11.4 release, we should instead change the Inline dependency in `fabric.mod.json` (fabric) and `mods.toml` (forge) to explicitly exclude Inline versions 1.2.0 and onwards. Also note that the new Kotlin version (2.2.21) now gives a bunch of warnings about the use of public `copy()` methods on data classes with private constructors, since that functionality will be removed in future versions of Kotlin. More info can be found [here](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-consistent-copy-visibility/) and [here](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-exposed-copy-visibility/). --- .github/workflows/pr.yml | 8 ++++---- CHANGELOG.md | 5 +++++ .../petrak/hexcasting/interop/inline/InlineHexClient.java | 8 ++++---- Fabric/build.gradle | 6 +++--- Fabric/gradle.properties | 6 +++--- Fabric/src/main/resources/fabric.mod.json | 4 ++-- Forge/build.gradle | 2 +- Forge/gradle.properties | 2 +- Forge/src/main/resources/META-INF/mods.toml | 2 +- build.gradle | 2 +- gradle.properties | 6 +++--- gradle/wrapper/gradle-wrapper.properties | 2 +- 12 files changed, 29 insertions(+), 24 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 5db661081d..1fb36de8ed 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -60,10 +60,10 @@ jobs: mc-runtime-test: fabric fabric-api: 0.87.0 dependencies: >- - 'https://cdn.modrinth.com/data/Ha28R6CL/versions/vlhvI5Li/fabric-language-kotlin-1.10.18%2Bkotlin.1.9.22.jar' + 'https://cdn.modrinth.com/data/Ha28R6CL/versions/LcgnDDmT/fabric-language-kotlin-1.13.7%2Bkotlin.2.2.21.jar' 'https://cdn.modrinth.com/data/9s6osm5g/versions/s7VTKfLA/cloth-config-11.1.106-fabric.jar' 'https://cdn.modrinth.com/data/TZo2wHFe/versions/dabyDTwJ/paucal-0.6.0%2B1.20.1-fabric.jar' - 'https://cdn.modrinth.com/data/fin1PX4m/versions/oUAVXW1N/inline-fabric-1.20.1-1.1.1.jar' + 'https://cdn.modrinth.com/data/fin1PX4m/versions/n7VmkBLu/inline-fabric-1.20.1-1.2.2.jar' 'https://cdn.modrinth.com/data/K01OU20C/versions/HykM2Qyv/cardinal-components-api-5.2.1.jar' 'https://cdn.modrinth.com/data/nU0bVIaL/versions/Y6tuH1cn/Patchouli-1.20.1-84-FABRIC.jar' 'https://cdn.modrinth.com/data/mOgUt4GM/versions/zv46i3PW/modmenu-7.1.0.jar' @@ -72,10 +72,10 @@ jobs: mc-runtime-test: lexforge fabric-api: none dependencies: >- - 'https://cdn.modrinth.com/data/ordsPcFz/versions/9j6YaPp2/kotlinforforge-4.10.0-all.jar' + 'https://cdn.modrinth.com/data/ordsPcFz/versions/Zsh14XeQ/kotlinforforge-4.12.0-all.jar' 'https://cdn.modrinth.com/data/9s6osm5g/versions/JoLgnJ0G/cloth-config-11.1.106-forge.jar' 'https://cdn.modrinth.com/data/TZo2wHFe/versions/HyBiJPtT/paucal-0.6.0%2B1.20.1-forge.jar' - 'https://cdn.modrinth.com/data/fin1PX4m/versions/U3ktiRdL/inline-forge-1.20.1-1.1.1.jar' + 'https://cdn.modrinth.com/data/fin1PX4m/versions/H1jsvy53/inline-forge-1.20.1-1.2.2.jar' 'https://cdn.modrinth.com/data/40FYwb4z/versions/fs9CeXYZ/caelus-forge-3.1.0%2B1.20.jar' 'https://cdn.modrinth.com/data/nU0bVIaL/versions/JMtc0mTS/Patchouli-1.20.1-84-FORGE.jar' runs-on: ubuntu-latest diff --git a/CHANGELOG.md b/CHANGELOG.md index c56d54f120..05c834cd67 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - Fixed a crash loop when trying to generate a creative-mode ancient scroll for a Great Spell whose per-world pattern hasn't been calculated yet, by Robotgiggle in [992](https://github.com/FallingColors/HexMod/pull/992). +### Internal + +- The mod now uses Fabric Loom 1.9, Gradle 8.11, and Kotlin 2.0.20, by Robotgiggle in [#1043](https://github.com/FallingColors/HexMod/pull/1043). +- Updated Inline dependency from 1.0.1 to 1.2.2, by Robotgiggle in [#1043](https://github.com/FallingColors/HexMod/pull/1043). + ## `0.11.3` - 2025-11-22 ### Added diff --git a/Common/src/main/java/at/petrak/hexcasting/interop/inline/InlineHexClient.java b/Common/src/main/java/at/petrak/hexcasting/interop/inline/InlineHexClient.java index 8641d237c5..fe937b49ee 100644 --- a/Common/src/main/java/at/petrak/hexcasting/interop/inline/InlineHexClient.java +++ b/Common/src/main/java/at/petrak/hexcasting/interop/inline/InlineHexClient.java @@ -10,9 +10,9 @@ public static void init(){ InlineClientAPI.INSTANCE.addMatcher(HexPatternMatcher.INSTANCE); InlineClientAPI.INSTANCE.addRenderer(InlinePatternRenderer.INSTANCE); - ItemOverlayRenderer.registerRenderer(HexItems.SCROLL_LARGE, HexPatternOverlayRenderer.SCROLL_RENDERER); - ItemOverlayRenderer.registerRenderer(HexItems.SCROLL_MEDIUM, HexPatternOverlayRenderer.SCROLL_RENDERER); - ItemOverlayRenderer.registerRenderer(HexItems.SCROLL_SMOL, HexPatternOverlayRenderer.SCROLL_RENDERER); - ItemOverlayRenderer.registerRenderer(HexItems.SLATE, HexPatternOverlayRenderer.SLATE_RENDERER); + ItemOverlayRenderer.addRenderer(HexItems.SCROLL_LARGE, HexPatternOverlayRenderer.SCROLL_RENDERER); + ItemOverlayRenderer.addRenderer(HexItems.SCROLL_MEDIUM, HexPatternOverlayRenderer.SCROLL_RENDERER); + ItemOverlayRenderer.addRenderer(HexItems.SCROLL_SMOL, HexPatternOverlayRenderer.SCROLL_RENDERER); + ItemOverlayRenderer.addRenderer(HexItems.SLATE, HexPatternOverlayRenderer.SLATE_RENDERER); } } diff --git a/Fabric/build.gradle b/Fabric/build.gradle index 03dd200517..9e61996a09 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version "1.6-SNAPSHOT" + id 'fabric-loom' version "1.9+" id "at.petra-k.pkpcpbp.PKSubprojPlugin" } @@ -19,8 +19,8 @@ pkSubproj { modrinthDependencies([ "paucal:dabyDTwJ", // 0.6.0-fabric "patchouli:1.20.1-80-fabric", - "fabric-language-kotlin:1.9.4+kotlin.1.8.21", - "inline:1.20.1-1.1.1-fabric", + "fabric-language-kotlin:1.13.7+kotlin.2.2.21", + "inline:1.20.1-1.2.2-fabric", "cloth-config:11.1.106+fabric", "cardinal-components-api:5.2.1", "fabric-api:0.84.0+1.20.1", diff --git a/Fabric/gradle.properties b/Fabric/gradle.properties index d042536ad9..fa12bb4b5c 100644 --- a/Fabric/gradle.properties +++ b/Fabric/gradle.properties @@ -1,8 +1,8 @@ platform=fabric -fabricVersion=0.85.0+1.20.1 -fabricLoaderVersion=0.14.21 -fabricLanguageKotlinVersion=1.9.4+kotlin.1.8.21 +fabricVersion=0.92.8+1.20.1 +fabricLoaderVersion=0.19.2 +fabricLanguageKotlinVersion=1.13.7+kotlin.2.2.21 # These are all included cardinalComponentsVersion=5.2.1 diff --git a/Fabric/src/main/resources/fabric.mod.json b/Fabric/src/main/resources/fabric.mod.json index 6a289661b5..38174656fe 100644 --- a/Fabric/src/main/resources/fabric.mod.json +++ b/Fabric/src/main/resources/fabric.mod.json @@ -50,7 +50,7 @@ "java": ">=17", "fabricloader": ">=0.14", "fabric": ">=0.84", - "fabric-language-kotlin": ">=1.9.4+kotlin.1.8.21", + "fabric-language-kotlin": ">=1.13.7+kotlin.2.2.21", "cardinal-components-base": "~5.2.1", "cardinal-components-entity": "~5.2.1", "cardinal-components-item": "~5.2.1", @@ -58,7 +58,7 @@ "paucal": ">=0.6.0-pre <0.7.0", "cloth-config": "11.1.*", "patchouli": ">=1.20.1-80", - "inline": ">=1.20.1-1.1.1" + "inline": ">=1.20.1-1.2.2" }, "suggests": { "pehkui": ">=3.7.6", diff --git a/Forge/build.gradle b/Forge/build.gradle index fcc3feaf57..43831992c4 100644 --- a/Forge/build.gradle +++ b/Forge/build.gradle @@ -37,7 +37,7 @@ pkSubproj { "paucal:HyBiJPtT", // 0.6.0-forge "patchouli:1.20.1-80-forge", "caelus:3.1.0+1.20", - "inline:1.20.1-1.1.1-forge", + "inline:1.20.1-1.2.2-forge", ]) } diff --git a/Forge/gradle.properties b/Forge/gradle.properties index 8b3c7f47f9..43a9cbd5cb 100644 --- a/Forge/gradle.properties +++ b/Forge/gradle.properties @@ -2,7 +2,7 @@ platform=forge forgeVersion=47.1.47 -kotlinForForgeVersion=4.3.0 +kotlinForForgeVersion=4.12.0 curiosVersion=5.2.0-beta.3 caelusVersion=3.1.0+1.20 diff --git a/Forge/src/main/resources/META-INF/mods.toml b/Forge/src/main/resources/META-INF/mods.toml index 93396c8d94..c599b86852 100644 --- a/Forge/src/main/resources/META-INF/mods.toml +++ b/Forge/src/main/resources/META-INF/mods.toml @@ -52,6 +52,6 @@ side = "BOTH" [[dependencies.hexcasting]] modId = "inline" mandatory = true -versionRange = "[1.20.1-1.1.1,)" +versionRange = "[1.20.1-1.2.2,)" ordering = "NONE" side = "BOTH" \ No newline at end of file diff --git a/build.gradle b/build.gradle index 957b112bed..97cab8aa70 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ plugins { // This needs to be in the root // https://github.com/FabricMC/fabric-loom/issues/612#issuecomment-1198444120 // Also it looks like property lookups don't work this early - id 'fabric-loom' version '1.6-SNAPSHOT' apply false + id 'fabric-loom' version '1.9+' apply false id("at.petra-k.pkpcpbp.PKPlugin") version "0.2.0-pre-104" id("at.petra-k.pkpcpbp.PKSubprojPlugin") version "0.2.0-pre-104" apply false diff --git a/gradle.properties b/gradle.properties index 7563800f36..4bc43541a6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ modName=Hex Casting jetbrainsAnnotationsVersion=23.0.0 minecraftVersion=1.20.1 -kotlinVersion=1.7.20 +kotlinVersion=2.2.21 modVersion=0.11.3 # this is the version published to modrinth/cf i swear @@ -17,7 +17,7 @@ paucalVersion=0.6.0-pre-118 patchouliVersion=83 jeiVersion=15.0.0.12 -pehkuiVersion=3.7.7 +pehkuiVersion=3.8.2 -inlineVersion=1.1.1 +inlineVersion=1.2.2 clothConfigVersion=11.1.106 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a4413138c9..ca025c83a7 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 8dec5490317d3a4d7c321d09faee9f5c35192b85 Mon Sep 17 00:00:00 2001 From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com> Date: Wed, 27 May 2026 12:03:46 +0800 Subject: [PATCH 2/6] Update zh_cn (#1045) --- .../assets/hexcasting/lang/zh_cn.flatten.json5 | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 index af8f45aa74..b2824e929c 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 @@ -397,7 +397,11 @@ }, circleActionDenyList: { "": "法术环禁用操作列表", - "@Tooltip": "法术环中被禁用操作的资源位置;试图执行此类操作会导致事故", + "@Tooltip": "法术环中被禁用操作的资源位置;试图执行此类操作会导致事故。例如,“hexcasting:get_caster”会禁用意识之精思。", + }, + costRescaleListRaw: { + "": "消耗倍数", + "@Tooltip": "资源位置与对应操作媒质消耗倍数的映射。例如,“hexcasting:add_motion 3”会让驱动的消耗变为3倍。", }, greaterTeleportSplatsItems: { "": "卓越传送散落物品", @@ -2103,10 +2107,10 @@ "2": "当然,也有其他种类的飞行法术。例如,将$(l:patterns/spells/basic#hexcasting:add_motion)$(action)驱动/$和$(l:patterns/spells/nadirs#hexcasting:potion/levitation)$(action)蓝阳西沉/$结合使用的类飞行技术自古代起就多有运用。$(br2)我还听说过一种能给予滑翔能力的,可以穿在背上的薄透翼膜。研究表明,被称为“$(l:patterns/great_spells/altiora)$(action)翱翔/$”的卓越法术也许能模仿这种翼膜的功用。", "range.1": "受范围限制的飞行法术。", - "range.2": "第二参数代表水平方向上的半径(以米计),在此范围内,法术能保持稳定。走出该范围就会结束该法术,滞空的物体会直接坠向地面。但只要一直待在这个范围内,法术的效果便会无限持续。此法术还会额外产生微量$(media)媒质/$用以标记安全区域中心点。$(br2)每米安全范围消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "range.2": "第二参数代表水平方向上的半径(以米计),在此范围内,法术能保持稳定。走出该范围就会结束该法术,滞空的物体会直接坠向地面。但只要一直待在这个范围内,法术的效果便会无限持续。此法术还会额外产生微量$(media)媒质/$用以标记安全区域中心点。$(br2)每米安全范围消耗大约 2 个$(l:items/amethyst)$(item)紫水晶粉/$,即便范围半径小于 1 米也仍会消耗 2 个$(l:items/amethyst)$(item)紫水晶粉/$。", "time.1": "受时间限制的飞行法术。", - "time.2": "第二参数代表持续时间(以秒计),在此限制内,法术能保持稳定。持续时间超过限制就会结束该法术,滞空的物体会直接坠向地面。$(br2)此法术相对较昂贵,每秒持续时间消耗大约 1 个$(l:items/amethyst)$(item)紫水晶碎片/$。我觉得它极其适合长途旅行。", + "time.2": "第二参数代表持续时间(以秒计),在此限制内,法术能保持稳定。持续时间超过限制就会结束该法术,滞空的物体会直接坠向地面。$(br2)每秒持续时间消耗大约 2 个$(l:items/amethyst)$(item)紫水晶粉/$。我觉得它极其适合长途旅行。", // Putting this in this category instead of elsewhere -- see sentinel chapter also containing some reflections/nonspells "can_fly.1": "检查玩家是否处于$(l:patterns/spells/flight#hexcasting:flight/range)隐士之飞行/$或$(l:patterns/spells/flight#hexcasting:flight/time)旅者之飞行/$的影响之下。", From 1e1998065fdd2e5d4c018b7c241e564c85601818 Mon Sep 17 00:00:00 2001 From: Robotgiggle <88736742+Robotgiggle@users.noreply.github.com> Date: Wed, 27 May 2026 01:19:57 -0400 Subject: [PATCH 3/6] Update changelog with all the recent PRs, simplify the changelog format (#1042) --- CHANGELOG.md | 151 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 89 insertions(+), 62 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 05c834cd67..6cd50c09c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,89 +8,116 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ### Added -- Added the `cannot_modify_cost` tag for patterns that should ignore the `media_consumption` attribute when calculating cost, by Robotgiggle in [987](https://github.com/FallingColors/HexMod/pull/987). +- Added the `cannot_modify_cost` tag for patterns that should ignore the `media_consumption` attribute when calculating cost ([#987](https://github.com/FallingColors/HexMod/pull/987)) @Robotgiggle +- Added a config toggle for the pattern wobble animation on active slates to improve performance ([#1017](https://github.com/FallingColors/HexMod/pull/1017)) @aloaloolaola +- Added keybinds to flip forward and backwards in a spellbook ([#1028](https://github.com/FallingColors/HexMod/pull/1028)) @pythonmcpi +- Added a config toggle to disable scrolling through spellbooks outside of the staff grid ([#1028](https://github.com/FallingColors/HexMod/pull/1028)) @pythonmcpi +- Added Harmony Reflection, which pushes the value of the golden ratio ([#900](https://github.com/FallingColors/HexMod/pull/900)) @miyucomics +- Added a config toggle (default false) for the effect that makes iota-holding items display their entire NBT data when Advanced Tooltips is enabled ([#1021](https://github.com/FallingColors/HexMod/pull/1021)) @Robotgiggle +- Added a pattern display overlay for pattern-holding items (ie scrolls or slates) while holding shift in the inventory ([#879](https://github.com/FallingColors/HexMod/pull/879)) @SamsTheNerd +- Added connected textures for Akashic Ligatures when using Continuity or Optifine ([#885](https://github.com/FallingColors/HexMod/pull/885)) @kineticneticat ### Changed -- Changed the `media_consumption` attribute to only apply to player-based casting, by Robotgiggle in [987](https://github.com/FallingColors/HexMod/pull/987). -- Changed Wayfarer's Flight and Anchorite's Flight to both cost 2 dust per unit and enforced a minimum cost for Anchorite's Flight, by Robotgiggle in [#1040](https://github.com/FallingColors/HexMod/pull/1040). +- Changed the `media_consumption` attribute to only apply to player-based casting ([#987](https://github.com/FallingColors/HexMod/pull/987)) @Robotgiggle +- Changed Wayfarer's Flight and Anchorite's Flight to both cost 2 dust per unit, and enforced a minimum cost for Anchorite's Flight ([#1040](https://github.com/FallingColors/HexMod/pull/1040)) @Robotgiggle +- Changed the pattern limit to also include execution of non-pattern iotas like jumps ([#1035](https://github.com/FallingColors/HexMod/pull/1035)) @pythonmcpi +- Updated the Flay Mind recipe display in EMI and JEI to cycle through all valid entities if the input is an entity tag ([#1023](https://github.com/FallingColors/HexMod/pull/1023)) @YukkuriC +- Re-implemented the ability to extract stored media from items in trinket/curio slots ([#996](https://github.com/FallingColors/HexMod/pull/996)) @YukkuriC +- Patterns involving entity look direction now compensate for the vanilla bug that causes projectiles and phantoms to report the wrong direction ([#1025](https://github.com/FallingColors/HexMod/pull/1025)) @Robotgiggle +- Updated Inline dependency from 1.0.1 to 1.2.2 ([#1043](https://github.com/FallingColors/HexMod/pull/1043)) @Robotgiggle +- Updated Fabric Language Kotlin dependency from 1.9.4 to 1.13.7 ([#1043](https://github.com/FallingColors/HexMod/pull/1043)) @Robotgiggle +- Updated Kotlin for Forge dependency from 4.3.0 to 4.12.0 ([#1043](https://github.com/FallingColors/HexMod/pull/1043)) @Robotgiggle +- Updated zh_cn translations ([#995](https://github.com/FallingColors/HexMod/pull/995), [#1037](https://github.com/FallingColors/HexMod/pull/1037), [#1045](https://github.com/FallingColors/HexMod/pull/1045)) @ChuijkYahus ### Fixed -- Fixed a crash loop when trying to generate a creative-mode ancient scroll for a Great Spell whose per-world pattern hasn't been calculated yet, by Robotgiggle in [992](https://github.com/FallingColors/HexMod/pull/992). +- Fixed a crash loop when trying to generate a creative-mode ancient scroll for a Great Spell whose per-world pattern hasn't been calculated yet ([#992](https://github.com/FallingColors/HexMod/pull/992)) @Robotgiggle +- Fixed Create Water and Create Lava causing the "position is forbidden to you" mishap when the position is actually just out of ambit ([#1029](https://github.com/FallingColors/HexMod/pull/1029)) @pythonmcpi +- Fixed a broken translation key on the error message from a Shepherd Directrix ([#1013](https://github.com/FallingColors/HexMod/pull/1013)) @Teal-Wolf-25-v2 +- Fixed the log spam caused by double pattern registration when joining a world ([#999](https://github.com/FallingColors/HexMod/pull/999)) @Real-Luxof +- Fixed various incorrect documentation in the Hex Book ([#1010](https://github.com/FallingColors/HexMod/pull/1010)) @Robotgiggle +- Fixed a broken translation key when trying to use Place Block with no placeable items in your hotbar ([#1010](https://github.com/FallingColors/HexMod/pull/1010)) @Robotgiggle +- Fixed a potential chunkban when leaving a looping spell circle running for long enough ([#908](https://github.com/FallingColors/HexMod/pull/908)) @Stick404 +- Fixed a potential issue on MacOS when calculating soulglimmer color ([#984](https://github.com/FallingColors/HexMod/pull/984)) @vgskye ### Internal -- The mod now uses Fabric Loom 1.9, Gradle 8.11, and Kotlin 2.0.20, by Robotgiggle in [#1043](https://github.com/FallingColors/HexMod/pull/1043). -- Updated Inline dependency from 1.0.1 to 1.2.2, by Robotgiggle in [#1043](https://github.com/FallingColors/HexMod/pull/1043). +- The mod now uses Fabric Loom 1.9, Gradle 8.11, and Kotlin 2.0.20 ([#1043](https://github.com/FallingColors/HexMod/pull/1043)) @Robotgiggle +- Changed the internal implementation of Thoth's Gambit to use a `TreeList` for more efficiency ([#1031](https://github.com/FallingColors/HexMod/pull/1031)) @s5bug +- Deprecated the version of `matchPattern` that takes a boolean argument since it always raises an exception ([#1002](https://github.com/FallingColors/HexMod/pull/1002)) @beholderface +- `Iota` subclasses can now specify whether the iota should be displayed with or without commas when in a list ([#988](https://github.com/FallingColors/HexMod/pull/988)) @TheRobbie73 +- Made the `getUsableStacks` and `getPrimaryStacks` methods in `CastingEnvironment` and its subclasses public ([#907](https://github.com/FallingColors/HexMod/pull/907)) @miyucomics +- Improved handling for duplicate pattern signatures in hexdoc ([#1007](https://github.com/FallingColors/HexMod/pull/1007)) @object-Object +- `CircleExecutionState` now stores the shape of the spell circle using two corners rather than an entire list of positions ([#908](https://github.com/FallingColors/HexMod/pull/908)) @Stick404 ## `0.11.3` - 2025-11-22 ### Added -- Added several new player attributes (ported from [Hexxy Attributes](https://modrinth.com/mod/hexxyattributes)), by beholderface in [#823](https://github.com/FallingColors/HexMod/pull/823). -- Added ancient cyphers, by Robotgiggle in [#838](https://github.com/FallingColors/HexMod/pull/838). -- Added the ability for wandering traders to sell ancient scrolls, by Robotgiggle in [#837](https://github.com/FallingColors/HexMod/pull/837). -- Added a creative tab for ancient scrolls, by Robotgiggle in [#837](https://github.com/FallingColors/HexMod/pull/837). -- Added a config option to disable Greater Teleport item splatting, by TheDrawingCoding-Gamer in [#841](https://github.com/FallingColors/HexMod/pull/841). -- Added loot tables to generate exactly one random scroll/cypher, by Robotgiggle in [#844](https://github.com/FallingColors/HexMod/pull/844). -- Added recipes for slate, amethyst, and quenched allay blocks, by KyanBirb in [#903](https://github.com/FallingColors/HexMod/pull/903). -- hexdoc: Added the ability to load patterns from a JSON file (instead of scraping them from source code with regex), by object-Object in [#911](https://github.com/FallingColors/HexMod/pull/911). -- Added a new Ancient Pigment and changed the appearance of the default pigment, by Robotgiggle in [#912](https://github.com/FallingColors/HexMod/pull/912). +- Added several new player attributes (ported from [Hexxy Attributes](https://modrinth.com/mod/hexxyattributes)) ([#823](https://github.com/FallingColors/HexMod/pull/823)) @beholderface +- Added ancient cyphers ([#838](https://github.com/FallingColors/HexMod/pull/838)) @Robotgiggle +- Added the ability for wandering traders to sell ancient scrolls ([#837](https://github.com/FallingColors/HexMod/pull/837)) @Robotgiggle +- Added a creative tab for ancient scrolls ([#837](https://github.com/FallingColors/HexMod/pull/837)) @Robotgiggle +- Added a config option to disable Greater Teleport item splatting ([#841](https://github.com/FallingColors/HexMod/pull/841)) @TheDrawingCoding-Gamer +- Added loot tables to generate exactly one random scroll/cypher ([#844](https://github.com/FallingColors/HexMod/pull/844)) @Robotgiggle +- Added recipes for slate, amethyst, and quenched allay blocks ([#903](https://github.com/FallingColors/HexMod/pull/903)) @KyanBirb +- hexdoc: Added the ability to load patterns from a JSON file (instead of scraping them from source code with regex) ([#911](https://github.com/FallingColors/HexMod/pull/911)) @object-Object +- Added a new Ancient Pigment and changed the appearance of the default pigment ([#912](https://github.com/FallingColors/HexMod/pull/912)) @Robotgiggle ### Changed -- Updated the spell circle documentation to clarify their new behavior in 0.11.x, by Robotgiggle in [#814](https://github.com/FallingColors/HexMod/pull/814). -- Added the recipes for bamboo and cherry staves to the notebook entry, by Robotgiggle in [#814](https://github.com/FallingColors/HexMod/pull/814). -- Renamed the eval limit mishap from "Delve Too Deep" to "Lost in Thought", and updated the description and error message to match, by Robotgiggle in [#814](https://github.com/FallingColors/HexMod/pull/814). -- Updated zh_cn translations, by ChuijkYahus in [#799](https://github.com/FallingColors/HexMod/pull/799), [#828](https://github.com/FallingColors/HexMod/pull/828), [#847](https://github.com/FallingColors/HexMod/pull/847), [#913](https://github.com/FallingColors/HexMod/pull/913), [#953](https://github.com/FallingColors/HexMod/pull/953), [#954](https://github.com/FallingColors/HexMod/pull/954), and [#971](https://github.com/FallingColors/HexMod/pull/971). -- Added apostrophes to Compass' Purification in the notebook, by kineticneticat in [#867](https://github.com/FallingColors/HexMod/pull/867). -- Updated the description of Ignite to clarify that it works on all entities, by Robotgiggle in [#844](https://github.com/FallingColors/HexMod/pull/844). -- Improved documentation of iota embedding, by Robotgiggle in [#862](https://github.com/FallingColors/HexMod/pull/862). -- Documented the behaviour of the Shepherd Directrix when no boolean is present on the stack, by Robotgiggle in [#862](https://github.com/FallingColors/HexMod/pull/862). -- Changed vectors in the notebook to use parentheses rather than square brackets, by Robotgiggle in [#862](https://github.com/FallingColors/HexMod/pull/862). -- Changed the rarity of several post-enlightenment items, by Robotgiggle in [#860](https://github.com/FallingColors/HexMod/pull/860). -- API: Changed the base class of `Mishap` from `Throwable` to `RuntimeException` to reduce the likelihood of server crashes, by navarchus in [#933](https://github.com/FallingColors/HexMod/pull/933). -- API: Added `@Throws` annotation to several `Action` methods to allow Java pattern implementations to throw mishaps, by navarchus in [#935](https://github.com/FallingColors/HexMod/pull/935). -- Improved the documentation for the media cube, by object-Object in [#843](https://github.com/FallingColors/HexMod/pull/843). -- Changed Greater Teleport to mishap when a passenger is immune to teleportation, by Robotgiggle in [#916](https://github.com/FallingColors/HexMod/pull/916). -- Re-added the slate limit for spell circles, by Stickia in [#909](https://github.com/FallingColors/HexMod/pull/909). -- Renamed Inverse Tangent Purification II to Inverse Tangent Distillation, by Robotgiggle in [#921](https://github.com/FallingColors/HexMod/pull/921). -- Massively improved ru_ru translations, by JustS-js and LedinecMing in [#832](https://github.com/FallingColors/HexMod/pull/832). -- Changed the invalid-pattern mishap to display the offending pattern, by Robotgiggle in [#951](https://github.com/FallingColors/HexMod/pull/951). -- Changed the invalid-iota mishap to display the type of the offending iota along with the iota itself, by Robotgiggle in [#951](https://github.com/FallingColors/HexMod/pull/951). -- Changed the disallowed-action mishap to properly display the offending action, by Robotgiggle in [#970](https://github.com/FallingColors/HexMod/pull/970). +- Updated the spell circle documentation to clarify their new behavior in 0.11.x ([#814](https://github.com/FallingColors/HexMod/pull/814)) @Robotgiggle +- Added the recipes for bamboo and cherry staves to the notebook entry ([#814](https://github.com/FallingColors/HexMod/pull/814)) @Robotgiggle +- Renamed the eval limit mishap from "Delve Too Deep" to "Lost in Thought", and updated the description and error message to match ([#814](https://github.com/FallingColors/HexMod/pull/814)) @Robotgiggle +- Updated zh_cn translations ([#799](https://github.com/FallingColors/HexMod/pull/799), [#828](https://github.com/FallingColors/HexMod/pull/828), [#847](https://github.com/FallingColors/HexMod/pull/847), [#913](https://github.com/FallingColors/HexMod/pull/913), [#953](https://github.com/FallingColors/HexMod/pull/953), [#954](https://github.com/FallingColors/HexMod/pull/954), [#971](https://github.com/FallingColors/HexMod/pull/971)) @ChuijkYahus +- Added apostrophes to Compass' Purification in the notebook ([#867](https://github.com/FallingColors/HexMod/pull/867)) @kineticneticat +- Updated the description of Ignite to clarify that it works on all entities ([#844](https://github.com/FallingColors/HexMod/pull/844)) @Robotgiggle +- Improved documentation of iota embedding ([#862](https://github.com/FallingColors/HexMod/pull/862)) @Robotgiggle +- Documented the behaviour of the Shepherd Directrix when no boolean is present on the stack ([#862](https://github.com/FallingColors/HexMod/pull/862)) @Robotgiggle +- Changed vectors in the notebook to use parentheses rather than square brackets ([#862](https://github.com/FallingColors/HexMod/pull/862)) @Robotgiggle +- Changed the rarity of several post-enlightenment items ([#860](https://github.com/FallingColors/HexMod/pull/860)) @Robotgiggle +- API: Changed the base class of `Mishap` from `Throwable` to `RuntimeException` to reduce the likelihood of server crashes ([#933](https://github.com/FallingColors/HexMod/pull/933)) @navarchus +- API: Added `@Throws` annotation to several `Action` methods to allow Java pattern implementations to throw mishaps ([#935](https://github.com/FallingColors/HexMod/pull/935)) @navarchus +- Improved the documentation for the media cube ([#843](https://github.com/FallingColors/HexMod/pull/843)) @object-Object +- Changed Greater Teleport to mishap when a passenger is immune to teleportation ([#916](https://github.com/FallingColors/HexMod/pull/916)) @Robotgiggle +- Re-added the slate limit for spell circles ([#909](https://github.com/FallingColors/HexMod/pull/909)) @Stickia +- Renamed Inverse Tangent Purification II to Inverse Tangent Distillation ([#921](https://github.com/FallingColors/HexMod/pull/921)) @Robotgiggle +- Massively improved ru_ru translations ([#832](https://github.com/FallingColors/HexMod/pull/832)) @JustS-js and LedinecMing +- Changed the invalid-pattern mishap to display the offending pattern ([#951](https://github.com/FallingColors/HexMod/pull/951)) @Robotgiggle +- Changed the invalid-iota mishap to display the type of the offending iota along with the iota itself ([#951](https://github.com/FallingColors/HexMod/pull/951)) @Robotgiggle +- Changed the disallowed-action mishap to properly display the offending action ([#970](https://github.com/FallingColors/HexMod/pull/970)) @Robotgiggle ### Fixed - Fixed missing dependency metadata on CurseForge/Modrinth. -- Fixed a freeze when rendering patterns in certain cases, by vgskye in [#800](https://github.com/FallingColors/HexMod/pull/800). -- Added a missing translation for `hexcasting.subtitles.casting.cast.fail`, by Robotgiggle in [#814](https://github.com/FallingColors/HexMod/pull/814). -- Fixed incorrect Amethyst Sconce block rotation, by Robotgiggle in [#814](https://github.com/FallingColors/HexMod/pull/814). -- Fixed Place Block not pulling items from the inventory when available, by garyantonyo in [#812](https://github.com/FallingColors/HexMod/pull/812). -- Fixed a broken link in A Primer On Vectors, by bearofbusiness in [#877](https://github.com/FallingColors/HexMod/pull/877). -- Fixed Impulse not increasing its cost for subsequent uses in one cast, by vgskye in [#853](https://github.com/FallingColors/HexMod/pull/853). -- Added a config option to enable commas between patterns in lists, by Robotgiggle in [#844](https://github.com/FallingColors/HexMod/pull/844). -- Fixed incorrect cost for Wayfarer's Flight, by Robotgiggle in [#844](https://github.com/FallingColors/HexMod/pull/844). -- Fixed a bug where some patterns would check for media requirements earlier than expected, by vgskye in [#855](https://github.com/FallingColors/HexMod/pull/855). -- Fixed some modded fake players being able to overcast infinitely for free, by vgskye in [#854](https://github.com/FallingColors/HexMod/pull/854). -- Fixed Negation Purification not working on numbers, by Robotgiggle in [#869](https://github.com/FallingColors/HexMod/pull/869). -- Added a missing translation for the `no_spell_circle` mishap, by Robotgiggle in [#862](https://github.com/FallingColors/HexMod/pull/862). -- Fixed allays sometimes becoming invulnerable when mindflayed, by navarchus in [#928](https://github.com/FallingColors/HexMod/pull/928). -- hexdoc: Improved the error message for missing patterns, by navarchus in [#931](https://github.com/FallingColors/HexMod/pull/931). -- Fixed incorrect rendering for rod variants of cyphers/trinkets/artifacts, by navarchus in [#936](https://github.com/FallingColors/HexMod/pull/936). -- Fixed several issues related to invalid/overlapping patterns, by object-Object in [#938](https://github.com/FallingColors/HexMod/pull/938). -- Fixed sticky teleportation (ie. teleporting passengers) not working (again), by Robotgiggle in [#916](https://github.com/FallingColors/HexMod/pull/916). -- Fixed Greater Teleport sometimes failing with a "moved wrongly" message, by Robotgiggle in [#916](https://github.com/FallingColors/HexMod/pull/916). -- Fixed incorrect face textures for the Empty and Shepherd Directrix, by Robotgiggle in [#921](https://github.com/FallingColors/HexMod/pull/921). -- Removed unnecessary error logs when activating a bound Cleric Impetus with its owner offline, by Robotgiggle in [#921](https://github.com/FallingColors/HexMod/pull/921). -- Fixed the Cleric Impetus becoming unbound when activated with its owner offline, by Robotgiggle in [#921](https://github.com/FallingColors/HexMod/pull/921). -- Fixed some directrices inadvertently accepting input from their output faces, by Robotgiggle in [#921](https://github.com/FallingColors/HexMod/pull/921). -- Added a missing translation for providing something other than an entity as the first input to Flay Mind, by Robotgiggle in [#921](https://github.com/FallingColors/HexMod/pull/921). -- Added several missing translations for config options, by Robotgiggle in [#921](https://github.com/FallingColors/HexMod/pull/921). -- Clarified the description of Division Distillation, by JustS-js in [#832](https://github.com/FallingColors/HexMod/pull/832). -- Fixed a bug where some patterns inconsistently checked the lower-north-west corner of blocks for ambit instead of the center, by YukkuriC in [#959](https://github.com/FallingColors/HexMod/pull/959). -- Fixed Erase Item cost not scaling with stack size, by PoolloverNathan in [#966](https://github.com/FallingColors/HexMod/pull/966). +- Fixed a freeze when rendering patterns in certain cases ([#800](https://github.com/FallingColors/HexMod/pull/800)) @vgskye +- Added a missing translation for `hexcasting.subtitles.casting.cast.fail` ([#814](https://github.com/FallingColors/HexMod/pull/814)) @Robotgiggle +- Fixed incorrect Amethyst Sconce block rotation ([#814](https://github.com/FallingColors/HexMod/pull/814)) @Robotgiggle +- Fixed Place Block not pulling items from the inventory when available ([#812](https://github.com/FallingColors/HexMod/pull/812)) @garyantonyo +- Fixed a broken link in A Primer On Vectors ([#877](https://github.com/FallingColors/HexMod/pull/877)) @bearofbusiness +- Fixed Impulse not increasing its cost for subsequent uses in one cast ([#853](https://github.com/FallingColors/HexMod/pull/853)) @vgskye +- Added a config option to enable commas between patterns in lists ([#844](https://github.com/FallingColors/HexMod/pull/844)) @Robotgiggle +- Fixed incorrect cost for Wayfarer's Flight ([#844](https://github.com/FallingColors/HexMod/pull/844)) @Robotgiggle +- Fixed a bug where some patterns would check for media requirements earlier than expected ([#855](https://github.com/FallingColors/HexMod/pull/855)) @vgskye +- Fixed some modded fake players being able to overcast infinitely for free ([#854](https://github.com/FallingColors/HexMod/pull/854)) @vgskye +- Fixed Negation Purification not working on numbers ([#869](https://github.com/FallingColors/HexMod/pull/869)) @Robotgiggle +- Added a missing translation for the `no_spell_circle` mishap ([#862](https://github.com/FallingColors/HexMod/pull/862)) @Robotgiggle +- Fixed allays sometimes becoming invulnerable when mindflayed ([#928](https://github.com/FallingColors/HexMod/pull/928)) @navarchus +- hexdoc: Improved the error message for missing patterns ([#931](https://github.com/FallingColors/HexMod/pull/931)) @navarchus +- Fixed incorrect rendering for rod variants of cyphers/trinkets/artifacts ([#936](https://github.com/FallingColors/HexMod/pull/936)) @navarchus +- Fixed several issues related to invalid/overlapping patterns ([#938](https://github.com/FallingColors/HexMod/pull/938)) @object-Object +- Fixed sticky teleportation (ie. teleporting passengers) not working (again) ([#916](https://github.com/FallingColors/HexMod/pull/916)) @Robotgiggle +- Fixed Greater Teleport sometimes failing with a "moved wrongly" message ([#916](https://github.com/FallingColors/HexMod/pull/916)) @Robotgiggle +- Fixed incorrect face textures for the Empty and Shepherd Directrix ([#921](https://github.com/FallingColors/HexMod/pull/921)) @Robotgiggle +- Removed unnecessary error logs when activating a bound Cleric Impetus with its owner offline ([#921](https://github.com/FallingColors/HexMod/pull/921)) @Robotgiggle +- Fixed the Cleric Impetus becoming unbound when activated with its owner offline ([#921](https://github.com/FallingColors/HexMod/pull/921)) @Robotgiggle +- Fixed some directrices inadvertently accepting input from their output faces ([#921](https://github.com/FallingColors/HexMod/pull/921)) @Robotgiggle +- Added a missing translation for providing something other than an entity as the first input to Flay Mind ([#921](https://github.com/FallingColors/HexMod/pull/921)) @Robotgiggle +- Added several missing translations for config options ([#921](https://github.com/FallingColors/HexMod/pull/921)) @Robotgiggle +- Clarified the description of Division Distillation ([#832](https://github.com/FallingColors/HexMod/pull/832)) @JustS-js +- Fixed a bug where some patterns inconsistently checked the lower-north-west corner of blocks for ambit instead of the center ([#959](https://github.com/FallingColors/HexMod/pull/959)) @YukkuriC +- Fixed Erase Item cost not scaling with stack size ([#966](https://github.com/FallingColors/HexMod/pull/966)) @PoolloverNathan ## Previous versions From 914075ed49eca990801a9c5cbdeba783e4449f63 Mon Sep 17 00:00:00 2001 From: "[object Object]" Date: Wed, 27 May 2026 08:07:37 -0600 Subject: [PATCH 4/6] Update bug report template to add NeoForge and improve placeholders (#1054) Updates the template for https://github.com/FallingColors/HexMod/issues/new?template=bug_report.yml to add a dropdown option for NeoForge (in preparation for 1.21) and update the placeholder versions to match the latest release. --- .github/ISSUE_TEMPLATE/bug_report.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 0a438461c6..13b520c691 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -10,6 +10,7 @@ body: label: Modloader options: - Forge + - NeoForge - Fabric - Quilt validations: @@ -18,14 +19,14 @@ body: - type: input attributes: label: Minecraft version - placeholder: eg. 1.19.2 + placeholder: eg. 1.20.1 validations: required: true - type: input attributes: label: Hex Casting version - placeholder: eg. 0.11.1-7-pre-609 + placeholder: eg. 0.11.3 validations: required: true From d5bbb696ac79cbbe9e3b36414eb42e6f4085fbe0 Mon Sep 17 00:00:00 2001 From: Robotgiggle <88736742+Robotgiggle@users.noreply.github.com> Date: Sat, 30 May 2026 00:04:43 -0400 Subject: [PATCH 5/6] Fix thoth accumulator (#1086) Fixes #1085. Now that the thoth accumulator is immutable and operations that previously updated it return a new instance instead, we need to actually return that new instance at the end of the thoth instead of returning the old unmodified one. Also, the comment on line 59 was describing the wrong case, so I fixed it. --- .../at/petrak/hexcasting/api/casting/eval/vm/FrameForEach.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameForEach.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameForEach.kt index 872bbe8e14..f9c0f05f00 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameForEach.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameForEach.kt @@ -56,7 +56,7 @@ data class FrameForEach( level: ServerLevel, harness: CastingVM ): CastResult { - // If this isn't the very first Thoth step (i.e. no Thoth computations run yet)... + // If this is the very first Thoth step (i.e. no Thoth computations run yet)... val (stack, newAcc) = if (baseStack == null) { // init stack to the harness stack... harness.image.stack.toList() to immutableAcc @@ -76,7 +76,7 @@ data class FrameForEach( Triple(data.car, harness.image.withUsedOp(), cont2) } else { // Else, dump our final list onto the stack. - Triple(ListIota(immutableAcc), harness.image, continuation) + Triple(ListIota(newAcc), harness.image, continuation) } val tStack = stack.toMutableList() tStack.add(stackTop) From d0f7b28ba9722688d13a1e7a6cbc7b942bd6a5df Mon Sep 17 00:00:00 2001 From: Robotgiggle <88736742+Robotgiggle@users.noreply.github.com> Date: Fri, 5 Jun 2026 18:15:51 -0400 Subject: [PATCH 6/6] Check for null pattern when generating loot scrolls (#1079) Implements the same null-check used on creative scrolls for loot scroll generation, along with logging an error. Should fix #944, though I'm not sure what was causing that crash to happen on chunkload rather than on loot generation. image --- CHANGELOG.md | 1 + .../common/loot/AddPerWorldPatternToScrollFunc.java | 10 +++++++++- .../assets/hexcasting/lang/en_us.flatten.json5 | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6cd50c09c1..c3aa3df744 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ### Fixed - Fixed a crash loop when trying to generate a creative-mode ancient scroll for a Great Spell whose per-world pattern hasn't been calculated yet ([#992](https://github.com/FallingColors/HexMod/pull/992)) @Robotgiggle +- Fixed a crash when trying to generate a loot scroll for a Great Spell whose per-world pattern hasn't been calculated yet ([#1079](https://github.com/FallingColors/HexMod/pull/1079)) @Robotgiggle - Fixed Create Water and Create Lava causing the "position is forbidden to you" mishap when the position is actually just out of ambit ([#1029](https://github.com/FallingColors/HexMod/pull/1029)) @pythonmcpi - Fixed a broken translation key on the error message from a Shepherd Directrix ([#1013](https://github.com/FallingColors/HexMod/pull/1013)) @Teal-Wolf-25-v2 - Fixed the log spam caused by double pattern registration when joining a world ([#999](https://github.com/FallingColors/HexMod/pull/999)) @Real-Luxof diff --git a/Common/src/main/java/at/petrak/hexcasting/common/loot/AddPerWorldPatternToScrollFunc.java b/Common/src/main/java/at/petrak/hexcasting/common/loot/AddPerWorldPatternToScrollFunc.java index 0d45634db4..ade3941732 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/loot/AddPerWorldPatternToScrollFunc.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/loot/AddPerWorldPatternToScrollFunc.java @@ -1,5 +1,6 @@ package at.petrak.hexcasting.common.loot; +import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.api.casting.ActionRegistryEntry; import at.petrak.hexcasting.api.mod.HexTags; import at.petrak.hexcasting.api.utils.HexUtils; @@ -48,8 +49,15 @@ public static ItemStack doStatic(ItemStack stack, RandomSource rand, ServerLevel } } var patternKey = perWorldKeys.get(rand.nextInt(perWorldKeys.size())); + var patternID = patternKey.location().toString(); var pat = PatternRegistryManifest.getCanonicalStrokesPerWorld(patternKey, overworld); - NBTHelper.putString(stack, ItemScroll.TAG_OP_ID, patternKey.location().toString()); + if (pat == null) { + HexAPI.LOGGER.error("No per-world pattern found for action " + patternID + " while generating loot scroll! " + + "Try running '/hexcasting recalcPatterns' to generate the patterns for this world."); + NBTHelper.putString(stack, ItemScroll.TAG_RECALC_WARNING, patternID); + return stack; + } + NBTHelper.putString(stack, ItemScroll.TAG_OP_ID, patternID); NBTHelper.put(stack, ItemScroll.TAG_PATTERN, pat.serializeToNBT()); return stack; } diff --git a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 index dd39d0e0c5..44127f9e01 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 @@ -603,7 +603,7 @@ needs_purchase: "Purchase to show pattern", pattern_not_loaded: "Place in inventory to load pattern", "recalc_warning.line1": "The per-world pattern for %s has not been calculated yet!", - "recalc_warning.line2": "Please run /hexcasting recalcPatterns, then grab a new scroll.", + "recalc_warning.line2": "Please run /hexcasting recalcPatterns, then get a new scroll.", }, abacus: {