1237 Commits

Author SHA1 Message Date
Misode 39f4ecc504 Fix #824 noise settings preview in 1.18
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2026-02-01 00:16:10 +01:00
Misode f243be3d5e Fix #832 enchant_with_levels loot preview 2026-02-01 00:07:09 +01:00
Misode 84028a06f1 Add basic support for crafting_dye and crafting_imbue 2026-01-31 23:27:56 +01:00
Misode ef17f8a5e5 Fix mcdoc version filters for 26.1 2026-01-31 22:14:40 +01:00
OffsetMonkey538 1f8be81f50 Loot Table Modifier generator (#758)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
* Loot Table Modifier loot_modifier generator

Should support everything currently implemented

* Translation keys

* Make 'actions' and 'predicates' always a list

Seems simpler to understand and a list of one entry behaves exactly the same

* Update loot-table-modifier.mcdoc

Should match currently latest commit

* Fix loot modifier path in datapack being incorrect

* Match v2 alpha 1

* Import LootPoolEntry

* Add files via upload

* Revert "Add files via upload"

This reverts commit 7e9c50ee10.

* add condition_add action

* Add union member name overrides

Co-authored-by: Misode <misoloo64@gmail.com>

---------

Co-authored-by: Misode <misoloo64@gmail.com>
2026-01-19 21:06:31 +01:00
Misode e02c26f6db Fix #839 update spyglass to fix 26.1 version checks
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2026-01-19 20:18:48 +01:00
SpyglassCrafter 8d4e194195 Translated using Weblate (Korean)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 71.7% (277 of 386 strings)

Co-authored-by: lanthanide <lantice3720@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/ko/
Translation: Misode's Data Pack Generators/Web App
2026-01-14 06:06:19 +00:00
SpyglassCrafter 1ec1739bfd Translated using Weblate (German)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 98.7% (381 of 386 strings)

Co-authored-by: SoleFrog <solefrog@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/de/
Translation: Misode's Data Pack Generators/Web App
2026-01-12 14:06:19 +00:00
SpyglassCrafter d1f659f825 Translated using Weblate (German)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 99.2% (383 of 386 strings)

Co-authored-by: Annhilati <annhilati@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/de/
Translation: Misode's Data Pack Generators/Web App
2026-01-08 15:06:19 +00:00
Misode c8e1714859 Fix article link for new snapshot format
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2026-01-06 20:54:30 +01:00
Misode 1bd7ad880a Fix #835 handle invalid identifiers in mcdoc renderer
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2026-01-03 23:11:48 +01:00
Misode 1836668c1f Fix #833 Update deepslate
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2026-01-03 03:28:39 +01:00
SpyglassCrafter 1b70e60552 Translated using Weblate (Portuguese)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 74.3% (284 of 382 strings)

Co-authored-by: Crimson Developer <crim-dev@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pt/
Translation: Misode's Data Pack Generators/Web App
2025-12-28 17:06:19 +00:00
SpyglassCrafter 8a6232183e Translated using Weblate (German)
Currently translated at 97.9% (374 of 382 strings)

Co-authored-by: [MΛLTE] <malte9799@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/de/
Translation: Misode's Data Pack Generators/Web App
2025-12-28 17:06:19 +00:00
SpyglassCrafter be7ed77637 Translated using Weblate (French)
Currently translated at 100.0% (382 of 382 strings)

Co-authored-by: Crimson Developer <crim-dev@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/fr/
Translation: Misode's Data Pack Generators/Web App
2025-12-28 17:06:19 +00:00
Misode a3d8242519 Fix #831 transformation renderer after deepslate update
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-12-21 15:01:55 +01:00
Misode 10b604cf43 Add support for 26.1 snapshots
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-12-17 21:27:26 +01:00
Misode 390844275a Fix #828 account for attribute modifiers with display hidden
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-12-07 01:44:10 +01:00
SpyglassCrafter c089d70554 Translated using Weblate (Chinese (Simplified Han script))
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 98.4% (376 of 382 strings)

Co-authored-by: niangao <niangaovo@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/zh_Hans/
Translation: Misode's Data Pack Generators/Web App
2025-12-04 09:06:18 +00:00
SpyglassCrafter 971db423f3 Translated using Weblate (Slovak)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 40.3% (154 of 382 strings)

Co-authored-by: Simplmon <simplmon@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/sk/
Translation: Misode's Data Pack Generators/Web App
2025-11-21 09:06:19 +00:00
SpyglassCrafter a5bcbeebcf Translated using Weblate (French)
Currently translated at 97.9% (374 of 382 strings)

Co-authored-by: M6a5x98 <m6a5x98@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/fr/
Translation: Misode's Data Pack Generators/Web App
2025-11-21 09:06:19 +00:00
SpyglassCrafter e38ec6725d Translated using Weblate (Chinese (Simplified Han script))
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 97.3% (372 of 382 strings)

Co-authored-by: MangoFanFan_ <mangofanfan@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/zh_Hans/
Translation: Misode's Data Pack Generators/Web App
2025-11-16 14:06:17 +00:00
Misode 3fe6dcdb92 Fix #813 item displays in recipe viewer in 1.20.4
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-11-11 15:23:59 +01:00
SpyglassCrafter 28f6f51d77 Translated using Weblate (French)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 97.8% (370 of 378 strings)

Co-authored-by: ZetMine <zetmine@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/fr/
Translation: Misode's Data Pack Generators/Web App
2025-11-08 19:06:17 +00:00
Misode 558ecbcc5d Add timeline and zombie nautilus variant generators
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-11-05 02:12:49 +01:00
Misode 9a7c325a8c Fix Spyglass breaking change
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-10-20 02:03:30 +02:00
Misode 7e42d13ac1 Update spyglass and add 1.21.11 support 2025-10-20 02:01:08 +02:00
SpyglassCrafter 9c1ed06096 Translated using Weblate (Russian)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 100.0% (378 of 378 strings)

Co-authored-by: Jaga <jagermeistars@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/ru/
Translation: Misode's Data Pack Generators/Web App
2025-10-16 23:06:16 +00:00
SpyglassCrafter e1ec0529a0 Translated using Weblate (Chinese (Simplified Han script))
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 97.6% (369 of 378 strings)

Co-authored-by: JerryHan3 <jerryhan3@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/zh_Hans/
Translation: Misode's Data Pack Generators/Web App
2025-10-14 14:06:16 +00:00
SpyglassCrafter f57c203de5 Translated using Weblate (Czech)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 96.0% (360 of 375 strings)

Co-authored-by: Simplmon <simplmon@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/cs/
Translation: Misode's Data Pack Generators/Web App
2025-10-09 15:06:16 +00:00
SpyglassCrafter 1ad63894f2 Translated using Weblate (Slovak)
Currently translated at 35.7% (134 of 375 strings)

Co-authored-by: Simplmon <simplmon@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/sk/
Translation: Misode's Data Pack Generators/Web App
2025-10-09 15:06:16 +00:00
Misode c452033826 Make generator not found errors not reportable
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-10-03 00:16:59 +02:00
ChampionAsh5357 37d90ec493 feat(neoforge): Add new datamaps (#806) 2025-10-02 22:20:09 +02:00
SpyglassCrafter 4158aa85f3 Translated using Weblate (Korean)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 70.1% (263 of 375 strings)

Co-authored-by: JUNG TAEWON <hafskjfha@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/ko/
Translation: Misode's Data Pack Generators/Web App
2025-09-18 00:06:15 +00:00
SpyglassCrafter ec262c576f Translated using Weblate (French)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 99.1% (370 of 373 strings)

Co-authored-by: Thomas <misieur@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/fr/
Translation: Misode's Data Pack Generators/Web App
2025-09-08 15:06:15 +00:00
blockninja124 a33e2b5404 Add ad-astra planets generator (#799)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
* Add ad-astra generator

* Fix file path and min/max version

* Actually fix path 🤦
2025-09-03 23:58:24 +02:00
SpyglassCrafter 9afd315255 Translated using Weblate (German)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 99.1% (370 of 373 strings)

Co-authored-by: Thiemo <travikskoot@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/de/
Translation: Misode's Data Pack Generators/Web App
2025-08-30 17:06:14 +00:00
SpyglassCrafter 688cbd36bf Translated using Weblate (Russian)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 96.7% (361 of 373 strings)

Co-authored-by: GaleevArslanDev <galeevarslandev@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/ru/
Translation: Misode's Data Pack Generators/Web App
2025-08-26 16:06:15 +00:00
SpyglassCrafter 818cf736a1 Translated using Weblate (Chinese (Simplified Han script))
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 94.1% (351 of 373 strings)

Co-authored-by: JerryHan3 <jerryhan3@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/zh_Hans/
Translation: Misode's Data Pack Generators/Web App
2025-08-19 07:06:14 +00:00
SpyglassCrafter 00cd1280da Translated using Weblate (French)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 96.7% (358 of 370 strings)

Co-authored-by: cesouRED <cesoured@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/fr/
Translation: Misode's Data Pack Generators/Web App
2025-08-15 21:06:17 +00:00
Daniel Norris 33719ab3e2 Adds Pixelmon's Pokedex datapack types (#791)
* Pixelmon datapack types

* Fix some syntax errors & add NPC Presets

* add pokedex datapack
2025-08-15 17:40:49 +02:00
Misode d9d2863e3f Fix #777 update spyglass
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-08-08 17:25:05 +02:00
VidTDM 07577f28e8 Update Create Mod Generators to 1.21.1 (#762)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
* Initial Create Recipes

* Minor Changes

* Minor Changes

* fix issue with mixing recipe

* fix issue with cutting recipe

* Update to 1.21.1

* add compacting recipe and fix some issues

* Delete .vscode/snippets.json.code-snippets

* Final Touches

* change warning colour

* Sanitize mcdoc doc comments

* Fix until attributes, as they are exclusive

---------

Co-authored-by: Misode <misoloo64@gmail.com>
2025-08-07 21:53:14 +02:00
SpyglassCrafter ca36fc9c26 Translated using Weblate (Korean)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 66.2% (245 of 370 strings)

Co-authored-by: Tiji <iamtiji@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/ko/
Translation: Misode's Data Pack Generators/Web App
2025-08-07 06:06:14 +00:00
Misode 449e8a2b14 Add version 1.21.9 and set default to 1.21.6 2025-08-07 04:04:21 +02:00
Misode 9e11529b5a Display minor pack formats
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-08-07 03:56:01 +02:00
SpyglassCrafter c74f17b4f9 Translated using Weblate (Chinese (Simplified Han script))
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 94.0% (348 of 370 strings)

Co-authored-by: dongyangchen97-sketch <dongyangchen97-sketch@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/zh_Hans/
Translation: Misode's Data Pack Generators/Web App
2025-08-03 05:06:16 +00:00
SpyglassCrafter 06bca87f0c Translated using Weblate (Chinese (Simplified Han script))
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 90.5% (335 of 370 strings)

Co-authored-by: INF32768 <inf32768@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/zh_Hans/
Translation: Misode's Data Pack Generators/Web App
2025-07-28 15:06:13 +00:00
SpyglassCrafter 467f36b735 Translated using Weblate (Portuguese)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 72.4% (268 of 370 strings)

Co-authored-by: tmpod <tmpod@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pt/
Translation: Misode's Data Pack Generators/Web App
2025-07-27 00:06:13 +00:00
SpyglassCrafter c4dc0360ab Translated using Weblate (Japanese)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 91.1% (328 of 360 strings)

Co-authored-by: あれい <azerl0@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/ja/
Translation: Misode's Data Pack Generators/Web App
2025-07-16 15:06:13 +00:00
Daniel Norris ecc810dd4a feat(modded): Adds Pixelmon datapack types (#765)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
* Pixelmon datapack types

* Fix some syntax errors & add NPC Presets
2025-07-14 12:27:53 +02:00
SpyglassCrafter de9f36a003 Translated using Weblate (Korean)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 63.9% (229 of 358 strings)

Co-authored-by: BinRecycle <binrecycle@users.noreply.weblate.spyglassmc.com>
Co-authored-by: SpyglassCrafter <bot@spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/ko/
Translation: Misode's Data Pack Generators/Web App
2025-07-14 02:06:12 +00:00
Nogard 72d927f7a7 Add Czech translations (#768)
* Add Czech translations

* Add Czech locale option to config
2025-07-14 04:05:27 +02:00
Drex 322e4377ed Add fabric:dependency_overrides generator (#770) 2025-07-14 04:03:46 +02:00
Misode 1bc0eb92a2 Fix #775 handle inline dialogs in dialog_list preview 2025-07-14 04:00:28 +02:00
Misode edf72dd65f Update spyglass + add chicken variant generator 2025-07-14 03:40:09 +02:00
SpyglassCrafter e8d00bf6cb Translated using Weblate (Japanese)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 91.3% (327 of 358 strings)

Co-authored-by: あれい <azerl0@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/ja/
Translation: Misode's Data Pack Generators/Web App
2025-07-08 13:06:13 +00:00
SpyglassCrafter ac2bb54782 Translated using Weblate (Japanese)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 90.5% (324 of 358 strings)

Co-authored-by: あれい <azerl0@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/ja/
Translation: Misode's Data Pack Generators/Web App
2025-07-06 09:06:13 +00:00
SpyglassCrafter ce6004be7d Translated using Weblate (Chinese (Simplified Han script))
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 91.7% (324 of 353 strings)

Co-authored-by: ie9527 <ie9527@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/zh_Hans/
Translation: Misode's Data Pack Generators/Web App
2025-07-01 18:35:58 +00:00
TheDeathlyCow 71400247bc Thermoo Environment Registries Generators (#754)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
* setup thermoo generator

* constant provider

* seasons provider types

* light threshold

* weather providers

* leaf providers

* precipitation enum and validate relative humidity

* fix for dropdown of env component types

* fix temperature unit enum

* fix seasonal provider

* environment definition mcdoc

* temperature effect set up

* add other temperature effect types

* add custom loot conditions

* add a doc comment to priority

* add temperature effect 1.20 format
2025-06-23 08:53:50 +02:00
SpyglassCrafter 6cae533782 Translated using Weblate (Chinese (Simplified Han script))
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 91.7% (324 of 353 strings)

Co-authored-by: 4tubborn <4tubborn@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/zh_Hans/
Translation: Misode's Data Pack Generators/Web App
2025-06-22 11:06:13 +00:00
SpyglassCrafter 22d13249a5 Translated using Weblate (Korean)
Currently translated at 55.5% (196 of 353 strings)

Co-authored-by: BinRecycle <binrecycle@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/ko/
Translation: Misode's Data Pack Generators/Web App
2025-06-22 11:06:13 +00:00
SpyglassCrafter e38d1349ae Translated using Weblate (Chinese (Simplified Han script))
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 87.2% (308 of 353 strings)

Co-authored-by: 4tubborn <4tubborn@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/zh_Hans/
Translation: Misode's Data Pack Generators/Web App
2025-06-21 10:06:12 +00:00
Misode e43a938537 Update dialog preview to 1.21.6-pre1
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-06-18 22:17:00 +02:00
Misode 624d47935d Change issue link to mojira.dev
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-06-07 14:21:45 +02:00
SpyglassCrafter ddf2d8ff0a Translated using Weblate (Portuguese)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 75.6% (267 of 353 strings)

Translated using Weblate (Portuguese)

Currently translated at 75.6% (267 of 353 strings)

Co-authored-by: Miguel <youaren0tme@users.noreply.weblate.spyglassmc.com>
Co-authored-by: O-Zel <o-zel@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pt/
Translation: Misode's Data Pack Generators/Web App
2025-06-02 23:06:13 +00:00
SpyglassCrafter 6e9555dd7f Translated using Weblate (Polish)
Currently translated at 98.8% (349 of 353 strings)

Co-authored-by: Steame <steame090@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
Translation: Misode's Data Pack Generators/Web App
2025-06-02 23:06:13 +00:00
SpyglassCrafter f19985cb25 Translated using Weblate (French)
Currently translated at 95.7% (338 of 353 strings)

Co-authored-by: Syhix <syhix@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/fr/
Translation: Misode's Data Pack Generators/Web App
2025-06-02 23:06:13 +00:00
SpyglassCrafter 1232ca31d7 Translated using Weblate (Polish)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 98.8% (343 of 347 strings)

Co-authored-by: Steame <steame090@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
Translation: Misode's Data Pack Generators/Web App
2025-06-01 20:06:13 +00:00
SpyglassCrafter a375525d07 Translated using Weblate (Italian)
Currently translated at 100.0% (347 of 347 strings)

Co-authored-by: Tiziano <t1xx1@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/it/
Translation: Misode's Data Pack Generators/Web App
2025-06-01 20:06:13 +00:00
VidTDM b1149e3561 Generators for create mod recipe type (#750)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
* Initial Create Recipes

* Minor Changes

* Minor Changes
2025-05-28 20:00:50 +02:00
Misode 4f2c855d1e Add quick output inline toggle
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-05-25 16:14:28 +02:00
Misode 2c5d2434d6 Add atlas and equipment icons
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-05-20 23:07:04 +02:00
Misode 207223dfc6 Hotfix .png.mcmeta implementation
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-05-20 20:52:13 +02:00
Thành Nhân 6684bb0444 Add Vietnamese (vi) language support (#748) 2025-05-20 20:32:00 +02:00
Misode 1c2eccaa71 Add texture .png.mcmeta generator 2025-05-20 20:26:02 +02:00
Misode ce01e9445a Update dialog preview to 25w21a 2025-05-20 20:09:52 +02:00
Misode a7141c033e Fix menu results svg stroke color
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-05-19 22:30:35 +02:00
Misode ae87eb59f0 Add dialog generator icon 2025-05-19 18:29:52 +02:00
Misode c6777bc32a Fix wrapping long words 2025-05-18 02:04:23 +02:00
Misode f3d9c7d2eb Add dialog button tooltips 2025-05-18 01:45:27 +02:00
Misode 2655ab9740 Enable wrapping for dialog text components 2025-05-18 00:04:36 +02:00
Misode c2b11f40cb Use label_format in number_range input control 2025-05-17 23:45:04 +02:00
Misode 511311572d Prevent newlines in dialog buttons 2025-05-17 23:39:34 +02:00
Misode a5a8c0f261 Fix text and button scale 2025-05-17 23:11:51 +02:00
Misode 0867b629ec Fix #746 text component color resetting to black 2025-05-17 21:19:46 +02:00
Misode d3f6ef313c Change from hacky text component shadow to css text-shadow 2025-05-17 21:10:14 +02:00
Misode 161b81ffdf Fix #745 item dialog body scaling 2025-05-17 20:43:07 +02:00
Misode c733c3be75 Fix minor dialog issues 2025-05-17 20:08:40 +02:00
Misode e98861aea1 Fix "Show more" versions 2025-05-17 18:38:54 +02:00
Misode 5c77276de1 Add dialog preview 2025-05-17 18:29:07 +02:00
Misode 70c82984f8 Remember preview panel open state + don't hide source panel 2025-05-17 13:05:31 +02:00
Misode abfb8959ca Add dialog tag generator 2025-05-17 13:02:28 +02:00
Misode 21c0d65425 Add dialog generator 2025-05-14 01:22:37 +02:00
SpyglassCrafter 8fdb3873bc Translated using Weblate (German)
Currently translated at 100.0% (347 of 347 strings)

Co-authored-by: Paulantis <paulantis@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/de/
Translation: Misode's Data Pack Generators/Web App
2025-05-11 10:06:14 +00:00
SpyglassCrafter 6654f39d74 Translated using Weblate (Portuguese)
Currently translated at 75.7% (263 of 347 strings)

Co-authored-by: O-Zel <o-zel@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pt/
Translation: Misode's Data Pack Generators/Web App
2025-05-03 15:06:13 +00:00
SpyglassCrafter f0b03b6785 Translated using Weblate (Polish)
Currently translated at 98.8% (343 of 347 strings)

Co-authored-by: Bartus131313 <bartus131313@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
Translation: Misode's Data Pack Generators/Web App
2025-05-03 15:06:13 +00:00
SpyglassCrafter f518177267 Translated using Weblate (Russian)
Currently translated at 100.0% (347 of 347 strings)

Co-authored-by: TrRuki <TrRuki.mail@gmail.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/ru/
Translation: Misode's Data Pack Generators/Web App
2025-04-29 23:06:13 +00:00
SpyglassCrafter 6a46399e86 Translated using Weblate (Polish)
Currently translated at 98.8% (343 of 347 strings)

Co-authored-by: Technicman69 <technicman69@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
Translation: Misode's Data Pack Generators/Web App
2025-04-27 13:06:13 +00:00
SpyglassCrafter aba3acb452 Translated using Weblate (Spanish)
Currently translated at 65.7% (228 of 347 strings)

Co-authored-by: IsuKun200 <isukun200@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/es/
Translation: Misode's Data Pack Generators/Web App
2025-04-24 21:06:14 +00:00
SpyglassCrafter 8d0317e2f1 Translated using Weblate (German)
Currently translated at 42.0% (146 of 347 strings)

Co-authored-by: TRC Loop // AK <trc-loop@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/de/
Translation: Misode's Data Pack Generators/Web App
2025-04-24 21:06:14 +00:00
Misode 05d061de77 Fix 1.21.5 text component handling in loot table preview 2025-04-21 18:50:06 +02:00
Misode df0c9639c5 Update dependencies
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-04-12 19:03:30 +02:00
Misode 74767306cd Fix #683 and fix #698 update deepslate 2025-04-12 19:01:43 +02:00
Misode 108bc15cb2 Add 1.21.6 and set default to 1.21.5
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2025-04-12 17:15:13 +02:00
Misode 474b2dfe52 Fix #718 incomplete table_bonus condition 2025-04-12 16:52:52 +02:00
Misode 844cc44ac7 Merge branch 'master' of https://github.com/misode/misode.github.io 2025-04-12 16:43:14 +02:00
Misode 123ef47660 Fix #734 move controls popup above source panel 2025-04-12 16:43:10 +02:00
SpyglassCrafter d021cf0a51 Translated using Weblate (Italian)
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
Currently translated at 38.6% (134 of 347 strings)

Co-authored-by: Leo <mtcleo05@users.noreply.weblate.spyglassmc.com>
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/it/
Translation: Misode's Data Pack Generators/Web App
2025-04-11 08:06:12 +00:00
Misode 8d610a358b Fix Text mcdoc references
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-04-07 01:20:45 +02:00
Misode 31b4c66f40 Fix 1.21.5 version ref 2025-04-07 01:17:37 +02:00
Karol319 11c375d01b Translated using Weblate (Polish)
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
Currently translated at 95.9% (333 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
2025-04-05 21:06:12 +00:00
Lepek8777 ecda30e842 Translated using Weblate (Polish)
Currently translated at 95.9% (333 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
2025-04-05 21:06:12 +00:00
Lepek8777 2437d23037 Translated using Weblate (Polish)
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
Currently translated at 90.2% (313 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
2025-04-04 21:02:38 +00:00
Lepek8777 bd1e6a10ec Translated using Weblate (Polish)
Currently translated at 89.0% (309 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
2025-04-04 21:02:09 +00:00
Karol319 f2a1a1db95 Translated using Weblate (Polish)
Currently translated at 89.0% (309 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
2025-04-04 21:02:09 +00:00
Karol319 c1a934d627 Translated using Weblate (Polish)
Currently translated at 88.1% (306 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
2025-04-04 21:01:15 +00:00
Lepek8777 aaee259fbf Translated using Weblate (Polish)
Currently translated at 88.1% (306 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
2025-04-04 21:01:15 +00:00
Karol319 02ce8febfd Translated using Weblate (Polish)
Currently translated at 85.8% (298 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
2025-04-04 20:59:45 +00:00
Lepek8777 0825495399 Translated using Weblate (Polish)
Currently translated at 85.8% (298 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
2025-04-04 20:59:45 +00:00
Karol319 2daf024649 Translated using Weblate (Polish)
Currently translated at 82.4% (286 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
2025-04-04 20:57:04 +00:00
Lepek8777 ed75a8a2a0 Translated using Weblate (Polish)
Currently translated at 82.4% (286 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
2025-04-04 20:57:04 +00:00
Karol319 a52ef94b97 Translated using Weblate (Polish)
Currently translated at 80.4% (279 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
2025-04-04 20:53:35 +00:00
Lepek8777 1fb264b688 Translated using Weblate (Polish)
Currently translated at 80.4% (279 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
2025-04-04 20:53:35 +00:00
Karol319 b2a7409536 Translated using Weblate (Polish)
Currently translated at 72.3% (251 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
2025-04-04 20:47:45 +00:00
Lepek8777 bfd9ead414 Translated using Weblate (Polish)
Currently translated at 72.3% (251 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
2025-04-04 20:47:45 +00:00
Karol319 df97c84a50 Translated using Weblate (Polish)
Currently translated at 68.5% (238 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
2025-04-04 20:44:21 +00:00
Lepek8777 df16b85af4 Translated using Weblate (Polish)
Currently translated at 68.5% (238 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
2025-04-04 20:44:21 +00:00
Lepek8777 3dcf4382e4 Translated using Weblate (Polish)
Currently translated at 66.2% (230 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
2025-04-04 20:42:31 +00:00
Karol319 cebe9a2e16 Translated using Weblate (Polish)
Currently translated at 66.2% (230 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
2025-04-04 20:42:31 +00:00
Karol319 05ee8098d9 Translated using Weblate (Polish)
Currently translated at 62.8% (218 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
2025-04-04 20:40:03 +00:00
Lepek8777 002fa9f2ec Translated using Weblate (Polish)
Currently translated at 62.8% (218 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/pl/
2025-04-04 20:40:03 +00:00
𝑯𝒆𝒂𝒍𝒆𝒓𝑷𝒍𝒖𝒔𝑴𝑪 8ec60e1ca2 Update ar.json (#717)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
* Update ar.json

* Update ar.json
2025-03-17 14:34:24 +01:00
DerIch69420 6e7ca4a1c5 Translated using Weblate (German)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 26.8% (93 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/de/
2025-03-14 14:06:14 +00:00
Misode 0138b54e0b Only show the top supporters on hompage
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
I no longer have time to maintain the full contributors list unfortunately
2025-03-11 21:47:51 +01:00
Misode b8c65edd83 Update vanilla-mcdoc references
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-03-07 01:00:37 +01:00
Misode f91c1be41c Revert "Use Spyglass API to get vanilla-mcdoc symbols"
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
This reverts commit 63f9eed07c.
2025-03-04 18:46:14 +01:00
𝑯𝒆𝒂𝒍𝒆𝒓𝑷𝒍𝒖𝒔𝑴𝑪 cb15e6ccd1 Translated using Weblate (Arabic)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 43.2% (150 of 347 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/ar/
2025-03-02 20:06:10 +00:00
JerryHan3 4d314ee02e Translated using Weblate (Chinese (Simplified Han script))
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 84.6% (293 of 346 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/zh_Hans/
2025-02-28 09:06:12 +00:00
Misode 63f9eed07c Use Spyglass API to get vanilla-mcdoc symbols
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2025-02-27 22:14:44 +01:00
Misode 331a4e2fe2 Format
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-02-22 19:34:39 +01:00
Sol Toder 3f52a908a6 Fix converting colors with alpha to hex RGB (#705)
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
Convert negative integers to unsigned integers. Truncate the alpha from colors before passing them to the HTML color picker, since it doesn't allow alpha values (and they'd be in the wrong place if it did).
2025-02-22 15:14:57 +01:00
Misode 6bf9fcb76e Add wolf sound variant to en.json
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-02-20 00:12:58 +01:00
Misode b23be41bee Add support for wolf_sound_variant folder 2025-02-20 00:06:39 +01:00
Misode 4d830d9d61 Add Arabic language
Co-authored-by: HealerPlusMC <healerplus908@gmail.com>
2025-02-19 22:49:54 +01:00
Misode 5d2306792c Added translation using Weblate (Arabic) 2025-02-19 21:36:43 +00:00
Jaga bb16baec58 Translated using Weblate (Russian)
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
Currently translated at 100.0% (346 of 346 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/ru/
2025-02-19 15:06:12 +00:00
Ethan Costa b7672e42c3 Change sky aesthetics folder (#701)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-02-17 23:20:47 +01:00
Misode d80a6827e3 Fix #696 loot table preview error
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-02-12 21:01:13 +01:00
fuuuuuuuuuuuuuuck deca0f1fe2 Translated using Weblate (Chinese (Simplified Han script))
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
Currently translated at 83.8% (290 of 346 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/zh_Hans/
2025-02-11 16:05:56 +00:00
Night-Aurora b31ad73a26 Translated using Weblate (Chinese (Simplified Han script))
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 71.9% (249 of 346 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/zh_Hans/
2025-02-05 18:06:09 +00:00
LinRan db1bf36b1f Translated using Weblate (Chinese (Simplified Han script))
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 70.2% (243 of 346 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/zh_Hans/
2025-02-02 06:06:11 +00:00
Misode 0dee553d7e Add generator aliases for search
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-01-30 00:10:06 +01:00
Misode c44678818d Merge branch 'master' of https://github.com/misode/misode.github.io 2025-01-29 23:40:38 +01:00
Misode 855f9adc32 Update vite 2025-01-29 23:40:35 +01:00
DevMetal00 98ab037f82 Translated using Weblate (Spanish)
Currently translated at 59.8% (203 of 339 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/es/
2025-01-29 21:06:12 +00:00
Misode 507e37babf Add cow_variant and update spyglass 2025-01-29 21:13:26 +01:00
Misode 59642b2ff5 Use fancy menu for presets
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-01-28 01:14:35 +01:00
Misode 111855f3ea Make generator switcher a generic component 2025-01-28 00:40:28 +01:00
Misode c4a9bc06fa Add keyboard navigation to generator switcher
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2025-01-27 23:13:10 +01:00
Misode 953425b800 Add documenation for modded generators
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-01-24 18:39:10 +01:00
Misode 20498e84c1 Add assets badge
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2025-01-24 02:14:32 +01:00
Misode 00fe95a400 Add new generator switcher menu 2025-01-24 01:56:16 +01:00
Misode 46b066e1b6 Update github actions 2025-01-24 00:40:50 +01:00
Misode 3a9f836035 Include stack trace in file view error window
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2025-01-23 21:42:48 +01:00
Misode 8c67166733 Link to technical changes repo
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2025-01-23 01:15:32 +01:00
Misode c1fc6fc2f1 Support 24w04a 2025-01-23 00:51:42 +01:00
Misode 96278cbbe4 Merge branch 'master' of https://github.com/misode/misode.github.io
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-01-16 01:10:57 +01:00
Misode f656ab2ee8 25w03a 2025-01-16 01:10:54 +01:00
Jaga f4b91fc817 Translated using Weblate (Russian)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 100.0% (339 of 339 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/ru/
2025-01-14 16:06:08 +00:00
Jaga e3c22841a6 Translated using Weblate (Russian)
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 100.0% (338 of 338 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/ru/
2025-01-11 19:06:11 +00:00
Syhix 3445a3ee59 Translated using Weblate (French)
Currently translated at 100.0% (338 of 338 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/fr/
2025-01-11 19:06:11 +00:00
ChampionAsh5357 9ad376e391 fix(neoforge): Remove carvestep from 1.21.2 onwards (#676) 2025-01-11 19:27:17 +01:00
Misode a67afdbe6a Add 1.21.5 and pig_variant, set default version to 1.21.4
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-01-09 01:16:00 +01:00
Anonymous 9697b3e34e Translated using Weblate (Chinese (Simplified Han script))
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Currently translated at 71.0% (240 of 338 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/zh_Hans/
2025-01-05 18:06:11 +00:00
Anonymous 858f9a42c6 Translated using Weblate (Korean)
Currently translated at 56.8% (192 of 338 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/ko/
2025-01-05 18:06:11 +00:00
Misode a97c21d9de Re-add custom page_view event
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2025-01-04 20:42:04 +01:00
Misode e52e6a791c Remove lagacy pageview event 2025-01-04 20:27:29 +01:00
Misode 2eab79a8ed Add section with info about forking to the readme 2025-01-04 19:05:54 +01:00
Misode 55dc606ddc Have a single place to define the repo url 2025-01-04 19:05:23 +01:00
Misode 0b73a6056a Remove legacy GA4 code 2025-01-04 19:05:08 +01:00
Misode 66c6c814ef Update localization links in readme 2025-01-04 18:30:07 +01:00
Misode 2fd90f5dd4 Add item model preview
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2025-01-03 05:17:19 +01:00
Misode 4fd668e44c Fix preview panel not showing for model generator
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2025-01-03 04:49:12 +01:00
Misode 1514ec6a32 Fix #668 remove duplicate enchantment tag generator
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2024-12-28 14:28:08 +01:00
Misode d29d612edb Fix dependency label on modded generator cards
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2024-12-28 00:46:39 +01:00
Ethan Costa 2bca1f1ffb Add Custom Sky generator for Sky Aesthetics (#667)
* Added Custom Sky generator

* Added 1.21.1 support

* fix config

* revert config change

* Fix assets config not working

* update url

* Fix merge conflict

---------

Co-authored-by: Misode <misoloo64@gmail.com>
2024-12-27 22:42:50 +01:00
Misode 09a2d4c24f Fix fabric.mod.json entrypoints
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2024-12-27 05:09:18 +01:00
Misode d41ac45403 Add fabric.mod.json generator 2024-12-27 04:44:35 +01:00
Misode a52dbaa758 Fix density function numeric inaccuracies
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2024-12-23 23:05:03 +01:00
Misode 87522bc1ec Update spyglass versions and remove mcdoc patch
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2024-12-13 22:11:20 +01:00
Misode da910f42b4 Fix #649 optimize page load by using mcdoc symbols export 2024-12-13 22:00:00 +01:00
Misode cc5b79b4e5 Fix #654 disable the remaining simplifiedTypeDef caching logic in mcdoc
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2024-12-10 22:46:05 +01:00
Misode 1860f86cb0 Fix #641 format JSON output
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2024-12-10 18:03:00 +01:00
Misode 7ceb74fa15 Fix #652 add pack.mcmeta when downloading project zip 2024-12-10 16:17:42 +01:00
Misode 22d35ef6a8 Make hide_tooltip actually hide the tooltip
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2024-12-06 19:23:38 +01:00
Misode c066d88518 Merge branch 'master' of https://github.com/misode/misode.github.io 2024-12-06 19:20:55 +01:00
Misode e844477c80 Fix #626 update item displays to 1.21.4 2024-12-06 19:20:48 +01:00
Alexandre Collignon fb7012b9f4 feat: Added missing key langs for French (#653)
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2024-12-05 21:49:51 +01:00
Misode c81bafd674 Fix preview scaling
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2024-12-03 21:24:46 +01:00
Misode a8aaec69e2 Handle invalid set_lore functions 2024-12-03 21:14:26 +01:00
Misode 1d1bae9459 Add error boundary for preview panel 2024-12-03 21:13:33 +01:00
Misode 8f37b45ae1 Fix copy and download triggers re-activating when document changes
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2024-11-29 18:20:33 +01:00
Misode fabdb1aed3 Add recipe output convert format 2024-11-29 16:34:20 +01:00
Misode f694b56244 Update versions in index.html title
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2024-11-29 07:04:01 +01:00
Misode 061c1d5cef Static render all combinations of convert formats 2024-11-29 07:03:19 +01:00
Misode 7501b392be Add item modifier as convert format 2024-11-29 06:37:39 +01:00
Misode a948715523 Add /give to loot table converter tool 2024-11-29 06:08:01 +01:00
Misode fb95b386cc Sort string completions alphabetically
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2024-11-29 01:54:12 +01:00
Misode 114ba13be9 Fix #644 pack.mcmeta saving
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2024-11-28 17:28:44 +01:00
Misode 94a8210e4c Fix #642 more validation in loot table preview
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2024-11-27 23:40:07 +01:00
Misode dc72614e85 Fix #637 unsupported project storage undefined on first load 2024-11-27 22:39:49 +01:00
Misode 5c874e3f8a Fix #618 typo in customized ore editor 2024-11-27 21:51:00 +01:00
Misode 882178c208 Fix #630 base attack damage amount 2024-11-27 21:46:47 +01:00
Misode 794657d0f5 Fix #640 handle malformed set_enchantments in loot table preview 2024-11-27 21:40:39 +01:00
Misode fdcb3f2b70 Fix #638 move minVersion from model to equipment 2024-11-27 21:21:52 +01:00
Misode 8288397bc9 Upgrade draft project to hardcoded drafts uri 2024-11-27 21:09:12 +01:00
Misode b1c8bba04a Add color indicator to enum fields
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2024-11-27 19:15:22 +01:00
Misode 95f4363840 Improve input fields in mcdoc renderer 2024-11-27 18:59:25 +01:00
Misode c3d0f133ab Enable vanilla mcdoc refresh 2024-11-27 18:07:08 +01:00
Misode f18b4baf73 Add equipment generator 2024-11-27 17:37:36 +01:00
Misode 11484df930 Two hot fixes 2024-11-27 17:06:37 +01:00
Misode aef57e7f00 Merge pull request #614 from misode/mcdoc 2024-11-27 16:57:33 +01:00
Misode 1abc28f369 Get project data for worldgen previews 2024-11-27 06:01:05 +01:00
Misode 2bc0fc23d8 Disable mcdoc simplified type caching 2024-11-27 04:42:51 +01:00
Misode a86a707232 Exclude already existing keys from dynamic key suggestions 2024-11-27 01:28:29 +01:00
Misode 145bced7d2 Temporarily keep the mcdoc dependencies 2024-11-27 01:03:43 +01:00
Misode 8415340557 Insert new fields in original struct order 2024-11-27 00:29:21 +01:00
Misode 283248911b Fix issue when switching versions and generators at the same time 2024-11-27 00:11:43 +01:00
Misode 2f5f18777d Fix project not opening after creation 2024-11-26 19:25:20 +01:00
Misode e9280a7a54 Remove unused memory and mixed file systems for now 2024-11-26 18:05:17 +01:00
Misode 6badc9f06f Fix indexeddb file system readdir to use a range 2024-11-26 18:04:11 +01:00
Misode 46ed105c34 Optimize spyglass external hash function 2024-11-26 02:22:34 +01:00
Misode 3a467e54b7 Improve doc comment rendering in markdown 2024-11-26 01:15:36 +01:00
Misode d370b4244a Skip encoding/decoding step when importing and downloading projects 2024-11-26 01:15:24 +01:00
Misode ef03fe6058 Allow newlines in strings by special casing "\n" 2024-11-25 18:07:20 +01:00
Misode ac37928557 Add lang and post_effect generators 2024-11-25 18:02:37 +01:00
Misode b54abd5273 Update spyglass to better support resource packs 2024-11-25 17:42:20 +01:00
Misode a2d8adbc4b Keep preset and share search params in the url 2024-11-21 05:41:15 +01:00
Misode 4bbff0969f Clear dependencies correctly 2024-11-21 05:16:59 +01:00
Misode b535f55e76 Upgrade legacy project files from localstorage to indexeddb 2024-11-21 05:09:39 +01:00
Misode fa1f852822 Fix project panel flicker and filter out directories 2024-11-21 02:05:51 +01:00
Misode 7719112b83 Register JE uri binder 2024-11-21 01:45:30 +01:00
Misode 5cfd17a107 Fix root hashing due to missing root dirs 2024-11-21 01:30:42 +01:00
Misode 4bc6e758da Handle doc load errors 2024-11-21 00:48:02 +01:00
Misode f3de707224 Add skeleton loading indicators 2024-11-20 22:06:29 +01:00
Misode 56b2e1a382 Make project panel resizable 2024-11-20 20:28:54 +01:00
Misode 22e787bf4e Delete files when deleting a project 2024-11-20 04:37:11 +01:00
Misode e11e88d6db Render unknown fields 2024-11-20 03:42:37 +01:00
Misode f4f2450133 Refactor passing makeEdit around in ctx 2024-11-19 20:57:18 +01:00
Misode 11029e88f6 Collapse surface rules by default 2024-11-19 19:38:49 +01:00
Misode bf9590a225 Tweak collapse styles 2024-11-19 18:15:35 +01:00
Misode 8b58b2c7a4 Improve dynamic struct fields 2024-11-19 16:36:35 +01:00
Misode 0b7e9b6948 Remove unused data-cy attributes 2024-11-19 15:14:10 +01:00
Misode 72fe13fcdc Merge branch 'master' of https://github.com/misode/misode.github.io into mcdoc 2024-11-19 05:01:34 +01:00
Misode 831d4e7706 Fix Ctrl+S for saving a file 2024-11-19 04:51:24 +01:00
Misode 06b028d04f Fix for switching back to latest version 2024-11-19 04:43:53 +01:00
Misode 988e24f337 Update project panel tree view when files change 2024-11-19 04:28:04 +01:00
Misode b0963b1163 Implement renaming files 2024-11-19 03:26:00 +01:00
Misode 14abe1ee52 Refactor modals to use context provider 2024-11-18 23:55:14 +01:00
Misode 5db012f101 Simplify spyglass imports 2024-11-18 17:16:38 +01:00
Misode 2366716cae Refactor projects to use indexeddb 2024-11-13 05:29:06 +01:00
Misode 55f961c8cc Fix item tint color list length
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2024-11-09 21:15:23 +01:00
Misode ad5c45087e Fix item schema
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2024-11-08 18:52:17 +01:00
Misode 09cbf7b59a Add assets/items generator and support 24w45a
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2024-11-06 21:01:24 +01:00
Misode 26079d1188 Sort overlay file systems based on prefix length 2024-11-06 06:53:05 +01:00
Misode c726689459 Implement memory file system and mixed file system 2024-11-06 06:31:59 +01:00
Misode 760f256aa1 Split FileSystem 2024-11-06 01:24:28 +01:00
Misode adc355d347 Disable item display for item tag fields 2024-11-04 22:43:59 +01:00
Misode 807f236f2a Improve switching between union members 2024-11-04 21:14:20 +01:00
Misode c80c500386 Add support for mcdoc:block_state_keys 2024-11-02 07:43:30 +01:00
Misode 926d19bb56 Add block state validation 2024-11-02 06:35:06 +01:00
Misode 4d85a9f491 Implement set generator default 2024-11-01 18:33:25 +01:00
Misode 7b576da9d2 Clean up file opening and watcher events 2024-11-01 17:45:54 +01:00
Misode a380999afb Implement IndexedDB file system 2024-11-01 05:08:23 +01:00
Misode 00f0c09a34 Add neoforge and immersiveweathering mcdoc 2024-11-01 00:19:46 +01:00
Misode 68eb077c17 Re-add ohthetreesyoullgrow partner 2024-10-31 06:41:30 +01:00
Misode cf44c3236f Add duplicate action and split ListItem component 2024-10-31 05:02:57 +01:00
Misode 4cf1b16a86 Show max 50 list items by default 2024-10-31 04:20:02 +01:00
Misode 0214a6ea7b Make list and dynamic struct children collapsible 2024-10-31 01:37:34 +01:00
Misode 88c8719eab Render short numeric tuples inline 2024-10-31 01:07:01 +01:00
Misode ea873cae22 Move stuff around to group mcdoc types 2024-10-31 00:09:37 +01:00
Misode 444173cd78 Split mcdoc file into components and helpers 2024-10-31 00:09:33 +01:00
Misode a76347d2b5 Merge branch 'master' of https://github.com/misode/misode.github.io into mcdoc 2024-10-30 17:37:36 +01:00
Misode 9886155fee Manually filter out some fields due to probable spyglass bug 2024-10-30 17:32:20 +01:00
Misode 377c3f1e65 Add 1.21.4
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2024-10-30 16:54:38 +01:00
Misode 083862f867 Improve key formatting and use enum identifiers 2024-10-29 06:13:12 +01:00
Misode a9e7e88f9c Improve contrast of function category colors 2024-10-29 05:54:40 +01:00
Misode 588b7a578e Set root category for item modifiers and predicates 2024-10-29 05:46:26 +01:00
Misode d6118dcb99 Tweak node button colors 2024-10-29 05:21:43 +01:00
Misode 3f0855d336 Fix optional literals 2024-10-29 04:42:07 +01:00
Misode de084e030c Escape quotes when editing strings 2024-10-29 04:21:19 +01:00
Misode 65a394c3ed Improve union member matching 2024-10-29 03:31:16 +01:00
Misode 7770b97a7a Implement any/unsafe type 2024-10-29 02:41:59 +01:00
Misode a536c78e05 Fix error with empty union 2024-10-28 06:18:32 +01:00
Misode bdc06d1f43 Fix dispatcher types not always having context 2024-10-28 06:03:24 +01:00
Misode 9fa9da0230 Fix assets generators 2024-10-27 06:03:58 +01:00
Misode 446e04879c Add random seed button 2024-10-27 05:39:04 +01:00
Misode 88b8730b72 Fix world settings generator 2024-10-27 05:15:26 +01:00
Misode 3447a586c2 Fix text component generator 2024-10-27 04:59:50 +01:00
Misode 4d9e9fa40c Remove unnecessary json parsing for presets and snippets 2024-10-26 23:01:49 +02:00
Misode e130cb59eb Merge branch 'master' of https://github.com/misode/misode.github.io into mcdoc 2024-10-26 22:47:52 +02:00
Misode e8871ee02a Also show item display for block registry 2024-10-26 22:46:15 +02:00
Misode 2163020db8 Pass runtimeKey when simplifying dynamic fields 2024-10-26 22:41:09 +02:00
Misode 8d3497e7b6 Format data components 2024-10-26 22:04:48 +02:00
Misode 2ff59b8405 Wrap all JSON.parse calls with try-catch 2024-10-26 21:49:12 +02:00
Misode 6555e80ead Hide [any]: any dynamic fields 2024-10-26 15:57:33 +02:00
Misode b9e72bc4da Don't rely on the file root typeDef + refactor mcdoc props 2024-10-25 20:00:58 +02:00
Misode 35de8bc538 Implement dynamic struct fields + improve UX 2024-10-25 06:18:29 +02:00
Misode 8bc821e516 Make fixed lists and tuples consistent 2024-10-25 02:44:29 +02:00
Misode 1f0a3a03a9 Change style of objects inside lists 2024-10-25 01:23:36 +02:00
Misode 18dd627ad8 Fix issue with setting strings to unset 2024-10-24 23:32:56 +02:00
Misode 974730ff44 Implement add to bottom of list 2024-10-24 23:23:07 +02:00
Misode ac43582627 Use simplified type when getting default value 2024-10-24 23:09:13 +02:00
Misode a79fd5fd6c Add item display and follow reference button 2024-10-24 22:47:26 +02:00
Misode c25a066161 Implement move up and move down buttons 2024-10-24 22:33:26 +02:00
Misode 3e72588dc9 Validate regex patterns, fix object bodies 2024-10-24 21:41:46 +02:00
Misode 6649b0aabd Change pack format validation again 2024-10-24 21:28:08 +02:00
Misode 874b9cdc33 Improve unset unions 2024-10-24 21:01:47 +02:00
Misode e71267f1de Keep required empty strings 2024-10-24 19:08:16 +02:00
Misode f49202c160 Handle "missing key" errors separately 2024-10-24 18:39:13 +02:00
Misode a3faa4a3c9 Format select registries, enums and unions 2024-10-24 17:54:39 +02:00
Misode 599b7ea068 Make 1.21.2 the default version
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
2024-10-24 16:26:07 +02:00
Misode ee655b39e5 Remove unnecessary json parse and stringify step when importing 2024-10-24 15:57:14 +02:00
Misode 9f1ae01d91 Rename variables to be more consistent 2024-10-24 15:24:04 +02:00
Misode 3f7c8f6904 Add hardcoded colored categories 2024-10-24 06:50:04 +02:00
Misode c9f216c550 Change doc comments to be based on field instead of hover 2024-10-24 06:15:04 +02:00
Misode b66b53ceaa Show doc comments 2024-10-24 06:07:12 +02:00
Misode 256390cbd2 Tweak pack format error reporting 2024-10-24 05:40:04 +02:00
Misode 9066469381 Add error indicators 2024-10-24 05:02:37 +02:00
Misode 33d4c30539 Add color pickers 2024-10-24 03:59:04 +02:00
Misode e9f16aa3f7 Add literal and tuple types + improve struct and list default 2024-10-24 03:31:34 +02:00
Misode 039910e43e Handle unions matching multiple members 2024-10-24 02:29:38 +02:00
Misode 22409f62ce Add string datalist completions 2024-10-24 02:09:17 +02:00
Misode d9a1d4c41a Implement enums and unions 2024-10-24 01:21:53 +02:00
Misode 6c214d4e3a Simplify mcdoc fields when rendering 2024-10-24 00:34:32 +02:00
Misode 6e68de01aa Refactor makeEdit so it returns the result node 2024-10-23 21:41:12 +02:00
Misode 6151fbcea4 List add button 2024-10-23 20:14:10 +02:00
Misode 6ea2b7929c Add string, numeric and boolean editing 2024-10-23 18:46:21 +02:00
Misode 18332b9dbc Make edits to AST and then use formatter 2024-10-23 06:10:14 +02:00
Misode a0f3e71000 Refactor spyglass service and context 2024-10-23 05:44:20 +02:00
Misode c358c871da Implement undo and redo 2024-10-22 22:55:04 +02:00
Misode ea37eb168f Keep track of opened documents and prepare for undo/redo 2024-10-22 15:43:02 +02:00
Misode 9cb7f7297c Make Spyglass a singleton object 2024-10-20 20:23:17 +02:00
Misode d248732469 Basic mcdoc tree rendering 2024-10-17 15:14:30 +02:00
Misode 7ed34a61e7 Add spyglass context and file watcher 2024-10-16 15:46:17 +02:00
Misode 77d6323219 Use spyglass DocAndNode to store current file data 2024-10-16 04:36:59 +02:00
Misode 7dbd533abb Add mcmeta-summary symbol registrar and initialize remaining 2024-10-15 23:25:56 +02:00
Misode 60aab0c6b9 Initialize spyglass project and load vanilla-mcdoc 2024-10-15 07:24:12 +02:00
Misode ccdcf9e7e3 🔥 Nuke all mcschema related code 2024-10-15 05:14:02 +02:00
Misode b9a23d0f47 Fix #613 issues with inline instrument component 2024-10-15 03:38:12 +02:00
Misode 505842a319 Adjust quote-props eslint rule 2024-10-12 01:12:51 +02:00
Misode 04864cea2d Update version article links 2024-10-11 06:06:25 +02:00
Misode a8abe6355f Update supporters 2024-10-08 01:34:11 +02:00
Misode 763b70180f Fix git diff including 404 responses 2024-10-04 19:50:14 +02:00
Misode 5b5cc026f4 Add snbt and shaders to text-like files 2024-10-04 19:23:21 +02:00
Misode 91f61b3c36 Fix #519 by manually creating the patch when github doesn't give it 2024-10-04 19:02:53 +02:00
Misode 7757dbcac3 Fix #547 quote snbt keys + respect indentation 2024-10-04 18:12:01 +02:00
Misode 23ab957f62 Fix tree not refreshing when importing on mobile 2024-10-04 17:42:52 +02:00
Misode f1b60b8b40 Add paste button on mobile + update copy icon (#610) 2024-10-04 17:40:02 +02:00
Misode fab3088799 Close #537 implement alphabetical sort in output 2024-10-04 16:42:47 +02:00
Misode 22c8566819 Fix #463 root list nodes didn't have "add to bottom" button due to hook weirdness 2024-10-04 16:08:39 +02:00
Misode fec84a03d2 Fix #540 by validating file names 2024-10-04 15:52:21 +02:00
Misode 5d08f15006 Fix #319 keep unknown files when importing and downloading a project 2024-10-04 15:30:35 +02:00
ChampionAsh5357 394beeab16 Add NeoForge Data Generators (#608)
* feat(partner): Add neoforge integrations

* Fix build and format file

* fix(partner): Handle matching within choice node

* Tweak some of the ChoiceNode's

---------

Co-authored-by: Misode <misoloo64@gmail.com>
2024-10-04 05:10:33 +02:00
Misode 480c8b5f35 Swap popular generator predicate -> recipe 2024-10-03 05:04:22 +02:00
Misode f893c1e2d4 Hide pack format bumps on the homepage 2024-10-03 04:56:04 +02:00
Misode 2344753db3 Update deepslate to fix bell and sign item rendering 2024-10-03 01:43:18 +02:00
Misode 7754d361c3 Fix #301 update deepslate with new special renderers 2024-10-02 17:17:56 +02:00
Misode 75c662863c Fix #459 Store DF mode to local storage 2024-09-30 19:38:24 +02:00
Misode c8be49d8bc Update browserlist-db 2024-09-30 18:45:14 +02:00
Misode 3b0a733eaf Fix #603 switching to "multiple" in Tag predicate schema 2024-09-30 18:45:14 +02:00
dependabot[bot] 8d38f0553a Bump rollup from 2.79.1 to 2.79.2 (#607)
Bumps [rollup](https://github.com/rollup/rollup) from 2.79.1 to 2.79.2.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v2.79.1...v2.79.2)

---
updated-dependencies:
- dependency-name: rollup
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-27 20:22:56 +02:00
Misode 88b7b74ca0 Fix #599 catch invalid lore lines 2024-09-18 17:38:31 +02:00
Misode 586c777cf8 Support 24w37a and 24w38a 2024-09-18 17:03:57 +02:00
dependabot[bot] 52747deaea Bump vite from 3.2.10 to 3.2.11 (#606)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 3.2.10 to 3.2.11.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v3.2.11/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v3.2.11/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-18 14:59:21 +02:00
dependabot[bot] 6750fbaf75 Bump vite from 3.2.7 to 3.2.10 (#499)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 3.2.7 to 3.2.10.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v3.2.10/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v3.2.10/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-18 14:56:28 +02:00
Misode 137c4816d6 Allow generators to be listed in two columns 2024-09-18 14:45:50 +02:00
Misode d7781d717a Add 11 icons for recently added generators 2024-09-18 14:24:05 +02:00
Misode 7ea4227451 Fix #604 validate set_contents 2024-09-17 02:36:44 +02:00
Misode 98e6c9192c Remove spyglass ad 2024-09-12 03:46:37 +02:00
Misode 11896c32b1 Add new supporters 2024-09-12 03:45:59 +02:00
Misode 9c9bed9423 Fix #585 re-add enchantment loot functions to latest version 2024-09-12 03:28:02 +02:00
Misode fff1b1603a Fix #596 support item tag and loot table references in loot preview 2024-09-11 14:39:53 +02:00
Misode 95f7ca7738 Account for deprecated.json translation info file 2024-09-11 13:49:46 +02:00
Apollo 944dc890e8 Fix recipe preview on 1.21.2, add enchantment tag generator (#595)
* Add enchantment tag generator

* Update Lithostitched partner

* Fix recipe preview on 1.21.2

* Add enchantment tag icon

* Fix nested tags

---------

Co-authored-by: Misode <misoloo64@gmail.com>
2024-09-11 02:47:14 +02:00
Misode fd6de2ac85 Update loot table preview, item display and tooltips to 1.21 2024-09-11 02:31:17 +02:00
Misode 337b7d9b0a Fix #546 catch invalid recipe resource locations in result 2024-09-05 15:10:07 +02:00
Misode ee91810612 Fix sequence function for older versions 2024-09-05 14:11:01 +02:00
Misode a710923f12 Fix #589 Remove conditions field from sequence loot function 2024-09-05 13:58:33 +02:00
Misode 711cec5c38 Fix #590 add replace field to set_attributes 2024-09-05 12:50:02 +02:00
Misode 6ce58a1be1 Update to 24w36a, thanks Apollo! 2024-09-04 23:46:39 +02:00
Misode 0e282bd832 Add support for 1.21.2 (24w33a) 2024-08-17 21:26:13 +02:00
Misode 60d59e9f34 Don't allow nested loot functions in sequence 2024-08-14 21:01:34 +02:00
Misode 7d200abed1 Fix #577 inline instruments and jukebox songs in components 2024-08-14 20:41:41 +02:00
Misode de16650ce0 Add new zh-cn translations from #559
Authored by https://github.com/fuuuuuuuuuuuuuuck
2024-08-14 19:13:40 +02:00
Misode 0a240f41d3 Fix #561 add sequence loot function 2024-08-14 19:05:12 +02:00
Misode 28dab5f0ca Fix #558 add show_notification recipe field 2024-08-14 18:39:57 +02:00
Misode 795826bfc2 Fix #579 pack format for 1.21 is 48 2024-08-14 18:20:00 +02:00
Misode 9ad3e91893 Add spyglass ad 2024-07-09 01:58:00 +02:00
Misode c277880a01 Add snbt output format 2024-06-22 16:52:01 +02:00
Misode 074790cf6b Make 1.21 the default version 2024-06-22 16:34:36 +02:00
Misode acaece0984 Bump versions 2024-06-14 05:56:06 +02:00
Apollo f478813a46 Update Lithostitched partner (#539)
* Add enchantment tag generator

* Update Lithostitched partner

* fix config.json

* Refactor a bit

---------

Co-authored-by: Misode <misoloo64@gmail.com>
2024-06-14 05:54:10 +02:00
Misode 86b3bed22a Fix #502, fix #516, fix #529, fix #530, fix #531 2024-06-14 05:48:16 +02:00
Misode d849fca07e Change lagacy folder names for 1.21 2024-05-28 23:40:39 +02:00
Misode 50ae97207d 24w21a 2024-05-28 22:40:57 +02:00
Misode 22207676f9 Fix #520 lodestone tracker component 2024-05-16 21:38:10 +02:00
Misode 08e5a91909 Dimension padding can also be a single value 2024-05-15 18:46:37 +02:00
Misode 934c12dc22 24w20a + fix enchantment tags 2024-05-15 17:35:13 +02:00
Misode 9612cbd97f Update mcschema with locales 2024-05-11 04:00:05 +02:00
Misode 44b97e357f 24w19a 2024-05-10 23:15:41 +02:00
Misode bf36ecd3e0 Fix 1.20.5 should be the default 2024-05-07 20:15:32 +02:00
Misode b3bf153d24 Add painting variant + add enchantment tag 2024-05-07 04:09:52 +02:00
Misode 9f2491833d Add body equipment slot group 2024-05-05 17:00:30 +02:00
Misode c2340b7c05 Add particle type options + fix set_fireworks 2024-05-04 01:59:39 +02:00
Misode a3062131a3 Add random uuid button 2024-05-03 20:34:07 +02:00
Misode 1c629a4d7f Add support for 24w18a (1.21) + make 1.20.5 default 2024-05-03 19:10:57 +02:00
Misode 42f94b04f6 Fix #506 update pack format to 41 2024-05-02 13:18:46 +02:00
Misode 4da8beb0fb Fix #504 recipe preview error 2024-04-23 20:07:09 +02:00
Misode ec688b52f3 1.20.5-pre2 2024-04-15 18:32:16 +02:00
Misode 25bf80a05a Fix list operation dispatched fields 2024-04-13 19:38:29 +02:00
Misode 44ffd10a88 Fix #501 num_bees_inside is an int_bounds 2024-04-13 03:02:13 +02:00
Misode 99e6355530 Add set_ominous_bottle_amplifier 2024-04-10 19:38:10 +02:00
Misode 64f02c20f2 1.20.5-pre1 2024-04-10 19:13:57 +02:00
Misode 97571f7a8a Actually fix slot range collection 2024-04-08 17:54:23 +02:00
Misode 566cd52a5a Fix slot range collection 2024-04-03 01:02:14 +02:00
Misode 6f1952a5f0 Revert "Enable demo version"
This reverts commit f0d3023cfc.
2024-04-02 05:18:12 +02:00
Misode f0d3023cfc Enable demo version 2024-04-01 01:51:38 +02:00
Misode a693d4d119 Fix some loot table enum contexts 2024-03-31 16:03:54 +02:00
Misode 581116c67d Fix #498 remove functions field on composite entries 2024-03-31 15:55:41 +02:00
Misode 7ecd355ea3 Fix #497 attribute modifier component uuid 2024-03-30 15:30:32 +01:00
Misode 84a6da7ee8 24w13a 2024-03-28 15:40:07 +01:00
Misode 3cb736e7c5 Fix #496 recipe preview 2024-03-27 01:58:14 +01:00
Misode 3fdda11c17 Fix recipe result preview before 1.20.5 2024-03-26 00:55:37 +01:00
Misode c87ede8e54 Recipe preview 2024-03-25 21:57:47 +01:00
Misode 1e5a4262f8 24w12a 2024-03-21 01:04:46 +01:00
Misode 497964ef1b 24w11a changes (missing locales) 2024-03-15 02:44:04 +01:00
Misode b1332d7d22 Fix #485 add scrollPastEnd 50% to output panel 2024-03-14 17:31:18 +01:00
Misode 8195c05bc1 Fix #489 point of interest type tag URL 2024-03-13 18:52:37 +01:00
Misode f9ad30a294 Revert reset button for map types 2024-03-12 00:56:18 +01:00
Misode 4851da4e9d Fix #482 allow resetting objects and maps on invalid type 2024-03-11 20:55:32 +01:00
Misode 9dbcf46a53 Clear map key select after adding an entry 2024-03-11 13:29:51 +01:00
Misode 16475e0ba2 Fix #487 profile component + negative component patch 2024-03-11 13:19:20 +01:00
Misode 95df45acb1 24w10a 2024-03-07 01:13:20 +01:00
Misode 1c5fce9036 Always use datalists for components 2024-03-02 03:45:09 +01:00
Misode 48e9418601 Fix map and list contexts + update schema locales 2024-03-02 03:34:11 +01:00
Misode fb0932ef52 Fix #477 related item stack changes 2024-03-02 01:39:12 +01:00
Misode 0739a5b3ec Add 1.20.5 2024-03-01 18:14:00 +01:00
YanisBft 5bc8c90cf8 Improve French translation for generators (#471) 2024-02-24 22:18:00 +01:00
Misode 9aec6f905e Sort all locales 2024-02-24 21:59:49 +01:00
efekos 231ecfe9c2 Language Support in Tooltips (#468)
* Add lang parameter to TextCompoennt

* Add 'mclang' key

* Add clearing old language cache when changed language

* Fetch language in background

* Remove auto-fetching mc language

* wrap mclang with a state

* update contributos

* Move 'mclang' to config.json

* Cleanup code to get mclang key and fix caching

---------

Co-authored-by: Misode <misoloo64@gmail.com>
2024-02-24 21:55:41 +01:00
YanisBft 7a7c7d675e Add a wiki page button to versions (#470)
* Add a wiki page button to versions

* Wrap tabs and change tab to "Wiki"

---------

Co-authored-by: Misode <misoloo64@gmail.com>
2024-02-24 21:24:35 +01:00
Misode 3004ce6534 Add text component font validator 2024-02-23 03:26:06 +01:00
Misode f7629b704d Update contributors 2024-02-23 02:44:03 +01:00
Misode 8c5328d700 Bump mcschema, various bugfixes 2024-02-23 02:08:51 +01:00
efekos f9b17df84e Update Turkish language (#454)
* make Turkish have schemas

* Update translators

* Fix a typo

"Şablon materyali" to "Şablon Materyali"

* Add tr.json

* Remove partners translations

* Format locale file with 2 spaces

* Update mcschema locales

---------

Co-authored-by: Misode <misoloo64@gmail.com>
2024-01-22 20:32:04 +01:00
Misode 9f8e57bb19 Update OTTYG minVersion 2024-01-18 07:59:05 +01:00
Misode f3b852025d Add Oh The Trees You'll Grow partner generator 2024-01-18 07:53:05 +01:00
Apollo f855c7d938 Add Lithostitched partner (#436)
* Add Lithostitched partner

* Remove modded biome slice stuff

* Run formatter

---------

Co-authored-by: Misode <misoloo64@gmail.com>
2024-01-18 04:11:18 +01:00
OliviaTheVampire 7c94beb5b2 More support for Obsidian (#233)
* Start obsidian item generator

* Add part of block generator

* More progress on blocks and items for Obsidian

* Fixed some issues

* Added even more properties for blocks

* fixed this?

* added back these?

* Hopefully fixed this?

* More events

* should fix the issues

* NOW WORK

* adding support for even more

* Fix build

* Rename obsidian IDs

* updated pack version

* Update config

---------

Co-authored-by: Misode <Misoloo64@gmail.com>
2024-01-18 03:38:54 +01:00
Misode b4e9d86c43 Refactor how partner generators work + prefix generator translation keys 2024-01-18 03:22:10 +01:00
efekos acc55ae7a3 Add Turkish language (#453) 2024-01-14 03:37:50 +01:00
notlin4 f44fd734a6 Translated using Weblate (Chinese (Traditional))
Currently translated at 50.3% (141 of 280 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/zh_Hant/
2023-12-31 12:27:34 +00:00
Misode f6feffff6e Update supporters 2023-12-29 15:41:20 +01:00
Misode 80324b2498 Fix wiki links 2023-12-29 15:03:53 +01:00
Misode 98e671b8a0 Add 1.20.4 to version name 2023-12-11 22:07:13 +01:00
Misode 886991af8e Customized biomes (#396)
* Start with customized biome UI

* Refactor customized page, split logic

* Implement biome replacements

* Remove debug messages

* Disable create button when nothing is modified
2023-12-06 20:40:30 +01:00
Misode 1e28b82907 Fix bullet list style in changelogs 2023-12-06 14:57:25 +01:00
Misode 649f14dc0d Don't show all versions by default + version ranges 2023-12-05 19:28:35 +01:00
Misode 5cc34e9ba3 Add support for 1.20.3 2023-12-05 18:54:24 +01:00
Misode 0296546a4d Fix #434 add more tag generators 2023-12-05 11:28:01 +01:00
Flemmli97 33d90f9126 Allow creating new files (#437)
* allow creating new files

* icon and translation key fix

* Change how new file works

* Fix selected file in tree view

* Reword to "New empty file"

* Reword to "Save as"

---------

Co-authored-by: Flemmli97 <Flemmli97@users.noreply.github.com>
Co-authored-by: Misode <misoloo64@gmail.com>
2023-12-03 22:25:52 +01:00
Misode fcffbc9712 Fix #443 Enable autofocus in generator lists 2023-11-29 22:29:23 +01:00
Misode 7ff7f46ac8 Add template placer tool 2023-11-23 02:13:39 +01:00
Misode 2892b439c8 Remove minecraft wiki banner on the home page
It's been 2 months, the guides and generators now link to it anyways
2023-11-23 02:08:03 +01:00
Misode 2416095e4f Add wiki link to all generators 2023-11-23 02:05:05 +01:00
Misode 32a022d3a4 Fix guides title 2023-11-23 01:44:53 +01:00
Misode 2c187e83c1 Update worldgen page title 2023-11-23 01:37:12 +01:00
Misode 1394711d08 Remove guides, they moved to the minecraft wiki 2023-11-23 01:35:58 +01:00
Misode 27e5ea707b Configure dark mode with tailwind 2023-10-10 10:52:14 +02:00
Misode 410fca7155 Fix pack overlays 2023-10-09 23:03:39 +02:00
Misode ddd00dd731 Add version mcmeta diff page (#428)
* Add version mcmeta diff page

* Add toggle for word wrapping

* Fix diff view on mobile

* Use full layout width on version details

* Show image and audio diffs

* Add word_wrap locale
2023-10-09 22:09:36 +02:00
Misode ddf54174d1 Fix version metadata svg style 2023-10-04 21:25:51 +02:00
Misode c2bd0a639a Add structure tag generator 2023-10-04 19:54:07 +02:00
Misode f5edc5e97e Fix #408 transpose matrix data before copying 2023-10-03 11:45:46 +02:00
Misode fccbd72aeb Support new any_of, all_of and sequence in loot tables 2023-10-03 11:41:30 +02:00
Misode 6074a15d61 Fix #417 handle invalid alternative condition 2023-10-03 11:12:23 +02:00
Misode 446025cdec Fix #418 noise settings preview freezes 2023-10-03 11:04:08 +02:00
Misode f71e44f91b Add Tailwind CSS (#425)
* Install and configure tailwind

* Fix style issues
2023-10-02 23:38:18 +02:00
Misode 427294ad3b Get rid of cypress 2023-10-02 18:46:16 +02:00
dependabot[bot] 0c3504ca5b Bump word-wrap from 1.2.3 to 1.2.4 (#405)
Bumps [word-wrap](https://github.com/jonschlinkert/word-wrap) from 1.2.3 to 1.2.4.
- [Release notes](https://github.com/jonschlinkert/word-wrap/releases)
- [Commits](https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.4)

---
updated-dependencies:
- dependency-name: word-wrap
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-02 18:44:27 +02:00
Misode 3355d083c0 Add 1.20.2 2023-10-02 18:43:47 +02:00
Misode bbae8af938 Add minecraft wiki banner 2023-09-25 14:21:15 +02:00
Mango Jelly Pudding 55e23ca0c2 Translated using Weblate (Chinese (Traditional))
Currently translated at 45.3% (122 of 269 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/zh_Hant/
2023-07-25 15:25:42 +00:00
YanisBft a150d50775 Add button to generate random color (#403) 2023-07-13 21:54:10 +02:00
Misode d9f7fe0ab4 Attempting to fix #399 2023-07-04 00:55:43 +02:00
Misode 6f4fdd00da Fix #398 customized typo 2023-07-04 00:45:15 +02:00
Misode 64197827e0 Fix cherry trunk placer int provider weirdness 2023-06-25 16:49:38 +02:00
Misode e0cd0638f8 Add more debug info for backup fetch 2023-06-25 16:15:50 +02:00
Misode f7255f6f84 Add "new" badge and store seen state 2023-06-23 02:59:29 +02:00
Misode 08581889d2 Add structure set preview 2023-06-23 00:36:36 +02:00
Misode e519f1c757 Make 1.20 the new default version 2023-06-21 04:16:21 +02:00
Misode e14d7ea867 Fix #346 offset field in block predicates 2023-06-21 03:35:51 +02:00
Misode 7d66e77da7 Fix article external link style 2023-06-21 03:03:56 +02:00
Misode 15d6e621f7 Add what's new page 2023-06-21 02:31:35 +02:00
Misode 9b6233ce23 Add instructions to install customized data pack 2023-06-20 19:23:42 +02:00
Misode f104f89acf Add icon for customized worlds 2023-06-20 04:43:53 +02:00
Misode 0fdfaffc13 Add help tooltips to customized 2023-06-20 04:18:40 +02:00
Misode 983782b1f8 Fix min_y and height not being updated in noise settings 2023-06-20 03:41:42 +02:00
Misode eee4930dee Update supporters and contributors 2023-06-20 03:34:09 +02:00
Misode 88d15173a0 Update mcschema 2023-06-20 03:18:52 +02:00
Misode 806b340047 Fix #388 hackfix to support switching biome source type 2023-06-19 02:50:32 +02:00
Misode 8951987986 Fix #391 workaround for MC-252369 2023-06-18 21:59:15 +02:00
Misode 91199f9897 Fix outdated pack format for 1.20 2023-06-18 21:02:08 +02:00
Misode 71465c9a8c Fix #390 typo in buried treasures structure set 2023-06-18 16:18:03 +02:00
Misode ebbac50739 Add emerald ore 2023-06-16 13:38:20 +02:00
Misode 653f289caa Fix issue with rarity ores + improve error reporting 2023-06-16 13:28:45 +02:00
Misode 6114352d19 Fix carver caves not being generated 2023-06-16 05:27:47 +02:00
Misode 64140aec92 Customized worlds (#387)
* Customized tool UI

* Working version of the customized generator

* Error reporting and only allow 1.20 for now
2023-06-16 04:18:33 +02:00
Misode 9e68e0495b Add offset input field to density previews 2023-06-12 03:25:35 +02:00
Misode 42e8da47f7 Special support for obsolete tags 2023-06-07 19:44:38 +02:00
dependabot[bot] a471c93a22 Bump vite from 3.2.4 to 3.2.7 (#381)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 3.2.4 to 3.2.7.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v3.2.7/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v3.2.7/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-07 01:06:05 +02:00
Misode 9d1a4326e9 Fix issue with navigating back from version page 2023-06-07 01:04:07 +02:00
Misode 40fbef75b8 Fix card styles 2023-06-05 17:30:13 +02:00
Misode 28fa97db0b Add missing loot context types archaeology and advancement_location 2023-06-05 00:32:19 +02:00
Misode c363853624 Hide some versions on generator cards 2023-06-04 18:03:25 +02:00
Misode ff835d7730 Add new 1.20 changes 2023-06-04 17:35:03 +02:00
Misode 1e607eae7b Update contributors 2023-06-04 16:53:03 +02:00
Misode c098e1fa4d Fix #365 add missing type specific predicates 2023-06-04 16:52:52 +02:00
Misode a78bb6c2a4 Fix #379 handle unknown block colors in noise settings preview 2023-05-29 22:42:23 +02:00
Misode 97e9961919 Fix #376 Catch invalid resource locations in loot tables 2023-05-25 13:37:18 +02:00
Misode be05a3af5c Update contributors 2023-05-25 12:33:42 +02:00
Misode 626b22fee7 Fix #370 Pass biome configuration to noise settings preview 2023-05-12 01:09:12 +02:00
Misode e2ba70cdac Fix #367 Round constant number providers 2023-05-12 01:00:32 +02:00
Misode 1e06e03324 Fix #372 Catch JSON errors in lore when rendering tooltip 2023-05-12 00:50:09 +02:00
なまけもの aae7d26d3d Translated using Weblate (Japanese)
Currently translated at 98.5% (265 of 269 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/ja/
2023-05-07 15:02:59 +00:00
Misode ae0a9101f7 Fix a few missed things 2023-05-03 21:26:00 +02:00
Misode 7412cf565c Update mcschema 2023-05-03 21:13:56 +02:00
Neylz a4ab9b6ae6 Translated using Weblate (French)
Currently translated at 100.0% (269 of 269 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/fr/
2023-04-23 16:03:02 +00:00
Misode 47e716df8a Add 1.20 2023-04-07 01:07:51 +02:00
Misode 80edff8d40 Add reference item modifier 2023-04-07 00:25:22 +02:00
Misode a3d8dd5de3 Update deepslate: optimize multinoise preview 2023-04-07 00:13:35 +02:00
Jerozgen 5072bdee70 Translated using Weblate (Russian)
Currently translated at 99.6% (268 of 269 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/ru/
2023-04-06 22:02:55 +00:00
Misode ccee5aa695 Update contributors 2023-04-05 23:24:20 +02:00
Misode 9cfbf17320 Fix #359 handle incorrect display names in tooltips 2023-04-05 23:16:45 +02:00
Misode fb6d44f28a Fix #361 damage predicate changes + template pool fixes 2023-04-05 22:39:25 +02:00
Misode 6a68ac6561 Update contributors 2023-03-20 17:28:01 +01:00
tutur dudur 51bde9c975 Translated using Weblate (French)
Currently translated at 100.0% (230 of 230 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://weblate.spyglassmc.com/projects/misode-github-io/web-app/fr/
2023-03-20 12:02:53 +00:00
CavaleiroDev 0adf6ba31c Translated using Weblate (Portuguese)
Currently translated at 40.0% (92 of 230 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://localization.spyglassmc.com/projects/misode-github-io/web-app/pt/
2023-03-20 12:02:53 +00:00
なまけもの c0e63c346c Translated using Weblate (Japanese)
Currently translated at 100.0% (230 of 230 strings)

Translation: Misode's Data Pack Generators/Web App
Translate-URL: https://localization.spyglassmc.com/projects/misode-github-io/web-app/ja/
2023-03-20 12:02:53 +00:00
Misode 2e1f104f4a Make 1.19.4 the default 2023-03-20 03:25:22 +01:00
Misode cdf369442e Add contributors list 2023-03-20 03:17:02 +01:00
Misode a2feb3675c Fix #349 west face of transformation cube 2023-03-19 19:32:37 +01:00
Misode 251ddf3201 Add share loading symbol 2023-03-19 18:17:28 +01:00
Misode d6bce8b24a Don't overwrite when key already exists in map 2023-03-09 21:28:18 +01:00
Misode e50a6a04be Apply svdDecompose fixes from 1.19.4-pre4 2023-03-08 22:09:14 +01:00
AlexRahvalov 4502725bf8 Update ru.json (#350)
I sorted some translations alphabetically.
Added missing translations
2023-03-03 00:49:36 +01:00
Misode 2137b2fa8d Fix #272 split generator page 2023-02-27 09:12:42 +01:00
Misode 6ee0c3b8bb Update supporters 2023-02-23 20:48:14 +01:00
Misode dd55fc5dc6 Add axis-angle rotation mode 2023-02-16 01:22:16 +01:00
Misode 9c2c1bbfd0 Add copy buttons for transformation tool 2023-02-15 21:49:50 +01:00
Misode b7d9b83491 Fix #327 Implement HideFlags 2023-02-14 19:02:30 +01:00
Misode db8a46f2a3 Fix #329 Preserve white space in item tooltips 2023-02-14 18:33:07 +01:00
Misode 99b74961e9 Use deepslate matrix abstraction 2023-02-14 18:24:30 +01:00
Misode 50d84d07b3 Fix #338 Add damage types 2023-02-13 16:07:34 +01:00
Misode b47841870d Add cube texture to transformation tool 2023-02-09 22:51:58 +01:00
Misode 98915fe089 Fix transformation reset buttons not updating mesh 2023-02-09 20:56:04 +01:00
Misode 8050e5cd74 Make matrix editable + add note about bugged behavior 2023-02-09 20:40:42 +01:00
Misode 03ddf6011b Initial working version of transformation preview
- missing ability to modify matrix
- sdvDecompose is still probably wrong
- missing ability to edit rotations using axis + angle
2023-02-09 18:03:15 +01:00
Misode 106323186c Try to get around version caching 2023-02-08 21:25:36 +01:00
Alex Rahvalov e9da17aba6 Update ru.json (#334)
Added missing localization.
Corrected translation
2023-02-07 03:46:54 +01:00
Misode 185de33a3b Update deepslate version 2023-02-03 00:12:55 +01:00
Alex Rahvalov b5a84d8b4c Update ru.json (#331)
Added missing localization:
  "project.new",
  "project.download",
  "project.no_files",
  "project.show_resources",
  "project.save",
  "reset_default",
  "restore_backup",
  "switch_project",
  "switch_version",
2023-02-02 22:12:04 +01:00
Misode 1b6994d5aa Add 23w04a schemas
- trim materials and patterns
- paletted permutations
- smithing recipes
2023-01-30 04:13:17 +01:00
Misode 0e4707c734 Fix typo in armor trims guide 2023-01-30 02:40:09 +01:00
Misode 678b15e937 Fix #324 apply text component base correctly 2023-01-26 17:36:48 +01:00
Misode 0a72ddd632 Add blockstate and model previews 2023-01-26 16:41:09 +01:00
Misode d9c8eb17d7 Add top-down view to density function preview 2023-01-26 13:05:09 +01:00
Misode 00029a2010 Voxel rendering + refactor interactive canvas (#322)
* Add voxel rendering to density function preview

* InteractiveCanvas component

* Use interactive canvas for noise preview

* Use interactive canvas for noise settings preview

* Extract common iterateWorld2D logic

* Use InteractiveCanvas2D for biome source preview

* Display final density in noise settings preview hover

* Move remaining preview code

* Hide noise router info for checkerboard and fixed

* Add higher resolution biome map

* User interactive canvas for decorator preview
2023-01-26 01:21:02 +01:00
Misode 23b3046dee Make trimmable axe models handheld 2023-01-25 05:38:33 +01:00
Misode e67945fab2 Add a section on how to add a custom trimmable item 2023-01-25 05:18:06 +01:00
Misode 53cdc68ae6 Add armor trim guide 2023-01-25 04:14:15 +01:00
Misode 7ef0f52d27 Add 1.19.4 support (23w03a) 2023-01-19 03:35:06 +01:00
dependabot[bot] 3cfcc0f224 Bump json5 from 2.2.0 to 2.2.3 (#320)
Bumps [json5](https://github.com/json5/json5) from 2.2.0 to 2.2.3.
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)
- [Commits](https://github.com/json5/json5/compare/v2.2.0...v2.2.3)

---
updated-dependencies:
- dependency-name: json5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-10 11:50:19 +01:00
Misode 0ecc69a861 Retry fetching from jsdelivr if github fails 2023-01-07 11:55:28 +01:00
Misode e1e9f6fa9c Fix typo in analytics 2023-01-03 23:11:11 +01:00
Misode 5c9fa1eaaf Fix #314 Make 1.19.3 the default version 2022-12-23 18:26:19 +01:00
Misode 882177cd46 Fix #313 error in heightmap types guide 2022-12-21 20:40:55 +01:00
Misode 212aacb45b Merge branch 'master' of https://github.com/misode/misode.github.io 2022-12-15 18:48:11 +01:00
Misode fe30efd020 Fix #312 handle null text component base 2022-12-15 18:48:08 +01:00
dependabot[bot] 0bd6d3679c Bump qs from 6.5.2 to 6.5.3 (#311)
Bumps [qs](https://github.com/ljharb/qs) from 6.5.2 to 6.5.3.
- [Release notes](https://github.com/ljharb/qs/releases)
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.5.2...v6.5.3)

---
updated-dependencies:
- dependency-name: qs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-14 00:41:21 +01:00
Misode cbdf81d969 Show weight of loot entries when collapsed 2022-12-14 00:25:20 +01:00
Misode f13c2f36f9 Don't show worldgen button on non-worldgen guides 2022-12-08 01:57:27 +01:00
Misode 21e3f09865 Add to sitemap 2022-12-04 23:27:37 +01:00
Misode 9b482fa654 Improve Minecraft versions in title 2022-12-04 23:17:17 +01:00
Misode ca1135a8fe Update article overrides 2022-11-29 01:19:38 +01:00
Misode 60950c4e9a Update vite to v3 2022-11-29 01:06:32 +01:00
Misode 3e8a193e24 Add supporter 2022-11-28 23:29:08 +01:00
Misode 98a4afa18c Move enchantments logic to deepslate 2022-11-28 23:24:14 +01:00
Misode 9eb01cc1f1 Add tooltips for potion effects 2022-11-25 14:16:35 +01:00
Misode 0b6bdb1d7a Fix #307 Don't use deepClone for ItemStacks 2022-11-24 06:04:07 +01:00
Misode cd4ef6640a Add more info to the generated crash report 2022-11-23 08:52:22 +01:00
Misode b165d551e4 Render items with custom colors + update deepslate 2022-11-23 05:26:08 +01:00
Misode 1f24d2cae1 Add giscus config 2022-11-17 00:06:23 +01:00
Misode 6b3b52071d Fix giscus background 2022-11-16 23:57:02 +01:00
Misode 7bc51d38f7 Add version 1.19.3 (atlas generator, feature flags)
Fixes #304
2022-11-16 19:06:14 +01:00
Misode 0d76ff9cba More correct implementation of assigning slots 2022-11-11 17:44:12 +01:00
Misode 71aa886d9a Fix #303 filter items with count of 0 2022-11-10 22:03:13 +01:00
Misode 0fb3a7c4b9 Option to show final density visualization 2022-11-10 21:33:27 +01:00
Misode d07196611c Remember colormap 2022-11-10 03:59:18 +01:00
Misode 3dcb1d2352 Add configurable color maps for noise and density preview 2022-11-10 03:42:55 +01:00
Misode e89cdfb0ad Show density/noise value at cursor (#282)
* Fix #277 WIP show density at cursor

* Correctly implement hovered value for noise and df previews
2022-11-10 02:01:50 +01:00
Misode 947e44224d Fix #300 and fix #302 update mcschema 2022-11-09 21:25:27 +01:00
Misode 7607e1fccf Add ko-fi supporters 2022-11-09 19:31:41 +01:00
Misode 6312dfbc71 Add fixed bugs tab to versions 2022-11-09 19:08:25 +01:00
Misode 46347f1974 Switch to cloudflare worker for share links 2022-11-02 20:00:10 +01:00
Misode a3af48f654 Fix #291 update mcschema 2022-10-29 05:22:31 +02:00
Misode 518fa82b34 Update mcschema 2022-10-29 05:16:14 +02:00
Misode e95ed0e629 Modernize deployment 2022-10-26 02:15:40 +02:00
Misode 2d33fbb0b6 Fix #299 Handle loot table entries without name 2022-10-26 02:00:24 +02:00
Misode 72d80e1158 Fix #298 don't cache atlas UV mapping for now 2022-10-20 20:48:10 +02:00
Misode f6b6a6bf7d Fix #295 handle invalid values in set_count 2022-10-20 05:22:38 +02:00
Misode 5fe7121ea9 Fix #297 improve fake name translation and fix crash 2022-10-20 05:03:03 +02:00
Misode e78a317260 Add a list of sponsors ❤️ 2022-10-20 04:22:40 +02:00
Misode f9e79d614a Release target is no longer given + fix changes on homescreen 2022-10-19 21:19:38 +02:00
Misode de047621c9 Minecraft live is over 2022-10-16 22:05:33 +02:00
Misode 02e28d4d4b Advertise minecraft live bingo 2022-10-15 07:23:16 +02:00
Misode 3e8bc21a1e Remember preview panel open state 2022-10-15 07:03:51 +02:00
Misode f309eef176 Fix not correctly enchanting books 2022-10-13 02:31:44 +02:00
Misode ac259bb83e Add loot table preview (#293)
* Initial loot table preview + item display counts

* Add loot functions without NBT

* Add loot conditions

* Render item tooltips with name and lore components

* Remove debug text component

* Disable advanced tooltips in the tree

* Minor style fixes

* Add item slot overlay and tweak tooltip offset

* Fix some items not rendering

* Translate item names and text components

* Translate params + more functions and tooltips

* Add durability bar

* Configurable stack mixing

* Correct tooltip background and border

* Add enchanting

* Enchantment glint

* Configurable luck, daytime and weather

* Improve tooltip spacing

* More tooltip spacing improvements

* Remove debug logging
2022-10-13 02:05:33 +02:00
Misode 86687ea6b9 Improve item display (#283)
* Refactor item display to separate component

* Load assets and render item models

* Cache rendered items
2022-10-04 19:15:28 +02:00
dependabot[bot] 681dc6a273 Bump vite from 2.9.6 to 2.9.13 (#285)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 2.9.6 to 2.9.13.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v2.9.13/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-21 01:29:05 +02:00
piw-piw 61a1e21206 Translated using Weblate (Polish)
Currently translated at 9.5% (21 of 221 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/pl/
2022-09-05 22:14:27 +00:00
なまけもの 6d7d655b7a Translated using Weblate (Japanese)
Currently translated at 100.0% (221 of 221 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/ja/
2022-08-20 00:14:29 +00:00
Misode f6846cacb5 chat and narration are required 2022-08-15 21:44:32 +02:00
Misode 562a97d559 Fix #274 y clamped gradient illustration error 2022-08-14 18:09:31 +02:00
Misode fdb38f0c19 Fix #271 Typo in spread_rounds translation key 2022-08-14 17:56:19 +02:00
Misode fa4b93613d 1.19.1 chat type changes 2022-08-14 17:43:14 +02:00
Ry177 33cc771aed Translated using Weblate (Japanese)
Currently translated at 58.8% (130 of 221 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/ja/
2022-08-06 01:34:15 +00:00
ikafly144 1c40298c8a Translated using Weblate (Japanese)
Currently translated at 56.1% (124 of 221 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/ja/
2022-08-04 22:21:14 +00:00
Ry177 4de04ddc61 Translated using Weblate (Japanese)
Currently translated at 56.1% (124 of 221 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/ja/
2022-08-04 22:21:14 +00:00
Theaustudio c6182d69e3 Translated using Weblate (French)
Currently translated at 99.5% (220 of 221 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/fr/
2022-07-25 00:33:06 +00:00
No NOréo c43ec0a2b8 Translated using Weblate (French)
Currently translated at 97.7% (216 of 221 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/fr/
2022-07-22 09:39:55 +00:00
Misode af10267eb5 Add option to change Y for biome map 2022-07-14 05:22:59 +02:00
Misode 8580370c8c Fix #260 Pin 1.19 version until 1.19.1 is released 2022-07-14 04:32:18 +02:00
Misode 18435c886f Fix #259 Add a default to glyph providers 2022-07-14 04:19:51 +02:00
lakejason0 eeb4a4b132 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (221 of 221 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-cn/
2022-07-12 04:04:55 +00:00
lakejason0 60cf10f866 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (221 of 221 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-cn/
2022-07-11 11:26:39 +00:00
Misode 6a3bc897d0 Require .png suffix for font textures 2022-07-11 04:07:09 +02:00
Misode fdb8874454 Add font generator 2022-07-11 03:37:10 +02:00
Misode 414a361c65 Fix custom noise settings not working in biome preview 2022-07-10 22:38:55 +02:00
Felix14-v2 d26ddb4676 Translated using Weblate (Russian)
Currently translated at 55.2% (122 of 221 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/ru/
2022-07-09 18:47:10 +00:00
Misode 91580c9bf1 Add latest article overrides 2022-07-08 19:44:58 +02:00
Misode 5890bdc593 Add 1.19 biome colors 2022-07-06 01:24:12 +02:00
Misode da1e6245e6 Remove deepslate-rs dependency 2022-07-06 01:12:10 +02:00
Misode f5ae1719e3 Improve biome map (#246)
* Start biome map rewrite

* Remove climate layers and add end biome source

* Update to use RandomState

* Make biome map work for past versions

* Remove old biome map code

* Implement multi noise presets and fix caching

* Update deepslate

* Fix biome hover

* Fix #190 biome map diagonal lines
Also increases performance by making better use of the biome cache

* Add proper zoom limit
2022-07-06 00:11:16 +02:00
Frost-ZX 46587edcbe Translated using Weblate (Chinese (Simplified))
Currently translated at 76.3% (158 of 207 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-cn/
2022-07-03 15:37:38 +00:00
Misode c5659243cc Set structure max distance default to 80 2022-07-03 17:11:28 +02:00
Misode c335553a25 Fix navigation margin 2022-07-02 14:05:56 +02:00
Misode 12ad631056 Fix reusing result-list class 2022-07-02 14:04:09 +02:00
Misode b09ed80d20 Hide changelog versions on medium screen 2022-07-02 02:06:29 +02:00
Misode 231b032029 Use masonry layout for homepage 2022-07-02 01:51:44 +02:00
Misode d0bae089d1 Improve homepage (#245)
* Improve how generators are listed on home

* Add some icons for generators

* Remove debug

* Refactor cachedFetch and use generated changelogs

* Add limit to how many changes are shown by default

* Add more generator icons

* Refactor cards

* Fix generator icons for light theme

* Add more worldgen icons

* Add remaining generator icons

* Refactor navigation and badges style

* Group on homepage for guides and tools

* Fix header button style

* Add versions and technical changelog to homepage

* Make it clear that not all changes could be documented
2022-07-01 23:48:38 +02:00
Apolline Ael 29031bb375 Translated using Weblate (French)
Currently translated at 98.5% (204 of 207 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/fr/
2022-06-29 16:40:26 +00:00
Misode cdf3ede45b Add pack.mcmeta when downloading projects 2022-06-28 18:48:36 +02:00
Misode c4afe7bf90 Download pack.mcmeta with correct file name 2022-06-26 05:40:50 +02:00
Misode 1e2ca31c6b Change placed features guide ID for the final time 2022-06-26 05:24:36 +02:00
Misode f9714b8086 Change placed feature guide ID 2022-06-26 05:22:05 +02:00
Apollo4O4 49d61227b3 Added guide on placed features (#250)
* added guide on placed features

* Change wording

* Add a section to explain placement modifiers

Co-authored-by: Misode <Misoloo64@gmail.com>
2022-06-26 05:17:40 +02:00
Misode ccaac6f6ba Close #249 Add Korean 2022-06-23 04:32:45 +02:00
류세영 b1967cb3b5 Translated using Weblate (Korean)
Currently translated at 100.0% (207 of 207 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/ko/
2022-06-23 00:27:55 +00:00
Misode 1a54122371 Fix style of sounds page and version navigation 2022-06-18 17:57:37 +02:00
Misode f891a1ed5b Add heightmap types guide 2022-06-18 03:42:58 +02:00
Misode c8813580b2 Add info for terrain_adaptation field 2022-06-18 02:38:54 +02:00
Misode f06638336a Add block field to multiface_growth feature 2022-06-17 21:32:17 +02:00
Misode e2281e0d36 Register project noises and DFs to use in previews 2022-06-16 17:54:45 +02:00
Misode 561cd341a1 Update to esm, update deepslate (#244) 2022-06-16 00:58:14 +02:00
Misode cbef6ef41b Better handling of pack.mcmeta in projects 2022-06-14 17:27:59 +02:00
Misode 9cb323e80c Store project panel open state 2022-06-14 16:56:03 +02:00
Misode 90eac0f9b8 Project tree view and creation (#203)
* Implement creating and importing new projects

* Add downloading a zip of a project

* Project validation (WIP)

* Add project side panel, remove project pages

* Project file saving

* Add file tree actions to rename and delete

* Fix file creation auto focus

* Add button to save file from menu

* Add project creation

* Fix specificity on version switcher button

* Update default version to 1.19

* List project files by type, remember project and delete project
2022-06-14 16:48:55 +02:00
Misode 4942729e7c Prevent dimension type inlining in 1.19 2022-06-12 22:09:12 +02:00
Misode a012392672 Fix light theme support 2022-06-12 21:05:28 +02:00
Misode f944f4b617 Make version switcher more obvious 2022-06-12 20:52:17 +02:00
edayot 01a95dd9d4 Translated using Weblate (French)
Currently translated at 66.6% (80 of 120 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/fr/
2022-06-10 11:40:17 +00:00
Misode a3295ac202 1.19 release 2022-06-07 17:49:51 +02:00
Misode b9d01e34a0 Fix #243 2022-06-06 17:05:37 +02:00
Misode 4379cb9bba Add footer with donate link 2022-06-06 03:32:59 +02:00
Misode 986cca9191 Show item textures for loot table entries 2022-06-01 03:06:49 +02:00
Misode 7e54c0f4f3 Add noise router table 2022-05-30 23:49:42 +02:00
Misode b59cfcac69 Fix #238 noise climate octaves 2022-05-30 03:46:48 +02:00
Misode f5904937a9 Fix #240 add monster spawn settings 2022-05-30 03:35:42 +02:00
Misode ba4136ec85 Fix noise router guide for 1.18.2 2022-05-26 06:05:36 +02:00
Misode d9b146f00f Split noise router and density function guides 2022-05-26 05:57:23 +02:00
Misode 6144459071 Add more future proof cache patching system 2022-05-25 04:38:46 +02:00
Misode 32e6d5c167 Close #236 add tag generators 2022-05-25 03:57:55 +02:00
Misode 781d545962 Put tags and search of changelogs and versions in URL 2022-05-21 02:45:32 +02:00
Misode 2ebba08d4b Configurable biome colors in preview
- add Store context
- add useLocalStorage
- color utils
2022-05-14 19:39:48 +02:00
Misode 114164c740 Add partners, Immersive Weathering block growth (#231)
* Add partners: Immersive Weathering block growth

* Fix block state and modded block IDs

* Add categories

* Add custom rule tests

* Add missing translation
2022-05-14 02:41:01 +02:00
Misode b2d7ee49c6 Improve article link heuristics and overrides 2022-05-13 02:15:25 +02:00
Misode cd0c37c5dd Add button to generate new UUID 2022-05-12 18:34:55 +02:00
Misode 9d0f715a71 Fix #228 and issue with set_attributes 2022-05-12 17:24:52 +02:00
Misode e2bcf2d1a7 Improve version and article linking 2022-05-12 16:58:10 +02:00
Misode ad13cc131b Add inline code highlighting 2022-05-11 18:17:46 +02:00
Misode 5599cf1b4f Add guides to sitemap 2022-05-11 15:40:38 +02:00
Misode 77a7b94cb5 Add contributing instructions to the readme 2022-05-11 01:00:44 +02:00
Misode 1dd724cec4 Add table of contents for guides 2022-05-10 18:26:43 +02:00
Misode 589dc5a0dd Add density function guide 2022-05-10 17:44:23 +02:00
Misode 86cdde9d70 Add feature order cycle guide 2022-05-09 22:45:45 +02:00
Misode 1486a3f977 Add back copy and download events for UA 2022-05-09 18:10:40 +02:00
Misode 8e9cc5c7ff Don't send use_locale event 2022-05-09 17:59:41 +02:00
Misode af31f5cfbd Better custom dimension tracking 2022-05-09 03:50:29 +02:00
Misode 15dc9bd4ab Improve versions in title 2022-05-09 03:38:07 +02:00
Misode 9e12bbf558 Fix history index tracking 2022-05-09 03:16:15 +02:00
Misode 2593172855 Some dimensions were not set on page load 2022-05-09 02:38:39 +02:00
Misode e63b4839dc Add GA4 events 2022-05-09 02:20:56 +02:00
Misode 177e32c000 Add GA4 tag 2022-05-09 00:21:14 +02:00
Misode 1693eb2a3b Prevent duplicate deepslate loading and fix for 1.18 2022-05-08 17:19:48 +02:00
Misode a432479672 Refactor generator to prevent duplicate reloading 2022-05-08 16:24:39 +02:00
Misode 2772d967e0 Add useAsync hook 2022-05-08 05:29:16 +02:00
Misode 4e51d41c54 Refactor: create deepslate abstraction 2022-05-08 03:18:07 +02:00
Misode 1871b977fa Code-split comment-json 2022-05-07 01:11:39 +02:00
Misode bd5679f44a Update TS version and code-split deepslate 2022-05-07 00:40:16 +02:00
Misode bcb2ae3f85 Code-split brace 2022-05-06 18:03:52 +02:00
Misode fef005de2c Code-split howler 2022-05-06 17:31:40 +02:00
Misode 3ed7fd8bdd Code-split mcschema imports per version 2022-05-06 16:53:07 +02:00
Misode 690e2f60bf Only import necessary highlight.js files 2022-05-06 16:25:06 +02:00
Misode ea7e8802c4 Add .nojekyll 2022-05-06 06:51:08 +02:00
Misode 6f27465c78 Add guides (#224)
* Add guides

* Add versioning to guides

* Guides: special variables and nested expressions

* Add guides page to vite build

* Add search and hash hooks, guide tags and headings

* Improve guides list and filtering

* Add 1.19 download link
2022-05-06 06:37:27 +02:00
Misode c788277450 22w17a and 22w18a, add chat type 2022-05-04 21:48:24 +02:00
Misode 869f7c8f95 Fix #223 don't parse noise settings for dimension preview 2022-05-01 02:18:21 +02:00
Misode db2b89cdf3 Add text component generator page 2022-04-15 21:20:27 +02:00
Misode 1ac0d871cf 22w15a 2022-04-13 23:15:25 +02:00
Misode 21c3fbae93 Add button to generate new structure salt 2022-04-08 20:33:04 +02:00
Misode 45b87de81b Fix #221 add root provider 2022-04-08 18:43:20 +02:00
Misode 5d22048bc8 Fix #178 ability to restore last backup 2022-04-08 01:30:14 +02:00
Misode ee713cfe00 Fix #220 add catType 2022-04-08 00:33:38 +02:00
Misode e603ba12db 22w13a and 22w14a 2022-04-07 00:44:07 +02:00
Misode a118358f08 Actually fix exploration map function 2022-04-05 03:08:59 +02:00
JeffSyu 61be424ec6 Translated using Weblate (Chinese (Traditional))
Currently translated at 77.5% (93 of 120 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-tw/
2022-04-03 07:31:05 +00:00
Misode bcef40475a Fix build 2022-03-31 15:49:45 +02:00
Misode a4cfbc0d99 Fix #215 2022-03-30 23:56:41 +02:00
なまけもの 2afbee8cc1 Translated using Weblate (Japanese)
Currently translated at 100.0% (120 of 120 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/ja/
2022-03-27 23:21:49 +00:00
Misode 6bbf9c1d6e Update dependencies 2022-03-24 22:23:20 +01:00
Misode 8a5bdd3939 Show message on invalid versions 2022-03-24 22:22:19 +01:00
Misode fc45dfa6ff Fix registries cache not being invalidated 2022-03-24 22:04:05 +01:00
Misode ef5d2b81e9 22w12a 2022-03-24 22:01:12 +01:00
Misode 84ca07d859 Clear share ID when changing version 2022-03-19 21:48:08 +01:00
Misode 68f525d702 Share if preview is shown 2022-03-19 21:37:03 +01:00
Misode a5a08fc935 Implement link sharing (#213)
* Implement link sharing

* Share default

* Compress and base64 encode data

* Better error messages

* Fix build

* Only change version when it's different
2022-03-19 19:26:39 +01:00
Misode 03e9c53d70 Fix wrong ref config for 1.18.2 2022-03-19 19:19:48 +01:00
Misode 713fcfad61 Translation keys for 22w11a 2022-03-19 18:30:39 +01:00
Misode 27680a5a95 Update mcschema 2022-03-19 17:37:13 +01:00
ChapterII 93beb29058 Translated using Weblate (Chinese (Simplified))
Currently translated at 95.8% (115 of 120 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-cn/
2022-03-19 08:52:37 +00:00
Misode 4d91c4cb04 22w11a, first 1.19 version 2022-03-18 02:14:37 +01:00
Misode 687ed5c75c Create html for versions page 2022-03-16 02:44:34 +01:00
Misode 1b91485bf1 Giscus (#209)
* Test giscus on homepage

* Use @giscus/react and support light theme

* Track prefers color scheme

* Create a discussion tab for each version
2022-03-16 02:39:33 +01:00
Misode cf41b5cdac Fix #207 don't load noise router when preview is hidden 2022-03-11 14:55:10 +01:00
Misode e91798ff26 Remove debug throws 2022-03-11 02:03:29 +01:00
Misode 7ab0ec2e7e Expose error stack traces (#211) 2022-03-11 00:05:24 +01:00
Misode 4122991b3b Set default version to 1.18.2 in index.html 2022-03-11 00:02:46 +01:00
Misode 48fdd57caf Fix for browsers without bigint support (#210)
* Attempt to prevent bigint errors

* Define bigint in index.html

* BigInt64Array

* Maybe now?
2022-03-10 23:57:08 +01:00
Misode 68b7139b9d Merge branch 'master' of https://github.com/misode/misode.github.io 2022-03-08 18:10:15 +01:00
Misode b8ed08bebd Update package-lock 2022-03-08 18:10:11 +01:00
catter1 43b393d175 Added Spanish to locale config.json (#206) 2022-03-08 03:01:33 +01:00
catter1 6f1addbf16 Translated using Weblate (Spanish)
Currently translated at 100.0% (120 of 120 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/es/
2022-03-07 22:14:54 +00:00
catter1 45a5173640 Translated using Weblate (Spanish)
Currently translated at 90.0% (108 of 120 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/es/
2022-03-07 21:20:56 +00:00
Misode 2e4edc67ab Merge branch 'master' of https://github.com/misode/misode.github.io 2022-03-06 22:29:07 +01:00
Misode 030f64dc18 Fix #204 Add noise router ridges 2022-03-06 22:29:03 +01:00
catter1 3f92da3668 Translated using Weblate (Spanish)
Currently translated at 45.0% (54 of 120 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/es/
2022-03-06 02:26:27 +00:00
Misode 1c51fb4e66 Set 1.18.2 as the default version 2022-03-05 03:55:18 +01:00
Misode 62e3b98829 Remove ads from sounds page 2022-03-02 02:42:12 +01:00
Misode cb24e61cf0 Add versions explorer page 2022-03-02 02:34:41 +01:00
Misode fd46bc4360 Merge branch 'master' of https://github.com/misode/misode.github.io 2022-02-28 15:24:06 +01:00
Misode 36a62e2e75 Update mcschema 2022-02-28 15:24:04 +01:00
Mastar a38caea83c Translated using Weblate (Spanish)
Currently translated at 40.0% (48 of 120 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/es/
2022-02-27 20:41:57 +00:00
Misode 9f49736ae9 Fix hiding too much from the tree 2022-02-26 22:24:12 +01:00
Misode b5ddb9666b Add toggle to disable brace editor 2022-02-26 22:00:45 +01:00
Misode 297d309574 Fix build 2022-02-26 21:18:01 +01:00
Misode 8f496e6dbf Update mcschema version for 1.18.2-pre3 2022-02-26 21:07:59 +01:00
Misode 0c9d6b9cc8 Fix mcmeta cache not being refreshed 2022-02-26 05:14:20 +01:00
Misode 7806aa6ad6 Visualizations for 1.18.2 and density functions 2022-02-26 04:34:19 +01:00
Misode 50e418a168 Fix superflat schema 2022-02-20 01:42:00 +01:00
Misode cdc883904b 1.18.2-pre1 fixes 2022-02-18 23:42:04 +01:00
Misode e3f2643d25 Fix misaligned nav buttons 2022-02-18 22:55:53 +01:00
Misode 1812d5d2a6 1.18.2-pre1 2022-02-18 22:54:00 +01:00
Misode d0355b2342 Fix prefers-color-scheme editor colors 2022-02-17 16:48:20 +01:00
Misode 554e2ee706 Fix ace editor tab size 2022-02-17 15:59:45 +01:00
Misode f76ea7f4f4 Use ace editor and remove output limit 2022-02-17 15:50:49 +01:00
Misode 2148eefa42 Show biome noises on hover to preview 2022-02-17 11:56:32 +01:00
Misode e6c0fb7fd9 Fix sharing presets 2022-02-14 04:09:05 +01:00
Misode 4f98f9aa9b Add noise caves to preview 2022-02-14 03:56:01 +01:00
Misode 5cfd54ebc3 Add auto scroll to noise settings preview 2022-02-13 04:20:55 +01:00
Misode 92ac80f465 Add surface rule visualizer 2022-02-13 04:02:52 +01:00
DreamMaker 0cf5af8795 Translated using Weblate (Chinese (Simplified))
Currently translated at 75.0% (90 of 120 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-cn/
2022-02-11 13:53:49 +00:00
Jerozgen a588261f85 Translated using Weblate (Russian)
Currently translated at 100.0% (120 of 120 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/ru/
2022-02-11 13:53:49 +00:00
Misode c44f259f35 Merge branch 'master' of https://github.com/misode/misode.github.io 2022-02-10 05:22:42 +01:00
Misode 05d364dab6 22w06a + fix #148 + fix #151 2022-02-10 05:22:39 +01:00
dependabot[bot] ded90773f2 Bump nanoid from 3.1.23 to 3.2.0 (#198)
Bumps [nanoid](https://github.com/ai/nanoid) from 3.1.23 to 3.2.0.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.1.23...3.2.0)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-28 02:03:14 +01:00
Misode 17e3165768 Add 1.15, 1.16 and 1.17 assets generators 2022-01-28 02:02:44 +01:00
Misode 623e38d98c Use mcmeta (#197)
* Simplify data fetching by using mcmeta

* Fetch sounds from mcmeta
2022-01-28 01:25:10 +01:00
fedorinanutshell ec432288e7 Translated using Weblate (Russian)
Currently translated at 89.1% (107 of 120 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/ru/
2022-01-27 18:45:32 +00:00
Misode 7b3369130c Support clamped_normal and weighted_list int providers in preview 2022-01-20 01:30:59 +01:00
Jerozgen 62d0169ac6 Translated using Weblate (Russian)
Currently translated at 65.8% (79 of 120 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/ru/
2022-01-19 22:42:59 +00:00
Misode 49ad887f03 Update world settings default 2022-01-19 00:07:19 +01:00
Misode 2fe120895c Fix #196 Reimplement placed feature preview 2022-01-18 23:41:11 +01:00
Misode c6c52ca41a Projects (#192)
* Add file save UI and drafts project

* Fix build

* Create SearchList component as abstraction

* Add project page and file tree view

* Create Locale context

* Create Theme context

* Create Version context

* Create Title context

* Create Project context

* Store current file in project context

* Fix issues when renaming file and implement deleting

* Style improvements

* Make all project strings translatable

* Fix z-index
2022-01-18 01:02:19 +01:00
dependabot[bot] cd318dc795 Bump marked from 3.0.8 to 4.0.10 (#195)
* Bump marked from 3.0.8 to 4.0.10

Bumps [marked](https://github.com/markedjs/marked) from 3.0.8 to 4.0.10.
- [Release notes](https://github.com/markedjs/marked/releases)
- [Changelog](https://github.com/markedjs/marked/blob/master/.releaserc.json)
- [Commits](https://github.com/markedjs/marked/compare/v3.0.8...v4.0.10)

---
updated-dependencies:
- dependency-name: marked
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* Bump @types/marked from 3.0.2 to 4.0.1

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Misode <Misoloo64@gmail.com>
2022-01-15 20:23:17 +01:00
ikafly144 8996090954 Translated using Weblate (Japanese)
Currently translated at 90.0% (108 of 120 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/ja/
2022-01-10 11:37:24 +00:00
Lukas Jost 643f9c9de4 Translated using Weblate (German)
Currently translated at 100.0% (83 of 83 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/de/
2022-01-07 01:33:17 +00:00
Misode aa4f72fb9b Block analytics during testing 2021-12-26 03:18:03 +01:00
Misode 136e0b8178 Fix #163 Hide source when preview is toggled 2021-12-26 03:02:22 +01:00
Misode ffb2949f05 Add E2E tests using Cypress 2021-12-26 02:48:21 +01:00
HalbFettKaese 1e4f82129a Translated using Weblate (German)
Currently translated at 96.3% (80 of 83 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/de/
2021-12-01 10:48:52 +00:00
Misode 2f23546e3e Fix build 2021-12-01 06:37:00 +01:00
Misode 2d10469c8e Fix noise settings preview for 1.18 2021-12-01 06:32:56 +01:00
Misode 22e0d17a0f Fix minY not being accounted when drawing noise settings 2021-12-01 00:43:58 +01:00
Misode 9f42ae58a2 Improve message for generator with a maxVersion 2021-12-01 00:17:22 +01:00
Misode 1ae95fcf78 Make 1.18 the default version 2021-11-30 23:53:35 +01:00
Misode 9342862410 Add 1.18 to the description of upgrader card 2021-11-30 16:26:43 +01:00
Misode 6da915fb3a Delete cs.json 2021-11-28 23:42:07 +01:00
Misode 092df31944 Preset -> Reference and Custom -> Inline 2021-11-28 23:39:15 +01:00
Misode 441213299e Clarify difference between placed and configured features 2021-11-27 04:22:35 +01:00
Erik Bednařík 0f059317bb Translated using Weblate (Slovak)
Currently translated at 79.5% (66 of 83 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/sk/
2021-11-24 16:54:12 +00:00
desbarmitar 7c4a9b8b8f Translated using Weblate (Portuguese)
Currently translated at 100.0% (83 of 83 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/pt/
2021-11-23 10:02:07 +00:00
Misode df06d13ca7 Fix preset not reloading in some cases 2021-11-21 04:05:25 +01:00
Misode 872a03d44a Include version in renderHtml context 2021-11-21 03:56:03 +01:00
Misode 43d1b7dbcc Add follow reference button for vanilla presets 2021-11-21 03:49:46 +01:00
Misode 08e5b36a62 Sync search parameters for presets 2021-11-21 03:19:11 +01:00
Misode 56b1a711a2 Add "type" to set_contents and set_loot_table functions 2021-11-20 23:46:04 +01:00
Misode 0e0255907c Add negative queries in changelog search 2021-11-20 01:01:09 +01:00
Misode 58fe2fa03a Add major version as tag in changelog 2021-11-20 00:48:28 +01:00
Misode b92113d48a 1.18-pre2 to 1.18-pre5 2021-11-19 22:27:45 +01:00
Misode b2654c99e4 Fix changing feature choice with new placed features 2021-11-13 18:53:52 +01:00
Misode d7a6523604 1.18-pre1 2021-11-13 03:56:34 +01:00
Misode 2d43f2f8c6 Show newest changes first 2021-11-11 20:03:45 +01:00
Misode b15f187ccc Parse and stringify JSON with comments (#187) 2021-11-08 20:45:10 +01:00
なまけもの de54aa9972 Translated using Weblate (Japanese)
Currently translated at 100.0% (83 of 83 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/ja/
2021-11-08 14:01:44 +00:00
Soffity 38b6d21d7b Translated using Weblate (Russian)
Currently translated at 98.7% (82 of 83 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/ru/
2021-11-07 23:53:26 +00:00
Jerozgen 001eb5566a Translated using Weblate (Russian)
Currently translated at 85.5% (71 of 83 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/ru/
2021-11-07 06:35:37 +00:00
Misode e664bea241 Alternative way to collapse terrain shaper and surface rules 2021-11-07 04:06:44 +01:00
Misode f67da3f7a1 Improve home page with separate data and resource pack cards 2021-11-06 01:06:33 +01:00
Misode a24c5d4c79 Support exporting YAML + minified 2021-11-05 02:47:53 +01:00
Misode fba80da273 Add resource pack generators: blockstates and model 2021-11-05 01:22:23 +01:00
Misode 6d8829ecde 21w44a 2021-11-03 23:01:53 +01:00
Misode acd52eac6b Fix alignment issue with btn menus 2021-11-03 02:35:47 +01:00
Misode 95097e6091 Move more stuff to services folder 2021-11-03 01:27:49 +01:00
Misode ce7baa571f Fix not being able to search for changes anymore 2021-11-02 02:56:42 +01:00
Misode 25351920e4 Add ability to sort changelog 2021-11-02 02:46:40 +01:00
Misode cc20cb7f7a Support multiple versions in technical changelog
- Better handling of article links
- Style improvements
2021-11-02 02:25:04 +01:00
Misode 582d5f4b1e Visual improvements to technical changelog 2021-10-31 20:45:22 +01:00
Misode 765f96372f Add Technical Changelog page 2021-10-31 18:22:10 +01:00
Misode bb1223df60 Track generator ID in custom dimension
Preparing to add back search parameters to share links
2021-10-30 17:34:54 +02:00
Misode b4d43c55bd Fix noise settings preview, use the terrain shaper 2021-10-30 04:44:25 +02:00
Misode 561f9a3956 Use terrain_shaper noise setting in visualization 2021-10-30 02:45:09 +02:00
Misode 3e4d8d7df5 Add noise visualizations to biome map 2021-10-29 02:28:55 +02:00
Misode c75c5b7d65 Use wasm to compute multi noise biome map (#181) 2021-10-28 18:47:19 +02:00
Misode 89354a9743 21w43a 2021-10-27 20:00:13 +02:00
Misode 794a094e7e Add noise preview 2021-10-21 02:32:11 +02:00
Misode 749a54802d 21w42a 2021-10-21 01:07:46 +02:00
Misode 97cfd918da Fix #180 download full output JSON 2021-10-17 15:44:41 +02:00
Misode 146764df95 Fix obscure error in useToggles 2021-10-14 00:45:06 +02:00
Misode ed0b415af5 21w41a 2021-10-14 00:18:58 +02:00
lakejason0 7a82594efc Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (83 of 83 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-cn/
2021-10-11 04:59:39 +00:00
lakejason0 949f91d58a Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (83 of 83 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (83 of 83 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-cn/
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-tw/
2021-10-09 16:35:46 +00:00
Misode 21f8ea5e6d Fix CSS error causing tooltip misalignment 2021-10-09 01:01:41 +02:00
Misode c5649799cc Fix #179 select closes immediately when unfocused 2021-10-09 00:55:51 +02:00
Misode 387c278353 21w40a 2021-10-09 00:18:13 +02:00
Vianney Veremme d0f5a9a7e0 Translated using Weblate (French)
Currently translated at 100.0% (83 of 83 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/fr/
2021-10-08 10:29:54 +00:00
Misode d46976ed11 Add sounds page to build and sitemap 2021-10-08 02:45:50 +02:00
Misode 79b3291d06 Add sounds explorer tool 2021-10-08 02:34:55 +02:00
SPWeblate c1de35b6c2 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/
2021-10-07 01:24:16 +00:00
Vianney Veremme 9d7f68036e Update and correction of fr.json (#177) 2021-10-07 03:22:11 +02:00
Misode 0ff7de3aea Fix #176 switching between choices 2021-10-06 00:02:06 +02:00
Misode d883459dba Fix url issue introduced in f43cb03 2021-10-05 00:07:26 +02:00
Misode 17ed93a182 Add recipe generator 2021-10-04 23:32:41 +02:00
Misode 6c6277217d Fix page titles and remove field settings page 2021-10-04 22:52:50 +02:00
Misode c7d5b06825 Add sitemap to build 2021-10-04 17:43:46 +02:00
Misode a014d7a5c7 21w39a 2021-10-01 00:01:28 +02:00
Misode c51acd34e7 Add duplicate list item action 2021-09-29 01:02:24 +02:00
Misode a0b7cb1c81 Fix not being able to change feature type 2021-09-29 00:30:47 +02:00
Misode e5d2c02fb3 Show nested feature decorators in a list (#173)
* Show nested feature decorators in a list

* Fix swapping decorator indices

* Move wrapper model creation to separate function

* Add setting string node on enter
2021-09-28 23:46:21 +02:00
Misode 96d934d592 Fix #170 and fix #171 by only updating strings onBlur 2021-09-27 23:56:10 +02:00
Misode 6d6939163d Fix error when adding to list 2021-09-25 18:53:43 +02:00
Misode e7e9b02ea7 Correctly update number nodes when model changes 2021-09-25 17:41:49 +02:00
Misode e239e013c6 Only render tree when locale has finished loading 2021-09-25 17:22:25 +02:00
Misode 2cb14a2c10 Add tooltips to all buttons and tweak hover colors 2021-09-25 07:10:54 +02:00
Misode 7db47938b8 Make list and map entries collapsible (#169)
* Make list entries collapsible

* Show errors in collapsed nodes and keep context of loot type

* Make map entries collapsible

* Add collapse-all functionality
2021-09-24 22:12:33 +02:00
Misode 1813a553db Fix biome preview 2021-09-24 13:29:14 +02:00
Misode 55f6ca58c0 Fix previews after wrapping lists 2021-09-24 06:00:27 +02:00
Misode d0d212f755 Better behavior of number input fields 2021-09-24 04:11:19 +02:00
Misode 6e4850d5a9 Memoize list entries and wrap model data 2021-09-24 03:47:15 +02:00
Misode b12e81fff0 21w38a 2021-09-24 01:00:44 +02:00
Misode 241d522932 Memoize tree nodes - Big performance improvements
Due to no key being available, list entries can't be memoized for now
2021-09-23 22:27:20 +02:00
Misode 56d6713776 Another issue with null 2021-09-23 17:07:25 +02:00
Misode f55a911079 Fix #157 and fix #167 2021-09-23 16:44:27 +02:00
Misode 0842eb8741 Simplify DOM by removing node-entry 2021-09-23 15:04:24 +02:00
Misode e696d6dd36 Bump ansi-regex 2021-09-23 13:47:32 +02:00
Misode 3b80334e2e Support 1.18 (experimental) snapshots (#158)
* Half support 1.18-experimental-snapshot-1

* Fetch 1.18 presets and improve rendering of lists

* Noise preview with deepslate

* Biome preview with deepslate

* Generalize canvas logic in one hook

* Simplify useCanvas

* Use mcschema for 1.18

* Improve noise settings preview controls

* Fix build

* Update deepslate and improve preview caching

* Cleanup, remove old preview code

* Couple seed between model and preview

* Limit output to improve performance + copy feedback
For the vanilla overworld dimension (200K lines),
it took 2+ seconds to write the output to the textarea

Now capped at 10K chars

* Add surface_relative_threshold to decorator preview

* Improve fixed list errors
2021-09-23 03:04:52 +02:00
Tomato Cake eb085737a3 Translated using Weblate (German)
Currently translated at 88.4% (46 of 52 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/de/
2021-09-19 10:47:12 +00:00
Misode 9671f304f7 Fix error when switching generators with previews 2021-09-10 23:58:18 +02:00
Misode a685cfeb1b Re-add context menu 2021-09-10 00:46:34 +02:00
Misode e3fb5923c0 Handle catching unknowns 2021-09-09 22:34:22 +02:00
Misode fd503f1d03 Update schema locales 2021-09-09 21:49:42 +02:00
Misode 386eb675d6 Use preact to render the tree (#155)
* Use preact to render the tree

* More changes to renderHtml
2021-09-09 21:36:19 +02:00
Kevin Romero Peces-Barba b5c994795a Translated using Weblate (Spanish)
Currently translated at 100.0% (52 of 52 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/es/
2021-09-08 10:03:32 +00:00
Misode c226a15561 Added translation using Weblate (Spanish) 2021-09-07 11:29:01 +00:00
lakejason0 3ad0f0ebaa Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (52 of 52 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (52 of 52 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-cn/
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-tw/
2021-08-12 06:34:15 +00:00
Alex3236 73bc8380e6 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (52 of 52 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-cn/
2021-08-07 20:41:54 +00:00
champsing f2e6f9877d Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (52 of 52 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-tw/
2021-08-05 16:08:57 +00:00
Jerozgen 6528969b8e Translated using Weblate (Russian)
Currently translated at 98.0% (51 of 52 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/ru/
2021-08-05 10:34:24 +00:00
champsing da36355bef Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (52 of 52 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-tw/
2021-08-05 08:15:04 +00:00
SPWeblate 5b20daf8c7 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/
2021-08-05 05:21:59 +00:00
Misode 40fe1c5336 Show error when importing invalid json 2021-08-05 00:12:30 +02:00
Misode da33cc2832 Fix #162 Add better error message for wrong version 2021-08-04 23:07:50 +02:00
Misode 93607a0540 Add multiline and resizable NBT input fields 2021-07-07 17:44:08 +02:00
Misode b43a151d17 Add buttons to move element order in a list 2021-07-03 01:12:54 +02:00
Misode 98d754b6d8 Fix biome preview for nether preset 2021-07-02 17:58:21 +02:00
Misode 7c266ca945 Add generator quick switcher 2021-07-02 04:38:02 +02:00
Misode 985057ab4e Allow multiple errors and dismissing errors 2021-07-02 02:59:19 +02:00
Misode f43cb03cc3 Make generator config more robust 2021-07-02 02:36:01 +02:00
Misode cabd97cb39 Update home page and logo in header 2021-06-30 05:36:26 +02:00
Misode 2fb4848425 Add configurable indentation 2021-06-26 19:19:51 +02:00
Misode 56ab28f4d8 Fix github pages deploy 2021-06-26 18:08:39 +02:00
Misode 8a5aa42ca1 Use builtin colors for vanilla biomes 2021-06-26 17:18:02 +02:00
Misode f2df089150 Only start getting schemas once on page load 2021-06-26 17:18:02 +02:00
Misode 373698ebbc Improve rendering and validating block states 2021-06-26 17:18:02 +02:00
Misode 14da8ba575 Select preset input when opening 2021-06-26 17:18:02 +02:00
Misode ac10c3f541 Fix some errors and make others visible 2021-06-26 17:18:02 +02:00
Misode 09c851914f Switch to vite and preact 2021-06-26 17:18:02 +02:00
Federico e551b7ef75 Translated using Weblate (Italian)
Currently translated at 32.3% (11 of 34 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/it/
2021-06-10 04:13:07 +00:00
Misode 57b59f3fec Add looking_at and protected blocks from 1.17-pre1 2021-06-02 20:41:39 +02:00
Nikita Chepkiy 86a70a7912 Translated using Weblate (Russian)
Currently translated at 100.0% (34 of 34 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/ru/
2021-05-30 22:18:58 +00:00
Misode 38754dfd29 Add information on how to contribute translating 2021-05-28 04:39:11 +02:00
Misode 66285d0ccb Catch all usages of the CacheAPI 2021-05-28 04:06:35 +02:00
Misode 3bf253b69d Catch errors when opening cache 2021-05-28 03:45:50 +02:00
Misode b7150b014f Load schemas after DOM content is loaded 2021-05-28 03:34:44 +02:00
Misode f02221bf43 More debugging 2021-05-28 03:27:21 +02:00
Misode 031627d65a More debugging 2021-05-28 03:09:52 +02:00
Misode a74777d3ee Change tsconfig use es6 module + add debug logging 2021-05-28 00:25:05 +02:00
Misode 3bdeb154ba 1.17-pre1 2021-05-27 18:45:45 +02:00
Misode dbe0f4bd82 Fix a bunch of problems in worldgen schemas 2021-05-12 22:10:42 +02:00
Misode e6ae91f1a7 Update dependencies 2021-05-12 18:42:29 +02:00
SmajloSlovakian fd8afe8d37 Add Slovak language (#143)
* Create sk

Hi, I'm minecraft translator for slovak language. i have seen this project and i will use it mainly for dimensions generating. from my experience if it is on github then it is translatable (not really but mostly)... so i got into here and translated this

-Name: Slovenčina
-mc namespace: sk_SK
-short: SK
-in english: Slovak (language)
2021-05-12 18:37:44 +02:00
Misode c92b412e70 Merge branch 'master' of https://github.com/misode/misode.github.io 2021-05-05 00:25:18 +02:00
Misode 00d4c48fbc Add no_bonemeal_flower feature 2021-05-05 00:25:14 +02:00
Amirhan-Taipovjan-Greatest-I f7fb7aeecb Translated using Weblate (Russian)
Currently translated at 85.2% (29 of 34 strings)

Translation: Minecraft Schemas/misode.github.io
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/ru/
2021-05-04 09:28:29 +00:00
Misode aba07cd5b1 Add min_surface_level 2021-04-29 23:35:02 +02:00
Misode 2c19bdf300 21w16a and 21w17a 2021-04-28 22:50:26 +02:00
Misode 1f775c4dd2 Fully disable object flattening 2021-04-16 17:30:25 +02:00
Misode 38e7151f2b Temporarily disable flattening of objects 2021-04-15 19:12:18 +02:00
Misode 0cca6f0501 Update to 21w15a + add underwater_magma feature 2021-04-15 19:09:25 +02:00
Misode d3623d25d4 Fix cave config 2021-04-01 05:59:25 +02:00
Misode 15be5f6701 21w13a 2021-04-01 05:36:46 +02:00
Misode 8371e21a14 Actually make the simple_block feature change 2021-03-16 23:21:04 +01:00
Misode 7551ec0e0a Add some bits to readme 2021-03-16 22:57:32 +01:00
Misode dc088e9105 Simple block feature uses a block state provider 2021-03-13 20:42:31 +01:00
Misode 5dabdcaaf0 Fix exploration map destination 2021-03-11 18:09:17 +01:00
Misode 4b9b59b3c7 Fix #133 Incorrect download contents 2021-03-11 17:41:43 +01:00
Misode 8a38558149 21w10a 2021-03-10 23:17:14 +01:00
Misode 0fe2107c3c Fix float_providers being wrapped in value 2021-02-25 01:51:32 +01:00
Misode d9effb142a Improve minimize UX 2021-02-25 01:49:06 +01:00
Misode 94cfb8b0e3 21w08a 2021-02-25 00:43:12 +01:00
Misode a30dd2ab78 21w06a and 21w07a 2021-02-23 01:27:35 +01:00
Misode da03eda9a7 Make preview controls fade away when not hovered 2021-02-15 00:36:40 +01:00
Misode fc748fefb8 Not-so-magic performance improvement 2021-02-05 23:59:58 +01:00
Misode 287120cc7a Add working 404 page 2021-02-02 01:51:14 +01:00
Misode e025e5ffc3 Only include relevant versions in page title 2021-02-02 00:57:30 +01:00
Misode bf3b0204eb 21w03a Add glow lichen feature 2021-01-21 00:06:03 +01:00
Misode f543c4465c Upgrade mcschema core 2021-01-16 15:59:32 +01:00
Misode 8e7668b3b9 Don't flatten filtered objects 2021-01-16 14:05:00 +01:00
Misode c3914d46fb Enable source-map 2021-01-01 05:30:04 +01:00
Misode 28909fe96c Slightly improve accessibility 2021-01-01 05:23:06 +01:00
Misode 45608057d7 Use simplified blocks report Arcensoth/mcdata#11 2021-01-01 04:39:44 +01:00
Misode e69559f975 Use Cache API instead of LocalStorage (#128)
* Use Cache API instead of LocalStorage

* Remove old cached data
2020-12-30 18:58:54 +01:00
Misode 847bb43fdd Fix padding-top om homepage 2020-12-29 21:21:51 +01:00
Misode 99d64590a0 Mobile UI and UX improvements 2020-12-29 15:11:03 +01:00
Misode f0a8d2fb20 Fix bug in walk hook 2020-12-29 02:15:36 +01:00
Misode 1a568be1e6 Hide empty Properties key 2020-12-29 01:18:52 +01:00
Misode 00d794a138 Flatten rendered nested objects 2020-12-29 00:58:41 +01:00
Misode e2fb58a7c3 Render filter keys more compact 2020-12-28 22:57:18 +01:00
Misode a68cd2c44c Track minimize and preset 2020-12-28 04:37:23 +01:00
Misode e4cdac30bf Add vanilla preset searcher and loader 2020-12-28 04:16:58 +01:00
Misode 29c347a20b Add minimize tree toggle 2020-12-27 17:34:01 +01:00
Misode 133aa53b2f Fix dynamic registries not being cached 2020-12-27 04:17:47 +01:00
Misode 9581c6bf25 Catch errors in fetchDynamicRegistries 2020-12-27 04:12:12 +01:00
Misode a6b93f5118 Fetch dynamic registries 2020-12-27 03:50:16 +01:00
lakejason0 a386773c9f Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (34 of 34 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (34 of 34 strings)

Translation: Minecraft Schemas/Generators
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-cn/
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-tw/
2020-12-26 16:27:35 +00:00
Misode 483ea9a234 Quick block state map fix 2020-12-20 05:23:54 +01:00
Misode ab21717716 Upgrade mcschema 2020-12-20 05:11:08 +01:00
Misode 647a435930 Add cache format and render block state map 2020-12-20 05:02:11 +01:00
Misode a52716a80a Validate block states 2020-12-20 04:25:50 +01:00
Misode 394dd27d85 Include 1.15 in titles for SEO 2020-12-19 18:02:15 +01:00
Misode 0d8a7c00ee Upgrade mcschema 2020-12-19 17:59:51 +01:00
Misode 25ff5d03f1 Support 1.15 2020-12-19 17:58:21 +01:00
Misode b2c963005f Remove .vscode 2020-12-19 17:37:11 +01:00
Misode 21be5a250b Allow fields settings to be translated 2020-12-19 03:27:47 +01:00
Misode 6246e627b5 Add context menu allowing you to copy context path 2020-12-19 03:24:15 +01:00
Misode 6a3c7aac42 Add field settings 2020-12-17 22:09:09 +01:00
Misode acb6978d48 Merge branch 'master' of https://github.com/misode/misode.github.io 2020-12-16 18:50:26 +01:00
Misode 75bf0cc434 Close #119 add coordinate scale 2020-12-16 18:50:20 +01:00
dependabot[bot] 40974f83c2 Bump ini from 1.3.5 to 1.3.8 (#125)
Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.8.
- [Release notes](https://github.com/isaacs/ini/releases)
- [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.8)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-12-16 16:26:25 +01:00
Misode 28b6a4060f Re-add share functionality 2020-12-08 02:52:44 +01:00
Misode a36cb6096d Upgrade mcschema 2020-12-08 02:01:24 +01:00
Misode e38fb58e1b Update preview controls when switching previews 2020-12-08 00:45:10 +01:00
Misode baf507aafb Set biome depth and scale correctly 2020-12-08 00:27:02 +01:00
Misode a44c7a4dc9 Cache noise columns in chunk generator 2020-12-07 22:49:38 +01:00
Misode 1e7ebffbd1 Keep same seed in noise chunk generator 2020-12-07 22:08:41 +01:00
Misode 04063cff87 Add more remaining decorators 2020-12-07 04:57:04 +01:00
Misode 3ea390e547 Refactor decorator preview and use better colors 2020-12-07 02:47:22 +01:00
Misode 7625899b89 Add terrain, sea level and heightmap decorators 2020-12-06 19:03:21 +01:00
Misode 88bf86de3c Add decorator preview 2020-12-06 02:34:34 +01:00
Misode a84822b1cc Rename noise folder 2020-12-06 00:55:39 +01:00
Misode 5806d26f42 Fix rounded corners before node icons 2020-12-05 17:37:12 +01:00
Misode 19265feb0c Remove tree view observer 2020-12-05 16:53:18 +01:00
Misode 59c143156f Merge mounter and view 2020-12-05 16:38:07 +01:00
Misode 53c2973c34 Add suffixInjector hook 2020-12-05 16:30:14 +01:00
Misode 3eb179c0a2 Separate noise chunk generator code 2020-12-05 15:13:28 +01:00
Misode 259f068230 20w49a update 2020-12-02 22:31:04 +01:00
Misode 82edf5a1e5 Remove debug messages 2020-12-02 01:48:13 +01:00
Misode 83a249e4b7 Add random density offset to noise visualizer 2020-12-02 01:36:17 +01:00
Misode 4c814f0ee3 Rewrite noise implementation to match Minecraft 2020-12-01 04:15:29 +01:00
Misode a1b4ab4fb4 Rewrite noise settings preview 2020-12-01 01:14:42 +01:00
Misode 2688f4bc85 Add preview controls 2020-11-30 02:35:38 +01:00
Misode f08fedc206 Default to dark theme 2020-11-30 02:09:52 +01:00
Misode c5676cf182 Validate model loosly on load 2020-11-30 02:09:30 +01:00
Misode 5b7caff5e6 Include minecraft suffix in title 2020-11-25 15:41:48 +01:00
Misode 3368a0b7cb Track pageviews 2020-11-25 15:24:36 +01:00
Misode 97a1113d02 Fix incorrect custom dimension indices 2020-11-24 18:59:52 +01:00
Misode cb84ac3603 Fix not fetching english locale 2020-11-23 14:50:36 +01:00
Misode 35aefea261 Rename files part 2 2020-11-23 14:39:04 +01:00
Misode 3172557e3a Rename files part 1 2020-11-23 14:37:18 +01:00
Misode 982b4728e7 Complete refactor (#123) 2020-11-23 14:29:16 +01:00
lakejason0 0ad33cd88f Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (25 of 25 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (25 of 25 strings)

Translation: Minecraft Schemas/Generators
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-cn/
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-tw/
2020-11-21 17:58:42 +00:00
lakejason0 67fb3c98ec Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (24 of 24 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (24 of 24 strings)

Translation: Minecraft Schemas/Generators
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-cn/
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-tw/
2020-11-15 12:03:44 +01:00
Misode 8a5f4405ef Upgrade mcschema 2020-11-15 12:02:16 +01:00
Misode dd3ac92c4e Upgrade mcschema 2020-11-12 18:15:50 +01:00
Misode 104904fd7a Fully update to 20w46a 2020-11-12 03:50:48 +01:00
Misode f985598329 Fix compiler options 2020-11-12 00:09:09 +01:00
Misode f2057d4d19 Add item modifiers, fix problems with version switcher 2020-11-11 22:30:27 +01:00
Awhikax d1c5760aca Translated using Weblate (French)
Currently translated at 100.0% (22 of 22 strings)

Translation: Minecraft Schemas/Generators
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/fr/
2020-11-09 22:40:25 +00:00
Misode cbf6e7e4cf Actually change version schema 2020-11-09 13:03:50 +01:00
Misode 8d2bf43764 Render choice nodes as a dropdown 2020-11-08 12:54:34 +01:00
Misode 97302dbecf Upgrade @mcschema 2020-11-07 18:06:16 +01:00
Misode 009e487def Minor style fixes to collapse buttons 2020-11-07 16:38:07 +01:00
Misode 082349f2b6 Update favicon 2020-11-07 14:35:14 +01:00
Misode f0cc6334bf Fix number node rendering 2020-11-07 12:29:47 +01:00
Misode 5b734d317a Track hotkey usage 2020-11-07 12:27:59 +01:00
Misode 0de8b9493b Add favicon 2020-11-07 12:03:32 +01:00
Misode 8848838d4e Html encode user provided strings when rendering 2020-11-07 11:31:18 +01:00
Misode 0298603226 Track language 2020-11-06 20:07:49 +01:00
Misode 1c0a47874e Merge branch 'master' of https://github.com/misode/misode.github.io 2020-11-06 14:07:17 +01:00
Misode 95dc04b6f3 Track events 2020-11-06 14:07:13 +01:00
Misode 87454fca33 Track game version 2020-11-06 13:54:38 +01:00
Misode afdbf65f31 Use npm build script in workflow 2020-11-06 03:28:47 +01:00
Misode 1b4baa89ca Attempt to fix workflow 2020-11-06 03:26:59 +01:00
Misode 6e5bf5554c Attempt to fix workflow 2020-11-06 03:21:13 +01:00
Misode e923fea011 Use webpack-cli as build command 2020-11-06 03:16:59 +01:00
Misode 024ccad3bd Fix json parsing of commit hash in workflow 2020-11-06 02:59:19 +01:00
Misode 9e49555be3 Cache mcdata registries 2020-11-06 02:53:32 +01:00
Misode c9165df29e Add Java 1.17 version and version switcher 2020-11-06 01:34:44 +01:00
Misode 0b7e7c1203 Bump mcschema and make changes to locales 2020-11-05 18:42:02 +01:00
Misode 8c610b99e0 Use mcschema hooks beta and watch things explode 2020-10-09 00:55:18 +02:00
Misode ff6e02fb36 Fix help and error tooltips 2020-10-05 16:09:32 +02:00
Misode 9f9c9b40fd Upgrade mschema dependencies and add pool category 2020-10-05 15:51:31 +02:00
Misode 9138985153 Update mcschema to new mounter system 2020-10-05 02:26:59 +02:00
Misode 629c747a10 Add min-width node entry box 2020-10-05 00:33:00 +02:00
Misode f7869edbad Style tweaks based on feedback 2020-10-05 00:23:43 +02:00
Misode dbb07ea4bc Update titles again 2020-09-22 23:03:58 +02:00
Misode a4f8623c17 Add sitemap 2020-09-22 22:40:09 +02:00
Misode 59c2d761b5 Use anchor tags for navigation 2020-09-22 22:35:59 +02:00
Misode 248bce045a Add opengraph meta tags and update description 2020-09-22 22:22:45 +02:00
Misode a7f062cc68 Don't update selected model 2020-09-22 22:10:55 +02:00
Misode d5e96605af Add meta description 2020-09-22 22:00:06 +02:00
Misode 1709d3c186 Never set document title 2020-09-22 17:32:09 +02:00
Misode b332a31fe7 Update node-forge to 0.10.0 2020-09-18 23:09:20 +02:00
Misode bb4bf36c77 Add Polish 2020-09-18 00:03:14 +02:00
Misode ecf3034a30 Only set document title when locale is ready 2020-09-17 23:58:10 +02:00
maxaxik 5db5eba861 Translated using Weblate (Polish)
Currently translated at 100.0% (22 of 22 strings)

Translation: Minecraft Schemas/Generators
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/pl/
2020-09-16 18:15:53 +00:00
Misode c48e082fe3 Fix normal noise amplitude 0 check 2020-09-16 16:04:10 +02:00
maxaxik 4c746e817c Translated using Weblate (Polish)
Currently translated at 4.5% (1 of 22 strings)

Translation: Minecraft Schemas/Generators
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/pl/
2020-09-15 12:00:25 +00:00
Misode 508b258ad3 Further optimize biome noise visualizer 2020-09-14 18:51:51 +02:00
Misode de3a978388 Optimize biome noise visualizer 2020-09-14 17:35:31 +02:00
Misode b04ca36756 Update biome noise algorithm 2020-09-14 16:39:01 +02:00
Misode 49a8abbbb7 Added translation using Weblate (Polish) 2020-09-13 23:39:38 +00:00
Misode 17e94fb69c Also set theme dimension on page load 2020-09-14 00:41:05 +02:00
Misode 2999f602ba Add github link 2020-09-12 00:56:25 +02:00
Misode 4173fbf496 Update deploy script 2020-09-12 00:41:32 +02:00
Misode 8ad85fca34 Update public path 2020-09-12 00:40:01 +02:00
Misode e815888d0f Redirect dev pages 2020-09-12 00:18:23 +02:00
Misode 01f5be3b39 Remove model selector 2020-09-07 00:47:15 +02:00
Misode 6f1a6f8077 Merge branch 'develop' of https://github.com/misode/dev into develop 2020-09-02 02:34:08 +02:00
Misode 8474a73b19 Add share functionality 2020-09-02 02:34:01 +02:00
?? 08e45e7da0 Translated using Weblate (Japanese)
Currently translated at 100.0% (22 of 22 strings)

Translation: Minecraft Schemas/Generators
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/ja/
2020-08-31 15:06:58 +00:00
lakejason0 7d125943d3 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (22 of 22 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (22 of 22 strings)

Translation: Minecraft Schemas/Generators
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-cn/
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-tw/
2020-08-29 16:06:58 +00:00
Ξии 9400fb278a Translated using Weblate (French)
Currently translated at 100.0% (22 of 22 strings)

Translation: Minecraft Schemas/Generators
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/fr/
2020-08-28 04:06:58 +00:00
Misode 1543bb0418 Fix biome noise visualizer again 2020-08-27 19:25:51 +02:00
Misode b9e66dbd5e Remember biome colors in local storage 2020-08-27 18:59:09 +02:00
Misode 5afc8ef1ed Add zooming the biome noise visualization 2020-08-27 00:24:52 +02:00
Misode 2c8eeceac3 Fix biome noise visualizer 2020-08-26 17:01:28 +02:00
Misode e63248f75b Remove debug message 2020-08-26 03:42:55 +02:00
Misode 503a863ed8 Update mcschema 2020-08-26 03:38:04 +02:00
Misode 2b0ceaf2a0 Make biome noise colors customizable and fix warp problem 2020-08-25 22:55:59 +02:00
Misode 7bb2669d1c Merge branch 'develop' of https://github.com/misode/dev into develop 2020-08-25 17:29:22 +02:00
Misode 54fdf893aa Update mcschema 2020-08-25 17:29:10 +02:00
?? da9f092bca Translated using Weblate (Japanese)
Currently translated at 100.0% (21 of 21 strings)

Translation: Minecraft Schemas/Generators
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/ja/
2020-08-25 15:06:59 +00:00
Misode 75d834f06b Style fixes 2020-08-25 16:44:10 +02:00
Misode 31936f475d Update mcschema 2020-08-25 02:12:57 +02:00
Misode fd2cdb6045 Render color input type 2020-08-21 00:54:52 +02:00
Misode 0b5c594893 Update mcschema 2020-08-20 18:46:10 +02:00
Misode 37689c4374 Update mcschema 2020-08-17 19:54:44 +02:00
Misode 946f7e4683 Minor changes to model picker 2020-08-15 01:27:12 +02:00
Misode e4aa07ef03 Bump dependencies 2020-08-15 00:33:47 +02:00
Misode d983fda1a9 Add world settings generator + improve visualizers 2020-08-15 00:31:50 +02:00
NeunEinser 0370eeccde Translated using Weblate (German)
Currently translated at 100.0% (21 of 21 strings)

Translation: Minecraft Schemas/Generators
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/de/
2020-08-11 23:30:55 +00:00
shurik204 b37ead97d8 Translated using Weblate (Russian)
Currently translated at 4.7% (1 of 21 strings)

Translation: Minecraft Schemas/Generators
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/ru/
2020-08-10 17:09:20 +00:00
lakejason0 13b2de8fdf Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (21 of 21 strings)

Translation: Minecraft Schemas/Generators
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-cn/
2020-08-10 17:09:20 +00:00
lakejason0 76b317232a Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (21 of 21 strings)

Translation: Minecraft Schemas/Generators
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/zh-tw/
2020-08-10 17:09:20 +00:00
?? f8e6630706 Translated using Weblate (Japanese)
Currently translated at 57.1% (12 of 21 strings)

Translation: Minecraft Schemas/Generators
Translate-URL: https://l10n.spgoding.com/projects/minecraft-schemas/generators/ja/
2020-08-10 17:09:20 +00:00
SPGoding 316117a9bc Deleted translation using Weblate (Chinese (Simplified)) 2020-08-10 17:09:20 +00:00
SPGoding fda4e7b347 Added translation using Weblate (Chinese (Simplified)) 2020-08-10 17:09:20 +00:00
Misode 209da332c0 Deleted translation using Weblate (Chinese (Simplified)) 2020-08-10 17:09:20 +00:00
Misode 49ea02d118 Added translation using Weblate (Chinese (Simplified)) 2020-08-10 17:09:20 +00:00
Misode 920bf2b09c Added translation using Weblate (Chinese (Traditional)) 2020-08-10 17:09:20 +00:00
Misode d24534b63e Added translation using Weblate (Chinese (Simplified)) 2020-08-10 17:09:20 +00:00
Misode 6ad5b3cf44 Added translation using Weblate (Russian) 2020-08-10 17:09:20 +00:00
Misode fba7e6c818 Added translation using Weblate (Portuguese) 2020-08-10 17:09:20 +00:00
Misode ba4e199388 Added translation using Weblate (Japanese) 2020-08-10 17:09:20 +00:00
Misode 9268148224 Added translation using Weblate (Italian) 2020-08-10 17:09:20 +00:00
Misode 6aa073349e Added translation using Weblate (French) 2020-08-10 17:09:20 +00:00
Misode 8dde87dae1 Added translation using Weblate (German) 2020-08-10 17:09:20 +00:00
Misode e34592452a Force empty structures objects 2020-08-10 19:07:55 +02:00
Misode 4a7b4124f2 Hide errors view by default 2020-08-10 15:39:40 +02:00
Misode 8f9bbd6519 Upgrade mcschema versions 2020-08-10 14:40:03 +02:00
Misode 62ad46fd95 Remove version controls 2020-08-10 13:03:08 +02:00
Misode 97eb2aa066 Fix module issue 2020-08-08 02:06:15 +02:00
Misode b37b9a19cb Add NoiseSettingsVisualizer 2020-08-08 02:02:10 +02:00
SPGoding 2f8f42bd8e Update languages list 2020-08-07 00:09:31 -05:00
dependabot[bot] 5f51aeed5a Bump websocket-extensions from 0.1.3 to 0.1.4 (#1)
Bumps [websocket-extensions](https://github.com/faye/websocket-extensions-node) from 0.1.3 to 0.1.4.
- [Release notes](https://github.com/faye/websocket-extensions-node/releases)
- [Changelog](https://github.com/faye/websocket-extensions-node/blob/master/CHANGELOG.md)
- [Commits](https://github.com/faye/websocket-extensions-node/compare/0.1.3...0.1.4)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-07 02:01:24 +02:00
Misode 66478b4fbe Make visualizer draggable 2020-08-07 01:59:30 +02:00
Misode 88d6014dfa Implement BiomeNoiseVisualizer 2020-08-07 00:45:31 +02:00
Misode 0ffe97dda5 Add visualizer view 2020-08-06 23:35:50 +02:00
Misode 78daf24e9e Minor style fixes with popups 2020-08-06 14:14:59 +02:00
Misode 7d518526e2 Upgrade @mcschema 2020-08-06 14:02:05 +02:00
Misode 84096187e7 Add help and error popups 2020-08-04 22:21:43 +02:00
Misode a175976c48 Fix mcdata registry url 2020-08-04 00:55:17 +02:00
Misode 57ffbff3b2 Update mcschema versions 2020-08-04 00:55:01 +02:00
Misode f3ab069c63 Update mcschema and commit package-lock 2020-08-03 22:08:57 +02:00
SPGoding ae7c6fcd55 Add French language 2020-08-01 23:50:11 -05:00
Misode eab5d8a08c Prevent node headers wrapping 2020-07-20 05:28:36 +02:00
Misode d457b340c6 Fix issue with history 2020-07-20 05:15:25 +02:00
Misode 6dd21a2d20 Add noise settings + update mcschema 2020-07-20 03:03:04 +02:00
Misode 1ab9b15020 Minor mobile style fixes 2020-07-14 16:25:41 +02:00
Misode 0ece532392 Change ga version name 2020-07-14 03:40:24 +02:00
Misode 76264ed9e8 Make sure url ends with a slash 2020-07-14 02:45:42 +02:00
Misode 6151255d7c Strip /dev from ga page name 2020-07-14 02:39:20 +02:00
Misode e8960579d3 Add theme tracking 2020-07-14 02:25:31 +02:00
Misode 99c945150a Use update ga script and support spa 2020-07-14 02:17:31 +02:00
Misode 49ae481fc9 Add google analytics 2020-07-14 02:03:10 +02:00
Misode 64258437ba Finish worldgen schemas 2020-07-14 01:01:13 +02:00
Misode a7f885293e Add config file and support categories 2020-07-13 18:25:39 +02:00
Misode c01cd04235 Update mcschema version 2020-07-13 15:39:21 +02:00
Misode 0332164569 Add all worldgen schemas 2020-07-13 05:56:16 +02:00
Misode 268d88a54b Merge branch 'develop' of https://github.com/misode/dev into develop 2020-07-09 22:18:21 +02:00
Misode dbc52ff79d Add biome and feature generators 2020-07-09 22:16:54 +02:00
SPGoding 6513ea7342 Fix crashing when fetching 404 registry 2020-07-08 15:01:22 -05:00
Misode 7416e21c5d Minor style fixes 2020-07-07 02:20:30 +02:00
Misode a6098dcb18 Update schema core to v0.3.0 2020-07-05 03:01:46 +02:00
Misode af54d90059 Fix core locales not being included 2020-06-26 02:01:33 +02:00
Misode 72e9e9eefc Update mcschema dependencies 2020-06-26 01:45:25 +02:00
Misode 9633d15948 Add language support 2020-06-25 00:57:13 +02:00
Misode 9b5d19b21d Switch back to dev 2020-06-20 01:33:23 +02:00
Misode cbbe2f6e39 Update to alpha 2020-06-20 01:29:38 +02:00
Misode 3d63b74ac5 Update minecraft-schemas to v0.2.3 2020-06-19 18:52:55 +02:00
Misode 45a66b456a Update minecraft-schemas to v0.2.2 2020-06-19 01:25:21 +02:00
Misode c6c1c4b58d Add homepage 2020-06-19 01:22:25 +02:00
Misode b9f53b79c9 Refactor error view and make loot table default 2020-06-18 23:01:13 +02:00
Misode a5ffc57ca6 Add history 2020-06-18 01:00:06 +02:00
Misode d4b0e77957 Add tree controls 2020-06-17 22:22:59 +02:00
Misode 13b21d3b72 Update minecraft-schemas to v0.2.0 2020-06-17 20:34:17 +02:00
Misode 8b42a59b12 Use css variables for colors 2020-06-17 00:00:13 +02:00
Misode 8cbb5fc776 Show validation errors 2020-06-16 15:37:01 +02:00
Misode 2d29de7903 Fetch registries from mcdata 2020-06-15 15:16:02 +02:00
Misode 9ad4e5bb39 Change github link to be an actual link 2020-06-08 00:07:24 +02:00
Misode d1bf51409a Add dimension schemas 2020-06-07 21:55:33 +02:00
Misode ad25676276 Minor style issue 2020-06-07 02:13:43 +02:00
Misode e13a0d9141 Improve styling 2020-06-07 02:00:01 +02:00
Misode c19398cf22 Store theme preference in local storage 2020-06-06 22:29:47 +02:00
Misode f650f9a592 Add color transition 2020-06-06 21:56:02 +02:00
Misode 5f17dcdce0 Add dark mode 2020-06-06 21:34:36 +02:00
Misode f6395306cd Style tree view 2020-06-06 18:49:50 +02:00
Misode a538324556 Highlight selected language and model 2020-06-06 14:24:44 +02:00
Misode ca724d3e34 Fix fetch location 2020-06-06 11:57:06 +02:00
Misode 55cfe0772b Fix problem with map keys and minor style fixes 2020-06-05 23:40:51 +02:00
Misode 9faf7339fe Adjust layout for mobile 2020-06-05 22:19:48 +02:00
Misode cf46776890 Header layout and options 2020-06-05 19:19:31 +02:00
Misode 7afaf6a5c3 Update to minecraft-schemas to 0.1.4 2020-06-04 18:24:51 +02:00
Misode 1748b41438 Restructure app loading 2020-06-04 18:11:11 +02:00
Misode 3e8f375784 Fix locales fetch location 2020-06-04 03:12:06 +02:00
Misode 3f5ca2177d Extract id from pathname correctly 2020-06-03 22:59:37 +02:00
Misode 65eac13082 Use html plugin + handle URLs 2020-06-03 21:39:15 +02:00
Misode 575bfb4bc7 Add source controls with copy and download 2020-06-03 17:22:35 +02:00
Misode 4cda4b9060 Update minecraft-schemas to 0.1.3 2020-06-03 03:50:57 +02:00
Misode 12b4725ed4 Layout styling 2020-06-03 03:40:52 +02:00
Misode 3520fe8bba Copy schema locales + add advancement tab 2020-06-01 00:11:21 +02:00
Misode ea8e0e534e Move schemas to npm package 2020-05-31 01:48:23 +02:00
Misode e7fb692ac4 Add loot table schema 2020-05-30 20:54:27 +02:00
Misode c91e0a5300 Add documentation 2020-05-30 02:53:22 +02:00
Misode ba5f9638c0 Second attempt to fix fetch link 2020-05-29 04:01:39 +02:00
Misode 60e5fe0ce9 Attempt to fix fetch link 2020-05-29 03:44:12 +02:00
Misode a994464730 Add locale support 2020-05-29 03:38:41 +02:00
Misode a8fabd555b Support styling 2020-05-29 01:36:52 +02:00
Misode 95d36cd8be Remove unnecessary parent field 2020-05-28 03:39:21 +02:00
Misode 06734760f3 Restructure project 2020-05-28 03:34:55 +02:00
Misode 3aa134c544 Add collection registry 2020-05-28 02:25:01 +02:00
Misode 9189bbe229 Improvements to transform + make source a textarea 2020-05-28 01:28:19 +02:00
SPGoding 9c20e9520a Change some EnumNodes to ResourceNodes 2020-05-26 23:55:48 -05:00
Misode 2646c22e68 Combine filtered node and object node 2020-05-27 03:27:10 +02:00
Misode e89e4efc4d Add schemas for predicates 2020-05-27 03:05:02 +02:00
Misode b30d2db936 Add reference node and schema registry 2020-05-27 01:48:32 +02:00
Misode 5db78d3ff1 Add filtered node + schema selector 2020-05-27 01:09:15 +02:00
Misode 549dea2738 Merge style changes 2020-05-26 17:51:06 +02:00
Misode 8371e43276 Add conditional rendering 2020-05-26 17:25:42 +02:00
Misode a6661a8563 Add resource node + improve default mods 2020-05-26 15:11:51 +02:00
Misode f77997f633 Add range node + default mods 2020-05-26 12:33:56 +02:00
SPGoding e686e8e1a1 Some trivial stylistic changes 2020-05-25 23:52:28 -05:00
Misode abbbc0bbfa Add number node 2020-05-26 02:08:36 +02:00
Misode 387218193e Add map node and refactor defaults 2020-05-25 23:59:00 +02:00
Misode 3620074c86 Add boolean nodes 2020-05-25 23:59:00 +02:00
Misode 25bfaf666a Add list node and register click events 2020-05-25 23:59:00 +02:00
Misode 56f3766a13 Update model and add invalidated cycle 2020-05-25 23:59:00 +02:00
Misode 79a5742dad Add view classes 2020-05-25 23:59:00 +02:00
Misode 1bef36a713 Add model and add event listeners 2020-05-25 23:59:00 +02:00
Misode 92161c39f1 Add RootNode 2020-05-25 23:59:00 +02:00
Misode fb8b7df088 Create deploy.yml 2020-05-25 23:59:00 +02:00
Misode d96949c605 Add nodes with render and transform 2020-05-24 02:40:14 +02:00
Misode 135b229265 Initial commit 2020-05-23 21:14:34 +02:00
245 changed files with 39487 additions and 12664 deletions
+74
View File
@@ -0,0 +1,74 @@
module.exports = {
env: {
es6: true,
node: true,
},
parser: '@typescript-eslint/parser',
parserOptions: {
tsconfigRootDir: __dirname,
project: './tsconfig-eslint.json',
},
plugins: [
'@typescript-eslint',
],
ignorePatterns: [
'**/node_modules',
'**/dist',
],
rules: {
'@typescript-eslint/consistent-type-imports': [
'warn',
{
prefer: 'type-imports',
},
],
'@typescript-eslint/prefer-readonly': 'warn',
'@typescript-eslint/quotes': [
'warn',
'single',
{
avoidEscape: true,
},
],
'@typescript-eslint/semi': [
'warn',
'never',
],
'@typescript-eslint/indent': [
'warn',
'tab',
],
'@typescript-eslint/member-delimiter-style': [
'warn',
{
multiline: {
delimiter: 'comma',
requireLast: true,
},
singleline: {
delimiter: 'comma',
requireLast: false,
},
overrides: {
interface: {
multiline: {
delimiter: undefined,
},
},
},
},
],
'comma-dangle': 'off',
'@typescript-eslint/comma-dangle': ['warn', 'always-multiline'],
indent: 'off',
'eol-last': 'warn',
'no-fallthrough': 'warn',
'prefer-const': 'warn',
'prefer-object-spread': 'warn',
'quote-props': [
'warn',
'as-needed',
{ numbers: true },
],
},
}
+45
View File
@@ -0,0 +1,45 @@
name: Deploy to GitHub Pages
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: 'Get latest version'
id: version
run: echo "id=$(curl -s https://raw.githubusercontent.com/misode/mcmeta/summary/version.txt)" >> $GITHUB_OUTPUT
- name: Build
run: |
npm install
export latest_version="'${{ steps.version.outputs.id }}'"
npm run build
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: ./dist
deploy:
needs: build
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Deploy to GitHub Pages
uses: actions/deploy-pages@v4
id: deployment
+3
View File
@@ -0,0 +1,3 @@
node_modules
/dist
stats.html
+29
View File
@@ -0,0 +1,29 @@
{
"[typescript]": {
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit",
"source.fixAll.eslint": "explicit"
}
},
"[typescriptreact]": {
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit",
"source.fixAll.eslint": "explicit"
}
},
"[javascript]": {
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit",
"source.fixAll.eslint": "explicit"
}
},
"[markdown]": {
"editor.insertSpaces": true,
"editor.tabSize": 2
},
"typescript.format.semicolons": "remove",
"editor.insertSpaces": false,
"files.insertFinalNewline": true,
"files.trimFinalNewlines": true,
"typescript.tsdk": "node_modules\\typescript\\lib"
}
+1 -1
View File
@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2019 Misode
Copyright (c) 2020 Misode
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
+56
View File
@@ -0,0 +1,56 @@
# misode.github.io
> Data Pack Generators for Minecraft Java Edition
https://misode.github.io/
## Contributing
This project uses [Preact](https://preactjs.com/) and [Vite](https://vitejs.dev/).
1. Make sure you have [node](https://nodejs.org/), npm, and [git](https://git-scm.com/) installed.
2. Clone the repository.
3. Start the dev server.
```
npm run dev
```
4. Open the browser in `localhost:3000`.
## Translating
misode.github.io supports multiple languages. If you'd like to help us translate this project to your language, it would be really appreciated! If your language is not on this list, please create an issue for it.
[![Localization status](https://weblate.spyglassmc.com/widgets/misode-github-io/-/multi-auto.svg)](https://weblate.spyglassmc.com/engage/misode-github-io/?utm_source=widget)
1. Go to the [Spyglassmc localization website](https://weblate.spyglassmc.com/projects/) (hosted by [SPGoding](https://github.com/SPGoding)).
2. [Register](https://l10n.spgoding.com/accounts/register) by linking your GitHub account (recommended), or using your email.
- Note that the username and email will be shown in the [repository](https://github.com/misode/misode.github.io)'s git commit log.
3. See the components of misode.github.io [here](https://weblate.spyglassmc.com/projects/misode-github-io/web-app/).
4. Start translating!
## Modded Generators
This website contains a few [non-vanilla generators](https://misode.github.io/predicate/). It is possible to contribute additional generators. If instead you are interested in making custom generators but don't want them part of the main website, see the [forking section](#forking) below.
1. Create a new file `public/mcdoc/<your_project>.mcdoc`. This will contain the definitions of the
2. Create a new generator entry in the `src/app/config.json` file for each generator page that you want to add. Set its `dependency` field to the name of the mcdoc file you created.
3. Add translation key for each generator in `src/locales/en.json`, named `generator.<id>`, and a translation key named `partner.<dependency>`.
4. The final step will be to write the generator definitions in the mcdoc file. Apart from the [technical specification](https://spyglassmc.com/user/mcdoc/), there is no documentation for the mcdoc format. It is a custom language describing JSON and NBT structures in the game. I recommend taking a look at how the other modded generators have their types. You can also look at the [vanilla mcdoc definitions](https://github.com/SpyglassMC/vanilla-mcdoc).
5. Feel free to open a PR even when you are not ready with the types, or if you want help with writing them.
## Forking
You are allowed to fork this repository and use its base as a way to publish your own generator site, but I ask to make a few changes before publishing.
1. Change links to this repo to your own repo. This can be done at the top of `Utils.ts` by changing `export const SOURCE_REPO_URL = ...`.
2. Remove or replace the Google Analytics tracking code in the root `index.html` file. To avoid breaking the rest of the website, you can replace everything between the `<!-- Global site tag (gtag.js) - Google Analytics -->` markers with this:
```html
<script>
function gtag() {}
</script>
```
3. Disable the ads, first by remove two lines in `index.html`:
```html
<script async src="https://media.ethicalads.io/media/client/ethicalads.min.js"></script>
...
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>
```
4. Secondly, you can remove the ad component, for example by returning `<></>` in `Ad.tsx`, or by removing the `{!gen.tags?.includes('partners') && <Ad id="data-pack-generator" type="text" />}` line in `SchemaGenerator.tsx`.
5. Remove the contributors and giscus comment section on the homepage. You can do this easily by removing `<Contributors />` and `<Giscus />` in `Home.tsx`.
6. Make some other changes to the home page. This will depend on what you need, but you might want to remove stuff like `<WhatsNew />` and/or `<Tools />`.
7. Edit the `Footer.tsx` component. You can remove the donation link, but I would appreciate if you still kept a note that your fork is based on my work, for example by linking to my github profile or this repository.
8. Change some of the translations in `src/locales/en.json`. Particularly you might want to change the `title.home` key.
-62
View File
@@ -1,62 +0,0 @@
<!doctype html>
<html>
<head>
<!-- Google Analytics -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-73024255-2', 'auto');
ga('set', 'dimension1', localStorage.getItem('theme') ?? 'default');
ga('set', 'dimension2', 'v1');
ga('send', 'pageview');
</script>
<!-- End Google Analytics -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
<link rel="stylesheet" href="../css/custom.css">
<title data-i18n="title.advancement">Advancement Generator Minecraft 1.15</title>
</head>
<body>
<nav class="navbar navbar-expand-md navbar-dark bg-dark">
<a id="descriptionSpan" class="navbar-brand mb-0 h1" href="../" data-i18n="description.advancement"></a>
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#collapsibleNavbar">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="collapsibleNavbar">
<ul class="navbar-nav mr-md-auto mb-2 mb-md-0">
<li class="nav-item dropdown">
<a id="versionLabel" class="nav-link dropdown-toggle mr-2" href="" role="button" data-toggle="dropdown"></a>
<div id="versionList" class="dropdown-menu"></div>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle mr-2" href="" role="button" data-toggle="dropdown">
🌎 Language
</a>
<div id="lngList" class="dropdown-menu"></div>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="" role="button" data-toggle="dropdown" data-i18n="theme"></a>
<div id="themeList" class="dropdown-menu"></div>
</li>
</ul>
<span class="ml-0 ml-md-2"><a href="https://github.com/misode/misode.github.io" style="color: #ddd;" data-i18n="credit"></a></span>
</div>
</nav>
<div class="container" data-generator="advancement"></div>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/i18next/17.0.6/i18next.min.js" integrity="sha384-DYhccENVzcHrB30my+vk/NvcnUix2+CCUl8Qg7XEzTE1cFLf2IoN5B6c5C38vABH" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/i18next-browser-languagedetector/3.0.1/i18nextBrowserLanguageDetector.min.js" integrity="sha384-14ws1HmRivxp+u6W816e62Gs33Y19jhG4zSJb6pL0pB+gYc+CgFXXp4ZnGXcaOww" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/i18next-xhr-backend/3.0.0/i18nextXHRBackend.min.js" integrity="sha384-dK+VwLEvPDbpKM7G7D/LtbW6W2zlt99nuVTwoYIkMulAedST9Vj9OCRkv2xV8GjD" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-i18next/1.2.1/jquery-i18next.min.js" integrity="sha384-fLTSt6zHOb152KeFkj7kSiXdkyjKf6fjk5bdzWYLDPDo9evwd9PVs3TKoYYaaxdl" crossorigin="anonymous"></script>
<script src="../js/i18n.js" charset="utf-8"></script>
<script src="../js/model.js" charset="utf-8"></script>
<script src="../js/view.js" charset="utf-8"></script>
</body>
</html>
-130
View File
@@ -1,130 +0,0 @@
<div id="components" class="d-none">
<div class="input-group mt-3" data-type="string">
<div class="input-group-prepend">
<span class="input-group-text" data-name></span>
</div>
<input type="text" class="form-control rounded-right" onchange="updateField(this)" onfocus="this.select()">
</div>
<div class="input-group mt-3" data-type="enum">
<div class="input-group-prepend">
<span class="input-group-text" data-name></span>
</div>
<select class="form-control rounded-right" onchange="updateField(this)">
</select>
</div>
<div class="input-group mt-3" data-type="random">
<div class="input-group-prepend">
<span class="input-group-text" data-name></span>
<button type="button" class="btn btn-outline-secondary bg-light dropdown-toggle dropdown-toggle-split"
data-toggle="dropdown"></button>
<div class="dropdown-menu">
<a class="dropdown-item" value="exact" onclick="updateRangeType(this)" data-i18n="range.exact"></a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)" data-i18n="range.uniform"></a>
<a class="dropdown-item" value="binomial" onclick="updateRangeType(this)"
data-i18n="range.binomial"></a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateField(this)"
onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="range.min"></span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)"
onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="range.max"></span>
<input type="text" class="form-control range max d-none rounded-right" value="2" onchange="updateField(this)"
onfocus="this.select()">
<span class="input-group-text rounded-0 binomial d-none" data-i18n="range.n"></span>
<input type="text" class="form-control binomial n d-none" value="1" onchange="updateField(this)"
onfocus="this.select()">
<span class="input-group-text rounded-0 binomial d-none" data-i18n="range.p"></span>
<input type="text" class="form-control binomial p d-none rounded-right" value="0.5" onchange="updateField(this)"
onfocus="this.select()">
</div>
<div class="input-group mt-3" data-type="range">
<div class="input-group-prepend">
<span class="input-group-text" data-name></span>
<button type="button" class="btn btn-outline-secondary bg-light dropdown-toggle dropdown-toggle-split"
data-toggle="dropdown"></button>
<div class="dropdown-menu">
<a class="dropdown-item" value="exact" onclick="updateRangeType(this)" data-i18n="range.exact"></a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)" data-i18n="range.range"></a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateField(this)"
onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="range.min"></span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)"
onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="range.max"></span>
<input type="text" class="form-control range max d-none rounded-right" value="2" onchange="updateField(this)"
onfocus="this.select()">
</div>
<div class="input-group mt-3" data-type="boundary">
<div class="input-group-prepend">
<span class="input-group-text" data-name></span>
</div>
<span class="input-group-text rounded-0 range" data-i18n="range.min"></span>
<input type="text" class="form-control range min" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range" data-i18n="range.max"></span>
<input type="text" class="form-control range max rounded-right" onchange="updateField(this)"
onfocus="this.select()">
</div>
<div class="input-group mt-3" data-type="boolean">
<div class="input-group-prepend">
<span class="input-group-text" data-name></span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this)"
data-i18n="false"></button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this)"
data-i18n="true"></button>
</div>
</div>
<div class="input-group mt-3" data-type="json">
<div class="input-group-prepend">
<span class="input-group-text" data-name></span>
</div>
<textarea type="text" class="form-control code" onchange="updateField(this)" onfocus="this.select()"
style="height: 38px"></textarea>
</div>
<div class="input-group mt-3" data-type="json-list">
<textarea class="form-control code" onchange="updateField(this)" rows=3></textarea>
</div>
<div class="input-group mt-3" data-type="nbt">
<div class="input-group-prepend">
<span class="input-group-text" data-name></span>
</div>
<textarea type="text" class="form-control code" onchange="updateField(this)" onfocus="this.select()"
style="height: 38px"></textarea>
</div>
<div class="input-group mt-3" data-type="error">
<div class="input-group-prepend">
<span class="input-group-text text-danger" data-i18n="error"></span>
</div>
<input type="text" class="form-control bg-light text-danger" data-name readonly></input>
</div>
<div class="mt-3" data-type="set">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text" data-name></span>
</div>
<div class="input-group-append">
<button type="button"
class="btn btn-outline-secondary bg-light dropdown-toggle dropdown-toggle-split rounded-right"
data-toggle="dropdown"></button>
<div class="dropdown-menu scrollable-menu">
</div>
</div>
</div>
</div>
<div data-type="map">
<div class="input-group mt-3">
<div class="input-group-prepend">
<label class="input-group-text" data-name="1"></label>
</div>
<input type="text" class="form-control">
<div class="input-group-append">
<button class="btn btn-dark rounded-right" type="button" onclick="addToMap(this)" data-name="2"></button>
</div>
</div>
</div>
</div>
-248
View File
@@ -1,248 +0,0 @@
.help-tooltip {
width: 30px;
height: 30px;
padding: 6px 0px;
border-radius: 20px;
text-align: center;
font-size: 1rem;
line-height: 1;
margin: auto;
background-color: #E9ECEF;
border-width: 1px;
border-color: #CED4DA;
}
.card.bg-info {
background-color: #91cdd6 !important;
color: black !important;
}
.card.bg-success {
background-color: #91d8a1 !important;
color: black !important;
}
.card.bg-secondary {
background-color: #adb5bd !important;
color: black !important;
}
.card.bg-dark {
background-color: #646b72 !important;
color: white !important;
}
.card.child {
background-color: #eee !important;
}
.card.bg-info .card.bg-info {
background-color: #7cb6bf !important;
}
.card.bg-dark .card.bg-dark {
background-color: #565b60 !important;
}
.card.bg-dark .card.bg-dark .card.bg-dark {
background-color: #4b4f54 !important;
}
.btn-outline-danger:hover {
background-color: #dae0e5 !important;
color: black;
}
.btn-dark {
background-color: white !important;
color: #149633;
border-color: #149633 !important;
}
.btn-dark:hover {
color: black;
}
.dropdown-item {
cursor: pointer;
}
.code {
font-family: Courier New, Courier, Lucida Sans Typewriter, Lucida Typewriter, monospace;
tab-size: 4;
-moz-tab-size: 4;
-o-tab-size: 4;
-webkit-tab-size: 4;
}
textarea {
min-height: 37.6px;
}
textarea.invalid {
border-color: red !important;
}
textarea.invalid:focus {
box-shadow: 0 0 0 .2rem rgba(255,0,0,.25) !important;
}
.scrollable-menu {
height: auto;
max-height: 300px;
overflow-x: hidden;
}
#source {
white-space: pre;
overflow-wrap: normal;
overflow-x: scroll;
resize: both;
}
.card a {
color: #000 !important;
}
.card a:hover {
color: #333 !important;
text-decoration: none;
}
body[data-style="dark"] {
background-color: #222529;
}
body[data-style="dark"] #source {
background-color: #181a1d;
border-color: #646b72;
color: #ddd;
}
body[data-style="dark"] .form-control {
background-color: #343a40 !important;
color: #ddd;
border-color: #24282c;
}
body[data-style="dark"] .input-group-text {
background-color: #2d3236;
color: #fff;
border-color: #24282c;
}
body[data-style="dark"] .btn-outline-secondary {
background-color: #343a40 !important;
color: #ddd;
border-color: #24282c;
}
body[data-style="dark"] .btn-outline-dark {
filter: invert();
}
body[data-style="dark"] .custom-control-label {
color: #ddd;
}
body[data-style="dark"] .dropdown-menu {
background-color: #343a40;
color: #ddd;
}
body[data-style="dark"] .dropdown-item:hover {
background-color: #2d3236;
}
body[data-style="dark"] .card.bg-success {
background-color: #2f693e !important;
color: white !important;
}
body[data-style="dark"] .card.bg-light {
background-color: #32373c !important;
color: white !important;
}
body[data-style="dark"] .btn-light {
background-color: #282d31 !important;
color: white !important;
border-color: #282d31 !important;
}
body[data-style="dark"] .card.bg-secondary {
background-color: #707579 !important;
color: white !important;
}
body[data-style="dark"] .card.bg-info {
background-color: #2a707a !important;
color: black !important;
}
body[data-style="dark"] .card.bg-info .card.bg-info {
background-color: #3a929e !important;
color: black !important;
}
body[data-style="dark"] .btn-outline-danger {
background-color: #2d3236 !important;
}
body[data-style="dark"] .btn-dark {
background-color: #2d3236 !important;
color: #149633;
border-color: #149633;
}
body[data-style="dark"] .btn-dark:hover {
color: white;
}
body[data-style="dark"] .card.bg-dark {
background-color: #4b4f54 !important;
color: white !important;
}
body[data-style="dark"] .card.bg-dark .card.bg-dark {
background-color: #565b60 !important;
}
body[data-style="dark"] .card.bg-dark .card.bg-dark .card.bg-dark {
background-color: #646b72 !important;
}
body[data-style="dark"] .help-tooltip {
background-color: #2d3236;
color: #fff;
border-color: #24282c;
}
body[data-style="dark"] .card a {
color: #fff !important;
}
body[data-style="dark"] .card a:hover {
color: #ccc !important;
}
body[data-style="dark"] .alert-danger {
background-color: #6d2126;
border-color: #5e1b20;
color: #dfc4c7;
}
body[data-style="dark"] .alert-danger svg {
fill: #dfc4c7;
}
body[data-style="dark"] .card-group ~ div svg {
fill: #fff;
}
.alert-danger svg {
fill: #6d2126;
margin-right: 5px;
}
+4
View File
@@ -0,0 +1,4 @@
{
"baseUrl": "http://localhost:3000",
"blockHosts": ["www.google-analytics.com", "ssl.google-analytics.com"]
}
+3
View File
@@ -0,0 +1,3 @@
{
"defaultCommentOrder": "newest"
}
+43 -99
View File
@@ -1,104 +1,48 @@
<!doctype html>
<html>
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Google Analytics -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-73024255-2', 'auto');
ga('set', 'dimension1', localStorage.getItem('theme') ?? 'default');
ga('set', 'dimension2', 'v1');
ga('send', 'pageview');
</script>
<!-- End Google Analytics -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title data-i18n="title">Minecraft Generators 1.13 1.14 1.15</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
<link rel="stylesheet" href="css/custom.css">
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-S982VZS08T"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-S982VZS08T', {
send_page_view: false,
theme: localStorage.getItem('theme') || 'default',
version: localStorage.getItem('schema_version') || '1.21.9',
locale: localStorage.getItem('language') || 'en',
prefers_color_scheme: matchMedia('(prefers-color-scheme: light)').matches ? 'light' : matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'none',
tree_view_mode: localStorage.getItem('misode_tree_view_mode') || 'default',
colormap: localStorage.getItem('misode_colormap') || 'default',
});
</script>
<!-- End: Global site tag (gtag.js) - Google Analytics -->
<script>
(() => {
const theme = localStorage.getItem('theme')
const prefersLight = matchMedia('(prefers-color-scheme: light)').matches
if (theme === 'system' ? !prefersLight : theme !== 'light') {
document.documentElement.classList.add('dark')
}
})()
</script>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Data Pack Generators - Minecraft 1.19, 1.20, 1.21</title>
<link rel="icon" href="/src/favicon-32.png" sizes="32x32">
<script async src="https://media.ethicalads.io/media/client/ethicalads.min.js"></script>
<script>
if (typeof BigInt !== 'function') {
BigInt = function(e) { return e }
}
if (typeof BigInt64Array !== 'function') {
BigInt64Array = function() { }
}
</script>
</head>
<body>
<nav class="navbar navbar-expand-md navbar-dark bg-dark">
<span id="descriptionSpan" class="navbar-brand mb-0 h1" data-i18n="description"></span>
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#collapsibleNavbar">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="collapsibleNavbar">
<ul class="navbar-nav mr-md-auto mb-2 mb-md-0">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle mr-2" href="" role="button" data-toggle="dropdown">
🌎 Language
</a>
<div id="lngList" class="dropdown-menu"></div>
</li>
</ul>
<span class="ml-0 ml-md-2"><a href="https://github.com/misode/misode.github.io" style="color: #ddd;" data-i18n="credit"></a></span>
</div>
</nav>
<div class="container mt-4">
<div class="card-group mb-4">
<div class="card bg-success mb-3">
<a href="loot-table">
<div class="card-body">
<h5 class="card-title" data-i18n="title.loot-table"></h5>
<p class="card-subtitle">Minecraft 1.13, 1.14, 1.15, 1.16</p>
</div>
</a>
</div>
<div class="card bg-secondary mb-3">
<a href="advancement">
<div class="card-body">
<h5 class="card-title" data-i18n="title.advancement"></h5>
<p class="card-subtitle">Minecraft 1.15, 1.16</p>
</div>
</a>
</div>
<div class="card bg-info mb-3">
<a href="predicate">
<div class="card-body">
<h5 class="card-title" data-i18n="title.predicate"></h5>
<p class="card-subtitle">Minecraft 1.15, 1.16</p>
</div>
</a>
</div>
<div class="card bg-dark mb-3">
<a href="worldgen">
<div class="card-body">
<h5 class="card-title" data-i18n="title.worldgen"></h5>
<p class="card-subtitle">Minecraft 1.16</p>
<span class="badge badge-danger" data-i18n="badge.experimental"></span>
<span class="badge badge-danger" data-i18n="badge.unstable"></span>
</div>
</a>
</div>
</div>
<div>
<div class="card bg-light border-dark">
<a href="https://misode.github.io/dev/">
<div class="card-body" style="display: flex; justify-content: space-between; align-items: center;">
<div>
<h5 class="card-title">Try the new improved generator!</h5>
<p class="card-subtitle">Supports 1.16 world generation</p>
</div>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="32" height="32"><path fill-rule="evenodd" d="M8.22 2.97a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06l2.97-2.97H3.75a.75.75 0 010-1.5h7.44L8.22 4.03a.75.75 0 010-1.06z"></path></svg>
</div>
</a>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/i18next/17.0.6/i18next.min.js" integrity="sha384-DYhccENVzcHrB30my+vk/NvcnUix2+CCUl8Qg7XEzTE1cFLf2IoN5B6c5C38vABH" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/i18next-browser-languagedetector/3.0.1/i18nextBrowserLanguageDetector.min.js" integrity="sha384-14ws1HmRivxp+u6W816e62Gs33Y19jhG4zSJb6pL0pB+gYc+CgFXXp4ZnGXcaOww" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/i18next-xhr-backend/3.0.0/i18nextXHRBackend.min.js" integrity="sha384-dK+VwLEvPDbpKM7G7D/LtbW6W2zlt99nuVTwoYIkMulAedST9Vj9OCRkv2xV8GjD" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-i18next/1.2.1/jquery-i18next.min.js" integrity="sha384-fLTSt6zHOb152KeFkj7kSiXdkyjKf6fjk5bdzWYLDPDo9evwd9PVs3TKoYYaaxdl" crossorigin="anonymous"></script>
<script src="js/i18n.js" charset="utf-8"></script>
<script src="js/model.js" charset="utf-8"></script>
<script src="js/view.js" charset="utf-8"></script>
<script>initLng().then(() => { $('html').localize(); });</script>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>
<script src="./src/app/Main.tsx" type="module"></script>
</body>
</html>
-34
View File
@@ -1,34 +0,0 @@
const lngs = [
['en', 'English'],
['fr', 'Français'],
['pt', 'Português'],
['ru', 'Русский'],
['zh-CN', '简体中文']
]
lngs.forEach(v => $('#lngList').append(`<a class="dropdown-item" onclick="changeLng('${v[0]}')">${v[1]}</a>`))
function initLng() {
return i18next
.use(i18nextBrowserLanguageDetector)
.use(i18nextXHRBackend)
.init({
backend: { loadPath: '../locales/{{lng}}.json' },
fallbackLng: 'en',
whitelist: lngs.map(v => v[0]),
keySeparator: false
})
.then(() => {
jqueryI18next.init(i18next, $, { parseDefaultValueFromContent: false });
});
}
function changeLng(code) {
i18next.changeLanguage(code).then(() => {
if ('listeners' in window) {
listeners.forEach(l => l());
} else {
$('html').localize();
}
})
}
-518
View File
@@ -1,518 +0,0 @@
let indentation = 2;
let luckBased = false;
let historyBuffer = 100;
let history = ['{}'];
let historyIndex = 0;
let structure;
let components;
let collections;
let table = {};
let listeners = [];
const generators = {
'advancement': ['1.15', '1.16'],
'loot-table': ['1.13', '1.14', '1.15', '1.16'],
'predicate': ['1.15', '1.16'],
'worldgen': ['worldgen']
}
const params = new URLSearchParams(window.location.search);
if (params.has('s')) {
let short = params.get('s').slice(0, -7);
window.location = 'https://zws.im/' + short;
}
function addListener(listener) {
listeners.push(listener);
listener();
}
loadGenerator($('[data-generator]').attr('data-generator'));
function loadGenerator(generator) {
if (!generator) return;
const versions = generators[generator] || [];
versions.forEach(v => {
$('#versionList').append(`<a class="dropdown-item" onclick="changeVersion('${generator}', '${v}')">${v}</a>`)
});
const promises = [initShared(), initLng(), loadVersion(generator, versions[versions.length - 1])];
Promise.all(promises).then(() => {
if (params.has('q')) {
$('#source').val(atob(params.get('q')));
updateSource();
} else {
table = structure.default;
}
invalidated()
});
}
function loadVersion(generator, version) {
return $.getJSON('../schemas/' + version + '.json', json => {
structure = json.root || json.roots.find(e => e.id === generator);
components = json.components;
collections = json.collections;
}).fail((jqXHR, textStatus, errorThrown) => {
let message = 'Failed loading ' + version + ' schema';
structure = {};
console.error(message + '\n' + errorThrown);
}).always(() => {
$('#versionLabel').text(version);
});
}
function changeVersion(generator, version) {
loadVersion(generator, version).then(() => {
invalidated();
});
}
async function initShared() {
const components = await fetch('../components.html').then(r => r.text());
const shared = await fetch('../shared.html').then(r => r.text());
$('body').append(components);
$('div.container').append(shared);
}
$("#source").val('');
$('#luckBased').prop('checked', false);
$('#tableType').val("minecraft:generic");
$('#indentationSelect').val("2");
$(document).keydown(function(e){
if (e.which === 89 && e.ctrlKey ){
redo();
} else if (e.which === 90 && e.ctrlKey ){
undo();
}
});
function undo() {
if (historyIndex > 0) {
historyIndex -= 1;
table = JSON.parse(history[historyIndex]);
listeners.forEach(l => l());
}
}
function redo() {
if (historyIndex < history.length - 1) {
historyIndex += 1;
table = JSON.parse(history[historyIndex]);
listeners.forEach(l => l());
}
}
function invalidated() {
if (historyIndex === history.length - 1) {
history.push(JSON.stringify(table));
if (history.length > historyBuffer) {
history = history.slice(-historyBuffer);
}
historyIndex = history.length - 1;
} else {
historyIndex += 1;
history = history.slice(0, historyIndex);
history.push(JSON.stringify(table));
}
listeners.forEach(l => l());
}
function updateTableType() {
table.type = $('#tableType').val();
invalidated();
}
function updateLuckBased() {
luckBased = $('#luckBased').prop('checked');
invalidated();
}
function hideSource() {
$('.source-container').addClass('d-none');
$('.structure-container').removeClass('col-lg-7');
$('#showSourceButton').removeClass('d-none');
}
function showSource() {
$('.source-container').removeClass('d-none');
$('.structure-container').addClass('col-lg-7');
$('#showSourceButton').addClass('d-none');
}
async function linkSource() {
let site = window.location.origin + window.location.pathname;
let url = site + '?q=' + btoa(JSON.stringify(table));
if (url.length <= 500) {
let shortener = 'https://us-central1-zero-width-shortener.cloudfunctions.net/shortenURL?url=';
let response = await fetch(shortener + url);
let json = await response.json();
let id = Math.random().toString(36).substring(2, 9);
url = site + '?s=' + json.short + id;
}
$('#copyContainer').removeClass('d-none');
$('#copyTextarea').val(url);
$('#copyTextarea').get()[0].select();
}
function copyLink() {
$('#copyTextarea').get()[0].select();
document.execCommand('copy');
setTimeout(() => {
$('#copyContainer').addClass('d-none');
}, 100);
}
function updateSource() {
$('#source').removeClass('invalid');
try {
table = JSON.parse($('#source').val());
} catch(e) {
if ($('#source').val().length > 0) {
$('#source').addClass('invalid');
return;
}
table = {};
}
invalidated();
}
function updateIndentation(value) {
indentation = value;
invalidated();
}
function copySource(el) {
$('#source').get()[0].select();
document.execCommand('copy');
}
function getPath(el) {
let $node = $(el).closest('[data-index]');
let index = $node.attr('data-index');
if (index === 'root') return [];
let parent = getPath($node.parent());
parent.push(index);
return parent;
}
function getNode(path) {
let node = table;
for (let index of path) {
if (!isNaN(index)) {
index = +index;
} else if (node[index] === undefined) {
node[index] = {};
}
node = node[index];
}
return node;
}
function getType(el) {
let $field = $(el).closest('[data-index]');
if ($field) {
return $field.attr('data-type');
}
}
function getParent(el) {
let path = getPath(el);
path.pop();
return getNode(path);
}
function getSuperParent(el) {
let path = getPath(el);
path.pop();
path.pop();
return getNode(path);
}
function addComponent(el, array) {
let node = getNode(getPath(el));
if (!node[array]) {
node[array] = [];
}
node[array].push({});
invalidated();
}
function removeComponent(el) {
let path = getPath(el);
let index = path.pop();
let array = path.pop();
let node = getNode(path);
node[array].splice(index, 1);
if (node[array].length === 0) {
delete node[array];
}
invalidated();
}
function addToSet(el, array) {
let parent = getParent(el);
if (!parent[array]) {
parent[array] = [];
}
parent[array].push($(el).attr('value'));
invalidated();
}
function removeFromSet(el, array) {
let parent = getParent(el);
let index = parent[array].indexOf($(el).attr('value'));
if (index > -1) {
parent[array].splice(index, 1);
invalidated();
}
}
function isValidMapKey(key, node) {
return key.length > 0 && !(key in node)
}
function addToMap(el) {
let node = getParent(el);
let $field = $(el).closest('[data-index]');
let key = $field.find('input').val();
let map = $field.attr('data-index');
let type = $field.attr('data-item-type');
if (!node[map]) {
node[map] = {};
}
if (!isValidMapKey(key, node[map])) {
return;
}
if ($field.attr('data-resource')) {
key = fixResource(key)
}
if (type === 'int' || type === 'float' || type === 'random' || type === 'range' || type === 'boundary') {
node[map][key] = 0;
} else if (type === 'boolean') {
node[map][key] = false;
} else if (type === 'object') {
node[map][key] = {};
} else {
node[map][key] = "";
}
invalidated();
}
function renameMapKey(el) {
let key = $(el).text();
let $textarea = $('<textarea type="text" class="form-control mr-3 mb-2 float-left" style="max-height: 1em; max-width: 16em; overflow: hidden; display: inline;"></textarea>')
.val(key)
.keydown(e => preventNewline(e, 'blur'))
.on('blur', e => {
let newKey = $(e.target).val();
let path = getPath($(e.target));
let oldKey = path.pop();
let node = getNode(path);
if (newKey !== oldKey && isValidMapKey(newKey, node)){
node[newKey] = node[oldKey];
delete node[oldKey];
}
invalidated();
});
$(el).replaceWith($textarea);
$textarea.focus();
}
function removeFromMap(el) {
let path = getPath(el);
let key = path.pop();
let node = getNode(path);
delete node[key];
if (Object.keys(node).length === 0) {
let field = path.pop();
let parent = getNode(path);
delete parent[field];
}
invalidated();
}
function toggleCollapseObject(el) {
let path = getPath(el);
let index = path.pop();
let node = getNode(path);
if (typeof node[index] !== 'object') {
node[index] = {};
} else {
delete node[index];
}
invalidated();
}
function updateField(el) {
let path = getPath(el);
let $field = $(el).closest('[data-index]');
let field = path.pop();
let node = getNode(path);
let type = getType(el);
let value = undefined;
if (type === 'string' || type === 'int' || type === 'float' || type === 'enum' || type === 'json' || type === 'nbt' || type === 'string-list' || type === 'chance-list') {
value = $(el).val();
}
if (type === 'int') {
value = parseInt(value);
if (isNaN(value)) {
value = '';
}
} else if (type === 'float') {
value = parseFloat(value);
if (isNaN(value)) {
value = '';
}
} else if (type === 'string-list' || type === 'chance-list') {
value = value.split(',');
for (let i = 0; i < value.length; i += 1) {
value[i] = value[i].trim();
if (type === 'chance-list') {
value[i] = parseFloat(value[i]);
if (isNaN(value[i])) {
value = [];
break;
}
if (value[i] > 1) {
value[i] = 1;
} else if (value[i] < 0) {
value[i] = 0;
}
}
}
} else if (type === 'enum') {
if (value === 'unset') {
value = '';
}
} else if (type === 'nbt') {
if (!value.startsWith('{') && value.length > 0) {
value = '{' + value;
}
if (!value.endsWith('}') && value.length > 0) {
value = value + '}';
}
} else if (type === 'json') {
value = parseJSONValue(value)
} else if (type === 'json-list') {
value = [];
for (let line of $(el).val().split('\n')) {
value.push(parseJSONValue(line));
}
if (value.length === 0) {
value = '';
}
} else if (type === 'range' || type === 'random' || type === 'boundary') {
if (type === 'boundary' && node[field] === undefined) {
node[field] = {};
}
value = getRangeValue($field, node[field]);
} else if (type === 'checkbox') {
value = $(el).prop('checked');
} else if (type === 'boolean') {
value = getBooleanValue(node[field], ($(el).val() === 'true'));
}
if ($field.attr('data-resource')) {
value = fixResource(value)
}
if (value === '') {
delete node[field];
} else {
if (type === 'enum') {
node._changed = true;
}
node[field] = value;
}
invalidated();
}
function fixResource(value) {
const test = /^([a-z0-9_.-]*:)?[a-z0-9/_.-]+$/;
if (value.match(test) === null) {
value = value.toLowerCase();
if (value.match(test) === null) {
value = value.replace(/[^a-z0-9_.-]/g, '')
}
}
return value;
}
function updateRangeType(el) {
let path = getPath(el);
let field = path.pop();
let node = getNode(path);
let type = $(el).attr('value');
if (type === 'range') {
node[field] = {};
} else if (type === 'binomial') {
node[field] = {type: "minecraft:binomial"};
} else {
node[field] = 0;
}
updateField(el);
}
function getRangeValue($field, data) {
if (typeof data === 'object') {
if (data.type && data.type.match(/(minecraft:)?binomial/)) {
let n = $field.find('.binomial.n').val();
let p = $field.find('.binomial.p').val();
if (n) data.n = parseInt(n);
else delete data.n;
if (p) data.p = parseFloat(p);
else delete data.p;
} else {
let min = $field.find('.range.min').val();
let max = $field.find('.range.max').val();
if (min) data.min = parseFloat(min);
else delete data.min;
if (max) data.max = parseFloat(max);
else delete data.max;
}
} else {
data = parseFloat($field.find('.exact').val());
if (isNaN(data)) {
data = '';
}
}
return data;
}
function getBooleanValue(oldvalue, newvalue) {
if (oldvalue === newvalue) {
return '';
} else if (newvalue) {
return true;
} else {
return false;
}
}
function parseJSONValue(value) {
if (value.startsWith('"') || value.startsWith('{') || value.startsWith('[')) {
try {
return JSON.parse(value);
} catch(e) {
return value;
}
}
return value;
}
function collapseComponent(el) {
let path = getPath(el);
let field = path.pop();
let node = getNode(path);
if (node[field]._collapse) {
delete node[field]._collapse
} else {
node[field]._collapse = true;
}
invalidated();
}
-544
View File
@@ -1,544 +0,0 @@
const themes = ["light", "dark"];
themes.forEach(v => $('#themeList').append(`<a class="dropdown-item" onclick="changeTheme('${v}')" data-i18n="theme.${v}"></a>`));
addListener(updateView);
changeTheme(localStorage.getItem('theme'))
function changeTheme(theme) {
if (theme === null) {
theme = 'dark';
}
$('body').attr('data-style', theme);
localStorage.setItem('theme', theme);
}
function updateView() {
if (structure) {
let {out: sourceOut, component: $component} = generateSourceAndView(table, structure);
$('#structure').removeClass('d-none').html('');
$('#descriptionSpan').attr('data-i18n', structure.description);
$('title').attr('data-i18n', structure.title);
if (structure.id === 'worldgen') {
$('#structure').append('<div class="alert alert-danger" role="alert"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 000 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 00.01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg><span data-i18n="worldgen.warning"></span></div>')
}
$('#structure').append($component);
if (structure.id === 'worldgen') {
$('#versionLabel').addClass('d-none')
}
if (i18next.isInitialized) {
$('html').localize();
}
$('#source').val(JSON.stringify(sourceOut, null, indentation));
}
}
function generateSourceAndView(data, struct) {
if (struct.id === 'loot-table') {
$('#lootTableToolbar').removeClass('d-none');
$('#structure').attr('data-index', 'pools');
return generateTable(data, struct);
} else {
let {out: sourceOut, component: $component} = generateObject(data, struct);
$component.removeClass('mt-3');
return {out: sourceOut, component: $component};
}
}
function generateTable(data, struct) {
let out = {};
let $el = $('<div/>');
let type = struct.fields.find(e => e.id === 'type');
if (type) {
$('.table-type').removeClass('d-none');
$('#tableType').html('');
for (let option of type.values) {
$('#tableType').append(setValueAndName($('<option/>'), option, type.translateValue));
}
$('#tableType').val(data.type ? correctNamespace(data.type) : type.default);
out.type = data.type;
} else {
$('.table-type').addClass('d-none');
}
if (data.pools) {
let {out: outValue, component: $table} = generateComponent(data.pools, struct.fields.find(e => e.id === 'pools'));
out.pools = outValue;
$el.append($table);
}
$('#luck-based').attr('checked', luckBased);
return {out: out, component: $el};
}
function generateComponent(data, struct, options) {
switch (struct.type) {
case 'string': return generateString(data, struct, options);
case 'int': return generateString(data, struct, options);
case 'float': return generateString(data, struct, options);
case 'string-list': return generateString(data, struct, options);
case 'chance-list': return generateString(data, struct, options);
case 'boolean': return generateBoolean(data, struct, options);
case 'random': return generateRandom(data, struct, options);
case 'range': return generateRange(data, struct, options);
case 'boundary': return generateBoundary(data, struct, options);
case 'enum': return generateEnum(data, struct, options);
case 'set': return generateSet(data, struct, options);
case 'map': return generateMap(data, struct, options);
case 'json': return generateJson(data, struct, options);
case 'json-list': return generateJsonList(data, struct, options);
case 'nbt': return generateNbt(data, struct, options);
case 'array': return generateArray(data, struct, options);
case 'object': return generateObject(data, struct, options);
case 'error': return generateError(struct, options);
default: return generateError('Unknown component type "' + struct.type + '"');
}
}
function generateString(data, struct) {
let $el = $('#components').find('[data-type="string"]').clone();
$el.attr('data-type', struct.type);
$el.attr('data-index', struct.id);
$el.attr('data-resource', struct.resource);
$el.find('[data-name]').attr('data-i18n', struct.translate);
$el.find('input').val(data);
if (struct.help) {
$el.append(generateTooltip(struct.translate));
}
return {out: data, component: $el};
}
function generateBoolean(data, struct) {
let $el = $('#components').find('[data-type="boolean"]').clone();
$el.attr('data-index', struct.id);
$el.find('[data-name]').attr('data-i18n', struct.translate);
if (data === true) {
$el.find('[value="true"]').addClass('active bg-success');
} else if (data === false) {
$el.find('[value="false"]').addClass('active bg-danger');
}
if (struct.help) {
$el.append(generateTooltip(struct.translate));
}
return {out: data, component: $el};
}
function generateRandom(data, struct) {
let $el = $('#components').find('[data-type="random"]').clone();
$el.attr('data-index', struct.id);
$el.find('[data-name]').attr('data-i18n', struct.translate);
if (typeof data === 'object') {
if (data.type && correctNamespace(data.type) === 'minecraft:binomial') {
$el.find('.binomial').removeClass('d-none');
$el.find('.binomial.n').val(data.n);
$el.find('.binomial.p').val(data.p);
} else {
$el.find('.range').removeClass('d-none');
$el.find('.range.min').val(data.min);
$el.find('.range.max').val(data.max);
}
} else {
$el.find('.exact').removeClass('d-none');
$el.find('.exact').val(data);
}
if (struct.help) {
$el.append(generateTooltip(struct.translate));
}
return {out: data, component: $el};
}
function generateRange(data, struct) {
let $el = $('#components').find('[data-type="range"]').clone();
$el.attr('data-index', struct.id);
$el.find('[data-name]').attr('data-i18n', struct.translate);
if (typeof data === 'object') {
$el.find('.range').removeClass('d-none');
$el.find('.range.min').val(data.min);
$el.find('.range.max').val(data.max);
} else {
$el.find('.exact').removeClass('d-none');
$el.find('.exact').val(data);
}
if (struct.help) {
$el.append(generateTooltip(struct.translate));
}
return {out: data, component: $el};
}
function generateBoundary(data, struct) {
let $el = $('#components').find('[data-type="boundary"]').clone();
$el.attr('data-index', struct.id);
$el.find('[data-name]').attr('data-i18n', struct.translate);
if (data) {
$el.find('.range.min').val(data.min);
$el.find('.range.max').val(data.max);
}
if (struct.help) {
$el.append(generateTooltip(struct.translate));
}
return {out: data, component: $el};
}
function generateEnum(data, struct) {
let $el = $('#components').find('[data-type="enum"]').clone();
$el.attr('data-index', struct.id);
$el.find('[data-name]').attr('data-i18n', struct.translate);
let collection = struct.values;
if (typeof struct.values === 'string') {
collection = collections[struct.values];
}
if (struct.unset) {
$el.find('select').append(setValueAndName($('<option/>'), 'unset', undefined));
}
for (let value of collection) {
if (typeof value === 'object') {
if (structure.id === 'predicate' || value.require.includes(correctNamespace(table.type))) {
$el.find('select').append(setValueAndName($('<option/>'), value.value, struct.translateValue));
}
} else {
$el.find('select').append(setValueAndName($('<option/>'), value, struct.translateValue));
}
}
$el.find('select').val(collection.includes(data) ? data : correctNamespace(data));
if (struct.help) {
$el.append(generateTooltip(struct.translateValue + '.' + data.replace(/.*:/, '')));
}
return {out: data, component: $el};
}
function generateSet(data, struct) {
let $el = $('#components').find('[data-type="set"]').clone();
$el.attr('data-index', struct.id);
$el.find('[data-name]').attr('data-i18n', struct.translate);
let collection = struct.values;
if (typeof struct.values === 'string') {
collection = collections[struct.values];
}
for (let value of collection) {
if (data && (data.includes(value))) continue;
let $item = $('<a class="dropdown-item" onclick="addToSet(this, \'' + struct.id + '\')" />');
setValueAndName($item, value, struct.translateValue);
$el.find('.dropdown-menu').append($item);
}
if (data) {
let $setContainer = $('<div/>');
for (let option of data) {
let $item = $('<button type="button" onclick="removeFromSet(this, \'' + struct.id + '\')" />').addClass('btn btn-outline-danger bg-light btn-sm mr-2 mt-2');
setValueAndName($item, option, struct.translateValue);
$setContainer.append($item);
}
$el.append($setContainer);
}
return {out: data, component: $el};
}
function generateMap(data, struct) {
let $el = $('#components').find('[data-type="map"]').clone();
let $input = $el.find('input')
let out;
$el.attr('data-index', struct.id).attr('data-item-type', struct.values.type);
$el.attr('data-resource', struct.resource);
$el.find('[data-name="1"]').attr('data-i18n', struct.translate);
$el.find('[data-name="2"]').attr('data-i18n', struct.translate + '_add');
if (struct.help) {
$el.find('.input-group').append(generateTooltip(struct.translate));
}
$input.attr('data-i18n', `[placeholder]placeholder.${struct.translatePlaceholder}`);
$input.keypress((e) => {if (e.which == 13) addToMap(e.target);});
if (JSON.stringify(struct.default) === '{}') {
out = {}
}
if (data) {
for (let key of Object.keys(data)) {
out = out || {};
let field = struct.values;
field.id = key;
field.translate = key;
let {out: outValue, component: $item} = generateComponent(data[key], field);
if (field.type === 'object') {
let $header = $('<div class="card-header pb-1"></div>');
$header.append('<span class="input-group-text mr-3 mb-2 float-left" onclick="renameMapKey(this)" style="cursor: pointer;">' + key + '</span>');
$header.append('<button type="button" class="btn btn-danger mb-2 float-right" onclick="removeFromMap(this)" data-i18n="' + struct.translate + '_remove"></button>');
$item.prepend($header);
} else {
$item.addClass("pl-3");
$item.append('<div class="input-group-append"><button class="btn btn-outline-danger bg-light" type="button" onclick="removeFromMap(this)" data-i18n="remove"></button></div>');
}
out[field.id] = outValue;
$item.attr('data-index', field.id);
$el.append($item);
}
}
return {out: out, component: $el};
}
function setValueAndName($el, value, source) {
let option = value.split(':').slice(-1)[0];
option.replace(/\./, '_');
let name = (source) ? source + '.' + option : option;
return $el.attr('value', value).attr('data-i18n', name);
}
function correctNamespace(s) {
if (typeof s === 'string' && !s.includes(':')) return 'minecraft:' + s;
return s;
}
function generateJson(data, struct) {
let $el = $('#components').find('[data-type="json"]').clone();
$el.attr('data-index', struct.id);
$el.find('[data-name]').attr('data-i18n', struct.translate);
let raw;
if (typeof data !== 'string') {
raw = JSON.stringify(data);
} else {
raw = data;
}
$el.find('textarea').val(raw).keydown(e => preventNewline(e));
if (struct.help) {
$el.append(generateTooltip(struct.translate));
}
return {out: data, component: $el};
}
function generateJsonList(data, struct) {
let $el = $('#components').find('[data-type="json-list"]').clone();
$el.attr('data-index', struct.id);
$el.find('[data-name]').attr('data-i18n', struct.translate);
let jsonList = "";
if (data) {
for (let j = 0; j < data.length; j += 1) {
let value = data[j];
if (typeof value !== 'string') {
value = JSON.stringify(value);
}
jsonList += value;
if (j < data.length - 1) {
jsonList += "\n";
}
}
}
$el.find('textarea').val(jsonList);
return {out: data, component: $el};
}
function generateNbt(data, struct) {
let $el = $('#components').find('[data-type="nbt"]').clone();
$el.attr('data-index', struct.id);
$el.find('[data-name]').attr('data-i18n', struct.translate);
$el.find('textarea').val(data).keydown(e => preventNewline(e));
return {out: data, component: $el};
}
function generateError(error) {
let message = 'Unknown Error';
if (typeof error === 'object' && typeof error.message === 'string') {
message = error.message;
} else if (typeof error === 'string'){
message = error;
}
let $el = $('#components').find('[data-type="error"]').clone();
$el.find('[data-name]').val(message);
return {out: undefined, component: $el};
}
function generateArray(data, struct) {
let out = [];
if (!data || data.length === 0) {
return undefined;
}
let $el = $('<div/>').addClass('mt-3');
let child = components.find(e => e.id === struct.values);
for (let i = 0; i < data.length; i += 1) {
let {out: outValue, component: $child} = generateComponent(data[i], child, {header: true});
out.push(outValue);
$child.attr('data-index', i);
$child.removeAttr('data-type');
$el.append($child);
}
$el.children().first().removeClass('mt-3');
return {out: out, component: $el};
}
function generateObject(data, struct, options) {
let out = {};
if (struct.id === 'condition' && data.condition === 'minecraft:requirements') {
out = {
condition: "minecraft:inverted",
term: {
condition: "minecraft:alternative",
terms: []
}
};
}
let $el = $('<div/>').addClass('mt-3');
let $header = $('<div/>');
let $body = $('<div/>');
if (options && options.header) {
$header.appendTo($el);
$header.append('<button type="button" class="btn btn-danger mb-2 float-right" onclick="removeComponent(this)" data-i18n="' + struct.id + '_remove"></button>');
let icon = 'https://cdnjs.cloudflare.com/ajax/libs/octicons/8.5.0/svg/chevron-down.svg';
if (data._collapse) {
icon = 'https://cdnjs.cloudflare.com/ajax/libs/octicons/8.5.0/svg/chevron-right.svg';
}
$header.append('<button type="button" class="btn btn-outline-dark mr-3 mb-2 float-left" onclick="collapseComponent(this)"><img src="' + icon + '" alt=""></button>');
}
let parentFilter = options ? options.filter : undefined;
if (struct.card !== false) {
$el.addClass('card bg-' + struct.color);;
$header.addClass('card-header pb-1');
$body.addClass('card-body');
}
if (!data._collapse) {
$el.append($body);
}
if (!struct.fields) {
let child = components.find(e => e.id === struct.value);
return generateObject(data, child, options);
}
let filter;
for (let field of struct.fields) {
if (filter === undefined) {
filterField = struct.fields.find(e => e.type === 'enum' && e.filter === true);
if (filterField) {
filter = data[filterField.id];
}
}
if (!luckBased && field.luckBased) {
continue;
}
if (field.require) {
const includes = field.require.includes(filter || parentFilter)
if (!!field.invertRequire === includes) {
continue;
}
}
if (data[field.id] === undefined && field.default !== undefined) {
data[field.id] = JSON.parse(JSON.stringify(field.default));
}
if (field.collapse) {
let hasNoValue = typeof data[field.id] !== 'object';
let arrowDirection = hasNoValue ? 'dropright' : 'dropdown'
$body.append('<span class="' + arrowDirection + '"><button type="button" class="mt-3 btn btn-light dropdown-toggle" onclick="toggleCollapseObject(this)" data-index="' + field.id + '" data-i18n="' + field.translate + '"></button></span>');
if (hasNoValue && field.values) {
let outValue, $field;
({out: outValue, component: $field} = generateEnum(data[field.id], field));
out[field.id] = outValue;
const $selection = $($field.children()[1]);
const $dropdown = $body.children().last();
$selection.addClass('mt-3');
$dropdown.addClass('input-group');
$($dropdown.children()[0])
.css('border-top-right-radius', '0')
.css('border-bottom-right-radius', '0');
$selection.attr('data-type', 'enum');
$selection.attr('data-index', field.id);
$dropdown.append($selection);
}
if (field.help) {
const $tooltip = generateTooltip(field.translate)
$tooltip.addClass('mt-3')
$body.children().last().append($tooltip);
}
if (hasNoValue) {
if (!field.values) {
$body.append('<div/>');
}
continue;
}
}
let outValue, $field;
try {
({out: outValue, component: $field} = generateField(data, field, struct, filter));
} catch (e) {
console.error(e);
({out: outValue, component: $field} = generateError('Failed generating "' + field.id + '" field'));
}
if ($field !== false) {
if (struct.id === 'condition' && data.condition === 'minecraft:requirements') {
if (field.id === 'terms' && outValue) {
for (let term of outValue) {
if (term && term.condition === 'minecraft:inverted') {
out.term.terms.push(term.term);
} else {
out.term.terms.push({
condition: 'minecraft:inverted',
term: term
});
}
}
}
} else {
out[field.id] = outValue;
}
if (field.type === 'array') {
let color = field.color || components.find(e => e.id === field.values).color;
let $button = $('<button type="button" class="btn btn-' + color + ' mr-3" onclick="addComponent(this, \'' + field.id + '\')" data-i18n="' + field.translate + '_add"></button>');
if (options && options.header && field.button === 'header') {
$header.append($button.addClass('mb-2 float-left'));
} else if (field.button === 'field') {
$body.append($button.addClass('mt-3'));
}
}
$body.append($field);
}
}
if (struct.card === false) {
// Note: JSON.parse(JSON.stringify(out)) can remove undefined values in the out object.
if (Object.keys(JSON.parse(JSON.stringify(out))).length === 0) {
out = undefined;
}
}
$body.children().first().children('button').removeClass('mt-3');
$body.children().first().removeClass('mt-3');
if (struct.id === 'condition' && out.condition === 'minecraft:inverted') {
if (out.term.condition === 'minecraft:inverted') {
out = out.term.term;
}
}
return {out: out, component: $el};
}
function generateField(data, field, parent, filter) {
if (data[field.id] === undefined && field.type === 'object') {
data[field.id] = {};
}
if (field.type === 'enum' && data._changed) {
for (const f of field.clear || []) {
delete data[f];
}
delete data._changed;
}
try {
let result = generateComponent(data[field.id], field, {filter});
if (result) {
let {out: out, component: $field} = result;
if (field.class) {
$field.addClass(field.class);
}
$field.attr('data-index', field.id);
return {out: out, component: $field};
}
} catch (e) {
console.error(e);
return generateError('Failed generating "' + field.id + '" component');
}
return false;
}
function generateTooltip(str) {
let $el = $('<button type="button" class="btn help-tooltip ml-2" data-toggle="tooltip" data-help="' + str + '">?</button>');
$el.tooltip({title: i18next.t('help.' + str)});
return $el;
}
function preventNewline(e, event = 'change') {
if (e.which === 13) {
$(e.target).trigger(event);
e.preventDefault();
}
}
-636
View File
@@ -1,636 +0,0 @@
{
"2_spaces": "2 Spaces",
"4_spaces": "4 Spaces",
"attribute.generic.armor": "Armor",
"attribute.generic.armorToughness": "Armor Toughness",
"attribute.generic.armor_toughness": "Armor Toughness",
"attribute.generic.attackDamage": "Attack Damage",
"attribute.generic.attack_damage": "Attack Damage",
"attribute.generic.attackKnockback": "Attack Knockback",
"attribute.generic.attack_knockback": "Attack Knockback",
"attribute.generic.attackSpeed": "Attack Speed",
"attribute.generic.attack_speed": "Attack Speed",
"attribute.generic.flyingSpeed": "Flying Speed",
"attribute.generic.flying_speed": "Flying Speed",
"attribute.generic.followRange": "Follow Range",
"attribute.generic.follow_range": "Follow Range",
"attribute.generic.knockbackResistance": "Knockback Resistance",
"attribute.generic.knockback_resistance": "Knockback Resistance",
"attribute.generic.luck": "Luck",
"attribute.generic.maxHealth": "Max Health",
"attribute.generic.max_health": "Max Health",
"attribute.generic.movementSpeed": "Movement Speed",
"attribute.generic.movement_speed": "Movement Speed",
"attribute.horse.jumpStrength": "Jump Strength",
"attribute.horse.jump_strength": "Jump Strength",
"attribute.zombie.spawnReinforcements": "Spawn Reinforcements",
"attribute.zombie.spawn_reinforcements": "Spawn Reinforcements",
"attribute_modifier.amount": "Amount",
"attribute_modifier.attribute": "Attribute",
"attribute_modifier.name": "Name",
"attribute_modifier.operation": "Operation",
"attribute_modifier.operation.addition": "Addition",
"attribute_modifier.operation.multiply_base": "Multiply Base",
"attribute_modifier.operation.multiply_total": "Multiply Total",
"attribute_modifier.slot": "Slots",
"attribute_modifier.slot.chest": "Chest",
"attribute_modifier.slot.feet": "Feet",
"attribute_modifier.slot.head": "Head",
"attribute_modifier.slot.legs": "Legs",
"attribute_modifier.slot.mainhand": "Mainhand",
"attribute_modifier.slot.offhand": "Offhand",
"attribute_modifier_add": "Add Modifier",
"attribute_modifier_remove": "Remove Modifier",
"badge.experimental": "Experimental",
"badge.unstable": "Unstable",
"biome": "Biome",
"biome.parameters": "Parameters",
"biome.parameters.altitude": "Altitude",
"biome.parameters.weirdness": "Weirdness",
"biome.parameters.offset": "Offset",
"biome.parameters.temperature": "Temperature",
"biome.parameters.humidity": "Humidity",
"biome_add": "Add Biome",
"biome_remove": "Remove Biome",
"biome_source.biome": "Biome",
"biome_source.biomes": "Biomes",
"biome_source.large_biomes": "Large Biomes",
"biome_source.preset": "Biomes Preset",
"biome_source.preset.nether": "Nether",
"biome_source.seed": "Biomes Seed",
"biome_source.type": "Biome Source",
"biome_source.type.fixed": "Fixed",
"biome_source.type.multi_noise": "Multi Noise",
"biome_source.type.checkerboard": "Checkerboard",
"biome_source.type.vanilla_layered": "Vanilla Layered",
"biome_source.type.the_end": "The End",
"child_add": "Add Child",
"condition.block": "Block",
"condition.block_state": "Block State",
"condition.block_state_add": "Add Block State",
"condition.block_state_remove": "Remove Block State",
"condition.chance": "Chance",
"condition.chances": "Chances",
"condition.damage_source": "Damage Source",
"condition.enchantment": "Enchantment",
"condition.entity": "Entity",
"condition.inverse": "Inverted",
"condition.item": "Item",
"condition.location": "Location",
"condition.looting_multiplier": "Looting Multiplier",
"condition.name": "Predicate Name",
"condition.offsetX": "X Offset",
"condition.offsetY": "Y Offset",
"condition.offsetZ": "Z Offset",
"condition.raining": "Raining",
"condition.score": "Objective",
"condition.score_add": "Add Score",
"condition.score_remove": "Remove Score",
"condition.term": "Term",
"condition.thundering": "Thundering",
"condition.time_value": "Value",
"condition.time_period": "Period",
"condition.type": "Condition",
"condition.type.alternative": "Alternative (OR)",
"condition.type.block_state_property": "Block Properties",
"condition.type.damage_source_properties": "Damage Source",
"condition.type.entity_properties": "Entity Properties",
"condition.type.entity_scores": "Entity Scores",
"condition.type.inverted": "Inverted (NOT)",
"condition.type.killed_by_player": "Killed by Player",
"condition.type.location_check": "Location",
"condition.type.match_tool": "Tool Properties",
"condition.type.random_chance": "Random Chance",
"condition.type.random_chance_with_looting": "Random Chance with Looting",
"condition.type.reference": "Reference",
"condition.type.requirements": "Requirements (AND)",
"condition.type.survives_explosion": "Survives Explosion",
"condition.type.table_bonus": "Table Bonus",
"condition.type.time_check": "Time",
"condition.type.weather_check": "Weather",
"condition_add": "Add Condition",
"condition_remove": "Remove Condition",
"copy": "Copy",
"credit": "on GitHub",
"criteria": "Criteria",
"criteria.trigger": "Trigger",
"criteria.conditions": "Conditions",
"criteria.block": "Block",
"criteria.num_bees_inside": "Number of Bees Inside",
"criteria.child": "Child",
"criteria.parent": "Parent",
"criteria.partner": "Partner",
"criteria.potion": "Potion",
"criteria.from_dimension": "From",
"criteria.to_dimension": "To",
"criteria.beacon_level": "Pyramid Level",
"criteria.villager": "Villager",
"criteria.zombie": "Zombie",
"criteria.effects": "Effects",
"criteria.effects_add": "Add Effect",
"criteria.effects_remove": "Remove Effect",
"criteria.state": "States",
"criteria.state_add": "Add State",
"criteria.xp_levels": "XP Level",
"criteria.damage": "Damage",
"criteria.source_entity": "Source Entity",
"criteria.victim_entity": "Victim Entity",
"criteria.killing_blow": "Killing Blow",
"criteria.pulled_entity": "Pulled Entity",
"criteria.rod": "Rod",
"criteria.slots": "Slots",
"criteria.slots.empty": "Slots Empty",
"criteria.slots.occupied": "Slots Occupied",
"criteria.slots.full": "Slots Full",
"criteria.items": "Items",
"criteria.items_add": "Add Item",
"criteria.delta": "Delta",
"criteria.durability": "Durability",
"criteria.item": "Item",
"criteria.unique_entity_types": "Amount of Unique Entity Types",
"criteria.victims": "Victims",
"criteria.victims_add": "Add Victim",
"criteria.victims_remove": "Remove Victim",
"criteria.distance": "Distance",
"criteria.duration": "Duration",
"criteria.location": "Location",
"criteria.recipe": "Recipe",
"criteria.entity": "Entity",
"criteria.loot_table": "Loot Table",
"criteria.player": "Player",
"criteria.entered": "Entered Location",
"criteria.exited": "Exited Location",
"criteria_add": "Add Criterion",
"criteria_remove": "Remove Criterion",
"damage.blocked": "Blocked",
"damage.dealt": "Damage Dealt",
"damage.taken": "Damage Taken",
"damage.type": "Damage Type",
"damage_source.bypasses_armor": "Bypass Armor",
"damage_source.bypasses_invulnerability": "Void",
"damage_source.bypasses_magic": "Starvation",
"damage_source.direct_entity": "Direct Entity",
"damage_source.is_explosion": "Explosion",
"damage_source.is_fire": "Fire",
"damage_source.is_lightning": "Lightning",
"damage_source.is_magic": "Magic",
"damage_source.is_projectile": "Projectile",
"damage_source.source_entity": "Source Entity",
"description": "Minecraft: Java Edition Generators",
"description.loot-table": "Loot Table Generator for Minecraft: Java Edition",
"description.predicate": "Predicate Generator for Minecraft: Java Edition",
"description.advancement": "Advancement Generator for Minecraft: Java Edition",
"description.worldgen": "Worldgen Settings Generator for Minecraft: Java Edition",
"dimension": "Dimension",
"dimension_add": "Add Dimension",
"dimension_remove": "Remove Dimension",
"dimension.overworld": "Overworld",
"dimension.the_end": "The End",
"dimension.the_nether": "The Nether",
"dimension.type": "Dimension Type",
"dimension.type.name": "Name",
"dimension.type.ultrawarm": "Ultrawarm",
"dimension.type.natural": "Natural",
"dimension.type.shrunk": "Shrunk",
"dimension.type.piglin_safe": "Piglin Safe",
"dimension.type.respawn_anchor_works": "Respawn Anchor Works",
"dimension.type.bed_works": "Bed Works",
"dimension.type.has_raids": "Has Raids",
"dimension.type.ambient_light": "Ambient Light",
"dimension.type.fixed_time": "Fixed Time",
"dimension.type.has_skylight": "Has Skylight",
"dimension.type.has_ceiling": "Has Ceiling",
"dimension.type.logical_height": "Logical Height",
"dimension.type.infiniburn": "Infiniburn",
"dimension.type.presets.overworld": "Overworld",
"dimension.type.presets.the_nether": "The Nether",
"dimension.type.presets.the_end": "The End",
"display": "Display",
"display.icon": "Icon",
"display.icon.item": "Icon Item",
"display.icon.nbt": "Icon NBT",
"display.title": "Title",
"display.description": "Description",
"display.frame": "Frame",
"display.frame.challenge": "Challenge",
"display.frame.goal": "Goal",
"display.frame.task": "Task",
"display.background": "Background",
"display.show_toast": "Show Toast",
"display.announce_to_chat": "Announce To Chat",
"display.hidden": "Hidden",
"distance.absolute": "Absolute",
"distance.horizontal": "Horizontal",
"distance.x": "X",
"distance.y": "Y",
"distance.z": "Z",
"enchantment.aqua_affinity": "Aqua Affinity",
"enchantment.bane_of_arthropods": "Bane of Arthropods",
"enchantment.binding_curse": "Curse of Binding",
"enchantment.blast_protection": "Blast Protection",
"enchantment.channeling": "Channeling",
"enchantment.depth_strider": "Depth Strider",
"enchantment.efficiency": "Efficiency",
"enchantment.feather_falling": "Feather Falling",
"enchantment.fire_aspect": "Fire Aspect",
"enchantment.fire_protection": "Fire Protection",
"enchantment.flame": "Flame",
"enchantment.fortune": "Fortune",
"enchantment.frost_walker": "Frost Walker",
"enchantment.impaling": "Impaling",
"enchantment.infinity": "Infinity",
"enchantment.knockback": "Knockback",
"enchantment.looting": "Looting",
"enchantment.loyalty": "Loyalty",
"enchantment.luck_of_the_sea": "Luck of the Sea",
"enchantment.lure": "Lure",
"enchantment.mending": "Mending",
"enchantment.multishot": "Multishot",
"enchantment.piercing": "Piercing",
"enchantment.power": "Power",
"enchantment.projectile_protection": "Projectile Protection",
"enchantment.protection": "Protection",
"enchantment.punch": "Punch",
"enchantment.quick_charge": "Quick Charge",
"enchantment.respiration": "Respiration",
"enchantment.riptide": "Riptide",
"enchantment.sharpness": "Sharpness",
"enchantment.silk_touch": "Silk Touch",
"enchantment.smite": "Smite",
"enchantment.soul_speed": "Soul Speed",
"enchantment.sweeping": "Sweeping Edge",
"enchantment.thorns": "Thorns",
"enchantment.unbreaking": "Unbreaking",
"enchantment.vanishing_curse": "Curse of Vanishing",
"enchantment_add": "Add Enchantment",
"enchantment_remove": "Remove Enchantment",
"entity.distance": "Distance",
"entity.equipment": "Equipment",
"entity.fishing_hook": "Fishing Hook",
"entity.fishing_hook.in_open_water": "In Open Water",
"entity.flags": "Flags",
"entity.isBaby": "Baby",
"entity.isOnFire": "On Fire",
"entity.isSneaking": "Sneaking",
"entity.isSprinting": "Sprinting",
"entity.isSwimming": "Swimming",
"entity.location": "Location",
"entity.nbt": "NBT",
"entity.player": "Player",
"entity.player.advancements": "Advancements",
"entity.player.advancements_add": "Add Advancement",
"entity.player.advancements_remove": "Remove Advancement",
"entity.player.gamemode": "Game Mode",
"entity.player.level": "Exp Level",
"entity.player.recipes": "Recipes",
"entity.player.recipes_add": "Add Recipe",
"entity.player.recipes_remove": "Remove Recipe",
"entity.player.stats": "Statistics",
"entity.status_effect": "Effects",
"entity.status_effect_add": "Add Effect",
"entity.status_effect_remove": "Remove Effect",
"entity.targeted_entity": "Targeted Entity",
"entity.team": "Team",
"entity.type": "Entity",
"entity.vehicle": "Vehicle",
"entry.expand": "Expand",
"entry.name": "Name",
"entry.quality": "Quality",
"entry.type": "Type",
"entry.type.alternatives": "Alternatives",
"entry.type.dynamic": "Dynamic",
"entry.type.empty": "Empty",
"entry.type.group": "Group",
"entry.type.item": "Item",
"entry.type.loot_table": "Loot Table",
"entry.type.sequence": "Sequence",
"entry.type.tag": "Item Tag",
"entry.weight": "Weight",
"entry_add": "Add Entry",
"entry_remove": "Remove Entry",
"error": "Error",
"false": "False",
"function.block": "Block",
"function.bonusMultiplier": "Multiplier",
"function.count": "Count",
"function.damage": "Damage",
"function.data": "Data",
"function.decoration": "Decoration",
"function.destination": "Destination",
"function.enchantment": "Enchantment",
"function.enchantments": "Optional Enchantments",
"function.entity": "Entity",
"function.extra": "Extra",
"function.formula": "Formula",
"function.formula.binomial_with_bonus_count": "Binomial with Bonus Count",
"function.formula.ore_drops": "Ore Drops",
"function.formula.uniform_bonus_count": "Uniform Bonus Count",
"function.levels": "Levels",
"function.limit": "Limit",
"function.lore": "Lore",
"function.name": "Name",
"function.nbt": "NBT",
"function.probability": "Probability",
"function.properties": "Properties",
"function.replace": "Replace",
"function.searchRadius": "Search Radius (Chunks)",
"function.seed": "Seed",
"function.skipExistingChunks": "Skip Existing Chunks",
"function.source": "Source",
"function.treasure": "Treasure",
"function.type": "Function",
"function.type.apply_bonus": "Apply Bonus",
"function.type.copy_name": "Copy Name",
"function.type.copy_nbt": "Copy NBT",
"function.type.copy_state": "Copy Block States",
"function.type.enchant_randomly": "Enchant Randomly",
"function.type.enchant_with_levels": "Enchant With Levels",
"function.type.exploration_map": "Exploration Map Properties",
"function.type.explosion_decay": "Explosion Decay",
"function.type.fill_player_head": "Fill Player Head",
"function.type.furnace_smelt": "Furnace Smelt",
"function.type.limit_count": "Limit Count",
"function.type.looting_enchant": "Looting Enchant",
"function.type.set_attributes": "Set Attributes",
"function.type.set_contents": "Set Contents",
"function.type.set_count": "Set Count",
"function.type.set_damage": "Set Damage",
"function.type.set_data": "Set Data",
"function.type.set_lore": "Set Lore",
"function.type.set_loot_table": "Set Loot Table",
"function.type.set_name": "Set Name",
"function.type.set_nbt": "Set NBT",
"function.type.set_stew_effect": "Set Stew Effect",
"function.zoom": "Zoom",
"function_add": "Add Function",
"function_remove": "Remove Function",
"gamemode.adventure": "Adventure",
"gamemode.creative": "Creative",
"gamemode.spectator": "Spectator",
"gamemode.survival": "Survival",
"generator.type": "Generator Type",
"generator.type.noise": "Default",
"generator.type.flat": "Superflat",
"generator.type.debug": "Debug World",
"generator.seed": "Dimension Seed",
"generator.settings": "Generator Settings",
"generator.settings.bedrock_roof_position": "Bedrock Roof Position",
"generator.settings.bedrock_floor_position": "Bedrock Floor Position",
"generator.settings.sea_level": "Sea Level",
"generator.settings.disable_mob_generation": "Disable Mob Generation",
"generator.settings.default_block.name": "Default Block",
"generator.settings.default_fluid.name": "Default Fluid",
"generator.settings.block_states": "Block States",
"generator.settings.block_states_add": "Add Block State",
"generator.settings.fluid_states": "Fluid States",
"generator.settings.fluid_states_add": "Add Fluid State",
"generator.settings.layers_add": "Add Layer",
"generator.settings.noise": "Noise Options",
"generator.settings.noise.density_factor": "Density Factor",
"generator.settings.noise.density_offset": "Density Offset",
"generator.settings.noise.simplex_surface_noise": "Simplex Surface Noise",
"generator.settings.noise.random_density_offset": "Random Density Offset",
"generator.settings.noise.island_noise_override": "Island Noise Override",
"generator.settings.noise.amplified": "Amplified",
"generator.settings.noise.size_horizontal": "Size Horizontal",
"generator.settings.noise.size_vertical": "Size Vertical",
"generator.settings.noise.height": "Height",
"generator.settings.noise.sampling.xz_scale": "Sampling XZ Scale",
"generator.settings.noise.sampling.y_scale": "Sampling Y Scale",
"generator.settings.noise.sampling.xz_factor": "Sampling XZ Factor",
"generator.settings.noise.sampling.y_factor": "Sampling Y Factor",
"generator.settings.noise.bottom_slide.target": "Bottom Slide Target",
"generator.settings.noise.bottom_slide.size": "Bottom Slide Size",
"generator.settings.noise.bottom_slide.offset": "Bottom Slide Offset",
"generator.settings.noise.top_slide.target": "Top Slide Target",
"generator.settings.noise.top_slide.size": "Top Slide Size",
"generator.settings.noise.top_slide.offset": "Top Slide Offset",
"generator.settings.presets.overworld": "Overworld",
"generator.settings.presets.nether": "Nether",
"generator.settings.presets.end": "End",
"generator.settings.presets.amplified": "Amplified",
"generator.settings.presets.caves": "Caves",
"generator.settings.presets.floating_islands": "Floating Islands",
"generator.settings.structures": "Structures",
"generator.settings.structures_add": "Add Structure",
"generator.settings.structures_remove": "Remove Structure",
"help.biome.parameters.altitude": "These parameters determine the placement of the biome. Every biome must have a unique combination of them. Biomes with similar values will generate next to each other.",
"help.biome_source.type.fixed": "One biome for the whole world",
"help.biome_source.type.multi_noise": "Custom biome distribution with configurable parameters",
"help.biome_source.type.checkerboard": "Biomes generating in a checkerboard chunk pattern",
"help.biome_source.type.vanilla_layered": "Biome distribution for the overworld",
"help.biome_source.type.the_end": "Biome distrubution for the end",
"help.condition.chances": "List of floats between 0 and 1 separated by commas",
"help.condition.time_period": "If present, time will be modulo-divided by this value. For example, if set to 24000, value will operate on a time period of days.",
"help.dimension": "The identifier used for \"/execute in\". Must be all lowercase.",
"help.dimension.type": "Global options for the dimension. Click on the label to customize.",
"help.dimension.type.name": "Internal dimension type name. Set this to the dimension ID.",
"help.dimension.type.ultrawarm": "If true, water will evaporate and sponges will dry",
"help.dimension.type.natural": "If true, portals will spawn zombified pigmen. If false, compasses will spin.",
"help.dimension.type.shrunk": "Whether coordinates should be scaled down by a factor of 8",
"help.dimension.type.ambient_light": "Value between 0 and 1",
"help.dimension.type.fixed_time": "Setting this value will keep the sun in a fixed position",
"help.display": "If present, advancement will be visible in the advancement tabs",
"help.entry.expand": "If false, entry will return all contents of tag, otherwise entry will behave as multiple item entries",
"help.entry.type.alternatives": "Tests conditions of the child entries and executes the first that can run",
"help.entry.type.dynamic": "Gets block specific drops",
"help.entry.type.empty": "Adds nothing to the pool",
"help.entry.type.group": "Executes all child entries when own conditions pass",
"help.entry.type.item": "Adds a single item",
"help.entry.type.loot_table": "Adds the contents of another loot table",
"help.entry.type.sequence": "Executes child entries until the first one that can't run due to conditions",
"help.entry.type.tag": "Adds the contents of an item tag",
"help.generator.settings": "Terrain settings. Click on the label to customize.",
"help.generator.settings.bedrock_roof_position": "Relative position of the bedrock roof starting at the world height. Higher numbers move the roof down.",
"help.generator.settings.bedrock_floor_position": "Position of the bedrock floor. Higher numbers move the floor up.",
"help.generator.settings.disable_mob_generation": "If true, mobs will not spawn during generation",
"help.generator.settings.noise.density_factor": "When set to 0, islands will generate",
"help.generator.settings.noise.density_offset": "Used to offset the terrain height. Use the following formula: \"terrain height = ((density_offset / density_factor) + 1) * height / 2\"",
"help.generator.settings.noise.size_horizontal": "Value must be either 1, 2 or 4. Values greater than 4 result in no terrain. Higher values result in smoother terrain.",
"help.generator.settings.noise.size_vertical": "Value between 1 and 4",
"help.generator.settings.noise.island_noise_override": "When true, the terrain will generate like the end with one larger island in the center and more islands further out",
"help.generator.settings.structures": "Not specifying a structure will cause it to spawn extremely frequently",
"help.pool.rolls": "The amount of entries that are randomly chosen",
"help.structure.spacing": "The maximum distance in chunks between two structures",
"help.structure.separation": "The minumum distance in chunks between two structures. Must be smaller than spacing.",
"hide_source": "Hide Source",
"item.count": "Count",
"item.durability": "Durability",
"item.enchantment": "Enchantment",
"item.levels": "Levels",
"item.name": "Item ID",
"item.nbt": "NBT",
"item.potion": "Potion",
"item.tag": "Item Tag",
"item_remove": "Remove Item",
"layer_remove": "Remove Layer",
"layer.block": "Block ID",
"layer.height": "Height",
"location.biome": "Biome",
"location.block": "Block",
"location.block.block": "Block ID",
"location.block.nbt": "NBT",
"location.block.state": "Block State",
"location.block.state_add": "Add Block State",
"location.block.state_remove": "Remove Block State",
"location.block.tag": "Block Tag",
"location.dimension": "Dimension",
"location.feature": "Feature",
"location.fluid": "Fluid",
"location.fluid.fluid": "Fluid ID",
"location.fluid.state": "Fluid State",
"location.fluid.state_add": "Add Fluid State",
"location.fluid.state_remove": "Remove Fluid State",
"location.fluid.tag": "Fluid Tag",
"location.light": "Light",
"location.light.light": "Visible Light Level",
"location.position": "Position",
"location.position.x": "X",
"location.position.y": "Y",
"location.position.z": "Z",
"location.smokey": "Smokey",
"luck_based": "Luck-based",
"more": "More",
"nbt_operation.operation": "Operation",
"nbt_operation.operation.append": "Append",
"nbt_operation.operation.merge": "Merge",
"nbt_operation.operation.replace": "Replace",
"nbt_operation.source": "Source",
"nbt_operation.target": "Target",
"nbt_operation_add": "Add Operation",
"nbt_operation_remove": "Remove Operation",
"parent": "Parent Advancement",
"placeholder.advancement": "An advancement ID",
"placeholder.block_state": "A block state key",
"placeholder.criteria": "A criterion ID",
"placeholder.dimension": "A dimension ID",
"placeholder.effect": "An status effect ID",
"placeholder.fluid_state": "A fluid state key",
"placeholder.objective": "An scoreboard objective",
"placeholder.recipe": "An recipe ID",
"placeholder.structure": "A structure ID",
"pool.bonus_rolls": "Bonus Rolls",
"pool.rolls": "Rolls",
"pool_add": "Add Pool",
"pool_remove": "Remove Pool",
"potion_effect.duration": "Duration",
"potion_effect.type": "Effect",
"potion_effect_add": "Add Effect",
"potion_effect_remove": "Remove Effect",
"range.binomial": "Binomial",
"range.exact": "Exact",
"range.max": "Max",
"range.min": "Min",
"range.n": "n",
"range.p": "p",
"range.range": "Range",
"range.uniform": "Uniform",
"remove": "Remove",
"requirements": "Requirements",
"rewards": "Rewards",
"rewards.loot": "Loot Tables",
"rewards.function": "Function",
"rewards.recipes": "Recipes",
"rewards.experience": "Experience",
"share": "Share",
"show_source": "Show Source",
"slot.chest": "Chest",
"slot.feet": "Feet",
"slot.head": "Head",
"slot.legs": "Legs",
"slot.mainhand": "Mainhand",
"slot.offhand": "Offhand",
"source.block_entity": "Block Entity",
"source.killer": "Killer",
"source.killer_player": "Killer Player",
"source.this": "This",
"statistic.stat": "Statistic",
"statistic.type": "Type",
"statistic.type.broken": "Broken",
"statistic.type.crafted": "Crafted",
"statistic.type.custom": "Custom",
"statistic.type.dropped": "Dropped",
"statistic.type.killed": "Killed",
"statistic.type.killedByTeam": "Killed By Team",
"statistic.type.killed_by": "Killed By",
"statistic.type.mined": "Mined",
"statistic.type.picked_up": "Picked Up",
"statistic.type.teamkill": "Killed Team",
"statistic.type.used": "Used",
"statistic.value": "Value",
"statistic_add": "Add Statistic",
"statistic_remove": "Remove Statistic",
"status_effect.ambient": "Ambient",
"status_effect.amplifier": "Amplifier",
"status_effect.duration": "Duration",
"status_effect.visible": "Visible",
"stored_enchantment_add": "Add Stored Enchantment",
"structure.spacing": "Spacing",
"structure.separation": "Separation",
"structure.salt": "Salt",
"table.type": "Type",
"table.type.block": "Block",
"table.type.chest": "Chest",
"table.type.empty": "Empty",
"table.type.entity": "Entity",
"table.type.fishing": "Fishing",
"table.type.generic": "Generic",
"tabs": "Tabs",
"term_add": "Add Term",
"term_remove": "Remove Term",
"theme": "Theme",
"theme.dark": "Dark",
"theme.light": "Light",
"title": "Minecraft: Java Edition Generators",
"title.loot-table": "Loot Table Generator",
"title.predicate": "Predicate Generator",
"title.advancement": "Advancement Generator",
"title.worldgen": "World Settings Generator",
"trigger.bee_nest_destroyed": "Bee Nest Destroyed",
"trigger.bred_animals": "Bred Animals",
"trigger.brewed_potion": "Brewed Potion",
"trigger.changed_dimension": "Changed Dimension",
"trigger.channeled_lightning": "Channeled Lightning",
"trigger.construct_beacon": "Construct Beacon",
"trigger.consume_item": "Consume Item",
"trigger.cured_zombie_villager": "Cured Zombie Villager",
"trigger.effects_changed": "Effects Changed",
"trigger.enchanted_item": "Enchanted Item",
"trigger.enter_block": "Enter Block",
"trigger.entity_hurt_player": "Entity Hurt Player",
"trigger.entity_killed_player": "Entity Killed Player",
"trigger.filled_bucket": "Filled Bucket",
"trigger.fishing_rod_hooked": "Fishing Rod Hooked",
"trigger.hero_of_the_village": "Hero Of The Village",
"trigger.impossible": "Impossible",
"trigger.inventory_changed": "Inventory Changed",
"trigger.item_durability_changed": "Item Durability Changed",
"trigger.item_used_on_block": "Item Used On Block",
"trigger.killed_by_crossbow": "Killed By Crossbow",
"trigger.levitation": "Levitation",
"trigger.location": "Location",
"trigger.nether_travel": "Nether Travel",
"trigger.placed_block": "Placed Block",
"trigger.player_generates_container_loot": "Player Generates Container Loot",
"trigger.player_hurt_entity": "Player Hurt Entity",
"trigger.player_killed_entity": "Player Killed Entity",
"trigger.recipe_unlocked": "Recipe Unlocked",
"trigger.safely_harvest_honey": "Safely Harvest Honey",
"trigger.shot_crossbow": "Shot Crossbow",
"trigger.slept_in_bed": "Slept In Bed",
"trigger.slide_down_block": "Slide Down Block",
"trigger.summoned_entity": "Summoned Entity",
"trigger.tame_animal": "Tame Animal",
"trigger.tick": "Tick",
"trigger.thrown_item_picked_up_by_entity": "Thrown Item Picked Up By Entity",
"trigger.used_ender_eye": "Used Ender Eye",
"trigger.used_totem": "Used Totem",
"trigger.villager_trade": "Villager Trade",
"trigger.voluntary_exile": "Voluntary Exile",
"true": "True",
"unset": "Unset",
"world.generate_features": "Generate Features",
"world.bonus_chest": "Spawn Bonus Chest",
"world.seed": "Seed",
"worldgen.warning": "This feature is highly experimental and unstable. It can change in future versions. Expect the game to crash when creating worlds."
}
-631
View File
@@ -1,631 +0,0 @@
{
"2_spaces": "2 espaces",
"4_spaces": "4 espaces",
"attribute.generic.armor": "Armure",
"attribute.generic.armorToughness": "Robustesse de l'armure",
"attribute.generic.armor_toughness": "Robustesse de l'armure",
"attribute.generic.attackDamage": "Dégâts",
"attribute.generic.attack_damage": "Dégâts",
"attribute.generic.attackKnockback": "Recul",
"attribute.generic.attack_knockback": "Recul",
"attribute.generic.attackSpeed": "Vitesse d'attaque",
"attribute.generic.attack_speed": "Vitesse d'attaque",
"attribute.generic.flyingSpeed": "Vitesse de vol",
"attribute.generic.flying_speed": "Vitesse de vol",
"attribute.generic.followRange": "Distance de suivi",
"attribute.generic.follow_range": "Distance de suivi",
"attribute.generic.knockbackResistance": "Résistance au recul",
"attribute.generic.knockback_resistance": "Résistance au recul",
"attribute.generic.luck": "Chance",
"attribute.generic.maxHealth": "Vie maximale",
"attribute.generic.max_health": "Vie maximale",
"attribute.generic.movementSpeed": "Vitesse de déplacement",
"attribute.generic.movement_speed": "Vitesse de déplacement",
"attribute.horse.jumpStrength": "Puissance de saut",
"attribute.horse.jump_strength": "Puissance de saut",
"attribute.zombie.spawnReinforcements": "Probabilité d'apparition de renforcements",
"attribute.zombie.spawn_reinforcements": "Probabilité d'apparition de renforcements",
"attribute_modifier.amount": "Quantité",
"attribute_modifier.attribute": "Attribut",
"attribute_modifier.name": "Nom",
"attribute_modifier.operation": "Opération",
"attribute_modifier.operation.addition": "Addition",
"attribute_modifier.operation.multiply_base": "Multiplier la base",
"attribute_modifier.operation.multiply_total": "Multiplier le total",
"attribute_modifier.slot": "Case",
"attribute_modifier.slot.chest": "Torse",
"attribute_modifier.slot.feet": "Pieds",
"attribute_modifier.slot.head": "Tête",
"attribute_modifier.slot.legs": "Jambes",
"attribute_modifier.slot.mainhand": "Main principale",
"attribute_modifier.slot.offhand": "Seconde main",
"attribute_modifier_add": "Ajouter un modificateur",
"attribute_modifier_remove": "Enlever un modificateur",
"badge.experimental": "Expérimental",
"badge.unstable": "Instable",
"biome": "Biome",
"biome.parameters": "Paramètres",
"biome.parameters.altitude": "Altitude",
"biome.parameters.weirdness": "Etrangeté",
"biome.parameters.offset": "Décalage",
"biome.parameters.temperature": "Température",
"biome.parameters.humidity": "Humidité",
"biome_add": "Ajouter un biome",
"biome_remove": "Enlever le biome",
"biome_source.biome": "Biome",
"biome_source.biomes": "Biomes",
"biome_source.large_biomes": "Biomes larges",
"biome_source.preset": "Préréglage des biomes",
"biome_source.preset.nether": "Nether",
"biome_source.seed": "Graine des biomes",
"biome_source.type": "Source de biomes",
"biome_source.type.fixed": "Constant",
"biome_source.type.multi_noise": "Bruit",
"biome_source.type.checkerboard": "Echiquier",
"biome_source.type.vanilla_layered": "Couches vanilla",
"biome_source.type.the_end": "End",
"child_add": "Ajouter un enfant",
"condition.block": "Bloc",
"condition.block_state": "Etat de bloc",
"condition.block_state_add": "Ajouter un état de bloc",
"condition.block_state_remove": "Enlever un état de bloc",
"condition.chance": "Chance",
"condition.chances": "Chances",
"condition.damage_source": "Source de dégâts",
"condition.enchantment": "Enchantement",
"condition.entity": "Entité",
"condition.inverse": "Inversé",
"condition.item": "Objet",
"condition.location": "Position",
"condition.looting_multiplier": "Multiplicateur butin",
"condition.name": "Nom du prédicat",
"condition.offsetX": "Décalage sur l'axe X",
"condition.offsetY": "Décalage sur l'axe Y",
"condition.offsetZ": "Décalage sur l'axe Z",
"condition.raining": "Pluie",
"condition.score": "Objectif",
"condition.score_add": "Ajouter un score",
"condition.score_remove": "Enlever un score",
"condition.term": "Terme",
"condition.thundering": "Foudre",
"condition.time_value": "Valeur",
"condition.time_period": "Période",
"condition.type": "Condition",
"condition.type.alternative": "Alternatif (OU)",
"condition.type.block_state_property": "Propriétés du bloc",
"condition.type.damage_source_properties": "Source de dégâts",
"condition.type.entity_properties": "Propriétés de l'entité",
"condition.type.entity_scores": "Scores de l'entité",
"condition.type.inverted": "Inversé (NON)",
"condition.type.killed_by_player": "Tué par un joueur",
"condition.type.location_check": "Position",
"condition.type.match_tool": "Propriétés de l'outil",
"condition.type.random_chance": "Probabilité aléatoire",
"condition.type.random_chance_with_looting": "Probabilité aléatoire avec butin",
"condition.type.reference": "Référence",
"condition.type.requirements": "Conditions requises (ET)",
"condition.type.survives_explosion": "Survit l'explosion",
"condition.type.table_bonus": "Table Bonus",
"condition.type.time_check": "Temps",
"condition.type.weather_check": "Météo",
"condition_add": "Ajouter une condition",
"condition_remove": "Enlever une condition",
"copy": "Copier",
"credit": "sur GitHub",
"criteria": "Critères",
"criteria.trigger": "Déclencheur",
"criteria.conditions": "Conditions",
"criteria.block": "Bloc",
"criteria.num_bees_inside": "Nombre d'abeilles à l'intérieur",
"criteria.child": "Enfant",
"criteria.parent": "Parent",
"criteria.partner": "Partenaire",
"criteria.potion": "Potion",
"criteria.from_dimension": "Source",
"criteria.to_dimension": "Destination",
"criteria.beacon_level": "Niveau de la pyramide",
"criteria.villager": "Villageois",
"criteria.zombie": "Zombie",
"criteria.effects": "Effets",
"criteria.effects_add": "Ajouter un effet",
"criteria.effects_remove": "Enlever un effet",
"criteria.state": "Etats",
"criteria.state_add": "Ajouter un état",
"criteria.xp_levels": "Niveau d'expérience",
"criteria.damage": "Dégâts",
"criteria.source_entity": "Entité source",
"criteria.victim_entity": "Entité victime",
"criteria.killing_blow": "Coup de grâce",
"criteria.pulled_entity": "Entité tirée",
"criteria.rod": "Canne à pêche",
"criteria.slots": "Cases",
"criteria.slots.empty": "Cases vides",
"criteria.slots.occupied": "Cases occupées",
"criteria.slots.full": "Cases pleines",
"criteria.items": "Objets",
"criteria.items_add": "Ajouter un objet",
"criteria.delta": "Différence",
"criteria.durability": "Durabilité",
"criteria.item": "Objet",
"criteria.unique_entity_types": "Nombre de types d'entité d'uniques",
"criteria.victims": "Victimes",
"criteria.victims_add": "Ajouter une victime",
"criteria.victims_remove": "Enlever une victime",
"criteria.distance": "Distance",
"criteria.duration": "Durée",
"criteria.location": "Position",
"criteria.recipe": "Recette",
"criteria.entity": "Entité",
"criteria.loot_table": "Table de butins",
"criteria.player": "Joueur",
"criteria_add": "Ajouter un critère",
"criteria_remove": "Enlever un critère",
"damage.blocked": "Bloqué",
"damage.dealt": "Dégâts infligés",
"damage.taken": "Dégâts reçus",
"damage.type": "Type de dégâts",
"damage_source.bypasses_armor": "Traverse l'armure",
"damage_source.bypasses_invulnerability": "Vide",
"damage_source.bypasses_magic": "Famine",
"damage_source.direct_entity": "Entité directe",
"damage_source.is_explosion": "Explosion",
"damage_source.is_fire": "Feu",
"damage_source.is_lightning": "Foudre",
"damage_source.is_magic": "Magie",
"damage_source.is_projectile": "Projectile",
"damage_source.source_entity": "Entité source",
"description": "Générateurs Minecraft",
"description.loot-table": "Générateur de table de butins pour Minecraft",
"description.predicate": "Générateur de prédicat pour Minecraft",
"description.advancement": "Générateur de progrès pour Minecraft",
"description.worldgen": "Générateur de paramètres de génération de monde Minecraft",
"dimension": "Dimension",
"dimension_add": "Ajouter une dimension",
"dimension_remove": "Enlever une dimension",
"dimension.overworld": "Surface",
"dimension.the_end": "End",
"dimension.the_nether": "Nether",
"dimension.type": "Type de dimension",
"dimension.type.name": "Nom",
"dimension.type.ultrawarm": "Ultra-chaud",
"dimension.type.natural": "Naturel",
"dimension.type.shrunk": "Rétréci",
"dimension.type.piglin_safe": "Sauf pour les piglins",
"dimension.type.respawn_anchor_works": "Fonctionnement de l'ancre de réapparition",
"dimension.type.bed_works": "Fonctionnement des lits",
"dimension.type.has_raids": "Invasions de pilleurs",
"dimension.type.ambient_light": "Lumière ambiante",
"dimension.type.fixed_time": "Temps constant",
"dimension.type.has_skylight": "Lumière du jour",
"dimension.type.has_ceiling": "Plafond",
"dimension.type.logical_height": "Hauteur logique",
"dimension.type.infiniburn": "Combustion infinie",
"dimension.type.presets.overworld": "Surface",
"dimension.type.presets.the_nether": "Nether",
"dimension.type.presets.the_end": "End",
"display": "Affichage",
"display.icon": "Icône",
"display.icon.item": "Objet de l'icône",
"display.icon.nbt": "Données NBT de l'icône",
"display.title": "Titre",
"display.description": "Description",
"display.frame": "Cadre",
"display.frame.challenge": "Défi",
"display.frame.goal": "But",
"display.frame.task": "Tâche",
"display.background": "Fond",
"display.show_toast": "Afficher un toast",
"display.announce_to_chat": "Annoncer dans le chat",
"display.hidden": "Caché",
"distance.absolute": "Absolue",
"distance.horizontal": "Horizontale",
"distance.x": "X",
"distance.y": "Y",
"distance.z": "Z",
"enchantment.aqua_affinity": "Affinité aquatique",
"enchantment.bane_of_arthropods": "Fléau des arthropodes",
"enchantment.binding_curse": "Malédiction du lien éternel",
"enchantment.blast_protection": "Protection contre les explosions",
"enchantment.channeling": "Canalisation",
"enchantment.depth_strider": "Agilité aquatique",
"enchantment.efficiency": "Efficacité",
"enchantment.feather_falling": "Chute amortie",
"enchantment.fire_aspect": "Aura de feu",
"enchantment.fire_protection": "Protection contre le feu",
"enchantment.flame": "Flamme",
"enchantment.fortune": "Fortune",
"enchantment.frost_walker": "Semelles givrantes",
"enchantment.impaling": "Empalement",
"enchantment.infinity": "Infinité",
"enchantment.knockback": "Recul",
"enchantment.looting": "Butin",
"enchantment.loyalty": "Loyauté",
"enchantment.luck_of_the_sea": "Chance de la mer",
"enchantment.lure": "Appât",
"enchantment.mending": "Raccommodage",
"enchantment.multishot": "Tir multiple",
"enchantment.piercing": "Perforation",
"enchantment.power": "Puissance",
"enchantment.projectile_protection": "Protection contre les projectiles",
"enchantment.protection": "Protection",
"enchantment.punch": "Frappe",
"enchantment.quick_charge": "Charge rapide",
"enchantment.respiration": "Apnée",
"enchantment.riptide": "Impulsion",
"enchantment.sharpness": "Tranchant",
"enchantment.silk_touch": "Toucher de soie",
"enchantment.smite": "Châtiment",
"enchantment.soul_speed": "Agilité des âmes",
"enchantment.sweeping": "Affilage",
"enchantment.thorns": "Epines",
"enchantment.unbreaking": "Solidité",
"enchantment.vanishing_curse": "Malédiction de la disparition",
"enchantment_add": "Ajouter un enchantement",
"enchantment_remove": "Enlever un enchantement",
"entity.distance": "Distance",
"entity.equipment": "Equipement",
"entity.fishing_hook": "Hameçon",
"entity.fishing_hook.in_open_water": "En eau libre",
"entity.flags": "Options",
"entity.isBaby": "Bébé",
"entity.isOnFire": "En feu",
"entity.isSneaking": "Accroupi",
"entity.isSprinting": "En course",
"entity.isSwimming": "En nage",
"entity.location": "Position",
"entity.nbt": "Données NBT",
"entity.player": "Joueur",
"entity.player.advancements": "Progrès",
"entity.player.advancements_add": "Ajouter un progrès",
"entity.player.advancements_remove": "Enlever un progrès",
"entity.player.gamemode": "Mode de jeu",
"entity.player.level": "Niveau d'expérience",
"entity.player.recipes": "Recettes",
"entity.player.recipes_add": "Ajouter une recette",
"entity.player.recipes_remove": "Enlever une recette",
"entity.player.stats": "Statistiques",
"entity.status_effect": "Effets",
"entity.status_effect_add": "Ajouter un effet",
"entity.status_effect_remove": "Enlever un effet",
"entity.targeted_entity": "Entité ciblée",
"entity.team": "Equipe",
"entity.type": "Entité",
"entity.vehicle": "Véhicule",
"entry.expand": "Etendre",
"entry.name": "Nom",
"entry.quality": "Qualité",
"entry.type": "Type",
"entry.type.alternatives": "Alternatives",
"entry.type.dynamic": "Dynamique",
"entry.type.empty": "Vide",
"entry.type.group": "Groupe",
"entry.type.item": "Objet",
"entry.type.loot_table": "Table de butin",
"entry.type.sequence": "Suite",
"entry.type.tag": "Tag d'objets",
"entry.weight": "Poids",
"entry_add": "Ajouter une entrée",
"entry_remove": "Enlever une entrée",
"error": "Erreur",
"false": "Faux",
"function.block": "Bloc",
"function.bonusMultiplier": "Multiplicateur",
"function.count": "Compte",
"function.damage": "Dégâts",
"function.data": "Données",
"function.decoration": "Décoration",
"function.destination": "Destination",
"function.enchantment": "Enchantement",
"function.enchantments": "Enchantements facultatifs",
"function.entity": "Entité",
"function.extra": "Extra",
"function.formula": "Formule",
"function.formula.binomial_with_bonus_count": "Binomial avec taille de pile bonus",
"function.formula.ore_drops": "Récompenses de minerais",
"function.formula.uniform_bonus_count": "Compte bonus uniforme",
"function.levels": "Niveaux",
"function.limit": "Limite",
"function.lore": "Description",
"function.name": "Nom",
"function.nbt": "Données NBT",
"function.probability": "Probabilité",
"function.properties": "Propriétés",
"function.replace": "Remplacer",
"function.searchRadius": "Rayon de recherche (tronçons)",
"function.skipExistingChunks": "Omettre les tronçons existants",
"function.source": "Source",
"function.treasure": "Trésor",
"function.type": "Fonction",
"function.type.apply_bonus": "Appliquer un bonus",
"function.type.copy_name": "Copier le nom",
"function.type.copy_nbt": "Copier les données NBT",
"function.type.copy_state": "Copier les états du bloc",
"function.type.enchant_randomly": "Enchanter aléatoirement",
"function.type.enchant_with_levels": "Enchanter avec des niveaux",
"function.type.exploration_map": "Propriétés de la carte d'exploration",
"function.type.explosion_decay": "Explosion Decay",
"function.type.fill_player_head": "Compléter la tête du joueur",
"function.type.furnace_smelt": "Fondre dans un four",
"function.type.limit_count": "Limiter la taille de la pile",
"function.type.looting_enchant": "Appliquer l'enchantement butin",
"function.type.set_attributes": "Définir les attributs",
"function.type.set_contents": "Définir les contenus",
"function.type.set_count": "Définir la taille de la pile",
"function.type.set_damage": "Définir les dégâts",
"function.type.set_data": "Set Data",
"function.type.set_lore": "Définir la description",
"function.type.set_name": "Définir nom",
"function.type.set_nbt": "Définir les données NBT",
"function.type.set_stew_effect": "Définir l'effet du ragoût",
"function.zoom": "Zoomer",
"function_add": "Ajouter une fonction",
"function_remove": "Enlever une fonction",
"gamemode.adventure": "Aventure",
"gamemode.creative": "Créatif",
"gamemode.spectator": "Spectateur",
"gamemode.survival": "Survie",
"generator.type": "Type de générateur",
"generator.type.noise": "Par défaut",
"generator.type.flat": "Plat",
"generator.type.debug": "Monde debug",
"generator.seed": "Graine de la dimension",
"generator.settings": "Paramètres du générateur",
"generator.settings.bedrock_roof_position": "Hauteur du plafond en bedrock",
"generator.settings.bedrock_floor_position": "Hauteur du plancher en bedrock",
"generator.settings.sea_level": "Niveau de la mer",
"generator.settings.disable_mob_generation": "Désactiver la génération des créatures",
"generator.settings.default_block.name": "Bloc par défaut",
"generator.settings.default_fluid.name": "Fluide par défaut",
"generator.settings.block_states": "Etats du bloc",
"generator.settings.block_states_add": "Ajouter un état de bloc",
"generator.settings.fluid_states": "Etats du fluide",
"generator.settings.fluid_states_add": "Ajouter un état de fluide",
"generator.settings.layers_add": "Ajouter une couche",
"generator.settings.noise": "Paramètres du bruit",
"generator.settings.noise.density_factor": "Facteur de densité",
"generator.settings.noise.density_offset": "Décalage de densité",
"generator.settings.noise.simplex_surface_noise": "Bruit simplex à la surface",
"generator.settings.noise.random_density_offset": "Décalage aléatoire de densité",
"generator.settings.noise.island_noise_override": "Génération d'une île centrale",
"generator.settings.noise.amplified": "Amplifié",
"generator.settings.noise.size_horizontal": "Taille horizontale",
"generator.settings.noise.size_vertical": "Taille verticale",
"generator.settings.noise.height": "Hauteur",
"generator.settings.noise.sampling.xz_scale": "Echelle horizontale d'échantillonage",
"generator.settings.noise.sampling.y_scale": "Echelle verticale d'échantillonage",
"generator.settings.noise.sampling.xz_factor": "Facteur horizontal d'échantillonage",
"generator.settings.noise.sampling.y_factor": "Facteur vertical d'échantillonage",
"generator.settings.noise.bottom_slide.target": "Cible du glissement en bas",
"generator.settings.noise.bottom_slide.size": "Taille du glissement en bas",
"generator.settings.noise.bottom_slide.offset": "Décalage du glissement en bas",
"generator.settings.noise.top_slide.target": "Cible du glissement en haut",
"generator.settings.noise.top_slide.size": "Taille du glissement en haut",
"generator.settings.noise.top_slide.offset": "Décalage du glissement en haut",
"generator.settings.presets.overworld": "Surface",
"generator.settings.presets.nether": "Nether",
"generator.settings.presets.end": "End",
"generator.settings.presets.amplified": "Amplifié",
"generator.settings.presets.caves": "Grottes",
"generator.settings.presets.floating_islands": "Iles volantes",
"generator.settings.structures": "Structures",
"generator.settings.structures_add": "Ajouter une structure",
"generator.settings.structures_remove": "Enlever une structure",
"help.biome.parameters.altitude": "Ces paramètres déterminent le placement du biome. Chaque biome doit avoir une combinaison unique. Des biomes avec des valeurs presque similaires vont se générer côte à côte.",
"help.biome_source.type.fixed": "Un seul biome pour tout le monde",
"help.biome_source.type.multi_noise": "Distribution custom des biomes avec des paramètres configurables",
"help.biome_source.type.checkerboard": "Biomes se générant en un motif d'échiquier de tronçons",
"help.biome_source.type.vanilla_layered": "Distribution des biomes pour la surface",
"help.biome_source.type.the_end": "Distribution des biomes pour l'end",
"help.condition.chances": "Liste de nombres décimaux entre 0 and 1 separés par des virgules",
"help.condition.time_period": "Si présent, le temps sera le reste de la division entière du vrai temps par cette value (modulo). Par exemple, si spécifié à 24000, la valeur sera opérée sur une période de la journée.",
"help.dimension": "L'identificateur utilisé dans \"/execute in\". Doit être en minuscules.",
"help.dimension.type": "Options globales de la dimension. Clique sur l'étiquette pour customiser.",
"help.dimension.type.name": "Nom interne du type de dimension. Mets pareil que l'ID de la dimension.",
"help.dimension.type.ultrawarm": "Si vrai, l'eau s'évapore et les éponges se sèchent",
"help.dimension.type.natural": "Si vrai, les portails font apparaître des piglins zombifiés. Si faux, les boussoles tournent sans cible.",
"help.dimension.type.shrunk": "Si les coordonnées doivent être divisées par 8",
"help.dimension.type.ambient_light": "Valeur entre 0 et 1",
"help.dimension.type.fixed_time": "Définir cette valeur va fixer le soleil à une position constante",
"help.display": "Si présent, le progrès sera visible dans le menu des progrès",
"help.entry.expand": "Si faux, l'entrée retournera tous les contenus du tag, sinon l'entrée se comportera comme plusieurs entrées objet",
"help.entry.type.alternatives": "Teste des conditions des entrées enfant et exécute la première qui peut être exécutée",
"help.entry.type.dynamic": "Retourne des récompenses spécifiques au bloc",
"help.entry.type.empty": "Ne rajoute rien à la poule",
"help.entry.type.group": "Exécute toutes les entrées enfant quand les conditions de cette entrée sont vérifiées",
"help.entry.type.item": "Ajoute un objet",
"help.entry.type.loot_table": "Ajoute les contenus d'une autre table de butin",
"help.entry.type.sequence": "Exécute les entrées enfant jursqu'à la première dont les conditions ne sont pas vérifiées",
"help.entry.type.tag": "Ajoute les contenus d'un tag d'objets",
"help.generator.settings": "Paramètres du terrain. Clique sur l'étiquette pour customiser.",
"help.generator.settings.bedrock_roof_position": "Position du plafond de bedrock par rapport à la hauteur du monde. Des valeurs plus élevées déplacent le plafond vers le bas.",
"help.generator.settings.bedrock_floor_position": "Position du plancher de bedrock. Des valeurs plus élevées déplacent le plafond vers le haut.",
"help.generator.settings.disable_mob_generation": "Si vrai, les créatures n'apparaîtront pas pendant la génération.",
"help.generator.settings.noise.density_factor": "Quand défini à 0, des îles se généreront",
"help.generator.settings.noise.density_offset": "Utilisé pour décaler la hauteur du terrain. Utilise la formule suivante: \"hauteur du terrain = ((décalage de la densité / facteur de la densité) + 1) * hauteur / 2\"",
"help.generator.settings.noise.size_horizontal": "La valeur doit être soit 1, soit 2, soit 4. Des valeurs au dessus de 4 font qu'aucun terrain ne se génère. Des valeurs plus élevées provoquent un terrain plus lisse.",
"help.generator.settings.noise.size_vertical": "Valeur entre 1 et 4",
"help.generator.settings.noise.island_noise_override": "Si vrai, le terrain se génère comme dans l'End avec une île plus large au centre et plus d'îles plus loin",
"help.pool.rolls": "Le nombre d'entrées tirées au sort",
"help.structure.spacing": "La distance maximale, en tronçons, entre deux structures",
"help.structure.separation": "Le distance minimale, en tronçons, entre deux structures. Doit être plus petit que l'espacement.",
"hide_source": "Cacher la source",
"item.count": "Taille de la pile",
"item.durability": "Durabilité",
"item.enchantment": "Enchantement",
"item.levels": "Niveaux",
"item.name": "ID de l'objet",
"item.nbt": "Données NBT",
"item.potion": "Potion",
"item.tag": "Tag d'objets",
"item_remove": "Enlever un objet",
"layer_remove": "Enlever une chouche",
"layer.block": "ID du bloc",
"layer.height": "Hauteur",
"location.biome": "Biome",
"location.block": "Bloc",
"location.block.block": "ID du bloc",
"location.block.nbt": "Données NBT",
"location.block.state": "Etat du bloc",
"location.block.state_add": "Ajouter un état de bloc",
"location.block.state_remove": "Enlever un état de bloc",
"location.block.tag": "Tag de blocs",
"location.dimension": "Dimension",
"location.feature": "Fonctionnalité",
"location.fluid": "Fluide",
"location.fluid.fluid": "ID du fluide",
"location.fluid.state": "Etat du fluide",
"location.fluid.state_add": "Ajouter un état de fluide",
"location.fluid.state_remove": "Enlever un état de fluide",
"location.fluid.tag": "Tag de fluides",
"location.light": "Lumière",
"location.light.light": "Niveau de lumière visible",
"location.position": "Position",
"location.position.x": "X",
"location.position.y": "Y",
"location.position.z": "Z",
"location.smokey": "Fumant",
"luck_based": "Basé sur la chance",
"more": "Plus",
"nbt_operation.operation": "Opération",
"nbt_operation.operation.append": "Rajouter",
"nbt_operation.operation.merge": "Fusionner",
"nbt_operation.operation.replace": "Remplacer",
"nbt_operation.source": "Source",
"nbt_operation.target": "Cible",
"nbt_operation_add": "Ajouter une opération",
"nbt_operation_remove": "Enlever une opération",
"parent": "Progrès parent",
"placeholder.advancement": "L'ID d'un progrès",
"placeholder.block_state": "La clé d'un état de bloc",
"placeholder.criteria": "L'ID d'un critère",
"placeholder.dimension": "L'ID d'une dimension",
"placeholder.effect": "L'ID d'un effet de potion",
"placeholder.fluid_state": "La clé d'un état de fluide",
"placeholder.objective": "Un objectif du scoreboard",
"placeholder.recipe": "L'ID d'une recette",
"placeholder.structure": "L'ID d'une structure",
"pool.bonus_rolls": "Tirages bonus",
"pool.rolls": "Tirages",
"pool_add": "Rajouter une poule",
"pool_remove": "Enlever une poule",
"potion_effect.duration": "Durée",
"potion_effect.type": "Effet",
"potion_effect_add": "Ajouter un effet",
"potion_effect_remove": "Enlever un effet",
"range.binomial": "Binomial",
"range.exact": "Exact",
"range.max": "Max",
"range.min": "Min",
"range.n": "n",
"range.p": "p",
"range.range": "Intervalle",
"range.uniform": "Uniforme",
"remove": "Enlever",
"requirements": "Conditions requises",
"rewards": "Récompenses",
"rewards.loot": "Tables de butin",
"rewards.function": "Fonction",
"rewards.recipes": "Recettes",
"rewards.experience": "Expérience",
"share": "Partager",
"show_source": "Afficher le code source",
"slot.chest": "Torse",
"slot.feet": "Pieds",
"slot.head": "Tête",
"slot.legs": "Jambes",
"slot.mainhand": "Main principale",
"slot.offhand": "Seconde main",
"source.block_entity": "Entité de bloc",
"source.killer": "Tueur",
"source.killer_player": "Joueur tueur",
"source.this": "Cette entité",
"statistic.stat": "Statistique",
"statistic.type": "Type",
"statistic.type.broken": "Cassé",
"statistic.type.crafted": "Crafté",
"statistic.type.custom": "Custom",
"statistic.type.dropped": "Jeté",
"statistic.type.killed": "Tué",
"statistic.type.killedByTeam": "Tué par l'équipe",
"statistic.type.killed_by": "Tué par",
"statistic.type.mined": "Miné",
"statistic.type.picked_up": "Ramassé",
"statistic.type.teamkill": "Tué dans l'équipe",
"statistic.type.used": "Utilisé",
"statistic.value": "Valeur",
"statistic_add": "Ajouter une statistique",
"statistic_remove": "Enlever une statistique",
"status_effect.ambient": "Ambiant",
"status_effect.amplifier": "Amplificateur",
"status_effect.duration": "Durée",
"status_effect.visible": "Visible",
"stored_enchantment_add": "Ajouter un enchantement stocké",
"structure.spacing": "Espacement",
"structure.separation": "Séparation",
"structure.salt": "Sel",
"table.type": "Type",
"table.type.block": "Bloc",
"table.type.chest": "Coffre",
"table.type.empty": "Vide",
"table.type.entity": "Entité",
"table.type.fishing": "Pêche",
"table.type.generic": "Générique",
"tabs": "Onglets",
"term_add": "Ajouter un terme",
"term_remove": "Enlever un terme",
"theme": "Thème",
"theme.dark": "Sombre",
"theme.light": "Jour",
"title": "Générateurs Minecraft",
"title.loot-table": "Générateur de table de butin",
"title.predicate": "Génératuer de prédicat",
"title.advancement": "Générateur de progrès",
"title.worldgen": "Générateurs de paramètres de génération du monde",
"trigger.bee_nest_destroyed": "Détruire une ruche",
"trigger.bred_animals": "Faire se reproduire des animaux",
"trigger.brewed_potion": "Préparer une potion",
"trigger.changed_dimension": "Changer de dimension",
"trigger.channeled_lightning": "Canaliser la foudre",
"trigger.construct_beacon": "Construire une balise",
"trigger.consume_item": "Consommer un objet",
"trigger.cured_zombie_villager": "Soigner un villageois zombie",
"trigger.effects_changed": "Effets changés",
"trigger.enchanted_item": "Enchanter un objet",
"trigger.enter_block": "Entrer dans un bloc",
"trigger.entity_hurt_player": "Prendre des dégâts",
"trigger.entity_killed_player": "Se faire tuer par une entité",
"trigger.filled_bucket": "Remplire un seau",
"trigger.fishing_rod_hooked": "Tirer une canne à pêche",
"trigger.hero_of_the_village": "Héros du village",
"trigger.impossible": "Impossible",
"trigger.inventory_changed": "Inventaire changé",
"trigger.item_durability_changed": "Durabilité d'un objet changée",
"trigger.item_used_on_block": "Interagir avec un bloc",
"trigger.killed_by_crossbow": "Etre tué par arbalète",
"trigger.levitation": "Lévitation",
"trigger.location": "Position",
"trigger.nether_travel": "Transport par le Nether",
"trigger.placed_block": "Placer un bloc",
"trigger.player_generates_container_loot": "Générer le butin d'un récipient",
"trigger.player_hurt_entity": "Endommager une entité",
"trigger.player_killed_entity": "Tuer une entité",
"trigger.recipe_unlocked": "Débloquer une recette",
"trigger.safely_harvest_honey": "Récolter du miel en sécurité",
"trigger.shot_crossbow": "Tirer avec une arbalète",
"trigger.slept_in_bed": "Dormir dans un lit",
"trigger.slide_down_block": "Glisser le long d'un bloc",
"trigger.summoned_entity": "Faire apparaître une entité",
"trigger.tame_animal": "Dompter une entité",
"trigger.tick": "Tick",
"trigger.thrown_item_picked_up_by_entity": "Objet jeté puis ramassé par une entité",
"trigger.used_ender_eye": "Utiliser un oeil du néant",
"trigger.used_totem": "Utiliser un totem",
"trigger.villager_trade": "Commercer avec un villageois",
"trigger.voluntary_exile": "Exil volontaire",
"true": "Vrai",
"unset": "Indéfini",
"world.generate_features": "Générer des fonctionnalités",
"world.bonus_chest": "Générer un coffre bonus",
"world.seed": "Graine",
"worldgen.warning": "Cette fonctionnalité est hautement expérimentale et instable. Elle peut changer dans des versions futures. Attends-toi à des crash quand tu crées des mondes."
}
-491
View File
@@ -1,491 +0,0 @@
{
"2_spaces": "2 Espaços",
"4_spaces": "4 Espaços",
"attribute.generic.armor": "Armadura",
"attribute.generic.armorToughness": "Dureza da Armadura",
"attribute.generic.armor_toughness": "Dureza da Armadura",
"attribute.generic.attackDamage": "Dano de Ataque",
"attribute.generic.attack_damage": "Dano de Ataque",
"attribute.generic.attackKnockback": "Repulsão",
"attribute.generic.attack_knockback": "Repulsão",
"attribute.generic.attackSpeed": "Velocidade de Ataque",
"attribute.generic.attack_speed": "Velocidade de Ataque",
"attribute.generic.flyingSpeed": "Velocidade de Voo",
"attribute.generic.flying_speed": "Velocidade de Voo",
"attribute.generic.followRange": "Distância de Perseguição",
"attribute.generic.follow_range": "Distância de Perseguição",
"attribute.generic.knockbackResistance": "Resistência de Repulsão",
"attribute.generic.knockback_resistance": "Resistência de Repulsão",
"attribute.generic.luck": "Sorte",
"attribute.generic.maxHealth": "Vida máxima",
"attribute.generic.max_health": "Vida máxima",
"attribute.generic.movementSpeed": "Velocidade de Movimento",
"attribute.generic.movement_speed": "Velocidade de Movimento",
"attribute.horse.jumpStrength": "Força do Salto",
"attribute.horse.jump_strength": "Força do Salto",
"attribute.zombie.spawnReinforcements": "Spawn para Reforços",
"attribute.zombie.spawn_reinforcements": "Spawn para Reforços",
"attribute_modifier.amount": "Quantidade",
"attribute_modifier.attribute": "Atibuto",
"attribute_modifier.name": "Nome",
"attribute_modifier.operation": "Operação",
"attribute_modifier.operation.addition": "Adição",
"attribute_modifier.operation.multiply_base": "Multiplicação Base",
"attribute_modifier.operation.multiply_total": "Multiplicação Total",
"attribute_modifier.slot": "Slot",
"attribute_modifier.slot.chest": "Baú",
"attribute_modifier.slot.feet": "Pé",
"attribute_modifier.slot.head": "Cabeça",
"attribute_modifier.slot.legs": "Pernas",
"attribute_modifier.slot.mainhand": "Mão Principal",
"attribute_modifier.slot.offhand": "Mão Oposta à Principal",
"attribute_modifier_add": "Adicionar Modificador",
"attribute_modifier_remove": "Remover Modificador",
"child_add": "Adicionar Filho",
"condition.block": "Bloco",
"condition.block_state": "Estado do Bloco",
"condition.block_state_add": "Adicionar Estado do Bloco",
"condition.block_state_remove": "Remover Estado do Bloco",
"condition.chance": "Chance",
"condition.chances": "Chances",
"condition.damage_source": "Fonte do Dano",
"condition.enchantment": "Encantamento",
"condition.entity": "Entidade",
"condition.inverse": "Inverter",
"condition.item": "Item",
"condition.location": "Localização",
"condition.looting_multiplier": "Multiplicador de Pilhagem",
"condition.name": "Nome do Predicado",
"condition.offsetX": "Alinhamento X",
"condition.offsetY": "Alinhamento Y",
"condition.offsetZ": "Alinhamento Z",
"condition.raining": "Chovendo",
"condition.score": "Objetivo",
"condition.score_add": "Adicionar Ponto",
"condition.score_remove": "Remover Ponto",
"condition.term": "Termo",
"condition.thundering": "Trovão",
"condition.time_period": "Período",
"condition.time_value": "Valor",
"condition.type": "Condição",
"condition.type.alternative": "Alternativo (OU)",
"condition.type.block_state_property": "Propriedade do Bloco",
"condition.type.damage_source_properties": "Fonte do Dano",
"condition.type.entity_properties": "Propriedade da Entidade",
"condition.type.entity_scores": "Pontos da Entidade",
"condition.type.inverted": "Invertido (NÃO)",
"condition.type.killed_by_player": "Morto por Jogador",
"condition.type.location_check": "Localização",
"condition.type.match_tool": "Propriedade da Ferramenta",
"condition.type.random_chance": "Chance aleatória",
"condition.type.random_chance_with_looting": "Chance aleatória com Pilhagem",
"condition.type.reference": "Referência",
"condition.type.requirements": "Exigências (E..)",
"condition.type.survives_explosion": "Sobrevive à Explosão",
"condition.type.table_bonus": "Bônus de Mesa",
"condition.type.time_check": "Tempo",
"condition.type.weather_check": "Clima",
"condition_add": "Adicionar Condição",
"condition_remove": "Remover Condição",
"copy": "Copiar",
"credit": "em GitHub",
"criteria": "Critério",
"criteria.beacon_level": "Nível da Pirâmide",
"criteria.block": "Bloco",
"criteria.child": "Filho",
"criteria.conditions": "Condição",
"criteria.damage": "Dano",
"criteria.delta": "Delta",
"criteria.distance": "Distância",
"criteria.durability": "Durabilidade",
"criteria.duration": "Duração",
"criteria.effects": "Efeitos",
"criteria.effects_add": "Adicionar Efeitos",
"criteria.effects_remove": "Remover Efeitos",
"criteria.entity": "Entidade",
"criteria.from_dimension": "Do",
"criteria.item": "Item",
"criteria.items": "Itens",
"criteria.items_add": "Adicionar Item",
"criteria.killing_blow": "Matando Golpe",
"criteria.location": "Localização",
"criteria.num_bees_inside": "Número de Abelhas Dentro",
"criteria.parent": "Parente",
"criteria.partner": "Parceiro",
"criteria.potion": "Porção",
"criteria.pulled_entity": "Entidade Puxada",
"criteria.recipe": "Receita",
"criteria.rod": "Vara",
"criteria.slots": "Slots",
"criteria.slots.empty": "Slots vazios",
"criteria.slots.full": "Slots cheios",
"criteria.slots.occupied": "Slots Ocupados",
"criteria.source_entity": "Origem da Entidade",
"criteria.state": "Estados",
"criteria.state_add": "Adicionar Estado",
"criteria.to_dimension": "Para",
"criteria.trigger": "Gatilho",
"criteria.unique_entity_types": "Quantidade de Tipos de Entidade Exclusivas",
"criteria.victim_entity": "Vítima da Entidade",
"criteria.victims": "Vítimas",
"criteria.victims_add": "Adicionar Vítima",
"criteria.victims_remove": "Remover Vítima",
"criteria.villager": "Aldeão",
"criteria.xp_levels": "Nível de XP",
"criteria.zombie": "Zumbi",
"criteria_add": "Add Critério",
"criteria_remove": "Remover Critério",
"damage.blocked": "Bloqueado",
"damage.dealt": "Dano Causado",
"damage.taken": "Dano Recebido",
"damage.type": "Tipo de Dano",
"damage_source.bypasses_armor": "Ignorar Armadura",
"damage_source.bypasses_invulnerability": "Vazio",
"damage_source.bypasses_magic": "Morrer de Fome",
"damage_source.direct_entity": "Indicação da Entidade",
"damage_source.is_explosion": "Explozão",
"damage_source.is_fire": "Fogo",
"damage_source.is_lightning": "Raio",
"damage_source.is_magic": "Mágica",
"damage_source.is_projectile": "Projétil",
"damage_source.source_entity": "Origem da entidade",
"description": "Geradores para Minecraft",
"description.advancement": "Gerador de Advancement para Minecraft",
"description.loot-table": "Gerador de Loot table para Minecraft",
"description.predicate": "Gerador de Predicate para Minecraft",
"dimension.overworld": "Mundo",
"dimension.the_end": "O fim",
"dimension.the_nether": "O Inferno",
"display": "Exibição",
"display.announce_to_chat": "Anunciar no Bate-papo",
"display.background": "Segundo Plano",
"display.description": "Descrição",
"display.frame": "Quadro",
"display.frame.challenge": "Desafio",
"display.frame.goal": "Objetivo",
"display.frame.task": "Tarefa",
"display.hidden": "Escondido",
"display.icon": "Ícone",
"display.icon.item": "Ícone do Item",
"display.icon.nbt": "Ícone do NBT",
"display.show_toast": "Mostrar Respostas",
"display.title": "Título",
"distance.absolute": "Absoluto",
"distance.horizontal": "Horizontal",
"distance.x": "X",
"distance.y": "Y",
"distance.z": "Z",
"enchantment.aqua_affinity": "Afiação aquática",
"enchantment.bane_of_arthropods": "Maldição dos Artrópodes",
"enchantment.binding_curse": "Maldição da Vinculação",
"enchantment.blast_protection": "Proteção Contra Explosões",
"enchantment.channeling": "Canalização",
"enchantment.depth_strider": "Passos Profundos",
"enchantment.efficiency": "Eficiência",
"enchantment.feather_falling": "Queda Suave",
"enchantment.fire_aspect": "Aspecto de Fogo",
"enchantment.fire_protection": "Proteção contra Fogo",
"enchantment.flame": "Chama",
"enchantment.fortune": "Fortuna",
"enchantment.frost_walker": "Passos Gelados",
"enchantment.impaling": "Empalamento",
"enchantment.infinity": "Infinidade",
"enchantment.knockback": "Repulsão",
"enchantment.looting": "Saque",
"enchantment.loyalty": "Lealdade",
"enchantment.luck_of_the_sea": "Sorte do Mar",
"enchantment.lure": "Isca",
"enchantment.mending": "Remendo",
"enchantment.multishot": "Tiro múltiplo",
"enchantment.piercing": "Perfuração",
"enchantment.power": "Força",
"enchantment.projectile_protection": "Proteção Contra Projéteis",
"enchantment.protection": "Proteção",
"enchantment.punch": "Impacto",
"enchantment.quick_charge": "Carga Rápida",
"enchantment.respiration": "Respiração",
"enchantment.riptide": "Correnteza",
"enchantment.sharpness": "Afiação",
"enchantment.silk_touch": "Toque Suave",
"enchantment.smite": "Julgamento",
"enchantment.soul_speed": "Velocidade das almas",
"enchantment.sweeping": "Alcance",
"enchantment.thorns": "Espinhos",
"enchantment.unbreaking": "Inquebrável",
"enchantment.vanishing_curse": "Maldição do Desaparecimento",
"enchantment_add": "Adicionar Encantamento",
"enchantment_remove": "Remover Encantamento",
"entity.distance": "Distância",
"entity.equipment": "Equipamento",
"entity.flags": "Bandeiras",
"entity.isBaby": "Bebê",
"entity.isOnFire": "Em chamas",
"entity.isSneaking": "Agachado",
"entity.isSprinting": "Correndo",
"entity.isSwimming": "Nadando",
"entity.location": "Localização",
"entity.nbt": "NBT",
"entity.player": "Jogador",
"entity.player.advancements": "Conquistas",
"entity.player.advancements_add": "Adicionar Conquistas",
"entity.player.advancements_remove": "Remover Conquistas",
"entity.player.gamemode": "Modo de Jogo",
"entity.player.level": "Nível de EXP",
"entity.player.recipes": "Receitas",
"entity.player.recipes_add": "Adicionar Receita",
"entity.player.recipes_remove": "Remover Receita",
"entity.player.stats": "Estatísticas",
"entity.status_effect": "Efeitos",
"entity.status_effect_add": "Adicionar Efeito",
"entity.status_effect_remove": "Remover Efeito",
"entity.team": "Time",
"entity.type": "Entidade",
"entry.expand": "Expandir",
"entry.name": "Nome",
"entry.quality": "Qualidade",
"entry.type": "Tipo",
"entry.type.alternatives": "Alternativas",
"entry.type.dynamic": "Dinâmica",
"entry.type.empty": "Vazio",
"entry.type.group": "Grupo",
"entry.type.item": "Item",
"entry.type.loot_table": "Tabela de Itens",
"entry.type.sequence": "Sequência",
"entry.type.tag": "Tag do Item",
"entry.weight": "Peso",
"entry_add": "Adicionar Entrada",
"entry_remove": "Remove Entrada",
"error": "Erro",
"false": "Falso",
"function.block": "Bloco",
"function.bonusMultiplier": "Multiplicador",
"function.count": "Contagem",
"function.damage": "Dano",
"function.data": "Dado",
"function.decoration": "Decoração",
"function.destination": "Destinatino",
"function.enchantment": "Encantamento",
"function.enchantments": "Encantamentos Opcionais",
"function.entity": "Entidade",
"function.extra": "Extra",
"function.formula": "Fórmula",
"function.formula.binomial_with_bonus_count": "Binomial com Quantidade Bônus",
"function.formula.ore_drops": "Drop de Minério",
"function.formula.uniform_bonus_count": "Quantidade Bônus Uniforme",
"function.levels": "Nívels",
"function.limit": "Limite",
"function.lore": "SubNome",
"function.name": "Nome",
"function.nbt": "NBT",
"function.probability": "Probabilidade",
"function.properties": "Propriedades",
"function.replace": "Substituir",
"function.searchRadius": "Raio de Busca (Chunks)",
"function.skipExistingChunks": "Ignorar Chunks Existentes",
"function.source": "Origem",
"function.treasure": "Tesouro",
"function.type": "Função",
"function.type.apply_bonus": "Aplicar Bônus",
"function.type.copy_name": "Copiar Nome",
"function.type.copy_nbt": "Copiar NBT",
"function.type.copy_state": "Copiar Estado do Bloco",
"function.type.enchant_randomly": "Encantamento Aleatório",
"function.type.enchant_with_levels": "Encantamento com Nível",
"function.type.exploration_map": "Propriedades do Mapa de Exploração",
"function.type.explosion_decay": "Decaimento da Explosão",
"function.type.fill_player_head": "Completar com Cabeça de Jogador",
"function.type.furnace_smelt": "Forno fundido",
"function.type.limit_count": "Limite de Quantidade",
"function.type.looting_enchant": "Encantamento Pilhagem",
"function.type.set_attributes": "Definir Atributos",
"function.type.set_contents": "Definir Conteúdos",
"function.type.set_count": "Definir Quantidades",
"function.type.set_damage": "Definir Dano",
"function.type.set_data": "Definir Dados",
"function.type.set_lore": "Definir SubNome",
"function.type.set_name": "Definir Nome",
"function.type.set_nbt": "Definir NBT",
"function.type.set_stew_effect": "Definir Efeito da Porção",
"function.zoom": "Zoom",
"function_add": "Adicionar Função",
"function_remove": "Remover Função",
"gamemode.adventure": "Aventura",
"gamemode.creative": "Criativo",
"gamemode.spectator": "Espectador",
"gamemode.survival": "Sobrevivência",
"help.condition.time_period": "Se presente, o tempo será dividido em módulo por esse valor. Por exemplo, se definido como 24000, o valor funcionará em um período de dias.",
"help.display": "Se presente, o avanço será visível nas guias de avanço.",
"help.entry.expand": "Se desabilitado, a entrada retornará todo o conteúdo da tag, caso contrário, a entrada se comportará como várias entradas de itens",
"help.entry.type.alternatives": "Tests condições das entradas filhas e executa a primeira que pode ser executada",
"help.entry.type.dynamic": "Obtém drops específicas do bloco",
"help.entry.type.empty": "Não adiciona nada ao pool",
"help.entry.type.group": "Executa todas as entradas filhas quando as próprias condições passam",
"help.entry.type.item": "Adiciona um único item",
"help.entry.type.loot_table": "Adiciona o conteúdo de outra tabela de itens",
"help.entry.type.sequence": "Executa entradas filhas até a primeira que não pode ser executada devido as condições",
"help.entry.type.tag": "Adiciona o conteúdo de uma tag de item",
"help.pool.rolls": "A quantidade de entradas escolhidas aleatoriamente",
"hide_source": "Ocultar Origem",
"item.count": "Quantidade",
"item.durability": "Durabilidade",
"item.enchantment": "Encantamentos",
"item.levels": "Níveis",
"item.name": "ID do Item",
"item.nbt": "NBT",
"item.potion": "Porção",
"item.tag": "Tag do Item",
"item_remove": "Remover Tag do Item",
"location.biome": "Bioma",
"location.block": "Bloco",
"location.block.block": "ID do Bloco",
"location.block.nbt": "NBT",
"location.block.state": "Estados do Bloco",
"location.block.state_add": "Adicionar Estados do Bloco",
"location.block.state_remove": "Remover Estados do Bloco",
"location.block.tag": "Tag do Bloco",
"location.dimension": "Dimensão",
"location.feature": "Característica",
"location.fluid": "Fluido",
"location.fluid.fluid": "ID do Fluido",
"location.fluid.state": "Estados do Fluido",
"location.fluid.state_add": "Adicionar Estados do Fluido",
"location.fluid.state_remove": "Remover Estados do Fluido",
"location.fluid.tag": "Tag do Fluido",
"location.light": "Luz",
"location.light.light": "Nível da Luz Visível",
"location.position": "Posição",
"location.position.x": "X",
"location.position.y": "Y",
"location.position.z": "Z",
"luck_based": "Baseado na Sorte",
"more": "Mais",
"nbt_operation.operation": "Operação",
"nbt_operation.operation.append": "Acrescentar",
"nbt_operation.operation.merge": "Mesclar",
"nbt_operation.operation.replace": "Substituir",
"nbt_operation.source": "Origem",
"nbt_operation.target": "Alvo",
"nbt_operation_add": "Adicionar Operação",
"nbt_operation_remove": "Remover Operação",
"parent": "Conquistas dos Parentes",
"placeholder.advancement": "Um ID de Conquista",
"placeholder.block_state": "Uma chave do Estado do Bloco",
"placeholder.criteria": "Um ID de Critério",
"placeholder.effect": "Um ID de Estados de Efeito",
"placeholder.fluid_state": "Um ID de Estados de Efeito",
"placeholder.objective": "Um objetivo do placar",
"placeholder.recipe": "Um ID de Receita",
"pool.bonus_rolls": "Rodadas Bônus",
"pool.rolls": "Rodadas",
"pool_add": "Adicionar Pool",
"pool_remove": "Remover Pool",
"potion_effect.duration": "Duração",
"potion_effect.type": "Efeito",
"potion_effect_add": "Adicionar Efeito",
"potion_effect_remove": "Remover Efeito",
"range.binomial": "Binomial",
"range.exact": "Exato",
"range.max": "Máximo",
"range.min": "Mínimo",
"range.n": "n",
"range.p": "p",
"range.range": "Alcance",
"range.uniform": "Uniforme",
"remove": "Remover",
"requirements": "Exigências",
"rewards": "Prêmios",
"rewards.experience": "Experiência",
"rewards.function": "Função",
"rewards.loot": "Tabelas de Pilhagem",
"rewards.recipes": "Receitas",
"share": "Compartilhar",
"show_source": "Mostrar Origem",
"slot.chest": "Baú",
"slot.feet": "Pé",
"slot.head": "Cabeça",
"slot.legs": "Pernas",
"slot.mainhand": "Mão Principal",
"slot.offhand": "Mão Oposta à Principal",
"source.block_entity": "Bloco Entidade",
"source.killer": "Assassino",
"source.killer_player": "Jogador Assassino",
"source.this": "Este",
"statistic.stat": "Estatística",
"statistic.type": "Tipo",
"statistic.type.broken": "Quebrado",
"statistic.type.crafted": "Craftado",
"statistic.type.custom": "Personalizado",
"statistic.type.dropped": "Dropado",
"statistic.type.killed": "Morto",
"statistic.type.killedByTeam": "Porto por Time",
"statistic.type.killed_by": "Morto por",
"statistic.type.mined": "Minerado",
"statistic.type.picked_up": "Pegou",
"statistic.type.teamkill": "Time Morto",
"statistic.type.used": "Usado",
"statistic.value": "Valor",
"statistic_add": "Adicionar Estatísticas",
"statistic_remove": "Remover Estatísticas",
"status_effect.ambient": "Ambiente",
"status_effect.amplifier": "Amplificado",
"status_effect.duration": "Duração",
"status_effect.visible": "Visível",
"stored_enchantment_add": "Adicionar Encantamento Armazenado",
"table.type": "Tipo",
"table.type.block": "Bloco",
"table.type.chest": "Baú",
"table.type.empty": "Vazio",
"table.type.entity": "Entidade",
"table.type.fishing": "Pescaria",
"table.type.generic": "Genérico",
"tabs": "Guias",
"term_add": "Adicionar Termo",
"term_remove": "Remover Termo",
"theme": "Tema",
"theme.dark": "Escuro",
"theme.light": "Claro",
"title": "Geradores para Minecraft",
"title.advancement": "Gerador de Advancement",
"title.loot-table": "Gerador de Loot Table",
"title.predicate": "Gerador de Predicate",
"trigger.bee_nest_destroyed": "Ninho de abelha destruído",
"trigger.bred_animals": "Animais Reproduzidos",
"trigger.brewed_potion": "Poção Fabricada",
"trigger.changed_dimension": "Dimensão Alterada",
"trigger.channeled_lightning": "Raio Gerado",
"trigger.construct_beacon": "Construir Sinalizador",
"trigger.consume_item": "Consumir Item",
"trigger.cured_zombie_villager": "Aldeão Zumbi Curado",
"trigger.effects_changed": "Efeitos Alterados",
"trigger.enchanted_item": "Item Encantado",
"trigger.enter_block": "Inserir Block",
"trigger.entity_hurt_player": "Entidade Ferida por Jogador",
"trigger.entity_killed_player": "Entidade Morta por Jogador",
"trigger.filled_bucket": "Balde Enchido",
"trigger.fishing_rod_hooked": "Vara de Pesca Enganchada",
"trigger.hero_of_the_village": "Herói da Vila",
"trigger.impossible": "Impossível",
"trigger.inventory_changed": "Inventário Alterado",
"trigger.item_durability_changed": "Duração do Item Alterado",
"trigger.killed_by_crossbow": "Morto por Besta",
"trigger.levitation": "Levitação",
"trigger.location": "Localização",
"trigger.nether_travel": "Viagem ao Mundo Inferior",
"trigger.placed_block": "Colo",
"trigger.player_hurt_entity": "Bloco Colocado",
"trigger.player_killed_entity": "Jogador Morto por Entidade",
"trigger.recipe_unlocked": "Receita Desbloqueada",
"trigger.safely_harvest_honey": "Colher Mel com Segurança",
"trigger.shot_crossbow": "Ativar com Besta",
"trigger.slept_in_bed": "Dormido na Cama",
"trigger.slide_down_block": "Deslize em Bloco",
"trigger.summoned_entity": "Invocar Entidade",
"trigger.tame_animal": "Domar Animal",
"trigger.tick": "Tick",
"trigger.used_ender_eye": "Olho do Ender usado",
"trigger.used_totem": "Totem Usado",
"trigger.villager_trade": "Comércio de Aldeões",
"trigger.voluntary_exile": "Exílio Voluntário",
"true": "Verdadeiro",
"unset": "Desativar"
}
-636
View File
@@ -1,636 +0,0 @@
{
"2_spaces": "2 пробела",
"4_spaces": "4 пробела",
"attribute.generic.armor": "Броня",
"attribute.generic.armorToughness": "Твёрдость брони",
"attribute.generic.armor_toughness": "Твёрдость брони",
"attribute.generic.attackDamage": "Урон",
"attribute.generic.attack_damage": "Урон",
"attribute.generic.attackKnockback": "Отбрасывание",
"attribute.generic.attack_knockback": "Отбрасывание",
"attribute.generic.attackSpeed": "Скорость атаки",
"attribute.generic.attack_speed": "Скорость атаки",
"attribute.generic.flyingSpeed": "Скорость полёта",
"attribute.generic.flying_speed": "Скорость полёта",
"attribute.generic.followRange": "Диапазон преследования моба",
"attribute.generic.follow_range": "Диапазон преследования моба",
"attribute.generic.knockbackResistance": "Сопротивление отбрасыванию",
"attribute.generic.knockback_resistance": "Сопротивление отбрасыванию",
"attribute.generic.luck": "Удача",
"attribute.generic.maxHealth": "Максимальное здоровье",
"attribute.generic.max_health": "Максимальное здоровье",
"attribute.generic.movementSpeed": "Скорость",
"attribute.generic.movement_speed": "Скорость",
"attribute.horse.jumpStrength": "Сила прыжка лошади",
"attribute.horse.jump_strength": "Сила прыжка лошади",
"attribute.zombie.spawnReinforcements": "Подкрепление зомби",
"attribute.zombie.spawn_reinforcements": "Подкрепление зомби",
"attribute_modifier.amount": "Количество",
"attribute_modifier.attribute": "Атрибут",
"attribute_modifier.name": "Название",
"attribute_modifier.operation": "Действие",
"attribute_modifier.operation.addition": "Прибавление",
"attribute_modifier.operation.multiply_base": "Умножение базового",
"attribute_modifier.operation.multiply_total": "Умножение общего",
"attribute_modifier.slot": "Ячейки",
"attribute_modifier.slot.chest": "Тело",
"attribute_modifier.slot.feet": "Стопы",
"attribute_modifier.slot.head": "Голова",
"attribute_modifier.slot.legs": "Ноги",
"attribute_modifier.slot.mainhand": "Ведущая рука",
"attribute_modifier.slot.offhand": "Вторая рука",
"attribute_modifier_add": "Добавить модификатор",
"attribute_modifier_remove": "Удалить модификатор",
"badge.experimental": "Экспериментальный",
"badge.unstable": "Нестабильный",
"biome": "Биом",
"biome.parameters": "Параметры",
"biome.parameters.altitude": "Альтитуда",
"biome.parameters.weirdness": "Странность",
"biome.parameters.offset": "Смещение",
"biome.parameters.temperature": "Температура",
"biome.parameters.humidity": "Влажность",
"biome_add": "Добавить биом",
"biome_remove": "Удалить биом",
"biome_source.biome": "Биом",
"biome_source.biomes": "Биомы",
"biome_source.large_biomes": "Большие биомы",
"biome_source.preset": "Шаблон биомов",
"biome_source.preset.nether": "Незер",
"biome_source.seed": "Ключ генератора биомов",
"biome_source.type": "Тип генерации биомов",
"biome_source.type.fixed": "Один биом",
"biome_source.type.multi_noise": "Множественный шум",
"biome_source.type.checkerboard": "Шахматный",
"biome_source.type.vanilla_layered": "Стандартный",
"biome_source.type.the_end": "Энд",
"child_add": "Добавить дочернюю запись",
"condition.block": "Блок",
"condition.block_state": "Состояние блока",
"condition.block_state_add": "Добавить",
"condition.block_state_remove": "Удалить состояние блока",
"condition.chance": "Шанс",
"condition.chances": "Шансы",
"condition.damage_source": "Повреждение",
"condition.enchantment": "Чары",
"condition.entity": "Сущность",
"condition.inverse": "Инвертировать",
"condition.item": "Предмет",
"condition.location": "Местоположение",
"condition.looting_multiplier": "Множитель «Добычи»",
"condition.name": "ID предиката",
"condition.offsetX": "Смещение по X",
"condition.offsetY": "Смещение по Y",
"condition.offsetZ": "Смещение по Z",
"condition.raining": "Дождь",
"condition.score": "Задача",
"condition.score_add": "Добавить счёт",
"condition.score_remove": "Удалить счёт",
"condition.term": "Выражение",
"condition.thundering": "Гроза",
"condition.time_value": "Значение",
"condition.time_period": "Период",
"condition.type": "Условие",
"condition.type.alternative": "Альтернатива (ИЛИ)",
"condition.type.block_state_property": "Свойства блока",
"condition.type.damage_source_properties": "Источник урона",
"condition.type.entity_properties": "Свойства сущности",
"condition.type.entity_scores": "Счёты сущности",
"condition.type.inverted": "Инвертирование (НЕ)",
"condition.type.killed_by_player": "Убит игроком",
"condition.type.location_check": "Местоположение",
"condition.type.match_tool": "Свойства инструмента",
"condition.type.random_chance": "Случайность",
"condition.type.random_chance_with_looting": "Случайность с «Добычей»",
"condition.type.reference": "Предикат",
"condition.type.requirements": "Требуются (И)",
"condition.type.survives_explosion": "Переживает взрыв",
"condition.type.table_bonus": "Бонус таблицы",
"condition.type.time_check": "Время",
"condition.type.weather_check": "Погода",
"condition_add": "Добавить условие",
"condition_remove": "Удалить условие",
"copy": "Скопировать",
"credit": "на GitHub",
"criteria": "Условие",
"criteria.trigger": "Триггер",
"criteria.conditions": "Условия",
"criteria.block": "Блок",
"criteria.num_bees_inside": "Пчёл внутри",
"criteria.child": "Потомок",
"criteria.parent": "Предок",
"criteria.partner": "Партнёр",
"criteria.potion": "Зелье",
"criteria.from_dimension": "Откуда",
"criteria.to_dimension": "Куда",
"criteria.beacon_level": "Уровень конструкции",
"criteria.villager": "Крестьянин",
"criteria.zombie": "Зомби",
"criteria.effects": "Эффект",
"criteria.effects_add": "Добавить",
"criteria.effects_remove": "Удалить эффект",
"criteria.state": "Состояние",
"criteria.state_add": "Добавить",
"criteria.xp_levels": "Уровень",
"criteria.damage": "Урон",
"criteria.source_entity": "Сущность-источник",
"criteria.victim_entity": "Сущность-жертва",
"criteria.killing_blow": "Смертельный удар",
"criteria.pulled_entity": "Подтянутая сущность",
"criteria.rod": "Удочка",
"criteria.slots": "Ячейки",
"criteria.slots.empty": "Пустых ячеек",
"criteria.slots.occupied": "Занятых ячеек",
"criteria.slots.full": "Полных ячеек",
"criteria.items": "Предметы",
"criteria.items_add": "Добавить предмет",
"criteria.delta": "Разница",
"criteria.durability": "Прочность",
"criteria.item": "Предмет",
"criteria.unique_entity_types": "Уникальных типов сущностей",
"criteria.victims": "Жертвы",
"criteria.victims_add": "Добавить жертву",
"criteria.victims_remove": "Удалить жертву",
"criteria.distance": "Расстояние",
"criteria.duration": "Длительность",
"criteria.location": "Местоположение",
"criteria.recipe": "Рецепт",
"criteria.entity": "Сущность",
"criteria.loot_table": "Таблица добычи",
"criteria.player": "Игрок",
"criteria.entered": "Местоположение при входе",
"criteria.exited": "Местоположение при выходе",
"criteria_add": "Добавить",
"criteria_remove": "Удалить условие",
"damage.blocked": "Заблокирован",
"damage.dealt": "Нанесённый урон",
"damage.taken": "Полученный урон",
"damage.type": "Тип урона",
"damage_source.bypasses_armor": "Обход брони",
"damage_source.bypasses_invulnerability": "Бездна",
"damage_source.bypasses_magic": "Голод",
"damage_source.direct_entity": "Сущность-причина урона",
"damage_source.is_explosion": "Взрыв",
"damage_source.is_fire": "Огонь",
"damage_source.is_lightning": "Молния",
"damage_source.is_magic": "Магия",
"damage_source.is_projectile": "Снаряд",
"damage_source.source_entity": "Сущность-источник урона",
"description": "Генераторы для Minecraft: Java Edition",
"description.loot-table": "Генератор таблицы добычи для Minecraft: Java Edition",
"description.predicate": "Генератор предиката для Minecraft: Java Edition",
"description.advancement": "Генератор достижения для Minecraft: Java Edition",
"description.worldgen": "Генератор настроек генерации мира для Minecraft: Java Edition",
"dimension": "Измерение",
"dimension_add": "Добавить измерение",
"dimension_remove": "Удалить измерение",
"dimension.overworld": "Обычный мир",
"dimension.the_end": "Энд",
"dimension.the_nether": "Незер",
"dimension.type": "Тип измерения",
"dimension.type.name": "Название",
"dimension.type.ultrawarm": "Горячее",
"dimension.type.natural": "Земное",
"dimension.type.shrunk": "Сжатое",
"dimension.type.piglin_safe": "Безопасное для пиглинов",
"dimension.type.respawn_anchor_works": "Действующий якорь возрождения",
"dimension.type.bed_works": "Действующая кровать",
"dimension.type.has_raids": "Есть рейды",
"dimension.type.ambient_light": "Свет окружения",
"dimension.type.fixed_time": "Фиксированное время",
"dimension.type.has_skylight": "Есть свет неба",
"dimension.type.has_ceiling": "Есть крыша из бедрока",
"dimension.type.logical_height": "Логическая высота",
"dimension.type.infiniburn": "Блоки бесконечного горения",
"dimension.type.presets.overworld": "Обычный мир",
"dimension.type.presets.the_nether": "Незер",
"dimension.type.presets.the_end": "Энд",
"display": "Отображение",
"display.icon": "Значок",
"display.icon.item": "Предмет значка",
"display.icon.nbt": "NBT значка",
"display.title": "Заголовок",
"display.description": "Описание",
"display.frame": "Рамка",
"display.frame.challenge": "Испытание",
"display.frame.goal": "Цель",
"display.frame.task": "Обычная",
"display.background": "Фон",
"display.show_toast": "Всплывающее уведомление",
"display.announce_to_chat": "Сообщение в чате",
"display.hidden": "Скрыто",
"distance.absolute": "Абсолютное",
"distance.horizontal": "Горизонтальное",
"distance.x": "X",
"distance.y": "Y",
"distance.z": "Z",
"enchantment.aqua_affinity": "Подводник",
"enchantment.bane_of_arthropods": "Бич членистоногих",
"enchantment.binding_curse": "Проклятие несъёмности",
"enchantment.blast_protection": "Взрывоустойчивость",
"enchantment.channeling": "Громовержец",
"enchantment.depth_strider": "Подводная ходьба",
"enchantment.efficiency": "Эффективность",
"enchantment.feather_falling": "Невесомость",
"enchantment.fire_aspect": "Заговор огня",
"enchantment.fire_protection": "Огнеупорность",
"enchantment.flame": "Горящая стрела",
"enchantment.fortune": "Удача",
"enchantment.frost_walker": "Ледоход",
"enchantment.impaling": "Пронзатель",
"enchantment.infinity": "Бесконечность",
"enchantment.knockback": "Отдача",
"enchantment.looting": "Добыча",
"enchantment.loyalty": "Верность",
"enchantment.luck_of_the_sea": "Везучий рыбак",
"enchantment.lure": "Приманка",
"enchantment.mending": "Починка",
"enchantment.multishot": "Тройной выстрел",
"enchantment.piercing": "Пронзающая стрела",
"enchantment.power": "Сила",
"enchantment.projectile_protection": "Защита от снарядов",
"enchantment.protection": "Защита",
"enchantment.punch": "Откидывание",
"enchantment.quick_charge": "Быстрая перезарядка",
"enchantment.respiration": "Подводное дыхание",
"enchantment.riptide": "Тягун",
"enchantment.sharpness": "Острота",
"enchantment.silk_touch": "Шёлковое касание",
"enchantment.smite": "Небесная кара",
"enchantment.soul_speed": "Скорость души",
"enchantment.sweeping": "Разящий клинок",
"enchantment.thorns": "Шипы",
"enchantment.unbreaking": "Прочность",
"enchantment.vanishing_curse": "Проклятие утраты",
"enchantment_add": "Добавить чары",
"enchantment_remove": "Удалить чары",
"entity.distance": "Расстояние",
"entity.equipment": "Снаряжение",
"entity.fishing_hook": "Поплавок",
"entity.fishing_hook.in_open_water": "В открытой воде",
"entity.flags": "Состояние",
"entity.isBaby": "Ребёнок",
"entity.isOnFire": "Горит",
"entity.isSneaking": "Крадётся",
"entity.isSprinting": "Бежит",
"entity.isSwimming": "Плывёт",
"entity.location": "Местоположение",
"entity.nbt": "NBT",
"entity.player": "Игрок",
"entity.player.advancements": "Достижение",
"entity.player.advancements_add": "Добавить",
"entity.player.advancements_remove": "Удалить достижение",
"entity.player.gamemode": "Игровой режим",
"entity.player.level": "Уровень опыта",
"entity.player.recipes": "Рецепты",
"entity.player.recipes_add": "Добавить",
"entity.player.recipes_remove": "Удалить рецепт",
"entity.player.stats": "Статистика",
"entity.status_effect": "Эффекты",
"entity.status_effect_add": "Добавить",
"entity.status_effect_remove": "Удалить эффект",
"entity.targeted_entity": "Целевая сущность",
"entity.team": "Команда",
"entity.type": "Сущность",
"entity.vehicle": "Транспорт",
"entry.expand": "Отдельно",
"entry.name": "ID",
"entry.quality": "Качество",
"entry.type": "Тип",
"entry.type.alternatives": "Альтернатива",
"entry.type.dynamic": "Динамический",
"entry.type.empty": "Ничего",
"entry.type.group": "Группа",
"entry.type.item": "Предмет",
"entry.type.loot_table": "Таблица добычи",
"entry.type.sequence": "Последовательность",
"entry.type.tag": "Тег предметов",
"entry.weight": "Вес",
"entry_add": "Добавить запись",
"entry_remove": "Удалить запись",
"error": "Ошибка",
"false": "Нет",
"function.block": "Блок",
"function.bonusMultiplier": "Множитель",
"function.count": "Количество",
"function.damage": "Повреждение",
"function.data": "Данные",
"function.decoration": "Значок",
"function.destination": "Строение",
"function.enchantment": "Чары",
"function.enchantments": "Чары",
"function.entity": "Сущность",
"function.extra": "Дополнительное значение",
"function.formula": "Формула",
"function.formula.binomial_with_bonus_count": "Биноминальное распределение",
"function.formula.ore_drops": "Добыча руд",
"function.formula.uniform_bonus_count": "Равномерное распределение",
"function.levels": "Уровень",
"function.limit": "Ограничение",
"function.lore": "Описание",
"function.name": "Название",
"function.nbt": "NBT",
"function.probability": "Вероятность",
"function.properties": "Свойства",
"function.replace": "Заменить старое",
"function.searchRadius": "Радиус поиска (в чанках)",
"function.seed": "Ключ генератора",
"function.skipExistingChunks": "Пропуск существующих чанков",
"function.source": "Источник",
"function.treasure": "Чары-сокровища",
"function.type": "Функция",
"function.type.apply_bonus": "Применить бонус",
"function.type.copy_name": "Скопировать название",
"function.type.copy_nbt": "Скопировать NBT",
"function.type.copy_state": "Скопировать состояния блока",
"function.type.enchant_randomly": "Наложить случайные чары",
"function.type.enchant_with_levels": "Наложить чары с уровнем",
"function.type.exploration_map": "Задать свойства карты исследователя",
"function.type.explosion_decay": "Разрушить взрывом",
"function.type.fill_player_head": "Задать скин голове игрока",
"function.type.furnace_smelt": "Расплавить в печи",
"function.type.limit_count": "Ограничить количество",
"function.type.looting_enchant": "Применить чары «Добыча»",
"function.type.set_attributes": "Задать атрибуты",
"function.type.set_contents": "Задать содержимое",
"function.type.set_count": "Задать количество",
"function.type.set_damage": "Задать повреждение",
"function.type.set_data": "Задать данные",
"function.type.set_lore": "Задать описание",
"function.type.set_loot_table": "Задать таблицу добычи",
"function.type.set_name": "Задать название",
"function.type.set_nbt": "Задать NBT",
"function.type.set_stew_effect": "Задать эффект загадочного рагу",
"function.zoom": "Уровень приближения",
"function_add": "Добавить функцию",
"function_remove": "Удалить функцию",
"gamemode.adventure": "Приключенческий",
"gamemode.creative": "Творческий",
"gamemode.spectator": "Наблюдатель",
"gamemode.survival": "Выживание",
"generator.type": "Тип генератора",
"generator.type.noise": "По умолчанию",
"generator.type.flat": "Суперплоскость",
"generator.type.debug": "Режим отладки",
"generator.seed": "Ключ генератора измерения",
"generator.settings": "Настройки генератора",
"generator.settings.bedrock_roof_position": "Положение верхнего уровня бедрока",
"generator.settings.bedrock_floor_position": "Положение нижнего уровня бедрока",
"generator.settings.sea_level": "Уровень моря",
"generator.settings.disable_mob_generation": "Отключить генерацию мобов",
"generator.settings.default_block.name": "Основной блок",
"generator.settings.default_fluid.name": "Основная жидкость",
"generator.settings.block_states": "Состояния блока",
"generator.settings.block_states_add": "Добавить",
"generator.settings.fluid_states": "Состояния жидкости",
"generator.settings.fluid_states_add": "Добавить",
"generator.settings.layers_add": "Добавить слой",
"generator.settings.noise": "Параметры шума",
"generator.settings.noise.density_factor": "Множитель плотности",
"generator.settings.noise.density_offset": "Смещение плотности",
"generator.settings.noise.simplex_surface_noise": "Симплекс-шум поверхности",
"generator.settings.noise.random_density_offset": "Случайное смещение плотности",
"generator.settings.noise.island_noise_override": "Переопределение островным шумом",
"generator.settings.noise.amplified": "Усиленный",
"generator.settings.noise.size_horizontal": "Размер по горизонтали",
"generator.settings.noise.size_vertical": "Размер по вертикали",
"generator.settings.noise.height": "Высота",
"generator.settings.noise.sampling.xz_scale": "Уровень шума по X, Z",
"generator.settings.noise.sampling.y_scale": "Уровень шума по Y",
"generator.settings.noise.sampling.xz_factor": "Множитель шума по X, Z",
"generator.settings.noise.sampling.y_factor": "Множитель шума по Y",
"generator.settings.noise.bottom_slide.target": "Значение низа кривой",
"generator.settings.noise.bottom_slide.size": "Размер низа кривой",
"generator.settings.noise.bottom_slide.offset": "Смещение низа кривой",
"generator.settings.noise.top_slide.target": "Значение верха кривой",
"generator.settings.noise.top_slide.size": "Размер верха кривой",
"generator.settings.noise.top_slide.offset": "Смещение верха кривой",
"generator.settings.presets.overworld": "Обычный мир",
"generator.settings.presets.nether": "Незер",
"generator.settings.presets.end": "Энд",
"generator.settings.presets.amplified": "Расширенный",
"generator.settings.presets.caves": "Пещеры",
"generator.settings.presets.floating_islands": "Парящие острова",
"generator.settings.structures": "Строения",
"generator.settings.structures_add": "Добавить",
"generator.settings.structures_remove": "Удалить строение",
"help.biome.parameters.altitude": "Эти параметры определяют расположение биома. Каждый биом должен иметь уникальную комбинацию параметров. Биомы с похожими значениями будут генерироваться рядом.",
"help.biome_source.type.fixed": "Один биом на весь мир",
"help.biome_source.type.multi_noise": "Распределение биомов с настраиваемыми параметрами",
"help.biome_source.type.checkerboard": "Генерация биомов в шахматном порядке",
"help.biome_source.type.vanilla_layered": "Распределение биомов по всему миру",
"help.biome_source.type.the_end": "Распределение биомов для Энда",
"help.condition.chances": "Список вещественных чисел от 0 до 1, разделённые запятыми",
"help.condition.time_period": "Если задан, время будет получено взятием остатка от деления времени на заданный период.",
"help.dimension": "Идентификатор, используемый в команде «/execute in». Должен быть записан в нижнем регистре.",
"help.dimension.type": "Параметры измерения. Нажмите на «Тип измерения», чтобы настроить каждый параметр.",
"help.dimension.type.name": "Внутреннее название типа измерения. Напишите здесь ID измерения.",
"help.dimension.type.ultrawarm": "Определяет, испаряется ли вода и высыхают ли губки",
"help.dimension.type.natural": "Если «Да», у порталов будут появляться зомбифицированные пиглины. Если «Нет», компас будет крутиться.",
"help.dimension.type.shrunk": "Определяет, должны ли координаты уменьшаться в 8 раз",
"help.dimension.type.ambient_light": "Значение от 0 до 1",
"help.dimension.type.fixed_time": "При указании значения солнце будет находится в фиксированном положении",
"help.display": "Если указано, достижение будет отображаться в интерфейсе достижений.",
"help.entry.expand": "Если отдельно, то действует как множество записей каждого предмета из тега, иначе возвращает всё содержимое тега",
"help.entry.type.alternatives": "Выбирает первую дочернюю запись, у которой выполняется условие",
"help.entry.type.dynamic": "Возвращает особое содержимое блока",
"help.entry.type.empty": "Возвращает пустую запись",
"help.entry.type.group": "Выбирает все дочерние записи, у которых выполняются условия",
"help.entry.type.item": "Возвращает предмет",
"help.entry.type.loot_table": "Возвращает содержимое другой таблицы добычи",
"help.entry.type.sequence": "Выбирает все дочерние записи до первой записи, у которой условия не выполняются",
"help.entry.type.tag": "Возвращает содержимое тега предметов",
"help.generator.settings": "Параметры генерации ландшафта. Нажмите на «Настройки генератора», чтобы настроить каждый параметр.",
"help.generator.settings.bedrock_roof_position": "Положение верхнего уровня бедрока относительно верха мира. Чем больше число, тем ниже уровень.",
"help.generator.settings.bedrock_floor_position": "Положение нижнего уровня бедрока. Чем больше число, тем выше уровень.",
"help.generator.settings.disable_mob_generation": "Определяет, появляются ли мобы во время генерации",
"help.generator.settings.noise.density_factor": "При указании 0 будут генерироваться острова",
"help.generator.settings.noise.density_offset": "Используется для смещения высоты ландшафта по формуле: \"высота_ландшафта = ((смещение_плотности / множитель_плотности) + 1) × высота / 2\"",
"help.generator.settings.noise.size_horizontal": "Значение должно быть 1, 2 или 4. Значения выше 4 приведут к исчезновению ландшафта. Чем выше значение, тем ровнее ландшафт.",
"help.generator.settings.noise.size_vertical": "Значение от 1 до 4",
"help.generator.settings.noise.island_noise_override": "Если «Да», ландшафт будет генерироваться как в Энде: один большой остров в центре и много островов вдали от него",
"help.generator.settings.structures": "Если не указать строение, оно будет появляться очень часто",
"help.pool.rolls": "Количество раз выбора случайной записи",
"help.structure.spacing": "Максимальное расстояние в чанках между двумя строениями",
"help.structure.separation": "Минимальное расстояние в чанках между двумя строениями. Должно быть меньше интервала.",
"hide_source": "Скрыть источник",
"item.count": "Количество",
"item.durability": "Прочность",
"item.enchantment": "Чары",
"item.levels": "Уровень",
"item.name": "ID предмета",
"item.nbt": "NBT",
"item.potion": "Зелье",
"item.tag": "Тег предметов",
"item_remove": "Удалить предмет",
"layer_remove": "Удалить слой",
"layer.block": "ID блока",
"layer.height": "Высота",
"location.biome": "Биом",
"location.block": "Блок",
"location.block.block": "ID блока",
"location.block.nbt": "NBT",
"location.block.state": "Состояние блока",
"location.block.state_add": "Добавить",
"location.block.state_remove": "Удалить состояние блока",
"location.block.tag": "Тег блоков",
"location.dimension": "Измерение",
"location.feature": "Строение",
"location.fluid": "Жидкость",
"location.fluid.fluid": "ID жидкости",
"location.fluid.state": "Состояние жидкости",
"location.fluid.state_add": "Добавить",
"location.fluid.state_remove": "Удалить состояние жидкости",
"location.fluid.tag": "Тег жидкостей",
"location.light": "Освещённость",
"location.light.light": "Уровень освещённости",
"location.position": "Позиция",
"location.position.x": "X",
"location.position.y": "Y",
"location.position.z": "Z",
"location.smokey": "Задымлённое",
"luck_based": "Основано на удаче",
"more": "Больше",
"nbt_operation.operation": "Действие",
"nbt_operation.operation.append": "Добавление",
"nbt_operation.operation.merge": "Объединение",
"nbt_operation.operation.replace": "Замена",
"nbt_operation.source": "Источник",
"nbt_operation.target": "Цель",
"nbt_operation_add": "Добавить действие",
"nbt_operation_remove": "Удалить действие",
"parent": "Предок",
"placeholder.advancement": "ID достижения",
"placeholder.block_state": "Ключ состояния",
"placeholder.criteria": "ID условия",
"placeholder.dimension": "ID измерения",
"placeholder.effect": "ID эффекта",
"placeholder.fluid_state": "Ключ состояния",
"placeholder.objective": "Название задачи",
"placeholder.recipe": "ID рецепта",
"placeholder.structure": "ID строения",
"pool.bonus_rolls": "Бонусных бросков",
"pool.rolls": "Бросков",
"pool_add": "Добавить пул",
"pool_remove": "Удалить пул",
"potion_effect.duration": "Длительность",
"potion_effect.type": "Эффект",
"potion_effect_add": "Добавить эффект",
"potion_effect_remove": "Удалить эффект",
"range.binomial": "Биномиальное распределение",
"range.exact": "Число",
"range.max": "Макс.",
"range.min": "Мин.",
"range.n": "n",
"range.p": "p",
"range.range": "Диапазон",
"range.uniform": "Равномерное распределение",
"remove": "Удалить",
"requirements": "Требуются",
"rewards": "Награды",
"rewards.loot": "Таблицы достижений",
"rewards.function": "Функция",
"rewards.recipes": "Рецепты",
"rewards.experience": "Опыт",
"share": "Поделиться",
"show_source": "Показать источник",
"slot.chest": "Тело",
"slot.feet": "Стопы",
"slot.head": "Голова",
"slot.legs": "Ноги",
"slot.mainhand": "Ведущая рука",
"slot.offhand": "Вторая рука",
"source.block_entity": "Блок-сущность",
"source.killer": "Убийца",
"source.killer_player": "Игрок-убийца",
"source.this": "Текущая",
"statistic.stat": "Статистика",
"statistic.type": "Тип",
"statistic.type.broken": "Сломано",
"statistic.type.crafted": "Создано",
"statistic.type.custom": "Пользовательский",
"statistic.type.dropped": "Выброшено",
"statistic.type.killed": "Убито",
"statistic.type.killedByTeam": "Был убит командой",
"statistic.type.killed_by": "Был убит",
"statistic.type.mined": "Вскопано",
"statistic.type.picked_up": "Подобрано",
"statistic.type.teamkill": "Убито из команды",
"statistic.type.used": "Использовано",
"statistic.value": "Значение",
"statistic_add": "Добавить статистику",
"statistic_remove": "Удалить статистику",
"status_effect.ambient": "Из окружения",
"status_effect.amplifier": "Уровень",
"status_effect.duration": "Длительность",
"status_effect.visible": "Видимый",
"stored_enchantment_add": "Добавить книжные чары",
"structure.spacing": "Интервал",
"structure.separation": "Изоляция",
"structure.salt": "Соль",
"table.type": "Тип",
"table.type.block": "Блок",
"table.type.chest": "Сундук",
"table.type.empty": "Ничего",
"table.type.entity": "Сущность",
"table.type.fishing": "Рыбалка",
"table.type.generic": "Общий",
"tabs": "Табуляция",
"term_add": "Добавить выражение",
"term_remove": "Удалить выражение",
"theme": "Тема",
"theme.dark": "Тёмная",
"theme.light": "Светлая",
"title": "Генераторы для Minecraft: Java Edition",
"title.loot-table": "Генератор таблицы добычи",
"title.predicate": "Генератор предиката",
"title.advancement": "Генератор достижения",
"title.worldgen": "Генератор настроек генерации мира",
"trigger.bee_nest_destroyed": "Разрушил пчелиное гнездо",
"trigger.bred_animals": "Свёл животных",
"trigger.brewed_potion": "Сварил зелье",
"trigger.changed_dimension": "Сменил измерение",
"trigger.channeled_lightning": "Поразил «Громовержцем»",
"trigger.construct_beacon": "Построил маяк",
"trigger.consume_item": "Съел/Выпил предмет",
"trigger.cured_zombie_villager": "Излечил зомби-крестьянина",
"trigger.effects_changed": "Эффекты изменены",
"trigger.enchanted_item": "Зачаровал предмет",
"trigger.enter_block": "Находится в блоке",
"trigger.entity_hurt_player": "Получил урон",
"trigger.entity_killed_player": "Убит сущностью",
"trigger.filled_bucket": "Наполнил ведро",
"trigger.fishing_rod_hooked": "Подцепил крючком",
"trigger.hero_of_the_village": "Герой деревни",
"trigger.impossible": "Невозможный",
"trigger.inventory_changed": "Инвентарь изменён",
"trigger.item_durability_changed": "Прочность предмета изменена",
"trigger.item_used_on_block": "Использовал предмет на блоке",
"trigger.killed_by_crossbow": "Убил арбалетом",
"trigger.levitation": "Левитация",
"trigger.location": "Местоположение",
"trigger.nether_travel": "Переместился через Незер",
"trigger.placed_block": "Поставил блок",
"trigger.player_generates_container_loot": "Сгенерировал содержимое блока",
"trigger.player_hurt_entity": "Нанёс урон",
"trigger.player_killed_entity": "Убил сущность",
"trigger.recipe_unlocked": "Разблокировал рецепт",
"trigger.safely_harvest_honey": "Безопасно собрал мёд",
"trigger.shot_crossbow": "Выстрелил из арбалета",
"trigger.slept_in_bed": "Лёг на кровать",
"trigger.slide_down_block": "Скользит вниз по блоку",
"trigger.summoned_entity": "Призвал сущность",
"trigger.tame_animal": "Приручил животное",
"trigger.tick": "Такт",
"trigger.thrown_item_picked_up_by_entity": "Выкинутый предмет подобран сущностью",
"trigger.used_ender_eye": "Использовал око Эндера",
"trigger.used_totem": "Использовал тотем",
"trigger.villager_trade": "Поторговал с крестьянином",
"trigger.voluntary_exile": "Вызвал рейд",
"true": "Да",
"unset": "Не задано",
"world.generate_features": "Генерация строений",
"world.bonus_chest": "Бонусный сундук",
"world.seed": "Ключ генератора мира",
"worldgen.warning": "Эта функция экспериментальная и крайне нестабильная. Она может измениться в будущих версиях. Есть вероятность, что произойдёт сбой игры при создании мира."
}
-494
View File
@@ -1,494 +0,0 @@
{
"2_spaces": "2 空格缩进",
"4_spaces": "4 空格缩进",
"attribute.generic.armor": "盔甲防御点数",
"attribute.generic.armorToughness": "盔甲韧性",
"attribute.generic.armor_toughness": "盔甲韧性",
"attribute.generic.attack_damage": "普通攻击伤害",
"attribute.generic.attackDamage": "普通攻击伤害",
"attribute.generic.attackKnockback": "击退距离",
"attribute.generic.attack_knockback": "击退距离",
"attribute.generic.attackSpeed": "攻击速度",
"attribute.generic.attack_speed": "攻击速度",
"attribute.generic.flyingSpeed": "飞行速度",
"attribute.generic.flying_speed": "飞行速度",
"attribute.generic.followRange": "追踪范围",
"attribute.generic.follow_range": "追踪范围",
"attribute.generic.knockbackResistance": "抗击退效果",
"attribute.generic.knockback_resistance": "抗击退效果",
"attribute.generic.luck": "幸运",
"attribute.generic.maxHealth": "最大生命值",
"attribute.generic.max_health": "最大生命值",
"attribute.generic.movementSpeed": "移动速度",
"attribute.generic.movement_speed": "移动速度",
"attribute.horse.jumpStrength": "弹跳力",
"attribute.horse.jump_strength": "弹跳力",
"attribute.zombie.spawnReinforcements": "连带生成新僵尸的可能性",
"attribute.zombie.spawn_reinforcements": "连带生成新僵尸的可能性",
"attribute_modifier.amount": "数额",
"attribute_modifier.attribute": "属性",
"attribute_modifier.name": "名称",
"attribute_modifier.operation": "运算模式",
"attribute_modifier.operation.addition": "加减数额",
"attribute_modifier.operation.multiply_base": "乘以数额",
"attribute_modifier.operation.multiply_total": "乘以(数额 + 1",
"attribute_modifier.slot": "栏位",
"attribute_modifier.slot.chest": "胸部",
"attribute_modifier.slot.feet": "脚部",
"attribute_modifier.slot.head": "头部",
"attribute_modifier.slot.legs": "腿部",
"attribute_modifier.slot.mainhand": "主手",
"attribute_modifier.slot.offhand": "副手",
"attribute_modifier_add": "添加属性修饰器",
"attribute_modifier_remove": "移除属性修饰器",
"child_add": "添加子项目",
"condition.block": "方块",
"condition.block_state": "方块状态",
"condition.block_state_add": "添加方块状态",
"condition.block_state_remove": "移除方块状态",
"condition.chance": "机率",
"condition.chances": "机率",
"condition.damage_source": "损伤值",
"condition.enchantment": "附魔",
"condition.entity": "实体",
"condition.inverse": "取反",
"condition.item": "物品",
"condition.location": "位置",
"condition.looting_multiplier": "每级抢夺附魔增加的数",
"condition.name": "断言 ID",
"condition.offsetX": "X 坐标偏移",
"condition.offsetY": "Y 坐标偏移",
"condition.offsetZ": "Z 坐标偏移",
"condition.raining": "下雨",
"condition.score": "分数",
"condition.score_add": "添加分数",
"condition.score_remove": "移除分数",
"condition.term": "条件",
"condition.thundering": "雷雨",
"condition.time_period": "周期",
"condition.time_value": "值",
"condition.type": "条件",
"condition.type.alternative": "析取范式(或)",
"condition.type.block_state_property": "方块属性",
"condition.type.damage_source_properties": "伤害源",
"condition.type.entity_properties": "实体属性",
"condition.type.entity_scores": "实体分数",
"condition.type.inverted": "取反(非)",
"condition.type.killed_by_player": "被玩家击杀",
"condition.type.location_check": "位置",
"condition.type.match_tool": "工具属性",
"condition.type.random_chance": "随机概率",
"condition.type.random_chance_with_looting": "受抢夺附魔影响的随机概率",
"condition.type.reference": "引用断言文件",
"condition.type.requirements": "合取范式(且)",
"condition.type.survives_explosion": "未被爆炸破坏",
"condition.type.table_bonus": "附魔奖励",
"condition.type.time_check": "检查时间",
"condition.type.weather_check": "天气",
"condition_add": "添加条件",
"condition_remove": "移除条件",
"copy": "复制",
"credit": "于 GitHub",
"criteria": "判据",
"criteria.beacon_level": "金字塔等级",
"criteria.block": "方块",
"criteria.child": "幼体",
"criteria.conditions": "条件",
"criteria.damage": "伤害",
"criteria.delta": "差值",
"criteria.distance": "距离",
"criteria.durability": "耐久度",
"criteria.duration": "持续时间",
"criteria.effects": "状态效果",
"criteria.effects_add": "添加状态效果",
"criteria.effects_remove": "移除状态效果",
"criteria.entity": "实体",
"criteria.from_dimension": "出发维度",
"criteria.item": "物品",
"criteria.items": "物品",
"criteria.items_add": "添加物品",
"criteria.killing_blow": "伤害类型",
"criteria.location": "位置",
"criteria.num_bees_inside": "内部蜜蜂的数量",
"criteria.parent": "父或母",
"criteria.partner": "配偶",
"criteria.potion": "药水 ID",
"criteria.pulled_entity": "被拉的实体",
"criteria.recipe": "配方",
"criteria.rod": "钓鱼杆",
"criteria.slots": "栏位",
"criteria.slots.empty": "空栏位的数量",
"criteria.slots.full": "用满栏位的数量",
"criteria.slots.occupied": "已用栏位的数量",
"criteria.source_entity": "源实体",
"criteria.state": "方块状态",
"criteria.state_add": "添加方块状态",
"criteria.to_dimension": "到达维度",
"criteria.trigger": "触发器",
"criteria.unique_entity_types": "实体种类的数量",
"criteria.victim_entity": "受害实体",
"criteria.victims": "受害实体",
"criteria.victims_add": "添加受害实体",
"criteria.victims_remove": "移除受害实体",
"criteria.villager": "村民",
"criteria.xp_levels": "经验等级",
"criteria.zombie": "僵尸",
"criteria_add": "添加判据",
"criteria_remove": "移除判据",
"damage.blocked": "是否被阻挡",
"damage.dealt": "应当受到伤害",
"damage.taken": "实际受到伤害",
"damage.type": "伤害类型",
"damage_source.bypasses_armor": "破甲",
"damage_source.bypasses_invulnerability": "虚空",
"damage_source.bypasses_magic": "饥饿",
"damage_source.direct_entity": "直接来源实体",
"damage_source.is_explosion": "爆炸",
"damage_source.is_fire": "燃烧",
"damage_source.is_lightning": "雷击",
"damage_source.is_magic": "魔法",
"damage_source.is_projectile": "弹射物",
"damage_source.source_entity": "根本来源实体",
"description": "Minecraft: Java Edition 生成器",
"description.advancement": "Minecraft: Java Edition 进度生成器",
"description.loot-table": "Minecraft: Java Edition 战利品表生成器",
"description.predicate": "Minecraft: Java Edition 断言生成器",
"description.worldgen": "Minecraft: Java Edition 世界生成器设置生成器",
"dimension.overworld": "主世界",
"dimension.the_end": "末路之地",
"dimension.the_nether": "下界",
"display": "显示",
"display.announce_to_chat": "在聊天栏提示",
"display.background": "背景",
"display.description": "描述",
"display.frame": "框架类型",
"display.frame.challenge": "挑战",
"display.frame.goal": "目标",
"display.frame.task": "任务",
"display.hidden": "隐藏",
"display.icon": "图标",
"display.icon.item": "图标物品",
"display.icon.nbt": "图标物品 NBT",
"display.show_toast": "显示右上角提示信息",
"display.title": "标题",
"distance.absolute": "绝对距离",
"distance.horizontal": "水平距离",
"distance.x": "X",
"distance.y": "Y",
"distance.z": "Z",
"enchantment.aqua_affinity": "水下速掘",
"enchantment.bane_of_arthropods": "节肢杀手",
"enchantment.binding_curse": "绑定诅咒",
"enchantment.blast_protection": "爆炸保护",
"enchantment.channeling": "引雷",
"enchantment.depth_strider": "深海探索者",
"enchantment.efficiency": "效率",
"enchantment.feather_falling": "摔落保护",
"enchantment.fire_aspect": "火焰附加",
"enchantment.fire_protection": "火焰保护",
"enchantment.flame": "火矢",
"enchantment.fortune": "时运",
"enchantment.frost_walker": "冰霜行者",
"enchantment.impaling": "穿刺",
"enchantment.infinity": "无限",
"enchantment.knockback": "击退",
"enchantment.looting": "抢夺",
"enchantment.loyalty": "忠诚",
"enchantment.luck_of_the_sea": "海之眷顾",
"enchantment.lure": "饵钓",
"enchantment.mending": "经验修补",
"enchantment.multishot": "多重射击",
"enchantment.piercing": "穿透",
"enchantment.power": "力量",
"enchantment.projectile_protection": "弹射物保护",
"enchantment.protection": "保护",
"enchantment.punch": "冲击",
"enchantment.quick_charge": "快速装填",
"enchantment.respiration": "水下呼吸",
"enchantment.riptide": "激流",
"enchantment.sharpness": "锋利",
"enchantment.silk_touch": "精准采集",
"enchantment.smite": "亡灵杀手",
"enchantment.soul_speed": "灵魂疾行",
"enchantment.sweeping": "横扫之刃",
"enchantment.thorns": "荆棘",
"enchantment.unbreaking": "耐久",
"enchantment.vanishing_curse": "消失诅咒",
"enchantment_add": "添加附魔",
"enchantment_remove": "移除附魔",
"entity.distance": "到执行位置的距离",
"entity.equipment": "装备",
"entity.flags": "实体特质",
"entity.fishing_hook": "鱼钩",
"entity.fishing_hook.in_open_water": "位于开阔水域",
"entity.isBaby": "是幼体",
"entity.isOnFire": "正在着火",
"entity.isSneaking": "正在潜行",
"entity.isSprinting": "正在疾跑",
"entity.isSwimming": "正在游泳",
"entity.location": "位置",
"entity.nbt": "NBT",
"entity.player": "玩家",
"entity.player.advancements": "进度",
"entity.player.advancements_add": "添加进度",
"entity.player.advancements_remove": "移除进度",
"entity.player.gamemode": "游戏模式",
"entity.player.level": "经验等级",
"entity.player.recipes": "配方",
"entity.player.recipes_add": "添加配方",
"entity.player.recipes_remove": "移除配方",
"entity.player.stats": "统计",
"entity.status_effect": "状态效果",
"entity.status_effect_add": "添加状态效果",
"entity.status_effect_remove": "移除状态效果",
"entity.team": "队伍",
"entity.type": "实体",
"entry.expand": "展开",
"entry.name": "名称",
"entry.quality": "每级幸运对权重的影响",
"entry.type": "类型",
"entry.type.alternatives": "析取范式",
"entry.type.dynamic": "动态",
"entry.type.empty": "空",
"entry.type.group": "组",
"entry.type.item": "物品",
"entry.type.loot_table": "战利品表",
"entry.type.sequence": "序列",
"entry.type.tag": "物品标签",
"entry.weight": "权重",
"entry_add": "添加项目",
"entry_remove": "移除项目",
"error": "Error",
"false": "否",
"function.block": "方块",
"function.bonusMultiplier": "乘数",
"function.count": "数量",
"function.damage": "损伤值",
"function.data": "数据值",
"function.decoration": "图标",
"function.destination": "目标",
"function.enchantment": "附魔",
"function.enchantments": "可选附魔",
"function.entity": "实体",
"function.extra": "额外值",
"function.formula": "公式",
"function.formula.binomial_with_bonus_count": "带奖励数量的二项分布",
"function.formula.ore_drops": "矿物掉落",
"function.formula.uniform_bonus_count": "带奖励数量的均匀分布",
"function.levels": "等级",
"function.limit": "限制",
"function.lore": "下标",
"function.name": "名称",
"function.nbt": "NBT",
"function.probability": "概率",
"function.properties": "方块状态",
"function.replace": "覆盖",
"function.searchRadius": "搜寻半径",
"function.skipExistingChunks": "跳过已生成区块",
"function.source": "源",
"function.treasure": "宝藏型附魔",
"function.type": "函数",
"function.type.apply_bonus": "应用奖励公式",
"function.type.copy_name": "复制方块实体显示名",
"function.type.copy_nbt": "复制 NBT",
"function.type.copy_state": "复制方块状态",
"function.type.enchant_randomly": "随机附魔",
"function.type.enchant_with_levels": "给予等价于经验等级的随机附魔",
"function.type.exploration_map": "设置探险地图",
"function.type.explosion_decay": "爆炸损耗",
"function.type.fill_player_head": "填充玩家头颅",
"function.type.furnace_smelt": "熔炉熔炼",
"function.type.limit_count": "限制堆叠数量",
"function.type.looting_enchant": "根据抢夺附魔调整物品数量",
"function.type.set_attributes": "设置属性",
"function.type.set_contents": "设置内容物",
"function.type.set_count": "设置物品数量",
"function.type.set_damage": "设置损伤值",
"function.type.set_data": "设置数据值",
"function.type.set_lore": "设置下标",
"function.type.set_name": "设置物品名",
"function.type.set_nbt": "设置 NBT",
"function.type.set_stew_effect": "设置迷之炖菜状态效果",
"function.zoom": "缩放等级",
"function_add": "添加函数",
"function_remove": "移除函数",
"gamemode.adventure": "冒险模式",
"gamemode.creative": "创造模式",
"gamemode.spectator": "旁观者模式",
"gamemode.survival": "生存模式",
"help.condition.time_period": "可选。如果指定,在比较前会先将游戏的时间以该数取模(例如,如果设置为 24000,指定的值将会被运算为一天中的时间)",
"help.display": "如果存在,该进度将会在进度界面中显示",
"help.entry.expand": "如果为 false,该项目将返回指定物品标签的全部内容;否则将会从中随机抽取一个返回",
"help.entry.type.alternatives": "获取第一个满足条件的子项目",
"help.entry.type.dynamic": "获取特定方块的特定掉落物",
"help.entry.type.empty": "不向随机池中加入任何物品",
"help.entry.type.group": "从所有满足条件的子项目中随机抽取一个",
"help.entry.type.item": "加入一种物品",
"help.entry.type.loot_table": "加入另一个战利品表的内容",
"help.entry.type.sequence": "从第一个不满足条件的子项目之前的所有子项目中随机抽取一个",
"help.entry.type.tag": "添加一个物品标签的内容",
"help.pool.rolls": "随机抽取项目的次数",
"hide_source": "隐藏源代码",
"item.count": "数量",
"item.durability": "耐久度",
"item.enchantment": "附魔",
"item.levels": "等级",
"item.name": "名称",
"item.nbt": "NBT",
"item.potion": "药水",
"item.tag": "标签",
"item_remove": "移除物品",
"location.biome": "生物群系",
"location.block": "方块",
"location.block.block": "方块 ID",
"location.block.nbt": "NBT",
"location.block.state": "方块状态",
"location.block.state_add": "添加方块状态",
"location.block.state_remove": "移除方块状态",
"location.block.tag": "方块标签",
"location.dimension": "维度",
"location.feature": "结构",
"location.fluid": "流体",
"location.fluid.fluid": "流体 ID",
"location.fluid.state": "流体状态",
"location.fluid.state_add": "添加流体状态",
"location.fluid.state_remove": "移除流体状态",
"location.fluid.tag": "流体标签",
"location.light": "光照",
"location.light.light": "可见光等级",
"location.position": "位置",
"location.position.x": "X 坐标",
"location.position.y": "Y 坐标",
"location.position.z": "Z 坐标",
"luck_based": "受幸运等级影响",
"more": "更多选项",
"nbt_operation.operation": "操作类型",
"nbt_operation.operation.append": "追加",
"nbt_operation.operation.merge": "合并",
"nbt_operation.operation.replace": "替换",
"nbt_operation.source": "复制源",
"nbt_operation.target": "复制目标",
"nbt_operation_add": "添加操作",
"nbt_operation_remove": "移除操作",
"parent": "父进度",
"placeholder.advancement": "一个进度 ID",
"placeholder.block_state": "一个方块状态键",
"placeholder.criteria": "一个判据 ID",
"placeholder.effect": "一个状态效果 ID",
"placeholder.fluid_state": "一个流体状态键",
"placeholder.objective": "一个记分项",
"placeholder.recipe": "一个配方 ID",
"pool.bonus_rolls": "每级幸运增加的抽取次数",
"pool.rolls": "抽取次数",
"pool_add": "添加随机池",
"pool_remove": "移除随机池",
"potion_effect.duration": "持续时间",
"potion_effect.type": "效果种类",
"potion_effect_add": "添加药水效果",
"potion_effect_remove": "移除药水效果",
"range.binomial": "二项分布",
"range.exact": "精确值",
"range.max": "最大值",
"range.min": "最小值",
"range.n": "n",
"range.p": "p",
"range.range": "范围",
"range.uniform": "均匀分布",
"remove": "移除",
"requirements": "应当达成",
"rewards": "奖励",
"rewards.experience": "经验",
"rewards.function": "函数",
"rewards.loot": "战利品表",
"rewards.recipes": "配方",
"share": "分享",
"show_source": "显示源代码",
"slot.chest": "胸部",
"slot.feet": "脚部",
"slot.head": "头部",
"slot.legs": "腿部",
"slot.mainhand": "主手",
"slot.offhand": "副手",
"source.block_entity": "方块实体",
"source.killer": "击杀者",
"source.killer_player": "击杀者玩家",
"source.this": "自身",
"statistic.stat": "统计",
"statistic.type": "类型",
"statistic.type.broken": "用坏",
"statistic.type.crafted": "合成",
"statistic.type.custom": "Custom(其他)",
"statistic.type.dropped": "掉落",
"statistic.type.killed": "击杀",
"statistic.type.killedByTeam": "被队伍击杀",
"statistic.type.killed_by": "被击杀",
"statistic.type.mined": "挖掘",
"statistic.type.picked_up": "捡起",
"statistic.type.teamkill": "击杀队伍",
"statistic.type.used": "使用",
"statistic.value": "值",
"statistic_add": "添加统计",
"statistic_remove": "移除统计",
"status_effect.ambient": "是否为信标施加",
"status_effect.amplifier": "等级",
"status_effect.duration": "持续时间",
"status_effect.visible": "是否可见",
"stored_enchantment_add": "添加储存的附魔",
"table.type": "战利品表类型",
"table.type.block": "方块",
"table.type.chest": "箱子",
"table.type.empty": "空",
"table.type.entity": "实体",
"table.type.fishing": "钓鱼",
"table.type.generic": "通用",
"tabs": "Tab 缩进",
"term_add": "添加子条件",
"term_remove": "移除子条件",
"theme": "主题",
"theme.dark": "暗色",
"theme.light": "亮色",
"title": "Minecraft: Java Edition 生成器",
"title.advancement": "进度生成器",
"title.loot-table": "战利品表生成器",
"title.predicate": "断言生成器",
"trigger.bee_nest_destroyed": "摧毁蜂巢",
"trigger.bred_animals": "繁殖动物",
"trigger.brewed_potion": "酿造药水",
"trigger.changed_dimension": "改变维度",
"trigger.channeled_lightning": "引雷魔咒击杀实体",
"trigger.construct_beacon": "构建信标结构",
"trigger.consume_item": "消耗物品",
"trigger.cured_zombie_villager": "治愈僵尸村民",
"trigger.effects_changed": "状态效果改变",
"trigger.enchanted_item": "附魔物品",
"trigger.enter_block": "进入方块",
"trigger.entity_hurt_player": "实体伤害玩家",
"trigger.entity_killed_player": "实体击杀玩家",
"trigger.filled_bucket": "填充桶",
"trigger.fishing_rod_hooked": "钓鱼杆勾住东西",
"trigger.hero_of_the_village": "村庄英雄",
"trigger.impossible": "不可达成",
"trigger.inventory_changed": "物品栏改变",
"trigger.item_durability_changed": "物品耐久度改变",
"trigger.killed_by_crossbow": "使用弩箭击杀",
"trigger.levitation": "漂浮",
"trigger.location": "位置",
"trigger.nether_travel": "下界旅行",
"trigger.placed_block": "放置方块",
"trigger.player_hurt_entity": "玩家伤害实体",
"trigger.player_killed_entity": "玩家击杀实体",
"trigger.recipe_unlocked": "配方解锁",
"trigger.safely_harvest_honey": "安全地采集蜂蜜",
"trigger.shot_crossbow": "使用弩",
"trigger.slept_in_bed": "睡觉",
"trigger.slide_down_block": "从蜂蜜块滑下",
"trigger.summoned_entity": "召唤实体",
"trigger.tame_animal": "驯服动物",
"trigger.tick": "刻",
"trigger.used_ender_eye": "使用末影之眼",
"trigger.used_totem": "使用不死图腾",
"trigger.villager_trade": "村民交易",
"trigger.voluntary_exile": "引发袭击",
"true": "是",
"unset": "未指定"
}
-62
View File
@@ -1,62 +0,0 @@
<!doctype html>
<html>
<head>
<!-- Google Analytics -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-73024255-2', 'auto');
ga('set', 'dimension1', localStorage.getItem('theme') ?? 'default');
ga('set', 'dimension2', 'v1');
ga('send', 'pageview');
</script>
<!-- End Google Analytics -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
<link rel="stylesheet" href="../css/custom.css">
<title data-i18n="title.loot-table">Loot Table Generator Minecraft 1.15</title>
</head>
<body>
<nav class="navbar navbar-expand-md navbar-dark bg-dark">
<a id="descriptionSpan" class="navbar-brand mb-0 h1" href="../" data-i18n="description.loot-table"></a>
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#collapsibleNavbar">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="collapsibleNavbar">
<ul class="navbar-nav mr-md-auto mb-2 mb-md-0">
<li class="nav-item dropdown">
<a id="versionLabel" class="nav-link dropdown-toggle mr-2" href="" role="button" data-toggle="dropdown"></a>
<div id="versionList" class="dropdown-menu"></div>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle mr-2" href="" role="button" data-toggle="dropdown">
🌎 Language
</a>
<div id="lngList" class="dropdown-menu"></div>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="" role="button" data-toggle="dropdown" data-i18n="theme"></a>
<div id="themeList" class="dropdown-menu"></div>
</li>
</ul>
<span class="ml-0 ml-md-2"><a href="https://github.com/misode/misode.github.io" style="color: #ddd;" data-i18n="credit"></a></span>
</div>
</nav>
<div class="container" data-generator="loot-table"></div>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/i18next/17.0.6/i18next.min.js" integrity="sha384-DYhccENVzcHrB30my+vk/NvcnUix2+CCUl8Qg7XEzTE1cFLf2IoN5B6c5C38vABH" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/i18next-browser-languagedetector/3.0.1/i18nextBrowserLanguageDetector.min.js" integrity="sha384-14ws1HmRivxp+u6W816e62Gs33Y19jhG4zSJb6pL0pB+gYc+CgFXXp4ZnGXcaOww" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/i18next-xhr-backend/3.0.0/i18nextXHRBackend.min.js" integrity="sha384-dK+VwLEvPDbpKM7G7D/LtbW6W2zlt99nuVTwoYIkMulAedST9Vj9OCRkv2xV8GjD" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-i18next/1.2.1/jquery-i18next.min.js" integrity="sha384-fLTSt6zHOb152KeFkj7kSiXdkyjKf6fjk5bdzWYLDPDo9evwd9PVs3TKoYYaaxdl" crossorigin="anonymous"></script>
<script src="../js/i18n.js" charset="utf-8"></script>
<script src="../js/model.js" charset="utf-8"></script>
<script src="../js/view.js" charset="utf-8"></script>
</body>
</html>
+8667
View File
File diff suppressed because it is too large Load Diff
+69
View File
@@ -0,0 +1,69 @@
{
"name": "generators",
"version": "1.0.0",
"private": true,
"description": "",
"type": "module",
"main": "index.js",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview",
"lint": "eslint . --ext .ts,.tsx"
},
"keywords": [],
"author": "Misode",
"license": "MIT",
"dependencies": {
"@giscus/react": "^2.2.3",
"@spyglassmc/core": "^0.4.43",
"@spyglassmc/java-edition": "^0.3.55",
"@spyglassmc/json": "^0.3.47",
"@spyglassmc/locales": "^0.3.22",
"@spyglassmc/mcdoc": "^0.3.47",
"@spyglassmc/nbt": "^0.3.49",
"@zip.js/zip.js": "^2.4.5",
"brace": "^0.11.1",
"buffer": "^6.0.3",
"deepslate": "^0.25.1",
"deepslate-1.18": "npm:deepslate@0.9.0-beta.9",
"deepslate-1.18.2": "npm:deepslate@0.9.0",
"deepslate-1.20.4": "npm:deepslate@0.20.1",
"diff": "^7.0.0",
"dompurify": "^3.2.6",
"highlight.js": "^11.5.1",
"howler": "^2.2.3",
"js-yaml": "^3.14.1",
"lz-string": "^1.4.4",
"marked": "^4.0.10",
"rfdc": "^1.3.0",
"sourcemapped-stacktrace": "^1.1.11",
"spark-md5": "^3.0.2",
"vscode-languageserver-textdocument": "^1.0.12"
},
"devDependencies": {
"@preact/preset-vite": "^2.10.0",
"@rollup/plugin-html": "^1.0.1",
"@types/diff": "^5.2.2",
"@types/google.analytics": "0.0.40",
"@types/gtag.js": "^0.0.10",
"@types/howler": "^2.2.4",
"@types/js-yaml": "^4.0.4",
"@types/lz-string": "^1.3.34",
"@types/marked": "^4.0.1",
"@types/seedrandom": "^2.4.28",
"@types/spark-md5": "^3.0.5",
"@typescript-eslint/eslint-plugin": "^5.28.0",
"@typescript-eslint/parser": "^5.28.0",
"autoprefixer": "^10.4.16",
"eslint": "^8.17.0",
"postcss": "^8.4.31",
"preact": "^10.8.0",
"preact-router": "^3.2.1",
"rollup-plugin-visualizer": "^5.6.0",
"tailwindcss": "^3.3.3",
"typescript": "^4.7.3",
"vite": "^6.0.11",
"vite-plugin-static-copy": "^2.2.0"
}
}
+6
View File
@@ -0,0 +1,6 @@
export default {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}
-62
View File
@@ -1,62 +0,0 @@
<!doctype html>
<html>
<head>
<!-- Google Analytics -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-73024255-2', 'auto');
ga('set', 'dimension1', localStorage.getItem('theme') ?? 'default');
ga('set', 'dimension2', 'v1');
ga('send', 'pageview');
</script>
<!-- End Google Analytics -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
<link rel="stylesheet" href="../css/custom.css">
<title data-i18n="title.predicate">Predicate Generator Minecraft 1.15</title>
</head>
<body>
<nav class="navbar navbar-expand-md navbar-dark bg-dark">
<a id="descriptionSpan" class="navbar-brand mb-0 h1" href="../" data-i18n="description.predicate"></a>
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#collapsibleNavbar">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="collapsibleNavbar">
<ul class="navbar-nav mr-md-auto mb-2 mb-md-0">
<li class="nav-item dropdown">
<a id="versionLabel" class="nav-link dropdown-toggle mr-2" href="" role="button" data-toggle="dropdown"></a>
<div id="versionList" class="dropdown-menu"></div>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle mr-2" href="" role="button" data-toggle="dropdown">
🌎 Language
</a>
<div id="lngList" class="dropdown-menu"></div>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="" role="button" data-toggle="dropdown" data-i18n="theme"></a>
<div id="themeList" class="dropdown-menu"></div>
</li>
</ul>
<span class="ml-0 ml-md-2"><a href="https://github.com/misode/misode.github.io" style="color: #ddd;" data-i18n="credit"></a></span>
</div>
</nav>
<div class="container" data-generator="predicate"></div>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/i18next/17.0.6/i18next.min.js" integrity="sha384-DYhccENVzcHrB30my+vk/NvcnUix2+CCUl8Qg7XEzTE1cFLf2IoN5B6c5C38vABH" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/i18next-browser-languagedetector/3.0.1/i18nextBrowserLanguageDetector.min.js" integrity="sha384-14ws1HmRivxp+u6W816e62Gs33Y19jhG4zSJb6pL0pB+gYc+CgFXXp4ZnGXcaOww" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/i18next-xhr-backend/3.0.0/i18nextXHRBackend.min.js" integrity="sha384-dK+VwLEvPDbpKM7G7D/LtbW6W2zlt99nuVTwoYIkMulAedST9Vj9OCRkv2xV8GjD" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-i18next/1.2.1/jquery-i18next.min.js" integrity="sha384-fLTSt6zHOb152KeFkj7kSiXdkyjKf6fjk5bdzWYLDPDo9evwd9PVs3TKoYYaaxdl" crossorigin="anonymous"></script>
<script src="../js/i18n.js" charset="utf-8"></script>
<script src="../js/model.js" charset="utf-8"></script>
<script src="../js/view.js" charset="utf-8"></script>
</body>
</html>
View File
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 417 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 461 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 508 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 586 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 561 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 B

+19
View File
@@ -0,0 +1,19 @@
dispatch minecraft:resource[ad_astra:planets] to struct AdAstraPlanet {
/// The dimension id for this planet to use
dimension: #[id="dimension"] string,
/// Due to floating point precision, the actual gravity may be slightly off in-game
gravity: float @ 0..,
/// The orbit dimension id. If left blank, this planet is treated as an orbit dimension
orbit?: #[id="dimension"] string,
oxygen: boolean,
solar_power: int @ 1..,
/// Controls where the planet will be on the selector screen
solar_system: #[id="dimension"] string,
/// Below -50 will freeze, above 70 will burn
temperature: int,
/// The minimum rocket tier required to reach this planet
tier: int @ 1..,
/// Additional dimensions that the player can launch from
additional_launch_dimensions: [#[id="dimension"] string]
}
+252
View File
@@ -0,0 +1,252 @@
use ::java::world::component::DataComponentPatch
dispatch minecraft:resource[create:recipes] to struct Recipes {
type: Type,
...create:recipes[[type]],
}
enum(string) Type {
Compacting = "create:compacting",
Crushing = "create:crushing",
Cutting = "create:cutting",
Deploying = "create:deploying",
Emptying = "create:emptying",
Filling = "create:filling",
Haunting = "create:haunting",
ItemApplication = "create:item_application",
MechanicalCrafting = "create:mechanical_crafting",
Milling = "create:milling",
Mixing = "create:mixing",
Pressing = "create:pressing",
SandpaperPolishing = "create:sandpaper_polishing",
SequencedAssembly = "create:sequenced_assembly",
Splashing = "create:splashing",
}
struct NBT {
Bottle?: ("REGULAR" | "SPLASH" | "LINGERING"),
Potion?: string,
}
type Item = struct {
#[until="1.21.1"]
item: string,
#[since="1.21.1"]
id: string,
chance?: float @ 0..,
count?: int @ 1..,
#[since="1.21.1"]
components?: DataComponentPatch,
}
type ItemWithCount = struct {
#[until="1.21.1"]
item: string,
#[since="1.21.1"]
id: string,
count?: int @ 0..,
#[since="1.21.1"]
components?: DataComponentPatch,
}
type SimpleItem = struct {
#[until="1.21.1"]
item: string,
#[since="1.21.1"]
id: string,
#[since="1.21.1"]
components?: DataComponentPatch,
}
type Fluid = struct {
#[until="1.21.1"]
fluid: string,
#[until="1.21.1"]
nbt?: NBT,
#[since="1.21.1"]
id: string,
amount: int @ 1..,
#[since="1.21.1"]
components?: DataComponentPatch,
}
type ItemOrTag = (
struct {
item: string,
} | struct {
tag: string,
}
)
type ItemOrTagWithCount = (
struct {
item: string,
count?: int @ 1..,
} | struct {
tag: string,
count?: int @ 1..,
}
)
type FluidOrTag = (
struct {
fluid: string,
#[since="1.21.1"]
type: "fluid_stack",
amount: int @ 1..,
#[until="1.21.1"]
nbt?: NBT,
#[since="1.21.1"]
components?: DataComponentPatch,
} | struct {
#[until="1.21.1"]
fluidTag: string,
#[since="1.21.1"]
fluid_tag: string,
#[since="1.21.1"]
type: "fluid_tag",
amount: int @ 1..,
#[until="1.21.1"]
nbt?: NBT,
#[since="1.21.1"]
components?: DataComponentPatch,
}
)
type MixingResult = struct {
id: string,
/// Used for items; optional field.
count?: int @ 1..,
/// Used for fluids; mandatory field.
amount?: int @ 1..,
components?: DataComponentPatch,
}
dispatch create:recipes[create:compacting] to struct {
ingredients: [(ItemOrTagWithCount | FluidOrTag)] @ 1..,
results: (
#[until="1.21.1"]
[(ItemWithCount | Fluid)] @ 1.. |
#[since="1.21.1"]
[MixingResult] @ 1 |
),
}
dispatch create:recipes[create:crushing] to struct {
#[until="1.21.1"]
processingTime: int @ 1..,
#[since="1.21.1"]
processing_time: int @ 1..,
ingredients: [ItemOrTag] @ 1,
results: [Item] @ 1..,
}
dispatch create:recipes[create:cutting] to struct {
#[until="1.21.1"]
processingTime: int @ 1..,
#[since="1.21.1"]
processing_time: int @ 1..,
ingredients: [ItemOrTag] @ 1,
results: [Item] @ 1,
}
dispatch create:recipes[create:deploying] to struct {
/// The first item is the base item; the second is the ingredient to be deployed.
ingredients: [ItemOrTag] @ 2,
/// Defaults to false.
#[until="1.21.1"]
keepHeldItem?: boolean,
/// Defaults to false.
#[since="1.21.1"]
keep_held_item?: boolean,
results: [SimpleItem] @ 1,
}
dispatch create:recipes[create:emptying] to struct {
ingredients: [ItemOrTag] @ 1,
results: [SimpleItem, Fluid],
}
dispatch create:recipes[create:filling] to struct {
ingredients: [ItemOrTag, FluidOrTag],
results: [SimpleItem] @ 1,
}
dispatch create:recipes[create:haunting] to struct {
ingredients: [ItemOrTag] @ 1,
results: [Item] @ 1..,
}
dispatch create:recipes[create:item_application] to struct {
/// The first item is the base item; the second is the ingredient to be applied.
ingredients: [ItemOrTag] @ 2,
results: [SimpleItem] @ 1,
}
dispatch create:recipes[create:mechanical_crafting] to struct {
#[until="1.21.1"]
acceptMirrored: boolean,
#[since="1.21.1"]
accept_mirrored: boolean,
/// Identifier for the category this goes in the recipe book.
#[since="1.21.1"]
category: string,
/// **Warning:** Recipes larger than 9x9 will not be displayed in JEI.
pattern: [#[crafting_ingredient(definition=true)] string],
key: struct {
[#[crafting_ingredient] string]: ItemOrTag,
},
result: ItemWithCount,
/// Determines if a notification is shown when unlocking this recipe. Defaults to true.
#[since="1.21.1"]
show_notification?: boolean,
}
dispatch create:recipes[create:milling] to struct {
#[until="1.21.1"]
processingTime: int @ 1..,
#[since="1.21.1"]
processing_time: int @ 1..,
ingredients: [ItemOrTag] @ 1,
results: [Item] @ 1..,
}
dispatch create:recipes[create:mixing] to struct {
#[until="1.21.1"]
heatRequirement?: ("heated" | "superheated"),
#[since="1.21.1"]
heat_requirement?: ("heated" | "superheated"),
ingredients: [(ItemOrTagWithCount | FluidOrTag)] @ 1..,
results: (
#[until="1.21.1"]
[(ItemWithCount | Fluid)] @ 1.. |
#[since="1.21.1"]
[MixingResult] @ 1 |
),
}
dispatch create:recipes[create:pressing] to struct {
ingredients: [ItemOrTag] @ 1..,
results: [ItemWithCount] @ 1,
}
dispatch create:recipes[create:sandpaper_polishing] to struct {
ingredients: [ItemOrTag] @ 1,
results: [ItemWithCount] @ 1,
}
dispatch create:recipes[create:sequenced_assembly] to struct {
ingredient: ItemOrTag,
loops: int @ 1..,
results: [Item] @ 1..,
sequence: [Recipes],
#[until="1.21.1"]
transitionalItem: SimpleItem,
#[since="1.21.1"]
transitional_item: SimpleItem,
}
dispatch create:recipes[create:splashing] to struct {
ingredients: [ItemOrTag] @ 1,
results: [Item] @ 1..,
}
+168
View File
@@ -0,0 +1,168 @@
// Sources:
// - https://wiki.fabricmc.net/documentation:fabric_mod_json
// - https://wiki.fabricmc.net/documentation:fabric_mod_json_spec
// - https://github.com/FabricMC/fabric-loader/blob/master/src/main/java/net/fabricmc/loader/impl/metadata/V1ModMetadataParser.java
dispatch minecraft:resource[fabric:fabric_mod_json] to struct FabricModJson {
/// Needed for internal mechanisms. Must always be `1`.
schemaVersion: 1,
/// The mod's identifier of Latin letters, digits, or underscores.
id: string,
/// The mod's version. Optionally matching the [Semantic Versioning 2.0.0](https://semver.org/) specification.
version: string @ 1..,
/// User-friendly mod's name. Defaults to `id`.
name?: string,
/// The mod's description. Defaults to an empty string.
description?: string,
/// Authors of the mod.
authors?: People,
/// Contributors to the mod.
contributors?: People,
/// Contact information for the project
contact?: ContactInfo,
/// Licensing information.
/// Should provide the complete set of preferred licenses conveying the entire mod package. In other words, compliance with all listed licenses should be sufficient for usage, redistribution, etc. of the mod package as a whole.
/// For cases where a part of code is dual-licensed, choose the preferred license. The list is not exhaustive, serves primarily as a kind of hint, and does not prevent you from granting additional rights/licenses on a case-by-case basis.
/// To aid automated tools, it is recommended to use [SPDX License Identifiers](https://spdx.org/licenses/) for open-source licenses.
license?: License,
/// The mod's icon file. Should be a square PNG image.
/// Resource packs use 128×128, but that is not a hard requirement. A power of two is recommended.
/// Can also be provided as a dictionary of images widths to their file paths.
icon?: Icon,
/// Defines the list of ids of the mod. It can be seen as the aliases of the mod.
/// Fabric Loader will treat these ids as mods that exist.
/// If there are other mods using that id, they will not be loaded.
provides?: [string],
/// Defines where the mod runs: only on the client side (client mod), only on the dedicated server side (plugin) or on both sides (regular mod).
environment?: EnvironmentType,
/// Main classes of the mod that will be loaded.
entrypoints?: Entrypoints,
/// Nested JARs inside your mod's JAR to load.
jars?: [Jar],
/// Adapters for used languages to their adapter classes full names.
languageAdapters?: LanguageAdapters,
/// List of mixin configuration files. Each entry is the path to the mixin configuration file inside your mod's JAR.
mixins?: Mixins,
/// Access widener configuration file.
accessWidener?: string,
/// Dependencies required to run. Without them a game will crash.
depends?: Dependencies,
/// Dependencies not required to run. Without them a game will log a warning.
recommends?: Dependencies,
/// Dependencies not required to run. Use this as a kind of metadata.
suggests?: Dependencies,
/// Mods whose together with yours might cause a game crash. With them a game will crash.
breaks?: Dependencies,
/// Mods whose together with yours cause some kind of bugs, etc. With them a game will log a warning.
conflicts?: Dependencies,
/// Custom fields. It is recommended to namespace fields to avoid conflicts.
custom?: CustomValues,
}
enum(string) EnvironmentType {
Universal = "*",
Client = "client",
Server = "server",
}
struct Entrypoints {
[string]: [(string | Entrypoint)],
}
struct Entrypoint {
value: string,
/// Defaults to `default`.
adapter?: string,
}
struct Jar {
/// Path inside your mod's JAR to the nested JAR.
file: string,
}
type Mixins = [(string | Mixin)]
struct Mixin {
/// The path to the mixin configuration file inside your mod's JAR.
config: string,
/// Defaults to universal (`*`).
environment?: EnvironmentType,
}
struct Dependencies {
[string]: (string | [string]),
}
type People = [(string | Person)]
struct Person {
/// The real name, or username of the person.
name: string,
/// The person's contact information.
contact?: ContactInfo,
}
struct ContactInfo {
/// Contact e-mail address.
email?: #[email] string,
/// IRC channel.
irc?: string,
/// Link to the project or user homepage.
homepage?: #[url] string,
/// Link to the project's issue tracker.
issues?: #[url] string,
/// Link to the project's source code repository
sources?: string,
[string]: string,
}
type License = (string | [string])
type Icon = (string | IconMap)
struct IconMap {
[#[integer(min=1)] string]: string,
}
struct LanguageAdapters {
[string]: string,
}
struct CustomValues {
[string]: any,
}
// Sources:
// - https://wiki.fabricmc.net/tutorial:dependency_overrides
// - https://github.com/FabricMC/fabric-loader/blob/master/src/main/java/net/fabricmc/loader/impl/metadata/DependencyOverrides.java
dispatch minecraft:resource[fabric:dependency_overrides] to struct DependencyOverrides {
/// Needed for internal mechanisms. Must always be `1`.
version: 1,
overrides: Overrides,
}
struct Overrides {
[string]: Override,
}
struct Override {
[DependencyType]: Dependencies,
}
enum(string) DependencyType {
ReplaceDepends = "depends",
ReplaceRecommends = "recommends",
ReplaceSuggests = "suggests",
ReplaceConflicts = "conflicts",
ReplaceBreaks = "breaks",
AddDepends = "+depends",
AddRecommends = "+recommends",
AddSuggests = "+suggests",
AddConflicts = "+conflicts",
AddBreaks = "+breaks",
RemoveDepends = "-depends",
RemoveRecommends = "-recommends",
RemoveSuggests = "-suggests",
RemoveConflicts = "-conflicts",
RemoveBreaks = "-breaks",
}
+116
View File
@@ -0,0 +1,116 @@
use ::java::util::direction::Direction
use ::java::util::block_state::BlockState
use ::java::data::worldgen::biome::Precipitation
use ::java::data::worldgen::processor_list::BlockMatch
use ::java::data::worldgen::processor_list::BlockStateMatch
use ::java::data::worldgen::processor_list::RandomBlockMatch
use ::java::data::worldgen::processor_list::RandomBlockStateMatch
use ::java::data::worldgen::processor_list::TagMatch
dispatch minecraft:resource[immersive_weathering:block_growth] to struct BlockGrowth {
area_condition: AreaCondition,
position_predicates?: [PositionTest],
growth_chance: float @ 0..1,
growth_for_face: [GrowthFace],
owners: [#[id="block"] string],
replacing_target: RuleTest,
target_self?: boolean,
destroy_target?: boolean,
}
struct GrowthFace {
direction?: Direction,
weight?: int,
growth: [struct {
weight: int,
data: BlockPair,
}],
}
struct BlockPair {
block: BlockState,
above_block?: BlockState,
}
struct AreaCondition {
type: ("generate_if_not_too_many" | "neighbor_based_generation"),
...immersive_weathering:area_condition[[type]],
}
dispatch immersive_weathering:area_condition[generate_if_not_too_many] to struct GenerateIfNotTooMany {
radiusX: int,
radiusY: int,
radiusZ: int,
requiredAmount: int,
yOffset?: int,
must_have?: RuleTest,
must_not_have?: RuleTest,
includes?: (#[id(registry="block",tags="allowed")] string | [#[id="block"] string]),
}
dispatch immersive_weathering:area_condition[neighbor_based_generation] to struct NeighborBasedGeneration {
must_have: RuleTest,
must_not_have?: RuleTest,
required_amount?: int,
directions: [Direction],
}
struct PositionTest {
type: ("biome_match" | "day_test" | "nand" | "precipitation_test" | "temperature_range"),
...immersive_weathering:position_test[[type]],
}
dispatch immersive_weathering:position_test[biome_match] to struct BiomeMatch {
biomes: (#[id(registry="worldgen/biome",tags="allowed")] string | [#[id="worldgen/biome"] string]),
}
dispatch immersive_weathering:position_test[day_test] to struct DayTest {
day: boolean,
}
dispatch immersive_weathering:position_test[nand] to struct Nand {
predicates: [PositionTest],
}
dispatch immersive_weathering:position_test[precipitation_test] to struct PrecipitationTest {
precipitation: Precipitation,
}
dispatch immersive_weathering:position_test[temperature_range] to struct TemperatureRange {
min: float,
max: float,
use_local_pos?: boolean,
}
struct RuleTest {
predicate_type: #[id] RuleTestType,
...immersive_weathering:rule_test[[predicate_type]],
}
enum(string) RuleTestType {
#[starred] BlockSetMatch = "immersive_weathering:block_set_match",
#[starred] FluidMatch = "immersive_weathering:fluid_match",
#[starred] TreeLog = "immersive_weathering:tree_log",
BlockMatch = "block_match",
BlockStateMatch = "blockstate_match",
RandomBlockMatch = "random_block_match",
RandomBlockStateMatch = "random_blockstate_match",
TagMatch = "tag_match",
}
dispatch immersive_weathering:rule_test[block_match] to BlockMatch
dispatch immersive_weathering:rule_test[blockstate_match] to BlockStateMatch
dispatch immersive_weathering:rule_test[random_block_match] to RandomBlockMatch
dispatch immersive_weathering:rule_test[random_blockstate_match] to RandomBlockStateMatch
dispatch immersive_weathering:rule_test[tag_match] to TagMatch
dispatch immersive_weathering:rule_test[immersive_weathering:block_set_match] to struct BlockSetMatch {
blocks: (#[id(registry="block",tags="allowed")] string | [#[id="block"] string]),
probability?: float @ 0..1,
}
dispatch immersive_weathering:rule_test[immersive_weathering:fluid_match] to struct FluidMatch {
fluids: #[id="fluid"] string,
}
dispatch immersive_weathering:rule_test[immersive_weathering:tree_log] to struct {}
+113
View File
@@ -0,0 +1,113 @@
use ::java::data::loot::LootPool
use ::java::data::loot::LootPoolEntry
use ::java::data::loot::LootContextType
use ::java::data::loot::LootCondition
dispatch minecraft:resource[loot-table-modifier:loot_modifier] to struct {
actions: [Action],
predicate: Predicate,
}
struct Action {
type: #[id] ActionType,
...loot-table-modifier:loot_modifier_action_types[[type]],
}
struct Predicate {
type: #[id] PredicateType,
...loot-table-modifier:loot_modifier_predicate_types[[type]],
}
enum(string) ActionType {
PoolAdd = "loot-table-modifier:pool_add",
PoolRemove = "loot-table-modifier:pool_remove",
EntryAdd = "loot-table-modifier:entry_add",
EntryRemove = "loot-table-modifier:entry_remove",
EntryItemSet = "loot-table-modifier:entry_item_set",
ConditionAdd = "loot-table-modifier:condition_add"
}
enum(string) PredicateType {
Inverted = "loot-table-modifier:inverted",
AnyOf = "loot-table-modifier:any_of",
AllOf = "loot-table-modifier:all_of",
EntryItem = "loot-table-modifier:entry_item",
Table = "loot-table-modifier:table",
}
/// Utils
struct Pattern {
regexPattern: #[regex_pattern] string,
}
type LiteralOrPattern<T> = (
#[misode_member_name="Literal"] T |
#[misode_member_name="Regex pattern"] Pattern |
)
/// Actions
dispatch loot-table-modifier:loot_modifier_action_types[loot-table-modifier:pool_add] to struct {
pools: [LootPool],
}
dispatch loot-table-modifier:loot_modifier_action_types[loot-table-modifier:pool_remove] to struct {
}
dispatch loot-table-modifier:loot_modifier_action_types[loot-table-modifier:entry_add] to struct {
entries: [LootPoolEntry],
}
dispatch loot-table-modifier:loot_modifier_action_types[loot-table-modifier:entry_remove] to struct {
}
dispatch loot-table-modifier:loot_modifier_action_types[loot-table-modifier:entry_item_set] to struct {
name: #[id="item"] string,
canReplaceEntry?: boolean,
}
dispatch loot-table-modifier:loot_modifier_action_types[loot-table-modifier:condition_add] to struct {
conditions: [LootCondition],
includePools?: boolean,
includeEntries?: boolean,
}
/// Predicates
/// # op
dispatch loot-table-modifier:loot_modifier_predicate_types[loot-table-modifier:inverted] to struct {
term: Predicate,
}
dispatch loot-table-modifier:loot_modifier_predicate_types[loot-table-modifier:any_of] to struct {
terms: [Predicate],
}
dispatch loot-table-modifier:loot_modifier_predicate_types[loot-table-modifier:all_of] to struct {
terms: [Predicate],
}
/// # entry
dispatch loot-table-modifier:loot_modifier_predicate_types[loot-table-modifier:entry_item] to struct {
name: LiteralOrPattern<#[id="item"] string>,
}
/// # table
dispatch loot-table-modifier:loot_modifier_predicate_types[loot-table-modifier:table] to struct {
identifiers?: [LiteralOrPattern<#[id="loot_table"] string>],
types?: [LiteralOrPattern<LootContextType>],
}
+202
View File
@@ -0,0 +1,202 @@
use ::java::data::worldgen::DecorationStep
use ::java::data::worldgen::CarveStep
use ::java::data::worldgen::biome::SpawnerData
use ::java::data::worldgen::biome::MobSpawnCost
use ::java::data::worldgen::biome::MobCategory
dispatch minecraft:resource[neoforge:biome_modifier] to struct BiomeModifier {
type: #[id] BiomeModifierType,
...neoforge:biome_modifier[[type]],
}
enum(string) BiomeModifierType {
None = "neoforge:none",
AddFeatures = "neoforge:add_features",
RemoveFeatures = "neoforge:remove_features",
AddSpawns = "neoforge:add_spawns",
RemoveSpawns = "neoforge:remove_spawns",
AddCarvers = "neoforge:add_carvers",
RemoveCarvers = "neoforge:remove_carvers",
AddSpawnCosts = "neoforge:add_spawn_costs",
RemoveSpawnCosts = "neoforge:remove_spawn_costs",
}
dispatch neoforge:biome_modifier[neoforge:none] to struct {}
struct BiomeModifierBase {
biomes: (#[id(registry="worldgen/biome",tags="allowed")] string | [#[id="worldgen/biome"] string]),
}
dispatch neoforge:biome_modifier[neoforge:add_features] to struct AddFeatures {
...BiomeModifierBase,
features: (#[id(registry="worldgen/placed_feature",tags="allowed")] string | [#[id="worldgen/placed_feature"] string]),
step: DecorationStep,
}
dispatch neoforge:biome_modifier[neoforge:remove_features] to struct RemoveFeatures {
...BiomeModifierBase,
features: (#[id(registry="worldgen/placed_feature",tags="allowed")] string | [#[id="worldgen/placed_feature"] string]),
steps: (DecorationStep | [DecorationStep]),
}
dispatch neoforge:biome_modifier[neoforge:add_spawns] to struct AddSpawns {
...BiomeModifierBase,
spawners: (SpawnerData | [SpawnerData]),
}
dispatch neoforge:biome_modifier[neoforge:remove_spawns] to struct RemoveSpawns {
...BiomeModifierBase,
entity_types: (#[id(registry="entity_type",tags="allowed")] string | [#[id="entity_type"] string]),
}
dispatch neoforge:biome_modifier[neoforge:add_carvers] to struct AddCarvers {
...BiomeModifierBase,
carvers: (#[id(registry="worldgen/configured_carver",tags="allowed")] string | [#[id="worldgen/configured_carver"] string]),
#[until="1.21.2"]
step: CarveStep,
}
dispatch neoforge:biome_modifier[neoforge:remove_carvers] to struct RemoveCarvers {
...BiomeModifierBase,
carvers: (#[id(registry="worldgen/configured_carver",tags="allowed")] string | [#[id="worldgen/configured_carver"] string]),
#[until="1.21.2"]
step: (CarveStep | [CarveStep]),
}
dispatch neoforge:biome_modifier[neoforge:add_spawn_costs] to struct AddSpawnCosts {
...BiomeModifierBase,
entity_types: (#[id(registry="entity_type",tags="allowed")] string | [#[id="entity_type"] string]),
spawn_cost: MobSpawnCost,
}
dispatch neoforge:biome_modifier[neoforge:remove_spawn_costs] to struct RemoveSpawnCosts {
...BiomeModifierBase,
entity_types: (#[id(registry="entity_type",tags="allowed")] string | [#[id="entity_type"] string]),
}
dispatch minecraft:resource[neoforge:structure_modifier] to struct StructureModifier {
type: #[id] StructureModifierType,
...neoforge:structure_modifier[[type]],
}
enum(string) StructureModifierType {
None = "neoforge:none",
AddSpawns = "neoforge:add_spawns",
RemoveSpawns = "neoforge:remove_spawns",
ClearSpawns = "neoforge:clear_spawns",
}
dispatch neoforge:structure_modifier[neoforge:none] to struct {}
struct StructureModifierBase {
structures: (#[id(registry="worldgen/structure",tags="allowed")] string | [#[id="worldgen/structure"] string]),
}
dispatch neoforge:structure_modifier[neoforge:add_spawns] to struct AddStructureSpawns {
...StructureModifierBase,
spawners: (SpawnerData | [SpawnerData]),
}
dispatch neoforge:structure_modifier[neoforge:remove_spawns] to struct RemoveStructureSpawns {
...StructureModifierBase,
entity_types: (#[id(registry="entity_type",tags="allowed")] string | [#[id="entity_type"] string]),
}
dispatch neoforge:structure_modifier[neoforge:clear_spawns] to struct ClearStructureSpawns {
...StructureModifierBase,
categories: (MobCategory | [MobCategory]),
}
type DataMap<K, V> = struct {
replace?: boolean,
values: struct DataMapValues {
[K]: (
V |
struct ReplaceableValue {
replace?: boolean,
value: V,
} |
)
},
remove?: [K],
}
dispatch minecraft:resource[neoforge:data_map_acceptable_villager_distances] to DataMap<#[id(registry="entity_type", tags="allowed")] string, (
float |
struct AcceptableVillagerDistance {
acceptable_villager_distance: float,
} |
)>
dispatch minecraft:resource[neoforge:data_map_compostables] to DataMap<#[id(registry="item",tags="allowed")] string, (
float @ 0..1 |
struct Compostable {
chance: float @ 0..1,
can_villager_compost?: boolean,
} |
)>
dispatch minecraft:resource[neoforge:data_map_furnace_fuels] to DataMap<#[id(registry="item", tags="allowed")] string, (
int @ 1.. |
struct FurnaceFuel {
burn_time: int @ 1..,
} |
)>
dispatch minecraft:resource[neoforge:data_map_monster_room_mobs] to DataMap<#[id(registry="entity_type",tags="allowed")] string, (
int @ 0.. |
struct MonsterRoomMob {
weight: int @ 0..,
} |
)>
dispatch minecraft:resource[neoforge:data_map_oxidizables] to DataMap<#[id(registry="block",tags="allowed")] string, (
#[id="block"] string |
struct Oxidizable {
next_oxidation_stage: #[id="block"] string,
} |
)>
dispatch minecraft:resource[neoforge:data_map_parrot_imitations] to DataMap<#[id(registry="entity_type",tags="allowed")] string, (
#[id="sound_event"] string |
struct ParrotImitation {
sound: #[id="sound_event"] string,
} |
)>
dispatch minecraft:resource[neoforge:data_map_raid_hero_gifts] to DataMap<#[id(registry="villager_profession",tags="allowed")] string, (
#[id="loot_table"] string |
struct RaidHeroGift {
loot_table: #[id="loot_table"] string,
} |
)>
dispatch minecraft:resource[neoforge:data_map_strippables] to DataMap<#[id(registry="block",tags="allowed")] string, (
#[id="block"] string |
struct Strippable {
stripped_block: #[id="block"] string,
} |
)>
dispatch minecraft:resource[neoforge:data_map_vibration_frequencies] to DataMap<#[id(registry="game_event",tags="allowed")] string, (
int @ 1..15 |
struct VibrationFrequency {
frequency: int @ 1..15,
} |
)>
dispatch minecraft:resource[neoforge:data_map_villager_types] to DataMap<#[id(registry="worldgen/biome",tags="allowed")] string, (
#[id="villager_type"] string |
struct BiomeVillagerType {
villager_type: #[id="villager_type"] string,
} |
)>
dispatch minecraft:resource[neoforge:data_map_waxables] to DataMap<#[id(registry="block",tags="allowed")] string, (
#[id="block"] string |
struct Waxable {
waxed: #[id="block"] string,
} |
)>
+34
View File
@@ -0,0 +1,34 @@
use ::java::data::worldgen::feature::block_predicate::BlockPredicate
use ::java::data::worldgen::feature::block_state_provider::BlockStateProvider
use ::java::data::worldgen::feature::tree::TreeDecorator
use ::java::data::worldgen::IntProvider
dispatch minecraft:resource[ohthetreesyoullgrow:configured_feature] to struct ConfiguredFeature {
type: #[id] FeatureTypes,
config: ohthetreesyoullgrow:feature_config[[type]],
}
enum(string) FeatureTypes {
TreeFromNbt = "ohthetreesyoullgrow:tree_from_nbt_v1",
}
dispatch ohthetreesyoullgrow:feature_config[ohthetreesyoullgrow:tree_from_nbt_v1] to struct TreeFromNbt {
/// The path to the trunk structure piece.
base_location: #[id="structure"] string,
/// The path to the canopy structure piece.
canopy_location: #[id="structure"] string,
/// Block filter for which this tree is allowed to grow on. Checks all of the red wool positions defined by the trunk.
can_grow_on_filter: BlockPredicate,
/// Block filter for which this tree's leaves are allowed to place.
can_leaves_place_filter: BlockPredicate,
decorators?: [TreeDecorator],
/// Int provider defining the height of the tree.
height: IntProvider<int>,
leaves_provider: BlockStateProvider,
leaves_target: [#[id="block"] string],
log_provider: BlockStateProvider,
log_target: [#[id="block"] string],
max_log_depth?: int,
/// Additional blocks from the structure pieces that should be placed in the world.
place_from_nbt: [#[id="block"] string],
}
File diff suppressed because it is too large Load Diff
+106
View File
@@ -0,0 +1,106 @@
dispatch minecraft:resource[sky_aesthetics:sky] to struct SkyProperties {
world: #[id="dimension"] string,
id?: string,
cloud_settings: CloudSettings,
fog_settings?: FogSettings,
rain: boolean,
custom_vanilla_objects: CustomVanillaObjects,
stars: Star,
/// The R, G and B value for the color
sunrise_color?: [float] @ 3,
sunrise_alpha_modifier?: float,
sky_type: SkyType,
sky_color: struct {
custom_color: boolean,
/// The R, G, B and alpha value for the color
#[until="1.21.2"]
color: [float] @ 4,
/// The R, G and B value for the color
#[since="1.21.3"]
color: [float] @ 3 ,
},
sky_objects: [SkyObject],
constellations: [string],
condition: RenderCondition
}
struct CloudSettings {
cloud: boolean,
cloud_height: int,
/// The R, G and B value for the color
cloud_color?: struct CustomCloudColor {
base_color: [double] @ 3,
storm_color: [double] @ 3,
rain_color: [double] @ 3,
always_base_color: boolean
}
}
struct FogSettings {
fog: boolean,
/// The R, G, B and alpha value for the color
fog_color: [float] @ 4,
fog_density: [float] @ 2,
}
struct CustomVanillaObjects {
sun: boolean,
sun_texture: string,
sun_height: int,
sun_size: int,
moon: boolean,
moon_phase: boolean,
moon_texture: string,
moon_height: int,
moon_size: int,
}
struct Star {
vanilla: boolean,
moving_stars: boolean,
count: int,
all_days_visible: boolean,
scale: float,
/// The R, G and B value for the color
color: [float] @ 3,
shooting_stars? : struct shootingStars {
percentage: int,
random_lifetime: [double] @ 2,
scale: float,
speed: float,
color: [double] @ 3,
rotation?: int
}
}
struct SkyObject {
texture: string,
blend: boolean,
size: float,
height: int,
rotation: [float] @ 3,
rotation_type: RotationType
}
struct RenderCondition {
condition: boolean,
biome?: #[id="worldgen/biome"] string,
biomes?: #[id(registry="worldgen/biome",tags=allowed)] string,
}
enum(string) SkyType {
#[starred] Overworld = "OVERWORLD",
None = "NONE",
End = "END"
}
enum(string) RotationType {
Day = "DAY",
Night = "NIGHT",
Fixed = "FIXED"
}
+235
View File
@@ -0,0 +1,235 @@
use ::java::data::worldgen::biome::Precipitation
use ::java::util::attribute::AttributeOperation
use ::java::data::util::MinMaxBounds
dispatch minecraft:resource[thermoo:environment_provider] to struct EnvironmentProvider {
type: #[id] EnvironmentProviderType,
...thermoo:environment_provider_type[[type]],
}
type BiomeHolderList = (#[id(registry="worldgen/biome",tags="allowed")] string | [#[id="worldgen/biome"] string])
dispatch minecraft:resource[thermoo:environment] to struct Environment {
biomes: BiomeHolderList,
exclude_biomes?: BiomeHolderList,
provider: EnvironmentProviderOrReference,
/// Defaults to `1000`. Higher priority environments will be applied first, lower priority environments are applied last.
priority?: int
}
dispatch minecraft:resource[thermoo:temperature_effect] to struct TemperatureEffect {
type: #[id] TemperatureEffectType,
config: struct {
...thermoo:temperature_effect_type[[%parent.type]]
}
}
dispatch minecraft:resource[thermoo:predicate] to struct ThermooPredicate {
condition: #[id] ThermooLootConditionType,
...thermoo:loot_condition_type[[condition]]
}
type EnvironmentProviderOrReference = (
#[id="thermoo:environment_provider"] string |
EnvironmentProvider
)
enum(string) EnvironmentProviderType {
Constant = "thermoo:constant",
TemperateSeasonal = "thermoo:seasonal/temperate",
TropicalSeasonal = "thermoo:seasonal/tropical",
LightThreshold = "thermoo:light_threshold",
WeatherState = "thermoo:weather_state",
PrecipitationType = "thermoo:precipitation_type",
TemperatureShift = "thermoo:temperature_shift",
Modify = "thermoo:modify",
}
enum(string) TemperatureEffectType {
Empty = "thermoo:empty",
StatusEffect = "thermoo:status_effect",
AttributeModifier = "thermoo:attribute_modifier",
ScalingAttributeModifier = "thermoo:scaling_attribute_modifier",
Damage = "thermoo:damage",
Function = "thermoo:function",
Sequence = "thermoo:sequence",
FreezeDamageLegacy = "thermoo:freeze_damage_legacy",
}
enum(string) ThermooLootConditionType {
Temperature = "thermoo:temperature",
Soaked = "thermoo:soaked",
}
enum(string) EnvironmentComponentType {
Temperature = "thermoo:temperature",
RelativeHumidity = "thermoo:relative_humidity",
}
struct EnvironmentComponentMap {
[EnvironmentComponentType]: thermoo:environment_component[[%key]],
}
enum(string) TemperatureUnit {
Celsius = "celsius",
Kelvin = "kelvin",
Fahrenheit = "fahrenheit",
Rankine = "rankine",
}
type TemperatureRecord = (
double |
struct {
value: double,
unit: TemperatureUnit,
}
)
dispatch thermoo:environment_component[thermoo:temperature] to TemperatureRecord
dispatch thermoo:environment_component[thermoo:relative_humidity] to double @ 0..1
dispatch thermoo:environment_provider_type[thermoo:constant] to struct {
components: EnvironmentComponentMap,
}
enum(string) TemperateSeason {
Spring = "spring",
Summer = "summer",
Autumn = "autumn",
Winter = "winter",
}
enum(string) TropicalSeason {
Wet = "wet",
Dry = "dry",
}
dispatch thermoo:environment_provider_type[thermoo:seasonal/temperate] to struct {
/// Must contain at least one entry.
seasons: struct {
[TemperateSeason]: EnvironmentProviderOrReference
},
/// If specified, the `fallback_season` must be a member of the `seasons` field.
fallback_season?: TemperateSeason,
}
dispatch thermoo:environment_provider_type[thermoo:seasonal/tropical] to struct {
/// Must contain at least one entry.
seasons: struct {
[TropicalSeason]: EnvironmentProviderOrReference
},
/// If specified, the `fallback_season` must be a member of the `seasons` field.
fallback_season?: TropicalSeason,
}
dispatch thermoo:environment_provider_type[thermoo:light_threshold] to struct {
light_type?: ("block" | "sky"),
/// Only applies if `light_type` is `sky`.
apply_ambient_darkness?: boolean,
threshold: int @ 0..15,
above: EnvironmentProviderOrReference,
below: EnvironmentProviderOrReference,
}
dispatch thermoo:environment_provider_type[thermoo:weather_state] to struct {
clear?: EnvironmentProviderOrReference,
rain?: EnvironmentProviderOrReference,
thunder?: EnvironmentProviderOrReference,
}
dispatch thermoo:environment_provider_type[thermoo:precipitation_type] to struct {
precipitation_type: struct {
[Precipitation]?: EnvironmentProviderOrReference,
}
}
dispatch thermoo:environment_provider_type[thermoo:temperature_shift] to struct {
shift: TemperatureRecord
}
dispatch thermoo:environment_provider_type[thermoo:modify] to struct {
modifiers: (
[#[id(registry="thermoo:environment_provider")] string] @ 1.. |
#[id(registry="thermoo:environment_provider",tags="allowed")] string |
)
}
dispatch thermoo:temperature_effect_type[thermoo:empty] to struct {
}
struct StatusEffectEntry {
type: #[id="mob_effect"] string,
duration?: int @ 1..,
amplifier: int @ 0..
}
dispatch thermoo:temperature_effect_type[thermoo:status_effect] to struct {
effects: [StatusEffectEntry]
}
#[since="1.21"]
dispatch thermoo:temperature_effect_type[thermoo:attribute_modifier] to struct {
value: float,
attribute_type: #[id="attribute"] string,
/// Used when equipping and unequipping the item to identify which modifier to add or remove from the entity.
id: #[id="attribute_modifier"] string,
operation: AttributeOperation
}
dispatch thermoo:temperature_effect_type[thermoo:scaling_attribute_modifier] to struct {
/// Default value of `1.0`.
scale?: float,
attribute_type: #[id="attribute"] string,
/// Used when equipping and unequipping the item to identify which modifier to add or remove from the entity.
#[since="1.21"]
id: #[id="attribute_modifier"] string,
operation: (
#[until="1.20.5"] ("addition" | "multiply_base" | "multiply_total") |
#[since="1.20.5"] AttributeOperation |
),
#[until="1.21"]
name: string,
#[until="1.21"]
modifier_uuid: #[uuid] string
}
dispatch thermoo:temperature_effect_type[thermoo:damage] to struct {
amount: float @ 0<..,
damage_interval: int @ 1..,
damage_type: #[id="damage_type"] string,
}
#[until="1.20.2"]
dispatch thermoo:temperature_effect_type[thermoo:freeze_damage_legacy] to struct {
amount: float @ 0<..,
damage_interval: int @ 1..,
}
#[since="1.21"]
dispatch thermoo:temperature_effect_type[thermoo:function] to struct {
function: #[id="function"] string,
/// Interpreted as an SNBT string. Required if and only if the specified `function` is a macro function.
arguments?: string,
/// Defaults to `20`.
interval?: int @ 1..,
/// Defaults to `2`.
permission_level?: int @ 0..4,
}
#[since="1.21"]
dispatch thermoo:temperature_effect_type[thermoo:sequence] to struct {
children: [TemperatureEffect]
}
dispatch thermoo:loot_condition_type[thermoo:temperature] to struct {
value?: MinMaxBounds<int>,
scale?: MinMaxBounds<double>,
}
dispatch thermoo:loot_condition_type[thermoo:soaked] to struct {
value?: MinMaxBounds<int>,
scale?: MinMaxBounds<double>,
}
+33
View File
@@ -0,0 +1,33 @@
https://misode.github.io
https://misode.github.io/generators/
https://misode.github.io/loot-table/
https://misode.github.io/predicate/
https://misode.github.io/item-modifier/
https://misode.github.io/advancement/
https://misode.github.io/recipe/
https://misode.github.io/text-component/
https://misode.github.io/chat-type/
https://misode.github.io/dimension/
https://misode.github.io/dimension-type/
https://misode.github.io/world/
https://misode.github.io/worldgen/
https://misode.github.io/worldgen/biome/
https://misode.github.io/worldgen/carver/
https://misode.github.io/worldgen/feature/
https://misode.github.io/worldgen/density-function/
https://misode.github.io/worldgen/placed-feature/
https://misode.github.io/worldgen/noise/
https://misode.github.io/worldgen/noise-settings/
https://misode.github.io/worldgen/structure-feature/
https://misode.github.io/worldgen/structure/
https://misode.github.io/worldgen/structure-set/
https://misode.github.io/worldgen/surface-builder/
https://misode.github.io/worldgen/processor-list/
https://misode.github.io/worldgen/template-pool/
https://misode.github.io/worldgen/world-preset/
https://misode.github.io/worldgen/flat-world-preset/
https://misode.github.io/sounds/
https://misode.github.io/report/
https://misode.github.io/upgrader/
https://misode.github.io/changelog/
https://misode.github.io/versions/
-796
View File
@@ -1,796 +0,0 @@
{
"root": {
"id": "loot-table",
"fields": [
{
"id": "pools",
"type": "array",
"translate": "pool",
"values": "pool"
}
]
},
"components": [
{
"id": "pool",
"type": "object",
"color": "success",
"fields": [
{
"id": "rolls",
"type": "range",
"translate": "pool.rolls",
"help": true
},
{
"id": "bonus_rolls",
"type": "range",
"translate": "pool.bonus_rolls",
"luckBased": true
},
{
"id": "entries",
"type": "array",
"translate": "entry",
"values": "entry",
"button": "header"
},
{
"id": "conditions",
"type": "array",
"translate": "condition",
"values": "condition",
"button": "header"
}
]
},
{
"id": "entry",
"type": "object",
"color": "light",
"fields": [
{
"id": "type",
"type": "enum",
"translate": "entry.type",
"translateValue": "entry.type",
"help": true,
"filter": true,
"default": "minecraft:item",
"values": [
"minecraft:empty",
"minecraft:item",
"minecraft:loot_table"
]
},
{
"id": "name",
"type": "string",
"resource": true,
"translate": "entry.name",
"require": [
"minecraft:item",
"minecraft:loot_table"
]
},
{
"id": "weight",
"type": "int",
"translate": "entry.weight"
},
{
"id": "quality",
"type": "int",
"translate": "entry.quality",
"luckBased": true
},
{
"id": "functions",
"type": "array",
"translate": "function",
"values": "function",
"button": "header"
},
{
"id": "conditions",
"type": "array",
"translate": "condition",
"values": "condition",
"button": "header"
}
]
},
{
"id": "function",
"type": "object",
"color": "secondary",
"fields": [
{
"id": "function",
"type": "enum",
"filter": true,
"translate": "function.type",
"translateValue": "function.type",
"default": "minecraft:set_count",
"values": [
"minecraft:set_count",
"minecraft:set_data",
"minecraft:set_damage",
"minecraft:set_nbt",
"minecraft:set_attributes",
"minecraft:enchant_randomly",
"minecraft:enchant_with_levels",
"minecraft:looting_enchant",
"minecraft:furnace_smelt"
]
},
{
"id": "count",
"type": "range",
"translate": "function.count",
"require": [
"minecraft:set_count",
"minecraft:looting_enchant"
]
},
{
"id": "data",
"type": "range",
"translate": "function.data",
"require": [
"minecraft:set_data"
]
},
{
"id": "damage",
"type": "range",
"translate": "function.damage",
"require": [
"minecraft:set_damage"
]
},
{
"id": "tag",
"type": "nbt",
"translate": "function.nbt",
"require": [
"minecraft:set_nbt"
]
},
{
"id": "levels",
"type": "range",
"translate": "function.levels",
"require": [
"minecraft:enchant_with_levels"
]
},
{
"id": "treasure",
"type": "boolean",
"translate": "function.treasure",
"default": false,
"require": [
"minecraft:enchant_with_levels"
]
},
{
"id": "limit",
"type": "int",
"translate": "function.limit",
"require": [
"minecraft:looting_enchant"
]
},
{
"id": "enchantments",
"type": "set",
"translate": "function.enchantments",
"translateValue": "enchantment",
"values": "enchantments",
"require": [
"minecraft:enchant_randomly"
]
},
{
"id": "modifiers",
"type": "array",
"translate": "attribute_modifier",
"button": "field",
"values": "attribute_modifier",
"require": [
"minecraft:set_attributes"
]
},
{
"id": "conditions",
"type": "array",
"translate": "condition",
"values": "condition",
"button": "header"
}
]
},
{
"id": "condition",
"type": "object",
"color": "info",
"fields": [
{
"id": "condition",
"type": "enum",
"filter": true,
"translate": "condition.type",
"translateValue": "condition.type",
"default": "minecraft:random_chance",
"values": [
"minecraft:random_chance",
"minecraft:random_chance_with_looting",
"minecraft:killed_by_player",
"minecraft:entity_properties",
"minecraft:entity_scores"
]
},
{
"id": "chance",
"type": "float",
"translate": "condition.chance",
"require": [
"minecraft:random_chance",
"minecraft:random_chance_with_looting"
]
},
{
"id": "looting_multiplier",
"type": "float",
"translate": "condition.looting_multiplier",
"require": [
"minecraft:random_chance_with_looting"
]
},
{
"id": "inverse",
"type": "boolean",
"translate": "condition.inverse",
"default": false,
"require": [
"minecraft:killed_by_player"
]
},
{
"id": "entity",
"type": "enum",
"translate": "condition.entity",
"translateValue": "source",
"default": "this",
"values": [
"this",
"killer",
"killer_player"
],
"require": [
"minecraft:entity_properties",
"minecraft:entity_scores"
]
},
{
"id": "scores",
"type": "map",
"translate": "condition.score",
"values": {
"type": "range"
},
"require": [
"minecraft:entity_scores"
]
},
{
"id": "predicate",
"type": "object",
"translate": "entity",
"value": "entity",
"require": [
"minecraft:entity_properties"
]
}
]
},
{
"id": "attribute_modifier",
"type": "object",
"color": "dark",
"fields": [
{
"id": "attribute",
"type": "enum",
"translate": "attribute_modifier.attribute",
"translateValue": "attribute",
"default": "generic.attackDamage",
"values": [
"generic.maxHealth",
"generic.followRange",
"generic.knockbackResistance",
"generic.movementSpeed",
"generic.attackDamage",
"generic.armor",
"generic.armorToughness",
"generic.attackSpeed",
"generic.luck",
"horse.jumpStrength",
"generic.attackKnockback",
"generic.flyingSpeed",
"zombie.spawnReinforcements"
]
},
{
"id": "name",
"type": "string",
"translate": "attribute_modifier.name"
},
{
"id": "amount",
"type": "float",
"translate": "attribute_modifier.amount"
},
{
"id": "operation",
"type": "enum",
"translate": "attribute_modifier.operation",
"translateValue": "attribute_modifier.operation",
"default": "addition",
"values": [
"addition",
"multiply_base",
"multiply_total"
]
},
{
"id": "slot",
"type": "set",
"translate": "attribute_modifier.slot",
"translateValue": "attribute_modifier.slot",
"values": [
"mainhand",
"offhand",
"head",
"chest",
"legs",
"feet"
]
}
]
},
{
"id": "entity",
"type": "object",
"color": "dark",
"fields": [
{
"id": "type",
"type": "enum",
"translate": "entity.type",
"translateValue": "",
"unset": true,
"values": "entity_types"
},
{
"id": "nbt",
"type": "nbt",
"translate": "entity.nbt"
},
{
"id": "location",
"type": "object",
"translate": "entity.location",
"value": "location",
"collapse": true
},
{
"id": "distance",
"type": "object",
"translate": "entity.distance",
"value": "distance",
"collapse": true
},
{
"id": "effects",
"type": "map",
"resource": true,
"translate": "entity.status_effect",
"values": {
"type": "object",
"value": "status_effect"
}
}
]
},
{
"id": "location",
"type": "object",
"color": "dark",
"fields": [
{
"id": "position",
"type": "object",
"translate": "location.position",
"color": "dark",
"collapse": true,
"fields": [
{
"id": "x",
"type": "range",
"translate": "location.position.x"
},
{
"id": "y",
"type": "range",
"translate": "location.position.y"
},
{
"id": "z",
"type": "range",
"translate": "location.position.z"
}
]
},
{
"id": "biome",
"type": "enum",
"translate": "location.biome",
"translateValue": "",
"unset": true,
"values": "biomes"
},
{
"id": "feature",
"type": "enum",
"translate": "location.feature",
"translateValue": "",
"unset": true,
"values": "structures"
},
{
"id": "dimension",
"type": "enum",
"translate": "location.dimension",
"translateValue": "dimension",
"unset": true,
"values": "dimensions"
}
]
},
{
"id": "distance",
"type": "object",
"color": "dark",
"fields": [
{
"id": "x",
"type": "range",
"translate": "distance.x"
},
{
"id": "y",
"type": "range",
"translate": "distance.y"
},
{
"id": "z",
"type": "range",
"translate": "distance.z"
},
{
"id": "absolute",
"type": "range",
"translate": "distance.absolute"
},
{
"id": "horizontal",
"type": "range",
"translate": "distance.horizontal"
}
]
},
{
"id": "status_effect",
"type": "object",
"color": "dark",
"fields": [
{
"id": "amplifier",
"type": "range",
"translate": "status_effect.amplifier"
},
{
"id": "duration",
"type": "range",
"translate": "status_effect.duration"
},
{
"id": "ambient",
"type": "boolean",
"translate": "status_effect.ambient"
},
{
"id": "visible",
"type": "boolean",
"translate": "status_effect.visible"
}
]
}
],
"collections": {
"entity_types": [
"minecraft:area_effect_cloud",
"minecraft:armor_stand",
"minecraft:arrow",
"minecraft:bat",
"minecraft:blaze",
"minecraft:boat",
"minecraft:cat",
"minecraft:cave_spider",
"minecraft:chest_minecart",
"minecraft:chicken",
"minecraft:cod",
"minecraft:command_block_minecart",
"minecraft:cow",
"minecraft:creeper",
"minecraft:dolphin",
"minecraft:donkey",
"minecraft:dragon_fireball",
"minecraft:drowned",
"minecraft:egg",
"minecraft:elder_guardian",
"minecraft:end_crystal",
"minecraft:ender_dragon",
"minecraft:ender_pearl",
"minecraft:enderman",
"minecraft:endermite",
"minecraft:evoker",
"minecraft:evoker_fangs",
"minecraft:experience_bottle",
"minecraft:experience_orb",
"minecraft:eye_of_ender",
"minecraft:falling_block",
"minecraft:fireball",
"minecraft:firework_rocket",
"minecraft:fishing_bobber",
"minecraft:furnace_minecart",
"minecraft:ghast",
"minecraft:giant",
"minecraft:guardian",
"minecraft:hopper_minecart",
"minecraft:horse",
"minecraft:husk",
"minecraft:illusioner",
"minecraft:iron_golem",
"minecraft:item",
"minecraft:item_frame",
"minecraft:leash_knot",
"minecraft:lightning_bolt",
"minecraft:llama",
"minecraft:llama_spit",
"minecraft:magma_cube",
"minecraft:minecart",
"minecraft:mooshroom",
"minecraft:mule",
"minecraft:ocelot",
"minecraft:painting",
"minecraft:parrot",
"minecraft:phantom",
"minecraft:pig",
"minecraft:player",
"minecraft:polar_bear",
"minecraft:potion",
"minecraft:pufferfish",
"minecraft:rabbit",
"minecraft:salmon",
"minecraft:sheep",
"minecraft:shulker",
"minecraft:shulker_bullet",
"minecraft:silverfish",
"minecraft:skeleton",
"minecraft:skeleton_horse",
"minecraft:slime",
"minecraft:small_fireball",
"minecraft:snow_golem",
"minecraft:snowball",
"minecraft:spawner_minecart",
"minecraft:spectral_arrow",
"minecraft:spider",
"minecraft:squid",
"minecraft:stray",
"minecraft:tnt",
"minecraft:tnt_minecart",
"minecraft:trader_llama",
"minecraft:trident",
"minecraft:tropical_fish",
"minecraft:turtle",
"minecraft:vex",
"minecraft:villager",
"minecraft:vindicator",
"minecraft:wandering_trader",
"minecraft:witch",
"minecraft:wither",
"minecraft:wither_skeleton",
"minecraft:wither_skull",
"minecraft:wolf",
"minecraft:zombie",
"minecraft:zombie_horse",
"minecraft:zombie_pigman",
"minecraft:zombie_villager"
],
"enchantments": [
"minecraft:aqua_affinity",
"minecraft:bane_of_arthropods",
"minecraft:blast_protection",
"minecraft:channeling",
"minecraft:binding_curse",
"minecraft:vanishing_curse",
"minecraft:depth_strider",
"minecraft:efficiency",
"minecraft:feather_falling",
"minecraft:fire_aspect",
"minecraft:fire_protection",
"minecraft:flame",
"minecraft:fortune",
"minecraft:frost_walker",
"minecraft:impaling",
"minecraft:infinity",
"minecraft:knockback",
"minecraft:looting",
"minecraft:loyalty",
"minecraft:luck_of_the_sea",
"minecraft:lure",
"minecraft:mending",
"minecraft:multishot",
"minecraft:piercing",
"minecraft:power",
"minecraft:projectile_protection",
"minecraft:protection",
"minecraft:punch",
"minecraft:quick_charge",
"minecraft:respiration",
"minecraft:riptide",
"minecraft:sharpness",
"minecraft:silk_touch",
"minecraft:smite",
"minecraft:sweeping",
"minecraft:thorns",
"minecraft:unbreaking"
],
"biomes": [
"minecraft:badlands",
"minecraft:badlands_plateau",
"minecraft:bamboo_jungle",
"minecraft:bamboo_jungle_hills",
"minecraft:beach",
"minecraft:birch_forest",
"minecraft:birch_forest_hills",
"minecraft:cold_ocean",
"minecraft:dark_forest",
"minecraft:dark_forest_hills",
"minecraft:deep_cold_ocean",
"minecraft:deep_frozen_ocean",
"minecraft:deep_lukewarm_ocean",
"minecraft:deep_ocean",
"minecraft:deep_warm_ocean",
"minecraft:desert",
"minecraft:desert_hills",
"minecraft:desert_lakes",
"minecraft:end_barrens",
"minecraft:end_highlands",
"minecraft:end_midlands",
"minecraft:eroded_badlands",
"minecraft:flower_forest",
"minecraft:forest",
"minecraft:frozen_ocean",
"minecraft:frozen_river",
"minecraft:giant_spruce_taiga",
"minecraft:giant_spruce_taiga_hills",
"minecraft:giant_tree_taiga",
"minecraft:giant_tree_taiga_hills",
"minecraft:gravelly_mountains",
"minecraft:ice_spikes",
"minecraft:jungle",
"minecraft:jungle_edge",
"minecraft:jungle_hills",
"minecraft:lukewarm_ocean",
"minecraft:modified_badlands_plateau",
"minecraft:modified_gravelly_mountains",
"minecraft:modified_jungle",
"minecraft:modified_jungle_edge",
"minecraft:modified_wooded_badlands_plateau",
"minecraft:mountain_edge",
"minecraft:mountains",
"minecraft:mushroom_field_shore",
"minecraft:mushroom_fields",
"minecraft:nether",
"minecraft:ocean",
"minecraft:plains",
"minecraft:river",
"minecraft:savanna",
"minecraft:savanna_plateau",
"minecraft:shattered_savanna",
"minecraft:shattered_savanna_plateau",
"minecraft:small_end_islands",
"minecraft:snowy_beach",
"minecraft:snowy_mountains",
"minecraft:snowy_taiga",
"minecraft:snowy_taiga_hills",
"minecraft:snowy_taiga_mountains",
"minecraft:snowy_tundra",
"minecraft:stone_shore",
"minecraft:sunflower_plains",
"minecraft:swamp",
"minecraft:swamp_hills",
"minecraft:taiga",
"minecraft:taiga_hills",
"minecraft:taiga_mountains",
"minecraft:tall_birch_forest",
"minecraft:tall_birch_hills",
"minecraft:the_end",
"minecraft:the_void",
"minecraft:warm_ocean",
"minecraft:wooded_badlands_plateau",
"minecraft:wooded_hills",
"minecraft:wooded_mountains"
],
"structures": [
"pillager_outpost",
"mineshaft",
"mansion",
"jungle_pyramid",
"desert_pyramid",
"igloo",
"shipwreck",
"swamp_hut",
"stronghold",
"monument",
"ocean_ruin",
"fortress",
"endcity",
"buried_treasure",
"village"
],
"dimensions": [
"minecraft:overworld",
"minecraft:the_nether",
"minecraft:the_end"
],
"status_effects": [
"minecraft:speed",
"minecraft:slowness",
"minecraft:haste",
"minecraft:mining_fatigue",
"minecraft:strength",
"minecraft:instant_health",
"minecraft:instant_damage",
"minecraft:jump_boost",
"minecraft:nausea",
"minecraft:regeneration",
"minecraft:resistance",
"minecraft:fire_resistance",
"minecraft:water_breathing",
"minecraft:invisibility",
"minecraft:blindness",
"minecraft:night_vision",
"minecraft:hunger",
"minecraft:weakness",
"minecraft:poison",
"minecraft:wither",
"minecraft:health_boost",
"minecraft:absorption",
"minecraft:saturation",
"minecraft:glowing",
"minecraft:levitation",
"minecraft:luck",
"minecraft:unluck",
"minecraft:slow_falling",
"minecraft:conduit_power",
"minecraft:dolphins_grace",
"minecraft:bad_omen",
"minecraft:hero_of_the_village"
]
}
}
-1455
View File
File diff suppressed because it is too large Load Diff
-2375
View File
File diff suppressed because it is too large Load Diff
-2461
View File
File diff suppressed because it is too large Load Diff
-818
View File
@@ -1,818 +0,0 @@
{
"root": {
"id": "worldgen",
"card": false,
"fields": [
{
"id": "generate_features",
"translate": "world.generate_features",
"type": "boolean",
"default": true
},
{
"id": "bonus_chest",
"translate": "world.bonus_chest",
"type": "boolean",
"default": false
},
{
"id": "seed",
"translate": "world.seed",
"type": "int",
"default": 0
},
{
"id": "dimensions",
"translate": "dimension",
"translatePlaceholder": "dimension",
"type": "map",
"resource": true,
"help": true,
"values": {
"type": "object",
"value": "dimension"
}
}
],
"default": {
"seed": -1464245863,
"generate_features": true,
"bonus_chest": false,
"dimensions": {
"minecraft:overworld": {
"generator": {
"biome_source": {
"seed": -1464245863,
"large_biomes": false,
"type": "minecraft:vanilla_layered"
},
"seed": -1464245863,
"settings": "minecraft:overworld",
"type": "minecraft:noise"
},
"type": "minecraft:overworld"
},
"minecraft:the_nether": {
"generator": {
"biome_source": {
"seed": -1464245863,
"preset": "minecraft:nether",
"type": "minecraft:multi_noise"
},
"seed": -1464245863,
"settings": "minecraft:nether",
"type": "minecraft:noise"
},
"type": "minecraft:the_nether"
},
"minecraft:the_end": {
"generator": {
"biome_source": {
"seed": -1464245863,
"type": "minecraft:the_end"
},
"seed": -1464245863,
"settings": "minecraft:end",
"type": "minecraft:noise"
},
"type": "minecraft:the_end"
}
}
}
},
"components": [
{
"id": "dimension",
"type": "object",
"color": "success",
"fields": [
{
"id": "generator",
"type": "object",
"card": false,
"fields": [
{
"id": "type",
"translate": "generator.type",
"translateValue": "generator.type",
"type": "enum",
"filter": true,
"default": "minecraft:noise",
"values": [
"minecraft:noise",
"minecraft:flat",
"minecraft:debug"
]
},
{
"id": "seed",
"translate": "generator.seed",
"type": "int",
"default": 0
},
{
"id": "biome_source",
"type": "object",
"color": "dark",
"fields": [
{
"id": "type",
"translate": "biome_source.type",
"translateValue": "biome_source.type",
"type": "enum",
"help": true,
"filter": true,
"default": "minecraft:fixed",
"values": [
"minecraft:fixed",
"minecraft:multi_noise",
"minecraft:checkerboard",
"minecraft:vanilla_layered",
"minecraft:the_end"
],
"clear": [
"biomes"
]
},
{
"id": "seed",
"translate": "biome_source.seed",
"type": "int",
"default": 0
},
{
"id": "preset",
"translate": "biome_source.preset",
"translateValue": "biome_source.preset",
"type": "enum",
"unset": true,
"values": [
"minecraft:nether"
],
"require": [
"minecraft:multi_noise"
]
},
{
"id": "large_biomes",
"translate": "biome_source.large_biomes",
"type": "boolean",
"default": false,
"require": [
"minecraft:vanilla_layered"
]
},
{
"id": "biomes",
"translate": "biome",
"type": "array",
"values": "biome",
"button": "field",
"require": [
"minecraft:multi_noise"
]
},
{
"id": "biomes",
"translate": "biome_source.biomes",
"type": "set",
"values": "biomes",
"button": "field",
"require": [
"minecraft:checkerboard"
]
},
{
"id": "biome",
"translate": "biome_source.biome",
"type": "enum",
"default": "minecraft:plains",
"values": "biomes",
"require": [
"minecraft:fixed"
]
}
],
"require": [
"minecraft:noise"
]
},
{
"id": "settings",
"translate": "generator.settings",
"translateValue": "generator.settings.presets",
"type": "object",
"color": "dark",
"collapse": true,
"help": true,
"default": "minecraft:overworld",
"values": [
"minecraft:overworld",
"minecraft:nether",
"minecraft:end",
"minecraft:amplified",
"minecraft:caves",
"minecraft:floating_islands"
],
"fields": [
{
"id": "bedrock_roof_position",
"translate": "generator.settings.bedrock_roof_position",
"type": "int",
"default": -10,
"help": true
},
{
"id": "bedrock_floor_position",
"translate": "generator.settings.bedrock_floor_position",
"type": "int",
"default": 0,
"help": true
},
{
"id": "sea_level",
"translate": "generator.settings.sea_level",
"type": "int",
"default": 63
},
{
"id": "disable_mob_generation",
"translate": "generator.settings.disable_mob_generation",
"type": "boolean",
"default": false,
"help": true
},
{
"id": "default_block",
"type": "object",
"color": "dark",
"default": {
"Name": "minecraft:stone"
},
"fields": [
{
"id": "Name",
"translate": "generator.settings.default_block.name",
"type": "string"
},
{
"id": "Properties",
"translate": "generator.settings.block_states",
"translatePlaceholder": "block_state",
"type": "map",
"resource": true,
"default": {},
"values": {
"type": "string"
}
}
]
},
{
"id": "default_fluid",
"type": "object",
"color": "dark",
"default": {
"Name": "minecraft:water",
"Properties": {
"level": "0"
}
},
"fields": [
{
"id": "Name",
"translate": "generator.settings.default_fluid.name",
"type": "string"
},
{
"id": "Properties",
"translate": "generator.settings.fluid_states",
"translatePlaceholder": "fluid_state",
"type": "map",
"resource": true,
"default": {},
"values": {
"type": "string"
}
}
]
},
{
"id": "noise",
"translate": "generator.settings.noise",
"type": "object",
"color": "dark",
"fields": [
{
"id": "density_factor",
"translate": "generator.settings.noise.density_factor",
"type": "float",
"default": 1,
"help": true
},
{
"id": "density_offset",
"translate": "generator.settings.noise.density_offset",
"type": "float",
"default": -0.46875,
"help": true
},
{
"id": "simplex_surface_noise",
"translate": "generator.settings.noise.simplex_surface_noise",
"type": "boolean",
"default": true
},
{
"id": "random_density_offset",
"translate": "generator.settings.noise.random_density_offset",
"type": "boolean",
"default": true
},
{
"id": "island_noise_override",
"translate": "generator.settings.noise.island_noise_override",
"type": "boolean",
"default": false,
"help": true
},
{
"id": "amplified",
"translate": "generator.settings.noise.amplified",
"type": "boolean",
"default": false
},
{
"id": "size_horizontal",
"translate": "generator.settings.noise.size_horizontal",
"type": "int",
"default": 2,
"help": true
},
{
"id": "size_vertical",
"translate": "generator.settings.noise.size_vertical",
"type": "int",
"default": 2,
"help": true
},
{
"id": "height",
"translate": "generator.settings.noise.height",
"type": "int",
"default": 256
},
{
"id": "sampling",
"type": "object",
"color": "dark",
"fields": [
{
"id": "xz_scale",
"translate": "generator.settings.noise.sampling.xz_scale",
"type": "float",
"default": 1
},
{
"id": "y_scale",
"translate": "generator.settings.noise.sampling.y_scale",
"type": "float",
"default": 1
},
{
"id": "xz_factor",
"translate": "generator.settings.noise.sampling.xz_factor",
"type": "float",
"default": 80
},
{
"id": "y_factor",
"translate": "generator.settings.noise.sampling.y_factor",
"type": "float",
"default": 160
}
]
},
{
"id": "bottom_slide",
"type": "object",
"color": "dark",
"fields": [
{
"id": "target",
"translate": "generator.settings.noise.bottom_slide.target",
"type": "int",
"default": -30
},
{
"id": "size",
"translate": "generator.settings.noise.bottom_slide.size",
"type": "int",
"default": 0
},
{
"id": "offset",
"translate": "generator.settings.noise.bottom_slide.offset",
"type": "int",
"default": 0
}
]
},
{
"id": "top_slide",
"type": "object",
"color": "dark",
"fields": [
{
"id": "target",
"translate": "generator.settings.noise.top_slide.target",
"type": "int",
"default": -10
},
{
"id": "size",
"translate": "generator.settings.noise.top_slide.size",
"type": "int",
"default": 3
},
{
"id": "offset",
"translate": "generator.settings.noise.top_slide.offset",
"type": "int",
"default": 0
}
]
}
]
},
{
"id": "structures",
"type": "object",
"card": false,
"default": {
"structures": {}
},
"fields": [
{
"id": "structures",
"translate": "generator.settings.structures",
"translatePlaceholder": "structure",
"type": "map",
"resource": true,
"help": true,
"default": {},
"values": {
"type": "object",
"value": "structure"
}
}
]
}
],
"require": [
"minecraft:noise"
]
},
{
"id": "settings",
"translate": "generator.settings",
"type": "object",
"color": "dark",
"collapse": true,
"fields": [
{
"id": "biome",
"translate": "biome_source.biome",
"type": "enum",
"default": "minecraft:plains",
"values": "biomes"
},
{
"id": "layers",
"translate": "generator.settings.layers",
"type": "array",
"values": "layer",
"button": "field"
},
{
"id": "structures",
"type": "object",
"card": false,
"default": {
"structures": {}
},
"fields": [
{
"id": "structures",
"translate": "generator.settings.structures",
"translatePlaceholder": "structure",
"type": "map",
"resource": true,
"help": true,
"default": {},
"values": {
"type": "object",
"value": "structure"
}
}
]
}
],
"require": [
"minecraft:flat"
]
}
]
},
{
"id": "type",
"translate": "dimension.type",
"translateValue": "dimension.type.presets",
"type": "object",
"color": "dark",
"collapse": true,
"default": "minecraft:overworld",
"help": true,
"values": [
"minecraft:overworld",
"minecraft:the_nether",
"minecraft:the_end"
],
"fields": [
{
"id": "name",
"translate": "dimension.type.name",
"type": "string",
"help": true
},
{
"id": "ultrawarm",
"translate": "dimension.type.ultrawarm",
"type": "boolean",
"default": false,
"help": true
},
{
"id": "natural",
"translate": "dimension.type.natural",
"type": "boolean",
"default": true,
"help": true
},
{
"id": "shrunk",
"translate": "dimension.type.shrunk",
"type": "boolean",
"default": false,
"help": true
},
{
"id": "piglin_safe",
"translate": "dimension.type.piglin_safe",
"type": "boolean",
"default": true
},
{
"id": "respawn_anchor_works",
"translate": "dimension.type.respawn_anchor_works",
"type": "boolean",
"default": false
},
{
"id": "bed_works",
"translate": "dimension.type.bed_works",
"type": "boolean",
"default": false
},
{
"id": "has_raids",
"translate": "dimension.type.has_raids",
"type": "boolean",
"default": true
},
{
"id": "has_skylight",
"translate": "dimension.type.has_skylight",
"type": "boolean",
"default": true
},
{
"id": "has_ceiling",
"translate": "dimension.type.has_ceiling",
"type": "boolean",
"default": false
},
{
"id": "ambient_light",
"translate": "dimension.type.ambient_light",
"type": "float",
"default": 0,
"help": true
},
{
"id": "fixed_time",
"translate": "dimension.type.fixed_time",
"type": "int",
"help": true
},
{
"id": "logical_height",
"translate": "dimension.type.logical_height",
"type": "int",
"default": 256
},
{
"id": "infiniburn",
"translate": "dimension.type.infiniburn",
"type": "string",
"default": "minecraft:infiniburn_overworld"
}
]
}
]
},
{
"id": "biome",
"type": "object",
"color": "info",
"fields": [
{
"id": "biome",
"translate": "biome",
"type": "enum",
"default": "minecraft:plains",
"values": "biomes"
},
{
"id": "parameters",
"translate": "biome.parameters",
"type": "object",
"color": "info",
"default": {},
"fields": [
{
"id": "altitude",
"translate": "biome.parameters.altitude",
"type": "float",
"default": 0,
"help": true
},
{
"id": "weirdness",
"translate": "biome.parameters.weirdness",
"type": "float",
"default": 0
},
{
"id": "offset",
"translate": "biome.parameters.offset",
"type": "float",
"default": 0
},
{
"id": "temperature",
"translate": "biome.parameters.temperature",
"type": "float",
"default": 0
},
{
"id": "humidity",
"translate": "biome.parameters.humidity",
"type": "float",
"default": 0
}
]
}
]
},
{
"id": "structure",
"type": "object",
"color": "secondary",
"fields": [
{
"id": "spacing",
"translate": "structure.spacing",
"type": "int",
"default": 10,
"help": true
},
{
"id": "separation",
"translate": "structure.separation",
"type": "int",
"default": 8,
"help": true
},
{
"id": "salt",
"translate": "structure.salt",
"type": "int",
"default": 0
}
]
},
{
"id": "layer",
"type": "object",
"color": "info",
"fields": [
{
"id": "block",
"translate": "layer.block",
"type": "string",
"default": "minecraft:stone"
},
{
"id": "height",
"translate": "layer.height",
"type": "int",
"default": 1
}
]
}
],
"collections": {
"biomes": [
"minecraft:badlands",
"minecraft:badlands_plateau",
"minecraft:bamboo_jungle",
"minecraft:bamboo_jungle_hills",
"minecraft:basalt_deltas",
"minecraft:beach",
"minecraft:birch_forest",
"minecraft:birch_forest_hills",
"minecraft:cold_ocean",
"minecraft:crimson_forest",
"minecraft:dark_forest",
"minecraft:dark_forest_hills",
"minecraft:deep_cold_ocean",
"minecraft:deep_frozen_ocean",
"minecraft:deep_lukewarm_ocean",
"minecraft:deep_ocean",
"minecraft:deep_warm_ocean",
"minecraft:desert",
"minecraft:desert_hills",
"minecraft:desert_lakes",
"minecraft:end_barrens",
"minecraft:end_highlands",
"minecraft:end_midlands",
"minecraft:eroded_badlands",
"minecraft:flower_forest",
"minecraft:forest",
"minecraft:frozen_ocean",
"minecraft:frozen_river",
"minecraft:giant_spruce_taiga",
"minecraft:giant_spruce_taiga_hills",
"minecraft:giant_tree_taiga",
"minecraft:giant_tree_taiga_hills",
"minecraft:gravelly_mountains",
"minecraft:ice_spikes",
"minecraft:jungle",
"minecraft:jungle_edge",
"minecraft:jungle_hills",
"minecraft:lukewarm_ocean",
"minecraft:modified_badlands_plateau",
"minecraft:modified_gravelly_mountains",
"minecraft:modified_jungle",
"minecraft:modified_jungle_edge",
"minecraft:modified_wooded_badlands_plateau",
"minecraft:mountain_edge",
"minecraft:mountains",
"minecraft:mushroom_field_shore",
"minecraft:mushroom_fields",
"minecraft:nether_wastes",
"minecraft:ocean",
"minecraft:plains",
"minecraft:river",
"minecraft:savanna",
"minecraft:savanna_plateau",
"minecraft:shattered_savanna",
"minecraft:shattered_savanna_plateau",
"minecraft:small_end_islands",
"minecraft:snowy_beach",
"minecraft:snowy_mountains",
"minecraft:snowy_taiga",
"minecraft:snowy_taiga_hills",
"minecraft:snowy_taiga_mountains",
"minecraft:snowy_tundra",
"minecraft:soul_sand_valley",
"minecraft:stone_shore",
"minecraft:sunflower_plains",
"minecraft:swamp",
"minecraft:swamp_hills",
"minecraft:taiga",
"minecraft:taiga_hills",
"minecraft:taiga_mountains",
"minecraft:tall_birch_forest",
"minecraft:tall_birch_hills",
"minecraft:the_end",
"minecraft:the_void",
"minecraft:warm_ocean",
"minecraft:warped_forest",
"minecraft:wooded_badlands_plateau",
"minecraft:wooded_hills",
"minecraft:wooded_mountains"
]
}
}
-47
View File
@@ -1,47 +0,0 @@
<div class="row my-4">
<div class="col-12 col-lg-7 mb-3 structure-container" data-index="root">
<div id="lootTableToolbar" class="input-group d-none mb-3">
<button type="button" class="btn btn-success d-block mr-3 float-left" onclick="addComponent(this, 'pools')"data-field="table" data-i18n="pool_add"></button>
<div class="input-group-prepend table-type">
<span class="input-group-text rounded-left" data-i18n="table.type"></span>
</div>
<select id="tableType" class="form-control mr-3 rounded-right table-type" style="max-width: 9em;" onchange="updateTableType(this)"></select>
<div class="custom-control custom-checkbox mr-3" style="margin: auto 0">
<input type="checkbox" class="custom-control-input" id="luckBased" onchange="updateLuckBased(this)">
<label class="custom-control-label" for="luckBased" data-i18n="luck_based"></label>
</div>
<div id="showSourceButton" class="ml-auto d-none">
<button type="button" class="btn btn-secondary" onclick="showSource()" data-i18n="show_source"></button>
</div>
</div>
<div id="structure" class="loot-table" data-index="root">
</div>
</div>
<div class="col-12 col-lg-5 source-container">
<div class="mb-3 float-lg-right source-menu">
<div class="input-group">
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown"
data-i18n="more"></button>
<div class="dropdown-menu">
<a class="dropdown-item" onclick="updateIndentation(2)" data-i18n="2_spaces"></a>
<a class="dropdown-item" onclick="updateIndentation(4)" data-i18n="4_spaces"></a>
<a class="dropdown-item" onclick="updateIndentation('\t')" data-i18n="tabs"></a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" onclick="hideSource()" data-i18n="hide_source"></a>
</div>
</div>
<button id="linkSource" type="button" class="btn btn-secondary ml-3" onclick="linkSource()"
data-i18n="share"></button>
<button type="button" class="btn btn-secondary ml-3" onclick="copySource()" data-i18n="copy"></button>
</div>
</div>
<div id="copyContainer" class="mb-3 d-none">
<input id="copyTextarea" rows="1" class="form-control"></input>
<button id="copy" type="button" class="btn btn-block btn-secondary mt-2" onclick="copyLink()"
data-i18n="copy"></button>
</div>
<textarea id="source" class="form-control code" onchange="updateSource()" rows="19"
spellcheck="false"></textarea>
</div>
</div>
+12
View File
@@ -0,0 +1,12 @@
{
"env": {
"dependencies": [
"@vanilla-mcdoc"
],
"exclude": [
".*/**",
"**/node_modules/**",
"**/dist/**"
]
}
}
+217
View File
@@ -0,0 +1,217 @@
import type { ColormapType } from './components/previews/Colormap.js'
import type { VersionId } from './services/index.js'
export type Method = 'menu' | 'hotkey'
export namespace Analytics {
export function pageview(url: string) {
gtag('event', 'page_view', {
page_location: url,
page_title: document.title,
})
}
export function setLocale(locale: string) {
gtag('set', {
locale,
})
}
export function changeLocale(prev_locale: string, locale: string) {
setLocale(locale)
gtag('event', 'change_locale', {
prev_locale,
})
}
export function setTheme(theme: string) {
gtag('set', {
theme,
})
}
export function changeTheme(prev_theme: string, theme: string) {
setTheme(theme)
gtag('event', 'change_theme', {
prev_theme,
})
}
export function setVersion(version: string) {
gtag('set', {
version,
})
}
export function setSelectedVersion(selected_version: string) {
gtag('set', {
selected_version,
})
}
export function changeVersion(prev_version: string, version: string) {
setVersion(version)
gtag('event', 'change_version', {
prev_version,
})
}
export function setGenerator(file_type: string) {
gtag('event', 'use_generator', {
file_type,
})
}
export function setPrefersColorScheme(prefers_color_scheme: string) {
gtag('set', {
prefers_color_scheme,
})
}
export function setTreeViewMode(tree_view_mode: string) {
gtag('set', {
tree_view_mode,
})
}
export function setColormap(colormap: ColormapType) {
gtag('set', {
colormap,
})
}
export function resetGenerator(file_type: string, history: number, method: Method) {
gtag('event', 'reset_generator', {
file_type,
history,
method,
})
}
export function undoGenerator(file_type: string, history: number, method: Method) {
gtag('event', 'undo_generator', {
file_type,
history,
method,
})
}
export function redoGenerator(file_type: string, history: number, method: Method) {
gtag('event', 'redo_generator', {
file_type,
history,
method,
})
}
export function loadPreset(file_type: string, file_name: string) {
gtag('event', 'load_generator_preset', {
file_type,
file_name,
})
}
export function openPreset(file_type: string, file_name: string) {
gtag('event', 'open_generator_preset', {
file_type,
file_name,
})
}
export function createSnippet(file_type: string, snippet_id: string, version: VersionId, data_size: number, compressed_size: number, compression_rate: number) {
gtag('event', 'create_generator_snippet', {
file_type,
snippet_id,
version,
data_size,
compressed_size,
compression_rate,
})
}
export function openSnippet(file_type: string, snippet_id: string, version: VersionId) {
gtag('event', 'open_generator_snippet', {
file_type,
snippet_id,
version,
})
}
export function copyOutput(file_type: string, method: Method) {
gtag('event', 'copy_generator_output', {
file_type,
method,
})
}
export function downloadOutput(file_type: string, method: Method) {
gtag('event', 'download_generator_output', {
file_type,
method,
})
}
export function showOutput(file_type: string, method: Method) {
gtag('event', 'show_generator_output', {
file_type,
method,
})
}
export function hideOutput(file_type: string, method: Method) {
gtag('event', 'hide_generator_output', {
file_type,
method,
})
}
export function showPreview(file_type: string, method: Method) {
gtag('event', 'show_generator_preview', {
file_type,
method,
})
}
export function hidePreview(file_type: string, method: Method) {
gtag('event', 'hide_generator_preview', {
file_type,
method,
})
}
export function showProject(method: Method) {
gtag('event', 'show_project', {
method,
})
}
export function hideProject(method: Method) {
gtag('event', 'hide_project', {
method,
})
}
export function saveProjectFile(method: Method) {
gtag('event', 'save_project_file', {
method,
})
}
export function deleteProjectFile(method: Method) {
gtag('event', 'delete_project_file', {
method,
})
}
export function renameProjectFile(method: Method) {
gtag('event', 'rename_project_file', {
method,
})
}
export function deleteProject(method: Method) {
gtag('event', 'delete_project', {
method,
})
}
}
+38
View File
@@ -0,0 +1,38 @@
import type { RouterOnChangeArgs } from 'preact-router'
import { Router } from 'preact-router'
import '../styles/global.css'
import '../styles/nodes.css'
import { Analytics } from './Analytics.js'
import { Header } from './components/index.js'
import { Changelog, Convert, Customized, Generator, Generators, Guide, Guides, Home, LegacyPartners, Partners, Sounds, Transformation, Versions, WhatsNew, Worldgen } from './pages/index.js'
import { cleanUrl } from './Utils.js'
export function App() {
const changeRoute = (e: RouterOnChangeArgs) => {
window.dispatchEvent(new CustomEvent('replacestate'))
// Needs a timeout to ensure the title is set correctly
setTimeout(() => Analytics.pageview(cleanUrl(e.url)))
}
return <>
<Header />
<Router onChange={changeRoute}>
<Home path="/" />
<Generators path="/generators" />
<Worldgen path="/worldgen" />
<Partners path="/partners" />
<LegacyPartners path="/partners/:id" />
<Sounds path="/sounds" />
<Changelog path="/changelog" />
<Versions path="/versions" />
<Transformation path="/transformation" />
<Customized path="/customized" />
<Convert path="/convert" />
<Convert path="/convert/:formats" />
<WhatsNew path="/whats-new" />
<Guides path="/guides" />
<Guide path="/guides/:id" />
<Generator default />
</Router>
</>
}
+46
View File
@@ -0,0 +1,46 @@
import config from '../config.json'
import type { VersionId } from './services/Versions.js'
export interface ConfigLanguage {
code: string,
name: string,
mc: string,
}
export interface ConfigVersion {
id: VersionId,
pack_format: number,
name: string,
ref?: string,
show?: boolean,
dynamic?: boolean,
}
export interface ConfigGenerator {
id: string,
url: string,
path?: string,
ext?: string,
noPath?: boolean,
tags?: string[],
aliases?: string[],
dependency?: string,
minVersion?: string,
maxVersion?: string,
wiki?: string,
}
export interface ConfigLegacyGuide {
id: string,
title: string,
link: string,
}
export interface Config {
languages: ConfigLanguage[],
versions: ConfigVersion[],
generators: ConfigGenerator[],
legacyGuides: ConfigLegacyGuide[],
}
export default config as Config
+32
View File
@@ -0,0 +1,32 @@
import { render } from 'preact'
import '../styles/global.css'
import '../styles/main.css'
import '../styles/nodes.css'
import { App } from './App.js'
import { LocaleProvider, ProjectProvider, StoreProvider, ThemeProvider, TitleProvider, VersionProvider } from './contexts/index.js'
import { ModalProvider } from './contexts/Modal.jsx'
import { SpyglassProvider } from './contexts/Spyglass.jsx'
function Main() {
return (
<StoreProvider>
<LocaleProvider>
<ThemeProvider>
<VersionProvider>
<TitleProvider>
<SpyglassProvider>
<ProjectProvider>
<ModalProvider>
<App />
</ModalProvider>
</ProjectProvider>
</SpyglassProvider>
</TitleProvider>
</VersionProvider>
</ThemeProvider>
</LocaleProvider>
</StoreProvider>
)
}
render(<Main />, document.body)
+195
View File
@@ -0,0 +1,195 @@
import type { ColormapType } from './components/previews/Colormap.js'
import { ColormapTypes } from './components/previews/Colormap.js'
import type { ProjectMeta } from './contexts/index.js'
import { DRAFT_PROJECT } from './contexts/index.js'
import type { VersionId } from './services/index.js'
import { DEFAULT_VERSION, VersionIds } from './services/index.js'
import { safeJsonParse } from './Utils.js'
export namespace Store {
export const ID_LANGUAGE = 'language'
export const ID_THEME = 'theme'
export const ID_VERSION = 'schema_version'
export const ID_INDENT = 'indentation'
export const ID_FORMAT = 'output_format'
export const ID_HIGHLIGHTING = 'output_highlighting'
export const ID_SOUNDS_VERSION = 'minecraft_sounds_version'
export const ID_PROJECTS = 'misode_projects'
export const ID_PREVIEW_PANEL_OPEN = 'misode_preview_panel_open'
export const ID_PROJECT_PANEL_OPEN = 'misode_project_panel_open'
export const ID_OPEN_PROJECT = 'misode_open_project'
export const ID_TREE_VIEW_MODE = 'misode_tree_view_mode'
export const ID_COLORMAP = 'misode_colormap'
export const ID_GENERATOR_HISTORY = 'misode_generator_history'
export const ID_WHATS_NEW_SEEN = 'misode_whats_new_seen'
export function getLanguage() {
return localStorage.getItem(ID_LANGUAGE) ?? 'en'
}
export function getTheme() {
return localStorage.getItem(ID_THEME) ?? 'dark'
}
export function getVersionOrDefault(): VersionId {
const version = localStorage.getItem(ID_VERSION)
if (version && VersionIds.includes(version as VersionId)) {
return version as VersionId
}
return DEFAULT_VERSION
}
export function getVersion(): VersionId | null {
const version = localStorage.getItem(ID_VERSION)
if (version && VersionIds.includes(version as VersionId)) {
return version as VersionId
}
return null
}
export function getIndent() {
return localStorage.getItem(ID_INDENT) ?? '2_spaces'
}
export function getFormat() {
return localStorage.getItem(ID_FORMAT) ?? 'json'
}
export function getHighlighting() {
return localStorage.getItem(ID_HIGHLIGHTING) !== 'false'
}
export function getSoundsVersion() {
return localStorage.getItem(ID_SOUNDS_VERSION) ?? 'latest'
}
export function getProjects(): ProjectMeta[] {
const projects = localStorage.getItem(ID_PROJECTS)
if (projects) {
return safeJsonParse(projects) ?? []
}
return [DRAFT_PROJECT]
}
export function getPreviewPanelOpen(): boolean | undefined {
const open = localStorage.getItem(ID_PREVIEW_PANEL_OPEN)
if (open === null) return undefined
return safeJsonParse(open)
}
export function getProjectPanelOpen(): boolean | undefined {
const open = localStorage.getItem(ID_PROJECT_PANEL_OPEN)
if (open === null) return undefined
return safeJsonParse(open)
}
export function getOpenProject() {
return localStorage.getItem(ID_OPEN_PROJECT) ?? DRAFT_PROJECT.name
}
export function getTreeViewMode() {
return localStorage.getItem(ID_TREE_VIEW_MODE) ?? 'resources'
}
export function getColormap(): ColormapType | undefined {
const value = localStorage.getItem(ID_COLORMAP)
if (value === null || !ColormapTypes.includes(value as ColormapType)) {
return undefined
}
return value as ColormapType
}
export function getGeneratorHistory(): string[] {
const value = localStorage.getItem(ID_GENERATOR_HISTORY) ?? '[]'
return safeJsonParse(value) ?? []
}
export function setLanguage(language: string | undefined) {
if (language) localStorage.setItem(ID_LANGUAGE, language)
}
export function setTheme(theme: string | undefined) {
if (theme) localStorage.setItem(ID_THEME, theme)
}
export function setVersion(version: VersionId | undefined) {
if (version) localStorage.setItem(ID_VERSION, version)
}
export function setIndent(indent: string | undefined) {
if (indent) localStorage.setItem(ID_INDENT, indent)
}
export function setFormat(format: string | undefined) {
if (format) localStorage.setItem(ID_FORMAT, format)
}
export function setHighlighting(highlighting: boolean | undefined) {
if (highlighting !== undefined) localStorage.setItem(ID_HIGHLIGHTING, highlighting.toString())
}
export function setSoundsVersion(version: string | undefined) {
if (version) localStorage.setItem(ID_SOUNDS_VERSION, version)
}
export function setProjects(projects: ProjectMeta[] | undefined) {
if (projects) localStorage.setItem(ID_PROJECTS, JSON.stringify(projects))
}
export function setPreviewPanelOpen(open: boolean | undefined) {
if (open === undefined) {
localStorage.removeItem(ID_PREVIEW_PANEL_OPEN)
} else {
localStorage.setItem(ID_PREVIEW_PANEL_OPEN, JSON.stringify(open))
}
}
export function setProjectPanelOpen(open: boolean | undefined) {
if (open === undefined) {
localStorage.removeItem(ID_PROJECT_PANEL_OPEN)
} else {
localStorage.setItem(ID_PROJECT_PANEL_OPEN, JSON.stringify(open))
}
}
export function setOpenProject(projectName: string | undefined) {
if (projectName === undefined) {
localStorage.removeItem(ID_OPEN_PROJECT)
} else {
localStorage.setItem(ID_OPEN_PROJECT, projectName)
}
}
export function setTreeViewMode(mode: string | undefined) {
if (mode) localStorage.setItem(ID_TREE_VIEW_MODE, mode)
}
export function setColormap(colormap: ColormapType | undefined) {
if (colormap) localStorage.setItem(ID_COLORMAP, colormap)
}
export function visitGenerator(id: string) {
const history = getGeneratorHistory()
history.push(id)
localStorage.setItem(ID_GENERATOR_HISTORY, JSON.stringify(history.slice(-50)))
}
export function getWhatsNewSeen(): { id: string, time: string }[] {
const value = localStorage.getItem(ID_WHATS_NEW_SEEN) ?? '[]'
return safeJsonParse(value) ?? []
}
export function seeWhatsNew(ids: string[]) {
const now = new Date().toISOString()
const items = getWhatsNewSeen()
for (const id of ids) {
const old = items.find(i => i.id === id)
if (old) {
old.time = now
} else {
items.push({ id, time: now })
}
}
localStorage.setItem(ID_WHATS_NEW_SEEN, JSON.stringify(items))
}
}
+652
View File
@@ -0,0 +1,652 @@
import * as zip from '@zip.js/zip.js'
import type { Identifier, NbtTag, Random } from 'deepslate'
import { Matrix3, Matrix4, NbtByte, NbtCompound, NbtDouble, NbtInt, NbtList, NbtString, Vector } from 'deepslate'
import type { mat3 } from 'gl-matrix'
import { quat, vec2 } from 'gl-matrix'
import yaml from 'js-yaml'
import { route } from 'preact-router'
import rfdc from 'rfdc'
import type { ConfigGenerator } from './Config.js'
import config from './Config.js'
import type { VersionId } from './services/index.js'
import { checkVersion } from './services/index.js'
export const SOURCE_REPO_URL = 'https://github.com/misode/misode.github.io'
export function isPromise(obj: any): obj is Promise<any> {
return typeof (obj as any)?.then === 'function'
}
export function isObject(obj: any): obj is Record<string, any> {
return typeof obj === 'object' && obj !== null
}
function decToHex(n: number) {
return n.toString(16).padStart(2, '0')
}
export function hexId(length = 12) {
var arr = new Uint8Array(length / 2)
window.crypto.getRandomValues(arr)
return Array.from(arr, decToHex).join('')
}
export function randomSeed() {
return BigInt(Math.floor((Math.random() - 0.5) * 2 * Number.MAX_SAFE_INTEGER))
}
export function randomInt() {
return Math.floor(Math.random() * 4294967296) - 2147483648
}
export function generateUUID() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
const r = Math.random()*16|0
const v = c == 'x' ? r : (r&0x3|0x8)
return v.toString(16)
})
}
export function generateColor() {
return Math.floor(Math.random() * 16777215)
}
function intToUnsigned(n: number) {
n |= 0 // Force to signed 32-bit integer
return n < 0 ? n + 0x100000000 : n
}
export function intToHexRgb(c: number | undefined) {
return c ? '#' + (c & 0xFFFFFF).toString(16).padStart(6, '0') : '#000000'
}
export function intToDisplayHexRgb(c: number | undefined) {
return c ? '#' + intToUnsigned(c).toString(16).toUpperCase().padStart(6, '0') : '#000000'
}
export function htmlEncode(str: string) {
return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')
.replace(/"/g, '&quot;').replace(/'/g, '&#x27;').replace(/\//g, '&#x2F;')
}
export function hashString(s: string) {
let h = 0
for(let i = 0; i < s.length; i++)
h = Math.imul(31, h) + s.charCodeAt(i) | 0
return h
}
export function cleanUrl(url: string) {
return `/${url}/`.replaceAll(/\/\/+/g, '/')
}
export function getPath(url: string) {
const searchIndex = url.indexOf('?')
if (searchIndex >= 0) {
url = url.slice(0, searchIndex)
}
return cleanUrl(url)
}
export function getGenerator(url: string) {
const trimmedUrl = getPath(url).replace(/^\//, '').replace(/\/$/, '')
return config.generators.find(g => g.url === trimmedUrl)
}
export function changeUrl({ path, search, hash, replace }: { path?: string, search?: string, hash?: string, replace?: boolean }) {
const url = (path !== undefined ? cleanUrl(path) : location.pathname)
+ (search !== undefined ? (search.startsWith('?') || search.length === 0 ? search : '?' + search) : location.search)
+ (hash !== undefined ? (hash.startsWith('#') ? hash : '#' + hash) : location.hash)
route(url, replace)
}
export function parseFrontMatter(source: string): Record<string, any> {
const data = yaml.load(source.substring(3, source.indexOf('---', 3)))
if (!isObject(data)) return {}
return data
}
export function versionContent(content: string, version: string) {
let cursor = 0
while (true) {
const start = content.indexOf('{#', cursor)
if (start < 0) {
break
}
const end = findMatchingClose(content, start + 2)
const vStart = content.indexOf('#[', start + 1)
let sub = ''
if (vStart >= 0 && vStart < end) {
const vEnd = content.indexOf(']', vStart + 2)
const v = content.substring(vStart + 2, vEnd)
if (v === version) {
sub = content.substring(vEnd + 1, end).trim()
}
} else {
const key = content.substring(start + 2, end)
const versionConfig = config.versions.find(v => v.id === version)
sub = ({
version: versionConfig?.id,
pack_format: versionConfig?.pack_format.toString(),
} as Record<string, string | undefined>)[key] ?? ''
}
content = content.substring(0, start) + sub + content.substring(end + 2)
cursor = start
}
return content
}
function findMatchingClose(source: string, index: number) {
let depth = 0
let iteration = 0
while (iteration++ < 1000) {
const close = source.indexOf('#}', index)
const open = source.indexOf('{#', index)
if (close < 0) {
console.warn('Missing closing bracket')
return source.length
}
if (open < 0) {
if (depth === 0) {
return close
} else {
depth -= 1
index = close + 2
}
} else if (open < close) {
depth += 1
index = open + 2
} else if (depth === 0) {
return close
} else {
depth -= 1
index = close + 2
}
}
console.warn('Exceeded max iterations while finding closing bracket')
return source.length
}
export type Color = [number, number, number]
export function stringToColor(str: string): Color {
const h = Math.abs(hashString(str))
return [h % 256, (h >> 8) % 256, (h >> 16) % 256]
}
export function rgbToHex(color: Color): string {
if (!Array.isArray(color) || color.length !== 3) return '#000000'
const [r, g, b] = color
return '#' + decToHex(r) + decToHex(g) + decToHex(b)
}
export function hexToRgb(hex: string | undefined): Color {
if (typeof hex !== 'string') return [0, 0, 0]
const num = parseInt(hex.startsWith('#') ? hex.slice(1) : hex, 16)
const r = (num >> 16) & 255
const g = (num >> 8) & 255
const b = num & 255
return [r, g, b]
}
export function square(a: number) {
return a * a
}
export function clamp(a: number, b: number, c: number) {
return Math.max(b, Math.min(a, c))
}
export function clampedLerp(a: number, b: number, c: number): number {
if (c < 0) {
return a
} else if (c > 1) {
return b
} else {
return lerp(c, a, b)
}
}
export function lerp(a: number, b: number, c: number): number {
return b + a * (c - b)
}
export function lerp2(a: number, b: number, c: number, d: number, e: number, f: number): number {
return lerp(b, lerp(a, c, d), lerp(a, e, f))
}
export function lerp3(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) {
return lerp(c, lerp2(a, b, d, e, f, g), lerp2(a, b, h, i, j, k))
}
export function smoothstep(x: number): number {
return x * x * x * (x * (x * 6 - 15) + 10)
}
export function message(e: unknown): string {
if (e instanceof Error) return e.message
return `${e}`
}
export const deepClone = rfdc()
/**
* MIT License
*
* Copyright (c) 2017 Evgeny Poberezkin
*
* https://github.com/epoberezkin/fast-deep-equal/blob/master/LICENSE
*/
export function deepEqual(a: any, b: any) {
if (a === b) return true
if (a && b && typeof a == 'object' && typeof b == 'object') {
if (a.constructor !== b.constructor) return false
let length, i
if (Array.isArray(a)) {
length = a.length
if (length != b.length) return false
for (i = 0; i < length; i++) {
if (!deepEqual(a[i], b[i])) return false
}
return true
}
if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf()
if (a.toString !== Object.prototype.toString) return a.toString() === b.toString()
const keys = Object.keys(a)
length = keys.length
if (length !== Object.keys(b).length) return false
for (i = length; i-- !== 0;)
if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false
for (i = length; i-- !== 0;) {
const key = keys[i]
if (!deepEqual(a[key], b[key])) return false
}
return true
}
return a !== a && b !== b
}
export class BiMap<A, B> {
public readonly forward: Map<A, B>
public readonly backward: Map<B, A>
constructor() {
this.forward = new Map()
this.backward = new Map()
}
public set(a: A, b: B) {
this.forward.set(a, b)
this.backward.set(b, a)
}
public getA(key: B) {
return this.backward.get(key)
}
public getB(key: A) {
return this.forward.get(key)
}
public getOrPut(key: A, defaultValue: B) {
const b = this.forward.get(key)
if (b === undefined) {
this.set(key, defaultValue)
return defaultValue
}
return b
}
public computeIfAbsent(key: A, value: () => B) {
const b = this.forward.get(key)
if (b === undefined) {
const newValue = value()
this.set(key, newValue)
return newValue
}
return b
}
}
export async function readZip(file: File | ArrayBuffer, predicate: (name: string) => boolean = () => true): Promise<[string, Uint8Array][]> {
const buffer = file instanceof File ? await file.arrayBuffer() : file
const reader = new zip.ZipReader(new zip.BlobReader(new Blob([buffer])))
const entries = await reader.getEntries()
return await Promise.all(entries
.filter(e => !e.directory && predicate(e.filename))
.map(async e => {
const writer = new zip.Uint8ArrayWriter()
return [e.filename, await e.getData?.(writer)]
})
)
}
export async function writeZip(entries: [string, Uint8Array][]): Promise<string> {
const writer = new zip.ZipWriter(new zip.Data64URIWriter('application/zip'))
await Promise.all(entries.map(async ([name, data]) => {
await writer.add(name, new zip.Uint8ArrayReader(data))
}))
return await writer.close()
}
export function shuffle<T>(array: T[]) {
let i = array.length
while (i != 0) {
const j = Math.floor(Math.random() * i)
i -= 1;
[array[i], array[j]] = [array[j], array[i]]
}
return array
}
export function computeIfAbsent<K, V>(map: Map<K, V>, key: K, getter: (key: K) => V): V {
const existing = map.get(key)
if (existing) {
return existing
}
const value = getter(key)
map.set(key, value)
return value
}
export async function computeIfAbsentAsync<K, V>(map: Map<K, V>, key: K, getter: (key: K) => Promise<V>): Promise<V> {
const existing = map.get(key)
if (existing) {
return existing
}
const value = await getter(key)
map.set(key, value)
return value
}
export function getWeightedRandom<T>(random: Random, entries: T[], getWeight: (entry: T) => number) {
let totalWeight = 0
for (const entry of entries) {
totalWeight += getWeight(entry)
}
if (totalWeight <= 0) {
return undefined
}
let n = random.nextInt(totalWeight)
for (const entry of entries) {
n -= getWeight(entry)
if (n < 0) {
return entry
}
}
return undefined
}
export function iterateWorld2D<D>(img: ImageData, transform: mat3, getData: (x: number, y: number) => D, getColor: (d: D) => [number, number, number]) {
const pos = vec2.create()
const arr = Array(img.width * img.height)
for (let x = 0; x < img.width; x += 1) {
for (let y = 0; y < img.height; y += 1) {
const i = x + y * img.width
vec2.transformMat3(pos, vec2.fromValues(x, y), transform)
arr[i] = getData(Math.floor(pos[0]), -Math.floor(pos[1]))
}
}
for (let i = 0; i < img.width * img.height; i += 1) {
const color = getColor(arr[i])
img.data[4 * i] = color[0]
img.data[4 * i + 1] = color[1]
img.data[4 * i + 2] = color[2]
img.data[4 * i + 3] = 255
}
}
function makeFloat(a: number) {
return a > 3.4028235E38 ? Infinity : a < -3.4028235E38 ? -Infinity : a
}
const G = 3 + 2 * Math.sqrt(2)
const CS = Math.cos(Math.PI / 8)
const SS = Math.sin(Math.PI / 8)
function approxGivensQuat(a: number, b: number, c: number): [number, number] {
const d = 2 * (a - c)
if (makeFloat(G * b * b) < makeFloat(d * d)) {
const e = 1 / Math.sqrt(b * b + d * d)
return [e * b, e * d]
} else {
return [SS, CS]
}
}
function qrGivensQuat(a: number, b: number): [number, number] {
const c = Math.hypot(a, b)
let d = c > 1e-6 ? b : 0
let e = Math.abs(a) + Math.max(c, 1e-6)
if (a < 0) {
[d, e] = [e, d]
}
const f = 1 / Math.sqrt(e * e + d * d)
return [d * f, e * f]
}
// modifies the passed matrix
function stepJacobi(m: Matrix3): quat {
const q = quat.create()
if (m.m01 * m.m01 + m.m10 * m.m10 > 1e-6) {
const [a, b] = approxGivensQuat(m.m00, 0.5 * (m.m01 + m.m10), m.m11)
const r = quat.fromValues(0, 0, a, b)
const c = b * b - a * a
const d = -2 * a * b
quat.mul(q, q, r)
const n = new Matrix3()
n.m00 = c
n.m11 = c
n.m01 = -d
n.m10 = d
m.mul(n)
n.transpose().mul(m)
m.copy(n)
}
if (m.m02 * m.m02 + m.m20 * m.m20 > 1e-6) {
const pair = approxGivensQuat(m.m00, 0.5 * (m.m02 + m.m20), m.m22)
const a = -pair[0]
const b = pair[1]
const r = quat.fromValues(0, a, 0, b)
const c = b * b - a * a
const d = -2 * a * b
quat.mul(q, q, r)
const n = new Matrix3()
n.m00 = c
n.m22 = c
n.m02 = d
n.m20 = -d
m.mul(n)
n.transpose().mul(m)
m.copy(n)
}
if (m.m12 * m.m12 + m.m21 * m.m21 > 1e-6) {
const [a, b] = approxGivensQuat(m.m11, 0.5 * (m.m12 + m.m21), m.m22)
const r = quat.fromValues(a, 0, 0, b)
const c = b * b - a * a
const d = -2 * a * b
quat.mul(q, q, r)
const n = new Matrix3()
n.m11 = c
n.m22 = c
n.m12 = -d
n.m21 = d
m.mul(n)
n.transpose().mul(m)
m.copy(n)
}
return q
}
export function svdDecompose(m: Matrix3): [quat, Vector, quat] {
const q = quat.create()
const r = quat.create()
const n = m.clone()
.transpose()
.mul(m)
for (let i = 0; i < 5; i += 1) {
quat.mul(r, r, stepJacobi(n))
}
quat.normalize(r, r)
const p0 = m.clone()
.mul(Matrix3.fromQuat(r))
const [a1, b1] = m.m00 < 1e-6
? qrGivensQuat(p0.m11, -p0.m10)
: qrGivensQuat(p0.m00, p0.m01)
const c1 = b1 * b1 - a1 * a1
const d1 = -2 * a1 * b1
const s1 = quat.fromValues(0, 0, a1, b1)
quat.mul(q, q, s1)
const p1 = new Matrix3()
p1.m00 = c1
p1.m11 = c1
p1.m01 = d1
p1.m10 = -d1
p1.mul(p0)
const pair = m.m00 < 1e-6
? qrGivensQuat(p1.m22, -p1.m20)
: qrGivensQuat(p1.m00, p1.m02)
const a2 = -pair[0]
const b2 = pair[1]
const c2 = b2 * b2 - a2 * a2
const d2 = -2 * a2 * b2
const s2 = quat.fromValues(0, a2, 0, b2)
quat.mul(q, q, s2)
const p2 = new Matrix3()
p2.m00 = c2
p2.m22 = c2
p2.m02 = -d2
p2.m20 = d2
p2.mul(p1)
const [a3, b3] = m.m11 < 1e-6
? qrGivensQuat(p2.m22, -p2.m21)
: qrGivensQuat(p2.m11, p2.m12)
const c3 = b3 * b3 - a3 * a3
const d3 = -2 * a3 * b3
const s3 = quat.fromValues(a3, 0, 0, b3)
quat.mul(q, q, s3)
const p3 = new Matrix3()
p3.m11 = c3
p3.m22 = c3
p3.m12 = d3
p3.m21 = -d3
p3.mul(p2)
quat.scale(q, q, Math.sqrt(1))
const scale = new Vector(p3.m00, p3.m11, p3.m22)
quat.conjugate(r, r)
return [q, scale, r]
}
export function composeMatrix(translation: Vector, leftRotation: quat, scale: Vector, rightRotation: quat) {
return new Matrix4()
.translate(translation)
.mul(Matrix4.fromQuat(leftRotation))
.scale(scale)
.mul(Matrix4.fromQuat(rightRotation))
}
export interface PatchLine {
line: string
before?: number
after?: number
}
export function parseGitPatch(patch: string) {
const source = patch.split('\n')
const result: PatchLine[] = []
let before = 1
let after = 1
for (let i = 0; i < source.length; i += 1) {
const line = source[i]
if (line.startsWith('Index: ') || line.startsWith('===')
|| line.startsWith('---') || line.startsWith('+++')
|| line.startsWith('\\') || line.length === 0) {
continue
}
if (line.startsWith('@')) {
const match = line.match(/^@@ -(\d+)(?:,(?:\d+))? \+(\d+)(?:,(?:\d+))? @@/)
if (!match) throw new Error(`Invalid patch pattern at line ${i+1}: ${line}`)
result.push({ line })
before = Number(match[1])
after = Number(match[2])
} else if (line.startsWith(' ')) {
result.push({ line, before, after })
before += 1
after += 1
} else if (line.startsWith('+')) {
result.push({ line, after })
after += 1
} else if (line.startsWith('-')) {
result.push({ line, before })
before += 1
} else {
throw new Error(`Invalid patch, got '${line.charAt(0)}' at line ${i+1}`)
}
}
return result
}
const legacyFolders = new Set(['loot_table', 'predicate', 'item_modifier', 'advancement', 'recipe', 'tag/function', 'tag/item', 'tag/block', 'tag/fluid', 'tag/entity_type', 'tag/game_event'])
export function genPath(gen: ConfigGenerator, version: VersionId) {
const path = gen.path ?? gen.id
if (!checkVersion(version, '1.21') && legacyFolders.has(gen.id)) {
return path + 's'
}
return path
}
export function jsonToNbt(value: unknown): NbtTag {
if (typeof value === 'string') {
return new NbtString(value)
}
if (typeof value === 'number') {
return Number.isInteger(value) ? new NbtInt(value) : new NbtDouble(value)
}
if (typeof value === 'boolean') {
return new NbtByte(value)
}
if (Array.isArray(value)) {
return new NbtList(value.map(jsonToNbt))
}
if (typeof value === 'object' && value !== null) {
return new NbtCompound(
new Map(Object.entries(value ?? {})
.map(([k, v]) => [k, jsonToNbt(v)]))
)
}
return new NbtByte(0)
}
export function mergeTextComponentStyles(text: unknown, style: Record<string, unknown>) {
if (typeof text === 'string') {
return { ...style, text }
}
if (Array.isArray(text)) {
return { ...style, ...text[0], extra: text.slice(1) }
}
if (typeof text === 'object' && text !== null) {
return { ...style, ...text }
}
return { ...style, text: '' }
}
export function makeDescriptionId(prefix: string, id: Identifier | undefined) {
if (id === undefined) {
return `${prefix}.unregistered_sadface`
}
return `${prefix}.${id.namespace}.${id.path.replaceAll('/', '.')}`
}
export function safeJsonParse(text: string): any {
try {
return JSON.parse(text)
} catch (e) {
return undefined
}
}
+18
View File
@@ -0,0 +1,18 @@
import { useEffect } from 'preact/hooks'
declare const ethicalads: any
type AdProps = {
type: 'text' | 'image',
id: string,
}
export function Ad({ type, id }: AdProps) {
useEffect(() => {
document.getElementById('ad-placeholder')?.remove()
if ('ethicalads' in window) {
ethicalads.load()
}
}, [])
return <div data-ea-publisher="misode-github-io" data-ea-type={type} class="ad dark flat" id={id}></div>
}
+21
View File
@@ -0,0 +1,21 @@
import { hashString } from '../Utils.js'
import { useLocale } from '../contexts/Locale.jsx'
import { Octicon } from './index.js'
interface Props {
label: string,
active?: boolean,
onClick?: (e: MouseEvent) => unknown,
}
export function Badge({ label, active, onClick }: Props) {
const { locale } = useLocale()
const color = {
breaking: 5,
obsolete: 340,
}[label] ?? (hashString(label) % 360)
return <div class={`badge${active ? ' active' : ''}${onClick ? ' clickable' : ''}${label === 'obsolete' ? ' tooltipped tip-se' : ''}`} style={`--tint: ${color}`} onClick={onClick} aria-label={{ obsolete: locale('change.obsolete') }[label]}>
{label === 'breaking' && Octicon.alert}
{label === 'obsolete' && Octicon.circle_slash}
{label}
</div>
}
+18
View File
@@ -0,0 +1,18 @@
import { Octicon } from './index.js'
type BtnProps = {
icon?: keyof typeof Octicon,
label?: string,
active?: boolean,
tooltip?: string,
tooltipLoc?: 'se' | 'sw' | 'nw',
class?: string,
onClick?: (event: MouseEvent) => unknown,
disabled?: boolean,
}
export function Btn({ icon, label, active, class: clazz, tooltip, tooltipLoc, onClick, disabled }: BtnProps) {
return <div class={`btn${active ? ' active' : ''}${clazz ? ` ${clazz}` : ''}${tooltip ? ` tooltipped tip-${tooltipLoc ?? 'sw'}` : ''}${disabled ? ' disabled' : ''}${active ? ' tip-shown' : ''}`} onClick={disabled ? undefined : onClick} aria-label={tooltip}>
{icon && Octicon[icon]}
{label && <span>{label}</span>}
</div>
}
+39
View File
@@ -0,0 +1,39 @@
import { useEffect, useRef } from 'preact/hooks'
import { hexId } from '../Utils.js'
import { Octicon } from './index.js'
type BtnInputProps = {
icon?: keyof typeof Octicon,
label?: string,
large?: boolean,
larger?: boolean,
doSelect?: number,
value?: string,
placeholder?: string,
dataList?: string[],
onChange?: (value: string) => unknown,
}
export function BtnInput({ icon, label, large, larger, doSelect, value, placeholder, dataList, onChange }: BtnInputProps) {
const onInput = onChange === undefined ? () => {} : (e: any) => {
const value = (e.target as HTMLInputElement).value
onChange?.(value)
}
const ref = useRef<HTMLInputElement>(null)
useEffect(() => {
if (doSelect && ref.current) {
ref.current.select()
}
}, [doSelect])
const dataListId = dataList && hexId()
return <div class={`btn btn-input ${large ? 'large-input' : ''} ${larger ? 'larger-input' : ''}`} onClick={e => e.stopPropagation()}>
{icon && Octicon[icon]}
{label && <span>{label}</span>}
<input ref={ref} type="text" value={value} onChange={onInput} placeholder={placeholder} list={dataListId} />
{dataList && <datalist id={dataListId}>
{dataList.map(e => <option value={e} />)}
</datalist>}
</div>
}
+21
View File
@@ -0,0 +1,21 @@
import { Octicon } from './index.js'
interface Props {
link?: string,
icon?: keyof typeof Octicon,
label?: string,
tooltip?: string,
tooltipLoc?: 'se' | 'sw' | 'nw',
swapped?: boolean,
}
export function BtnLink({ link, icon, label, tooltip, tooltipLoc, swapped }: Props) {
return <a {...link ? { href: link } : { disabled: true }} class={`btn btn-link${tooltip ? ` tooltipped tip-${tooltipLoc ?? 'sw'}` : ''}`} aria-label={tooltip}>
{swapped ? <>
{label && <span>{label}</span>}
{icon && Octicon[icon]}
</> : <>
{icon && Octicon[icon]}
{label && <span>{label}</span>}
</>}
</a>
}
+24
View File
@@ -0,0 +1,24 @@
import type { ComponentChildren } from 'preact'
import { useFocus } from '../hooks/index.js'
import type { Octicon } from './index.js'
import { Btn } from './index.js'
interface BtnMenuProps extends JSX.HTMLAttributes<HTMLDivElement> {
icon?: keyof typeof Octicon,
label?: string,
relative?: boolean,
tooltip?: string,
tooltipLoc?: 'se' | 'sw' | 'nw',
children: ComponentChildren,
}
export function BtnMenu(props: BtnMenuProps) {
const { icon, label, relative, tooltip, tooltipLoc, children } = props
const [active, setActive] = useFocus()
return <div {...props} class={`btn-menu${relative === false ? ' no-relative' : ''} ${props.class}`}>
<Btn {...{icon, label, tooltip, tooltipLoc}} onClick={() => setActive()} />
{active && <div class="btn-group">
{children}
</div>}
</div>
}
+21
View File
@@ -0,0 +1,21 @@
import type { ComponentChildren } from 'preact'
interface Props {
title?: ComponentChildren,
link?: string,
overlay?: ComponentChildren,
children?: ComponentChildren,
}
export function Card({ title, overlay, link, children }: Props) {
const content = <>
{overlay && <span class="card-overlay">{overlay}</span>}
<div class="card-content">
{title && <h3 class="card-title font-bold text-[1.17em]">{title}</h3>}
{children}
</div>
</>
return link === undefined
? <div class="card">{content}</div>
: <a class="card" href={link} target={link.startsWith('https://') ? '_blank' : undefined}>{content}</a>
}
+93
View File
@@ -0,0 +1,93 @@
import type { ComponentChildren } from 'preact'
import { getCurrentUrl } from 'preact-router'
import { useEffect, useMemo, useState } from 'preact/hooks'
import { useProject } from '../contexts/Project.jsx'
import { useSpyglass } from '../contexts/Spyglass.jsx'
import { useVersion } from '../contexts/Version.jsx'
import { useAsync } from '../hooks/useAsync.js'
import { latestVersion } from '../services/DataFetcher.js'
import { getGenerator, SOURCE_REPO_URL } from '../Utils.js'
import { Octicon } from './index.js'
type ErrorPanelProps = {
error: string | Error,
prefix?: string,
reportable?: boolean,
onDismiss?: () => unknown,
body?: string,
children?: ComponentChildren,
}
export function ErrorPanel({ error, prefix, reportable, onDismiss, body: body_, children }: ErrorPanelProps) {
const { version } = useVersion()
const { service } = useSpyglass()
const { projectUri } = useProject()
const [stackVisible, setStackVisible] = useState(false)
const [stack, setStack] = useState<string | undefined>(undefined)
const name = (prefix ?? '') + (error instanceof Error ? error.message : error)
const gen = getGenerator(getCurrentUrl())
const { value: source } = useAsync(async () => {
if (!service || !gen) {
return undefined
}
const uri = projectUri ?? service.getUnsavedFileUri(gen)
if (!uri) {
return undefined
}
return await service.readFile(uri)
}, [service, version, projectUri, gen])
useEffect(() => {
if (error instanceof Error) {
const stack = error.stack!.split('\n').map(line => {
return line.replace(/^(\s+)at (?:async )?(https?:.*)/, '$1at ($2)')
})
setStack(stack.join('\n'))
import('sourcemapped-stacktrace').then(({ mapStackTrace }) => {
mapStackTrace(stack.join('\n'), (mapped) => {
const mappedStack = mapped.map(line => {
return line.replace(/..\/..\/src\//, 'src/')
}).join('\n')
setStack(mappedStack)
})
})
}
}, [error])
const url = useMemo(() => {
let url =`${SOURCE_REPO_URL}/issues/new`
const fullName = (error instanceof Error ? `${error.name}: ` : '') + name
url += `?title=${encodeURIComponent(fullName)}`
let body = ''
body += `## Crash report\n * Page url: \`${location.href}\`\n`
if (gen) {
body += ` * Generator ID: \`${gen.id}\`\n`
}
body += ` * Current version: \`${version}\`\n`
body += ` * Latest version: \`${latestVersion}\`\n`
if (error instanceof Error && stack) {
body += `\n### Stack trace\n\`\`\`\n${fullName}\n${stack}\n\`\`\`\n`
}
if (source) {
body += `\n### Generator JSON\n<details>\n<pre>\n${source}\n</pre>\n</details>\n`
}
if (body_) {
body += body_
}
url += `&body=${encodeURIComponent(body)}`
return url
}, [error, name, body_, version, stack, source, gen?.id])
return <div class="error">
{onDismiss && <div class="error-dismiss" onClick={onDismiss}>{Octicon.x}</div>}
<h3 class="font-bold text-xl !my-[10px]">
{(prefix ?? '') + (error instanceof Error ? error.message : error)}
{stack && <span onClick={() => setStackVisible(!stackVisible)}>
{Octicon.info}
</span>}
</h3>
{stack && stackVisible && <pre>{stack}</pre>}
{reportable !== false && <p>If you think this is a bug, you can report it <a href={url} target="_blank">on GitHub</a></p>}
{children}
</div>
}
+67
View File
@@ -0,0 +1,67 @@
import type { ComponentChildren } from 'preact'
import { useCallback, useMemo, useRef, useState } from 'preact/hooks'
import { useFocus } from '../hooks/index.js'
interface Props {
placeholder?: string
relative?: boolean
class?: string
getResults: (search: string, close: () => void) => ComponentChildren
children: ComponentChildren
}
export function FancyMenu({ placeholder, relative, class: clazz, getResults, children }: Props) {
const [active, setActive] = useFocus()
const [search, setSearch] = useState('')
const inputRef = useRef<HTMLInputElement>(null)
const resultsRef = useRef<HTMLDivElement>(null)
const results = useMemo(() => {
return getResults(search, () => setActive(false))
}, [getResults, setActive, search])
const open = useCallback(() => {
setActive(true)
setTimeout(() => {
inputRef.current?.select()
})
}, [setActive, inputRef])
const handleKeyDown = useCallback((e: KeyboardEvent) => {
if (e.key == 'Enter') {
if (document.activeElement == inputRef.current) {
const firstResult = resultsRef.current?.firstElementChild
if (firstResult instanceof HTMLElement) {
firstResult.click()
}
}
} else if (e.key == 'ArrowDown') {
const nextElement = document.activeElement == inputRef.current
? resultsRef.current?.firstElementChild
: document.activeElement?.nextElementSibling
if (nextElement instanceof HTMLElement) {
nextElement.focus()
}
e.preventDefault()
} else if (e.key == 'ArrowUp') {
const prevElement = document.activeElement?.previousElementSibling
if (prevElement instanceof HTMLElement) {
prevElement.focus()
}
e.preventDefault()
} else if (e.key == 'Escape') {
setActive(false)
}
}, [setActive, inputRef])
return <div class={`${relative ? 'relative' : ''}`}>
<div onClick={open}>
{children}
</div>
<div class={`fancy-menu absolute flex flex-col gap-2 p-2 rounded-lg drop-shadow-xl ${clazz} ${active ? '' : 'hidden'}`} onKeyDown={handleKeyDown}>
<input ref={inputRef} type="text" class="py-1 px-2 w-full rounded" value={search} placeholder={placeholder} onInput={(e) => setSearch((e.target as HTMLInputElement).value)} onClick={(e) => e.stopPropagation()} />
{active && <div ref={resultsRef} class="fancy-menu-results overflow-y-auto overscroll-none flex flex-col pr-2 h-96 max-h-max w-max max-w-full">
{results}
</div>}
</div>
</div>
}
+40
View File
@@ -0,0 +1,40 @@
import { useCallback, useRef } from 'preact/hooks'
import { useLocale } from '../contexts/index.js'
import { Btn } from './index.js'
interface Props {
value: File | undefined,
onChange: (file: File) => unknown,
label?: string,
accept?: string,
}
export function FileUpload({ value, onChange, label, accept }: Props) {
const { locale } = useLocale()
const fileUpload = useRef<HTMLInputElement>(null)
const onUpload = () => {
if (fileUpload.current === null) return
for (let i = 0; i < (fileUpload.current.files?.length ?? 0); i++) {
const file = fileUpload.current.files![i]
onChange(file)
}
}
const onDrop = useCallback((e: DragEvent) => {
e.preventDefault()
if(!e.dataTransfer) return
for (let i = 0; i < e.dataTransfer.files.length; i++) {
const file = e.dataTransfer.files[i]
onChange(file)
}
}, [onChange])
return <label class="file-upload" onDrop={onDrop} onDragOver={e => e.preventDefault()}>
<input ref={fileUpload} type="file" onChange={onUpload} accept={accept} />
<Btn label={label ?? locale('choose_file')} />
<span>
{value ? value.name : locale('no_file_chosen')}
</span>
</label>
}
+24
View File
@@ -0,0 +1,24 @@
import { useLocale } from '../contexts/index.js'
import { SOURCE_REPO_URL } from '../Utils.js'
import { Octicon } from './index.js'
interface Props {
donate?: boolean,
}
export function Footer({ donate }: Props) {
const { locale } = useLocale()
return <footer>
<p>
<span>{locale('developed_by')} <a href="https://github.com/misode" target="_blank" rel="noreferrer">Misode</a></span>
</p>
{donate !== false && <p class="donate">
{Octicon.heart}
<a href="https://ko-fi.com/misode" target="_blank" rel="noreferrer">{locale('donate')}</a>
</p>}
<p>
{Octicon.mark_github}
<span>{locale('source_code_on')} <a href={SOURCE_REPO_URL} target="_blank" rel="noreferrer">{locale('github')}</a></span>
</p>
</footer>
}
+28
View File
@@ -0,0 +1,28 @@
import GiscusReact from '@giscus/react'
import { useTheme } from '../contexts/index.js'
interface Props {
term?: string,
}
export function Giscus({ term }: Props) {
const { actualTheme } = useTheme()
const themeSuffix = actualTheme === 'light' ? '-burn' : ''
const themeUrl = (import.meta as any).env.DEV
? `http://localhost:3000/src/styles/giscus${themeSuffix}.css`
: `${location.protocol}//${location.host}/assets/giscus${themeSuffix}.css`
return <div class="giscus-container">
<GiscusReact
repo="misode/misode.github.io"
repoId="MDEwOlJlcG9zaXRvcnkxOTIyNTQyMzA="
category="Site"
categoryId="DIC_kwDOC3WRFs4COB8r"
mapping={term ? 'specific' : 'pathname'}
term={term}
reactionsEnabled="1"
emitMetadata="0"
inputPosition="top"
theme={themeUrl}
lang="en" />
</div>
}
+95
View File
@@ -0,0 +1,95 @@
import { getCurrentUrl, Link } from 'preact-router'
import { useCallback } from 'preact/hooks'
import type { ConfigGenerator } from '../Config.js'
import config from '../Config.js'
import { useLocale, useTheme, useTitle, useVersion } from '../contexts/index.js'
import { cleanUrl, getGenerator, SOURCE_REPO_URL } from '../Utils.js'
import { FancyMenu } from './FancyMenu.jsx'
import { searchGenerators } from './generator/GeneratorList.jsx'
import { Btn, BtnMenu, Icons, Octicon } from './index.js'
const Themes: Record<string, keyof typeof Octicon> = {
system: 'device_desktop',
dark: 'moon',
light: 'sun',
}
export function Header() {
const { lang, locale, changeLocale: changeLanguage } = useLocale()
const { theme, changeTheme } = useTheme()
const { title } = useTitle()
const url = getCurrentUrl()
const gen = getGenerator(url)
return <header>
<div class="title flex items-center">
<Link class="home-link pr-1" href="/" aria-label={locale('home')}>{Icons.home}</Link>
{gen
? <GeneratorTitle title={title} gen={gen} />
: <h1 class="font-bold px-1 text-lg sm:text-2xl">{title}</h1>}
</div>
<nav>
<ul>
<li>
<BtnMenu icon="globe" tooltip={locale('language')}>
{config.languages.map(({ code, name }) =>
<Btn label={name} active={code === lang}
onClick={() => changeLanguage(code)} />
)}
</BtnMenu>
</li>
<li>
<BtnMenu icon={Themes[theme]} tooltip={locale('theme')}>
{Object.entries(Themes).map(([th, icon]) =>
<Btn icon={icon} label={locale(`theme.${th}`)} active={th === theme}
onClick={() => changeTheme(th)} />
)}
</BtnMenu>
</li>
<li class="dimmed">
<a href={SOURCE_REPO_URL} target="_blank" rel="noreferrer" class="tooltipped tip-sw" aria-label={locale('github')}>
{Octicon.mark_github}
</a>
</li>
</ul>
</nav>
</header>
}
interface GeneratorTitleProps {
title: string
gen: ConfigGenerator
}
function GeneratorTitle({ title, gen }: GeneratorTitleProps) {
const { locale } = useLocale()
const { version } = useVersion()
const icon = Object.keys(Icons).includes(gen.id) ? gen.id as keyof typeof Icons : undefined
const getGenerators = useCallback((search: string, close: () => void) => {
let results = config.generators
.filter(g => !g.dependency)
.map(g => ({ ...g, name: locale(`generator.${g.id}`).toLowerCase() }))
results = searchGenerators(results, search)
if (results.length === 0) {
return [<span class="note">{locale('generators.no_results')}</span>]
}
return results.map(g =>
<Link class="flex items-center cursor-pointer no-underline rounded p-1" href={cleanUrl(g.url)} onClick={close}>
{locale(`generator.${g.id}`)}
{Object.keys(Icons).includes(g.id) ? Icons[g.id as keyof typeof Icons] : undefined}
<div class="m-auto"></div>
{g.tags?.filter(t => t === 'assets').map(t =>
<div class="badge ml-2 mr-0 text-sm" style="--color: #555;">{t}</div>
)}
</Link>
)
}, [locale, version])
return <FancyMenu getResults={getGenerators} placeholder={locale('generators.search')}>
<h1 class="font-bold flex items-center cursor-pointer text-lg sm:text-2xl">
{title}
{icon && Icons[icon]}
</h1>
</FancyMenu>
}
+73
View File
@@ -0,0 +1,73 @@
const TAG = <svg width="29" height="29" viewBox="0 0 29 29" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M17.8284 0.686291C17.298 0.686291 16.7893 0.897005 16.4142 1.27208L1.44365 16.2426C0.662602 17.0237 0.662602 18.29 1.44365 19.0711L9.92893 27.5563C10.71 28.3374 11.9763 28.3374 12.7574 27.5563L27.7279 12.5858C28.103 12.2107 28.3137 11.702 28.3137 11.1716V2.68629C28.3137 1.58172 27.4183 0.686291 26.3137 0.686291H17.8284ZM23.5 8C24.8807 8 26 6.88071 26 5.5C26 4.11929 24.8807 3 23.5 3C22.1193 3 21 4.11929 21 5.5C21 6.88071 22.1193 8 23.5 8Z"/></svg>
const STRUCTURE = <svg width="28" height="22" viewBox="0 0 28 22" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M26.8426 9.83057L23.3294 9.83057V20.8306C23.3294 21.3829 22.8817 21.8306 22.3294 21.8306H5.3294C4.77712 21.8306 4.3294 21.3829 4.3294 20.8306V9.83057L1.00171 9.83057C-0.017101 9.83057 -0.383456 8.48519 0.494688 7.96864L13.8067 0.138065C14.1279 -0.0509101 14.5276 -0.045538 14.8437 0.152002L27.3726 7.98258C28.2246 8.51506 27.8473 9.83057 26.8426 9.83057ZM15.3294 11.8306C14.7771 11.8306 14.3294 12.2783 14.3294 12.8306V16.8306C14.3294 17.3829 14.7771 17.8306 15.3294 17.8306H18.3294C18.8817 17.8306 19.3294 17.3829 19.3294 16.8306V12.8306C19.3294 12.2783 18.8817 11.8306 18.3294 11.8306H15.3294Z"/></svg>
export const Icons = {
home: <svg width="32" height="28" viewBox="0 0 32 28" fill="none" xmlns="http://www.w3.org/2000/svg"><rect width="26" height="6" rx="3" fill="#7CB45C"/><rect x="8" width="18" height="6" rx="3" fill="#4BA041"/><rect y="11" width="32" height="6" rx="3" fill="#AAA8A8"/><rect x="11" y="11" width="21" height="6" rx="3" fill="#91908F"/><rect x="11" y="22" width="21" height="6" rx="3" fill="#70B5C3"/><rect x="17" y="22" width="15" height="6" rx="3" fill="#4D989B"/></svg>,
report: <svg width="30" height="36" viewBox="0 0 30 36" xmlns="http://www.w3.org/2000/svg"><path d="M0 16C0 13.7909 1.79086 12 4 12V12C6.20914 12 8 13.7909 8 16V32C8 34.2091 6.20914 36 4 36V36C1.79086 36 0 34.2091 0 32V16Z" fill="#6ACC5D"/><path d="M11 4C11 1.79086 12.7909 0 15 0V0C17.2091 0 19 1.79086 19 4V32C19 34.2091 17.2091 36 15 36V36C12.7909 36 11 34.2091 11 32V4Z" fill="#FF4C4C"/><path d="M22 10C22 7.79086 23.7909 6 26 6V6C28.2091 6 30 7.79086 30 10V32C30 34.2091 28.2091 36 26 36V36C23.7909 36 22 34.2091 22 32V10Z" fill="#E5B442"/><path d="M0 23C0 20.7909 1.79086 19 4 19V19C6.20914 19 8 20.7909 8 23V32C8 34.2091 6.20914 36 4 36V36C1.79086 36 0 34.2091 0 32V23Z" fill="#2BAD1D"/><path d="M11 15C11 12.7909 12.7909 11 15 11V11C17.2091 11 19 12.7909 19 15V32C19 34.2091 17.2091 36 15 36V36C12.7909 36 11 34.2091 11 32V15Z" fill="#C10B0B"/><path d="M22 19C22 16.7909 23.7909 15 26 15V15C28.2091 15 30 16.7909 30 19V32C30 34.2091 28.2091 36 26 36V36C23.7909 36 22 34.2091 22 32V19Z" fill="#CC8E00"/></svg>,
sounds: <svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><circle cx="10" cy="10" r="10" fill="#451475"/><path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 10C3.5 8.27609 4.18482 6.62279 5.40381 5.40381C6.62279 4.18482 8.27609 3.5 10 3.5C11.7239 3.5 13.3772 4.18482 14.5962 5.40381C15.8152 6.62279 16.5 8.27609 16.5 10C16.5 11.7239 15.8152 13.3772 14.5962 14.5962C13.3772 15.8152 11.7239 16.5 10 16.5C8.27609 16.5 6.62279 15.8152 5.40381 14.5962C4.18482 13.3772 3.5 11.7239 3.5 10V10ZM10 2C7.87827 2 5.84344 2.84285 4.34315 4.34315C2.84285 5.84344 2 7.87827 2 10C2 12.1217 2.84285 14.1566 4.34315 15.6569C5.84344 17.1571 7.87827 18 10 18C12.1217 18 14.1566 17.1571 15.6569 15.6569C17.1571 14.1566 18 12.1217 18 10C18 7.87827 17.1571 5.84344 15.6569 4.34315C14.1566 2.84285 12.1217 2 10 2V2ZM8.379 7.227C8.34101 7.20412 8.29762 7.19175 8.25327 7.19117C8.20892 7.19059 8.16522 7.20181 8.12664 7.2237C8.08807 7.24558 8.05601 7.27733 8.03375 7.3157C8.0115 7.35406 7.99985 7.39765 8 7.442V12.559C8.00003 12.6033 8.0118 12.6467 8.03413 12.685C8.05646 12.7232 8.08854 12.7548 8.12708 12.7765C8.16563 12.7983 8.20926 12.8095 8.25352 12.8088C8.29778 12.8082 8.34108 12.7958 8.379 12.773L12.643 10.214C12.6798 10.1917 12.7103 10.1604 12.7315 10.1229C12.7526 10.0854 12.7638 10.043 12.7638 10C12.7638 9.95695 12.7526 9.91463 12.7315 9.87714C12.7103 9.83965 12.6798 9.80825 12.643 9.786L8.379 7.227Z" fill="#C5A5E6"/></svg>,
customized: <svg width="28" height="29" viewBox="0 0 28 29" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M18 16.5V11" stroke="#4BA041" stroke-width="2"/><rect x="15" y="6" width="6" height="6" rx="2" fill="#4BA041"/><path d="M9 11.5V5" stroke="#4BA041" stroke-width="2"/><rect x="6" width="6" height="6" rx="2" fill="#4BA041"/><path d="M24 24H8C5.79086 24 4 22.2091 4 20V8.99999C6 8.5 8 8.49999 9.5 9.99999C10.5 11 11.5 12.9368 13 14.4368C13.9499 15.3867 15.6497 15.9119 17.5 16C19 16.0714 21.078 15.3978 22 14.9368C23 14.4368 26 14 28 14.4368V20C28 22.2091 26.2091 24 24 24Z" fill="#91908F"/><path fill-rule="evenodd" clip-rule="evenodd" d="M6 26.2968H22C22.5869 26.2968 23.1444 26.1704 23.6465 25.9433C23.0189 27.3311 21.6222 28.2968 20 28.2968H4C1.79086 28.2968 0 26.5059 0 24.2968V13.2968C0.673018 13.1285 1.34604 13.0169 2 13V22.2968C2 24.5059 3.79086 26.2968 6 26.2968Z" fill="#4D989B"/></svg>,
convert: <svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10.55 35.4698C10.9312 35.8188 11.4355 36.0087 11.9565 35.9997C12.4775 35.9907 12.9746 35.7833 13.3431 35.4214C13.7115 35.0595 13.9226 34.5712 13.9318 34.0595C13.941 33.5477 13.7476 33.0525 13.3924 32.678L8.7802 28.1479H32.0823C32.6157 28.1479 33.1272 27.9398 33.5044 27.5693C33.8815 27.1989 34.0934 26.6964 34.0934 26.1725C34.0934 25.6486 33.8815 25.1462 33.5044 24.7757C33.1272 24.4053 32.6157 24.1972 32.0823 24.1972H8.7802L13.3924 19.667C13.7476 19.2926 13.941 18.7973 13.9318 18.2856C13.9226 17.7738 13.7115 17.2855 13.3431 16.9236C12.9746 16.5617 12.4775 16.3544 11.9565 16.3454C11.4355 16.3363 10.9312 16.5263 10.55 16.8752L2.50552 24.7766C2.12891 25.147 1.91737 25.6491 1.91737 26.1725C1.91737 26.696 2.12891 27.1981 2.50552 27.5684L10.55 35.4698Z" fill="#8012C5"/><path d="M25.46 20.5674C25.2758 20.7615 25.0538 20.9171 24.8071 21.0251C24.5604 21.1331 24.294 21.1912 24.024 21.1958C23.7539 21.2005 23.4857 21.1517 23.2352 21.0524C22.9848 20.953 22.7573 20.8051 22.5663 20.6175C22.3753 20.4299 22.2247 20.2065 22.1236 19.9605C22.0224 19.7145 21.9727 19.451 21.9775 19.1857C21.9823 18.9205 22.0414 18.6589 22.1513 18.4166C22.2612 18.1742 22.4197 17.9561 22.6173 17.7753L27.2299 13.2447H3.9256C3.39217 13.2447 2.88058 13.0366 2.50339 12.6661C2.1262 12.2956 1.91429 11.7931 1.91429 11.2692C1.91429 10.7452 2.1262 10.2427 2.50339 9.87225C2.88058 9.50176 3.39217 9.29363 3.9256 9.29363H27.2299L22.6173 4.76306C22.2621 4.38856 22.0686 3.89324 22.0778 3.38144C22.087 2.86964 22.2981 2.38133 22.6666 2.01937C23.0351 1.65742 23.5323 1.45009 24.0533 1.44106C24.5744 1.43203 25.0787 1.622 25.46 1.97096L33.5052 9.87312C33.8819 10.2435 34.0934 10.7456 34.0934 11.2692C34.0934 11.7927 33.8819 12.2948 33.5052 12.6652L25.46 20.5674Z" fill="#E5B442"/>
</svg>,
advancement: <svg width="27" height="27" viewBox="0 0 27 27" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5.76943 2.86824L2.18356 0.819176C1.29934 0.313911 0.313911 1.29934 0.819176 2.18356L2.86824 5.76943C2.95458 5.92052 3 6.09154 3 6.26556V20.7344C3 20.9085 2.95459 21.0795 2.86824 21.2306L0.819176 24.8164C0.313911 25.7007 1.29934 26.6861 2.18356 26.1808L5.76943 24.1318C5.92052 24.0454 6.09154 24 6.26556 24H20.7344C20.9085 24 21.0795 24.0454 21.2306 24.1318L24.8164 26.1808C25.7007 26.6861 26.6861 25.7007 26.1808 24.8164L24.1318 21.2306C24.0454 21.0795 24 20.9085 24 20.7344V6.26556C24 6.09154 24.0454 5.92052 24.1318 5.76943L26.1808 2.18356C26.6861 1.29934 25.7007 0.313911 24.8164 0.819176L21.2306 2.86824C21.0795 2.95458 20.9085 3 20.7344 3H6.26556C6.09154 3 5.92052 2.95459 5.76943 2.86824Z"/></svg>,
atlas: <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M28 0C30.2091 0 32 1.79086 32 4V28C32 30.2091 30.2091 32 28 32H4L3.79395 31.9951C1.68056 31.8879 0 30.14 0 28V4C0 1.85996 1.68056 0.112115 3.79395 0.00488281L4 0H28ZM3 28C3 28.5523 3.44772 29 4 29H13V26H3V28ZM16 20V29H21V20H16ZM24 29H28C28.5523 29 29 28.5523 29 28V13H24V29ZM3 20V23H13V20H3ZM4 3C3.44772 3 3 3.44772 3 4V17H13V3H4ZM16 17H21V13H16V17ZM16 10H29V4C29 3.44772 28.5523 3 28 3H16V10Z"/></svg>,
banner_pattern: <svg width="17" height="22" viewBox="0 0 17 22" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="2" width="2" height="17" rx="1" transform="rotate(-90 0 2)"/><path d="M5 19C3.34315 19 2 17.6569 2 16L2 1L15 0.999999L15 16C15 17.6569 13.6569 19 12 19L5 19Z"/><path d="M8 22C6.34315 22 5 20.6569 5 19L5 18L12 18L12 19C12 20.6569 10.6569 22 9 22L8 22Z"/></svg>,
block_definition: <svg width="28" height="30" viewBox="0 0 28 30" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.75 0.272806C13.5437 -0.0909347 14.4563 -0.0909357 15.25 0.272805L26.25 5.31447C27.3163 5.80322 28 6.86864 28 8.04167V21.3583C28 22.5313 27.3163 23.5967 26.25 24.0855L15.25 29.1272C14.4563 29.4909 13.5437 29.4909 12.75 29.1272L1.75004 24.0855C0.683681 23.5967 0 22.5313 0 21.3583V8.04167C0 6.86864 0.683678 5.80322 1.75004 5.31447L12.75 0.272806ZM14 4.10003L6.92266 7.34381L14 10.2391L21.0773 7.34381L14 4.10003ZM24 10.4699V20.7166L16 24.3833V13.7427L24 10.4699ZM12 13.7427L4 10.4699V20.7166L12 24.3833V13.7427Z"/></svg>,
chat_type: <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M4 0C1.79086 0 0 1.79086 0 4V21C0 23.2091 1.79086 25 4 25H8V30.7732C8 31.636 9.01946 32.0938 9.66436 31.5206L17 25H28C30.2091 25 32 23.2091 32 21V4C32 1.79086 30.2091 0 28 0H4Z"/></svg>,
damage_type: <svg width="30" height="28" viewBox="0 0 30 28" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 9V10.8076C1 10.9314 1.04595 11.0509 1.12895 11.1428L15 26.5V8C14.5 5 13 1 7.5 1C2 1 1 6 1 9Z"/><path d="M15 26.5V8M15 26.5L1.12895 11.1428C1.04595 11.0509 1 10.9314 1 10.8076V9C1 6 2 1 7.5 1C13 1 14.5 5 15 8M15 26.5L28.8711 11.1428C28.9541 11.0509 29 10.9314 29 10.8076V9C29 6 27.5 0.999999 23 1C18.5 1 15.5 5 15 8" stroke="currentColor" fill="none" stroke-width="2" stroke-linecap="round"/></svg>,
dialog: <svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M24 0C26.2091 0 28 1.79086 28 4V24C28 26.2091 26.2091 28 24 28H4C1.79086 28 0 26.2091 0 24V4C0 1.79086 1.79086 0 4 0H24ZM15.7324 5C14.9626 3.66667 13.0374 3.66667 12.2676 5L3.60742 20C2.83775 21.3333 3.80029 23 5.33984 23H22.6602C24.1997 23 25.1623 21.3333 24.3926 20L15.7324 5Z" fill="currentColor"/><path d="M14 10L14 15" stroke="currentColor" stroke-width="3" stroke-linecap="round"/><path d="M14 19L14 19.0001" stroke="currentColor" stroke-width="3" stroke-linecap="round"/></svg>,
dimension: <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M19.7659 0.445701C18.5582 0.154357 17.2971 0 16 0C12.7056 0 9.64369 0.995672 7.09887 2.70251C7.94418 3.62868 8.45554 4.49063 8.75229 5.30669C9.09264 6.24263 9.125 7.05145 9.125 7.6875C9.125 7.78933 9.12466 7.88242 9.12434 7.96797V7.96834V7.96869V7.96901V7.96902C9.12247 8.47232 9.12158 8.71409 9.19707 8.93677C9.24638 9.08226 9.36226 9.31309 9.94721 9.60557C10.5615 9.91273 10.7586 9.8353 10.7733 9.82952L10.7739 9.82929C10.8476 9.80165 10.9347 9.73088 11.2191 9.3753L11.256 9.32901C11.4803 9.04661 11.8843 8.53789 12.5239 8.29804C13.2651 8.02009 14.0719 8.16789 14.9472 8.60557C16.4469 9.35541 17.3707 9.72195 17.9896 9.84301C18.2833 9.90046 18.4612 9.89221 18.5724 9.86953C18.6731 9.84897 18.7646 9.80771 18.8753 9.71913C19.2786 9.39647 19.6673 8.76901 19.9604 7.83984C20.2468 6.93156 20.4085 5.83955 20.4378 4.72369C20.4672 3.60868 20.3634 2.50945 20.1445 1.59133C20.0358 1.13577 19.9057 0.75371 19.7659 0.445701ZM5.50368 3.92379C2.13164 6.85717 4.76837e-07 11.1797 4.76837e-07 16C4.76837e-07 16.1436 0.00189157 16.2867 0.00565022 16.4294C1.54401 16.9679 2.98111 16.6462 4.47925 16.2249C4.59499 16.1923 4.71296 16.1585 4.83279 16.1242L4.83282 16.1242C5.68141 15.881 6.62293 15.6113 7.5179 15.5713C8.62706 15.5218 9.72807 15.8138 10.7071 16.7929C11.7646 17.8503 12.0777 19.3283 11.8236 20.6012C11.5699 21.8719 10.7059 23.1043 9.24253 23.4702C8.94395 23.5448 8.87224 23.6435 8.85319 23.6716C8.82014 23.7204 8.77492 23.8288 8.77233 24.0677C8.7697 24.3108 8.81045 24.5892 8.869 24.9304L8.88606 25.0286L8.88606 25.0286C8.93527 25.3102 9 25.6807 9 26C9 27.4332 8.58821 28.8019 8.09018 29.9113C10.4231 31.2406 13.1229 32 16 32C19.5354 32 22.8029 30.8534 25.4511 28.9117C25.3471 28.7646 25.2399 28.6153 25.1301 28.465C24.5506 27.672 23.9089 26.8682 23.2732 26.2107C22.6167 25.5315 22.05 25.0971 21.6286 24.9285C20.8738 24.6266 20.1566 24.1617 19.9616 23.3144C19.8718 22.9244 19.9228 22.5591 20.0033 22.2613C20.0827 21.9675 20.2083 21.6782 20.3292 21.4199C20.3937 21.2823 20.4611 21.1436 20.5296 21.0026L20.5296 21.0024C20.9898 20.055 21.5 19.0047 21.5 17.5C21.5 16.2061 22.0035 15.2171 22.8218 14.4932C23.5953 13.8089 24.6068 13.3989 25.5877 13.1047C26.3248 12.8835 27.1287 12.7056 27.8822 12.5388L27.8824 12.5388L27.8824 12.5388L27.8824 12.5388C28.1297 12.484 28.3716 12.4305 28.6038 12.377C29.5877 12.1506 30.4202 11.9219 31.0528 11.6056C31.1525 11.5557 31.2566 11.5241 31.3612 11.5094C29.9973 6.83578 26.5583 3.04703 22.1087 1.2075C22.3608 2.30151 22.4695 3.54643 22.4372 4.7763C22.404 6.03545 22.2219 7.31843 21.8678 8.4414C21.5202 9.54349 20.9714 10.6035 20.1247 11.2809C19.7989 11.5415 19.4221 11.7373 18.9722 11.8291C18.5328 11.9188 18.0778 11.8982 17.6057 11.8058C16.6928 11.6273 15.5531 11.1446 14.0528 10.3944C13.4385 10.0873 13.2414 10.1647 13.2267 10.1705L13.2261 10.1707C13.1524 10.1983 13.0653 10.2691 12.7809 10.6247L12.744 10.671C12.5197 10.9534 12.1157 11.4621 11.4761 11.702C10.7349 11.9799 9.92815 11.8321 9.05279 11.3944C8.13774 10.9369 7.56612 10.3552 7.30294 9.57885C7.10968 9.00876 7.1174 8.37679 7.1232 7.90214V7.90213C7.12412 7.82627 7.125 7.75443 7.125 7.6875C7.125 7.13604 7.09486 6.60111 6.87271 5.99018C6.66804 5.42734 6.27867 4.74354 5.50368 3.92379ZM31.8004 13.4655C30.9636 13.8583 29.9823 14.1121 29.0524 14.3261C28.782 14.3883 28.5159 14.4472 28.2543 14.5052C27.5209 14.6676 26.8227 14.8222 26.1623 15.0203C25.2682 15.2886 24.5922 15.5973 24.147 15.9912C23.7465 16.3454 23.5 16.7939 23.5 17.5C23.5 19.496 22.7817 20.9579 22.3162 21.9053L22.3159 21.9058C22.2518 22.0363 22.1925 22.157 22.1405 22.268C22.0298 22.5045 21.9661 22.6645 21.934 22.7831C21.9282 22.8046 21.9241 22.8225 21.9212 22.837C21.9775 22.8824 22.105 22.965 22.3714 23.0715C23.2 23.403 24.0083 24.0935 24.7112 24.8206C25.4349 25.5693 26.1369 26.4531 26.7449 27.285C26.8288 27.3998 26.9111 27.5139 26.9917 27.6269C30.0758 24.7103 32 20.5798 32 16C32 15.1375 31.9318 14.291 31.8004 13.4655ZM6.39285 28.7958C6.7349 27.9612 7 26.9846 7 26C7 25.8639 6.96675 25.6702 6.9058 25.3152L6.8978 25.2686C6.84067 24.9356 6.76762 24.4924 6.77245 24.0461C6.77733 23.5956 6.86084 23.0468 7.19719 22.5502C7.54754 22.0328 8.08591 21.6977 8.75748 21.5299C9.2941 21.3957 9.72071 20.9187 9.86229 20.2096C10.0034 19.5028 9.81659 18.7308 9.2929 18.2071C8.77193 17.6861 8.24794 17.5407 7.6071 17.5693C6.96482 17.598 6.27253 17.7947 5.38824 18.0461L5.38718 18.0464L5.3833 18.0475C5.26594 18.0808 5.1452 18.1152 5.02075 18.1502C3.64971 18.5358 2.00798 18.9412 0.20345 18.5584C0.873856 22.73 3.15691 26.3624 6.39285 28.7958ZM21.8827 22.799C21.882 22.7982 21.8816 22.7979 21.8815 22.7979C21.881 22.798 21.883 22.8012 21.8886 22.8073C21.886 22.8031 21.884 22.8004 21.8827 22.799Z"/></svg>,
dimension_type: <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M11.2929 22.7071C11.6834 23.0976 12.3166 23.0976 12.7071 22.7071L19.0711 16.3431C19.4616 15.9526 19.4616 15.3195 19.0711 14.9289C18.6805 14.5384 18.0474 14.5384 17.6569 14.9289L13 19.5858V14.1521C14.074 14.1106 15.2545 13.9152 16.5 13.5C17.4051 13.1983 18.0371 12.8511 18.602 12.5408C19.9096 11.8225 20.8576 11.3017 24 12V20C24 22.2091 22.2091 24 20 24H4C1.79086 24 0 22.2091 0 20V9.5C3 7.5 6 10.5 7.5 12.5C7.95659 13.1088 9.22475 13.7863 11 14.0485V19.5858L6.34315 14.9289C5.95262 14.5384 5.31946 14.5384 4.92893 14.9289C4.53841 15.3195 4.53841 15.9526 4.92893 16.3431L11.2929 22.7071ZM11 14.0485V3.41421L6.34315 8.07107C5.95262 8.46159 5.31946 8.46159 4.92893 8.07107C4.53841 7.68054 4.53841 7.04738 4.92893 6.65686L11.2929 0.292893C11.6834 -0.097631 12.3166 -0.097631 12.7071 0.292893L19.0711 6.65686C19.4616 7.04738 19.4616 7.68054 19.0711 8.07107C18.6805 8.46159 18.0474 8.46159 17.6569 8.07107L13 3.41421V14.1521C12.2816 14.1799 11.6108 14.1388 11 14.0485Z"/></svg>,
enchantment: <svg width="31" height="29" viewBox="0 0 31 29" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.80295 13.5979C2.88259 14.0406 3.03884 14.4773 3.27671 14.8893L8.12207 23.2818C9.22664 25.1949 11.673 25.8504 13.5862 24.7459L26.4471 17.3206C26.842 17.0926 27.1833 16.8075 27.4666 16.4817C27.3507 17.73 26.6514 18.9049 25.4831 19.5795L13.0466 26.7597C11.1334 27.8643 8.68704 27.2088 7.58247 25.2956L2.96224 17.2931C2.2836 16.1177 2.26935 14.741 2.80295 13.5979Z"/><path d="M4.55344 14.1522C3.44887 12.2391 4.10437 9.79271 6.01754 8.68814L17.6017 2C19.5149 0.895427 21.9613 1.55093 23.0658 3.4641L27.1741 10.5798C28.2787 12.493 27.6232 14.9393 25.71 16.0439L14.1258 22.732C12.2126 23.8366 9.76625 23.1811 8.66168 21.2679L4.55344 14.1522Z"/></svg>,
enchantment_provider: <svg width="31" height="29" viewBox="0 0 31 29" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.80295 13.5979C2.88259 14.0406 3.03884 14.4773 3.27671 14.8893L8.12207 23.2818C9.22664 25.1949 11.673 25.8504 13.5862 24.7459L26.4471 17.3206C26.842 17.0926 27.1833 16.8075 27.4666 16.4817C27.3507 17.73 26.6514 18.9049 25.4831 19.5795L13.0466 26.7597C11.1334 27.8643 8.68704 27.2088 7.58247 25.2956L2.96224 17.2931C2.2836 16.1177 2.26935 14.741 2.80295 13.5979Z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M4.55344 14.1522C3.44887 12.2391 4.10437 9.79271 6.01754 8.68814L17.6017 2C19.5149 0.895427 21.9613 1.55093 23.0658 3.4641L27.1741 10.5798C28.2787 12.493 27.6232 14.9393 25.71 16.0439L14.1258 22.732C12.2126 23.8366 9.76625 23.1811 8.66168 21.2679L4.55344 14.1522ZM14.5294 8.11765C15.0167 7.85775 15.6225 8.0421 15.8824 8.52941L19 14.375L22.1176 8.52941C22.3775 8.0421 22.9833 7.85775 23.4706 8.11765C23.9579 8.37755 24.1423 8.98328 23.8824 9.47059L20.3235 16.1434C19.7588 17.2022 18.2412 17.2022 17.6765 16.1434L14.1176 9.47059C13.8577 8.98328 14.0421 8.37755 14.5294 8.11765ZM12 9C12 8.44771 11.5523 8 11 8C10.4477 8 10 8.44771 10 9L10 16C10 16.5523 10.4477 17 11 17C11.5523 17 12 16.5523 12 16L12 9Z"/></svg>,
equipment: <svg width="20" height="25" viewBox="0 0 20 25" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0.5 14.5C0.1554 13.1216 0.0482983 8.41822 0.0150111 5.62775C-0.000195137 4.35301 0.805687 3.21801 2.00895 2.79687L9.00895 0.346868C9.65057 0.122301 10.3494 0.122301 10.9911 0.346868L17.9911 2.79687C19.1943 3.21801 20.0002 4.35301 19.985 5.62775C19.9517 8.41822 19.8446 13.1216 19.5 14.5C18.6186 18.0257 13.9995 21.7092 11.5419 23.4585C10.6119 24.1204 9.3881 24.1204 8.45812 23.4585C6.0005 21.7092 1.38144 18.0257 0.5 14.5Z"/></svg>,
font: <svg width="26" height="20" viewBox="0 0 26 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3 16V3H9V16H3ZM0 1C0 0.447715 0.447715 0 1 0H11C11.5523 0 12 0.447715 12 1V18C12 18.5523 11.5523 19 11 19H1C0.447715 19 0 18.5523 0 18V1ZM17.3224 18.8366C17.8622 19.0687 18.4801 19.1847 19.1761 19.1847C19.6828 19.1847 20.1373 19.1207 20.5398 18.9929C20.947 18.8651 21.2997 18.6733 21.598 18.4176C21.901 18.1619 22.1496 17.8494 22.3438 17.4801H22.429V19H25.696V11.5852C25.696 11.0076 25.5753 10.4938 25.3338 10.044C25.0971 9.59422 24.7609 9.21544 24.3253 8.90767C23.8897 8.59517 23.3783 8.35843 22.7912 8.19744C22.2041 8.03172 21.5625 7.94886 20.8665 7.94886C19.8911 7.94886 19.0554 8.10038 18.3594 8.40341C17.6681 8.7017 17.1236 9.11364 16.7259 9.6392C16.3329 10.16 16.089 10.7519 15.9943 11.4148L19.1974 11.5284C19.2732 11.178 19.4508 10.9034 19.7301 10.7045C20.0095 10.5057 20.3788 10.4062 20.8381 10.4062C21.2642 10.4062 21.6027 10.5057 21.8537 10.7045C22.1046 10.9034 22.2301 11.1851 22.2301 11.5497V11.5852C22.2301 11.8078 22.1425 11.9806 21.9673 12.1037C21.7969 12.2221 21.5223 12.3144 21.1435 12.3807C20.7647 12.4422 20.2652 12.5014 19.6449 12.5582C19.0909 12.6056 18.5701 12.6979 18.0824 12.8352C17.5947 12.9678 17.1638 13.1643 16.7898 13.4247C16.4157 13.6851 16.1222 14.0237 15.9091 14.4403C15.696 14.857 15.5895 15.3684 15.5895 15.9744C15.5895 16.6941 15.7434 17.2931 16.0511 17.7713C16.3636 18.2448 16.7874 18.5999 17.3224 18.8366ZM21.2571 16.6847C20.9588 16.8362 20.6226 16.9119 20.2486 16.9119C19.8509 16.9119 19.5218 16.8172 19.2614 16.6278C19.0057 16.4384 18.8778 16.1638 18.8778 15.804C18.8778 15.5672 18.937 15.3636 19.0554 15.1932C19.1785 15.018 19.3537 14.8759 19.581 14.767C19.813 14.6581 20.0923 14.5777 20.419 14.5256C20.58 14.5019 20.7481 14.4759 20.9233 14.4474C21.0985 14.419 21.2689 14.3859 21.4347 14.348C21.6004 14.3101 21.7519 14.2699 21.8892 14.2273C22.0312 14.1847 22.152 14.1373 22.2514 14.0852V15.1222C22.2514 15.4773 22.1615 15.7898 21.9815 16.0597C21.8016 16.3248 21.5601 16.5331 21.2571 16.6847Z"/></svg>,
instrument: <svg width="28" height="24" viewBox="0 0 28 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.005 1.99915C12.9991 1.44689 12.5523 1 12 1H2C1.44772 1 0.998636 1.44967 1.01243 2.00178C1.32317 14.4349 7.42811 22.5 16 22.5C21.8962 22.5 25.0112 16.6285 26.3167 12.4168C26.6013 11.4989 25.678 11.0504 25.0605 11.7868C23.6857 13.4266 22.0172 15 19 15C13.7789 15 13.0672 7.84982 13.005 1.99915Z" stroke="currentColor" stroke-width="2"/></svg>,
item_modifier: <svg width="26" height="26" viewBox="0 0 26 26" fill="none" xmlns="http://www.w3.org/2000/svg"><line x1="8.05026" y1="17.9498" x2="17.9498" y2="8.05026" stroke="currentColor" stroke-width="4" stroke-linecap="round"/><path d="M10.1749 4.51138C10.1749 4.51138 16.4785 3.75061 19.364 6.63604C22.2494 9.52148 21.4886 15.8251 21.4886 15.8251" fill="none" stroke="currentColor" stroke-width="4" stroke-linecap="round"/></svg>,
jukebox_song: <svg width="32" height="21" viewBox="0 0 32 21" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M16 21C24.8366 21 32 16.299 32 10.5C32 4.70101 24.8366 0 16 0C7.16344 0 0 4.70101 0 10.5C0 16.299 7.16344 21 16 21ZM16 13C18.7614 13 21 11.6569 21 10C21 8.34315 18.7614 7 16 7C13.2386 7 11 8.34315 11 10C11 11.6569 13.2386 13 16 13Z"/></svg>,
loot_table: <svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M0.159296 8.96068C-0.224317 6.7851 1.22836 4.71047 3.40393 4.32686L27.0393 0.159301C29.2149 -0.224312 31.2895 1.22836 31.6731 3.40394L35.8407 27.0393C36.2243 29.2149 34.7716 31.2895 32.5961 31.6731L8.96068 35.8407C6.7851 36.2243 4.71047 34.7716 4.32685 32.5961L0.159296 8.96068ZM11.5999 10.4974C11.9356 12.401 10.6645 14.2163 8.76089 14.552C6.85726 14.8876 5.04196 13.6165 4.7063 11.7129C4.37063 9.80928 5.64172 7.99398 7.54535 7.65832C9.44898 7.32266 11.2643 8.59375 11.5999 10.4974ZM25.5026 11.6C27.4063 11.2643 28.6773 9.44899 28.3417 7.54536C28.006 5.64173 26.1907 4.37064 24.2871 4.7063C22.3835 5.04196 21.1124 6.85727 21.448 8.7609C21.7837 10.6645 23.599 11.9356 25.5026 11.6ZM14.552 27.2391C14.8876 29.1427 13.6165 30.958 11.7129 31.2937C9.80928 31.6294 7.99398 30.3583 7.65831 28.4546C7.32265 26.551 8.59374 24.7357 10.4974 24.4001C12.401 24.0644 14.2163 25.3355 14.552 27.2391ZM28.4546 28.3417C30.3583 28.006 31.6294 26.1907 31.2937 24.2871C30.958 22.3835 29.1427 21.1124 27.2391 21.448C25.3355 21.7837 24.0644 23.599 24.4 25.5026C24.7357 27.4063 26.551 28.6773 28.4546 28.3417Z"/></svg>,
model: <svg width="28" height="23" viewBox="0 0 28 23" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.75 0.27279C13.5437 -0.09095 14.4563 -0.0909509 15.25 0.27279L26.25 5.31446C27.3163 5.8032 28 6.86863 28 8.04165V15.3333C28 16.5444 27.2718 17.6367 26.1538 18.1025L15.1538 22.6859C14.4154 22.9936 13.5846 22.9936 12.8462 22.6859L1.84615 18.1025C0.728214 17.6367 0 16.5444 0 15.3333V8.04165C0 6.86863 0.683678 5.8032 1.75004 5.31446L12.75 0.27279ZM14 4.10002L6.92266 7.3438L14 10.2391L21.0773 7.3438L14 4.10002ZM24 10.4699V14.6666L16 18V13.7427L24 10.4699ZM12 13.7427L4 10.4699V14.6666L12 18V13.7427Z"/></svg>,
pack_mcmeta: <svg width="28" height="31" viewBox="0 0 28 31" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M15.25 0.872837C14.4563 0.509096 13.5437 0.509097 12.75 0.872837L1.75004 5.9145C0.683678 6.40325 0 7.46867 0 8.6417V23.3333C0 24.5444 0.728212 25.6368 1.84615 26.1026L12.8462 30.6859C13.5846 30.9936 14.4154 30.9936 15.1538 30.6859L26.1538 26.1026C27.2718 25.6368 28 24.5444 28 23.3333V8.6417C28 7.46867 27.3163 6.40325 26.25 5.9145L15.25 0.872837ZM11.8374 5.69126L14 4.70006L21.0773 7.94384L18.8225 8.86629L11.8374 5.69126ZM9.4308 6.79428L6.92266 7.94384L14 10.8391L16.2787 9.90694L9.4308 6.79428ZM24 22.6667V11.07L16 14.3427V26L24 22.6667ZM4 11.07L12 14.3427V26L4 22.6667V11.07Z"/></svg>,
painting_variant: <svg width="32" height="28" viewBox="0 0 32 28" fill="none" xmlns="http://www.w3.org/2000/svg"><rect y="7" width="32" height="21" rx="4"/><path d="M9 8L15.2929 1.70711C15.6834 1.31658 16.3166 1.31658 16.7071 1.70711L23 8" fill="none" stroke="currentColor" stroke-width="2"/></svg>,
predicate: <svg width="24" height="22" viewBox="0 0 24 22" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M22 0H2C1.17595 0 0.705573 0.940764 1.2 1.6L8.8 11.7333C8.92982 11.9064 9 12.117 9 12.3333V20.382C9 21.1253 9.78231 21.6088 10.4472 21.2764L14.4472 19.2764C14.786 19.107 15 18.7607 15 18.382V12.3333C15 12.117 15.0702 11.9064 15.2 11.7333L22.8 1.6C23.2944 0.940764 22.824 0 22 0Z"/></svg>,
recipe: <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M20 2H12V10L20 10V2ZM10 2V10H2V4C2 2.89543 2.89543 2 4 2H10ZM2 20L2 12H10V20H2ZM2 22L2 28C2 29.1046 2.89543 30 4 30H10V22H2ZM12 22V30H20V22L12 22ZM22 22V30H28C29.1046 30 30 29.1046 30 28V22H22ZM30 20V12H22V20H30ZM20 20L12 20V12L20 12V20ZM30 4V10H22V2H28C29.1046 2 30 2.89543 30 4ZM4 0C1.79086 0 0 1.79086 0 4V28C0 30.2091 1.79086 32 4 32H28C30.2091 32 32 30.2091 32 28V4C32 1.79086 30.2091 0 28 0H4Z"/></svg>,
'tag/block': TAG,
'tag/damage_type': TAG,
'tag/dialog': TAG,
'tag/enchantment': TAG,
'tag/entity_type': TAG,
'tag/fluid': TAG,
'tag/game_event': TAG,
'tag/item': TAG,
'tag/worldgen/biome': TAG,
'tag/worldgen/structure': TAG,
'tag/worldgen/structure_set': TAG,
'tag/worldgen/flat_level_generator_preset': TAG,
'tag/worldgen/world_preset': TAG,
'tag/banner_pattern': TAG,
'tag/cat_variant': TAG,
'tag/instrument': TAG,
'tag/painting_variant': TAG,
'tag/point_of_interest_type': TAG,
text_component: <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M0 4C0 1.79086 1.79086 0 4 0H28C30.2091 0 32 1.79086 32 4V21C32 23.2091 30.2091 25 28 25H17L9.66436 31.5206C9.01946 32.0938 8 31.636 8 30.7732V25H4C1.79086 25 0 23.2091 0 21V4ZM2.46875 20H6.24716L7.20402 16.946H12.2272L13.1861 20H16.9645L12.0568 5.45455H7.37642L2.46875 20ZM11.3888 14.2756L9.76989 9.11932H9.65625L8.04072 14.2756H11.3888ZM19.7521 19.8366C20.2919 20.0687 20.9098 20.1847 21.6058 20.1847C22.1125 20.1847 22.567 20.1207 22.9695 19.9929C23.3767 19.8651 23.7294 19.6733 24.0277 19.4176C24.3307 19.1619 24.5793 18.8494 24.7734 18.4801H24.8587V20H28.1257V12.5852C28.1257 12.0076 28.005 11.4938 27.7635 11.044C27.5268 10.5942 27.1906 10.2154 26.755 9.90767C26.3194 9.59517 25.808 9.35843 25.2209 9.19744C24.6338 9.03172 23.9922 8.94886 23.2962 8.94886C22.3208 8.94886 21.4851 9.10038 20.7891 9.40341C20.0978 9.7017 19.5533 10.1136 19.1555 10.6392C18.7625 11.16 18.5187 11.7519 18.424 12.4148L21.6271 12.5284C21.7029 12.178 21.8804 11.9034 22.1598 11.7045C22.4392 11.5057 22.8085 11.4062 23.2678 11.4062C23.6939 11.4062 24.0324 11.5057 24.2834 11.7045C24.5343 11.9034 24.6598 12.1851 24.6598 12.5497V12.5852C24.6598 12.8078 24.5722 12.9806 24.397 13.1037C24.2266 13.2221 23.9519 13.3144 23.5732 13.3807C23.1944 13.4422 22.6948 13.5014 22.0746 13.5582C21.5206 13.6056 20.9998 13.6979 20.5121 13.8352C20.0244 13.9678 19.5935 14.1643 19.2195 14.4247C18.8454 14.6851 18.5518 15.0237 18.3388 15.4403C18.1257 15.857 18.0192 16.3684 18.0192 16.9744C18.0192 17.6941 18.1731 18.2931 18.4808 18.7713C18.7933 19.2448 19.2171 19.5999 19.7521 19.8366ZM23.6868 17.6847C23.3885 17.8362 23.0523 17.9119 22.6783 17.9119C22.2805 17.9119 21.9515 17.8172 21.6911 17.6278C21.4354 17.4384 21.3075 17.1638 21.3075 16.804C21.3075 16.5672 21.3667 16.3636 21.4851 16.1932C21.6082 16.018 21.7834 15.8759 22.0107 15.767C22.2427 15.6581 22.522 15.5777 22.8487 15.5256C23.0097 15.5019 23.1778 15.4759 23.353 15.4474C23.5282 15.419 23.6986 15.3859 23.8643 15.348C24.0301 15.3101 24.1816 15.2699 24.3189 15.2273C24.4609 15.1847 24.5817 15.1373 24.6811 15.0852V16.1222C24.6811 16.4773 24.5911 16.7898 24.4112 17.0597C24.2313 17.3248 23.9898 17.5331 23.6868 17.6847Z"/></svg>,
trial_spawner: <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M28 2H17V5L30 5V4C30 2.89543 29.1046 2 28 2ZM30 7L17 7V10H18C18.7403 10 19.3866 10.4022 19.7324 11H30V7ZM20 18V13H30V18H20ZM17 21H18C18.7403 21 19.3866 20.5978 19.7324 20H30V25H17V21ZM12.2676 20C12.6134 20.5978 13.2597 21 14 21H15V25H2L2 20H12.2676ZM12 13V18H2L2 13H12ZM15 10H14C13.2597 10 12.6134 10.4022 12.2676 11H2L2 7L15 7V10ZM15 27H2L2 28C2 29.1046 2.89543 30 4 30H15V27ZM17 27H30V28C30 29.1046 29.1046 30 28 30H17V27ZM15 5V2H4C2.89543 2 2 2.89543 2 4V5L15 5ZM4 0C1.79086 0 0 1.79086 0 4V28C0 30.2091 1.79086 32 4 32H28C30.2091 32 32 30.2091 32 28V4C32 1.79086 30.2091 0 28 0H4Z"/></svg>,
trim_material: <svg width="28" height="22" viewBox="0 0 28 22" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M14.6805 0.631848C14.2968 0.275572 13.7032 0.275572 13.3195 0.631847L0.443587 12.5881C0.170896 12.8413 0.0579916 13.23 0.179682 13.5817C3.71776 23.8061 24.2822 23.8061 27.8203 13.5817C27.942 13.23 27.8291 12.8413 27.5564 12.5881L14.6805 0.631848Z"/></svg>,
trim_pattern: <svg width="22" height="28" viewBox="0 0 22 28" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M6.55446 0.223188C6.0161 0.0999245 5.47976 0.436422 5.35649 0.974776L0.223178 23.3946C0.0999154 23.933 0.436413 24.4693 0.974766 24.5926L15.5964 27.9404C16.1348 28.0637 16.6711 27.7272 16.7944 27.1888L20.3654 11.5924L10.6176 9.36052C10.0793 9.23725 9.74276 8.70091 9.86602 8.16255L10.0892 7.18778C10.2125 6.64943 10.7488 6.31293 11.2872 6.43619L21.0349 8.66807L21.9277 4.76897C22.0509 4.23061 21.7144 3.69427 21.1761 3.571L6.55446 0.223188ZM4.85098 12.1437C4.97424 11.6053 5.51059 11.2688 6.04894 11.3921L14.8219 13.4008C15.3603 13.524 15.6968 14.0604 15.5735 14.5987L15.3503 15.5735C15.2271 16.1119 14.6907 16.4484 14.1524 16.3251L5.37938 14.3164C4.84103 14.1932 4.50453 13.6568 4.62779 13.1185L4.85098 12.1437ZM6.65937 17.6871C6.12102 17.5639 5.58467 17.9004 5.46141 18.4387L5.23822 19.4135C5.11496 19.9518 5.45145 20.4882 5.98981 20.6114L14.7628 22.6201C15.3011 22.7434 15.8375 22.4069 15.9607 21.8685L16.1839 20.8938C16.3072 20.3554 15.9707 19.8191 15.4323 19.6958L6.65937 17.6871Z"/></svg>,
wolf_variant: <svg width="29" height="27" viewBox="0 0 29 27" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M14 7C12.3431 7 11 8.34315 11 10V24C11 25.6569 12.3431 27 14 27H26C27.6569 27 29 25.6569 29 24V10C29 8.34315 27.6569 7 26 7H14ZM14 12C12.8954 12 12 12.8954 12 14V15C12 16.1046 12.8954 17 14 17H15C16.1046 17 17 16.1046 17 15V14C17 12.8954 16.1046 12 15 12H14Z"/><path d="M0 20C0 18.3431 1.34315 17 3 17H9V26H3C1.34315 26 0 24.6569 0 23V20Z"/><rect x="22" width="4" height="13" rx="2"/></svg>,
world: <svg width="28" height="29" viewBox="0 0 28 29" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M6 2C6 0.895431 6.89543 0 8 0H10C11.1046 0 12 0.895431 12 2V4C12 5.10457 11.1046 6 10 6V10.5688C10.2875 10.9298 10.5816 11.3478 10.8939 11.7915L10.8939 11.7916C11.5 12.6529 12.1742 13.6111 13 14.4368C13.8636 15.3004 15.3471 15.813 17 15.9652V12C15.8954 12 15 11.1046 15 10V8C15 6.89543 15.8954 6 17 6H19C20.1046 6 21 6.89543 21 8V10C21 11.1046 20.1046 12 19 12V15.8819C20.1705 15.6766 21.362 15.2558 22 14.9368C23 14.4368 26 14 28 14.4368V20C28 22.2091 26.2091 24 24 24H8C5.79086 24 4 22.2091 4 20V9C5.38919 8.65271 6.77837 8.54664 8 9.01691V6C6.89543 6 6 5.10457 6 4V2ZM22 26.2968H6C3.79086 26.2968 2 24.5059 2 22.2968V13C1.34604 13.0169 0.673018 13.1285 0 13.2968V24.2968C0 26.5059 1.79086 28.2968 4 28.2968H20C21.6222 28.2968 23.0189 27.3311 23.6465 25.9433C23.1444 26.1704 22.5869 26.2968 22 26.2968Z"/></svg>,
worldgen: <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M4 0C2.89543 0 2 0.89543 2 2V4C2 5.10457 2.89543 6 4 6V9.01691C2.77837 8.54664 1.38919 8.65271 0 9V20C0 22.2091 1.79086 24 4 24H20C22.2091 24 24 22.2091 24 20V14.4368C22 14 19 14.4368 18 14.9368C17.362 15.2558 16.1705 15.6766 15 15.8819V12C16.1046 12 17 11.1046 17 10V8C17 6.89543 16.1046 6 15 6H13C11.8954 6 11 6.89543 11 8V10C11 11.1046 11.8954 12 13 12V15.9652C11.3471 15.813 9.86362 15.3004 9 14.4368C8.17424 13.6111 7.50001 12.6529 6.8939 11.7916L6.89388 11.7916L6.89388 11.7916L6.89385 11.7915C6.58163 11.3478 6.28748 10.9298 6 10.5688V6C7.10457 6 8 5.10457 8 4V2C8 0.895431 7.10457 0 6 0H4Z"/></svg>,
'worldgen/biome': <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M7 1C7 0.447715 7.44772 0 8 0C8.55229 0 9 0.447715 9 1V3C9 3.55228 8.55229 4 8 4C7.44772 4 7 3.55228 7 3V1ZM20.5 21H22.5C23.2136 21 23.6975 20.2741 23.4231 19.6154L19.9231 11.2154C19.5812 10.3949 18.4188 10.3949 18.0769 11.2154L14.5769 19.6154C14.3025 20.2741 14.7864 21 15.5 21H17.5V24H20.5V21ZM16 8C16 7.44772 15.5523 7 15 7H13C12.4477 7 12 7.44772 12 8C12 8.55228 12.4477 9 13 9H15C15.5523 9 16 8.55229 16 8ZM14.4142 13C14.8047 13.3905 14.8047 14.0237 14.4142 14.4142C14.0237 14.8047 13.3905 14.8047 13 14.4142L11.5858 13C11.1953 12.6095 11.1953 11.9763 11.5858 11.5858C11.9763 11.1953 12.6095 11.1953 13 11.5858L14.4142 13ZM4 8C4 7.44772 3.55228 7 3 7H1C0.447715 7 0 7.44772 0 8C0 8.55228 0.447715 9 1 9H3C3.55228 9 4 8.55229 4 8ZM4.41422 3C4.80474 3.39053 4.80474 4.02369 4.41422 4.41421C4.02369 4.80474 3.39053 4.80474 3 4.41421L1.58579 3C1.19526 2.60948 1.19526 1.97631 1.58579 1.58579C1.97631 1.19526 2.60948 1.19526 3 1.58579L4.41422 3ZM8 16C8.55229 16 9 15.5523 9 15V13C9 12.4477 8.55229 12 8 12C7.44772 12 7 12.4477 7 13L7 15C7 15.5523 7.44772 16 8 16ZM3 14.4142C2.60947 14.8047 1.97631 14.8047 1.58579 14.4142C1.19526 14.0237 1.19526 13.3905 1.58579 13L3 11.5858C3.39052 11.1953 4.02369 11.1953 4.41421 11.5858C4.80474 11.9763 4.80474 12.6095 4.41421 13L3 14.4142ZM14.4142 1.58579C14.0237 1.19526 13.3905 1.19526 13 1.58579L11.5858 3C11.1953 3.39053 11.1953 4.02369 11.5858 4.41422C11.9763 4.80474 12.6095 4.80474 13 4.41422L14.4142 3C14.8047 2.60948 14.8047 1.97631 14.4142 1.58579ZM7 5C5.89543 5 5 5.89543 5 7V9C5 10.1046 5.89543 11 7 11H9C10.1046 11 11 10.1046 11 9V7C11 5.89543 10.1046 5 9 5H7Z"/></svg>,
'worldgen/configured_carver': <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M20 24H4C1.79086 24 0 22.2091 2.47955e-06 20L3.09944e-06 19C1.5 20.5 4.5 22 7 21.5C9.5 21 10 19.7806 10 17.5C10 15 9.17881 12.9285 11.5 12C14 11 16 17 18.5 17.5C20.5 17.9 23 15.3333 24 14.5V20C24 22.2091 22.2091 24 20 24Z"/><path d="M24 4V8C22.1667 9.66667 20.1125 11.8062 18.5 11C16.5 10 14 9 11.5 8.5C10.5194 8.30388 8.5 9 7.5 11C6.5 13 7.5 14.5 6.5 15.5C5.5 16.5 4.5 17 3.5 16C2.05778 14.5578 2 13 0 12.5L2.10762e-06 4C2.65539e-06 1.79086 1.79086 0 4 0H20C22.2091 0 24 1.79086 24 4Z"/></svg>,
'worldgen/configured_feature': <svg width="11" height="18" viewBox="0 0 11 18" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M0 2C0 0.89543 0.895431 0 2 0H7C8.10457 0 9 0.895431 9 2V4C10.1046 4 11 4.89543 11 6V8C11 9.10457 10.1046 10 9 10H7C6.63571 10 6.29417 9.90261 6 9.73244L6 18H3V15H1C0.447715 15 0 14.5523 0 14V12C0 11.4477 0.447715 11 1 11H3L3 9H2C0.89543 9 0 8.10457 0 7V2Z"/></svg>,
'worldgen/configured_structure_feature': STRUCTURE,
'worldgen/configured_surface_builder': <svg width="24" height="20" viewBox="0 0 24 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.21953 2.06398C0.59354 2.14445 0 1.68765 0 1.0565C0 0.611334 0.302132 0.217946 0.74016 0.138531C2.48644 -0.178075 4.18528 -0.0156892 5.5 1.29904C5.94949 1.74852 6.39898 2.38729 6.89388 3.09058L6.89388 3.09059C7.5 3.95195 8.17424 4.91009 9 5.73586C9.9499 6.68575 11.6497 7.21092 13.5 7.29903C15 7.37046 17.078 6.69683 18 6.23586C18.8772 5.79726 21.2934 5.40727 23.2235 5.61295C23.6802 5.66162 24 6.06324 24 6.52248C24 7.14603 23.4206 7.61579 22.7982 7.57749C20.9522 7.46389 18.8138 7.82895 18 8.23586C17.078 8.69683 15 9.37046 13.5 9.29904C11.6497 9.21092 9.9499 8.68575 9 7.73586C8.17424 6.91009 7.5 5.95195 6.89388 5.09059L6.89388 5.09059L6.89387 5.09058C6.39898 4.38729 5.94949 3.74852 5.5 3.29904C4.30594 2.10498 2.79505 1.86144 1.21953 2.06398ZM4 19.299H20C22.2091 19.299 24 17.5082 24 15.299V9.73586C22 9.29903 19 9.73586 18 10.2359C17.078 10.6968 15 11.3705 13.5 11.299C11.6497 11.2109 9.9499 10.6858 9 9.73586C8.17423 8.91009 7.5 7.95194 6.89388 7.09058C6.39898 6.38729 5.94949 5.74852 5.5 5.29903C4 3.79903 2 3.79904 0 4.29903V15.299C0 17.5082 1.79086 19.299 4 19.299Z"/></svg>,
'worldgen/density_function': <svg width="24" height="19" viewBox="0 0 24 19" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.99999 19C3.44771 19 2.99999 18.5523 2.99999 18V16H0.999994C0.447709 16 -6.40123e-06 15.5523 -6.40123e-06 15C-6.40123e-06 14.4477 0.447709 14 0.999994 14H2.99999V6.50898C2.73742 6.59875 2.44791 6.71456 2.12858 6.86194C1.3764 7.2091 0.485216 6.88077 0.138056 6.12859C-0.209103 5.37641 0.11923 4.48522 0.871408 4.13806C1.62438 3.79054 2.33177 3.5433 2.99999 3.39632V1C2.99999 0.447716 3.44771 0 3.99999 0C4.55228 0 4.99999 0.447716 4.99999 1V3.2668C5.19676 3.28855 5.38996 3.32136 5.57983 3.36522C6.95063 3.68192 7.87758 4.51535 8.55369 5.26846C8.81818 5.56308 9.07365 5.88025 9.29728 6.15788L9.29731 6.15792C9.35241 6.22632 9.40557 6.29232 9.45646 6.35499C9.73181 6.69411 9.96489 6.96732 10.2004 7.19234C10.6367 7.60933 11.0034 7.79103 11.5 7.79103C13.4431 7.79103 14.7031 7.02516 16.2234 6.10111L16.4096 5.988C18.0133 5.01523 19.9627 3.89955 22.8254 4.53572C23.6341 4.71543 24.144 5.51669 23.9643 6.32539C23.7846 7.13409 22.9833 7.64399 22.1746 7.46428C20.5373 7.10044 19.4867 7.63028 17.9654 8.55302C17.8762 8.60715 17.7854 8.66264 17.6929 8.71915C16.2113 9.62479 14.3033 10.791 11.5 10.791C9.99661 10.791 8.92576 10.1238 8.12775 9.36127C7.74604 8.99651 7.41271 8.59727 7.12751 8.24603C7.06056 8.16357 6.99674 8.0844 6.93508 8.00791L6.9348 8.00757C6.71743 7.73792 6.52696 7.50165 6.3213 7.27257C5.84352 6.74037 5.44831 6.44194 4.99999 6.31296V14H23C23.5523 14 24 14.4477 24 15C24 15.5523 23.5523 16 23 16H4.99999V18C4.99999 18.5523 4.55228 19 3.99999 19Z"/></svg>,
'worldgen/flat_level_generator_preset': <svg width="24" height="22" viewBox="0 0 24 22" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M5 0C3.89543 0 3 0.895431 3 2V4C3 5.10457 3.89543 6 5 6V10H1C0.447715 10 0 10.4477 0 11C0 11.5523 0.447716 12 1 12H23C23.5523 12 24 11.5523 24 11C24 10.4477 23.5523 10 23 10H7V6C8.10457 6 9 5.10457 9 4V2C9 0.895431 8.10457 0 7 0H5ZM0 15C0 14.4477 0.447715 14 1 14H23C23.5523 14 24 14.4477 24 15V21C24 21.5523 23.5523 22 23 22H1C0.447716 22 0 21.5523 0 21V15Z"/></svg>,
'worldgen/noise': <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M28 0H5C7 5 3 8 0 8V25.5C2.5 31 6.64628 28.2245 11 23C13.5 20 18 19 17.5 32H28C30.2091 32 32 30.2091 32 28V21.5C27.754 23.044 24.104 20.4161 21.05 18.2174C20.148 17.568 19.298 16.956 18.5 16.5C15 14.5 17.953 6.1094 23.5 5C25.2216 4.65569 25.5205 4.78558 27.6624 5.71624C28.6308 6.13704 29.9761 6.72157 32 7.5V4C32 1.79086 30.2091 0 28 0ZM8.5 11.5C7.5 11 6.5 10.5 5 12C2.87868 14.1213 3.5 19.5 6.5 19C9.5 18.5 10 16 10 14.5C10 13.3 9.13246 11.8162 8.5 11.5Z"/></svg>,
'worldgen/noise_settings': <svg width="24" height="19" viewBox="0 0 24 19" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M20 18.299H4C1.79086 18.299 0 16.5082 0 14.299V3.29904C1.5 1 3.5 -1.5 6 2C7 3.4 7.5 7.23586 9 8.73586C9.9499 9.68576 11.3494 10.3408 13 9.5C14.5 8.73586 15 7 16.5 6.5C18.091 5.96967 22 8.29904 24 8.73586V14.299C24 16.5082 22.2091 18.299 20 18.299Z"/></svg>,
'worldgen/placed_feature': <svg width="15" height="20" viewBox="0 0 15 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M11 0C9.89543 0 9 0.89543 9 2V4C9 5.10457 9.89543 6 11 6V9H10C8.89543 9 8 9.89543 8 11V13C8 14.1046 8.89543 15 10 15V19.5H12V15C13.1046 15 14 14.1046 14 13V11C14 10.2597 13.5978 9.61337 13 9.26756V6C14.1046 6 15 5.10457 15 4V2C15 0.895431 14.1046 0 13 0H11ZM2 5C0.895431 5 0 5.89543 0 7V9C0 10.1046 0.89543 11 2 11L2 15.5H4V11C5.10457 11 6 10.1046 6 9V7C6 5.89543 5.10457 5 4 5H2Z"/></svg>,
'worldgen/processor_list': <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M6.21973 0H4C1.79086 0 0 1.79086 0 4V5.82578L4.72912 3.27934L6.21973 0ZM0 8.0973V11H16.9613L17.9149 6.09189L11.6129 0H8.41664L6.48011 4.26037C6.34438 4.55898 6.11451 4.80487 5.82571 4.96037L5.43726 5.16954L7.99614 6.63176C8.47566 6.90577 8.64226 7.51662 8.36825 7.99614C8.09424 8.47566 7.48338 8.64225 7.00387 8.36824L3.50386 6.36824C3.45778 6.34191 3.41458 6.31246 3.37439 6.28032L0 8.0973ZM14.4905 0L17.5131 2.92179L19.4556 1.66116C19.9189 1.36051 20.5382 1.49235 20.8388 1.95563C21.1395 2.41891 21.0077 3.03819 20.5444 3.33884L18.9888 4.34834L19.5 4.84246C19.8649 5.19527 20.0267 5.70872 19.9299 6.20702L18.9987 11H24V4C24 1.79086 22.2091 0 20 0H14.4905ZM3.94591 14H0V20C0 22.2091 1.79086 24 4 24H11V19.1801L6.54232 18.1514L4.89443 21.4472C4.64744 21.9412 4.04677 22.1414 3.55279 21.8944C3.05881 21.6474 2.85859 21.0468 3.10558 20.5528L4.92033 16.9233L3.94591 14ZM11 17.1276V14H6.0541L6.77134 16.1517L11 17.1276ZM21.6247 17.7809C22.056 17.4359 22.1259 16.8066 21.7809 16.3753C21.4359 15.944 20.8066 15.8741 20.3753 16.2191L18.0071 18.1137C17.7506 18.3189 17.5686 18.6026 17.4889 18.9212L16.2192 24H14V14H24V20C24 22.2091 22.2091 24 20 24H18.2808L19.3883 19.57L21.6247 17.7809Z"/></svg>,
'worldgen/structure': STRUCTURE,
'worldgen/structure_set': <svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M11 4L9.5376 4C9.05336 4 8.85189 3.38045 9.24351 3.09563L13.2059 0.21388C13.3812 0.0863707 13.6188 0.0863706 13.7941 0.21388L17.7565 3.09563C18.1481 3.38045 17.9467 4 17.4624 4L16 4V7C16 7.55228 15.5523 8 15 8H12C11.4477 8 11 7.55228 11 7V4ZM8.46241 7H0.537581C0.0533412 7 -0.148129 6.38045 0.243493 6.09563L4.2059 3.21388C4.38123 3.08637 4.61875 3.08637 4.79407 3.21388L8.75649 6.09563C9.14812 6.38045 8.94665 7 8.46241 7ZM6.99999 10V7H1.99999V10C1.99999 10.5523 2.4477 11 2.99999 11H5.99999C6.55227 11 6.99999 10.5523 6.99999 10ZM9.99999 17V14H8.5376C8.05336 14 7.85189 13.3804 8.24351 13.0956L12.2059 10.2139C12.3812 10.0864 12.6188 10.0864 12.7941 10.2139L16.7565 13.0956C17.1481 13.3804 16.9467 14 16.4624 14H15V17C15 17.5523 14.5523 18 14 18H11C10.4477 18 9.99999 17.5523 9.99999 17Z"/></svg>,
'worldgen/template_pool': <svg width="20" height="21" viewBox="0 0 20 21" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.2361 5C10.7111 4.46924 11 3.76835 11 3C11 1.34315 9.65685 0 8 0C6.34315 0 5 1.34315 5 3C5 3.76835 5.28885 4.46924 5.76389 5H3C1.34315 5 0 6.34315 0 8V10.1707C0.312779 10.0602 0.649365 10 1 10C2.65685 10 4 11.3431 4 13C4 14.6569 2.65685 16 1 16C0.649365 16 0.312779 15.9398 0 15.8293V18C0 19.6569 1.34315 21 3 21H5.17071C5.06015 20.6872 5 20.3506 5 20C5 18.3431 6.34315 17 8 17C9.65685 17 11 18.3431 11 20C11 20.3506 10.9398 20.6872 10.8293 21H13C14.6569 21 16 19.6569 16 18V15.8293C16.3128 15.9398 16.6494 16 17 16C18.6569 16 20 14.6569 20 13C20 11.3431 18.6569 10 17 10C16.6494 10 16.3128 10.0602 16 10.1707V8C16 6.34315 14.6569 5 13 5H10.2361Z"/></svg>,
'worldgen/world_preset': <svg width="28" height="23" viewBox="0 0 28 23" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M15 2C15 0.89543 15.8954 0 17 0H19C20.1046 0 21 0.895431 21 2V4C21 5.10457 20.1046 6 19 6V9.88192C20.1705 9.67661 21.362 9.2558 22 8.93682C23 8.43682 26 8 28 8.43682V14C28 16.2091 26.2091 18 24 18H8C5.79086 18 4 16.2091 4 14V3C6 2.50001 8 2.5 9.5 4C9.94949 4.44949 10.399 5.08825 10.8939 5.79154L10.8939 5.79155C11.5 6.65291 12.1742 7.61106 13 8.43682C13.8636 9.30044 15.3471 9.81299 17 9.96519V6C15.8954 6 15 5.10457 15 4V2ZM22 20.2968H6C3.79086 20.2968 2 18.5059 2 16.2968V7C1.34604 7.01691 0.673018 7.12855 0 7.2968V18.2968C0 20.5059 1.79086 22.2968 4 22.2968H20C21.6222 22.2968 23.0189 21.3311 23.6465 19.9433C23.1444 20.1704 22.5869 20.2968 22 20.2968Z"/></svg>,
}
+97
View File
@@ -0,0 +1,97 @@
import type { ItemStack } from 'deepslate/core'
import { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks'
import { useVersion } from '../contexts/Version.jsx'
import { useAsync } from '../hooks/useAsync.js'
import { fetchItemComponents } from '../services/index.js'
import { ResolvedItem } from '../services/ResolvedItem.js'
import { renderItem } from '../services/Resources.js'
import { jsonToNbt } from '../Utils.js'
import { ItemTooltip } from './ItemTooltip.jsx'
import { Octicon } from './Octicon.jsx'
interface Props {
item: ItemStack,
slotDecoration?: boolean,
tooltip?: boolean,
advancedTooltip?: boolean,
}
export function ItemDisplay({ item, slotDecoration, tooltip, advancedTooltip }: Props) {
const { version } = useVersion()
const el = useRef<HTMLDivElement>(null)
const [tooltipOffset, setTooltipOffset] = useState<[number, number]>([0, 0])
const [tooltipSwap, setTooltipSwap] = useState(false)
useEffect(() => {
const onMove = (e: MouseEvent) => {
requestAnimationFrame(() => {
const { right, width } = el.current!.getBoundingClientRect()
const swap = right + 200 > document.body.clientWidth
setTooltipSwap(swap)
setTooltipOffset([(swap ? width - e.offsetX : e.offsetX) + 20, e.offsetY - 40])
})
}
el.current?.addEventListener('mousemove', onMove)
return () => el.current?.removeEventListener('mousemove', onMove)
}, [])
const { value: baseComponents } = useAsync(() => fetchItemComponents(version), [version])
const itemResolver = useCallback((item: ItemStack) => {
const base = baseComponents?.get(item.id.toString()) ?? new Map()
return new ResolvedItem(item, new Map([...base.entries()].map(([k, v]) => [k, jsonToNbt(v)])))
}, [baseComponents])
const resolvedItem = useMemo(() => {
return itemResolver(item)
}, [item, itemResolver])
const maxDamage = resolvedItem.getMaxDamage()
const damage = resolvedItem.getDamage()
return <div class="item-display" ref={el}>
<RenderedItem item={resolvedItem} baseComponents={baseComponents} />
{item.count !== 1 && <>
<svg class="item-count" width="100%" height="100%" viewBox="0 0 100 100" preserveAspectRatio="xMinYMid meet">
<text x="95" y="93" font-size="50" textAnchor="end" fontFamily="MinecraftSeven" fill="#373737">{item.count}</text>
<text x="90" y="88" font-size="50" textAnchor="end" fontFamily="MinecraftSeven" fill="#ffffff">{item.count}</text>
</svg>
</>}
{slotDecoration && <>
{(maxDamage > 0 && damage > 0) && <svg class="item-durability" width="100%" height="100%" viewBox="0 0 18 18">
<rect x="3" y="14" width="13" height="2" fill="#000" />
<rect x="3" y="14" width={`${(maxDamage - damage) / maxDamage * 13}`} height="1" fill={`hsl(${(maxDamage - damage) / maxDamage * 120}deg, 100%, 50%)`} />
</svg>}
<div class="item-slot-overlay"></div>
</>}
{tooltip !== false && !resolvedItem.has('hide_tooltip') && <div class="item-tooltip" style={tooltipOffset && {
left: (tooltipSwap ? undefined : `${tooltipOffset[0]}px`),
right: (tooltipSwap ? `${tooltipOffset[0]}px` : undefined),
top: `${tooltipOffset[1]}px`,
}}>
<ItemTooltip item={resolvedItem} advanced={advancedTooltip} resolver={itemResolver} />
</div>}
</div>
}
interface ResolvedProps extends Props {
item: ResolvedItem
baseComponents: Map<string, Map<string, unknown>> | undefined
}
function RenderedItem({ item, baseComponents }: ResolvedProps) {
const { version } = useVersion()
const { value: src } = useAsync(async () => {
if (!baseComponents) {
return undefined
}
return renderItem(version, item, baseComponents)
}, [version, item, baseComponents])
if (src) {
return <>
<img src={src} alt={item.id.toString()} class="model" draggable={false} />
{item.hasFoil() && <div class="item-glint" style={{'--mask-image': `url("${src}")`}}></div>}
</>
}
return <div class="item-display">
{Octicon.package}
</div>
}
+103
View File
@@ -0,0 +1,103 @@
import type { ItemStack } from 'deepslate-1.20.4/core'
import { Identifier } from 'deepslate-1.20.4/core'
import { useEffect, useRef, useState } from 'preact/hooks'
import { useVersion } from '../contexts/Version.jsx'
import { useAsync } from '../hooks/useAsync.js'
import { fetchRegistries } from '../services/index.js'
import { renderItem } from '../services/Resources1204.js'
import { ItemTooltip1204 } from './ItemTooltip1204.jsx'
import { Octicon } from './Octicon.jsx'
import { itemHasGlint } from './previews/LootTable1204.js'
interface Props {
item: ItemStack,
slotDecoration?: boolean,
tooltip?: boolean,
advancedTooltip?: boolean,
}
export function ItemDisplay1204({ item, slotDecoration, tooltip, advancedTooltip }: Props) {
const el = useRef<HTMLDivElement>(null)
const [tooltipOffset, setTooltipOffset] = useState<[number, number]>([0, 0])
const [tooltipSwap, setTooltipSwap] = useState(false)
useEffect(() => {
const onMove = (e: MouseEvent) => {
requestAnimationFrame(() => {
const { right, width } = el.current!.getBoundingClientRect()
const swap = right + 200 > document.body.clientWidth
setTooltipSwap(swap)
setTooltipOffset([(swap ? width - e.offsetX : e.offsetX) + 20, e.offsetY - 40])
})
}
el.current?.addEventListener('mousemove', onMove)
return () => el.current?.removeEventListener('mousemove', onMove)
}, [])
const maxDamage = item.getItem().durability
return <div class="item-display" ref={el}>
<ItemItself item={item} />
{item.count !== 1 && <>
<svg class="item-count" width="100%" height="100%" viewBox="0 0 100 100" preserveAspectRatio="xMinYMid meet">
<text x="95" y="93" font-size="50" textAnchor="end" fontFamily="MinecraftSeven" fill="#373737">{item.count}</text>
<text x="90" y="88" font-size="50" textAnchor="end" fontFamily="MinecraftSeven" fill="#ffffff">{item.count}</text>
</svg>
</>}
{slotDecoration && <>
{(maxDamage && item.tag.getNumber('Damage') > 0) && <svg class="item-durability" width="100%" height="100%" viewBox="0 0 18 18">
<rect x="3" y="14" width="13" height="2" fill="#000" />
<rect x="3" y="14" width={`${(maxDamage - item.tag.getNumber('Damage')) / maxDamage * 13}`} height="1" fill={`hsl(${(maxDamage - item.tag.getNumber('Damage')) / maxDamage * 120}deg, 100%, 50%)`} />
</svg>}
<div class="item-slot-overlay"></div>
</>}
{tooltip !== false && <div class="item-tooltip" style={tooltipOffset && {
left: (tooltipSwap ? undefined : `${tooltipOffset[0]}px`),
right: (tooltipSwap ? `${tooltipOffset[0]}px` : undefined),
top: `${tooltipOffset[1]}px`,
}}>
<ItemTooltip1204 item={item} advanced={advancedTooltip} />
</div>}
</div>
}
function ItemItself({ item }: Props) {
const { version } = useVersion()
const hasGlint = itemHasGlint(item)
if (item.id.namespace !== Identifier.DEFAULT_NAMESPACE) {
return Octicon.package
}
const { value: allModels, loading: loadingModels } = useAsync(async () => {
const registries = await fetchRegistries(version)
return registries.get('model')
}, [version])
if (loadingModels || allModels === undefined) {
return null
}
const modelPath = `item/${item.id.path}`
if (allModels && allModels.includes('minecraft:' + modelPath)) {
return <RenderedItem item={item} hasGlint={hasGlint} />
}
return Octicon.package
}
function RenderedItem({ item, hasGlint }: Props & { hasGlint: boolean }) {
const { version } = useVersion()
const { value: src } = useAsync(() => renderItem(version, item), [version, item])
if (src) {
return <>
<img src={src} alt={item.id.toString()} class="model" draggable={false} />
{hasGlint && <div class="item-glint" style={{'--mask-image': `url("${src}")`}}></div>}
</>
}
return <div class="item-display">
{Octicon.package}
</div>
}
+296
View File
@@ -0,0 +1,296 @@
import type { MobEffectInstance, NbtTag } from 'deepslate'
import { ItemStack, NbtCompound, NbtList, PotionContents } from 'deepslate'
import { Identifier } from 'deepslate/core'
import { useVersion } from '../contexts/Version.jsx'
import type { ResolvedItem } from '../services/ResolvedItem.js'
import { intToDisplayHexRgb, makeDescriptionId, mergeTextComponentStyles } from '../Utils.js'
import { TextComponent } from './TextComponent.jsx'
interface Props {
item: ResolvedItem,
advanced?: boolean,
resolver: (item: ItemStack) => ResolvedItem,
}
export function ItemTooltip({ item, advanced, resolver }: Props) {
const { version } = useVersion()
return <>
<TextComponent component={item.getStyledHoverName(version)} />
{!advanced && !item.has('custom_name') && item.is('filled_map') && item.has('map_id') && (
<TextComponent component={{ translate: 'filled_map.id', with: [item.get('map_id', tag => tag.getAsNumber())], color: 'gray' }} />
)}
{!item.has('hide_additional_tooltip') && <>
{item.is('filled_map') && advanced && (item.get('map_id', tag => tag.isNumber())
? <TextComponent component={{ translate: 'filled_map.id', with: [item.get('map_id', tag => tag.getAsNumber())], color: 'gray' }} />
: <TextComponent component={{ translate: 'filled_map.unknown', color: 'gray' }} />
)}
{(item.id.path.endsWith('_banner') || item.is('shield')) && item.get('banner_patterns', tag => tag.isList() ? tag : [])?.map(layer =>
<TextComponent component={{ translate: `${layer.isCompound() ? (layer.hasCompound('pattern') ? layer.getString('translation_key') : `block.minecraft.banner.${layer.getString('pattern').replace(/^minecraft:/, '')}`) : ''}.${layer.isCompound() ? layer.getString('color') : ''}`, color: 'gray' }} />
)}
{item.is('crossbow') && item.getChargedProjectile() && (
<TextComponent component={{ translate: 'item.minecraft.crossbow.projectile', extra: [' ', resolver(item.getChargedProjectile()!).getDisplayName(version)] }}/>
)}
{item.is('disc_fragment_5') && (
<TextComponent component={{ translate: `${makeDescriptionId('item', item.id)}.desc`, color: 'gray' }} />
)}
{item.is('firework_rocket') && item.has('fireworks') && <>
{((item.get('fireworks', tag => tag.isCompound() ? tag.getNumber('flight_duration') : 0) ?? 0) > 0) && (
<TextComponent component={{ translate: 'item.minecraft.firework_rocket.flight', extra: [' ', item.get('fireworks', tag => tag.isCompound() ? tag.getNumber('flight_duration') : 0)], color: 'gray'}} />
)}
{/* TODO: firework explosions */}
</>}
{item.is('firework_star') && item.has('firework_explosion') && (
<TextComponent component={{ translate: `item.minecraft.firework_star.shape.${item.get('firework_explosion', tag => tag.isCompound() ? tag.getString('shape') : '')}`, color: 'gray' }} />
// TODO: additional stuff
)}
{/* TODO: painting variants */}
{item.is('goat_horn') && item.has('instrument') && (
<TextComponent component={mergeTextComponentStyles(item.get('instrument', tag => tag.isCompound()
? tag.get('description')?.toSimplifiedJson()
: { translate: makeDescriptionId('instrument', Identifier.parse(tag.getAsString()))}
), { color: 'gray' })} />
)}
{(item.is('lingering_potion') || item.is('potion') || item.is('splash_potion') || item.is('tipped_arrow')) && (
<PotionContentsTooltip contents={PotionContents.fromNbt(item.get('potion_contents', tag => tag) ?? NbtCompound.create())} factor={item.is('lingering_potion') ? 0.25 : item.is('tipped_arrow') ? 0.125 : 1} />
)}
{/* TODO: mob buckets */}
{/* TODO: smithing templates */}
{item.is('written_book') && item.has('written_book_content') && <>
<TextComponent component={{ translate: 'book.byAuthor', with: [item.get('written_book_content', tag => tag.isCompound() ? tag.getString('author') : undefined) ?? ''], color: 'gray' }} />
<TextComponent component={{ translate: `book.generation.${item.get('written_book_content', tag => tag.isCompound() ? tag.getNumber('generation') : undefined) ?? 0}`, color: 'gray' }} />
</>}
{(item.is('beehive') || item.is('bee_nest')) && <>
<TextComponent component={{ translate: 'container.beehive.bees', with: [item.get('bees', tag => tag.isList() ? tag.length : 0) ?? 0, 3], color: 'gray' }} />
<TextComponent component={{ translate: 'container.beehive.honey', with: [item.get('block_state', tag => tag.isCompound() ? tag.getString('honey_level') : 0) ?? 0, 5], color: 'gray' }} />
</>}
{item.is('decorated_pot') && item.has('pot_decorations') && <>
<TextComponent component={''} />
{item.get('pot_decorations', tag => tag.isList() ? tag.map(e =>
<TextComponent component={mergeTextComponentStyles(resolver(new ItemStack(Identifier.parse(e.getAsString()), 1)).getHoverName(version), { color: 'gray' })} />
) : undefined)}
</>}
{item.id.path.endsWith('_shulker_box') && <>
{item.has('container_loot') && (
<TextComponent component={{ translate: 'container.shulkerBox.unknownContents' }} />
)}
{(item.get('container', tag => tag.isList() ? tag.getItems() : []) ?? []).slice(0, 5).map(e => {
const subItem = resolver(ItemStack.fromNbt(e.isCompound() ? e.getCompound('item') : new NbtCompound()))
return <TextComponent component={{ translate: 'container.shulkerBox.itemCount', with: [subItem.getHoverName(version), subItem.count] }} />
})}
{(item.get('container', tag => tag.isList() ? tag.length : 0) ?? 0) > 5 && (
<TextComponent component={{ translate: 'container.shulkerBox.more', with: [(item.get('container', tag => tag.isList() ? tag.length : 0) ?? 0) - 5], italic: true }} />
)}
</>}
{/* TODO: spawner and trial spawner */}
</>}
{item.showInTooltip('jukebox_playable') && <>
<TextComponent component={mergeTextComponentStyles(item.get('jukebox_playable', tag => tag.isCompound() ? (
tag.hasCompound('song')
? tag.getCompound('song').get('description')?.toSimplifiedJson()
: { translate: makeDescriptionId('jukebox_song', Identifier.parse(tag.getString('song')))}
) : {}) ?? {}, { color: 'gray'})} />
</>}
{item.showInTooltip('trim') && <>
<TextComponent component={{ translate: makeDescriptionId('item', Identifier.create('smithing_template.upgrade' )), color: 'gray' }} />
<TextComponent component={{ text: ' ', extra: [item.get('trim', tag => tag.isCompound() ? (
tag.hasCompound('pattern')
? tag.getCompound('pattern').get('description')?.toSimplifiedJson()
: { translate: makeDescriptionId('trim_pattern', Identifier.parse(tag.getString('pattern'))), color: BUILTIN_TRIM_MATERIALS[tag.getString('material').replace(/^minecraft:/, '')] ?? 'gray' }
) : '')] }} />
<TextComponent component={{ text: ' ', extra: [item.get('trim', tag => tag.isCompound() ? (
tag.hasCompound('material')
? tag.getCompound('material').get('description')?.toSimplifiedJson()
: { translate: makeDescriptionId('trim_material', Identifier.parse(tag.getString('material'))), color: BUILTIN_TRIM_MATERIALS[tag.getString('material').replace(/^minecraft:/, '')] ?? 'gray' }
) : '')] }}/>
</>}
{item.showInTooltip('stored_enchantments') && (
<EnchantmentsTooltip data={item.get('stored_enchantments', tag => tag)} />
)}
{item.showInTooltip('enchantments') && (
<EnchantmentsTooltip data={item.get('enchantments', tag => tag)} />
)}
{item.showInTooltip('dyed_color') && (advanced
? <TextComponent component={{ translate: 'item.color', with: [intToDisplayHexRgb(item.get('dyed_color', tag => tag.isCompound() ? tag.getNumber('rgb') : tag.getAsNumber()))], color: 'gray' }} />
: <TextComponent component={{ translate: 'item.dyed', color: 'gray' }} />
)}
{item.getLore(version).map((component) =>
<TextComponent component={component} base={{ color: 'dark_purple', italic: true }} />
)}
{item.showInTooltip('attribute_modifiers') && (
<AttributeModifiersTooltip data={item.get('attribute_modifiers', tag => tag)} />
)}
{item.showInTooltip('unbreakable') && (
<TextComponent component={{ translate: 'item.unbreakable', color: 'blue' }} />
)}
{item.has('ominous_bottle_amplifier') && (
<PotionContentsTooltip contents={{ customEffects: [{ effect: Identifier.create('bad_omen'), amplifier: item.get('ominous_bottle_amplifier', tag => tag.getAsNumber()) ?? 0, duration: 120000 }]}} />
)}
{/* TODO: creative-only suspicious stew effects */}
{/* TODO: can break and can place on */}
{advanced && item.isDamageable() && (
<TextComponent component={{ translate: 'item.durability', with: [`${item.getMaxDamage() - item.getDamage()}`, `${item.getMaxDamage()}`] }} />
)}
{advanced && <>
<TextComponent component={{ text: item.id.toString(), color: 'dark_gray'}} />
{item.getSize() > 0 && <TextComponent component={{ translate: 'item.components', with: [item.getSize()], color: 'dark_gray' }} />}
</>}
</>
}
const BUILTIN_TRIM_MATERIALS: Record<string, string | undefined> = {
amethyst: '#9A5CC6',
copper: '#B4684D',
diamond: '#6EECD2',
emerald: '#11A036',
gold: '#DEB12D',
iron: '#ECECEC',
lapis: '#416E97',
netherite: '#625859',
quartz: '#E3D4C4',
redstone: '#971607',
}
const HARMFUL_EFFECTS = new Set([
'minecraft:slowness',
'minecraft:mining_fatigue',
'minecraft:instant_damage',
'minecraft:nausea',
'minecraft:blindness',
'minecraft:hunger',
'minecraft:weakness',
'minecraft:poison',
'minecraft:wither',
'minecraft:levitation',
'minecraft:unluck',
'minecraft:darkness',
'minecraft:wind_charged',
'minecraft:weaving',
'minecraft:oozing',
'minecraft:infested',
])
function PotionContentsTooltip({ contents, factor }: { contents: PotionContents, factor?: number }) {
const effects = PotionContents.getAllEffects(contents)
return <>
{effects.map(e => {
const color = HARMFUL_EFFECTS.has(e.effect.toString()) ? 'red' : 'blue'
let component: any = { translate: makeDescriptionId('effect', e.effect) }
if (e.amplifier > 0) {
component = { translate: 'potion.withAmplifier', with: [component, { translate: `potion.potency.${e.amplifier}` }] }
}
if (e.duration === -1 || e.duration > 20) {
component = { translate: 'potion.withDuration', with: [component, formatDuration(e, factor ?? 1)] }
}
return <TextComponent component={{ ...component, color }} />
})}
{effects.length === 0 && <TextComponent component={{ translate: 'effect.none', color: 'gray' }} />}
</>
}
function formatDuration(effect: MobEffectInstance, factor: number) {
if (effect.duration === -1) {
return { translate: 'effect.duration.infinite' }
}
const ticks = Math.floor(effect.duration * factor)
let seconds = Math.floor(ticks / 20)
let minutes = Math.floor(seconds / 60)
seconds %= 60
const hours = Math.floor(minutes / 60)
minutes %= 60
return `${hours > 0 ? `${hours}:` : ''}${minutes.toFixed().padStart(2, '0')}:${seconds.toFixed().padStart(2, '0')}`
}
function EnchantmentsTooltip({ data }: { data: NbtTag | undefined }) {
if (!data || !data.isCompound()) {
return <></>
}
const levels = data.hasCompound('levels') ? data.getCompound('levels') : data
return <>
{[...levels.keys()].map((key) => {
const level = levels.getNumber(key)
if (level <= 0) return <></>
const id = Identifier.parse(key)
return <TextComponent component={{ translate: makeDescriptionId('enchantment', id), color: id.path.endsWith('_curse') ? 'red' : 'gray', extra: level === 1 ? [] : [' ', { translate: `enchantment.level.${level}` }] }} />
})}
</>
}
const EQUIPMENT_GROUPS = [
'any',
'mainhand',
'offhand',
'hand',
'feet',
'legs',
'chest',
'head',
'armor',
'body',
]
const MODIFIER_OPERATIONS = [
'add_value',
'add_multiplied_base',
'add_multiplied_total',
]
const NEGATIVE_ATTRIBUTES = new Set([
'minecraft:burning_time',
'minecraft:fall_damage_multiplier',
])
const NEUTRAL_ATTRIBUTES = new Set([
'minecraft:gravity',
'minecraft:scale',
])
function AttributeModifiersTooltip({ data }: { data: NbtTag | undefined }) {
const modifiers = data?.isList() ? data : data?.isCompound() ? data.getList('modifiers') : new NbtList()
return <>
{EQUIPMENT_GROUPS.map(group => {
let first = true
return modifiers.map((e) => {
if (!e.isCompound()) return
const display = e.getCompound('display').getString('type')
if (display == 'hidden') return
const slot = e.has('slot') ? e.getString('slot') : 'any'
if (slot !== group) return
const wasFirst = first
first = false
let amount = e.getNumber('amount')
const type = Identifier.parse(e.getString('type'))
const id = Identifier.parse(e.getString('id'))
const operation = MODIFIER_OPERATIONS.indexOf(e.getString('operation'))
let absolute = false
if (id.equals(Identifier.create('base_attack_damage'))) {
amount += 1
absolute = true
} else if (id.equals(Identifier.create('base_attack_speed'))) {
amount += 4
absolute = true
}
if (operation !== 0) {
amount *= 100
} else if (type.equals(Identifier.create('knockback_resistance'))) {
amount *= 10
}
return <>
{wasFirst && <>
<TextComponent component={''} />
<TextComponent component={{ translate: `item.modifiers.${group}`, color: 'gray' }} />
</>}
{absolute ? (
<TextComponent component={[' ', { translate: `attribute.modifier.equals.${operation}`, with: [+amount.toFixed(2), { translate: `attribute.name.${type.path}`}], color: 'dark_green' }]} />
) : amount > 0 ? (
<TextComponent component={{ translate: `attribute.modifier.plus.${operation}`, with: [+amount.toFixed(2), { translate: `attribute.name.${type.path}`}], color: NEGATIVE_ATTRIBUTES.has(type.toString()) ? 'red' : NEUTRAL_ATTRIBUTES.has(type.toString()) ? 'gray' : 'blue' }} />
) : amount < 0 ? (
<TextComponent component={{ translate: `attribute.modifier.take.${operation}`, with: [+(-amount).toFixed(2), { translate: `attribute.name.${type.path}`}], color: NEGATIVE_ATTRIBUTES.has(type.toString()) ? 'blue' : NEUTRAL_ATTRIBUTES.has(type.toString()) ? 'gray' : 'red'}} />
) : <></>}
</>
})
})}
</>
}
+137
View File
@@ -0,0 +1,137 @@
import type { ItemStack } from 'deepslate-1.20.4/core'
import { AttributeModifierOperation, Enchantment, Identifier, MobEffectInstance, Potion } from 'deepslate-1.20.4/core'
import { NbtList, NbtType } from 'deepslate-1.20.4/nbt'
import { useLocale } from '../contexts/Locale.jsx'
import { useVersion } from '../contexts/Version.jsx'
import { useAsync } from '../hooks/useAsync.js'
import { getLanguage, getTranslation } from '../services/Resources.js'
import { intToDisplayHexRgb, message } from '../Utils.js'
import { TextComponent } from './TextComponent.jsx'
interface Props {
item: ItemStack,
advanced?: boolean,
}
export function ItemTooltip1204({ item, advanced }: Props) {
const { version } = useVersion()
const { lang } = useLocale()
const { value: language } = useAsync(() => getLanguage(version, lang), [version, lang])
const isPotion = item.is('potion') || item.is('splash_potion') || item.is('lingering_potion')
let displayName = item.tag.getCompound('display').getString('Name')
let name: string | undefined
if (displayName) {
try {
name = JSON.parse(displayName)
} catch (e) {
console.warn(`Error parsing display name '${displayName}': ${message(e)}`)
displayName = ''
}
}
if (name === undefined) {
if (language) {
let descriptionId = `${item.id.namespace}.${item.id.path}`
if (isPotion) {
descriptionId = `${descriptionId}.effect.${Potion.fromNbt(item).name}`
}
name = getTranslation(language, `item.${descriptionId}`)
name ??= getTranslation(language, `block.${descriptionId}`)
}
name ??= item.id.path
.replace(/[_\/]/g, ' ')
.split(' ')
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
.join(' ')
}
const lore: any[] = []
item.tag.getCompound('display').getList('Lore', NbtType.String).forEach((line) => {
try {
lore.push(JSON.parse(line['value']))
} catch (e) {
console.warn(`Error parsing lore line '${line}': ${message(e)}`)
}
})
const durability = item.getItem().durability
const enchantments = (item.is('enchanted_book') ? item.tag.getList('StoredEnchantments', NbtType.Compound) : item.tag.getList('Enchantments', NbtType.Compound)) ?? NbtList.create()
const effects = isPotion ? Potion.getAllEffects(item) : []
const attributeModifiers = isPotion ? Potion.getAllAttributeModifiers(item) : []
return <>
<TextComponent component={name} base={{ color: 'white', italic: displayName.length > 0 }} />
{shouldShow(item, 'additional') && <>
{(!advanced && displayName.length === 0 && item.is('filled_map') && item.tag.hasNumber('map')) && <>
<TextComponent component={{ text: `#${item.tag.getNumber('map')}`, color: 'gray' }} />
</>}
{(item.is('filled_map') && advanced) && <>
<TextComponent component={{ translate: 'filled_map.unknown', color: 'gray' }} />
</>}
{isPotion && effects.length === 0
? <TextComponent component={{ translate: 'effect.none', color: 'gray' }} />
: effects.map(e => {
const color = e.effect.category === 'harmful' ? 'red' : 'blue'
let component: any = { translate: `effect.${e.effect.id.namespace}.${e.effect.id.path}` }
if (e.amplifier > 0) {
component = { translate: 'potion.withAmplifier', with: [component, { translate: `potion.potency.${e.amplifier}` }] }
}
if (e.duration > 20) {
component = { translate: 'potion.withDuration', with: [component, MobEffectInstance.formatDuration(e)] }
}
return <TextComponent component={{ ...component, color }} />
})}
{attributeModifiers.length > 0 && <>
<TextComponent component='' />
<TextComponent component={{ translate: 'potion.whenDrank', color: 'dark_purple' }} />
{attributeModifiers.map(([attr, { amount, operation }]) => {
const a = operation === AttributeModifierOperation.addition ? amount * 100 : amount
if (amount > 0) {
return <TextComponent component={{ translate: `attribute.modifier.plus.${operation}`, with: [Math.floor(a * 100) / 100, { translate: `attribute.name.${attr.id.path}` }], color: 'blue' }} />
} else if (amount < 0) {
return <TextComponent component={{ translate: `attribute.modifier.take.${operation}`, with: [Math.floor(a * -100) / 100, { translate: `attribute.name.${attr.id.path}` }], color: 'red' }} />
}
return null
})}
</>}
</>}
{shouldShow(item, 'enchantments') && enchantments.map(enchantment => {
const id = enchantment.getString('id')
const lvl = enchantment.getNumber('lvl')
const ench = Enchantment.REGISTRY.get(Identifier.parse(id))
const component: any[] = [{ translate: `enchantment.${id.replace(':', '.')}`, color: ench?.isCurse ? 'red' : 'gray' }]
if (lvl !== 1 || ench?.maxLevel !== 1) {
component.push(' ', { translate: `enchantment.level.${lvl}`})
}
return <TextComponent component={component} />
})}
{item.tag.hasCompound('display') && <>
{shouldShow(item, 'dye') && item.tag.getCompound('display').hasNumber('color') && (advanced
? <TextComponent component={{ translate: 'item.color', with: [intToDisplayHexRgb(item.tag.getCompound('display').getNumber('color'))], color: 'gray' }} />
: <TextComponent component={{ translate: 'item.dyed', color: 'gray' }} />)}
{lore.map((component) => <TextComponent component={component} base={{ color: 'dark_purple', italic: true }} />)}
</>}
{shouldShow(item, 'unbreakable') && item.tag.getBoolean('Unbreakable') && <TextComponent component={{ translate: 'item.unbreakable', color: 'blue' }} />}
{(advanced && item.tag.getNumber('Damage') > 0 && durability) && <TextComponent component={{ translate: 'item.durability', with: [`${durability - item.tag.getNumber('Damage')}`, `${durability}`] }} />}
{advanced && <>
<TextComponent component={{ text: item.id.toString(), color: 'dark_gray'}} />
{item.tag.size > 0 && <TextComponent component={{ translate: 'item.nbt_tags', with: [item.tag.size], color: 'dark_gray' }} />}
</>}
</>
}
const TooltipMasks = {
enchantments: 1,
modifiers: 2,
unbreakable: 4,
can_destroy: 8,
can_place: 16,
additional: 32,
dye: 64,
upgrades: 128,
}
function shouldShow(item: ItemStack, mask: keyof typeof TooltipMasks) {
const flags = item.tag.getNumber('HideFlags')
return (flags & TooltipMasks[mask]) === 0
}
+39
View File
@@ -0,0 +1,39 @@
import type { JSX } from 'preact'
import { useCallback, useEffect } from 'preact/hooks'
import { useModal } from '../contexts/Modal.jsx'
import { LOSE_FOCUS } from '../hooks/index.js'
const MODALS_KEY = 'data-modals'
interface Props extends JSX.HTMLAttributes<HTMLDivElement> {}
export function Modal(props: Props) {
const { hideModal } = useModal()
useEffect(() => {
addCurrentModals(1)
window.addEventListener('click', hideModal)
return () => {
addCurrentModals(-1)
window.removeEventListener('click', hideModal)
}
}, [hideModal])
const onClick = useCallback((e: MouseEvent) => {
e.stopPropagation()
e.target?.dispatchEvent(new Event(LOSE_FOCUS, { bubbles: true }))
}, [])
return <div {...props} class={`modal ${props.class ?? ''}`} onClick={onClick}>
{props.children}
</div>
}
function addCurrentModals(diff: number) {
const currentModals = parseInt(document.body.getAttribute(MODALS_KEY) ?? '0')
const newModals = currentModals + diff
if (newModals <= 0) {
document.body.removeAttribute(MODALS_KEY)
} else {
document.body.setAttribute(MODALS_KEY, newModals.toFixed())
}
}
+74
View File
@@ -0,0 +1,74 @@
export const Octicon = {
alert: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path></svg>,
archive: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M1.75 2.5a.25.25 0 00-.25.25v1.5c0 .138.112.25.25.25h12.5a.25.25 0 00.25-.25v-1.5a.25.25 0 00-.25-.25H1.75zM0 2.75C0 1.784.784 1 1.75 1h12.5c.966 0 1.75.784 1.75 1.75v1.5A1.75 1.75 0 0114.25 6H1.75A1.75 1.75 0 010 4.25v-1.5zM1.75 7a.75.75 0 01.75.75v5.5c0 .138.112.25.25.25h10.5a.25.25 0 00.25-.25v-5.5a.75.75 0 111.5 0v5.5A1.75 1.75 0 0113.25 15H2.75A1.75 1.75 0 011 13.25v-5.5A.75.75 0 011.75 7zm4.5 1a.75.75 0 000 1.5h3.5a.75.75 0 100-1.5h-3.5z"></path></svg>,
arrow_left: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.78 12.53a.75.75 0 01-1.06 0L2.47 8.28a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 1.06L4.81 7h7.44a.75.75 0 010 1.5H4.81l2.97 2.97a.75.75 0 010 1.06z"></path></svg>,
arrow_right: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M8.22 2.97a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06l2.97-2.97H3.75a.75.75 0 010-1.5h7.44L8.22 4.03a.75.75 0 010-1.06z"></path></svg>,
arrow_switch: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M5.22 14.78a.75.75 0 0 0 1.06-1.06L4.56 12h8.69a.75.75 0 0 0 0-1.5H4.56l1.72-1.72a.75.75 0 0 0-1.06-1.06l-3 3a.75.75 0 0 0 0 1.06l3 3Zm5.56-6.5a.75.75 0 1 1-1.06-1.06l1.72-1.72H2.75a.75.75 0 0 1 0-1.5h8.69L9.72 2.28a.75.75 0 0 1 1.06-1.06l3 3a.75.75 0 0 1 0 1.06l-3 3Z"></path></svg>,
check: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path></svg>,
chevron_down: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M12.78 6.22a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06 0L3.22 7.28a.75.75 0 011.06-1.06L8 9.94l3.72-3.72a.75.75 0 011.06 0z"></path></svg>,
chevron_left: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M9.78 12.78a.75.75 0 01-1.06 0L4.47 8.53a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 1.06L6.06 8l3.72 3.72a.75.75 0 010 1.06z"></path></svg>,
chevron_right: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M6.22 3.22a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06L9.94 8 6.22 4.28a.75.75 0 010-1.06z"></path></svg>,
chevron_up: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M3.22 9.78a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 0l4.25 4.25a.75.75 0 01-1.06 1.06L8 6.06 4.28 9.78a.75.75 0 01-1.06 0z"></path></svg>,
circle_slash: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM3.965 13.096a6.5 6.5 0 0 0 9.131-9.131ZM1.5 8a6.474 6.474 0 0 0 1.404 4.035l9.131-9.131A6.499 6.499 0 0 0 1.5 8Z"></path></svg>,
code: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M4.72 3.22a.75.75 0 011.06 1.06L2.06 8l3.72 3.72a.75.75 0 11-1.06 1.06L.47 8.53a.75.75 0 010-1.06l4.25-4.25zm6.56 0a.75.75 0 10-1.06 1.06L13.94 8l-3.72 3.72a.75.75 0 101.06 1.06l4.25-4.25a.75.75 0 000-1.06l-4.25-4.25z"></path></svg>,
codescan_checkmark: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M10.28 6.28a.75.75 0 10-1.06-1.06L6.25 8.19l-.97-.97a.75.75 0 00-1.06 1.06l1.5 1.5a.75.75 0 001.06 0l3.5-3.5z"></path><path fill-rule="evenodd" d="M7.5 15a7.469 7.469 0 004.746-1.693l2.474 2.473a.75.75 0 101.06-1.06l-2.473-2.474A7.5 7.5 0 107.5 15zm0-13.5a6 6 0 104.094 10.386.75.75 0 01.293-.292A6 6 0 007.5 1.5z"></path></svg>,
copy: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg>,
diff_added: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M2.75 1h10.5c.966 0 1.75.784 1.75 1.75v10.5A1.75 1.75 0 0 1 13.25 15H2.75A1.75 1.75 0 0 1 1 13.25V2.75C1 1.784 1.784 1 2.75 1Zm10.5 1.5H2.75a.25.25 0 0 0-.25.25v10.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25V2.75a.25.25 0 0 0-.25-.25ZM8 4a.75.75 0 0 1 .75.75v2.5h2.5a.75.75 0 0 1 0 1.5h-2.5v2.5a.75.75 0 0 1-1.5 0v-2.5h-2.5a.75.75 0 0 1 0-1.5h2.5v-2.5A.75.75 0 0 1 8 4Z"></path></svg>,
diff_modified: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M13.25 1c.966 0 1.75.784 1.75 1.75v10.5A1.75 1.75 0 0 1 13.25 15H2.75A1.75 1.75 0 0 1 1 13.25V2.75C1 1.784 1.784 1 2.75 1ZM2.75 2.5a.25.25 0 0 0-.25.25v10.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25V2.75a.25.25 0 0 0-.25-.25ZM8 10a2 2 0 1 1-.001-3.999A2 2 0 0 1 8 10Z"></path></svg>,
diff_removed: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M13.25 1c.966 0 1.75.784 1.75 1.75v10.5A1.75 1.75 0 0 1 13.25 15H2.75A1.75 1.75 0 0 1 1 13.25V2.75C1 1.784 1.784 1 2.75 1ZM2.75 2.5a.25.25 0 0 0-.25.25v10.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25V2.75a.25.25 0 0 0-.25-.25Zm8.5 6.25h-6.5a.75.75 0 0 1 0-1.5h6.5a.75.75 0 0 1 0 1.5Z"></path></svg>,
diff_renamed: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M13.25 1c.966 0 1.75.784 1.75 1.75v10.5A1.75 1.75 0 0 1 13.25 15H2.75A1.75 1.75 0 0 1 1 13.25V2.75C1 1.784 1.784 1 2.75 1ZM2.75 2.5a.25.25 0 0 0-.25.25v10.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25V2.75a.25.25 0 0 0-.25-.25Zm9.03 6.03-3.25 3.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.97-1.97H4.75a.75.75 0 0 1 0-1.5h4.69L7.47 5.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l3.25 3.25a.75.75 0 0 1 0 1.06Z"></path></svg>,
dash: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M2 8a.75.75 0 01.75-.75h10.5a.75.75 0 010 1.5H2.75A.75.75 0 012 8z"></path></svg>,
device_desktop: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M1.75 2.5h12.5a.25.25 0 01.25.25v7.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25v-7.5a.25.25 0 01.25-.25zM14.25 1H1.75A1.75 1.75 0 000 2.75v7.5C0 11.216.784 12 1.75 12h3.727c-.1 1.041-.52 1.872-1.292 2.757A.75.75 0 004.75 16h6.5a.75.75 0 00.565-1.243c-.772-.885-1.193-1.716-1.292-2.757h3.727A1.75 1.75 0 0016 10.25v-7.5A1.75 1.75 0 0014.25 1zM9.018 12H6.982a5.72 5.72 0 01-.765 2.5h3.566a5.72 5.72 0 01-.765-2.5z"></path></svg>,
dot_fill: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M8 4a4 4 0 100 8 4 4 0 000-8z"></path></svg>,
download: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.47 10.78a.75.75 0 001.06 0l3.75-3.75a.75.75 0 00-1.06-1.06L8.75 8.44V1.75a.75.75 0 00-1.5 0v6.69L4.78 5.97a.75.75 0 00-1.06 1.06l3.75 3.75zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"></path></svg>,
duplicate: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M10.5 3a.75.75 0 01.75.75v1h1a.75.75 0 010 1.5h-1v1a.75.75 0 01-1.5 0v-1h-1a.75.75 0 010-1.5h1v-1A.75.75 0 0110.5 3z"></path><path fill-rule="evenodd" d="M6.75 0A1.75 1.75 0 005 1.75v7.5c0 .966.784 1.75 1.75 1.75h7.5A1.75 1.75 0 0016 9.25v-7.5A1.75 1.75 0 0014.25 0h-7.5zM6.5 1.75a.25.25 0 01.25-.25h7.5a.25.25 0 01.25.25v7.5a.25.25 0 01-.25.25h-7.5a.25.25 0 01-.25-.25v-7.5z"></path><path d="M1.75 5A1.75 1.75 0 000 6.75v7.5C0 15.216.784 16 1.75 16h7.5A1.75 1.75 0 0011 14.25v-1.5a.75.75 0 00-1.5 0v1.5a.25.25 0 01-.25.25h-7.5a.25.25 0 01-.25-.25v-7.5a.25.25 0 01.25-.25h1.5a.75.75 0 000-1.5h-1.5z"></path></svg>,
eye: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"></path></svg>,
eye_closed: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M.143 2.31a.75.75 0 011.047-.167l14.5 10.5a.75.75 0 11-.88 1.214l-2.248-1.628C11.346 13.19 9.792 14 8 14c-1.981 0-3.67-.992-4.933-2.078C1.797 10.832.88 9.577.43 8.9a1.618 1.618 0 010-1.797c.353-.533.995-1.42 1.868-2.305L.31 3.357A.75.75 0 01.143 2.31zm3.386 3.378a14.21 14.21 0 00-1.85 2.244.12.12 0 00-.022.068c0 .021.006.045.022.068.412.621 1.242 1.75 2.366 2.717C5.175 11.758 6.527 12.5 8 12.5c1.195 0 2.31-.488 3.29-1.191L9.063 9.695A2 2 0 016.058 7.52l-2.53-1.832zM8 3.5c-.516 0-1.017.09-1.499.251a.75.75 0 11-.473-1.423A6.23 6.23 0 018 2c1.981 0 3.67.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.619 1.619 0 010 1.798c-.11.166-.248.365-.41.587a.75.75 0 11-1.21-.887c.148-.201.272-.382.371-.53a.119.119 0 000-.137c-.412-.621-1.242-1.75-2.366-2.717C10.825 4.242 9.473 3.5 8 3.5z"></path></svg>,
file: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M3.75 1.5a.25.25 0 00-.25.25v11.5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25V6H9.75A1.75 1.75 0 018 4.25V1.5H3.75zm5.75.56v2.19c0 .138.112.25.25.25h2.19L9.5 2.06zM2 1.75C2 .784 2.784 0 3.75 0h5.086c.464 0 .909.184 1.237.513l3.414 3.414c.329.328.513.773.513 1.237v8.086A1.75 1.75 0 0112.25 15h-8.5A1.75 1.75 0 012 13.25V1.75z"></path></svg>,
file_directory: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M1.75 1A1.75 1.75 0 000 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0016 13.25v-8.5A1.75 1.75 0 0014.25 3h-6.5a.25.25 0 01-.2-.1l-.9-1.2c-.33-.44-.85-.7-1.4-.7h-3.5z"></path></svg>,
file_zip: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M3.5 1.75a.25.25 0 01.25-.25h3a.75.75 0 000 1.5h.5a.75.75 0 000-1.5h2.086a.25.25 0 01.177.073l2.914 2.914a.25.25 0 01.073.177v8.586a.25.25 0 01-.25.25h-.5a.75.75 0 000 1.5h.5A1.75 1.75 0 0014 13.25V4.664c0-.464-.184-.909-.513-1.237L10.573.513A1.75 1.75 0 009.336 0H3.75A1.75 1.75 0 002 1.75v11.5c0 .649.353 1.214.874 1.515a.75.75 0 10.752-1.298.25.25 0 01-.126-.217V1.75zM8.75 3a.75.75 0 000 1.5h.5a.75.75 0 000-1.5h-.5zM6 5.25a.75.75 0 01.75-.75h.5a.75.75 0 010 1.5h-.5A.75.75 0 016 5.25zm2 1.5A.75.75 0 018.75 6h.5a.75.75 0 010 1.5h-.5A.75.75 0 018 6.75zm-1.25.75a.75.75 0 000 1.5h.5a.75.75 0 000-1.5h-.5zM8 9.75A.75.75 0 018.75 9h.5a.75.75 0 010 1.5h-.5A.75.75 0 018 9.75zm-.75.75a1.75 1.75 0 00-1.75 1.75v3c0 .414.336.75.75.75h2.5a.75.75 0 00.75-.75v-3a1.75 1.75 0 00-1.75-1.75h-.5zM7 12.25a.25.25 0 01.25-.25h.5a.25.25 0 01.25.25v2.25H7v-2.25z"></path></svg>,
flame: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.998 14.5c2.832 0 5-1.98 5-4.5 0-1.463-.68-2.19-1.879-3.383l-.036-.037c-1.013-1.008-2.3-2.29-2.834-4.434-.322.256-.63.579-.864.953-.432.696-.621 1.58-.046 2.73.473.947.67 2.284-.278 3.232-.61.61-1.545.84-2.403.633a2.788 2.788 0 01-1.436-.874A3.21 3.21 0 003 10c0 2.53 2.164 4.5 4.998 4.5zM9.533.753C9.496.34 9.16.009 8.77.146 7.035.75 4.34 3.187 5.997 6.5c.344.689.285 1.218.003 1.5-.419.419-1.54.487-2.04-.832-.173-.454-.659-.762-1.035-.454C2.036 7.44 1.5 8.702 1.5 10c0 3.512 2.998 6 6.498 6s6.5-2.5 6.5-6c0-2.137-1.128-3.26-2.312-4.438-1.19-1.184-2.436-2.425-2.653-4.81z"></path></svg>,
gear: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.429 1.525a6.593 6.593 0 011.142 0c.036.003.108.036.137.146l.289 1.105c.147.56.55.967.997 1.189.174.086.341.183.501.29.417.278.97.423 1.53.27l1.102-.303c.11-.03.175.016.195.046.219.31.41.641.573.989.014.031.022.11-.059.19l-.815.806c-.411.406-.562.957-.53 1.456a4.588 4.588 0 010 .582c-.032.499.119 1.05.53 1.456l.815.806c.08.08.073.159.059.19a6.494 6.494 0 01-.573.99c-.02.029-.086.074-.195.045l-1.103-.303c-.559-.153-1.112-.008-1.529.27-.16.107-.327.204-.5.29-.449.222-.851.628-.998 1.189l-.289 1.105c-.029.11-.101.143-.137.146a6.613 6.613 0 01-1.142 0c-.036-.003-.108-.037-.137-.146l-.289-1.105c-.147-.56-.55-.967-.997-1.189a4.502 4.502 0 01-.501-.29c-.417-.278-.97-.423-1.53-.27l-1.102.303c-.11.03-.175-.016-.195-.046a6.492 6.492 0 01-.573-.989c-.014-.031-.022-.11.059-.19l.815-.806c.411-.406.562-.957.53-1.456a4.587 4.587 0 010-.582c.032-.499-.119-1.05-.53-1.456l-.815-.806c-.08-.08-.073-.159-.059-.19a6.44 6.44 0 01.573-.99c.02-.029.086-.075.195-.045l1.103.303c.559.153 1.112.008 1.529-.27.16-.107.327-.204.5-.29.449-.222.851-.628.998-1.189l.289-1.105c.029-.11.101-.143.137-.146zM8 0c-.236 0-.47.01-.701.03-.743.065-1.29.615-1.458 1.261l-.29 1.106c-.017.066-.078.158-.211.224a5.994 5.994 0 00-.668.386c-.123.082-.233.09-.3.071L3.27 2.776c-.644-.177-1.392.02-1.82.63a7.977 7.977 0 00-.704 1.217c-.315.675-.111 1.422.363 1.891l.815.806c.05.048.098.147.088.294a6.084 6.084 0 000 .772c.01.147-.038.246-.088.294l-.815.806c-.474.469-.678 1.216-.363 1.891.2.428.436.835.704 1.218.428.609 1.176.806 1.82.63l1.103-.303c.066-.019.176-.011.299.071.213.143.436.272.668.386.133.066.194.158.212.224l.289 1.106c.169.646.715 1.196 1.458 1.26a8.094 8.094 0 001.402 0c.743-.064 1.29-.614 1.458-1.26l.29-1.106c.017-.066.078-.158.211-.224a5.98 5.98 0 00.668-.386c.123-.082.233-.09.3-.071l1.102.302c.644.177 1.392-.02 1.82-.63.268-.382.505-.789.704-1.217.315-.675.111-1.422-.364-1.891l-.814-.806c-.05-.048-.098-.147-.088-.294a6.1 6.1 0 000-.772c-.01-.147.039-.246.088-.294l.814-.806c.475-.469.679-1.216.364-1.891a7.992 7.992 0 00-.704-1.218c-.428-.609-1.176-.806-1.82-.63l-1.103.303c-.066.019-.176.011-.299-.071a5.991 5.991 0 00-.668-.386c-.133-.066-.194-.158-.212-.224L10.16 1.29C9.99.645 9.444.095 8.701.031A8.094 8.094 0 008 0zm1.5 8a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM11 8a3 3 0 11-6 0 3 3 0 016 0z"></path></svg>,
git_commit: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M10.5 7.75a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0zm1.43.75a4.002 4.002 0 01-7.86 0H.75a.75.75 0 110-1.5h3.32a4.001 4.001 0 017.86 0h3.32a.75.75 0 110 1.5h-3.32z"></path></svg>,
globe: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M1.543 7.25h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.506 6.506 0 00-4.666 5.5zm2.733 1.5H1.543a6.506 6.506 0 004.666 5.5 11.13 11.13 0 01-.352-.552c-.715-1.192-1.437-2.874-1.581-4.948zm1.504 0h4.44a9.637 9.637 0 01-1.363 4.177c-.306.51-.612.919-.857 1.215a9.978 9.978 0 01-.857-1.215A9.637 9.637 0 015.78 8.75zm4.44-1.5H5.78a9.637 9.637 0 011.363-4.177c.306-.51.612-.919.857-1.215.245.296.55.705.857 1.215A9.638 9.638 0 0110.22 7.25zm1.504 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.506 6.506 0 004.666-5.5h-2.733zm2.733-1.5h-2.733c-.144-2.074-.866-3.756-1.58-4.948a11.738 11.738 0 00-.353-.552 6.506 6.506 0 014.666 5.5zM8 0a8 8 0 100 16A8 8 0 008 0z"></path></svg>,
heart: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"></path></svg>,
history: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M1.643 3.143L.427 1.927A.25.25 0 000 2.104V5.75c0 .138.112.25.25.25h3.646a.25.25 0 00.177-.427L2.715 4.215a6.5 6.5 0 11-1.18 4.458.75.75 0 10-1.493.154 8.001 8.001 0 101.6-5.684zM7.75 4a.75.75 0 01.75.75v2.992l2.028.812a.75.75 0 01-.557 1.392l-2.5-1A.75.75 0 017 8.25v-3.5A.75.75 0 017.75 4z"></path></svg>,
info: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm6.5-.25A.75.75 0 017.25 7h1a.75.75 0 01.75.75v2.75h.25a.75.75 0 010 1.5h-2a.75.75 0 010-1.5h.25v-2h-.25a.75.75 0 01-.75-.75zM8 6a1 1 0 100-2 1 1 0 000 2z"></path></svg>,
issue_opened: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm9 3a1 1 0 11-2 0 1 1 0 012 0zm-.25-6.25a.75.75 0 00-1.5 0v3.5a.75.75 0 001.5 0v-3.5z"></path></svg>,
kebab_horizontal: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path></svg>,
link: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg>,
link_external: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M10.604 1h4.146a.25.25 0 01.25.25v4.146a.25.25 0 01-.427.177L13.03 4.03 9.28 7.78a.75.75 0 01-1.06-1.06l3.75-3.75-1.543-1.543A.25.25 0 0110.604 1zM3.75 2A1.75 1.75 0 002 3.75v8.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 12.25v-3.5a.75.75 0 00-1.5 0v3.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-8.5a.25.25 0 01.25-.25h3.5a.75.75 0 000-1.5h-3.5z"></path></svg>,
lock: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M4 4a4 4 0 0 1 8 0v2h.25c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 12.25 15h-8.5A1.75 1.75 0 0 1 2 13.25v-5.5C2 6.784 2.784 6 3.75 6H4Zm8.25 3.5h-8.5a.25.25 0 0 0-.25.25v5.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25ZM10.5 6V4a2.5 2.5 0 1 0-5 0v2Z"></path></svg>,
mark_github: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg>,
megaphone: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M3.25 9a.75.75 0 0 1 .75.75c0 2.142.456 3.828.733 4.653a.122.122 0 0 0 .05.064.212.212 0 0 0 .117.033h1.31c.085 0 .18-.042.258-.152a.45.45 0 0 0 .075-.366A16.743 16.743 0 0 1 6 9.75a.75.75 0 0 1 1.5 0c0 1.588.25 2.926.494 3.85.293 1.113-.504 2.4-1.783 2.4H4.9c-.686 0-1.35-.41-1.589-1.12A16.4 16.4 0 0 1 2.5 9.75.75.75 0 0 1 3.25 9Z"></path><path d="M0 6a4 4 0 0 1 4-4h2.75a.75.75 0 0 1 .75.75v6.5a.75.75 0 0 1-.75.75H4a4 4 0 0 1-4-4Zm4-2.5a2.5 2.5 0 1 0 0 5h2v-5Z"></path><path d="M15.59.082A.75.75 0 0 1 16 .75v10.5a.75.75 0 0 1-1.189.608l-.002-.001h.001l-.014-.01a5.775 5.775 0 0 0-.422-.25 10.63 10.63 0 0 0-1.469-.64C11.576 10.484 9.536 10 6.75 10a.75.75 0 0 1 0-1.5c2.964 0 5.174.516 6.658 1.043.423.151.787.302 1.092.443V2.014c-.305.14-.669.292-1.092.443C11.924 2.984 9.713 3.5 6.75 3.5a.75.75 0 0 1 0-1.5c2.786 0 4.826-.484 6.155-.957.665-.236 1.154-.47 1.47-.64.144-.077.284-.161.421-.25l.014-.01a.75.75 0 0 1 .78-.061Z"></path></svg>,
moon: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M9.598 1.591a.75.75 0 01.785-.175 7 7 0 11-8.967 8.967.75.75 0 01.961-.96 5.5 5.5 0 007.046-7.046.75.75 0 01.175-.786zm1.616 1.945a7 7 0 01-7.678 7.678 5.5 5.5 0 107.678-7.678z"></path></svg>,
mortar_board: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M7.693 1.066a.747.747 0 0 1 .614 0l7.25 3.25a.75.75 0 0 1 0 1.368L13 6.831v2.794c0 1.024-.81 1.749-1.66 2.173-.893.447-2.075.702-3.34.702-.278 0-.55-.012-.816-.036a.75.75 0 0 1 .133-1.494c.22.02.45.03.683.03 1.082 0 2.025-.221 2.67-.543.69-.345.83-.682.83-.832V7.503L8.307 8.934a.747.747 0 0 1-.614 0L4 7.28v1.663c.296.105.575.275.812.512.438.438.688 1.059.688 1.796v3a.75.75 0 0 1-.75.75h-3a.75.75 0 0 1-.75-.75v-3c0-.737.25-1.358.688-1.796.237-.237.516-.407.812-.512V6.606L.443 5.684a.75.75 0 0 1 0-1.368ZM2.583 5 8 7.428 13.416 5 8 2.572ZM2.5 11.25v2.25H4v-2.25c0-.388-.125-.611-.25-.735a.697.697 0 0 0-.5-.203.707.707 0 0 0-.5.203c-.125.124-.25.347-.25.735Z"></path></svg>,
package: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M8.878.392a1.75 1.75 0 00-1.756 0l-5.25 3.045A1.75 1.75 0 001 4.951v6.098c0 .624.332 1.2.872 1.514l5.25 3.045a1.75 1.75 0 001.756 0l5.25-3.045c.54-.313.872-.89.872-1.514V4.951c0-.624-.332-1.2-.872-1.514L8.878.392zM7.875 1.69a.25.25 0 01.25 0l4.63 2.685L8 7.133 3.245 4.375l4.63-2.685zM2.5 5.677v5.372c0 .09.047.171.125.216l4.625 2.683V8.432L2.5 5.677zm6.25 8.271l4.625-2.683a.25.25 0 00.125-.216V5.677L8.75 8.432v5.516z"></path></svg>,
paste: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M3.626 3.533a.249.249 0 0 0-.126.217v9.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-9.5a.249.249 0 0 0-.126-.217.75.75 0 0 1 .752-1.298c.541.313.874.89.874 1.515v9.5A1.75 1.75 0 0 1 12.25 15h-8.5A1.75 1.75 0 0 1 2 13.25v-9.5c0-.625.333-1.202.874-1.515a.75.75 0 0 1 .752 1.298ZM5.75 1h4.5a.75.75 0 0 1 .75.75v3a.75.75 0 0 1-.75.75h-4.5A.75.75 0 0 1 5 4.75v-3A.75.75 0 0 1 5.75 1Zm.75 3h3V2.5h-3Z"></path></svg>,
pencil: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M11.013 1.427a1.75 1.75 0 012.474 0l1.086 1.086a1.75 1.75 0 010 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 01-.927-.928l.929-3.25a1.75 1.75 0 01.445-.758l8.61-8.61zm1.414 1.06a.25.25 0 00-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 000-.354l-1.086-1.086zM11.189 6.25L9.75 4.81l-6.286 6.287a.25.25 0 00-.064.108l-.558 1.953 1.953-.558a.249.249 0 00.108-.064l6.286-6.286z"></path></svg>,
play: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zM6.379 5.227A.25.25 0 006 5.442v5.117a.25.25 0 00.379.214l4.264-2.559a.25.25 0 000-.428L6.379 5.227z"></path></svg>,
plus: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M8 2a.75.75 0 01.75.75v4.5h4.5a.75.75 0 010 1.5h-4.5v4.5a.75.75 0 01-1.5 0v-4.5h-4.5a.75.75 0 010-1.5h4.5v-4.5A.75.75 0 018 2z"></path></svg>,
plus_circle: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zm.75 4.75a.75.75 0 00-1.5 0v2.5h-2.5a.75.75 0 000 1.5h2.5v2.5a.75.75 0 001.5 0v-2.5h2.5a.75.75 0 000-1.5h-2.5v-2.5z"></path></svg>,
question: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.92 6.085h.001a.749.749 0 1 1-1.342-.67c.169-.339.436-.701.849-.977C6.845 4.16 7.369 4 8 4a2.756 2.756 0 0 1 1.637.525c.503.377.863.965.863 1.725 0 .448-.115.83-.329 1.15-.205.307-.47.513-.692.662-.109.072-.22.138-.313.195l-.006.004a6.24 6.24 0 0 0-.26.16.952.952 0 0 0-.276.245.75.75 0 0 1-1.248-.832c.184-.264.42-.489.692-.661.103-.067.207-.132.313-.195l.007-.004c.1-.061.182-.11.258-.161a.969.969 0 0 0 .277-.245C8.96 6.514 9 6.427 9 6.25a.612.612 0 0 0-.262-.525A1.27 1.27 0 0 0 8 5.5c-.369 0-.595.09-.74.187a1.01 1.01 0 0 0-.34.398ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg>,
repo: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path></svg>,
rocket: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M14.064 0a8.75 8.75 0 00-6.187 2.563l-.459.458c-.314.314-.616.641-.904.979H3.31a1.75 1.75 0 00-1.49.833L.11 7.607a.75.75 0 00.418 1.11l3.102.954c.037.051.079.1.124.145l2.429 2.428c.046.046.094.088.145.125l.954 3.102a.75.75 0 001.11.418l2.774-1.707a1.75 1.75 0 00.833-1.49V9.485c.338-.288.665-.59.979-.904l.458-.459A8.75 8.75 0 0016 1.936V1.75A1.75 1.75 0 0014.25 0h-.186zM10.5 10.625c-.088.06-.177.118-.266.175l-2.35 1.521.548 1.783 1.949-1.2a.25.25 0 00.119-.213v-2.066zM3.678 8.116L5.2 5.766c.058-.09.117-.178.176-.266H3.309a.25.25 0 00-.213.119l-1.2 1.95 1.782.547zm5.26-4.493A7.25 7.25 0 0114.063 1.5h.186a.25.25 0 01.25.25v.186a7.25 7.25 0 01-2.123 5.127l-.459.458a15.21 15.21 0 01-2.499 2.02l-2.317 1.5-2.143-2.143 1.5-2.317a15.25 15.25 0 012.02-2.5l.458-.458h.002zM12 5a1 1 0 11-2 0 1 1 0 012 0zm-8.44 9.56a1.5 1.5 0 10-2.12-2.12c-.734.73-1.047 2.332-1.15 3.003a.23.23 0 00.265.265c.671-.103 2.273-.416 3.005-1.148z"></path></svg>,
rows: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M16 2.75A1.75 1.75 0 0014.25 1H1.75A1.75 1.75 0 000 2.75v2.5A1.75 1.75 0 001.75 7h12.5A1.75 1.75 0 0016 5.25v-2.5zm-1.75-.25a.25.25 0 01.25.25v2.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25v-2.5a.25.25 0 01.25-.25h12.5zM16 10.75A1.75 1.75 0 0014.25 9H1.75A1.75 1.75 0 000 10.75v2.5A1.75 1.75 0 001.75 15h12.5A1.75 1.75 0 0016 13.25v-2.5zm-1.75-.25a.25.25 0 01.25.25v2.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25v-2.5a.25.25 0 01.25-.25h12.5z"></path></svg>,
search: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path></svg>,
sort_asc: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M0 4.25a.75.75 0 01.75-.75h2.5a.75.75 0 010 1.5H.75A.75.75 0 010 4.25zm0 4a.75.75 0 01.75-.75h4.5a.75.75 0 010 1.5H.75A.75.75 0 010 8.25zm0 4a.75.75 0 01.75-.75h7.5a.75.75 0 010 1.5H.75a.75.75 0 01-.75-.75zm12.927-9.677a.25.25 0 00-.354 0l-3 3A.25.25 0 009.75 6H12v6.75a.75.75 0 001.5 0V6h2.25a.25.25 0 00.177-.427l-3-3z"></path></svg>,
sort_desc: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M0 4.25a.75.75 0 01.75-.75h7.5a.75.75 0 010 1.5H.75A.75.75 0 010 4.25zm0 4a.75.75 0 01.75-.75h4.5a.75.75 0 010 1.5H.75A.75.75 0 010 8.25zm0 4a.75.75 0 01.75-.75h2.5a.75.75 0 010 1.5H.75a.75.75 0 01-.75-.75z"></path><path d="M13.5 10h2.25a.25.25 0 01.177.427l-3 3a.25.25 0 01-.354 0l-3-3A.25.25 0 019.75 10H12V3.75a.75.75 0 011.5 0V10z"></path></svg>,
square: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M4 5.75C4 4.784 4.784 4 5.75 4h4.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0110.25 12h-4.5A1.75 1.75 0 014 10.25v-4.5zm1.75-.25a.25.25 0 00-.25.25v4.5c0 .138.112.25.25.25h4.5a.25.25 0 00.25-.25v-4.5a.25.25 0 00-.25-.25h-4.5z"></path></svg>,
square_fill: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M5.75 4A1.75 1.75 0 004 5.75v4.5c0 .966.784 1.75 1.75 1.75h4.5A1.75 1.75 0 0012 10.25v-4.5A1.75 1.75 0 0010.25 4h-4.5z"></path></svg>,
stack: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.122.392a1.75 1.75 0 011.756 0l5.003 2.902c.83.481.83 1.68 0 2.162L8.878 8.358a1.75 1.75 0 01-1.756 0L2.119 5.456a1.25 1.25 0 010-2.162L7.122.392zM8.125 1.69a.25.25 0 00-.25 0l-4.63 2.685 4.63 2.685a.25.25 0 00.25 0l4.63-2.685-4.63-2.685zM1.601 7.789a.75.75 0 011.025-.273l5.249 3.044a.25.25 0 00.25 0l5.249-3.044a.75.75 0 01.752 1.298l-5.248 3.044a1.75 1.75 0 01-1.756 0L1.874 8.814A.75.75 0 011.6 7.789zm0 3.5a.75.75 0 011.025-.273l5.249 3.044a.25.25 0 00.25 0l5.249-3.044a.75.75 0 01.752 1.298l-5.248 3.044a1.75 1.75 0 01-1.756 0l-5.248-3.044a.75.75 0 01-.273-1.025z"></path></svg>,
sun: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M8 10.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zM8 12a4 4 0 100-8 4 4 0 000 8zM8 0a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0V.75A.75.75 0 018 0zm0 13a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 018 13zM2.343 2.343a.75.75 0 011.061 0l1.06 1.061a.75.75 0 01-1.06 1.06l-1.06-1.06a.75.75 0 010-1.06zm9.193 9.193a.75.75 0 011.06 0l1.061 1.06a.75.75 0 01-1.06 1.061l-1.061-1.06a.75.75 0 010-1.061zM16 8a.75.75 0 01-.75.75h-1.5a.75.75 0 010-1.5h1.5A.75.75 0 0116 8zM3 8a.75.75 0 01-.75.75H.75a.75.75 0 010-1.5h1.5A.75.75 0 013 8zm10.657-5.657a.75.75 0 010 1.061l-1.061 1.06a.75.75 0 11-1.06-1.06l1.06-1.06a.75.75 0 011.06 0zm-9.193 9.193a.75.75 0 010 1.06l-1.06 1.061a.75.75 0 11-1.061-1.06l1.06-1.061a.75.75 0 011.061 0z"></path></svg>,
sync: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M8 2.5a5.487 5.487 0 00-4.131 1.869l1.204 1.204A.25.25 0 014.896 6H1.25A.25.25 0 011 5.75V2.104a.25.25 0 01.427-.177l1.38 1.38A7.001 7.001 0 0114.95 7.16a.75.75 0 11-1.49.178A5.501 5.501 0 008 2.5zM1.705 8.005a.75.75 0 01.834.656 5.501 5.501 0 009.592 2.97l-1.204-1.204a.25.25 0 01.177-.427h3.646a.25.25 0 01.25.25v3.646a.25.25 0 01-.427.177l-1.38-1.38A7.001 7.001 0 011.05 8.84a.75.75 0 01.656-.834z"></path></svg>,
tag: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M2.5 7.775V2.75a.25.25 0 01.25-.25h5.025a.25.25 0 01.177.073l6.25 6.25a.25.25 0 010 .354l-5.025 5.025a.25.25 0 01-.354 0l-6.25-6.25a.25.25 0 01-.073-.177zm-1.5 0V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 010 2.474l-5.026 5.026a1.75 1.75 0 01-2.474 0l-6.25-6.25A1.75 1.75 0 011 7.775zM6 5a1 1 0 100 2 1 1 0 000-2z"></path></svg>,
terminal: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M0 2.75C0 1.784.784 1 1.75 1h12.5c.966 0 1.75.784 1.75 1.75v10.5A1.75 1.75 0 0114.25 15H1.75A1.75 1.75 0 010 13.25V2.75zm1.75-.25a.25.25 0 00-.25.25v10.5c0 .138.112.25.25.25h12.5a.25.25 0 00.25-.25V2.75a.25.25 0 00-.25-.25H1.75zM7.25 8a.75.75 0 01-.22.53l-2.25 2.25a.75.75 0 11-1.06-1.06L5.44 8 3.72 6.28a.75.75 0 111.06-1.06l2.25 2.25c.141.14.22.331.22.53zm1.5 1.5a.75.75 0 000 1.5h3a.75.75 0 000-1.5h-3z"></path></svg>,
three_bars: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M1 2.75A.75.75 0 011.75 2h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 2.75zm0 5A.75.75 0 011.75 7h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 7.75zM1.75 12a.75.75 0 100 1.5h12.5a.75.75 0 100-1.5H1.75z"></path></svg>,
trashcan: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M6.5 1.75a.25.25 0 01.25-.25h2.5a.25.25 0 01.25.25V3h-3V1.75zm4.5 0V3h2.25a.75.75 0 010 1.5H2.75a.75.75 0 010-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75zM4.496 6.675a.75.75 0 10-1.492.15l.66 6.6A1.75 1.75 0 005.405 15h5.19c.9 0 1.652-.681 1.741-1.576l.66-6.6a.75.75 0 00-1.492-.149l-.66 6.6a.25.25 0 01-.249.225h-5.19a.25.25 0 01-.249-.225l-.66-6.6z"></path></svg>,
undo: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M1.22 6.28a.749.749 0 0 1 0-1.06l3.5-3.5a.749.749 0 1 1 1.06 1.06L3.561 5h7.188l.001.007L10.749 5c.058 0 .116.007.171.019A4.501 4.501 0 0 1 10.5 14H8.796a.75.75 0 0 1 0-1.5H10.5a3 3 0 1 0 0-6H3.561L5.78 8.72a.749.749 0 1 1-1.06 1.06l-3.5-3.5Z"></path></svg>,
unfold: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M8.177.677l2.896 2.896a.25.25 0 01-.177.427H8.75v1.25a.75.75 0 01-1.5 0V4H5.104a.25.25 0 01-.177-.427L7.823.677a.25.25 0 01.354 0zM7.25 10.75a.75.75 0 011.5 0V12h2.146a.25.25 0 01.177.427l-2.896 2.896a.25.25 0 01-.354 0l-2.896-2.896A.25.25 0 015.104 12H7.25v-1.25zm-5-2a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5zM6 8a.75.75 0 01-.75.75h-.5a.75.75 0 010-1.5h.5A.75.75 0 016 8zm2.25.75a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5zM12 8a.75.75 0 01-.75.75h-.5a.75.75 0 010-1.5h.5A.75.75 0 0112 8zm2.25.75a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5z"></path></svg>,
unlock: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M5.5 4v2h7A1.5 1.5 0 0 1 14 7.5v6a1.5 1.5 0 0 1-1.5 1.5h-9A1.5 1.5 0 0 1 2 13.5v-6A1.5 1.5 0 0 1 3.499 6H4V4a4 4 0 0 1 7.371-2.154.75.75 0 0 1-1.264.808A2.5 2.5 0 0 0 5.5 4Zm-2 3.5v6h9v-6h-9Z"></path></svg>,
upload: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M8.53 1.22a.75.75 0 00-1.06 0L3.72 4.97a.75.75 0 001.06 1.06l2.47-2.47v6.69a.75.75 0 001.5 0V3.56l2.47 2.47a.75.75 0 101.06-1.06L8.53 1.22zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"></path></svg>,
x: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path></svg>,
x_circle: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M3.404 12.596a6.5 6.5 0 119.192-9.192 6.5 6.5 0 01-9.192 9.192zM2.344 2.343a8 8 0 1011.313 11.314A8 8 0 002.343 2.343zM6.03 4.97a.75.75 0 00-1.06 1.06L6.94 8 4.97 9.97a.75.75 0 101.06 1.06L8 9.06l1.97 1.97a.75.75 0 101.06-1.06L9.06 8l1.97-1.97a.75.75 0 10-1.06-1.06L8 6.94 6.03 4.97z"></path></svg>,
}
+136
View File
@@ -0,0 +1,136 @@
import { useMemo } from 'preact/hooks'
import { useLocale } from '../contexts/Locale.jsx'
import { useVersion } from '../contexts/Version.jsx'
import { useAsync } from '../hooks/useAsync.js'
import { getLanguage, replaceTranslation } from '../services/Resources.js'
interface StyleData {
color?: string,
bold?: boolean,
italic?: boolean,
underlined?: boolean,
strikethrough?: boolean,
}
interface PartData extends StyleData {
text?: string,
translate?: string,
fallback?: string,
with?: string[],
}
interface Props {
component: unknown,
base?: StyleData,
oneline?: boolean,
}
export function TextComponent({ component, base = { color: 'white' }, oneline }: Props) {
const { version } = useVersion()
const { lang } = useLocale()
const state = JSON.stringify(component)
const parts = useMemo(() => {
const parts: PartData[] = []
visitComponent(component, el => parts.push(inherit(el, base)))
return parts
}, [state, base])
const { value: language } = useAsync(() => getLanguage(version, lang), [version, lang])
return <div class="text-component">
{parts.map(p => <TextPart part={p} lang={language ?? {}} oneline={oneline} />)}
</div>
}
function visitComponent(component: unknown, consumer: (c: PartData) => void) {
if (typeof component === 'string' || typeof component === 'number') {
consumer({ text: component.toString() })
} else if (Array.isArray(component)) {
const base = component[0] ?? {}
visitComponent(base, consumer)
for (const c of component.slice(1)) {
visitComponent(c, d => consumer(inherit(d, base)))
}
} else if (typeof component === 'object' && component !== null) {
if ('text' in component) {
consumer(component)
} else if ('translate' in component) {
consumer(component)
} else if ('score' in component) {
consumer({ ...component, text: '123' })
} else if ('selector' in component) {
consumer({ ...component, text: 'Steve' })
} else if ('keybind' in component) {
consumer({ ...component, text: (component as any).keybind })
} else if ('nbt' in component) {
consumer({ ...component, text: (component as any).nbt })
}
if ('extra' in component) {
for (const e of (component as any).extra) {
visitComponent(e, c => consumer(inherit(c, component)))
}
}
}
}
function inherit(component: any, base: PartData) {
return {
...component,
color: component.color ?? base.color,
bold: component.bold ?? base.bold,
italic: component.italic ?? base.italic,
underlined: component.underlined ?? base.underlined,
strikethrough: component.strikethrough ?? base.strikethrough,
}
}
const TextColors: Record<string, [string, string]> = {
black: ['#000', '#000'],
dark_blue: ['#00A', '#00002A'],
dark_green: ['#0A0', '#002A00'],
dark_aqua: ['#0AA', '#002A2A'],
dark_red: ['#A00', '#2A0000'],
dark_purple: ['#A0A', '#2A002A'],
gold: ['#FA0', '#2A2A00'],
gray: ['#AAA', '#2A2A2A'],
dark_gray: ['#555', '#151515'],
blue: ['#55F', '#15153F'],
green: ['#5F5', '#153F15'],
aqua: ['#5FF', '#153F3F'],
red: ['#F55', '#3F1515'],
light_purple: ['#F5F', '#3F153F'],
yellow: ['#FF5', '#3F3F15'],
white: ['#FFF', '#3F3F3F'],
}
function TextPart({ part, lang, oneline }: { part: PartData, lang: Record<string, string>, oneline?: boolean }) {
let text = part.translate
? resolveTranslate(part.translate, part.fallback, part.with, lang)
: (part.text ?? '')
text = oneline ? text.replaceAll('\n', '␊') : text
return <span style={createStyle(part)}>{text}</span>
}
function resolveTranslate(translate: string, fallback: string | undefined, with_: any[] | undefined, lang: Record<string, string>): string {
const str = lang[translate] ?? fallback ?? translate
if (typeof str !== 'string') return translate
const params = with_?.map((c): string => {
if (typeof c === 'string' || typeof c === 'number') return `${c}`
if (c.text) return c.text
if (c.translate) return resolveTranslate(c.translate, c.fallback, c.with, lang)
return ''
})
return replaceTranslation(str, params)
}
function createStyle(style: StyleData) {
return {
color: style.color ? (TextColors[style.color]?.[0] ?? style.color) : undefined,
'--shadow-color': style.color ? TextColors[style.color]?.[1] : undefined,
fontWeight: (style.bold === true) ? 'bold' : undefined,
fontStyle: (style.italic === true) ? 'italic' : undefined,
textDecoration: (style.underlined === true)
? (style.strikethrough === true) ? 'underline line-through' : 'underline'
: (style.strikethrough === true) ? 'line-through' : undefined,
}
}
+32
View File
@@ -0,0 +1,32 @@
import { Icons } from './Icons.js'
import { Octicon } from './Octicon.jsx'
interface Props {
title: string,
titleIcon?: keyof typeof Octicon | keyof typeof Icons,
link: string,
icon?: keyof typeof Icons,
desc?: string,
}
export function ToolCard({ title, desc, link, icon, titleIcon }: Props) {
if (icon || desc) {
return <a class="tool-card" href={link}>
{icon && Icons[icon]}
<div>
<ToolHead title={title} titleIcon={titleIcon} />
<p>{desc}</p>
</div>
</a>
}
return <a class="tool-card" href={link}>
<ToolHead title={title} titleIcon={titleIcon} />
</a>
}
function ToolHead({ title, titleIcon }: Pick<Props, 'title' | 'titleIcon'>) {
return <h3 class="text-[1.17em]">
{title}
{titleIcon && (titleIcon in Octicon ? (Octicon as any)[titleIcon] : (Icons as any)[titleIcon])}
</h3>
}
+22
View File
@@ -0,0 +1,22 @@
import type { ComponentChildren } from 'preact'
import type { Icons } from './Icons.jsx'
import type { Octicon } from './Octicon.jsx'
import { ToolCard } from './ToolCard.jsx'
interface Props {
title: string,
titleIcon?: keyof typeof Octicon | keyof typeof Icons,
link?: string,
children?: ComponentChildren,
}
export function ToolGroup({ title, titleIcon, link, children }: Props) {
return <div class="tool-group">
{link === undefined
? <div class="tool-card"><h3 class="text-[1.17em]">{title}</h3></div>
: <ToolCard {...{ title, titleIcon, link}} />
}
{children && <div class="tool-body">
{children}
</div>}
</div>
}
+48
View File
@@ -0,0 +1,48 @@
import { useMemo, useState } from 'preact/hooks'
export type TreeViewGroupRenderer = (props: { name: string, open: boolean, onClick: () => void }) => JSX.Element
export type TreeViewLeafRenderer<E> = (props: { entry: E }) => JSX.Element
interface Props<E> {
entries: E[],
split: (entry: E) => string[],
group: TreeViewGroupRenderer,
leaf: TreeViewLeafRenderer<E>,
level?: number,
}
export function TreeView<E>({ entries, split, group: Group, leaf: Leaf, level = 0 }: Props<E>) {
const roots = useMemo(() => {
const groups: Record<string, E[]> = {}
for (const entry of entries) {
const path = split(entry)
if (path[level + 1] !== undefined) {
;(groups[path[level]] ??= []).push(entry)
}
}
return groups
}, [entries, split, level])
const leaves = useMemo(() => {
return entries.filter(e => split(e).length === level + 1)
}, [entries, split, level])
const [hidden, setHidden] = useState(new Set<string>())
const toggle = (root: string) => {
if (hidden.has(root)) {
hidden.delete(root)
} else {
hidden.add(root)
}
setHidden(new Set(hidden))
}
return <div class="tree-view" style={`--indent: ${level};`}>
{Object.entries(roots).map(([r, childs]) => <>
<Group name={r} open={!hidden.has(r)} onClick={() => toggle(r)} />
{!hidden.has(r) &&
<TreeView<E> entries={childs} split={split} group={Group} leaf={Leaf} level={level + 1} />}
</>)}
{leaves.map(e => <Leaf key={split(e).join('/')} entry={e} />)}
</div>
}
+44
View File
@@ -0,0 +1,44 @@
import { useMemo, useState } from 'preact/hooks'
import config from '../Config.js'
import { useLocale } from '../contexts/index.js'
import type { VersionId } from '../services/index.js'
import { Store } from '../Store.js'
import { Btn } from './Btn.js'
import { BtnMenu } from './BtnMenu.js'
interface Props {
value?: VersionId,
allowed?: VersionId[],
hasAny?: boolean,
onChange: (version: VersionId) => void,
onAny?: () => void,
}
export function VersionSwitcher({ value, allowed, hasAny, onChange, onAny }: Props) {
const { locale } = useLocale()
const [showMore, setShowMore] = useState(false)
const versions = useMemo(() => {
if (allowed) {
return allowed
.map(a => config.versions.find(v => v.id === a)!)
.filter(v => v !== undefined)
}
return [...config.versions].reverse()
}, [allowed])
const hasMoreVersions = useMemo(() => {
return versions.some(v => !(v.show || v.id === value))
}, [versions, value])
const shownVersions = useMemo(() => {
return versions.filter(v => v.show || v.id === value || showMore)
}, [versions, showMore, value])
return <BtnMenu class={`version-switcher${Store.getVersion() === null ? ' attention' : ''}`} icon="tag" label={value ?? locale('any_version')} tooltip={locale('switch_version')}>
{hasAny && <Btn label={locale('any_version')} onClick={onAny} active={!value} />}
{shownVersions.map(v =>
<Btn label={v.name} active={v.id === value} onClick={() => onChange(v.id)} />)}
{!showMore && hasMoreVersions && <Btn icon="chevron_down" label="More" onClick={e => {setShowMore(true);e.stopPropagation()}} />}
</BtnMenu>
}
@@ -0,0 +1,57 @@
import { Identifier, ItemStack } from 'deepslate'
import { ItemDisplay } from '../ItemDisplay.jsx'
import { TextInput } from '../index.js'
import { CustomizedInput } from './CustomizedInput.jsx'
import type { CustomizedModel } from './CustomizedModel.js'
import { CustomizedSlider } from './CustomizedSlider.jsx'
import { CustomizedToggle } from './CustomizedToggle.jsx'
interface Props {
model: CustomizedModel,
initialModel: CustomizedModel,
changeModel: (model: Partial<CustomizedModel>) => void,
}
export function BasicSettings({ model, initialModel, changeModel }: Props) {
return <>
<CustomizedSlider label="Min height" help="The lowest Y level of the world"
value={model.minHeight} onChange={v => changeModel({ minHeight: v })}
min={-128} max={384} step={16} initial={initialModel.minHeight}
error={model.minHeight % 16 !== 0 ? 'Min height needs to be a multiple of 16' : undefined} />
<CustomizedSlider label="Max height" help="The highest Y level of the world"
value={model.maxHeight} onChange={v => changeModel({ maxHeight: v })}
min={-128} max={384} step={16} initial={initialModel.maxHeight}
error={model.maxHeight <= model.minHeight ? 'Max height needs to be larger than Min height' : model.maxHeight % 16 !== 0 ? 'Max height needs to be a multiple of 16' : undefined} />
<CustomizedSlider label="Sea level" help="The top Y level of the oceans"
value={model.seaLevel} onChange={v => changeModel({ seaLevel: v })}
min={-128} max={384} initial={initialModel.seaLevel} />
<CustomizedInput label="Oceans" help="The block used to fill the oceans"
value={model.oceans} onChange={v => changeModel({ oceans: v })}
initial={initialModel.oceans}>
<button class={`customized-toggle${model.oceans === 'water' ? ' customized-water' : ''}`} onClick={() => changeModel({ oceans: 'water' })}>Water</button>
<span>/</span>
<button class={`customized-toggle${model.oceans === 'lava' ? ' customized-lava' : ''}`} onClick={() => changeModel({ oceans: 'lava' })}>Lava</button>
<span>/</span>
<button class={`customized-toggle${model.oceans != 'water' && model.oceans != 'lava' ? ' customized-active' : ''}`} onClick={() => changeModel({ oceans: 'slime_block' })}>Custom</button>
{model.oceans != 'water' && model.oceans != 'lava' && <>
<TextInput value={model.oceans} onChange={v => changeModel({ oceans: v })} />
<ItemDisplay item={new ItemStack(Identifier.parse(model.oceans), 1)} tooltip={false} />
</>}
</CustomizedInput>
<div class="customized-group">
<CustomizedToggle label="Caves" help="Whether caves will generate"
value={model.caves} onChange={v => changeModel({ caves: v })}
initial={initialModel.caves} />
{model.caves && <div class="customized-childs">
<CustomizedToggle label="Noise caves" help="The new caves introduced in 1.18"
value={model.noiseCaves} onChange={v => changeModel({ noiseCaves: v })}
initial={initialModel.noiseCaves} />
<CustomizedToggle label="Old caves" help="The legacy caves"
value={model.carverCaves} onChange={v => changeModel({ carverCaves: v })}
initial={initialModel.carverCaves} />
<CustomizedToggle label="Ravines" help="The legacy ravines and canyons"
value={model.ravines} onChange={v => changeModel({ ravines: v })}
initial={initialModel.ravines} />
</div>}
</div>
</>
}
@@ -0,0 +1,128 @@
import { useMemo } from 'preact/hooks'
import { deepClone } from '../../Utils.js'
import { useAsync } from '../../hooks/useAsync.js'
import { fetchRegistries } from '../../services/DataFetcher.js'
import { Octicon, TextInput } from '../index.js'
import { CustomizedInput } from './CustomizedInput.jsx'
import type { CustomizedModel } from './CustomizedModel.js'
import { CustomizedSlider } from './CustomizedSlider.jsx'
interface Props {
model: CustomizedModel,
initialModel: CustomizedModel,
changeModel: (model: Partial<CustomizedModel>) => void,
}
export function BiomesSettings({ model, initialModel, changeModel }: Props) {
const { value: registries } = useAsync(() => fetchRegistries('1.20'))
const biomes = useMemo(() => {
const hiddenBiomes = new Set(['end_barrens', 'end_highlands', 'end_midlands', 'small_end_islands', 'the_end', 'basalt_deltas', 'crimson_forest', 'nether_wastes', 'soul_sand_valley', 'warped_forest', 'the_void'])
return registries?.get('worldgen/biome')?.filter(b => !hiddenBiomes.has(b.replace(/^minecraft:/, '')))
}, [registries])
return <>
<CustomizedSlider label="Biome size" help="The scale of the biome layout, 6 corresponds to the large biomes preset"
value={model.biomeSize} onChange={v => changeModel({ biomeSize: v })}
min={1} max={8} initial={initialModel.biomeSize} />
<p class="customized-info">
{Octicon.info}
Changing the following settings will not affect the terrain, only which biomes are painted on the terrain.
</p>
{biomes?.map(key => {
const biome = key.replace(/^minecraft:/, '')
const state: string | undefined = model.biomeReplacements[biome]
const onChange = (v: string | undefined) => {
const biomeReplacements = deepClone(model.biomeReplacements)
if (v === undefined || v === biome) {
delete biomeReplacements[biome]
} else {
biomeReplacements[biome] = v
}
changeModel({ biomeReplacements })
}
return <CustomizedInput label={biome.replace(/^minecraft:/, '')}
value={state ?? biome} onChange={onChange}
initial={biome}>
<button class={`customized-toggle${state === undefined ? ' customized-true' : ''}`} onClick={() => onChange(undefined)}>Keep</button>
<span>/</span>
<button class={`customized-toggle${state !== undefined ? ' customized-false' : ''}`} onClick={() => onChange(findReplacement(biome, model.biomeReplacements))}>Replace</button>
{state !== undefined && <>
<TextInput value={state} onChange={v => onChange(v)} />
</>}
</CustomizedInput>
})}
</>
}
function findReplacement(biome: string, replacements: Record<string, string>): string {
let replacement = DefaultReplacements[biome]
if (replacement === undefined) {
return 'plains'
}
for (let i = 0; i < 10; i += 1) {
if (biome === replacement) {
return DefaultReplacements[biome]
}
if (!replacements[replacement]) {
return replacement
}
replacement = replacements[replacement]
}
return DefaultReplacements[biome]
}
const DefaultReplacements: Record<string, string> = {
badlands: 'desert',
bamboo_jungle: 'jungle',
beach: 'plains',
birch_forest: 'forest',
cherry_grove: 'meadow',
cold_ocean: 'ocean',
dark_forest: 'forest',
deep_cold_ocean: 'deep_ocean',
deep_dark: 'plains',
deep_frozen_ocean: 'deep_ocean',
deep_lukewarm_ocean: 'deep_ocean',
deep_ocean: 'ocean',
desert: 'savanna',
dripstone_caves: 'plains',
eroded_badlands: 'badlands',
flower_forest: 'forest',
forest: 'plains',
frozen_ocean: 'cold_ocean',
frozen_peaks: 'stony_peaks',
frozen_river: 'river',
grove: 'forest',
ice_spikes: 'snowy_plains',
jagged_peaks: 'stony_peaks',
jungle: 'savanna',
lukewarm_ocean: 'ocean',
lush_caves: 'plains',
mangrove_swamp: 'swamp',
meadow: 'forest',
mushroom_fields: 'plains',
ocean: 'plains',
old_growth_birch_forest: 'birch_forest',
old_growth_pine_taiga: 'taiga',
old_growth_spruce_taiga: 'taiga',
plains: 'the_void',
river: 'plains',
savanna: 'plains',
savanna_plateau: 'savanna',
snowy_beach: 'beach',
snowy_plains: 'plains',
snowy_slopes: 'grove',
snowy_taiga: 'taiga',
sparse_jungle: 'jungle',
stony_peaks: 'plains',
stony_shore: 'beach',
sunflower_plains: 'plains',
swamp: 'river',
taiga: 'forest',
warm_ocean: 'ocean',
windswept_forest: 'forest',
windswept_gravelly_hills: 'windswept_hills',
windswept_hills: 'plains',
windswept_savanna: 'savanna',
wooded_badlands: 'badlands',
}
@@ -0,0 +1,343 @@
import { Identifier } from 'deepslate'
import type { BlockStateData } from '../../services/DataFetcher.js'
import { fetchAllPresets, fetchBlockStates } from '../../services/DataFetcher.js'
import type { VersionId } from '../../services/Versions.js'
import { deepClone, deepEqual } from '../../Utils.js'
import type { CustomizedOreModel } from './CustomizedModel.js'
import { CustomizedModel } from './CustomizedModel.js'
// Random prefix to avoid collisions with other packs that add no-op placed features
const FeatureCollisionPrefix = 468794
const PackTypes = ['dimension', 'dimension_type', 'worldgen/noise_settings', 'worldgen/noise', 'worldgen/structure_set', 'worldgen/placed_feature', 'worldgen/configured_feature', 'worldgen/configured_carver'] as const
export type CustomizedPackType = typeof PackTypes[number]
export type CustomizedPack = Record<CustomizedPackType, Map<string, any>>
interface Context {
model: CustomizedModel,
initial: CustomizedModel,
version: VersionId,
blockStates: Map<string, BlockStateData>,
vanilla: CustomizedPack,
out: CustomizedPack,
featureCollisionIndex: number,
}
export async function generateCustomized(model: CustomizedModel, version: VersionId): Promise<CustomizedPack> {
const [blockStates, ...vanillaFiles] = await Promise.all([
fetchBlockStates(version),
...PackTypes.map(t => fetchAllPresets(version, t)),
])
const ctx: Context = {
model,
initial: CustomizedModel.getDefault(version),
version,
blockStates,
vanilla: PackTypes.reduce((acc, k, i) => {
return { ...acc, [k]: vanillaFiles[i] }
}, Object.create(null)),
out: PackTypes.reduce((acc, k) => {
return { ...acc, [k]: new Map()}
}, Object.create(null)) as CustomizedPack,
featureCollisionIndex: FeatureCollisionPrefix,
}
generateBiomeReplacements(ctx)
generateDimensionType(ctx)
generateNoiseSettings(ctx)
generateCarvers(ctx)
generateClimateNoises(ctx)
generateStructures(ctx)
generateDungeonFeatures(ctx)
generateLakeFeatures(ctx)
generateOreFeatures(ctx)
return ctx.out
}
function generateDimensionType(ctx: Context) {
if (isUnchanged(ctx, 'minHeight', 'maxHeight')) return
ctx.out.dimension_type.set('overworld', {
...ctx.vanilla.dimension_type.get('overworld'),
min_y: ctx.model.minHeight,
height: ctx.model.maxHeight - ctx.model.minHeight,
logical_height: ctx.model.maxHeight - ctx.model.minHeight,
})
}
function generateNoiseSettings(ctx: Context) {
if (isUnchanged(ctx, 'minHeight', 'maxHeight', 'seaLevel', 'oceans', 'caves', 'noiseCaves')) return
const defaultFluid = formatIdentifier(ctx.model.oceans)
const vanilla = ctx.vanilla['worldgen/noise_settings'].get('overworld')
const finalDensity = deepClone(vanilla.noise_router.final_density)
if (!ctx.model.caves || !ctx.model.noiseCaves) {
finalDensity.argument2 = 1
finalDensity.argument1.argument.argument2.argument.argument.argument2.argument2.argument2.argument2.argument2.argument2 = 'minecraft:overworld/sloped_cheese'
}
ctx.out['worldgen/noise_settings'].set('overworld', {
...vanilla,
sea_level: ctx.model.seaLevel,
default_fluid: {
Name: defaultFluid,
Properties: ctx.blockStates.get(defaultFluid.replace(/^minecraft:/, ''))?.[1],
},
noise: {
...vanilla.noise,
min_y: ctx.model.minHeight,
height: ctx.model.maxHeight - ctx.model.minHeight,
},
noise_router: {
...vanilla.noise_router,
final_density: finalDensity,
},
})
}
function generateCarvers(ctx: Context) {
if (isUnchanged(ctx, 'caves', 'carverCaves', 'ravines')) return
if (!ctx.model.caves || !ctx.model.carverCaves) {
const vanilla = ctx.vanilla['worldgen/configured_carver'].get('cave')
ctx.out['worldgen/configured_carver'].set('cave', {
...vanilla,
config: {
...vanilla.config,
probability: 0,
},
})
const extraVanilla = ctx.vanilla['worldgen/configured_carver'].get('cave')
ctx.out['worldgen/configured_carver'].set('cave_extra_underground', {
...extraVanilla,
config: {
...extraVanilla.config,
probability: 0,
},
})
}
if (!ctx.model.caves || !ctx.model.ravines) {
const vanilla = ctx.vanilla['worldgen/configured_carver'].get('canyon')
ctx.out['worldgen/configured_carver'].set('canyon', {
...vanilla,
config: {
...vanilla.config,
probability: 0,
},
})
}
}
function generateClimateNoises(ctx: Context) {
if (isUnchanged(ctx, 'biomeSize')) return
for (const name of ['temperature', 'vegetation', 'continentalness', 'erosion']) {
const vanilla = ctx.vanilla['worldgen/noise'].get(name)
ctx.out['worldgen/noise'].set(name, {
...vanilla,
firstOctave: vanilla.firstOctave - ctx.model.biomeSize + 4,
})
}
}
function generateBiomeReplacements(ctx: Context) {
if (isUnchanged(ctx, 'biomeReplacements')) return
const vanilla = ctx.vanilla['dimension'].get('overworld')
const biomes = vanilla.generator.biome_source.biomes.slice()
const replacements = new Map(Object.entries(ctx.model.biomeReplacements))
ctx.out['dimension'].set('overworld', {
type: 'minecraft:overworld',
generator: {
type: 'minecraft:noise',
settings: 'minecraft:overworld',
biome_source: {
type: 'minecraft:multi_noise',
biomes: biomes.map((b: any) => ({
biome: replacements.get(b.biome.slice(10)) ?? b.biome,
parameters: b.parameters,
})),
},
},
})
}
const Structures: Partial<Record<keyof CustomizedModel, string>> = {
ancientCities: 'ancient_cities',
buriedTreasures: 'buried_treasures',
desertPyramids: 'desert_pyramids',
igloos: 'igloos',
jungleTemples: 'jungle_temples',
mineshafts: 'mineshafts',
oceanMonuments: 'ocean_monuments',
oceanRuins: 'ocean_ruins',
pillagerOutposts: 'pillager_outposts',
ruinedPortals: 'ruined_portals',
shipwrecks: 'shipwrecks',
strongholds: 'strongholds',
swampHuts: 'swamp_huts',
trailRuins: 'trail_ruins',
villages: 'villages',
woodlandMansions: 'woodland_mansions',
}
function generateStructures(ctx: Context) {
for (const [key, name] of Object.entries(Structures) as [keyof CustomizedModel, string][]) {
if (isUnchanged(ctx, key) || ctx.model[key]) continue
ctx.out['worldgen/structure_set'].set(name, {
...ctx.vanilla['worldgen/structure_set'].get(name),
structures: [],
})
}
}
function getDisabledFeature(ctx: Context) {
ctx.featureCollisionIndex += 1
return {
feature: {
type: 'minecraft:no_op',
config: {},
},
placement: [
{
type: 'minecraft:rarity_filter',
chance: ctx.featureCollisionIndex,
},
],
}
}
function generateDungeonFeatures(ctx: Context) {
if (isUnchanged(ctx, 'dungeons', 'dungeonTries')) return
if (!ctx.model.dungeons) {
ctx.out['worldgen/placed_feature'].set('monster_room_deep', getDisabledFeature(ctx))
ctx.out['worldgen/placed_feature'].set('monster_room', getDisabledFeature(ctx))
} else {
const deepTries = Math.round(ctx.model.dungeonTries * 4 / 14)
const deepVanilla = ctx.vanilla['worldgen/placed_feature'].get('monster_room_deep')
ctx.out['worldgen/placed_feature'].set('monster_room_deep', {
...deepVanilla,
placement: [
{
type: 'minecraft:count',
count: deepTries,
},
...deepVanilla.placement.slice(1),
],
})
const normalVanilla = ctx.vanilla['worldgen/placed_feature'].get('monster_room')
ctx.out['worldgen/placed_feature'].set('monster_room', {
...normalVanilla,
placement: [
{
type: 'minecraft:count',
count: ctx.model.dungeonTries - deepTries,
},
...normalVanilla.placement.slice(1),
],
})
}
}
function generateLakeFeatures(ctx: Context) {
if (!isUnchanged(ctx, 'lavaLakes', 'lavaLakeRarity', 'lavaLakeRarityUnderground')) {
if (!ctx.model.lavaLakes) {
ctx.out['worldgen/placed_feature'].set('lake_lava_surface', getDisabledFeature(ctx))
ctx.out['worldgen/placed_feature'].set('lake_lava_underground', getDisabledFeature(ctx))
} else {
const undergroundVanilla = ctx.vanilla['worldgen/placed_feature'].get('lake_lava_underground')
ctx.out['worldgen/placed_feature'].set('lake_lava_underground', {
...undergroundVanilla,
placement: [
{
type: 'minecraft:rarity_filter',
chance: ctx.model.lavaLakeRarityUnderground,
},
...undergroundVanilla.placement.slice(1),
],
})
const surfaceVanilla = ctx.vanilla['worldgen/placed_feature'].get('lake_lava_surface')
ctx.out['worldgen/placed_feature'].set('lake_lava_surface', {
...surfaceVanilla,
placement: [
{
type: 'minecraft:rarity_filter',
chance: ctx.model.lavaLakeRarity,
},
...surfaceVanilla.placement.slice(1),
],
})
}
}
}
const Ores: Partial<Record<keyof CustomizedModel, string>> = {
dirt: 'ore_dirt',
gravel: 'ore_gravel',
graniteLower: 'ore_granite_lower',
graniteUpper: 'ore_granite_upper',
dioriteLower: 'ore_diorite_lower',
dioriteUpper: 'ore_diorite_upper',
andesiteLower: 'ore_andesite_lower',
andesiteUpper: 'ore_andesite_upper',
coalLower: 'ore_coal_lower',
coalUpper: 'ore_coal_upper',
ironSmall: 'ore_iron_small',
ironMiddle: 'ore_iron_middle',
ironUpper: 'ore_iron_upper',
copper: 'ore_copper',
copperLarge: 'ore_copper_large',
goldLower: 'ore_gold_lower',
gold: 'ore_gold',
redstoneLower: 'ore_redstone_lower',
redstone: 'ore_redstone',
lapis: 'ore_lapis',
lapisBuried: 'ore_lapis_buried',
emerald: 'ore_emerald',
diamond: 'ore_diamond',
diamondBuried: 'ore_diamond_buried',
diamondLarge: 'ore_diamond_large',
}
function generateOreFeatures(ctx: Context) {
for (const [key, name] of Object.entries(Ores) as [keyof CustomizedModel, string][]) {
if (isUnchanged(ctx, key)) continue
const value = ctx.model[key] as CustomizedOreModel | undefined
const initial = ctx.initial[key] as CustomizedOreModel
if (value === undefined) {
ctx.out['worldgen/placed_feature'].set(name, getDisabledFeature(ctx))
} else {
const placed = deepClone(ctx.vanilla['worldgen/placed_feature'].get(name))
if (value.tries !== initial.tries) {
const modifier = placed.placement.find((m: any) => m.type === 'minecraft:count' || m.type === 'minecraft:rarity_filter')
if (Number.isInteger(value.tries)) {
modifier.type = 'minecraft:count',
modifier.count = value.tries
delete modifier.chance
} else {
modifier.type = 'minecraft:rarity_filter',
modifier.chance = Math.round(1 / value.tries)
delete modifier.count
}
}
if (value.minHeight !== initial.minHeight || value.minAboveBottom !== initial.minAboveBottom || value.minBelowTop !== initial.minBelowTop || value.maxHeight !== initial.maxHeight || value.maxAboveBottom !== value.maxBelowTop || value.maxBelowTop !== initial.maxBelowTop) {
const modifier = placed.placement.find((m: any) => m.type === 'minecraft:height_range')
modifier.min_inclusive = value.minAboveBottom !== undefined ? { above_bottom: value.minAboveBottom } : value.minBelowTop !== undefined ? { below_top: value.minBelowTop } : value.minHeight !== undefined ? { absolute: value.minHeight } : modifier.min_inclusive
modifier.max_inclusive = value.maxAboveBottom !== undefined ? { above_bottom: value.maxAboveBottom } : value.maxBelowTop !== undefined ? { below_top: value.maxBelowTop } : value.maxHeight !== undefined ? { absolute: value.maxHeight } : modifier.max_inclusive
}
ctx.out['worldgen/placed_feature'].set(name, placed)
if (value.size !== initial.size) {
const reference = placed.feature.replace(/^minecraft:/, '')
const configured = ctx.vanilla['worldgen/configured_feature'].get(reference)
configured.config.size = value.size
ctx.out['worldgen/configured_feature'].set(reference, configured)
}
}
}
}
function isUnchanged(ctx: Context, ...keys: (keyof CustomizedModel)[]) {
return keys.every(k => deepEqual(ctx.model[k], ctx.initial[k]))
}
function formatIdentifier(id: string) {
try {
return Identifier.parse(id).toString()
} catch (e) {
return id
}
}
@@ -0,0 +1,28 @@
import type { ComponentChildren } from 'preact'
import { deepClone, deepEqual } from '../../Utils.js'
import { Octicon } from '../index.js'
interface Props<T> {
label: ComponentChildren,
help?: string,
value: T,
initial?: T,
onChange: (value: T) => void,
error?: string,
children?: ComponentChildren,
trailing?: ComponentChildren,
}
export function CustomizedInput<T>({ label, help, value, initial, onChange, error, children, trailing }: Props<T>) {
const isModified = initial !== undefined && !deepEqual(value, initial)
return <div class={`customized-input${error !== undefined ? ' customized-errored' : ''}`}>
<span class="customized-label">
{typeof label === 'string' ? <label>{label}</label> : label}
{isModified && <span class="customized-modified">*</span>}
{help !== undefined && <span class="customized-help tooltipped tip-se" aria-label={help}>{Octicon.question}</span>}
</span>
{children}
{(isModified && initial != undefined) && <button class="customized-icon tooltipped tip-se" aria-label="Reset to default" onClick={() => onChange(deepClone(initial))}>{Octicon.undo}</button>}
{error !== undefined && <button class="customized-icon customized-error tooltipped tip-se" aria-label={error}>{Octicon.issue_opened}</button>}
{trailing}
</div>
}
@@ -0,0 +1,145 @@
import type { VersionId } from '../../services/Versions.js'
export interface CustomizedOreModel {
size: number,
tries: number,
minHeight?: number,
minAboveBottom?: number,
minBelowTop?: number,
maxHeight?: number,
maxBelowTop?: number,
maxAboveBottom?: number,
trapezoid?: boolean,
}
export interface CustomizedModel {
// Basic
minHeight: number,
maxHeight: number,
seaLevel: number,
oceans: string,
caves: boolean,
noiseCaves: boolean,
carverCaves: boolean,
ravines: boolean,
// Biomes
biomeSize: number,
biomeReplacements: Record<string, string>,
// Structures
ancientCities: boolean,
buriedTreasures: boolean,
desertPyramids: boolean,
igloos: boolean,
jungleTemples: boolean,
mineshafts: boolean,
oceanMonuments: boolean,
oceanRuins: boolean,
pillagerOutposts: boolean,
ruinedPortals: boolean,
shipwrecks: boolean,
strongholds: boolean,
swampHuts: boolean,
trailRuins: boolean,
villages: boolean,
woodlandMansions: boolean,
// Features
dungeons: boolean,
dungeonTries: number,
lavaLakes: boolean,
lavaLakeRarity: number,
lavaLakeRarityUnderground: number,
// Ores
dirt: CustomizedOreModel | undefined,
gravel: CustomizedOreModel | undefined,
graniteLower: CustomizedOreModel | undefined,
graniteUpper: CustomizedOreModel | undefined,
dioriteLower: CustomizedOreModel | undefined,
dioriteUpper: CustomizedOreModel | undefined,
andesiteLower: CustomizedOreModel | undefined,
andesiteUpper: CustomizedOreModel | undefined,
coalLower: CustomizedOreModel | undefined,
coalUpper: CustomizedOreModel | undefined,
ironSmall: CustomizedOreModel | undefined,
ironMiddle: CustomizedOreModel | undefined,
ironUpper: CustomizedOreModel | undefined,
copper: CustomizedOreModel | undefined,
copperLarge: CustomizedOreModel | undefined,
goldLower: CustomizedOreModel | undefined,
gold: CustomizedOreModel | undefined,
redstoneLower: CustomizedOreModel | undefined,
redstone: CustomizedOreModel | undefined,
lapis: CustomizedOreModel | undefined,
lapisBuried: CustomizedOreModel | undefined,
emerald: CustomizedOreModel | undefined,
diamond: CustomizedOreModel | undefined,
diamondBuried: CustomizedOreModel | undefined,
diamondLarge: CustomizedOreModel | undefined,
}
export namespace CustomizedModel {
export function getDefault(_version: VersionId): CustomizedModel {
const model: CustomizedModel = {
minHeight: -64,
maxHeight: 320,
seaLevel: 63,
oceans: 'water',
caves: true,
noiseCaves: true,
carverCaves: true,
ravines: true,
biomeSize: 4,
biomeReplacements: {},
ancientCities: true,
buriedTreasures: true,
desertPyramids: true,
igloos: true,
jungleTemples: true,
mineshafts: true,
oceanMonuments: true,
oceanRuins: true,
pillagerOutposts: true,
ruinedPortals: true,
shipwrecks: true,
strongholds: true,
swampHuts: true,
trailRuins: true,
villages: true,
woodlandMansions: true,
dungeons: true,
dungeonTries: 14,
lavaLakes: true,
lavaLakeRarity: 200,
lavaLakeRarityUnderground: 9,
dirt: { size: 33, tries: 7, minHeight: 0, maxHeight: 160 },
gravel: { size: 33, tries: 14, minAboveBottom: 0, maxBelowTop: 0 },
graniteLower: { size: 64, tries: 2, minHeight: 0, maxHeight: 60 },
graniteUpper: { size: 64, tries: 1/6, minHeight: 64, maxHeight: 128 },
dioriteLower: { size: 64, tries: 2, minHeight: 0, maxHeight: 60 },
dioriteUpper: { size: 64, tries: 1/6, minHeight: 64, maxHeight: 128 },
andesiteLower: { size: 64, tries: 2, minHeight: 0, maxHeight: 60 },
andesiteUpper: { size: 64, tries: 1/6, minHeight: 64, maxHeight: 128 },
coalLower: { size: 17, tries: 20, minHeight: 0, maxHeight: 192, trapezoid: true },
coalUpper: { size: 17, tries: 30, minHeight: 136, maxBelowTop: 0 },
ironSmall: { size: 4, tries: 10, minAboveBottom: 0, maxHeight: 72 },
ironMiddle: { size: 9, tries: 10, minHeight: -24, maxHeight: 56, trapezoid: true },
ironUpper: { size: 9, tries: 90, minHeight: 80, maxHeight: 384, trapezoid: true },
copper: { size: 10, tries: 16, minHeight: -16, maxHeight: 112, trapezoid: true },
copperLarge: { size: 20, tries: 16, minHeight: -16, maxHeight: 112, trapezoid: true },
goldLower: { size: 9, tries: 1/2, minHeight: -64, maxBelowTop: -48 },
gold: { size: 9, tries: 4, minHeight: -64, maxBelowTop: 32, trapezoid: true },
redstoneLower: { size: 8, tries: 8, minAboveBottom: -32, maxAboveBottom: 32, trapezoid: true },
redstone: { size: 8, tries: 4, minAboveBottom: 0, maxHeight: 15 },
lapis: { size: 7, tries: 2, minAboveBottom: -32, maxAboveBottom: 32, trapezoid: true },
lapisBuried: { size: 7, tries: 4, minAboveBottom: 0, maxHeight: 32 },
emerald: { size: 3, tries: 100, minHeight: -16, maxHeight: 480, trapezoid: true },
diamond: { size: 4, tries: 7, minAboveBottom: -80, maxAboveBottom: 80, trapezoid: true },
diamondBuried: { size: 8, tries: 4, minAboveBottom: -80, maxAboveBottom: 80, trapezoid: true },
diamondLarge: { size: 12, tries: 1/9, minAboveBottom: -80, maxAboveBottom: 80, trapezoid: true },
}
return model
}
}

Some files were not shown because too many files have changed in this diff Show More