VazkiiMods / Botania

A tech mod for Minecraft themed around the magic of nature and plant life.
http://botaniamod.net/index.html
Other
1.25k stars 497 forks source link

Loki ring can "NBT ban" a player due to unlimited offset list size #4681

Closed TheRealWormbo closed 2 weeks ago

TheRealWormbo commented 3 weeks ago

Mod Loader

Both Fabric and Forge (I confirm that I have tested both loaders and will specify both loader versions below)

Minecraft Version

1.20.1

Botania version

444

Modloader version

(any)

Modpack info

No response

The latest.log file

(n/a)

Issue description

From Discord:

hey guys, is the loki ring, in botania, have a maximum selection bloc ? i got this error while i was setting up my ring Connection Lost message

Apparently that person attempted to select 31 16x16 block layers, i.e. nearly 8000 individual blocks, at the same time.

Steps to reproduce

No response

Other information

The Loki ring uses a relatively inefficient way to store its coordinates: Each block position and offset is represented by a set of three integer tags, and the offsets are additionally wrapped in a compound tag with an index as the suffix of its name.

I propose two optimizations: Block positions/offsets should be stored as the BlockPos long value representation, and the offsets should use a LongList tag. Additionally, the mana cost calculation needs to be hardened against integer overflows. It raises e to the power of a quarter of the number of positions to affect, which likely causes issues starting around 80 or so offsets. (The exponentiation seems unnecessary past 10 offsets.)