{"id":51463154,"url":"https://github.com/emortalmc/TNT","last_synced_at":"2026-07-25T01:00:36.263Z","repository":{"id":48133958,"uuid":"516380861","full_name":"emortalmc/TNT","owner":"emortalmc","description":"TNT is an experimental world format for Minestom","archived":true,"fork":false,"pushed_at":"2023-12-15T02:34:42.000Z","size":288,"stargazers_count":32,"open_issues_count":6,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-07T06:39:54.498Z","etag":null,"topics":["minestom","minestom-extension","minestom-library"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/emortalmc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"patreon":"emortaldev","custom":["paypal.me/emortaldev"]}},"created_at":"2022-07-21T13:23:01.000Z","updated_at":"2024-04-14T10:44:34.000Z","dependencies_parsed_at":"2023-12-15T03:49:15.869Z","dependency_job_id":null,"html_url":"https://github.com/emortalmc/TNT","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/emortalmc/TNT","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emortalmc%2FTNT","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emortalmc%2FTNT/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emortalmc%2FTNT/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emortalmc%2FTNT/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emortalmc","download_url":"https://codeload.github.com/emortalmc/TNT/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emortalmc%2FTNT/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35861394,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-24T02:00:07.870Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["minestom","minestom-extension","minestom-library"],"created_at":"2026-07-06T08:00:23.216Z","updated_at":"2026-07-25T01:00:36.251Z","avatar_url":"https://github.com/emortalmc.png","language":"Java","funding_links":["https://patreon.com/emortaldev","paypal.me/emortaldev"],"categories":["Java"],"sub_categories":[],"readme":"\u003cimg src=\"https://github.com/EmortalMC/TNT/blob/main/.github/tntlogo.png?raw=true\" width=\"40%\" alt=\"EmortalMC Banner\"\u003e\n\n# TNT\nTNT is a world format for Minestom designed for super fast 🚀 loading and portability.\n\nTNT should only be used for small worlds.\n\n\n## Check out the [polar](https://github.com/hollow-cube/polar) world format created by Hollow Cube. It handles version updates and will work better.\n\n### ⚠ TNT is experimental and is not backwards compatible. Your worlds will break when TNT or Minecraft updates. It is highly recommended to keep your original worlds.\n\n## Cool stuff\n- Very fast loading times (23ms for my lobby - idk what Anvil is)\n- Small file size (~80kb in TNT vs ~13mb in Anvil for my lobby)\n- [Converts from Anvil automatically](#anvil-conversion)\n- [Very portable - can be loaded from databases](#tnt-sources)\n- Stores block nbt (e.g. sign text)\n- Stores cached light from Anvil (useful because only minestom-ce has a lighting engine)\n- [World saving](#saving)\n\nUnfortunately does not save entities (yet) as Minestom does not have entity (de)serialisation.\n\n# Usage\nImporting via Gradle (browse versions [here](https://repo.emortal.dev/#/releases/dev/emortal/tnt/TNT))\n```groovy\nrepositories {\n    maven { url \"https://repo.emortal.dev/releases\" }\n}\n\ndependencies {\n    implementation(\"dev.emortal.tnt:TNT:{releaseTag}\")\n}\n```\nCreating a Minestom instance\n\n```java\nInstanceContainer instance = MinecraftServer.getInstanceManager().createInstanceContainer();\nTNTLoader tntLoader = new TNTLoader(instance, new FileTNTSource(Path.of(\"path/to/world.tnt\")));\n// or\nTNTLoader tntLoader = new TNTLoader(instance, \"path/to/world.tnt\")\n        \ninstance.setChunkLoader(tntLoader);\n```\n\n## Signs are blank? (or any other block has no data)\nTNT needs some block handlers in order to load block data.\n\nYou can find some [example handlers in Immortal](https://github.com/EmortalMC/Immortal/tree/main/src/main/kotlin/dev/emortal/immortal/blockhandler) which are then registered like [this](https://github.com/EmortalMC/Immortal/blob/ea9f03249d01b7f2544bd96d588e6341d7bfbc99/src/main/kotlin/dev/emortal/immortal/ImmortalExtension.kt#L409)\n\n\n## Anvil Conversion\nIn order for TNT to convert a TNT world automatically, the Anvil folder and TNT file need to be named the same and be in the same folder.\n\nFor example:\n - /worlds/world/ \u003c- Anvil world folder\n - /worlds/world.tnt \u003c- TNT world file (Put this path into the `TNTSource`)\n \nYou may also convert an anvil world to TNT manually with `TNT.convertAnvilToTNT(pathToAnvil, tntSaveSource)`\n \n## TNT Sources\nTNT worlds can be loaded and saved wherever you want (however only `FileTNTSource` is built in)\n\nFor example, you could make it read from Redis, MongoDB, MySQL or any sort of datastore.\n\nYou can do this by extending `TNTSource` and creating your own source.\n\n## Saving\nUse `TNT.convertChunksToTNT(chunkList, source)`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femortalmc%2FTNT","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femortalmc%2FTNT","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femortalmc%2FTNT/lists"}