{"id":13692883,"url":"https://github.com/papyrus-mc/papyruscs","last_synced_at":"2025-05-02T20:30:28.651Z","repository":{"id":37997926,"uuid":"178599681","full_name":"papyrus-mc/papyruscs","owner":"papyrus-mc","description":"PapyrusCS renders maps of Minecraft: Bedrock Edition worlds using C#, LevelDB and leaflet. ","archived":false,"fork":false,"pushed_at":"2023-08-10T06:42:07.000Z","size":6779,"stargazers_count":256,"open_issues_count":54,"forks_count":42,"subscribers_count":21,"default_branch":"master","last_synced_at":"2025-05-01T12:56:57.095Z","etag":null,"topics":["bedrock","csharp","dotnet-core2-2","leaflet","leveldb","linux","map","minecraft","windows"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/papyrus-mc.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2019-03-30T19:01:53.000Z","updated_at":"2025-05-01T10:09:53.000Z","dependencies_parsed_at":"2024-04-12T23:29:00.363Z","dependency_job_id":"59af9390-172a-436f-9ed9-4094b6edd303","html_url":"https://github.com/papyrus-mc/papyruscs","commit_stats":null,"previous_names":["mjungnickel18/papyruscs"],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/papyrus-mc%2Fpapyruscs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/papyrus-mc%2Fpapyruscs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/papyrus-mc%2Fpapyruscs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/papyrus-mc%2Fpapyruscs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/papyrus-mc","download_url":"https://codeload.github.com/papyrus-mc/papyruscs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252103821,"owners_count":21695374,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["bedrock","csharp","dotnet-core2-2","leaflet","leveldb","linux","map","minecraft","windows"],"created_at":"2024-08-02T17:01:03.129Z","updated_at":"2025-05-02T20:30:23.637Z","avatar_url":"https://github.com/papyrus-mc.png","language":"C#","funding_links":["https://paypal.me/mjungnickelpapyrus"],"categories":["Visualization"],"sub_categories":["World"],"readme":"Chat: [![Discord](https://img.shields.io/discord/569841820092203011.svg?logo=discord\u0026logoColor=white)](https://discord.gg/J2sBaXa) \u003cbr\u003e\nWindows: [![Build status](https://ci.appveyor.com/api/projects/status/tfspbbi72bx73qg8?svg=true)](https://ci.appveyor.com/project/mjungnickel18/papyruscs) \u003cbr\u003e\nLinux: [![Build status](https://ci.appveyor.com/api/projects/status/xo9ew31l49hayjcm?svg=true)](https://ci.appveyor.com/project/mjungnickel18/papyruscs-ytqjm) \u003cbr\u003e\n\n# Papyrus\n\nA Minecraft: Bedrock Edition map renderer.\n\nPapayrus renders a top-down map of every already explored chunk.\nIt works on Windows and on Linux, and it outputs HTML and images suitable for displaying on the web.\n\n* [Intro](#intro)\n* [Setup](#setup)\n* [Usage](#usage)\n* [Building](#building)\n* [Contributing](#contribute-xor-support)\n* [What's new - the changelog](#changelog)\n* [Other notes](#other-notes)\n\n## Intro\nPapyrus is a tool to render Minecraft: Bedrock Edition (MCBE) worlds on the web.\nIt's written in C# and powered by .NET Core.\nYou can view an example [here](http://papyrus.gwsa.de/).\n\nThere are several tools which work for Java Edition.\nMCBE worlds don't use the Anvil format like in the Java Edition.\nMojang chose a [modified version](https://github.com/Mojang/leveldb-mcpe) of Google's [LevelDB](http://leveldb.org/) to save MCBE maps.\nPapyrus reads these worlds and assembles a render of every pre-generated chunk.\n\n\n## Contribute xor support\nIf you want to help improving Papyrus please consider forking the repository, making your changes, and proposing a PR.\n\nWant to buy me a coffee (I love coffee)? [Donate via PayPal ♥](https://paypal.me/mjungnickelpapyrus)\n\n## Setup\n\n### Easy mode - Windows\n- Grab the Windows [pre-built binaries](https://github.com/mjungnickel18/papyruscs/releases).\n- Unpack the zip file.\n- Optional: [update the textures](#updating-the-textures)\n- Then follow the [usage instructions](#usage).\n\n### Easy mode - Linux\n- Grab the Linux [pre-built binaries](https://github.com/mjungnickel18/papyruscs/releases).\n- Make sure that your graphics libs are up-to-date.\nOn Ubuntu/Debian, that looks like:\n```\nsudo apt-get update\nsudo apt-get install libgdiplus\nsudo apt-get install libc6-dev\n```\n- Make the `PapyrusCs` binary executable:\n```chmod +x PapyrusCs```\n- Optional: [update the textures](#updating-the-textures)\n- Then follow the [usage instructions](#usage).\n\n### Hard mode - build it yourself\n\nSee the [building](#building) instructions.\n\n### Updating the textures\nPapyrus comes with some of the required textures, but recent MCBE releases may have added more.\nYou can update with a texture pack in order to generate everything just right.\n\nThe vanilla resource pack with the default textures can be downloaded from [here](https://aka.ms/resourcepacktemplate).\nExtract `textures/terrain_texture.json` and `textures/blocks/*` from that zip.\nWherever you unzipped Papyrus, replace its `textures/` directory with what you got from the resource pack.\n\n## Usage\n\nPapyrusCs is a command-line tool.\nSupported flags are shown here.\n`--world` and `--output` are required; the rest are optional.\n\n```papyruscs --world \"My World/db\" --output \"C:\\papyrus\"```\n\nOn Windows, you can now start `papyruscs.exe` in interactive mode.\nRun without any arguments, and it will try to find your local minecraft maps.\n\nThe rest of the parameters are listed if you run with `--help`:\n\n```\n\nPapyrusCs 0.5.0\nCopyright (C) 2020 Markus Jungnickel\n\n  -w, --world                     Sets the path the Minecraft Bedrock Edition Map\n\n  -o, --output                    Sets the output path for the generated map tiles\n\n  --htmlfile                      (Default: map.html) Sets name of html map file\n\n  -s, --strategy                  (Default: Dataflow) Sets the render strategy. Valid is only Dataflow\n\n  --coords                        (Default: false) Render text coordinates in each chunk\n\n  --limitx                        Limits the chunk rendering in the x dimension (inclusive). Provide two\n                                  values with comma separated, eg: -10,10\n\n  --limitz                        Limits the chunk rendering in the z dimension (inclusive). Provide two\n                                  values with comma separated, eg: -10,10\n\n  -y, --limity                    (Default: -1) Limits the chunk rendering in the y dimension\n                                  (inclusive). For y provide just one positive value, eg: 10. -1 means:\n                                  all\n\n  --threads                       (Default: 16) Set maximum of used threads\n\n  --maxqueue                      (Default: 128) Set maximum queue length for the pipeline stages\n\n  -r, --rendermode                (Default: Heightmap) RenderMode: Basic - Render without brightness\n                                  adjustment. Heightmap - Render with brightness adjustment based on\n                                  brillouin function and height of block\n\n  --brillouin_j                   (Default: 10000) Sets factor j for heightmap brightness formula\n                                  brillouin: brightness = 1+brillouin((height-offset) / divider): See\n                                  https://de.wikipedia.org/wiki/Brillouin-Funktion for a diagram of the\n                                  function.\n\n  --brillouin_divider             (Default: 20) Sets divider for heightmap brightness formula brillouin:\n                                  brightness = 1+brillouin((height-offset) / divider). See\n                                  https://de.wikipedia.org/wiki/Brillouin-Funktion for a diagram of the\n                                  function.\n\n  --brillouin_offset              (Default: 64) Sets the offset for heightmap brightness formula\n                                  brillouin: brightness = 1+brillouin((height-offset) / divider). See\n                                  https://de.wikipedia.org/wiki/Brillouin-Funktion for a diagram of the\n                                  function.\n\n  -f                              (Default: png) Sets the output file format\n\n  -q                              (Default: -1) Sets quality for jpg or web format (0-100, -1 for\n                                  lossless webp)\n\n  --forceoverwrite                (Default: false) Forces PapyrusCs to render every chunk again\n\n  -d, --dim                       (Default: 0) Selects the dimension. 0: Overworld, 1: Nether, 2: End\n\n  -p, --profile                   (Default: ) Optional profile: 'underground', 'aquatic', 'ore',\n                                  'stronghold'\n\n  --trimceiling                   (Default: false) Removes the ceiling starting from y-max.\n                                  Automatically activated for nether\n\n  --notrimceiling                 (Default: false) Disables auto ceiling removal for Nether\n\n  --deleteexistingupdatefolder    (Default: false) Delete an existing update/dimX folder right before\n                                  creating a possible new update\n\n  --chunksperdimension            (Default: 2) Sets the chunks per X and Y dimension for the generated\n                                  tiles. 1 =\u003e 1 chunk per tile, 2 =\u003e 4 chunks per tile and so on\n\n  --playericons                   (Default: false) Renders player markers on the map. Player names must\n                                  be manually entered. After running, edit '/map/playersData.js' text\n                                  file to modify player names and colors.\n\n  --render_map                    (Default: true) Renders the map. This is the main feature of this\n                                  program. Only disable this in special circumstances, such as if you\n                                  want to quickly update player markers without updating the map.\n\n  --help                          Display this help screen.\n\n  --version                       Display version information.\n\n\n```\n\n\n## Building\nPapyrus runs on .NET Core 3.0+.\nFirst, make sure you have [.NET Core 3.0](https://dotnet.microsoft.com/download/dotnet-core/3.0) on your development machine.\n\nTo compile for Windows, either use a recent Visual Studio or run:\n```dotnet publish PapyrusCs -c Release --self-contained --runtime win-x64```\n\nTo compile for Linux run:\n```dotnet publish PapyrusCs -c Debug --self-contained --runtime linux-x64```\n\n### Additional dependencies\nPapyrusCs depends on a few external libraries with some custom changes.\nThe source for the modified versions is included in this repository.\nAll needed dependencies are already included in this repository or automatically downloaded via NuGet.\n\n- [level-db-sharp](https://github.com/meebey/leveldb-sharp): This project used a modified version of leveldb-sharp. [license](https://github.com/mjungnickel18/papyruscs/blob/master/leveldb-sharp-std/license.md)\n- [imageformats](https://github.com/dbrant/imageformats): This project uses a modified version of image formats TgaReader\n[license](https://github.com/mjungnickel18/papyruscs/blob/master/Imports/ImageFormats-std/license.md)\n- [leveldb-mcpe](https://github.com/Mojang/leveldb-mcpe): This project uses the leveldb native library for windows64 and linux64. [license](https://github.com/Mojang/leveldb-mcpe/blob/master/LICENSE)\n\n\n## Changelog\n\n## Version 0.5.0 - So many things\nUpdate to .NET Core 3.1\nUpdated textures\n- Fixed null ref exception with bee hives\n- Interactive mode (Thx to aaronaxvig)\n- Crc32 Fix (Thx to bennydiamond)\n- Updated Readme (Thx to PaulWalkerUK)\n- Player Markser (thx to barrett777)\n\n\n## Version 0.4.0 - Memory usage and textures improvements\nA few tweaks to improve memory usage:\n\nuse parameter --threads 1 --maxqueue 1 to limit memory usage.\n\nThis version also includes two pull requests:\n * Significantly improve memory usage when rendering zoom levels (#21 by barrett777)\n * Fixed bunch of annoyances (#19 by jflin404)\n\nThx for the help!\nThx to Mecu for updating the docs!\n\n\n## Version 0.3.7 - .NET Core 3 Update\nUpdate to .NET Core 3\nChanged link to openlayers\nSome other optimizations...\n\n## Version 0.3.6\nLess memory usage and faster!\nMore robust!\n\n## Version 0.3.5\nThx to @hach-que!\n```\n--profile underground|aquatic|ore|stronghold\n```\nadd underground, aquatic, ore OR stronghold after `--profile` for the specific profile view.\n\n## Version 0.3.3\nOpenLayers as new default mapping library! Thanks for the contribution!\nUse\n```\n--use_leaflet_legacy\n```\noptions if you want to use the old leaflet instead.\n\n## Version 0.3.2\nTexture fixes\\\n--brillouin_offset x parameter for worlds with low/high ground level\\\n--forceoverwrite parameter to force reender everything\\\n\n## Version 0.3\n### What's new:\n#### New folder structure:\nThe new folder structure is:\n```\noutputdir\n|-map\n|   |-dim0\n|   |-dim1\n|   |-dim2\n|   |-map.html\n|   |-playersData.js\n|-update\n|   |-dim0\n|   |-dim1\n|   |-dim2\n|   |-map.html\n|   |-playersData.js\n|-chunks.sqlite\n|-chunks-backup.sqlite\n```\n#### Incremental Rendering:\n\nWith strategy Dataflow (default) PapyrusCs creates a sqlite database with chunk CRCs to check if a update rendering is necessary.\nPapyrusCs creates an update folder, which contains only the files that were updated (it will be copied to the map folder as well)\nSo you just have to upload the content of the update folder after an update of the map.\n\nWith the option \n```\n--deleteexistingupdatefolder\n```\nthe current dimension update folder to be rendered (dim0/1/2) will be deleted before the next update will be rendered.\nThis is useful if you don't want to upload previous updated files again. Of course you can delete this folder by hand yourself.\n\n#### Dimensions\nPapyrusCs supports dimensions now: Overworld, Nether, The End\\\nTo render another dimension, add the --dim \u003cdimension\u003e parameter (default --dim 0):\\\n```\n--dim 0 (=Overworld)\n--dim 1 (=Nether)\n--dim 2 (=The End)\n```\nTo render all dimensions in one map with layers [See papyrus bedrock server](http://papyrus.gwsa.de/), you have to call PapyrusCs three times. Example:\\\n```\nPapyrusCs -w \u003cyourworld\u003e -o \u003cyouroutputfolder\u003e -dim 0\nPapyrusCs -w \u003cyourworld\u003e -o \u003cyouroutputfolder\u003e -dim 1\nPapyrusCs -w \u003cyourworld\u003e -o \u003cyouroutputfolder\u003e -dim 2\n```  \nThis will generate all dimensions as maps.\\\n\n#### Outputformat\nMultiple formats are now supported: jpg, png, webp\\\nYou now can select the output format with -f jpg or -f png or -f webp\\\nFor jpg and webp, you can select the quality:\\\n\njpg: 0-100 (100 best)\\\nwebp: 0-100 (100 best but lossy. Value -1 is lossless and usually smaller than 100, -1 is also default)\\\n\nYou can set that value with the parameter -q\n\nExample\n```\n-f webp -q -1\n-f png\n-f jpg -q 20\n```\n\n## Other notes\n\n### Special thanks to...\n... [clarkx86](https://github.com/clarkx86) for his team work and idea giving and his port in node.js.\n\n### Disclaimer\nPapyrus is in no way affiliated with Mojang or Minecraft.\n\nContact: [papyrus@gwsa.de](mailto:papyrus@gwsa.de?subject=GitHub%20Papyrus)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpapyrus-mc%2Fpapyruscs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpapyrus-mc%2Fpapyruscs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpapyrus-mc%2Fpapyruscs/lists"}