Skip to content

Main to next - #1334

Merged
Robotgiggle merged 42 commits into
FallingColors:1.21from
s5bug:main-to-next
Oct 31, 2026
Merged

Robotgiggle merged 42 commits into
FallingColors:1.21from
s5bug:main-to-next

Conversation

hexxy-weblate and others added 30 commits August 29, 2026 02:58
chore(l10n): update Norwegian Bokmål translation

Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Co-authored-by: Hidden <shyrasan123@users.noreply.weblate.hexxy.media>
Language: Norwegian Bokmål
Progress: 15.8% (219 of 1386 strings)
Progress: 8.5% (118 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/nb_NO/
Translation: Hex Casting/Common
Co-authored-by: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com>
Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Language: Chinese (Simplified Han script)
Progress: 100.0% (1386 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/zh_Hans/
Translation: Hex Casting/Common
chore(l10n): update Korean translation

chore(l10n): update Korean translation

Add-on: Remove blank strings
Co-authored-by: Anonymous <noreply@weblate.org>
Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Language: Korean
Progress: 100.0% (23 of 23 strings)
Progress: 96.5% (1338 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/ko/
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-hexdoc/ko/
Translation: Hex Casting/Common
Translation: Hex Casting/hexdoc
chore(l10n): update translation files

chore(l10n): update Polish translation

chore(l10n): update Polish translation

chore(l10n): update Polish translation

Add-on: Remove blank strings
Co-authored-by: Anonymous <noreply@weblate.org>
Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Co-authored-by: ManicTv <zmorra7@gmail.com>
Language: Polish
Progress: 43.4% (10 of 23 strings)
Progress: 63.6% (882 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/pl/
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-hexdoc/
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-hexdoc/pl/
Translation: Hex Casting/Common
Translation: Hex Casting/hexdoc
chore(l10n): update French translation

Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Co-authored-by: Lithyaku <anthonyhurez@yahoo.fr>
Co-authored-by: drawn badden <wotegi3651@ittiv.com>
Language: French
Progress: 100.0% (1386 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/fr/
Translation: Hex Casting/Common
chore(l10n): update translation files

chore(l10n): update English (Pirate) translation

chore(l10n): update English (Pirate) translation

chore(l10n): update English (Pirate) translation

chore(l10n): update English (Pirate) translation

chore(l10n): update English (Pirate) translation

Add-on: Remove blank strings
Co-authored-by: Anonymous <noreply@weblate.org>
Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Co-authored-by: [object Object] <object@objectobject.ca>
Co-authored-by: frostedlyre <frostospersonal@gmail.com>
Co-authored-by: penguinencounter <mileshlin@gmail.com>
Language: English (Pirate)
Progress: 4.3% (1 of 23 strings)
Progress: 8.8% (123 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/en@pirate/
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-hexdoc/
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-hexdoc/en@pirate/
Translation: Hex Casting/Common
Translation: Hex Casting/hexdoc
Translations updated in [Hexxy Weblate](https://weblate.hexxy.media) for
[Hex
Casting/Common](https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/).


Included components:

* [Hex
Casting/hexdoc](https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-hexdoc/)



Translation status:

![Weblate translation
status](https://weblate.hexxy.media/widget/hexcasting/1-20/1-20-common/matrix-auto.svg)

> [!WARNING]
> Do not merge this pull request via the merge queue! Instead, select
"Merge without waiting for requirements to be met", then "Create a merge
commit", then "Bypass rules and merge". Make sure to use a regular merge
commit, not a squash commit.

---------

Co-authored-by: Hidden <shyrasan123@users.noreply.weblate.hexxy.media>
Co-authored-by: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com>
Co-authored-by: Anonymous <noreply@weblate.org>
Co-authored-by: ManicTv <zmorra7@gmail.com>
Co-authored-by: Lithyaku <anthonyhurez@yahoo.fr>
Co-authored-by: drawn badden <wotegi3651@ittiv.com>
Co-authored-by: [object Object] <object@objectobject.ca>
Co-authored-by: frostedlyre <frostospersonal@gmail.com>
Co-authored-by: penguinencounter <mileshlin@gmail.com>
chore(l10n): update Norwegian Bokmål translation

chore(l10n): update Norwegian Bokmål translation

Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Co-authored-by: Hidden <shyrasan123@users.noreply.weblate.hexxy.media>
Language: Norwegian Bokmål
Progress: 16.2% (225 of 1386 strings)
Progress: 16.8% (233 of 1386 strings)
Progress: 17.0% (236 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/nb_NO/
Translation: Hex Casting/Common
Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Co-authored-by: V. Ntro <251832526+ViktoriaNtro@users.noreply.github.com>
Language: Japanese
Progress: 100.0% (1386 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/ja/
Translation: Hex Casting/Common
Co-authored-by: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com>
Language: Chinese (Simplified Han script)
Progress: 100.0% (1386 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/zh_Hans/
Translation: Hex Casting/Common
Co-authored-by: Hauveli <136408450+hauveli@users.noreply.github.com>
Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Language: Finnish
Progress: 3.8% (53 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/fi/
Translation: Hex Casting/Common
chore(l10n): update French translation

chore(l10n): update French translation

chore(l10n): update French translation

chore(l10n): update French translation

Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Co-authored-by: Jovan K <jovankirkendall@gmail.com>
Co-authored-by: Lithyaku <anthonyhurez@yahoo.fr>
Language: French
Progress: 100.0% (1386 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/fr/
Translation: Hex Casting/Common
Co-authored-by: Fire Storm <d9ikpjew6@mozmail.com>
Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Language: English (Pirate)
Progress: 8.9% (124 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/en@pirate/
Translation: Hex Casting/Common
chore(l10n): update Swedish translation

chore(l10n): update Swedish translation

chore(l10n): update Swedish translation

chore(l10n): update Swedish translation

chore(l10n): update Swedish translation

chore(l10n): update Swedish translation

Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Co-authored-by: Lux <telumiel@skyenet.app>
Language: Swedish
Progress: 100.0% (23 of 23 strings)
Progress: 11.6% (161 of 1386 strings)
Progress: 15.5% (215 of 1386 strings)
Progress: 2.5% (36 of 1386 strings)
Progress: 4.1% (58 of 1386 strings)
Progress: 4.3% (1 of 23 strings)
Progress: 5.1% (71 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/sv/
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-hexdoc/sv/
Translation: Hex Casting/Common
Translation: Hex Casting/hexdoc
chore(l10n): update Spanish translation

Co-authored-by: Chichi16 <christperez1216@gmail.com>
Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Co-authored-by: KOCTEP <koster@users.noreply.weblate.hexxy.media>
Language: Spanish
Progress: 57.7% (801 of 1386 strings)
Progress: 57.8% (802 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/es/
Translation: Hex Casting/Common
chore(l10n): update Polish translation

chore(l10n): update Polish translation

chore(l10n): update Polish translation

chore(l10n): update Polish translation

chore(l10n): update Polish translation

chore(l10n): update Polish translation

chore(l10n): update Polish translation

chore(l10n): update Polish translation

chore(l10n): update Polish translation

chore(l10n): update translation files

chore(l10n): update Polish translation

chore(l10n): update Polish translation

Add-on: Remove blank strings
Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Co-authored-by: ManicTv <zmorra7@gmail.com>
Co-authored-by: Stanisław Budny <sbudny2008@gmail.com>
Language: Polish
Progress: 63.9% (886 of 1386 strings)
Progress: 63.9% (887 of 1386 strings)
Progress: 64.3% (892 of 1386 strings)
Progress: 64.5% (895 of 1386 strings)
Progress: 64.8% (899 of 1386 strings)
Progress: 64.9% (900 of 1386 strings)
Progress: 65.5% (909 of 1386 strings)
Progress: 66.5% (922 of 1386 strings)
Progress: 66.5% (923 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/pl/
Translation: Hex Casting/Common
chore(l10n): update Russian translation

chore(l10n): update Russian translation

chore(l10n): update Russian translation

chore(l10n): update Russian translation

Co-authored-by: Angens Nofori <angensnofori@gmail.com>
Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Co-authored-by: KOCTEP <koster@users.noreply.weblate.hexxy.media>
Co-authored-by: Koli / Shiromi's mind <komeijikoli@gmail.com>
Language: Russian
Progress: 99.9% (1385 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/ru/
Translation: Hex Casting/Common
Translations updated in [Hexxy Weblate](https://weblate.hexxy.media) for
[Hex
Casting/Common](https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/).


Included components:

* [Hex
Casting/hexdoc](https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-hexdoc/)



Translation status:

![Weblate translation
status](https://weblate.hexxy.media/widget/hexcasting/1-20/1-20-common/matrix-auto.svg)

> [!WARNING]
> Do not merge this pull request via the merge queue! Instead, select
"Merge without waiting for requirements to be met", then "Create a merge
commit", then "Bypass rules and merge". Make sure to use a regular merge
commit, not a squash commit.

---------

Co-authored-by: Hidden <shyrasan123@users.noreply.weblate.hexxy.media>
Co-authored-by: V. Ntro <251832526+ViktoriaNtro@users.noreply.github.com>
Co-authored-by: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com>
Co-authored-by: Hauveli <136408450+hauveli@users.noreply.github.com>
Co-authored-by: Jovan K <jovankirkendall@gmail.com>
Co-authored-by: Lithyaku <anthonyhurez@yahoo.fr>
Co-authored-by: Fire Storm <d9ikpjew6@mozmail.com>
Co-authored-by: Lux <telumiel@skyenet.app>
Co-authored-by: Chichi16 <christperez1216@gmail.com>
Co-authored-by: KOCTEP <koster@users.noreply.weblate.hexxy.media>
Co-authored-by: ManicTv <zmorra7@gmail.com>
Co-authored-by: Stanisław Budny <sbudny2008@gmail.com>
Co-authored-by: Angens Nofori <angensnofori@gmail.com>
Co-authored-by: Koli / Shiromi's mind <komeijikoli@gmail.com>
Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Co-authored-by: Hidden <shyrasan123@users.noreply.weblate.hexxy.media>
Language: Norwegian Bokmål
Progress: 30.2% (419 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/nb_NO/
Translation: Hex Casting/Common
Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Co-authored-by: MegaBee <megabeegaming@gmail.com>
Language: Spanish
Progress: 57.8% (802 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/es/
Translation: Hex Casting/Common
Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Co-authored-by: ManicTv <zmorra7@gmail.com>
Language: Polish
Progress: 66.6% (924 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/pl/
Translation: Hex Casting/Common
chore(l10n): update Russian translation

chore(l10n): update Russian translation

chore(l10n): update Russian translation

chore(l10n): update Russian translation

Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Co-authored-by: KOCTEP <koster@users.noreply.weblate.hexxy.media>
Co-authored-by: Koli / Shiromi's mind <komeijikoli@gmail.com>
Co-authored-by: Theo <git@theo.is-a.dev>
Co-authored-by: _Moss_45 <famfiona@yandex.ru>
Language: Russian
Progress: 100.0% (1386 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/ru/
Translation: Hex Casting/Common
Translations updated in [Hexxy Weblate](https://weblate.hexxy.media) for
[Hex
Casting/Common](https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/).


Included components:

* [Hex
Casting/hexdoc](https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-hexdoc/)



Translation status:

![Weblate translation
status](https://weblate.hexxy.media/widget/hexcasting/1-20/1-20-common/matrix-auto.svg)

> [!WARNING]
> Do not merge this pull request via the merge queue! Instead, select
"Merge without waiting for requirements to be met", then "Create a merge
commit", then "Bypass rules and merge". Make sure to use a regular merge
commit, not a squash commit.

---------

Co-authored-by: Hidden <shyrasan123@users.noreply.weblate.hexxy.media>
Co-authored-by: MegaBee <megabeegaming@gmail.com>
Co-authored-by: ManicTv <zmorra7@gmail.com>
Co-authored-by: KOCTEP <koster@users.noreply.weblate.hexxy.media>
Co-authored-by: Koli / Shiromi's mind <komeijikoli@gmail.com>
Co-authored-by: Theo <git@theo.is-a.dev>
Co-authored-by: _Moss_45 <famfiona@yandex.ru>
Impulse caps the velocity applied to an entity from a single cast at
8192 blocks per tick. Currently, it does not take this limit into
account when determining spell cost (a 10,000-magnitude impulse attempt
will still consume 100,000,000 dust, despite only applying 8192 b/t of
motion). This PR fixes that.
This PR fixes a bug where teleportation spells (such as blink or great
teleport) reset the player's velocity.

This is caused by mc resetting the velocity on client-side when handling
the packet. The exact code that handles teleportation on the client
resets velocity if there's no appropriate relative movement flags
(`RelativeMovement.X`, `RelativeMovement.Y` and `RelativeMovement.Z`).

The fix just adds all the relative movement flags to teleportation. :P

---------

Co-authored-by: Robotgiggle <purplemrb12@gmail.com>
Oddly, while the pages in the book show the media cost for flay mind
recipes, the cost is not shown in EMI.

<img width="551" height="1444" alt="image"
src="https://github.com/user-attachments/assets/9573e15e-2d68-4cee-9c2d-524b5af7039d"
/>

The cost will cycle between being shown in dust, shards, or charged,
just like the book.
If the amount of media cannot be expressed as an exact multiple of dust,
then it'll fallback to a phial instead.

<img width="573" height="300" alt="image"
src="https://github.com/user-attachments/assets/a394d239-5dae-4bb1-b822-898fc5cf42d3"
/>

(Quick test where I temporarily change the cost of quenching to a
non-integer amount of dust.)

---------

Co-authored-by: Robotgiggle <88736742+Robotgiggle@users.noreply.github.com>
…allingColors#1308)

This PR adds a new `toLongNonzero()` method to convert a Double to a
Long while ensuring the output is at minimum 1. This is used to prevent
spells with costs based on player input (Impulse, Blink,
Explode/Fireball, Anchorite/Wayfarer, and the Zeniths/Nadirs) from being
made free by providing an input value so small it gets rounded to zero
when converted to a Long.

This also makes those spells have a nonzero cost even when the input
value actually _is_ zero, since there is still a world interaction in
that case and thus the spell should not be infinitely spammable for
free.

Also, entirely unrelated to the cost clamping, this PR fixes FallingColors#941 - I
was changing stuff in OpPotion anyway, so I figured I'd toss in a fix
here rather than making a separate PR for a single-character change.
A slightly more robust solution to the problem described in FallingColors#1328,
namely that the shift-scrolling mechanics currently do not work on
anything other than spellbooks even if the item in question provides all
the right NBT (or even if it directly extends ItemSpellbook).

FallingColors#1328 resolved the problem by adding a new item tag - here, I've simply
changed the code that previously checked "is this item a spellbook" to
instead check "does this item have the `page_idx` and `page_names` NBT
tags". This means you can simply apply those NBT tags to any item to
allow shift-scrolling it.

This is also in line with the general idea of 1.21's item components,
where simply attaching the component to an item is enough to apply the
relevant functionality to that item, without having to manually
implement it.

<img width="460" height="200" alt="2026-10-11_15 48 50"
src="https://github.com/user-attachments/assets/fecec52e-2677-436b-84ad-37d1f4495d42"
/>

@Robotgiggle Robotgiggle left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Functionality is mostly good, but can this wait until #1331 gets merged and then include that? (if the author doesn't get back to me about the sentinel thing by tomorrow or so, I'm just gonna test ingame to make sure nothing breaks and then merge it)

Also, see the tweaks below for the shift-scrolling feature.

@github-project-automation github-project-automation Bot moved this from 📋 Backlog to 🏗 In progress in Hex Casting Oct 16, 2026
@Robotgiggle

Robotgiggle commented Oct 16, 2026 •

Copy link
Copy Markdown
Member

Also, this is definitely the sort of thing that should have its own PR, but (in the same vein as the shift scrolling changes) what do you think about changing IXplatAbstractions.INSTANCE.findDataHolder such that any stack with the IOTA_HOLDER_IOTA or SPELLBOOK_PAGES + SELECTED_SPELLBOOK_PAGE components works as a read-only iota holder even if it doesn't actually implement the interface or provide its own read/write methods?

Robotgiggle and others added 6 commits October 16, 2026 06:03
…ingColors#1319)

Changes the `modrinthDependencies` section of each platform's
`build.gradle` to specify versions based on the values in
`gradle.properties` rather than hardcoding them. Notably, this fixes a
mismatch between the version of Patchouli the mod actually depends on
and the version specified as a dependency for Modrinth, which should
resolve FallingColors#1318.
Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Co-authored-by: Hidden <shyrasan123@users.noreply.weblate.hexxy.media>
Language: Norwegian Bokmål
Progress: 30.2% (419 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/nb_NO/
Translation: Hex Casting/Common
chore(l10n): update Polish translation

chore(l10n): update Polish translation

chore(l10n): update Polish translation

Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Co-authored-by: ManicTv <zmorra7@gmail.com>
Co-authored-by: Stanisław Budny <sbudny2008@gmail.com>
Co-authored-by: Stefan <hexxy@stef.gay>
Language: Polish
Progress: 66.9% (928 of 1386 strings)
Progress: 68.3% (947 of 1386 strings)
Progress: 68.5% (950 of 1386 strings)
Progress: 68.7% (953 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/pl/
Translation: Hex Casting/Common
chore(l10n): update Russian translation

chore(l10n): update Russian translation

chore(l10n): update Russian translation

chore(l10n): update Russian translation

chore(l10n): update Russian translation

chore(l10n): update Russian translation

chore(l10n): update Russian translation

Co-authored-by: Hexxy Weblate <weblate@hexxy.media>
Co-authored-by: KOCTEP <koster@users.noreply.weblate.hexxy.media>
Language: Russian
Progress: 100.0% (1386 of 1386 strings)
Translate-URL: https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/ru/
Translation: Hex Casting/Common
Translations updated in [Hexxy Weblate](https://weblate.hexxy.media) for
[Hex
Casting/Common](https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-common/).


Included components:

* [Hex
Casting/hexdoc](https://weblate.hexxy.media/projects/hexcasting/1-20/1-20-hexdoc/)



Translation status:

![Weblate translation
status](https://weblate.hexxy.media/widget/hexcasting/1-20/1-20-common/matrix-auto.svg)

> [!WARNING]
> Do not merge this pull request via the merge queue! Instead, select
"Merge without waiting for requirements to be met", then "Create a merge
commit", then "Bypass rules and merge". Make sure to use a regular merge
commit, not a squash commit.

---------

Co-authored-by: Hidden <shyrasan123@users.noreply.weblate.hexxy.media>
Co-authored-by: ManicTv <zmorra7@gmail.com>
Co-authored-by: Stanisław Budny <sbudny2008@gmail.com>
Co-authored-by: Stefan <hexxy@stef.gay>
Co-authored-by: KOCTEP <koster@users.noreply.weblate.hexxy.media>
…allingColors#1335)

When `ScrungledPatternsSave.load()` reads the world data, it creates and
stores a `ResourceKey` for each action specified in the file. However,
it doesn't currently check whether those actions actually exist in the
registry.

If a world is created with some addon that provides a Great Spell, and
then that addon is later removed, the entry for the Great Spell in
question will remain in the world data. If someone then tries to cast
that spell, `PatternShapeMatch.matchPattern()` will successfully obtain
the `ResourceKey` since `ScrungledPatternsSave` has parsed it from the
world data, causing `PatternIota.lookupAndOperate()` to throw a
null-pointer exception when it tries to actually _use_ that key to look
up an action.

This PR fixes the issue by adding a check in
`ScrungledPatternsSave.load()` to ensure that the actions being loaded
actually exist. Actions that don't exist will be skipped, and will
eventually be removed from the world data once the new
`ScrungledPatternsSave` gets saved.
@Robotgiggle

Copy link
Copy Markdown
Member

#1306, #1319 and #1335 have just gone in, so those should probably get included here too.

@s5bug

s5bug commented Oct 16, 2026

Copy link
Copy Markdown
Contributor Author

Will do tmw :D

R0b0Li0n and others added 4 commits October 16, 2026 17:58
…olors#1331)

Closes FallingColors#1122

---------

Co-authored-by: Robotgiggle <88736742+Robotgiggle@users.noreply.github.com>
Adds a document describing what is and is not permitted when PRing
changes to the repo, particularly with regard to AI-generated work
<img width="1256" height="104" alt="image"
src="https://github.com/user-attachments/assets/d906170f-783c-4f1a-9f30-867e09db3ee5"
/>
<img width="1242" height="148" alt="image"
src="https://github.com/user-attachments/assets/d33cc20d-3cec-4ff5-95ae-a04bc6f86d22"
/>

Fixes `hexcasting.iota.hexcasting:continuation` language key

---------

Co-authored-by: Robotgiggle <88736742+Robotgiggle@users.noreply.github.com>
Fixes FallingColors#1351. Also changes Thoth to automatically generate the output
list and return it (without actually iterating) if the pattern list is
empty, for efficiency purposes.
@s5bug

s5bug commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor Author

Now includes #1319, #1335, #1331, #1349, #1350, #1352, and changes have been addressed

@s5bug
s5bug requested a review from Robotgiggle October 30, 2026 03:51

@Robotgiggle Robotgiggle left a comment •

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#1319 updated the patchouli dependency to version 85, and the relevant changes to fabric.mod.json and the top-level gradle.properties don't seem to have made it in here.

Also, the change from #1319 to use variables in the modrinthDependencies section has not made it into the NeoForge build.gradle.

Finally, the change to Thoth's Gambit from #1352 that makes it skip iteration entirely if the pattern list is empty has not made it in here, which is somewhat understandable since thoth is completely different in 1.21. I've made and tested a 1.21-compatible version of the additional code for thoth, so you should just be able to stick the following chunk of code in between lines 50 and 52 of SpecialHandlerForEach.kt to replicate the change from #1352.

// if the pattern list is empty, directly return the modified data list to avoid VM overhead
// note that we still need to include a copy of the context stack before each datum
if (instrList.isEmpty()) {
    val outList = mutableListOf<Iota>()
    for (datum in datums) {
        outList.addAll(contextStack.appended(datum))
    }
    val image2 = image.withUsedOp().copy(stack = stashedStack.appended(ListIota(outList)))
    return OperationResult(image2, listOf(), continuation, HexEvalSounds.THOTH.get())
}

@s5bug

s5bug commented Oct 30, 2026

Copy link
Copy Markdown
Contributor Author
  1. ver 85 isn't available for 1.21 so I've moved all the numbers to 88
  2. fixed
  3. fixed

@s5bug
s5bug requested a review from Robotgiggle October 30, 2026 05:05

@Robotgiggle Robotgiggle left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As mentioned in discord, changing the Modrinth version numbers without changing the URLs has broken the automatic tests.

Also, when I said to include the update-to-version-85 changes, I didn't realize that the 1.21 branch was already using a much higher Patchouli version. It should be fine to keep it at 93 - just make sure everything actually agrees on the same version and uses the gradle variable when possible.

@Robotgiggle Robotgiggle left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All looks good now!

@Robotgiggle
Robotgiggle merged commit 3047809 into FallingColors:1.21 Oct 31, 2026
7 checks passed
@github-project-automation github-project-automation Bot moved this from 🏗 In progress to ✅ Done in Hex Casting Oct 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

1.21 do not squash This PR must not be squash-merged

Projects

Status: ✅ Done

Development

Successfully merging this pull request may close these issues.

9 participants