···132132 val langRoot = destinationDir.resolve("assets/$modid/lang")
133133134134 doLast {
135135+ println("rewriting book references in $bookRoot…")
135136 bookRoot.list()?.forEach { lang ->
136137 val langFile = langRoot.resolve("$lang.json")
138138+ println("• considering $lang ($langFile)")
137139 if (langFile.exists()) {
138140 val entries = JsonSlurper().parseText(langFile.readText()) as MutableMap<String, String>
139141 var n = 0
140140- for (bookFile in bookRoot.resolve(lang).walkTopDown()) {
142142+ for (bookFile in bookRoot.resolve("$lang/entries").walkTopDown()) {
141143 if (bookFile.isFile) {
144144+ println(" • reading entry at $bookFile")
142145 val json = JsonSlurper().parseText(bookFile.readText())
143146 if (json !is Map<*, *>) continue
144147 json as MutableMap<Any, Any>
145148 val name = json["name"]
146149 if (name is String) {
150150+ println(" • name: $name")
147151 entries["text.$modid.book.${n}"] = name
148152 json["name"] = "text.$modid.book.${n}"
149153 n++
···154158 for (i in pages.indices) {
155159 val page = pages[i]
156160 if (page is String) {
161161+ println(" • pages.$i: ${page.take(80)}")
157162 entries["text.$modid.book.${n}"] = page
158163 pages[i] = "text.$modid.book.${n}"
159164 n++
···162167 for (key in listOf("text", "title", "header")) {
163168 val text = page[key]
164169 if (text != null && text is String) {
170170+ println(" • pages.$i.$key: ${text.take(80)}")
165171 entries["text.$modid.book.${n}"] = text
166172 page[key] = "text.$modid.book.${n}"
167173 n++
···11+<center>
22+33+<img height="200" src="https://hexic.pool.net.eu.org/v/1.4.5/1.0/en_us/favicon-180x180.png" title="hexic icon: a blue stringworm" width="200"/>
44+55+<h1 style="margin-top: 0">hexic</h1>
66+77+[](https://files.pool.net.eu.org/docs/hexic)
88+99+</center>
1010+1111+a small [hex casting][hexcasting] addon adding whatever features i find neat or that feel interesting, as well as some bugfixes.
1212+1313+## new features
1414+* **mediaweave**, can be worn on shoulders and lets you easily cast up to two hexes
1515+* **shardcasting**, letting echo shards work as single-use reusable casting devices for e.g. raycasts
1616+* **stringworms**, little creatures to accompany you while hexxing
1717+* **casting pouches**, convenient & efficient media storage that recycles wasted media
1818+* **greater reveal**, permanently displays a list of iotas in chat & deletes them when re-executed (for e.g. status indicators)
1919+* **lani gambits**, allowing casting items to access your staffcasting stack
2020+* i need to update this at some point
2121+2222+it's been so long since i last updated this readme
2323+2424+[hexcasting]: https://modrinth.com/mod/hex-casting
···44 "category": "hexcasting:patterns",
55 "icon": "minecraft:white_carpet",
66 "pages": [
77- "the world under my control nature is mine na$(bold)ture is MI/$NE the world $(underline)the world NO LONGER/$ will $(bold)the OVerworld rule me/$ My $(media)mind is going/$ My $(media)mind/$ is going $(o)THE PAIN OF THOUGHT/$ my mind my $(o)mind/$ my a nine by nine room to myself SOLELY MYE$(bold)LF NO ONE ELSE/$ a $(bold)burst/$ of _media to Shatter the $(media)world/$ nearly $(media)six allays $(bold)sewn/$ into $(underline)the walls/$ for eternity oh how it must hurt $(bold)IT HURTS IT/$ $(k)TORTUES/$",
77+ "the world under my control nature is mine na$(bold)ture is MI/$NE the world $(m)the world NO LONGER/$ will $(bold)the OVerworld rule me/$ My $(media)mind is going/$ My $(media)mind/$ is going $(o)THE PAIN OF THOUGHT/$ my mind my $(o)mind/$ my a nine by nine room to myself SOLELY MYE$(bold)LF NO ONE ELSE/$ a $(bold)burst/$ of _media to Shatter the $(media)world/$ nearly $(media)six allays $(bold)sewn/$ into $(m)the walls/$ for eternity oh how it must hurt $(bold)IT HURTS IT/$ $(k)TORTUES/$",
88 {
99 "type": "hexcasting:pattern",
1010 "op_id": "hexic:makeworld",
···1313 "output": "imprint",
1414 "text": "Creates a fresh cuboid with a 9x9x9 interior, as well as a dimension to hold it in. Costs six quenched allays (720 dust)."
1515 },
1616- "fragments of space the $(media)world/$ falling apart crumpling a $(o)fine powder/$ to the _media tie my plane TIE IT DOWN WELL bindings of $(media)thought/$ to keep it safe safe from others safe from $(media)me/$ only $(bold)a sliver of an allay's mind for the price/$ eternally trapped n$(underline)ot alive not dead mer/$ely floating Form the $(media)allay into bindings f/$rom some point outside must $(underline)hurry/$ now $(o)I feel it slipping away/$ $(bold)the cost of tying it to itself $(o)disasterous/$ the plane slipping away $(media)my/$ mind slipping away",
1616+ "fragments of space the $(media)world/$ falling apart crumpling a $(o)fine powder/$ to the _media tie my plane TIE IT DOWN WELL bindings of $(media)thought/$ to keep it safe safe from others safe from $(media)me/$ only $(bold)a sliver of an allay's mind for the price/$ eternally trapped n$(m)ot alive not dead mer/$ely floating Form the $(media)allay into bindings f/$rom some point outside must $(m)hurry/$ now $(o)I feel it slipping away/$ $(bold)the cost of tying it to itself $(o)disasterous/$ the plane slipping away $(media)my/$ mind slipping away",
1717 {
1818 "type": "hexcasting:pattern",
1919 "op_id": "hexic:attachworld",